@cladd-ui/react 0.0.1 → 0.0.2
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/LICENSE +21 -0
- package/README.md +1 -1
- package/components/Backdrop.d.ts +8 -0
- package/components/Backdrop.d.ts.map +1 -0
- package/components/Backdrop.js +7 -0
- package/components/Backdrop.js.map +1 -0
- package/components/BlockTitle.d.ts +10 -0
- package/components/BlockTitle.d.ts.map +1 -0
- package/components/BlockTitle.js +7 -0
- package/components/BlockTitle.js.map +1 -0
- package/components/Button.d.ts +61 -0
- package/components/Button.d.ts.map +1 -0
- package/components/Button.js +83 -0
- package/components/Button.js.map +1 -0
- package/components/Checkbox.d.ts +57 -0
- package/components/Checkbox.d.ts.map +1 -0
- package/components/Checkbox.js +48 -0
- package/components/Checkbox.js.map +1 -0
- package/components/Chip.d.ts +47 -0
- package/components/Chip.d.ts.map +1 -0
- package/components/Chip.js +55 -0
- package/components/Chip.js.map +1 -0
- package/components/Dialog.d.ts +118 -0
- package/components/Dialog.d.ts.map +1 -0
- package/components/Dialog.js +178 -0
- package/components/Dialog.js.map +1 -0
- package/components/DialogsPortal.d.ts +2 -0
- package/components/DialogsPortal.d.ts.map +1 -0
- package/components/DialogsPortal.js +17 -0
- package/components/DialogsPortal.js.map +1 -0
- package/components/DialogsPortalContext.d.ts +49 -0
- package/components/DialogsPortalContext.d.ts.map +1 -0
- package/components/DialogsPortalContext.js +17 -0
- package/components/DialogsPortalContext.js.map +1 -0
- package/components/FocusableLayer.d.ts +25 -0
- package/components/FocusableLayer.d.ts.map +1 -0
- package/components/FocusableLayer.js +18 -0
- package/components/FocusableLayer.js.map +1 -0
- package/components/Input.d.ts +87 -0
- package/components/Input.d.ts.map +1 -0
- package/components/Input.js +93 -0
- package/components/Input.js.map +1 -0
- package/components/Link.d.ts +28 -0
- package/components/Link.d.ts.map +1 -0
- package/components/Link.js +21 -0
- package/components/Link.js.map +1 -0
- package/components/List.d.ts +8 -0
- package/components/List.d.ts.map +1 -0
- package/components/List.js +7 -0
- package/components/List.js.map +1 -0
- package/components/ListButton.d.ts +61 -0
- package/components/ListButton.d.ts.map +1 -0
- package/components/ListButton.js +9 -0
- package/components/ListButton.js.map +1 -0
- package/components/ListItem.d.ts +8 -0
- package/components/ListItem.d.ts.map +1 -0
- package/components/ListItem.js +7 -0
- package/components/ListItem.js.map +1 -0
- package/components/ListSeparator.d.ts +8 -0
- package/components/ListSeparator.d.ts.map +1 -0
- package/components/ListSeparator.js +7 -0
- package/components/ListSeparator.js.map +1 -0
- package/components/ModalController.d.ts +26 -0
- package/components/ModalController.d.ts.map +1 -0
- package/components/ModalController.js +52 -0
- package/components/ModalController.js.map +1 -0
- package/components/NumberField.d.ts +49 -0
- package/components/NumberField.d.ts.map +1 -0
- package/components/NumberField.js +34 -0
- package/components/NumberField.js.map +1 -0
- package/components/Popover.d.ts +137 -0
- package/components/Popover.d.ts.map +1 -0
- package/components/Popover.js +366 -0
- package/components/Popover.js.map +1 -0
- package/components/Popup.d.ts +120 -0
- package/components/Popup.d.ts.map +1 -0
- package/components/Popup.js +235 -0
- package/components/Popup.js.map +1 -0
- package/components/PopupContent.d.ts +19 -0
- package/components/PopupContent.d.ts.map +1 -0
- package/components/PopupContent.js +8 -0
- package/components/PopupContent.js.map +1 -0
- package/components/Preloader.d.ts +12 -0
- package/components/Preloader.d.ts.map +1 -0
- package/components/Preloader.js +30 -0
- package/components/Preloader.js.map +1 -0
- package/components/Radio.d.ts +53 -0
- package/components/Radio.d.ts.map +1 -0
- package/components/Radio.js +46 -0
- package/components/Radio.js.map +1 -0
- package/components/Range.d.ts +35 -0
- package/components/Range.d.ts.map +1 -0
- package/components/Range.js +76 -0
- package/components/Range.js.map +1 -0
- package/components/Searchbar.d.ts +29 -0
- package/components/Searchbar.d.ts.map +1 -0
- package/components/Searchbar.js +10 -0
- package/components/Searchbar.js.map +1 -0
- package/components/Segmented.d.ts +39 -0
- package/components/Segmented.d.ts.map +1 -0
- package/components/Segmented.js +26 -0
- package/components/Segmented.js.map +1 -0
- package/components/SegmentedButton.d.ts +13 -0
- package/components/SegmentedButton.d.ts.map +1 -0
- package/components/SegmentedButton.js +10 -0
- package/components/SegmentedButton.js.map +1 -0
- package/components/SegmentedContext.d.ts +36 -0
- package/components/SegmentedContext.d.ts.map +1 -0
- package/components/SegmentedContext.js +10 -0
- package/components/SegmentedContext.js.map +1 -0
- package/components/Select.d.ts +145 -0
- package/components/Select.d.ts.map +1 -0
- package/components/Select.js +316 -0
- package/components/Select.js.map +1 -0
- package/components/Surface.d.ts +67 -0
- package/components/Surface.d.ts.map +1 -0
- package/components/Surface.js +36 -0
- package/components/Surface.js.map +1 -0
- package/components/SurfaceContent.d.ts +8 -0
- package/components/SurfaceContent.d.ts.map +1 -0
- package/components/SurfaceContent.js +7 -0
- package/components/SurfaceContent.js.map +1 -0
- package/components/SurfaceContext.d.ts +19 -0
- package/components/SurfaceContext.d.ts.map +1 -0
- package/components/SurfaceContext.js +9 -0
- package/components/SurfaceContext.js.map +1 -0
- package/components/SurfaceCut.d.ts +33 -0
- package/components/SurfaceCut.d.ts.map +1 -0
- package/components/SurfaceCut.js +17 -0
- package/components/SurfaceCut.js.map +1 -0
- package/components/SurfaceCutContent.d.ts +16 -0
- package/components/SurfaceCutContent.d.ts.map +1 -0
- package/components/SurfaceCutContent.js +8 -0
- package/components/SurfaceCutContent.js.map +1 -0
- package/components/TextArea.d.ts +61 -0
- package/components/TextArea.d.ts.map +1 -0
- package/components/TextArea.js +102 -0
- package/components/TextArea.js.map +1 -0
- package/components/ThemeContext.d.ts +23 -0
- package/components/ThemeContext.d.ts.map +1 -0
- package/components/ThemeContext.js +18 -0
- package/components/ThemeContext.js.map +1 -0
- package/components/Toast.d.ts +89 -0
- package/components/Toast.d.ts.map +1 -0
- package/components/Toast.js +129 -0
- package/components/Toast.js.map +1 -0
- package/components/ToastsPortal.d.ts +2 -0
- package/components/ToastsPortal.d.ts.map +1 -0
- package/components/ToastsPortal.js +17 -0
- package/components/ToastsPortal.js.map +1 -0
- package/components/ToastsPortalContext.d.ts +45 -0
- package/components/ToastsPortalContext.d.ts.map +1 -0
- package/components/ToastsPortalContext.js +17 -0
- package/components/ToastsPortalContext.js.map +1 -0
- package/components/Toggle.d.ts +69 -0
- package/components/Toggle.d.ts.map +1 -0
- package/components/Toggle.js +48 -0
- package/components/Toggle.js.map +1 -0
- package/components/Tooltip.d.ts +48 -0
- package/components/Tooltip.d.ts.map +1 -0
- package/components/Tooltip.js +90 -0
- package/components/Tooltip.js.map +1 -0
- package/components/UIProvider.d.ts +16 -0
- package/components/UIProvider.d.ts.map +1 -0
- package/components/UIProvider.js +11 -0
- package/components/UIProvider.js.map +1 -0
- package/components/WithTooltip.d.ts +36 -0
- package/components/WithTooltip.d.ts.map +1 -0
- package/components/WithTooltip.js +138 -0
- package/components/WithTooltip.js.map +1 -0
- package/components/icons/CheckIcon.d.ts +2 -0
- package/components/icons/CheckIcon.d.ts.map +1 -0
- package/components/icons/CheckIcon.js +5 -0
- package/components/icons/CheckIcon.js.map +1 -0
- package/components/icons/CloseIcon.d.ts +2 -0
- package/components/icons/CloseIcon.d.ts.map +1 -0
- package/components/icons/CloseIcon.js +3 -0
- package/components/icons/CloseIcon.js.map +1 -0
- package/components/icons/DropdownIcon.d.ts +2 -0
- package/components/icons/DropdownIcon.d.ts.map +1 -0
- package/components/icons/DropdownIcon.js +3 -0
- package/components/icons/DropdownIcon.js.map +1 -0
- package/components/icons/SearchIcon.d.ts +2 -0
- package/components/icons/SearchIcon.d.ts.map +1 -0
- package/components/icons/SearchIcon.js +5 -0
- package/components/icons/SearchIcon.js.map +1 -0
- package/hooks/use-accent-color.d.ts +2 -0
- package/hooks/use-accent-color.d.ts.map +1 -0
- package/hooks/use-accent-color.js +6 -0
- package/hooks/use-accent-color.js.map +1 -0
- package/hooks/use-device.d.ts +14 -0
- package/hooks/use-device.d.ts.map +1 -0
- package/hooks/use-device.js +68 -0
- package/hooks/use-device.js.map +1 -0
- package/hooks/use-dialog.d.ts +8 -0
- package/hooks/use-dialog.d.ts.map +1 -0
- package/hooks/use-dialog.js +38 -0
- package/hooks/use-dialog.js.map +1 -0
- package/hooks/use-focus-trap.d.ts +9 -0
- package/hooks/use-focus-trap.d.ts.map +1 -0
- package/hooks/use-focus-trap.js +106 -0
- package/hooks/use-focus-trap.js.map +1 -0
- package/hooks/use-modal-utils.d.ts +17 -0
- package/hooks/use-modal-utils.d.ts.map +1 -0
- package/hooks/use-modal-utils.js +110 -0
- package/hooks/use-modal-utils.js.map +1 -0
- package/hooks/use-surface.d.ts +2 -0
- package/hooks/use-surface.d.ts.map +1 -0
- package/hooks/use-surface.js +6 -0
- package/hooks/use-surface.js.map +1 -0
- package/hooks/use-theme.d.ts +2 -0
- package/hooks/use-theme.d.ts.map +1 -0
- package/hooks/use-theme.js +6 -0
- package/hooks/use-theme.js.map +1 -0
- package/hooks/use-toast.d.ts +3 -0
- package/hooks/use-toast.d.ts.map +1 -0
- package/hooks/use-toast.js +21 -0
- package/hooks/use-toast.js.map +1 -0
- package/index.d.ts +42 -0
- package/index.d.ts.map +1 -0
- package/index.js +42 -0
- package/index.js.map +1 -0
- package/package.json +27 -9
- package/shared/cn.d.ts +3 -0
- package/shared/cn.d.ts.map +1 -0
- package/shared/cn.js +6 -0
- package/shared/cn.js.map +1 -0
- package/shared/next-tick.d.ts +2 -0
- package/shared/next-tick.d.ts.map +1 -0
- package/shared/next-tick.js +6 -0
- package/shared/next-tick.js.map +1 -0
- package/styles/colors.css +403 -0
- package/styles/popup.css +14 -0
- package/styles/preloader.css +71 -0
- package/styles/range.css +17 -0
- package/styles/safe-areas.css +192 -0
- package/types.d.ts +2 -0
- package/types.d.ts.map +1 -0
- package/types.js +2 -0
- package/types.js.map +1 -0
- package/ui.css +10 -0
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { Fragment, useEffect, useId, useRef, useState, } from 'react';
|
|
3
|
+
import { useDevice } from '../hooks/use-device';
|
|
4
|
+
import { useTheme } from '../hooks/use-theme';
|
|
5
|
+
import { cn } from '../shared/cn';
|
|
6
|
+
import { BlockTitle } from './BlockTitle';
|
|
7
|
+
import { Button, buttonIconSizes } from './Button';
|
|
8
|
+
import { Checkbox } from './Checkbox';
|
|
9
|
+
import { DropdownIcon } from './icons/DropdownIcon';
|
|
10
|
+
import { List } from './List';
|
|
11
|
+
import { ListButton } from './ListButton';
|
|
12
|
+
import { Popover } from './Popover';
|
|
13
|
+
import { Radio } from './Radio';
|
|
14
|
+
import { Searchbar } from './Searchbar';
|
|
15
|
+
export function Select(props) {
|
|
16
|
+
const theme = useTheme();
|
|
17
|
+
const { value = '', placeholder = '', title = '', options = [], multiple, disabled, readOnly,
|
|
18
|
+
// STYLING
|
|
19
|
+
color, rounded, size = 'md', className, contentClassName, valueClassName, surface, reverse, icon, dropdownIcon = true, multiline, placeholderClassName = '',
|
|
20
|
+
// CONTENT
|
|
21
|
+
children, beforeOptions, afterOptions,
|
|
22
|
+
// SEARCH RELATED PROPS
|
|
23
|
+
search, searchPlaceholder = 'Search', searchNotFound = 'Nothing found', searchFocus, onSearch,
|
|
24
|
+
// POPOVER RELATED PROPS
|
|
25
|
+
popoverColor, popoverPosition = 'bottom-end', popoverOffset = ['-50%', 4], popoverClassName = 'w-auto min-w-[160px]', popoverSurfaceLevel = theme === 'dark' ? '+1' : 1, anchorRef: elRefExternal, popoverState: popoverStateExternal, onPopoverState: setPopoverStateExternal,
|
|
26
|
+
// CALLBACKS
|
|
27
|
+
onChange = () => { }, onClick = () => { },
|
|
28
|
+
// OPTIONS
|
|
29
|
+
keyboardHints = true, togglesColor, optionToggleColor = () => undefined, isChecked, isOptionDisabled, getOptionValue = (option) => option, getOptionByValue, renderBeforeOption, renderAfterOption, renderOption = ({ value }) => String(value), renderOptionInfo,
|
|
30
|
+
/** Value of the "none/initial" option that should be mapped to the 0 key.
|
|
31
|
+
* If set, this option gets hint "0" and remaining options get 1-9 in order.
|
|
32
|
+
* If not set, straight ordering: 1, 2, 3, ..., 9, 0 (for 10th). */
|
|
33
|
+
noneOptionValue,
|
|
34
|
+
// FUNCTIONALITY
|
|
35
|
+
closeOnSelect = true, scrollToSelected, ref, ...rest } = props;
|
|
36
|
+
const elRef = useRef(null);
|
|
37
|
+
const listElRef = useRef(null);
|
|
38
|
+
const searchbarRef = useRef(null);
|
|
39
|
+
const device = useDevice();
|
|
40
|
+
const reactId = useId();
|
|
41
|
+
const listboxId = `select-listbox-${reactId}`;
|
|
42
|
+
const optionIdPrefix = `select-option-${reactId}`;
|
|
43
|
+
const [searchQuery, setSearchQuery] = useState('');
|
|
44
|
+
const [popoverState, setPopoverState] = useState(false);
|
|
45
|
+
const [selectedItemIndex, setSelectedItemIndex] = useState(-1);
|
|
46
|
+
const onChangeInternal = (optionValue, checked) => {
|
|
47
|
+
if (!multiple) {
|
|
48
|
+
onChange(getOptionValue(optionValue));
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
const newValues = getOptionByValue
|
|
52
|
+
? [...value].map((opt) => getOptionValue(opt))
|
|
53
|
+
: [...value];
|
|
54
|
+
if (checked)
|
|
55
|
+
newValues.push(getOptionValue(optionValue));
|
|
56
|
+
else if (newValues.includes(getOptionValue(optionValue))) {
|
|
57
|
+
newValues.splice(newValues.indexOf(getOptionValue(optionValue)), 1);
|
|
58
|
+
}
|
|
59
|
+
onChange(getOptionByValue
|
|
60
|
+
? newValues.map((optValue) => getOptionByValue(options, optValue))
|
|
61
|
+
: newValues);
|
|
62
|
+
}
|
|
63
|
+
if (!multiple && closeOnSelect) {
|
|
64
|
+
if (setPopoverStateExternal)
|
|
65
|
+
setPopoverStateExternal(false);
|
|
66
|
+
else
|
|
67
|
+
setPopoverState(false);
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
const InputComponent = multiple ? Checkbox : Radio;
|
|
71
|
+
const displayOptions = search && onSearch ? onSearch(searchQuery) : options;
|
|
72
|
+
const getOptionIsChecked = (optionValue) => {
|
|
73
|
+
if (isChecked)
|
|
74
|
+
return isChecked(optionValue);
|
|
75
|
+
const optKey = getOptionValue(optionValue);
|
|
76
|
+
if (multiple) {
|
|
77
|
+
const arr = value ?? [];
|
|
78
|
+
if (getOptionByValue) {
|
|
79
|
+
return arr.some((v) => getOptionValue(v) === optKey);
|
|
80
|
+
}
|
|
81
|
+
return arr.includes(optKey);
|
|
82
|
+
}
|
|
83
|
+
if (getOptionByValue && value !== undefined && value !== '') {
|
|
84
|
+
return getOptionValue(value) === optKey;
|
|
85
|
+
}
|
|
86
|
+
return value === optKey;
|
|
87
|
+
};
|
|
88
|
+
const effectivePopoverState = popoverStateExternal ?? popoverState;
|
|
89
|
+
const scrollPopoverToElement = (scrollToEl, dir) => {
|
|
90
|
+
if (!scrollToEl && scrollToSelected && listElRef.current) {
|
|
91
|
+
const checkedEl = listElRef.current.querySelector('input[checked]');
|
|
92
|
+
if (!checkedEl)
|
|
93
|
+
return;
|
|
94
|
+
const labelEl = checkedEl.closest('label');
|
|
95
|
+
if (!labelEl)
|
|
96
|
+
return;
|
|
97
|
+
labelEl.scrollIntoView({ block: 'center' });
|
|
98
|
+
}
|
|
99
|
+
else if (scrollToEl && listElRef.current) {
|
|
100
|
+
const scrollEl = scrollToEl.closest('.overflow-auto');
|
|
101
|
+
if (!scrollEl)
|
|
102
|
+
return;
|
|
103
|
+
if (dir === 'up') {
|
|
104
|
+
if (scrollEl.scrollTop > scrollToEl.offsetTop) {
|
|
105
|
+
scrollToEl.scrollIntoView({
|
|
106
|
+
block: 'start',
|
|
107
|
+
behavior: 'smooth',
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
if (scrollEl.scrollTop + scrollEl.offsetHeight < scrollToEl.offsetTop) {
|
|
113
|
+
scrollToEl.scrollIntoView({
|
|
114
|
+
block: 'end',
|
|
115
|
+
behavior: 'smooth',
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
const focusSearchOnOpened = () => {
|
|
122
|
+
if (searchFocus && searchbarRef.current) {
|
|
123
|
+
if (device.ios || device.android)
|
|
124
|
+
return;
|
|
125
|
+
const input = searchbarRef.current.querySelector('input');
|
|
126
|
+
if (input)
|
|
127
|
+
input.focus();
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
const onKeyDown = (e) => {
|
|
131
|
+
if (device.mobile)
|
|
132
|
+
return;
|
|
133
|
+
if (!effectivePopoverState)
|
|
134
|
+
return;
|
|
135
|
+
// Numeric quick-pick: 0-9 selects the corresponding option
|
|
136
|
+
// Skip when search input is focused so digits can be typed
|
|
137
|
+
if (keyboardHints &&
|
|
138
|
+
/^[0-9]$/.test(e.key) &&
|
|
139
|
+
!searchbarRef.current?.querySelector('input:focus')) {
|
|
140
|
+
e.preventDefault();
|
|
141
|
+
const digit = parseInt(e.key);
|
|
142
|
+
let targetIndex = -1;
|
|
143
|
+
if (noneOptionValue !== undefined) {
|
|
144
|
+
// Semantic mode: 0 = none/initial option, 1-9 = other options in order
|
|
145
|
+
if (digit === 0) {
|
|
146
|
+
targetIndex = displayOptions.findIndex((o) => getOptionValue(o) === noneOptionValue);
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
let rank = 0;
|
|
150
|
+
for (let i = 0; i < displayOptions.length; i++) {
|
|
151
|
+
if (getOptionValue(displayOptions[i]) !== noneOptionValue) {
|
|
152
|
+
rank++;
|
|
153
|
+
if (rank === digit) {
|
|
154
|
+
targetIndex = i;
|
|
155
|
+
break;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
// Straight mode: 1=first, 2=second, ..., 9=ninth, 0=tenth
|
|
163
|
+
targetIndex = digit === 0 ? 9 : digit - 1;
|
|
164
|
+
}
|
|
165
|
+
if (targetIndex >= 0 && targetIndex < displayOptions.length) {
|
|
166
|
+
if (!multiple) {
|
|
167
|
+
onChangeInternal(displayOptions[targetIndex], true);
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
onChangeInternal(displayOptions[targetIndex], !getOptionIsChecked(displayOptions[targetIndex]));
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
if (e.key !== 'ArrowUp' &&
|
|
176
|
+
e.key !== 'Tab' &&
|
|
177
|
+
e.key !== 'ArrowDown' &&
|
|
178
|
+
e.key !== 'Enter' &&
|
|
179
|
+
e.key !== ' ') {
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
const maxIndex = displayOptions.length - 1;
|
|
183
|
+
const minIndex = 0;
|
|
184
|
+
let newIndex = selectedItemIndex;
|
|
185
|
+
if (selectedItemIndex < 0) {
|
|
186
|
+
newIndex = displayOptions.findIndex(getOptionIsChecked);
|
|
187
|
+
}
|
|
188
|
+
let dir;
|
|
189
|
+
if (e.key === 'ArrowUp' || (e.key === 'Tab' && e.shiftKey)) {
|
|
190
|
+
dir = 'up';
|
|
191
|
+
newIndex -= 1;
|
|
192
|
+
e.preventDefault();
|
|
193
|
+
if (newIndex < minIndex) {
|
|
194
|
+
dir = 'down';
|
|
195
|
+
newIndex = maxIndex;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
if (e.key === 'ArrowDown' || (e.key === 'Tab' && !e.shiftKey)) {
|
|
199
|
+
dir = 'down';
|
|
200
|
+
newIndex += 1;
|
|
201
|
+
e.preventDefault();
|
|
202
|
+
if (newIndex > maxIndex) {
|
|
203
|
+
dir = 'up';
|
|
204
|
+
newIndex = 0;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
if (e.key === 'ArrowUp' || e.key === 'ArrowDown' || e.key === 'Tab') {
|
|
208
|
+
setSelectedItemIndex(newIndex);
|
|
209
|
+
if (listElRef.current) {
|
|
210
|
+
const el = listElRef.current.querySelectorAll('.list label')[newIndex];
|
|
211
|
+
if (el) {
|
|
212
|
+
el.focus();
|
|
213
|
+
scrollPopoverToElement(el, dir);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
if ((e.key === 'Enter' || e.key === ' ') && selectedItemIndex >= 0) {
|
|
218
|
+
if (document.activeElement === searchbarRef.current?.querySelector('input')) {
|
|
219
|
+
return; // Don't select option when pressing Enter/Space in search input
|
|
220
|
+
}
|
|
221
|
+
e.preventDefault();
|
|
222
|
+
if (!multiple) {
|
|
223
|
+
onChangeInternal(displayOptions[selectedItemIndex], true);
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
onChangeInternal(displayOptions[selectedItemIndex], !getOptionIsChecked(displayOptions[selectedItemIndex]));
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
};
|
|
230
|
+
const onPopoverOpen = () => {
|
|
231
|
+
scrollPopoverToElement();
|
|
232
|
+
};
|
|
233
|
+
const onPopoverOpened = () => {
|
|
234
|
+
focusSearchOnOpened();
|
|
235
|
+
};
|
|
236
|
+
const onPopoverClosed = () => {
|
|
237
|
+
setSelectedItemIndex(-1);
|
|
238
|
+
if (!device.mobile && elRef.current) {
|
|
239
|
+
elRef.current.focus();
|
|
240
|
+
}
|
|
241
|
+
};
|
|
242
|
+
useEffect(() => {
|
|
243
|
+
if (effectivePopoverState) {
|
|
244
|
+
setSearchQuery('');
|
|
245
|
+
}
|
|
246
|
+
}, [effectivePopoverState]);
|
|
247
|
+
useEffect(() => {
|
|
248
|
+
document.addEventListener('keydown', onKeyDown);
|
|
249
|
+
return () => {
|
|
250
|
+
document.removeEventListener('keydown', onKeyDown);
|
|
251
|
+
};
|
|
252
|
+
});
|
|
253
|
+
return (_jsxs(_Fragment, { children: [!elRefExternal && (_jsx(Button, { className: cn('select w-full', className), ref: (el) => {
|
|
254
|
+
elRef.current = el;
|
|
255
|
+
if (ref && typeof ref === 'function')
|
|
256
|
+
ref(el);
|
|
257
|
+
else if (ref && typeof ref === 'object')
|
|
258
|
+
ref.current = el;
|
|
259
|
+
}, size: size, rounded: rounded, color: color, disabled: disabled, multiline: multiline, surface: surface, readOnly: readOnly, role: "combobox", "aria-haspopup": "listbox", "aria-expanded": effectivePopoverState, "aria-controls": effectivePopoverState ? listboxId : undefined, "aria-activedescendant": effectivePopoverState && selectedItemIndex >= 0
|
|
260
|
+
? `${optionIdPrefix}-${selectedItemIndex}`
|
|
261
|
+
: undefined, "aria-disabled": disabled || undefined, "aria-readonly": readOnly || undefined, onClick: (e) => {
|
|
262
|
+
onClick(e);
|
|
263
|
+
const currentState = popoverStateExternal ?? popoverState;
|
|
264
|
+
if (setPopoverStateExternal)
|
|
265
|
+
setPopoverStateExternal(!currentState);
|
|
266
|
+
else
|
|
267
|
+
setPopoverState(!currentState);
|
|
268
|
+
}, contentClassName: cn(dropdownIcon && 'pr-1.5'), ...rest, children: _jsxs("div", { className: cn('flex w-full min-w-0 shrink items-center justify-between gap-2', reverse && 'flex-row-reverse', contentClassName), children: [icon && _jsx("div", { className: buttonIconSizes[size], children: icon }), _jsx("div", { className: cn('w-full min-w-0 shrink', !children && !String(value) && 'text-on-surface-darker', placeholderClassName, valueClassName), children: children || String(value) || placeholder }), dropdownIcon && (_jsx(DropdownIcon, { className: cn('size-4', 'shrink-0 text-on-surface-darker') }))] }) })), !readOnly && !disabled && (_jsxs(Popover, { open: popoverStateExternal || popoverState, onOpenChange: setPopoverStateExternal || setPopoverState, anchorRef: elRefExternal || elRef, position: popoverPosition, offset: popoverOffset, color: popoverColor, surfaceLevel: popoverSurfaceLevel, className: popoverClassName, onOpen: onPopoverOpen, onOpened: onPopoverOpened, onClosed: onPopoverClosed, onClick: (e) => e.stopPropagation(), children: [title && _jsx(BlockTitle, { className: "px-4 pt-4", children: title }), search && (_jsx(Searchbar, { value: searchQuery, placeholder: searchPlaceholder, inset: !!title, ref: searchbarRef, className: cn(title && 'mt-2'), onChange: setSearchQuery })), beforeOptions, _jsxs(List, { ref: listElRef, id: listboxId, role: "listbox", "aria-multiselectable": multiple || undefined, children: [search && onSearch && searchQuery && !displayOptions.length && (_jsx("div", { className: cn('mb-2 flex h-8 w-full items-center pr-4 pl-4 text-xs font-medium text-on-surface-darker'), children: searchNotFound })), displayOptions.map((optionValue, optionIndex) => (_jsxs(Fragment, { children: [renderBeforeOption &&
|
|
269
|
+
renderBeforeOption(optionValue, optionIndex), _jsx(ListButton, { selected: optionIndex === selectedItemIndex, component: "label", contentClassName: "pl-1", disabled: isOptionDisabled && isOptionDisabled(optionValue), outline: false, rounded: true, id: `${optionIdPrefix}-${optionIndex}`, role: "option", "aria-selected": getOptionIsChecked(optionValue), "aria-disabled": (isOptionDisabled && isOptionDisabled(optionValue)) ||
|
|
270
|
+
undefined, children: _jsxs("div", { className: "flex w-full items-center gap-3", children: [_jsx(InputComponent, { component: "div", className: "shrink-0", focusable: false, hoverable: false, input: !isOptionDisabled || !isOptionDisabled(optionValue), color: optionToggleColor({
|
|
271
|
+
value: optionValue,
|
|
272
|
+
index: options.indexOf(optionValue),
|
|
273
|
+
selected: getOptionIsChecked(optionValue),
|
|
274
|
+
}) || togglesColor, disabled: isOptionDisabled && isOptionDisabled(optionValue), checked: getOptionIsChecked(optionValue), onChange: (checked) => onChangeInternal(optionValue, checked) }), _jsxs("div", { className: cn('w-full min-w-0 shrink'), children: [renderOption({
|
|
275
|
+
value: optionValue,
|
|
276
|
+
index: options.indexOf(optionValue),
|
|
277
|
+
selected: getOptionIsChecked(optionValue),
|
|
278
|
+
}), renderOptionInfo &&
|
|
279
|
+
renderOptionInfo({
|
|
280
|
+
value: optionValue,
|
|
281
|
+
index: options.indexOf(optionValue),
|
|
282
|
+
selected: getOptionIsChecked(optionValue),
|
|
283
|
+
}) && (_jsx("div", { className: "text-xs font-normal text-on-surface-dark", children: renderOptionInfo({
|
|
284
|
+
value: optionValue,
|
|
285
|
+
index: options.indexOf(optionValue),
|
|
286
|
+
selected: getOptionIsChecked(optionValue),
|
|
287
|
+
}) }))] }), keyboardHints &&
|
|
288
|
+
displayOptions.length > 1 &&
|
|
289
|
+
!device.mobile &&
|
|
290
|
+
(() => {
|
|
291
|
+
let hint = null;
|
|
292
|
+
if (noneOptionValue !== undefined) {
|
|
293
|
+
if (getOptionValue(optionValue) === noneOptionValue) {
|
|
294
|
+
hint = 0;
|
|
295
|
+
}
|
|
296
|
+
else {
|
|
297
|
+
let rank = 0;
|
|
298
|
+
for (let i = 0; i <= optionIndex; i++) {
|
|
299
|
+
if (getOptionValue(displayOptions[i]) !==
|
|
300
|
+
noneOptionValue)
|
|
301
|
+
rank++;
|
|
302
|
+
}
|
|
303
|
+
hint = rank <= 9 ? rank : null;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
else {
|
|
307
|
+
if (optionIndex < 9)
|
|
308
|
+
hint = optionIndex + 1;
|
|
309
|
+
else if (optionIndex === 9)
|
|
310
|
+
hint = 0;
|
|
311
|
+
}
|
|
312
|
+
return hint !== null ? (_jsx("span", { className: "ml-auto shrink-0 font-mono text-[11px] font-normal text-on-surface-darker tabular-nums", children: hint })) : null;
|
|
313
|
+
})()] }) }), renderAfterOption &&
|
|
314
|
+
renderAfterOption(optionValue, optionIndex)] }, options.indexOf(optionValue))))] }), afterOptions] }))] }));
|
|
315
|
+
}
|
|
316
|
+
//# sourceMappingURL=Select.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Select.js","sourceRoot":"","sources":["../../../src/components/Select.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { ReactNode, Ref, ElementType, ComponentPropsWithoutRef } from 'react';
|
|
2
|
+
import { Color } from '../types';
|
|
3
|
+
export type SurfaceVariant = 'transparent' | 'solid' | 'gradient' | 'solid-fill' | 'gradient-fill';
|
|
4
|
+
interface SurfaceOwnProps<C extends ElementType = 'div'> {
|
|
5
|
+
/**
|
|
6
|
+
* Surface depth level (1–5). Drives the background tone via `surface-level-N` classes
|
|
7
|
+
* and propagates to nested surfaces through `SurfaceContext`.
|
|
8
|
+
*
|
|
9
|
+
* Accepts:
|
|
10
|
+
* - An absolute number/string (e.g. `2`, `"3"`).
|
|
11
|
+
* - A relative offset against the parent context level (e.g. `"+1"`, `"-1"`).
|
|
12
|
+
* - `undefined` (default): one level deeper than the parent context.
|
|
13
|
+
*
|
|
14
|
+
* Result is clamped to `[1, 5]`. For `variant="transparent"`, children inherit
|
|
15
|
+
* `currentLevel - 1` so they appear at the same depth as this surface.
|
|
16
|
+
*/
|
|
17
|
+
level?: number | string;
|
|
18
|
+
/** Surface content. */
|
|
19
|
+
children?: ReactNode;
|
|
20
|
+
/** Extra classes for the root element. */
|
|
21
|
+
className?: string;
|
|
22
|
+
/** Extra classes for the absolutely-positioned background layer (the tinted/outlined fill behind content). */
|
|
23
|
+
bgClassName?: string;
|
|
24
|
+
/** Extra classes for the inner `SurfaceContent` wrapper. Ignored when `wrapContent` is `false`. */
|
|
25
|
+
contentClassName?: string;
|
|
26
|
+
/** Render a 1px outline ring around the surface. Uses fill-aware token when `variant` ends in `-fill`. */
|
|
27
|
+
outline?: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Visual treatment of the surface background:
|
|
30
|
+
* - `transparent` - no background; children render at the parent level (used for nested groupings).
|
|
31
|
+
* - `solid` - flat surface fill (default).
|
|
32
|
+
* - `gradient` - diagonal highlight→surface gradient.
|
|
33
|
+
* - `solid-fill` - flat primary/accent fill (text inverts to `text-on-primary`).
|
|
34
|
+
* - `gradient-fill` - diagonal accent gradient (text inverts).
|
|
35
|
+
*/
|
|
36
|
+
variant?: SurfaceVariant;
|
|
37
|
+
/**
|
|
38
|
+
* Polymorphic root element. Defaults to `'div'`. Use `'button'`, `'a'`, etc. when the
|
|
39
|
+
* surface is itself the interactive target (forwarding props of that element).
|
|
40
|
+
*/
|
|
41
|
+
component?: C;
|
|
42
|
+
/** Enables active/pressed visual states (scale + pressed background). Combine with `hoverable`. */
|
|
43
|
+
clickable?: boolean;
|
|
44
|
+
/** Force the pressed visual state regardless of pointer activity (controlled press). */
|
|
45
|
+
pressed?: boolean;
|
|
46
|
+
/** Enables hover background overlay. For `variant="transparent"`, also reveals the surface fill on hover. */
|
|
47
|
+
hoverable?: boolean;
|
|
48
|
+
/** Accent color token. Sets the surface's `color-{name}` class - drives accent-aware borders, fills, and text colors. */
|
|
49
|
+
color?: Color;
|
|
50
|
+
/**
|
|
51
|
+
* Slot rendered between the background layer and the content wrapper, **outside** the
|
|
52
|
+
* `SurfaceContent` flex layout (e.g. `FocusableLayer`, decorative overlays).
|
|
53
|
+
*/
|
|
54
|
+
beforeContent?: ReactNode;
|
|
55
|
+
/**
|
|
56
|
+
* When `true` (default), `children` are rendered inside a `SurfaceContent` flex wrapper
|
|
57
|
+
* styled by `contentClassName`. Set to `false` to render `children` directly - useful
|
|
58
|
+
* when the surface is the layout root and you want full control of the inner DOM.
|
|
59
|
+
*/
|
|
60
|
+
wrapContent?: boolean;
|
|
61
|
+
/** Forwarded to the polymorphic root element. */
|
|
62
|
+
ref?: Ref<HTMLElement>;
|
|
63
|
+
}
|
|
64
|
+
export type SurfaceProps<C extends ElementType = 'div'> = SurfaceOwnProps<C> & Omit<ComponentPropsWithoutRef<C>, keyof SurfaceOwnProps<C>>;
|
|
65
|
+
export declare const Surface: <C extends ElementType = "div">(props: SurfaceProps<C>) => import("react/jsx-runtime").JSX.Element;
|
|
66
|
+
export {};
|
|
67
|
+
//# sourceMappingURL=Surface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Surface.d.ts","sourceRoot":"","sources":["../../../src/components/Surface.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,OAAO,CAAC;AAI9E,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAIjC,MAAM,MAAM,cAAc,GACtB,aAAa,GACb,OAAO,GACP,UAAU,GACV,YAAY,GACZ,eAAe,CAAC;AAEpB,UAAU,eAAe,CAAC,CAAC,SAAS,WAAW,GAAG,KAAK;IACrD;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,uBAAuB;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8GAA8G;IAC9G,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mGAAmG;IACnG,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,0GAA0G;IAC1G,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB;;;OAGG;IACH,SAAS,CAAC,EAAE,CAAC,CAAC;IACd,mGAAmG;IACnG,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,wFAAwF;IACxF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6GAA6G;IAC7G,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,yHAAyH;IACzH,KAAK,CAAC,EAAE,KAAK,CAAC;IACd;;;OAGG;IACH,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iDAAiD;IACjD,GAAG,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;CACxB;AAED,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,WAAW,GAAG,KAAK,IAAI,eAAe,CAAC,CAAC,CAAC,GAC1E,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE,MAAM,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;AAE9D,eAAO,MAAM,OAAO,GAAI,CAAC,SAAS,WAAW,GAAG,KAAK,EACnD,OAAO,YAAY,CAAC,CAAC,CAAC,4CA2HvB,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useSurface } from '../hooks/use-surface';
|
|
3
|
+
import { cn } from '../shared/cn';
|
|
4
|
+
import { SurfaceContent } from './SurfaceContent';
|
|
5
|
+
import { SurfaceContextProvider } from './SurfaceContext';
|
|
6
|
+
export const Surface = (props) => {
|
|
7
|
+
const MAX_LEVEL = 5;
|
|
8
|
+
const { level, children, className = '', contentClassName = '', bgClassName = '', outline = false, variant = 'solid', component = 'div', clickable = false, pressed, hoverable = false, color = '', wrapContent = true, beforeContent, ref, ...rest } = props;
|
|
9
|
+
const contextLevel = useSurface();
|
|
10
|
+
let levelProp = level;
|
|
11
|
+
if (typeof levelProp === 'string' &&
|
|
12
|
+
(levelProp.includes('+') || levelProp.includes('-'))) {
|
|
13
|
+
if (levelProp.includes('+'))
|
|
14
|
+
levelProp = contextLevel + parseInt(levelProp, 10);
|
|
15
|
+
else
|
|
16
|
+
levelProp = contextLevel + parseInt(levelProp, 10);
|
|
17
|
+
}
|
|
18
|
+
const currentLevel = Math.max(1, Math.min(typeof levelProp === 'undefined' ? contextLevel + 1 : Number(levelProp), MAX_LEVEL));
|
|
19
|
+
const Component = component;
|
|
20
|
+
const isFill = variant === 'solid-fill' || variant === 'gradient-fill';
|
|
21
|
+
return (_jsxs(Component, { className: cn('surface relative', isFill ? 'text-on-primary' : 'text-on-surface', (clickable || hoverable) && 'group/surface', `surface-level-${currentLevel}`, color && `color-${color}`, className), ref: ref, ...rest, children: [_jsx("div", { className: cn('pointer-events-none absolute inset-0 rounded-[inherit]', variant === 'solid' && 'bg-surface', variant === 'solid-fill' && 'bg-primary', variant === 'gradient' &&
|
|
22
|
+
'bg-linear-to-br from-surface-highlight to-surface', variant === 'gradient-fill' &&
|
|
23
|
+
'bg-linear-to-br from-primary to-primary/85 light:from-primary/80 light:to-primary', outline &&
|
|
24
|
+
cn(isFill ? 'shadow-surface-outline-fill' : 'shadow-surface-outline'), variant === 'transparent' &&
|
|
25
|
+
hoverable &&
|
|
26
|
+
'duration-200 group-hover/surface:bg-surface', hoverable && clickable && 'group-active/surface:bg-surface', bgClassName), children: (hoverable || clickable) && (_jsx("div", { className: cn('absolute inset-0 rounded-[inherit] opacity-0 duration-200', hoverable &&
|
|
27
|
+
!pressed &&
|
|
28
|
+
cn('group-hover/surface:opacity-100', isFill
|
|
29
|
+
? 'group-hover/surface:bg-surface-hover-fill'
|
|
30
|
+
: 'group-hover/surface:bg-surface-hover'), clickable &&
|
|
31
|
+
(pressed
|
|
32
|
+
? 'bg-surface-pressed opacity-100'
|
|
33
|
+
: 'group-active/surface:bg-surface-pressed group-active/surface:opacity-100')) })) }), _jsxs(SurfaceContextProvider, { level: variant === 'transparent' ? currentLevel - 1 : currentLevel, children: [beforeContent, wrapContent ? (_jsx(SurfaceContent, { className: cn('duration-200', clickable &&
|
|
34
|
+
'group-active/surface:scale-95 group-active/surface:opacity-75', contentClassName), children: children })) : (children)] })] }));
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=Surface.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Surface.js","sourceRoot":"","sources":["../../../src/components/Surface.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ReactNode, Ref, HTMLAttributes } from 'react';
|
|
2
|
+
export interface SurfaceContentProps extends HTMLAttributes<HTMLDivElement> {
|
|
3
|
+
children?: ReactNode;
|
|
4
|
+
className?: string;
|
|
5
|
+
ref?: Ref<HTMLDivElement>;
|
|
6
|
+
}
|
|
7
|
+
export declare const SurfaceContent: (props: SurfaceContentProps) => import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
//# sourceMappingURL=SurfaceContent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SurfaceContent.d.ts","sourceRoot":"","sources":["../../../src/components/SurfaceContent.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAIvD,MAAM,WAAW,mBAAoB,SAAQ,cAAc,CAAC,cAAc,CAAC;IACzE,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;CAC3B;AAED,eAAO,MAAM,cAAc,GAAI,OAAO,mBAAmB,4CAOxD,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from '../shared/cn';
|
|
3
|
+
export const SurfaceContent = (props) => {
|
|
4
|
+
const { children, className = '', ref, ...rest } = props;
|
|
5
|
+
return (_jsx("div", { ref: ref, className: cn(`relative h-full`, className), ...rest, children: children }));
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=SurfaceContent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SurfaceContent.js","sourceRoot":"","sources":["../../../src/components/SurfaceContent.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAQlC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAA0B,EAAE,EAAE;IAC3D,MAAM,EAAE,QAAQ,EAAE,SAAS,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;IACzD,OAAO,CACL,cAAK,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,iBAAiB,EAAE,SAAS,CAAC,KAAM,IAAI,YACjE,QAAQ,GACL,CACP,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Tracks the surface depth of the current React subtree. Each `Surface` publishes its own
|
|
4
|
+
* level (or `currentLevel - 1` for `variant="transparent"`) so nested surfaces can resolve
|
|
5
|
+
* relative levels (e.g. `"+1"`/`"-1"`) and pick appropriate background tones.
|
|
6
|
+
*/
|
|
7
|
+
interface SurfaceContextValue {
|
|
8
|
+
/** Current surface depth (1–5). `0` outside any `Surface`. */
|
|
9
|
+
level: number;
|
|
10
|
+
}
|
|
11
|
+
interface SurfaceContextProviderProps {
|
|
12
|
+
/** Surface depth published to descendants. */
|
|
13
|
+
level: number;
|
|
14
|
+
children: ReactNode;
|
|
15
|
+
}
|
|
16
|
+
export declare const SurfaceContext: import("react").Context<SurfaceContextValue>;
|
|
17
|
+
export declare function SurfaceContextProvider(props: SurfaceContextProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=SurfaceContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SurfaceContext.d.ts","sourceRoot":"","sources":["../../../src/components/SurfaceContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAC;AAEjD;;;;GAIG;AACH,UAAU,mBAAmB;IAC3B,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,2BAA2B;IACnC,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,eAAO,MAAM,cAAc,8CAEzB,CAAC;AAEH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,2BAA2B,2CAMxE"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { createContext } from 'react';
|
|
3
|
+
export const SurfaceContext = createContext({
|
|
4
|
+
level: 0,
|
|
5
|
+
});
|
|
6
|
+
export function SurfaceContextProvider(props) {
|
|
7
|
+
return (_jsx(SurfaceContext.Provider, { value: { level: props.level }, children: props.children }));
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=SurfaceContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SurfaceContext.js","sourceRoot":"","sources":["../../../src/components/SurfaceContext.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAa,MAAM,OAAO,CAAC;AAkBjD,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAAsB;IAC/D,KAAK,EAAE,CAAC;CACT,CAAC,CAAC;AAEH,MAAM,UAAU,sBAAsB,CAAC,KAAkC;IACvE,OAAO,CACL,KAAC,cAAc,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,YACnD,KAAK,CAAC,QAAQ,GACS,CAC3B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { ReactNode, Ref, ElementType, ComponentPropsWithoutRef } from 'react';
|
|
2
|
+
import { Color } from '../types';
|
|
3
|
+
interface SurfaceCutOwnProps<C extends ElementType = 'div'> {
|
|
4
|
+
/** Surface-cut content. */
|
|
5
|
+
children?: ReactNode;
|
|
6
|
+
/** Extra classes for the root element. */
|
|
7
|
+
className?: string;
|
|
8
|
+
/** Render the inset outline ring. Default `true`. */
|
|
9
|
+
outline?: boolean;
|
|
10
|
+
/** Accent color token. Sets the surface's `color-{name}` class. */
|
|
11
|
+
color?: Color;
|
|
12
|
+
/** Show hover overlay on the cut surface. Default `false`. */
|
|
13
|
+
hoverable?: boolean;
|
|
14
|
+
/** Enable active/pressed visual states (scale + pressed background). Default `false`. */
|
|
15
|
+
clickable?: boolean;
|
|
16
|
+
/** Force the pressed visual state regardless of pointer activity. */
|
|
17
|
+
pressed?: boolean;
|
|
18
|
+
/** Polymorphic root element. Defaults to `'div'`. */
|
|
19
|
+
component?: C;
|
|
20
|
+
/**
|
|
21
|
+
* When `true` (default), `children` are wrapped in `SurfaceCutContent`. Set to `false`
|
|
22
|
+
* to render `children` directly when you need full layout control of the inner DOM.
|
|
23
|
+
*/
|
|
24
|
+
wrapContent?: boolean;
|
|
25
|
+
/** Extra classes for the inner `SurfaceCutContent` wrapper. Ignored when `wrapContent` is `false`. */
|
|
26
|
+
contentClassName?: string;
|
|
27
|
+
/** Forwarded to the polymorphic root element. */
|
|
28
|
+
ref?: Ref<HTMLElement>;
|
|
29
|
+
}
|
|
30
|
+
export type SurfaceCutProps<C extends ElementType = 'div'> = SurfaceCutOwnProps<C> & Omit<ComponentPropsWithoutRef<C>, keyof SurfaceCutOwnProps<C>>;
|
|
31
|
+
export declare const SurfaceCut: <C extends ElementType = "div">(props: SurfaceCutProps<C>) => import("react/jsx-runtime").JSX.Element;
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=SurfaceCut.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SurfaceCut.d.ts","sourceRoot":"","sources":["../../../src/components/SurfaceCut.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,OAAO,CAAC;AAI9E,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAIjC,UAAU,kBAAkB,CAAC,CAAC,SAAS,WAAW,GAAG,KAAK;IACxD,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,mEAAmE;IACnE,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,8DAA8D;IAC9D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,yFAAyF;IACzF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qEAAqE;IACrE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,qDAAqD;IACrD,SAAS,CAAC,EAAE,CAAC,CAAC;IACd;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,sGAAsG;IACtG,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iDAAiD;IACjD,GAAG,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;CACxB;AAED,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,WAAW,GAAG,KAAK,IACvD,kBAAkB,CAAC,CAAC,CAAC,GACnB,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE,MAAM,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;AAEnE,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS,WAAW,GAAG,KAAK,EACtD,OAAO,eAAe,CAAC,CAAC,CAAC,4CAuE1B,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useSurface } from '../hooks/use-surface';
|
|
3
|
+
import { cn } from '../shared/cn';
|
|
4
|
+
import { SurfaceContextProvider } from './SurfaceContext';
|
|
5
|
+
import { SurfaceCutContent } from './SurfaceCutContent';
|
|
6
|
+
export const SurfaceCut = (props) => {
|
|
7
|
+
const { children, className = '', outline = true, color, hoverable = false, clickable = false, pressed = false, component = 'div', wrapContent = true, contentClassName = '', ref, ...rest } = props;
|
|
8
|
+
const Component = component;
|
|
9
|
+
const contextLevel = useSurface();
|
|
10
|
+
return (_jsxs(Component, { className: cn('surface-cut group/surface-cut relative', hoverable && 'group/surface-cut-hoverable', color && `color-${color}`, className), ...rest, ref: ref, children: [_jsx("div", { className: cn(`pointer-events-none absolute inset-0 rounded-[inherit] bg-surface-cut`, outline && 'shadow-surface-cut-outline'), children: (hoverable || clickable) && (_jsx("div", { className: cn('absolute inset-0 rounded-[inherit] opacity-0 duration-200', hoverable &&
|
|
11
|
+
'group-hover/surface-cut-hoverable:bg-surface-hover group-hover/surface-cut-hoverable:opacity-100', clickable &&
|
|
12
|
+
(pressed
|
|
13
|
+
? 'bg-surface-pressed opacity-100'
|
|
14
|
+
: 'group-active/surface-cut:bg-surface-pressed group-active/surface-cut:opacity-100')) })) }), _jsx(SurfaceContextProvider, { level: contextLevel - 1, children: wrapContent ? (_jsx(SurfaceCutContent, { className: cn(clickable &&
|
|
15
|
+
'duration-200 group-active/surface-cut:scale-95 group-active/surface-cut:opacity-75', contentClassName), children: children })) : (children) })] }));
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=SurfaceCut.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SurfaceCut.js","sourceRoot":"","sources":["../../../src/components/SurfaceCut.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAElC,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAkCxD,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,KAAyB,EACzB,EAAE;IACF,MAAM,EACJ,QAAQ,EACR,SAAS,GAAG,EAAE,EACd,OAAO,GAAG,IAAI,EACd,KAAK,EACL,SAAS,GAAG,KAAK,EACjB,SAAS,GAAG,KAAK,EACjB,OAAO,GAAG,KAAK,EACf,SAAS,GAAG,KAAK,EACjB,WAAW,GAAG,IAAI,EAClB,gBAAgB,GAAG,EAAE,EACrB,GAAG,EACH,GAAG,IAAI,EACR,GAAG,KAAK,CAAC;IAEV,MAAM,SAAS,GAAG,SAAwB,CAAC;IAE3C,MAAM,YAAY,GAAG,UAAU,EAAE,CAAC;IAElC,OAAO,CACL,MAAC,SAAS,IACR,SAAS,EAAE,EAAE,CACX,wCAAwC,EACxC,SAAS,IAAI,6BAA6B,EAC1C,KAAK,IAAI,SAAS,KAAK,EAAE,EACzB,SAAS,CACV,KACG,IAAI,EACR,GAAG,EAAE,GAAG,aAGR,cACE,SAAS,EAAE,EAAE,CACX,uEAAuE,EACvE,OAAO,IAAI,4BAA4B,CACxC,YAGA,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,CAC3B,cACE,SAAS,EAAE,EAAE,CACX,2DAA2D,EAC3D,SAAS;wBACP,kGAAkG,EACpG,SAAS;wBACP,CAAC,OAAO;4BACN,CAAC,CAAC,gCAAgC;4BAClC,CAAC,CAAC,kFAAkF,CAAC,CAC1F,GACD,CACH,GACG,EACN,KAAC,sBAAsB,IAAC,KAAK,EAAE,YAAY,GAAG,CAAC,YAC5C,WAAW,CAAC,CAAC,CAAC,CACb,KAAC,iBAAiB,IAChB,SAAS,EAAE,EAAE,CACX,SAAS;wBACP,oFAAoF,EACtF,gBAAgB,CACjB,YAEA,QAAQ,GACS,CACrB,CAAC,CAAC,CAAC,CACF,QAAQ,CACT,GACsB,IACf,CACb,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ReactNode, Ref, ElementType, ComponentPropsWithoutRef } from 'react';
|
|
2
|
+
interface SurfaceCutContentOwnProps<C extends ElementType = 'div'> {
|
|
3
|
+
children?: ReactNode;
|
|
4
|
+
/** Stretch the content to `h-full`. Default `true`. Set `false` for content sized by intrinsic height. */
|
|
5
|
+
fullHeight?: boolean;
|
|
6
|
+
/** Polymorphic root element. Defaults to `'div'`. */
|
|
7
|
+
component?: C;
|
|
8
|
+
/** Extra classes for the wrapper. */
|
|
9
|
+
className?: string;
|
|
10
|
+
/** Forwarded to the polymorphic root element. */
|
|
11
|
+
ref?: Ref<HTMLElement>;
|
|
12
|
+
}
|
|
13
|
+
export type SurfaceCutContentProps<C extends ElementType = 'div'> = SurfaceCutContentOwnProps<C> & Omit<ComponentPropsWithoutRef<C>, keyof SurfaceCutContentOwnProps<C>>;
|
|
14
|
+
export declare const SurfaceCutContent: <C extends ElementType = "div">(props: SurfaceCutContentProps<C>) => import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=SurfaceCutContent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SurfaceCutContent.d.ts","sourceRoot":"","sources":["../../../src/components/SurfaceCutContent.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,OAAO,CAAC;AAI9E,UAAU,yBAAyB,CAAC,CAAC,SAAS,WAAW,GAAG,KAAK;IAC/D,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,0GAA0G;IAC1G,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,qDAAqD;IACrD,SAAS,CAAC,EAAE,CAAC,CAAC;IACd,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iDAAiD;IACjD,GAAG,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;CACxB;AAED,MAAM,MAAM,sBAAsB,CAAC,CAAC,SAAS,WAAW,GAAG,KAAK,IAC9D,yBAAyB,CAAC,CAAC,CAAC,GAC1B,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE,MAAM,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC;AAE1E,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,WAAW,GAAG,KAAK,EAC7D,OAAO,sBAAsB,CAAC,CAAC,CAAC,4CAoBjC,CAAC"}
|