@ghia/react 0.0.0-stage → 0.11.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/LICENSE +201 -0
- package/dist/automation/client.d.ts +2 -0
- package/dist/automation/client.d.ts.map +1 -0
- package/dist/automation/client.js +2 -0
- package/dist/automation/client.js.map +1 -0
- package/dist/automation/index.d.ts +2 -0
- package/dist/automation/index.d.ts.map +1 -0
- package/dist/automation/index.js +2 -0
- package/dist/automation/index.js.map +1 -0
- package/dist/automation/protocol.d.ts +2 -0
- package/dist/automation/protocol.d.ts.map +1 -0
- package/dist/automation/protocol.js +2 -0
- package/dist/automation/protocol.js.map +1 -0
- package/dist/components/animate-presence.d.ts +35 -0
- package/dist/components/animate-presence.d.ts.map +1 -0
- package/dist/components/animate-presence.js +184 -0
- package/dist/components/animate-presence.js.map +1 -0
- package/dist/components/button.d.ts +32 -0
- package/dist/components/button.d.ts.map +1 -0
- package/dist/components/button.js +62 -0
- package/dist/components/button.js.map +1 -0
- package/dist/components/combobox.d.ts +63 -0
- package/dist/components/combobox.d.ts.map +1 -0
- package/dist/components/combobox.js +279 -0
- package/dist/components/combobox.js.map +1 -0
- package/dist/components/dialog.d.ts +49 -0
- package/dist/components/dialog.d.ts.map +1 -0
- package/dist/components/dialog.js +157 -0
- package/dist/components/dialog.js.map +1 -0
- package/dist/components/floating.d.ts +54 -0
- package/dist/components/floating.d.ts.map +1 -0
- package/dist/components/floating.js +199 -0
- package/dist/components/floating.js.map +1 -0
- package/dist/components/index.d.ts +135 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +190 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/layout-group.d.ts +10 -0
- package/dist/components/layout-group.d.ts.map +1 -0
- package/dist/components/layout-group.js +10 -0
- package/dist/components/layout-group.js.map +1 -0
- package/dist/components/motion-config.d.ts +24 -0
- package/dist/components/motion-config.d.ts.map +1 -0
- package/dist/components/motion-config.js +31 -0
- package/dist/components/motion-config.js.map +1 -0
- package/dist/components/reorder.d.ts +44 -0
- package/dist/components/reorder.d.ts.map +1 -0
- package/dist/components/reorder.js +123 -0
- package/dist/components/reorder.js.map +1 -0
- package/dist/components/select.d.ts +61 -0
- package/dist/components/select.d.ts.map +1 -0
- package/dist/components/select.js +267 -0
- package/dist/components/select.js.map +1 -0
- package/dist/components/tooltip.d.ts +30 -0
- package/dist/components/tooltip.d.ts.map +1 -0
- package/dist/components/tooltip.js +138 -0
- package/dist/components/tooltip.js.map +1 -0
- package/dist/components/universal-style.d.ts +12 -0
- package/dist/components/universal-style.d.ts.map +1 -0
- package/dist/components/universal-style.js +45 -0
- package/dist/components/universal-style.js.map +1 -0
- package/dist/components/variant-context.d.ts +4 -0
- package/dist/components/variant-context.d.ts.map +1 -0
- package/dist/components/variant-context.js +4 -0
- package/dist/components/variant-context.js.map +1 -0
- package/dist/cpu-throttle.d.ts +3 -0
- package/dist/cpu-throttle.d.ts.map +1 -0
- package/dist/cpu-throttle.js +2 -0
- package/dist/cpu-throttle.js.map +1 -0
- package/dist/floating.d.ts +4 -0
- package/dist/floating.d.ts.map +1 -0
- package/dist/floating.js +3 -0
- package/dist/floating.js.map +1 -0
- package/dist/hooks/index.d.ts +6 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +6 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/use-gpuix.d.ts +17 -0
- package/dist/hooks/use-gpuix.d.ts.map +1 -0
- package/dist/hooks/use-gpuix.js +22 -0
- package/dist/hooks/use-gpuix.js.map +1 -0
- package/dist/hooks/use-media-query.d.ts +15 -0
- package/dist/hooks/use-media-query.d.ts.map +1 -0
- package/dist/hooks/use-media-query.js +30 -0
- package/dist/hooks/use-media-query.js.map +1 -0
- package/dist/hooks/use-motion-value.d.ts +31 -0
- package/dist/hooks/use-motion-value.d.ts.map +1 -0
- package/dist/hooks/use-motion-value.js +105 -0
- package/dist/hooks/use-motion-value.js.map +1 -0
- package/dist/hooks/use-text-search.d.ts +16 -0
- package/dist/hooks/use-text-search.d.ts.map +1 -0
- package/dist/hooks/use-text-search.js +17 -0
- package/dist/hooks/use-text-search.js.map +1 -0
- package/dist/hooks/use-window-size.d.ts +11 -0
- package/dist/hooks/use-window-size.d.ts.map +1 -0
- package/dist/hooks/use-window-size.js +20 -0
- package/dist/hooks/use-window-size.js.map +1 -0
- package/dist/idle-gc.d.ts +3 -0
- package/dist/idle-gc.d.ts.map +1 -0
- package/dist/idle-gc.js +2 -0
- package/dist/idle-gc.js.map +1 -0
- package/dist/index.d.ts +47 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/reconciler/event-registry.d.ts +10 -0
- package/dist/reconciler/event-registry.d.ts.map +1 -0
- package/dist/reconciler/event-registry.js +32 -0
- package/dist/reconciler/event-registry.js.map +1 -0
- package/dist/reconciler/host-config.d.ts +68 -0
- package/dist/reconciler/host-config.d.ts.map +1 -0
- package/dist/reconciler/host-config.js +539 -0
- package/dist/reconciler/host-config.js.map +1 -0
- package/dist/reconciler/index.d.ts +3 -0
- package/dist/reconciler/index.d.ts.map +1 -0
- package/dist/reconciler/index.js +3 -0
- package/dist/reconciler/index.js.map +1 -0
- package/dist/reconciler/motion-bindings.d.ts +5 -0
- package/dist/reconciler/motion-bindings.d.ts.map +1 -0
- package/dist/reconciler/motion-bindings.js +10 -0
- package/dist/reconciler/motion-bindings.js.map +1 -0
- package/dist/reconciler/portal.d.ts +24 -0
- package/dist/reconciler/portal.d.ts.map +1 -0
- package/dist/reconciler/portal.js +32 -0
- package/dist/reconciler/portal.js.map +1 -0
- package/dist/reconciler/reconciler.d.ts +14 -0
- package/dist/reconciler/reconciler.d.ts.map +1 -0
- package/dist/reconciler/reconciler.js +126 -0
- package/dist/reconciler/reconciler.js.map +1 -0
- package/dist/reconciler/renderer.d.ts +42 -0
- package/dist/reconciler/renderer.d.ts.map +1 -0
- package/dist/reconciler/renderer.js +320 -0
- package/dist/reconciler/renderer.js.map +1 -0
- package/dist/testing.d.ts +14 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +43 -0
- package/dist/testing.js.map +1 -0
- package/dist/types/host.d.ts +215 -0
- package/dist/types/host.d.ts.map +1 -0
- package/dist/types/host.js +3 -0
- package/dist/types/host.js.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/jsx-dev-runtime.d.ts +143 -0
- package/jsx-dev-runtime.js +3 -0
- package/jsx-runtime.d.ts +145 -0
- package/jsx-runtime.js +1 -0
- package/package.json +102 -3
- package/README.md +0 -3
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/** Headless shadcn-shaped Combobox components with native GPUI text input. */
|
|
2
|
+
import React from "react";
|
|
3
|
+
import type { ReactElement, ReactNode } from "react";
|
|
4
|
+
import type { InputProps, Props, PublicInstance } from "../types/host.js";
|
|
5
|
+
import type { FloatingContentProps, StateStyle } from "./floating.js";
|
|
6
|
+
export type ComboboxValue = string | string[] | null;
|
|
7
|
+
export interface ComboboxProps extends Omit<Props, "children" | "onChange"> {
|
|
8
|
+
children?: ReactNode;
|
|
9
|
+
items?: readonly string[];
|
|
10
|
+
value?: ComboboxValue;
|
|
11
|
+
defaultValue?: ComboboxValue;
|
|
12
|
+
onValueChange?: (value: ComboboxValue) => void;
|
|
13
|
+
inputValue?: string;
|
|
14
|
+
defaultInputValue?: string;
|
|
15
|
+
onInputValueChange?: (value: string) => void;
|
|
16
|
+
open?: boolean;
|
|
17
|
+
defaultOpen?: boolean;
|
|
18
|
+
onOpenChange?: (open: boolean) => void;
|
|
19
|
+
multiple?: boolean;
|
|
20
|
+
disabled?: boolean;
|
|
21
|
+
autoHighlight?: boolean | "always";
|
|
22
|
+
filter?: null | ((item: string, query: string, itemToString: (item: string) => string) => boolean);
|
|
23
|
+
itemToStringValue?: (item: string) => string;
|
|
24
|
+
}
|
|
25
|
+
export declare function Combobox({ children, items, value: valueProp, defaultValue, onValueChange, inputValue: inputValueProp, defaultInputValue, onInputValueChange, open: openProp, defaultOpen, onOpenChange, multiple, disabled, autoHighlight, filter, itemToStringValue, style, ...props }: ComboboxProps): ReactElement;
|
|
26
|
+
export interface ComboboxInputProps extends InputProps {
|
|
27
|
+
disabled?: boolean;
|
|
28
|
+
}
|
|
29
|
+
export declare const ComboboxInput: React.ForwardRefExoticComponent<Omit<ComboboxInputProps, "ref"> & React.RefAttributes<PublicInstance>>;
|
|
30
|
+
export interface ComboboxTriggerProps extends Props {
|
|
31
|
+
asChild?: boolean;
|
|
32
|
+
disabled?: boolean;
|
|
33
|
+
}
|
|
34
|
+
export declare const ComboboxTrigger: React.ForwardRefExoticComponent<Omit<ComboboxTriggerProps, "ref"> & React.RefAttributes<PublicInstance>>;
|
|
35
|
+
export interface ComboboxValueProps extends Omit<Props, "children"> {
|
|
36
|
+
placeholder?: ReactNode;
|
|
37
|
+
children?: ReactNode | ((value: ComboboxValue) => ReactNode);
|
|
38
|
+
}
|
|
39
|
+
export declare const ComboboxValue: React.ForwardRefExoticComponent<Omit<ComboboxValueProps, "ref"> & React.RefAttributes<PublicInstance>>;
|
|
40
|
+
export declare const ComboboxContent: React.ForwardRefExoticComponent<Omit<FloatingContentProps, "ref"> & React.RefAttributes<PublicInstance>>;
|
|
41
|
+
export interface ComboboxListProps extends Omit<Props, "children"> {
|
|
42
|
+
children?: ReactNode | ((item: string) => ReactNode);
|
|
43
|
+
}
|
|
44
|
+
export declare const ComboboxList: React.ForwardRefExoticComponent<Omit<ComboboxListProps, "ref"> & React.RefAttributes<PublicInstance>>;
|
|
45
|
+
export interface ComboboxItemState {
|
|
46
|
+
selected: boolean;
|
|
47
|
+
highlighted: boolean;
|
|
48
|
+
disabled: boolean;
|
|
49
|
+
}
|
|
50
|
+
export interface ComboboxItemProps extends Omit<Props, "children" | "style"> {
|
|
51
|
+
value: string;
|
|
52
|
+
disabled?: boolean;
|
|
53
|
+
asChild?: boolean;
|
|
54
|
+
children?: ReactNode | ((state: ComboboxItemState) => ReactNode);
|
|
55
|
+
style?: StateStyle<ComboboxItemState>;
|
|
56
|
+
}
|
|
57
|
+
export declare const ComboboxItem: React.ForwardRefExoticComponent<Omit<ComboboxItemProps, "ref"> & React.RefAttributes<PublicInstance>>;
|
|
58
|
+
export declare const ComboboxEmpty: React.ForwardRefExoticComponent<Omit<Props, "ref"> & React.RefAttributes<PublicInstance>>;
|
|
59
|
+
export declare const ComboboxGroup: React.ForwardRefExoticComponent<Omit<Props, "ref"> & React.RefAttributes<PublicInstance>>;
|
|
60
|
+
export declare const ComboboxLabel: React.ForwardRefExoticComponent<Omit<Props, "ref"> & React.RefAttributes<PublicInstance>>;
|
|
61
|
+
export declare const ComboboxSeparator: React.ForwardRefExoticComponent<Omit<Props, "ref"> & React.RefAttributes<PublicInstance>>;
|
|
62
|
+
export { Combobox as Root, ComboboxContent as Content, ComboboxEmpty as Empty, ComboboxGroup as Group, ComboboxInput as Input, ComboboxItem as Item, ComboboxLabel as Label, ComboboxList as List, ComboboxSeparator as Separator, ComboboxTrigger as Trigger, ComboboxValue as Value, };
|
|
63
|
+
//# sourceMappingURL=combobox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"combobox.d.ts","sourceRoot":"","sources":["../../src/components/combobox.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
import { jsx as _jsx } from "@ghia/react/jsx-runtime";
|
|
2
|
+
/** Headless shadcn-shaped Combobox components with native GPUI text input. */
|
|
3
|
+
import React, { createContext, forwardRef, useContext, useRef, useState, } from "react";
|
|
4
|
+
import { preventEventDefault } from "@ghia/native/host";
|
|
5
|
+
import { useGpuix } from "../hooks/use-gpuix.js";
|
|
6
|
+
import { FloatingLayer, floatingRootStyle, renderSlot, resolveStyle, setRefs, useControllableState, DismissableLayer, } from "./floating.js";
|
|
7
|
+
const ComboboxContext = createContext(null);
|
|
8
|
+
function useComboboxContext(name) {
|
|
9
|
+
const context = useContext(ComboboxContext);
|
|
10
|
+
if (!context)
|
|
11
|
+
throw new Error(`${name} must be used inside Combobox`);
|
|
12
|
+
return context;
|
|
13
|
+
}
|
|
14
|
+
function defaultFilter({ items, query, itemToString, }) {
|
|
15
|
+
const normalized = query.trim().toLowerCase();
|
|
16
|
+
if (!normalized)
|
|
17
|
+
return [...items];
|
|
18
|
+
const matches = [];
|
|
19
|
+
items.forEach((item, index) => {
|
|
20
|
+
const label = itemToString(item).toLowerCase();
|
|
21
|
+
const rank = label.startsWith(normalized) ? 0 : label.includes(normalized) ? 1 : null;
|
|
22
|
+
if (rank !== null)
|
|
23
|
+
matches.push({ item, rank, index });
|
|
24
|
+
});
|
|
25
|
+
return matches
|
|
26
|
+
.sort((left, right) => left.rank - right.rank || left.index - right.index)
|
|
27
|
+
.map((match) => match.item);
|
|
28
|
+
}
|
|
29
|
+
export function Combobox({ children, items = [], value: valueProp, defaultValue = null, onValueChange, inputValue: inputValueProp, defaultInputValue = "", onInputValueChange, open: openProp, defaultOpen = false, onOpenChange, multiple = false, disabled = false, autoHighlight = false, filter, itemToStringValue = (item) => item, style, ...props }) {
|
|
30
|
+
const { renderer } = useGpuix();
|
|
31
|
+
const [value, setValue] = useControllableState({
|
|
32
|
+
value: valueProp,
|
|
33
|
+
defaultValue,
|
|
34
|
+
onChange: onValueChange,
|
|
35
|
+
});
|
|
36
|
+
const [inputValue, setInputValueState] = useControllableState({
|
|
37
|
+
value: inputValueProp,
|
|
38
|
+
defaultValue: defaultInputValue,
|
|
39
|
+
onChange: onInputValueChange,
|
|
40
|
+
});
|
|
41
|
+
const [open, setOpenState] = useControllableState({
|
|
42
|
+
value: openProp,
|
|
43
|
+
defaultValue: defaultOpen,
|
|
44
|
+
onChange: onOpenChange,
|
|
45
|
+
});
|
|
46
|
+
const [activeIndex, setActiveIndex] = useState(null);
|
|
47
|
+
const inputRef = useRef(null);
|
|
48
|
+
const disabledItems = useRef([]);
|
|
49
|
+
const itemToString = itemToStringValue;
|
|
50
|
+
const filterItems = (query) => {
|
|
51
|
+
if (filter === null)
|
|
52
|
+
return [...items];
|
|
53
|
+
if (filter) {
|
|
54
|
+
return items.filter((item) => filter(item, query, itemToStringValue));
|
|
55
|
+
}
|
|
56
|
+
return defaultFilter({ items, query, itemToString });
|
|
57
|
+
};
|
|
58
|
+
const filteredItems = filterItems(inputValue);
|
|
59
|
+
const setOpen = (nextOpen) => {
|
|
60
|
+
setOpenState(nextOpen);
|
|
61
|
+
if (nextOpen) {
|
|
62
|
+
queueMicrotask(() => {
|
|
63
|
+
if (inputRef.current)
|
|
64
|
+
renderer?.focusElement?.(inputRef.current.id);
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
const registerItem = ({ value: item, disabled: itemDisabled, mounted }) => {
|
|
69
|
+
disabledItems.current = disabledItems.current.filter((candidate) => candidate !== item);
|
|
70
|
+
if (mounted && itemDisabled)
|
|
71
|
+
disabledItems.current.push(item);
|
|
72
|
+
};
|
|
73
|
+
const updateInputValue = (nextValue) => {
|
|
74
|
+
setInputValueState(nextValue);
|
|
75
|
+
const nextItems = filterItems(nextValue);
|
|
76
|
+
const firstEnabled = nextItems.findIndex((item) => !disabledItems.current.includes(item));
|
|
77
|
+
setActiveIndex(autoHighlight && firstEnabled >= 0 ? firstEnabled : null);
|
|
78
|
+
};
|
|
79
|
+
const moveActive = (delta) => {
|
|
80
|
+
if (filteredItems.length === 0)
|
|
81
|
+
return;
|
|
82
|
+
let nextIndex = activeIndex === null ? (delta > 0 ? -1 : 0) : activeIndex;
|
|
83
|
+
for (let checked = 0; checked < filteredItems.length; checked++) {
|
|
84
|
+
nextIndex = (nextIndex + delta + filteredItems.length) % filteredItems.length;
|
|
85
|
+
if (!disabledItems.current.includes(filteredItems[nextIndex])) {
|
|
86
|
+
setActiveIndex(nextIndex);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
const selectItem = (item) => {
|
|
92
|
+
if (disabled || disabledItems.current.includes(item))
|
|
93
|
+
return;
|
|
94
|
+
if (multiple) {
|
|
95
|
+
const selected = Array.isArray(value) ? value : [];
|
|
96
|
+
const exists = selected.includes(item);
|
|
97
|
+
setValue(exists ? selected.filter((candidate) => candidate !== item) : [...selected, item]);
|
|
98
|
+
setInputValueState("");
|
|
99
|
+
setActiveIndex(null);
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
setValue(item);
|
|
103
|
+
setInputValueState(itemToString(item));
|
|
104
|
+
setOpen(false);
|
|
105
|
+
setActiveIndex(null);
|
|
106
|
+
};
|
|
107
|
+
const context = {
|
|
108
|
+
open,
|
|
109
|
+
disabled,
|
|
110
|
+
multiple,
|
|
111
|
+
value,
|
|
112
|
+
inputValue,
|
|
113
|
+
filteredItems,
|
|
114
|
+
activeIndex,
|
|
115
|
+
inputRef,
|
|
116
|
+
itemToString,
|
|
117
|
+
setOpen,
|
|
118
|
+
setInputValue: updateInputValue,
|
|
119
|
+
setActiveIndex,
|
|
120
|
+
moveActive,
|
|
121
|
+
selectItem,
|
|
122
|
+
registerItem,
|
|
123
|
+
};
|
|
124
|
+
return (_jsx(ComboboxContext.Provider, { value: context, children: _jsx("div", { ...props, style: floatingRootStyle(style), children: children }) }));
|
|
125
|
+
}
|
|
126
|
+
export const ComboboxInput = forwardRef(function ComboboxInput({ onChange, onClick, onFocus, onBlur, onKeyDown, onKeyUp, disabled: disabledProp, ...props }, forwardedRef) {
|
|
127
|
+
const context = useComboboxContext("ComboboxInput");
|
|
128
|
+
const disabled = disabledProp ?? context.disabled;
|
|
129
|
+
const ref = (value) => {
|
|
130
|
+
context.inputRef.current = value;
|
|
131
|
+
setRefs(value, forwardedRef);
|
|
132
|
+
};
|
|
133
|
+
return (_jsx("input", { ...props, ref: ref, value: context.inputValue, readOnly: disabled || props.readOnly, autoFocus: context.open, onClick: (event) => {
|
|
134
|
+
onClick?.(event);
|
|
135
|
+
if (!disabled)
|
|
136
|
+
context.setOpen(true);
|
|
137
|
+
}, onFocus: (event) => {
|
|
138
|
+
onFocus?.(event);
|
|
139
|
+
if (!disabled)
|
|
140
|
+
context.setOpen(true);
|
|
141
|
+
},
|
|
142
|
+
// Focus leaving the input closes the popup, like Base UI. Tab moves
|
|
143
|
+
// focus only when no handler prevented it, so a kept Tab keeps it open.
|
|
144
|
+
onBlur: (event) => {
|
|
145
|
+
onBlur?.(event);
|
|
146
|
+
context.setOpen(false);
|
|
147
|
+
}, onChange: (event) => {
|
|
148
|
+
onChange?.(event);
|
|
149
|
+
context.setInputValue(event.value);
|
|
150
|
+
if (!disabled)
|
|
151
|
+
context.setOpen(true);
|
|
152
|
+
}, onKeyDown: (event) => {
|
|
153
|
+
onKeyDown?.(event);
|
|
154
|
+
if (disabled)
|
|
155
|
+
return;
|
|
156
|
+
if (event.key === "ArrowDown" || (event.key === "n" && event.modifiers?.ctrl)) {
|
|
157
|
+
event.preventDefault();
|
|
158
|
+
context.moveActive(1);
|
|
159
|
+
}
|
|
160
|
+
else if (event.key === "ArrowUp" || (event.key === "p" && event.modifiers?.ctrl)) {
|
|
161
|
+
event.preventDefault();
|
|
162
|
+
context.moveActive(-1);
|
|
163
|
+
}
|
|
164
|
+
else if (event.key === "Enter" && context.activeIndex !== null) {
|
|
165
|
+
const item = context.filteredItems[context.activeIndex];
|
|
166
|
+
if (item !== undefined)
|
|
167
|
+
context.selectItem(item);
|
|
168
|
+
}
|
|
169
|
+
}, onKeyUp: (event) => {
|
|
170
|
+
onKeyUp?.(event);
|
|
171
|
+
} }));
|
|
172
|
+
});
|
|
173
|
+
export const ComboboxTrigger = forwardRef(function ComboboxTrigger({ asChild, disabled: disabledProp, children, onClick, onKeyDown, ...props }, ref) {
|
|
174
|
+
const context = useComboboxContext("ComboboxTrigger");
|
|
175
|
+
const disabled = disabledProp ?? context.disabled;
|
|
176
|
+
return renderSlot({
|
|
177
|
+
asChild,
|
|
178
|
+
children,
|
|
179
|
+
props: {
|
|
180
|
+
...props,
|
|
181
|
+
formControl: disabled ? "disabled" : "enabled",
|
|
182
|
+
tabIndex: disabled ? -1 : props.tabIndex,
|
|
183
|
+
onClick: (event) => {
|
|
184
|
+
onClick?.(event);
|
|
185
|
+
if (!disabled)
|
|
186
|
+
context.setOpen(!context.open);
|
|
187
|
+
},
|
|
188
|
+
onKeyDown: (event) => {
|
|
189
|
+
onKeyDown?.(event);
|
|
190
|
+
if (disabled)
|
|
191
|
+
return;
|
|
192
|
+
if (event.key === "ArrowDown" || event.key === "ArrowUp") {
|
|
193
|
+
event.preventDefault();
|
|
194
|
+
context.setOpen(true);
|
|
195
|
+
}
|
|
196
|
+
},
|
|
197
|
+
},
|
|
198
|
+
ref,
|
|
199
|
+
defaultTabIndex: 0,
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
export const ComboboxValue = forwardRef(function ComboboxValue({ placeholder, children, ...props }, ref) {
|
|
203
|
+
const context = useComboboxContext("ComboboxValue");
|
|
204
|
+
const value = Array.isArray(context.value)
|
|
205
|
+
? context.value.map(context.itemToString).join(", ")
|
|
206
|
+
: context.value === null
|
|
207
|
+
? ""
|
|
208
|
+
: context.itemToString(context.value);
|
|
209
|
+
const content = typeof children === "function" ? children(context.value) : children;
|
|
210
|
+
return _jsx("div", { ...props, ref: ref, children: content ?? (value || placeholder) });
|
|
211
|
+
});
|
|
212
|
+
export const ComboboxContent = forwardRef(function ComboboxContent({ children, onMouseDownOutside, ...props }, ref) {
|
|
213
|
+
const context = useComboboxContext("ComboboxContent");
|
|
214
|
+
if (!context.open)
|
|
215
|
+
return null;
|
|
216
|
+
return (_jsx(DismissableLayer, { onEscapeKeyDown: () => context.setOpen(false), children: _jsx(FloatingLayer, { ...props, ref: ref, onMouseDownOutside: (event) => {
|
|
217
|
+
onMouseDownOutside?.(event);
|
|
218
|
+
context.setOpen(false);
|
|
219
|
+
}, children: children }) }));
|
|
220
|
+
});
|
|
221
|
+
export const ComboboxList = forwardRef(function ComboboxList({ children, ...props }, ref) {
|
|
222
|
+
const context = useComboboxContext("ComboboxList");
|
|
223
|
+
return (_jsx("div", { ...props, ref: ref, children: typeof children === "function"
|
|
224
|
+
? context.filteredItems.map((item) => children(item))
|
|
225
|
+
: children }));
|
|
226
|
+
});
|
|
227
|
+
export const ComboboxItem = forwardRef(function ComboboxItem({ value, disabled = false, asChild, children, style, onClick, onMouseDown, onMouseEnter, ...props }, ref) {
|
|
228
|
+
const context = useComboboxContext("ComboboxItem");
|
|
229
|
+
const index = context.filteredItems.indexOf(value);
|
|
230
|
+
const selected = Array.isArray(context.value)
|
|
231
|
+
? context.value.includes(value)
|
|
232
|
+
: context.value === value;
|
|
233
|
+
const state = { selected, highlighted: context.activeIndex === index, disabled };
|
|
234
|
+
const itemRef = (instance) => {
|
|
235
|
+
context.registerItem({ value, disabled, mounted: instance !== null });
|
|
236
|
+
setRefs(instance, ref);
|
|
237
|
+
};
|
|
238
|
+
const onItemMouseEnter = (event) => {
|
|
239
|
+
onMouseEnter?.(event);
|
|
240
|
+
if (!disabled && index >= 0)
|
|
241
|
+
context.setActiveIndex(index);
|
|
242
|
+
};
|
|
243
|
+
const onItemClick = (event) => {
|
|
244
|
+
onClick?.(event);
|
|
245
|
+
if (!disabled)
|
|
246
|
+
context.selectItem(value);
|
|
247
|
+
};
|
|
248
|
+
return renderSlot({
|
|
249
|
+
asChild,
|
|
250
|
+
children: typeof children === "function" ? children(state) : children,
|
|
251
|
+
props: {
|
|
252
|
+
...props,
|
|
253
|
+
style: resolveStyle(style, state),
|
|
254
|
+
onMouseEnter: onItemMouseEnter,
|
|
255
|
+
// A press on an item must not take focus from the input, as in Base UI.
|
|
256
|
+
onMouseDown: (event) => {
|
|
257
|
+
onMouseDown?.(event);
|
|
258
|
+
preventEventDefault(event);
|
|
259
|
+
},
|
|
260
|
+
onClick: onItemClick,
|
|
261
|
+
},
|
|
262
|
+
ref: itemRef,
|
|
263
|
+
});
|
|
264
|
+
});
|
|
265
|
+
export const ComboboxEmpty = forwardRef(function ComboboxEmpty(props, ref) {
|
|
266
|
+
const context = useComboboxContext("ComboboxEmpty");
|
|
267
|
+
return context.filteredItems.length === 0 ? _jsx("div", { ...props, ref: ref }) : null;
|
|
268
|
+
});
|
|
269
|
+
export const ComboboxGroup = forwardRef(function ComboboxGroup(props, ref) {
|
|
270
|
+
return _jsx("div", { ...props, ref: ref });
|
|
271
|
+
});
|
|
272
|
+
export const ComboboxLabel = forwardRef(function ComboboxLabel(props, ref) {
|
|
273
|
+
return _jsx("div", { ...props, ref: ref });
|
|
274
|
+
});
|
|
275
|
+
export const ComboboxSeparator = forwardRef(function ComboboxSeparator(props, ref) {
|
|
276
|
+
return _jsx("div", { ...props, ref: ref });
|
|
277
|
+
});
|
|
278
|
+
export { Combobox as Root, ComboboxContent as Content, ComboboxEmpty as Empty, ComboboxGroup as Group, ComboboxInput as Input, ComboboxItem as Item, ComboboxLabel as Label, ComboboxList as List, ComboboxSeparator as Separator, ComboboxTrigger as Trigger, ComboboxValue as Value, };
|
|
279
|
+
//# sourceMappingURL=combobox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"combobox.js","sourceRoot":"","sources":["../../src/components/combobox.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/** Headless Base UI-shaped Dialog over a full-window GPUIX anchored layer. */
|
|
2
|
+
import React from "react";
|
|
3
|
+
import type { ReactElement, ReactNode } from "react";
|
|
4
|
+
import type { FocusTarget, Props, PublicInstance } from "../types/host.js";
|
|
5
|
+
export interface DialogProps {
|
|
6
|
+
children?: ReactNode;
|
|
7
|
+
open?: boolean;
|
|
8
|
+
defaultOpen?: boolean;
|
|
9
|
+
onOpenChange?: (open: boolean) => void;
|
|
10
|
+
/** Default true: blocks the page behind, keeps Tab inside the popup. */
|
|
11
|
+
modal?: boolean;
|
|
12
|
+
/** Keep the dialog open when the backdrop is pressed. */
|
|
13
|
+
disablePointerDismissal?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare function Dialog({ children, open: openProp, defaultOpen, onOpenChange, modal, disablePointerDismissal, }: DialogProps): ReactElement;
|
|
16
|
+
export interface DialogTriggerProps extends Props {
|
|
17
|
+
asChild?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare const DialogTrigger: React.ForwardRefExoticComponent<Omit<DialogTriggerProps, "ref"> & React.RefAttributes<PublicInstance>>;
|
|
20
|
+
export interface DialogPortalProps extends Props {
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* A full-window layer painted after the page, so it covers `<virtual-list>`
|
|
24
|
+
* and everything else. Mounted only while the dialog is open.
|
|
25
|
+
*/
|
|
26
|
+
export declare const DialogPortal: React.ForwardRefExoticComponent<Omit<DialogPortalProps, "ref"> & React.RefAttributes<PublicInstance>>;
|
|
27
|
+
export interface DialogBackdropProps extends Props {
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Covers the window behind the popup. A click on it closes the dialog: a click
|
|
31
|
+
* only reaches the backdrop when the press and the release were both on it.
|
|
32
|
+
*/
|
|
33
|
+
export declare const DialogBackdrop: React.ForwardRefExoticComponent<Omit<DialogBackdropProps, "ref"> & React.RefAttributes<PublicInstance>>;
|
|
34
|
+
export interface DialogPopupProps extends Props {
|
|
35
|
+
/** Focus on open. Default: the popup itself, so the first Tab enters it. */
|
|
36
|
+
initialFocus?: FocusTarget<PublicInstance>;
|
|
37
|
+
/** Focus on close. Default: the trigger, else the element focused before open. */
|
|
38
|
+
finalFocus?: FocusTarget<PublicInstance>;
|
|
39
|
+
}
|
|
40
|
+
/** The dialog surface. Moves focus in on open and back out on close. */
|
|
41
|
+
export declare const DialogPopup: React.ForwardRefExoticComponent<Omit<DialogPopupProps, "ref"> & React.RefAttributes<PublicInstance>>;
|
|
42
|
+
export declare const DialogTitle: React.ForwardRefExoticComponent<Omit<Props, "ref"> & React.RefAttributes<PublicInstance>>;
|
|
43
|
+
export declare const DialogDescription: React.ForwardRefExoticComponent<Omit<Props, "ref"> & React.RefAttributes<PublicInstance>>;
|
|
44
|
+
export interface DialogCloseProps extends Props {
|
|
45
|
+
asChild?: boolean;
|
|
46
|
+
}
|
|
47
|
+
export declare const DialogClose: React.ForwardRefExoticComponent<Omit<DialogCloseProps, "ref"> & React.RefAttributes<PublicInstance>>;
|
|
48
|
+
export { Dialog as Root, DialogBackdrop as Backdrop, DialogClose as Close, DialogDescription as Description, DialogPopup as Popup, DialogPortal as Portal, DialogTitle as Title, DialogTrigger as Trigger, };
|
|
49
|
+
//# sourceMappingURL=dialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["../../src/components/dialog.tsx"],"names":[],"mappings":"AAAA,8EAA8E;AAE9E,OAAO,KAMN,MAAM,OAAO,CAAA;AACd,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEpD,OAAO,KAAK,EAAE,WAAW,EAA8B,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AA0BtG,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACtC,wEAAwE;IACxE,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,yDAAyD;IACzD,uBAAuB,CAAC,EAAE,OAAO,CAAA;CAClC;AAED,wBAAgB,MAAM,CAAC,EACrB,QAAQ,EACR,IAAI,EAAE,QAAQ,EACd,WAAmB,EACnB,YAAY,EACZ,KAAY,EACZ,uBAA+B,GAChC,EAAE,WAAW,GAAG,YAAY,CAe5B;AAED,MAAM,WAAW,kBAAmB,SAAQ,KAAK;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,eAAO,MAAM,aAAa,wGA+BzB,CAAA;AAED,MAAM,WAAW,iBAAkB,SAAQ,KAAK;CAAG;AAEnD;;;GAGG;AACH,eAAO,MAAM,YAAY,uGA8BxB,CAAA;AAED,MAAM,WAAW,mBAAoB,SAAQ,KAAK;CAAG;AAErD;;;GAGG;AACH,eAAO,MAAM,cAAc,yGAe1B,CAAA;AAED,MAAM,WAAW,gBAAiB,SAAQ,KAAK;IAC7C,4EAA4E;IAC5E,YAAY,CAAC,EAAE,WAAW,CAAC,cAAc,CAAC,CAAA;IAC1C,kFAAkF;IAClF,UAAU,CAAC,EAAE,WAAW,CAAC,cAAc,CAAC,CAAA;CACzC;AAED,wEAAwE;AACxE,eAAO,MAAM,WAAW,sGA4CvB,CAAA;AAED,eAAO,MAAM,WAAW,2FAEtB,CAAA;AAEF,eAAO,MAAM,iBAAiB,2FAI7B,CAAA;AAED,MAAM,WAAW,gBAAiB,SAAQ,KAAK;IAC7C,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,eAAO,MAAM,WAAW,sGAuBvB,CAAA;AAED,OAAO,EACL,MAAM,IAAI,IAAI,EACd,cAAc,IAAI,QAAQ,EAC1B,WAAW,IAAI,KAAK,EACpB,iBAAiB,IAAI,WAAW,EAChC,WAAW,IAAI,KAAK,EACpB,YAAY,IAAI,MAAM,EACtB,WAAW,IAAI,KAAK,EACpB,aAAa,IAAI,OAAO,GACzB,CAAA"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { jsx as _jsx } from "@ghia/react/jsx-runtime";
|
|
2
|
+
/** Headless Base UI-shaped Dialog over a full-window GPUIX anchored layer. */
|
|
3
|
+
import React, { createContext, forwardRef, useCallback, useContext, useRef, } from "react";
|
|
4
|
+
import { resolveFocusTarget } from "@ghia/native/host";
|
|
5
|
+
import { useGpuix, useGpuixRequired } from "../hooks/use-gpuix.js";
|
|
6
|
+
import { buttonProps } from "./button.js";
|
|
7
|
+
import { renderSlot, setRefs, useControllableState, DismissableLayer, } from "./floating.js";
|
|
8
|
+
const DialogContext = createContext(null);
|
|
9
|
+
function useDialogContext(name) {
|
|
10
|
+
const context = useContext(DialogContext);
|
|
11
|
+
if (!context)
|
|
12
|
+
throw new Error(`${name} must be used inside Dialog`);
|
|
13
|
+
return context;
|
|
14
|
+
}
|
|
15
|
+
export function Dialog({ children, open: openProp, defaultOpen = false, onOpenChange, modal = true, disablePointerDismissal = false, }) {
|
|
16
|
+
const [open, setOpen] = useControllableState({
|
|
17
|
+
value: openProp,
|
|
18
|
+
defaultValue: defaultOpen,
|
|
19
|
+
onChange: onOpenChange,
|
|
20
|
+
});
|
|
21
|
+
const triggerRef = useRef(null);
|
|
22
|
+
const context = {
|
|
23
|
+
open,
|
|
24
|
+
modal,
|
|
25
|
+
disablePointerDismissal,
|
|
26
|
+
setOpen,
|
|
27
|
+
triggerRef,
|
|
28
|
+
};
|
|
29
|
+
return _jsx(DialogContext.Provider, { value: context, children: children });
|
|
30
|
+
}
|
|
31
|
+
export const DialogTrigger = forwardRef(function DialogTrigger({ asChild, children, onClick, onKeyDown, onKeyUp, ...props }, forwardedRef) {
|
|
32
|
+
const context = useDialogContext("DialogTrigger");
|
|
33
|
+
const renderer = useGpuixRequired();
|
|
34
|
+
const { triggerRef } = context;
|
|
35
|
+
// Stable, so React does not detach it (set null) in the commit that
|
|
36
|
+
// unmounts the popup, which is exactly when the popup reads it.
|
|
37
|
+
const ref = useCallback((value) => {
|
|
38
|
+
triggerRef.current = value;
|
|
39
|
+
setRefs(value, forwardedRef);
|
|
40
|
+
}, [triggerRef, forwardedRef]);
|
|
41
|
+
return renderSlot({
|
|
42
|
+
asChild,
|
|
43
|
+
children,
|
|
44
|
+
props: {
|
|
45
|
+
...props,
|
|
46
|
+
"aria-expanded": context.open,
|
|
47
|
+
...buttonProps({
|
|
48
|
+
tabIndex: props.tabIndex,
|
|
49
|
+
onKeyDown,
|
|
50
|
+
onKeyUp,
|
|
51
|
+
onClick: (event) => {
|
|
52
|
+
onClick?.(event);
|
|
53
|
+
context.setOpen(true);
|
|
54
|
+
},
|
|
55
|
+
}, renderer),
|
|
56
|
+
},
|
|
57
|
+
ref,
|
|
58
|
+
defaultTabIndex: 0,
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
/**
|
|
62
|
+
* A full-window layer painted after the page, so it covers `<virtual-list>`
|
|
63
|
+
* and everything else. Mounted only while the dialog is open.
|
|
64
|
+
*/
|
|
65
|
+
export const DialogPortal = forwardRef(function DialogPortal({ style, children, ...props }, ref) {
|
|
66
|
+
const context = useDialogContext("DialogPortal");
|
|
67
|
+
if (!context.open)
|
|
68
|
+
return null;
|
|
69
|
+
const { modal } = context;
|
|
70
|
+
return (_jsx("anchored", { ...props, ref: ref,
|
|
71
|
+
// Native sizes the layer to the viewport, so a resize never leaves an
|
|
72
|
+
// uncovered strip that clicks could reach.
|
|
73
|
+
fill: "window", deferred: true,
|
|
74
|
+
// Below menus and tooltips (priority 1), so a Select inside the popup
|
|
75
|
+
// opens on top of it.
|
|
76
|
+
priority: 0, style: {
|
|
77
|
+
display: "flex",
|
|
78
|
+
alignItems: "center",
|
|
79
|
+
justifyContent: "center",
|
|
80
|
+
// Explicit transparent: the Backdrop paints the dim, not the layer.
|
|
81
|
+
backgroundColor: "transparent",
|
|
82
|
+
...style,
|
|
83
|
+
pointerEvents: modal ? style?.pointerEvents : "none",
|
|
84
|
+
}, children: children }));
|
|
85
|
+
});
|
|
86
|
+
/**
|
|
87
|
+
* Covers the window behind the popup. A click on it closes the dialog: a click
|
|
88
|
+
* only reaches the backdrop when the press and the release were both on it.
|
|
89
|
+
*/
|
|
90
|
+
export const DialogBackdrop = forwardRef(function DialogBackdrop({ style, onClick, ...props }, ref) {
|
|
91
|
+
const context = useDialogContext("DialogBackdrop");
|
|
92
|
+
return (_jsx("div", { ...props, ref: ref, style: { position: "absolute", top: 0, right: 0, bottom: 0, left: 0, ...style }, onClick: (event) => {
|
|
93
|
+
onClick?.(event);
|
|
94
|
+
if (!context.disablePointerDismissal)
|
|
95
|
+
context.setOpen(false);
|
|
96
|
+
} }));
|
|
97
|
+
});
|
|
98
|
+
/** The dialog surface. Moves focus in on open and back out on close. */
|
|
99
|
+
export const DialogPopup = forwardRef(function DialogPopup({ style, onKeyDown, initialFocus, finalFocus, tabIndex = -1, role = "dialog", ...props }, forwardedRef) {
|
|
100
|
+
const context = useDialogContext("DialogPopup");
|
|
101
|
+
const { renderer } = useGpuix();
|
|
102
|
+
const popupRef = useRef(null);
|
|
103
|
+
if (!context.open)
|
|
104
|
+
return null;
|
|
105
|
+
return (_jsx(DismissableLayer, { onEscapeKeyDown: () => context.setOpen(false), initialFocus: () => resolveFocusTarget(initialFocus, () => popupRef.current?.id ?? null), finalFocus: (previous) => resolveFocusTarget(finalFocus, () => context.triggerRef.current?.id ?? previous), children: _jsx("div", { ...props, ref: (value) => {
|
|
106
|
+
popupRef.current = value;
|
|
107
|
+
setRefs(value, forwardedRef);
|
|
108
|
+
}, role: role, tabIndex: tabIndex,
|
|
109
|
+
// A press inside the popup must never reach the backdrop behind it:
|
|
110
|
+
// the backdrop is positioned, so the popup is too, and being later in
|
|
111
|
+
// the tree it paints above it.
|
|
112
|
+
// The popup is focused so the first Tab enters it; it is a surface,
|
|
113
|
+
// not a control, so it gets no focus look of its own.
|
|
114
|
+
style: { position: "relative", pointerEvents: "auto", keyboardFocusDim: false, ...style }, onKeyDown: (event) => {
|
|
115
|
+
onKeyDown?.(event);
|
|
116
|
+
if (!context.modal || event.key !== "Tab" || event.defaultPrevented)
|
|
117
|
+
return;
|
|
118
|
+
const popup = popupRef.current;
|
|
119
|
+
if (!popup)
|
|
120
|
+
return;
|
|
121
|
+
event.preventDefault();
|
|
122
|
+
if (event.modifiers?.shift)
|
|
123
|
+
renderer?.focusPreviousWithin?.(popup.id);
|
|
124
|
+
else
|
|
125
|
+
renderer?.focusNextWithin?.(popup.id);
|
|
126
|
+
} }) }));
|
|
127
|
+
});
|
|
128
|
+
export const DialogTitle = forwardRef(function DialogTitle(props, ref) {
|
|
129
|
+
return _jsx("div", { role: "heading", "aria-level": 2, ...props, ref: ref });
|
|
130
|
+
});
|
|
131
|
+
export const DialogDescription = forwardRef(function DialogDescription(props, ref) {
|
|
132
|
+
return _jsx("div", { ...props, ref: ref });
|
|
133
|
+
});
|
|
134
|
+
export const DialogClose = forwardRef(function DialogClose({ asChild, children, onClick, onKeyDown, onKeyUp, ...props }, ref) {
|
|
135
|
+
const context = useDialogContext("DialogClose");
|
|
136
|
+
const renderer = useGpuixRequired();
|
|
137
|
+
return renderSlot({
|
|
138
|
+
asChild,
|
|
139
|
+
children,
|
|
140
|
+
props: {
|
|
141
|
+
...props,
|
|
142
|
+
...buttonProps({
|
|
143
|
+
tabIndex: props.tabIndex,
|
|
144
|
+
onKeyDown,
|
|
145
|
+
onKeyUp,
|
|
146
|
+
onClick: (event) => {
|
|
147
|
+
onClick?.(event);
|
|
148
|
+
context.setOpen(false);
|
|
149
|
+
},
|
|
150
|
+
}, renderer),
|
|
151
|
+
},
|
|
152
|
+
ref,
|
|
153
|
+
defaultTabIndex: 0,
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
export { Dialog as Root, DialogBackdrop as Backdrop, DialogClose as Close, DialogDescription as Description, DialogPopup as Popup, DialogPortal as Portal, DialogTitle as Title, DialogTrigger as Trigger, };
|
|
157
|
+
//# sourceMappingURL=dialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialog.js","sourceRoot":"","sources":["../../src/components/dialog.tsx"],"names":[],"mappings":"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"}
|