@a-type/ui 4.1.2 → 4.1.4
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/cjs/components/collapsible/Collapsible.js +1 -1
- package/dist/cjs/components/collapsible/Collapsible.js.map +1 -1
- package/dist/cjs/components/contextMenu/contextMenu.js +2 -2
- package/dist/cjs/components/contextMenu/contextMenu.js.map +1 -1
- package/dist/cjs/components/dialog/Dialog.js +3 -3
- package/dist/cjs/components/dialog/Dialog.js.map +1 -1
- package/dist/cjs/components/quickAction/QuickAction.d.ts +9 -6
- package/dist/cjs/components/quickAction/QuickAction.js +45 -25
- package/dist/cjs/components/quickAction/QuickAction.js.map +1 -1
- package/dist/cjs/components/select/Select.js +3 -3
- package/dist/cjs/components/tooltip/Tooltip.js +1 -1
- package/dist/cjs/components/tooltip/Tooltip.js.map +1 -1
- package/dist/cjs/systems/ValueMonitor.d.ts +8 -0
- package/dist/cjs/systems/ValueMonitor.js +40 -0
- package/dist/cjs/systems/ValueMonitor.js.map +1 -0
- package/dist/cjs/uno/rules/clipPath.d.ts +2 -0
- package/dist/cjs/uno/rules/clipPath.js +49 -0
- package/dist/cjs/uno/rules/clipPath.js.map +1 -0
- package/dist/cjs/uno/rules/index.js +2 -0
- package/dist/cjs/uno/rules/index.js.map +1 -1
- package/dist/cjs/uno/variants/baseUi.d.ts +2 -0
- package/dist/cjs/uno/variants/baseUi.js +16 -0
- package/dist/cjs/uno/variants/baseUi.js.map +1 -0
- package/dist/cjs/uno/variants/index.js +2 -0
- package/dist/cjs/uno/variants/index.js.map +1 -1
- package/dist/css/main.css +5 -5
- package/dist/esm/components/collapsible/Collapsible.js +1 -1
- package/dist/esm/components/collapsible/Collapsible.js.map +1 -1
- package/dist/esm/components/contextMenu/contextMenu.js +2 -2
- package/dist/esm/components/contextMenu/contextMenu.js.map +1 -1
- package/dist/esm/components/dialog/Dialog.js +3 -3
- package/dist/esm/components/dialog/Dialog.js.map +1 -1
- package/dist/esm/components/quickAction/QuickAction.d.ts +9 -6
- package/dist/esm/components/quickAction/QuickAction.js +41 -21
- package/dist/esm/components/quickAction/QuickAction.js.map +1 -1
- package/dist/esm/components/select/Select.js +3 -3
- package/dist/esm/components/tooltip/Tooltip.js +1 -1
- package/dist/esm/components/tooltip/Tooltip.js.map +1 -1
- package/dist/esm/systems/ValueMonitor.d.ts +8 -0
- package/dist/esm/systems/ValueMonitor.js +34 -0
- package/dist/esm/systems/ValueMonitor.js.map +1 -0
- package/dist/esm/uno/rules/clipPath.d.ts +2 -0
- package/dist/esm/uno/rules/clipPath.js +46 -0
- package/dist/esm/uno/rules/clipPath.js.map +1 -0
- package/dist/esm/uno/rules/index.js +2 -0
- package/dist/esm/uno/rules/index.js.map +1 -1
- package/dist/esm/uno/variants/baseUi.d.ts +2 -0
- package/dist/esm/uno/variants/baseUi.js +13 -0
- package/dist/esm/uno/variants/baseUi.js.map +1 -0
- package/dist/esm/uno/variants/index.js +2 -0
- package/dist/esm/uno/variants/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/collapsible/Collapsible.tsx +71 -74
- package/src/components/contextMenu/contextMenu.tsx +66 -67
- package/src/components/dialog/Dialog.tsx +3 -6
- package/src/components/quickAction/QuickAction.tsx +77 -42
- package/src/components/select/Select.tsx +241 -241
- package/src/components/tooltip/Tooltip.tsx +134 -135
- package/src/systems/ValueMonitor.ts +41 -0
- package/src/uno/rules/clipPath.ts +44 -0
- package/src/uno/rules/index.ts +2 -0
- package/src/uno/variants/baseUi.ts +13 -0
- package/src/uno/variants/index.ts +3 -0
|
@@ -1,241 +1,241 @@
|
|
|
1
|
-
import {
|
|
2
|
-
Select as BaseSelect,
|
|
3
|
-
SelectArrowProps,
|
|
4
|
-
SelectIconProps,
|
|
5
|
-
SelectItemIndicatorProps,
|
|
6
|
-
SelectItemProps,
|
|
7
|
-
SelectPopupProps,
|
|
8
|
-
SelectPositionerProps,
|
|
9
|
-
SelectRootProps,
|
|
10
|
-
} from '@base-ui/react/select';
|
|
11
|
-
import classNames, { clsx } from 'clsx';
|
|
12
|
-
import { Ref } from 'react';
|
|
13
|
-
import { withClassName } from '../../hooks/withClassName.js';
|
|
14
|
-
import { GroupScaleReset } from '../../systems/GroupScale.js';
|
|
15
|
-
import { Button, ButtonProps } from '../button/Button.js';
|
|
16
|
-
import { getButtonClassName } from '../button/classes.js';
|
|
17
|
-
import { Icon } from '../icon/index.js';
|
|
18
|
-
import { ArrowSvg } from '../utility/ArrowSvg.js';
|
|
19
|
-
|
|
20
|
-
export const SelectItem = ({
|
|
21
|
-
ref: forwardedRef,
|
|
22
|
-
children,
|
|
23
|
-
className,
|
|
24
|
-
...props
|
|
25
|
-
}: SelectItemProps & {
|
|
26
|
-
ref?: React.Ref<HTMLDivElement>;
|
|
27
|
-
}) => {
|
|
28
|
-
return (
|
|
29
|
-
<SelectItemRoot className={className} {...props} ref={forwardedRef}>
|
|
30
|
-
<SelectItemText>{children}</SelectItemText>
|
|
31
|
-
<SelectItemIndicator />
|
|
32
|
-
</SelectItemRoot>
|
|
33
|
-
);
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
export const SelectItemRoot = withClassName(
|
|
37
|
-
BaseSelect.Item,
|
|
38
|
-
'layer-components:(
|
|
39
|
-
'
|
|
40
|
-
);
|
|
41
|
-
export const SelectItemIndicatorRoot = withClassName(
|
|
42
|
-
BaseSelect.ItemIndicator,
|
|
43
|
-
'layer-components:(absolute left-0 w-25px inline-flex items-center justify-center)',
|
|
44
|
-
);
|
|
45
|
-
export const SelectItemIndicator = (props: SelectItemIndicatorProps) => (
|
|
46
|
-
<SelectItemIndicatorRoot {...props}>
|
|
47
|
-
<Icon name="check" />
|
|
48
|
-
</SelectItemIndicatorRoot>
|
|
49
|
-
);
|
|
50
|
-
export const SelectItemText = withClassName(BaseSelect.ItemText, '');
|
|
51
|
-
export const SelectGroup = BaseSelect.Group;
|
|
52
|
-
|
|
53
|
-
export const SelectRoot = BaseSelect.Root;
|
|
54
|
-
export const selectTriggerClassName = classNames(
|
|
55
|
-
getButtonClassName({}),
|
|
56
|
-
'layer-components:([all:unset] inline-flex data-[placeholder]:color-gray-dark)',
|
|
57
|
-
);
|
|
58
|
-
export const SelectTriggerBase = withClassName(
|
|
59
|
-
BaseSelect.Trigger,
|
|
60
|
-
selectTriggerClassName,
|
|
61
|
-
);
|
|
62
|
-
export const UnstyledSelectTrigger = BaseSelect.Trigger;
|
|
63
|
-
|
|
64
|
-
export type SelectTriggerProps = ButtonProps;
|
|
65
|
-
export const SelectTrigger = function SelectTrigger({
|
|
66
|
-
ref,
|
|
67
|
-
children,
|
|
68
|
-
render,
|
|
69
|
-
...props
|
|
70
|
-
}: SelectTriggerProps & {
|
|
71
|
-
ref?: React.Ref<HTMLButtonElement>;
|
|
72
|
-
}) {
|
|
73
|
-
return (
|
|
74
|
-
<UnstyledSelectTrigger
|
|
75
|
-
{...props}
|
|
76
|
-
className="layer-components:(font-normal)"
|
|
77
|
-
ref={ref}
|
|
78
|
-
render={render || <Button className="gap-2 font-normal" />}
|
|
79
|
-
>
|
|
80
|
-
{children || (
|
|
81
|
-
<>
|
|
82
|
-
<SelectValue />
|
|
83
|
-
<SelectIcon />
|
|
84
|
-
</>
|
|
85
|
-
)}
|
|
86
|
-
</UnstyledSelectTrigger>
|
|
87
|
-
);
|
|
88
|
-
};
|
|
89
|
-
|
|
90
|
-
export const SelectValue = withClassName(BaseSelect.Value, 'flex flex-row');
|
|
91
|
-
export const SelectGroupLabel = withClassName(
|
|
92
|
-
BaseSelect.GroupLabel,
|
|
93
|
-
'px-25px text-xs leading-6 color-black
|
|
94
|
-
);
|
|
95
|
-
export const SelectSeparator = withClassName(
|
|
96
|
-
BaseSelect.Separator,
|
|
97
|
-
'h-1px bg-gray-light
|
|
98
|
-
);
|
|
99
|
-
export const SelectIcon = ({
|
|
100
|
-
ref: forwardedRef,
|
|
101
|
-
className,
|
|
102
|
-
...props
|
|
103
|
-
}: SelectIconProps & {
|
|
104
|
-
ref?: React.Ref<HTMLDivElement>;
|
|
105
|
-
}) => {
|
|
106
|
-
return (
|
|
107
|
-
<BaseSelect.Icon
|
|
108
|
-
className={classNames('ml-auto color-inherit', className)}
|
|
109
|
-
{...props}
|
|
110
|
-
ref={forwardedRef}
|
|
111
|
-
>
|
|
112
|
-
<Icon name="chevron" className="relative top-1px h-[12px] w-[12px]" />
|
|
113
|
-
</BaseSelect.Icon>
|
|
114
|
-
);
|
|
115
|
-
};
|
|
116
|
-
|
|
117
|
-
export const SelectArrow = ({ className, ...props }: SelectArrowProps) => (
|
|
118
|
-
<BaseSelect.Arrow
|
|
119
|
-
className={clsx('layer-components:arrow', className)}
|
|
120
|
-
{...props}
|
|
121
|
-
>
|
|
122
|
-
<ArrowSvg />
|
|
123
|
-
</BaseSelect.Arrow>
|
|
124
|
-
);
|
|
125
|
-
|
|
126
|
-
const scrollArrowClass = clsx(
|
|
127
|
-
'layer-components:(z-1 h-1rem w-full flex cursor-default select-none items-center justify-center rounded-sm text-center text-xs bg-white)',
|
|
128
|
-
'layer-components:before:(absolute left-0 h-full w-full content-empty)',
|
|
129
|
-
'layer-components:data-[direction=up]:data-[side=none]:before:(-top-full)',
|
|
130
|
-
'layer-components:data-[direction=down]:(bottom-0 data-[side=none]:before:-bottom-full)',
|
|
131
|
-
);
|
|
132
|
-
|
|
133
|
-
const contentStyle = {
|
|
134
|
-
zIndex: 1001,
|
|
135
|
-
'--local-corner-scale': '1',
|
|
136
|
-
} as React.CSSProperties;
|
|
137
|
-
const viewportStyle = { '--local-corner-scale': '0.9' } as React.CSSProperties;
|
|
138
|
-
export const SelectContent = ({
|
|
139
|
-
ref: forwardedRef,
|
|
140
|
-
children,
|
|
141
|
-
className,
|
|
142
|
-
side,
|
|
143
|
-
sideOffset = 8,
|
|
144
|
-
align,
|
|
145
|
-
alignOffset,
|
|
146
|
-
alignItemWithTrigger = true,
|
|
147
|
-
disableAnchorTracking,
|
|
148
|
-
arrowPadding,
|
|
149
|
-
anchor,
|
|
150
|
-
collisionAvoidance,
|
|
151
|
-
collisionBoundary,
|
|
152
|
-
collisionPadding,
|
|
153
|
-
sticky,
|
|
154
|
-
positionMethod,
|
|
155
|
-
...props
|
|
156
|
-
}: SelectPopupProps &
|
|
157
|
-
SelectPositionerProps & { ref?: Ref<HTMLDivElement> }) => {
|
|
158
|
-
return (
|
|
159
|
-
<BaseSelect.Portal>
|
|
160
|
-
<GroupScaleReset>
|
|
161
|
-
<BaseSelect.Backdrop />
|
|
162
|
-
<BaseSelect.Positioner
|
|
163
|
-
side={side}
|
|
164
|
-
sideOffset={sideOffset}
|
|
165
|
-
align={align}
|
|
166
|
-
alignOffset={alignOffset}
|
|
167
|
-
alignItemWithTrigger={alignItemWithTrigger}
|
|
168
|
-
disableAnchorTracking={disableAnchorTracking}
|
|
169
|
-
arrowPadding={arrowPadding}
|
|
170
|
-
anchor={anchor}
|
|
171
|
-
collisionAvoidance={collisionAvoidance}
|
|
172
|
-
collisionBoundary={collisionBoundary}
|
|
173
|
-
collisionPadding={collisionPadding}
|
|
174
|
-
sticky={sticky}
|
|
175
|
-
positionMethod={positionMethod}
|
|
176
|
-
className={classNames(
|
|
177
|
-
'layer-components:(z-1 select-none outline-none)',
|
|
178
|
-
'layer-components:(transform-origin-[--transform-origin])',
|
|
179
|
-
)}
|
|
180
|
-
>
|
|
181
|
-
<SelectArrow
|
|
182
|
-
className={clsx(
|
|
183
|
-
'layer-components:(transform transition border-black)',
|
|
184
|
-
'layer-components:data-[closed]:(scale-0 opacity-0)',
|
|
185
|
-
'layer-components:data-[open]:(scale-100 opacity-100)',
|
|
186
|
-
)}
|
|
187
|
-
/>
|
|
188
|
-
<BaseSelect.Popup
|
|
189
|
-
className={classNames(
|
|
190
|
-
'layer-components:(overflow-hidden border border rounded-md border-solid bg-clip-padding shadow-lg transition bg-white border-black)',
|
|
191
|
-
'layer-components:transform-origin-[var(--transform-origin)]',
|
|
192
|
-
'layer-components:data-[starting-style]:data-[side=bottom]:(translate-y-4px opacity-0)',
|
|
193
|
-
'layer-components:data-[ending-style]:data-[side=bottom]:(translate-y-4px opacity-0)',
|
|
194
|
-
'layer-components:data-[starting-style]:data-[side=top]:(translate-y--4px opacity-0)',
|
|
195
|
-
'layer-components:data-[ending-style]:data-[side=top]:(translate-y-0 opacity-0)',
|
|
196
|
-
'layer-components:data-[starting-style]:data-[side=right]:(translate-x-4px opacity-0)',
|
|
197
|
-
'layer-components:data-[ending-style]:data-[side=right]:(translate-x-0 opacity-0)',
|
|
198
|
-
'layer-components:data-[starting-style]:data-[side=left]:(translate-x--4px opacity-0)',
|
|
199
|
-
'layer-components:data-[ending-style]:data-[side=left]:(translate-x-0 opacity-0)',
|
|
200
|
-
'important:motion-reduce:animate-none',
|
|
201
|
-
'layer-components:data-[side=none]:(min-w-[calc(var(--anchor-width)+2rem)] translate-y-0px)',
|
|
202
|
-
'layer-components:(max-h-[var(--available-height)] min-w-[var(--anchor-width)])',
|
|
203
|
-
className,
|
|
204
|
-
)}
|
|
205
|
-
style={contentStyle}
|
|
206
|
-
{...props}
|
|
207
|
-
ref={forwardedRef}
|
|
208
|
-
>
|
|
209
|
-
<BaseSelect.ScrollUpArrow className={scrollArrowClass}>
|
|
210
|
-
<Icon name="chevron" className="rotate-180" />
|
|
211
|
-
</BaseSelect.ScrollUpArrow>
|
|
212
|
-
<BaseSelect.List style={viewportStyle}>{children}</BaseSelect.List>
|
|
213
|
-
<BaseSelect.ScrollDownArrow className={scrollArrowClass}>
|
|
214
|
-
<Icon name="chevron" />
|
|
215
|
-
</BaseSelect.ScrollDownArrow>
|
|
216
|
-
</BaseSelect.Popup>
|
|
217
|
-
</BaseSelect.Positioner>
|
|
218
|
-
</GroupScaleReset>
|
|
219
|
-
</BaseSelect.Portal>
|
|
220
|
-
);
|
|
221
|
-
};
|
|
222
|
-
|
|
223
|
-
export interface SelectProps<T extends string = string>
|
|
224
|
-
extends SelectRootProps<T> {}
|
|
225
|
-
const SelectBase = SelectRoot;
|
|
226
|
-
|
|
227
|
-
export const Select = Object.assign(SelectBase, {
|
|
228
|
-
Root: SelectRoot,
|
|
229
|
-
Item: SelectItem,
|
|
230
|
-
Group: SelectGroup,
|
|
231
|
-
Trigger: SelectTrigger,
|
|
232
|
-
Value: SelectValue,
|
|
233
|
-
GroupLabel: SelectGroupLabel,
|
|
234
|
-
Separator: SelectSeparator,
|
|
235
|
-
Icon: SelectIcon,
|
|
236
|
-
Content: SelectContent,
|
|
237
|
-
Arrow: SelectArrow,
|
|
238
|
-
ItemRoot: SelectItemRoot,
|
|
239
|
-
ItemText: SelectItemText,
|
|
240
|
-
ItemIndicator: SelectItemIndicator,
|
|
241
|
-
});
|
|
1
|
+
import {
|
|
2
|
+
Select as BaseSelect,
|
|
3
|
+
SelectArrowProps,
|
|
4
|
+
SelectIconProps,
|
|
5
|
+
SelectItemIndicatorProps,
|
|
6
|
+
SelectItemProps,
|
|
7
|
+
SelectPopupProps,
|
|
8
|
+
SelectPositionerProps,
|
|
9
|
+
SelectRootProps,
|
|
10
|
+
} from '@base-ui/react/select';
|
|
11
|
+
import classNames, { clsx } from 'clsx';
|
|
12
|
+
import { Ref } from 'react';
|
|
13
|
+
import { withClassName } from '../../hooks/withClassName.js';
|
|
14
|
+
import { GroupScaleReset } from '../../systems/GroupScale.js';
|
|
15
|
+
import { Button, ButtonProps } from '../button/Button.js';
|
|
16
|
+
import { getButtonClassName } from '../button/classes.js';
|
|
17
|
+
import { Icon } from '../icon/index.js';
|
|
18
|
+
import { ArrowSvg } from '../utility/ArrowSvg.js';
|
|
19
|
+
|
|
20
|
+
export const SelectItem = ({
|
|
21
|
+
ref: forwardedRef,
|
|
22
|
+
children,
|
|
23
|
+
className,
|
|
24
|
+
...props
|
|
25
|
+
}: SelectItemProps & {
|
|
26
|
+
ref?: React.Ref<HTMLDivElement>;
|
|
27
|
+
}) => {
|
|
28
|
+
return (
|
|
29
|
+
<SelectItemRoot className={className} {...props} ref={forwardedRef}>
|
|
30
|
+
<SelectItemText>{children}</SelectItemText>
|
|
31
|
+
<SelectItemIndicator />
|
|
32
|
+
</SelectItemRoot>
|
|
33
|
+
);
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export const SelectItemRoot = withClassName(
|
|
37
|
+
BaseSelect.Item,
|
|
38
|
+
'layer-components:(relative h-36px min-h-touch-large flex flex-row select-none items-center pl-35px pr-4 text-md leading-4 color-black)',
|
|
39
|
+
'[&[data-highlighted]]:(outline-none color-black bg-gray-light) layer-components:[&[data-disabled]]:(pointer-events-none color-gray)',
|
|
40
|
+
);
|
|
41
|
+
export const SelectItemIndicatorRoot = withClassName(
|
|
42
|
+
BaseSelect.ItemIndicator,
|
|
43
|
+
'layer-components:(absolute left-0 w-25px inline-flex items-center justify-center)',
|
|
44
|
+
);
|
|
45
|
+
export const SelectItemIndicator = (props: SelectItemIndicatorProps) => (
|
|
46
|
+
<SelectItemIndicatorRoot {...props}>
|
|
47
|
+
<Icon name="check" />
|
|
48
|
+
</SelectItemIndicatorRoot>
|
|
49
|
+
);
|
|
50
|
+
export const SelectItemText = withClassName(BaseSelect.ItemText, '');
|
|
51
|
+
export const SelectGroup = BaseSelect.Group;
|
|
52
|
+
|
|
53
|
+
export const SelectRoot = BaseSelect.Root;
|
|
54
|
+
export const selectTriggerClassName = classNames(
|
|
55
|
+
getButtonClassName({}),
|
|
56
|
+
'layer-components:([all:unset] inline-flex data-[placeholder]:color-gray-dark)',
|
|
57
|
+
);
|
|
58
|
+
export const SelectTriggerBase = withClassName(
|
|
59
|
+
BaseSelect.Trigger,
|
|
60
|
+
selectTriggerClassName,
|
|
61
|
+
);
|
|
62
|
+
export const UnstyledSelectTrigger = BaseSelect.Trigger;
|
|
63
|
+
|
|
64
|
+
export type SelectTriggerProps = ButtonProps;
|
|
65
|
+
export const SelectTrigger = function SelectTrigger({
|
|
66
|
+
ref,
|
|
67
|
+
children,
|
|
68
|
+
render,
|
|
69
|
+
...props
|
|
70
|
+
}: SelectTriggerProps & {
|
|
71
|
+
ref?: React.Ref<HTMLButtonElement>;
|
|
72
|
+
}) {
|
|
73
|
+
return (
|
|
74
|
+
<UnstyledSelectTrigger
|
|
75
|
+
{...props}
|
|
76
|
+
className="layer-components:(font-normal)"
|
|
77
|
+
ref={ref}
|
|
78
|
+
render={render || <Button className="gap-2 font-normal" />}
|
|
79
|
+
>
|
|
80
|
+
{children || (
|
|
81
|
+
<>
|
|
82
|
+
<SelectValue />
|
|
83
|
+
<SelectIcon />
|
|
84
|
+
</>
|
|
85
|
+
)}
|
|
86
|
+
</UnstyledSelectTrigger>
|
|
87
|
+
);
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
export const SelectValue = withClassName(BaseSelect.Value, 'flex flex-row');
|
|
91
|
+
export const SelectGroupLabel = withClassName(
|
|
92
|
+
BaseSelect.GroupLabel,
|
|
93
|
+
'select-none px-25px text-xs leading-6 color-black',
|
|
94
|
+
);
|
|
95
|
+
export const SelectSeparator = withClassName(
|
|
96
|
+
BaseSelect.Separator,
|
|
97
|
+
'm-1 h-1px bg-gray-light',
|
|
98
|
+
);
|
|
99
|
+
export const SelectIcon = ({
|
|
100
|
+
ref: forwardedRef,
|
|
101
|
+
className,
|
|
102
|
+
...props
|
|
103
|
+
}: SelectIconProps & {
|
|
104
|
+
ref?: React.Ref<HTMLDivElement>;
|
|
105
|
+
}) => {
|
|
106
|
+
return (
|
|
107
|
+
<BaseSelect.Icon
|
|
108
|
+
className={classNames('ml-auto color-inherit', className)}
|
|
109
|
+
{...props}
|
|
110
|
+
ref={forwardedRef}
|
|
111
|
+
>
|
|
112
|
+
<Icon name="chevron" className="relative top-1px h-[12px] w-[12px]" />
|
|
113
|
+
</BaseSelect.Icon>
|
|
114
|
+
);
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
export const SelectArrow = ({ className, ...props }: SelectArrowProps) => (
|
|
118
|
+
<BaseSelect.Arrow
|
|
119
|
+
className={clsx('layer-components:arrow', className)}
|
|
120
|
+
{...props}
|
|
121
|
+
>
|
|
122
|
+
<ArrowSvg />
|
|
123
|
+
</BaseSelect.Arrow>
|
|
124
|
+
);
|
|
125
|
+
|
|
126
|
+
const scrollArrowClass = clsx(
|
|
127
|
+
'layer-components:(z-1 h-1rem w-full flex cursor-default select-none items-center justify-center rounded-sm text-center text-xs bg-white)',
|
|
128
|
+
'layer-components:before:(absolute left-0 h-full w-full content-empty)',
|
|
129
|
+
'layer-components:data-[direction=up]:data-[side=none]:before:(-top-full)',
|
|
130
|
+
'layer-components:data-[direction=down]:(bottom-0 data-[side=none]:before:-bottom-full)',
|
|
131
|
+
);
|
|
132
|
+
|
|
133
|
+
const contentStyle = {
|
|
134
|
+
zIndex: 1001,
|
|
135
|
+
'--local-corner-scale': '1',
|
|
136
|
+
} as React.CSSProperties;
|
|
137
|
+
const viewportStyle = { '--local-corner-scale': '0.9' } as React.CSSProperties;
|
|
138
|
+
export const SelectContent = ({
|
|
139
|
+
ref: forwardedRef,
|
|
140
|
+
children,
|
|
141
|
+
className,
|
|
142
|
+
side,
|
|
143
|
+
sideOffset = 8,
|
|
144
|
+
align,
|
|
145
|
+
alignOffset,
|
|
146
|
+
alignItemWithTrigger = true,
|
|
147
|
+
disableAnchorTracking,
|
|
148
|
+
arrowPadding,
|
|
149
|
+
anchor,
|
|
150
|
+
collisionAvoidance,
|
|
151
|
+
collisionBoundary,
|
|
152
|
+
collisionPadding,
|
|
153
|
+
sticky,
|
|
154
|
+
positionMethod,
|
|
155
|
+
...props
|
|
156
|
+
}: SelectPopupProps &
|
|
157
|
+
SelectPositionerProps & { ref?: Ref<HTMLDivElement> }) => {
|
|
158
|
+
return (
|
|
159
|
+
<BaseSelect.Portal>
|
|
160
|
+
<GroupScaleReset>
|
|
161
|
+
<BaseSelect.Backdrop />
|
|
162
|
+
<BaseSelect.Positioner
|
|
163
|
+
side={side}
|
|
164
|
+
sideOffset={sideOffset}
|
|
165
|
+
align={align}
|
|
166
|
+
alignOffset={alignOffset}
|
|
167
|
+
alignItemWithTrigger={alignItemWithTrigger}
|
|
168
|
+
disableAnchorTracking={disableAnchorTracking}
|
|
169
|
+
arrowPadding={arrowPadding}
|
|
170
|
+
anchor={anchor}
|
|
171
|
+
collisionAvoidance={collisionAvoidance}
|
|
172
|
+
collisionBoundary={collisionBoundary}
|
|
173
|
+
collisionPadding={collisionPadding}
|
|
174
|
+
sticky={sticky}
|
|
175
|
+
positionMethod={positionMethod}
|
|
176
|
+
className={classNames(
|
|
177
|
+
'layer-components:(z-1 select-none outline-none)',
|
|
178
|
+
'layer-components:(transform-origin-[--transform-origin])',
|
|
179
|
+
)}
|
|
180
|
+
>
|
|
181
|
+
<SelectArrow
|
|
182
|
+
className={clsx(
|
|
183
|
+
'layer-components:(transform transition border-black)',
|
|
184
|
+
'layer-components:data-[closed]:(scale-0 opacity-0)',
|
|
185
|
+
'layer-components:data-[open]:(scale-100 opacity-100)',
|
|
186
|
+
)}
|
|
187
|
+
/>
|
|
188
|
+
<BaseSelect.Popup
|
|
189
|
+
className={classNames(
|
|
190
|
+
'layer-components:(overflow-hidden border border rounded-md border-solid bg-clip-padding shadow-lg transition bg-white border-black)',
|
|
191
|
+
'layer-components:transform-origin-[var(--transform-origin)]',
|
|
192
|
+
'layer-components:data-[starting-style]:data-[side=bottom]:(translate-y-4px opacity-0)',
|
|
193
|
+
'layer-components:data-[ending-style]:data-[side=bottom]:(translate-y-4px opacity-0)',
|
|
194
|
+
'layer-components:data-[starting-style]:data-[side=top]:(translate-y--4px opacity-0)',
|
|
195
|
+
'layer-components:data-[ending-style]:data-[side=top]:(translate-y-0 opacity-0)',
|
|
196
|
+
'layer-components:data-[starting-style]:data-[side=right]:(translate-x-4px opacity-0)',
|
|
197
|
+
'layer-components:data-[ending-style]:data-[side=right]:(translate-x-0 opacity-0)',
|
|
198
|
+
'layer-components:data-[starting-style]:data-[side=left]:(translate-x--4px opacity-0)',
|
|
199
|
+
'layer-components:data-[ending-style]:data-[side=left]:(translate-x-0 opacity-0)',
|
|
200
|
+
'important:motion-reduce:animate-none',
|
|
201
|
+
'layer-components:data-[side=none]:(min-w-[calc(var(--anchor-width)+2rem)] translate-y-0px)',
|
|
202
|
+
'layer-components:(max-h-[var(--available-height)] min-w-[var(--anchor-width)])',
|
|
203
|
+
className,
|
|
204
|
+
)}
|
|
205
|
+
style={contentStyle}
|
|
206
|
+
{...props}
|
|
207
|
+
ref={forwardedRef}
|
|
208
|
+
>
|
|
209
|
+
<BaseSelect.ScrollUpArrow className={scrollArrowClass}>
|
|
210
|
+
<Icon name="chevron" className="rotate-180" />
|
|
211
|
+
</BaseSelect.ScrollUpArrow>
|
|
212
|
+
<BaseSelect.List style={viewportStyle}>{children}</BaseSelect.List>
|
|
213
|
+
<BaseSelect.ScrollDownArrow className={scrollArrowClass}>
|
|
214
|
+
<Icon name="chevron" />
|
|
215
|
+
</BaseSelect.ScrollDownArrow>
|
|
216
|
+
</BaseSelect.Popup>
|
|
217
|
+
</BaseSelect.Positioner>
|
|
218
|
+
</GroupScaleReset>
|
|
219
|
+
</BaseSelect.Portal>
|
|
220
|
+
);
|
|
221
|
+
};
|
|
222
|
+
|
|
223
|
+
export interface SelectProps<T extends string = string>
|
|
224
|
+
extends SelectRootProps<T> {}
|
|
225
|
+
const SelectBase = SelectRoot;
|
|
226
|
+
|
|
227
|
+
export const Select = Object.assign(SelectBase, {
|
|
228
|
+
Root: SelectRoot,
|
|
229
|
+
Item: SelectItem,
|
|
230
|
+
Group: SelectGroup,
|
|
231
|
+
Trigger: SelectTrigger,
|
|
232
|
+
Value: SelectValue,
|
|
233
|
+
GroupLabel: SelectGroupLabel,
|
|
234
|
+
Separator: SelectSeparator,
|
|
235
|
+
Icon: SelectIcon,
|
|
236
|
+
Content: SelectContent,
|
|
237
|
+
Arrow: SelectArrow,
|
|
238
|
+
ItemRoot: SelectItemRoot,
|
|
239
|
+
ItemText: SelectItemText,
|
|
240
|
+
ItemIndicator: SelectItemIndicator,
|
|
241
|
+
});
|