UEA-PRODEM
This commit is contained in:
+141
-116
@@ -16,6 +16,7 @@ import { useId } from "@radix-ui/react-id";
|
||||
import * as PopperPrimitive from "@radix-ui/react-popper";
|
||||
import { createPopperScope } from "@radix-ui/react-popper";
|
||||
import { Portal as PortalPrimitive } from "@radix-ui/react-portal";
|
||||
import { Presence } from "@radix-ui/react-presence";
|
||||
import { Primitive } from "@radix-ui/react-primitive";
|
||||
import { createSlot } from "@radix-ui/react-slot";
|
||||
import { useCallbackRef } from "@radix-ui/react-use-callback-ref";
|
||||
@@ -25,7 +26,7 @@ import { usePrevious } from "@radix-ui/react-use-previous";
|
||||
import { VISUALLY_HIDDEN_STYLES } from "@radix-ui/react-visually-hidden";
|
||||
import { hideOthers } from "aria-hidden";
|
||||
import { RemoveScroll } from "react-remove-scroll";
|
||||
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
||||
import { Fragment as Fragment2, jsx, jsxs } from "react/jsx-runtime";
|
||||
var OPEN_KEYS = [" ", "Enter", "ArrowUp", "ArrowDown"];
|
||||
var SELECTION_KEYS = [" ", "Enter"];
|
||||
var SELECT_NAME = "Select";
|
||||
@@ -35,9 +36,10 @@ var [createSelectContext, createSelectScope] = createContextScope(SELECT_NAME, [
|
||||
createPopperScope
|
||||
]);
|
||||
var usePopperScope = createPopperScope();
|
||||
var [SelectProvider, useSelectContext] = createSelectContext(SELECT_NAME);
|
||||
var [SelectProviderImpl, useSelectContext] = createSelectContext(SELECT_NAME);
|
||||
var [SelectNativeOptionsProvider, useSelectNativeOptionsContext] = createSelectContext(SELECT_NAME);
|
||||
var Select = (props) => {
|
||||
var PROVIDER_NAME = "SelectProvider";
|
||||
function SelectProvider(props) {
|
||||
const {
|
||||
__scopeSelect,
|
||||
children,
|
||||
@@ -52,7 +54,9 @@ var Select = (props) => {
|
||||
autoComplete,
|
||||
disabled,
|
||||
required,
|
||||
form
|
||||
form,
|
||||
// @ts-expect-error internal render prop used by `Select` to compose its default parts
|
||||
internal_do_not_use_render
|
||||
} = props;
|
||||
const popperScope = usePopperScope(__scopeSelect);
|
||||
const [trigger, setTrigger] = React.useState(null);
|
||||
@@ -72,68 +76,72 @@ var Select = (props) => {
|
||||
caller: SELECT_NAME
|
||||
});
|
||||
const triggerPointerDownPosRef = React.useRef(null);
|
||||
const isFormControl = trigger ? form || !!trigger.closest("form") : true;
|
||||
const isFormControl = trigger ? !!form || !!trigger.closest("form") : true;
|
||||
const [nativeOptionsSet, setNativeOptionsSet] = React.useState(/* @__PURE__ */ new Set());
|
||||
const contentId = useId();
|
||||
const nativeSelectKey = Array.from(nativeOptionsSet).map((option) => option.props.value).join(";");
|
||||
return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsxs(
|
||||
const handleNativeOptionAdd = React.useCallback((option) => {
|
||||
setNativeOptionsSet((prev) => new Set(prev).add(option));
|
||||
}, []);
|
||||
const handleNativeOptionRemove = React.useCallback((option) => {
|
||||
setNativeOptionsSet((prev) => {
|
||||
const optionsSet = new Set(prev);
|
||||
optionsSet.delete(option);
|
||||
return optionsSet;
|
||||
});
|
||||
}, []);
|
||||
const context = {
|
||||
required,
|
||||
trigger,
|
||||
onTriggerChange: setTrigger,
|
||||
valueNode,
|
||||
onValueNodeChange: setValueNode,
|
||||
valueNodeHasChildren,
|
||||
onValueNodeHasChildrenChange: setValueNodeHasChildren,
|
||||
contentId,
|
||||
value,
|
||||
onValueChange: setValue,
|
||||
open,
|
||||
onOpenChange: setOpen,
|
||||
dir: direction,
|
||||
triggerPointerDownPosRef,
|
||||
disabled,
|
||||
name,
|
||||
autoComplete,
|
||||
form,
|
||||
nativeOptions: nativeOptionsSet,
|
||||
nativeSelectKey,
|
||||
isFormControl
|
||||
};
|
||||
return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(SelectProviderImpl, { scope: __scopeSelect, ...context, children: /* @__PURE__ */ jsx(Collection.Provider, { scope: __scopeSelect, children: /* @__PURE__ */ jsx(
|
||||
SelectNativeOptionsProvider,
|
||||
{
|
||||
scope: __scopeSelect,
|
||||
onNativeOptionAdd: handleNativeOptionAdd,
|
||||
onNativeOptionRemove: handleNativeOptionRemove,
|
||||
children: isFunction(internal_do_not_use_render) ? internal_do_not_use_render(context) : children
|
||||
}
|
||||
) }) }) });
|
||||
}
|
||||
SelectProvider.displayName = PROVIDER_NAME;
|
||||
var Select = (props) => {
|
||||
const { __scopeSelect, children, ...providerProps } = props;
|
||||
return /* @__PURE__ */ jsx(
|
||||
SelectProvider,
|
||||
{
|
||||
required,
|
||||
scope: __scopeSelect,
|
||||
trigger,
|
||||
onTriggerChange: setTrigger,
|
||||
valueNode,
|
||||
onValueNodeChange: setValueNode,
|
||||
valueNodeHasChildren,
|
||||
onValueNodeHasChildrenChange: setValueNodeHasChildren,
|
||||
contentId: useId(),
|
||||
value,
|
||||
onValueChange: setValue,
|
||||
open,
|
||||
onOpenChange: setOpen,
|
||||
dir: direction,
|
||||
triggerPointerDownPosRef,
|
||||
disabled,
|
||||
children: [
|
||||
/* @__PURE__ */ jsx(Collection.Provider, { scope: __scopeSelect, children: /* @__PURE__ */ jsx(
|
||||
SelectNativeOptionsProvider,
|
||||
{
|
||||
scope: props.__scopeSelect,
|
||||
onNativeOptionAdd: React.useCallback((option) => {
|
||||
setNativeOptionsSet((prev) => new Set(prev).add(option));
|
||||
}, []),
|
||||
onNativeOptionRemove: React.useCallback((option) => {
|
||||
setNativeOptionsSet((prev) => {
|
||||
const optionsSet = new Set(prev);
|
||||
optionsSet.delete(option);
|
||||
return optionsSet;
|
||||
});
|
||||
}, []),
|
||||
children
|
||||
}
|
||||
) }),
|
||||
isFormControl ? /* @__PURE__ */ jsxs(
|
||||
__scopeSelect,
|
||||
...providerProps,
|
||||
internal_do_not_use_render: ({ isFormControl }) => /* @__PURE__ */ jsxs(Fragment2, { children: [
|
||||
children,
|
||||
isFormControl ? /* @__PURE__ */ jsx(
|
||||
SelectBubbleInput,
|
||||
{
|
||||
"aria-hidden": true,
|
||||
required,
|
||||
tabIndex: -1,
|
||||
name,
|
||||
autoComplete,
|
||||
value,
|
||||
onChange: (event) => setValue(event.target.value),
|
||||
disabled,
|
||||
form,
|
||||
children: [
|
||||
value === void 0 ? /* @__PURE__ */ jsx("option", { value: "" }) : null,
|
||||
Array.from(nativeOptionsSet)
|
||||
]
|
||||
},
|
||||
nativeSelectKey
|
||||
__scopeSelect
|
||||
}
|
||||
) : null
|
||||
]
|
||||
] })
|
||||
}
|
||||
) });
|
||||
);
|
||||
};
|
||||
Select.displayName = SELECT_NAME;
|
||||
var TRIGGER_NAME = "SelectTrigger";
|
||||
@@ -171,7 +179,7 @@ var SelectTrigger = React.forwardRef(
|
||||
{
|
||||
type: "button",
|
||||
role: "combobox",
|
||||
"aria-controls": context.contentId,
|
||||
"aria-controls": context.open ? context.contentId : void 0,
|
||||
"aria-expanded": context.open,
|
||||
"aria-required": context.required,
|
||||
"aria-autocomplete": "none",
|
||||
@@ -225,13 +233,15 @@ var SelectValue = React.forwardRef(
|
||||
useLayoutEffect(() => {
|
||||
onValueNodeHasChildrenChange(hasChildren);
|
||||
}, [onValueNodeHasChildrenChange, hasChildren]);
|
||||
const showPlaceholder = shouldShowPlaceholder(context.value);
|
||||
return /* @__PURE__ */ jsx(
|
||||
Primitive.span,
|
||||
{
|
||||
...valueProps,
|
||||
asChild: showPlaceholder ? false : valueProps.asChild,
|
||||
ref: composedRefs,
|
||||
style: { pointerEvents: "none" },
|
||||
children: shouldShowPlaceholder(context.value) ? /* @__PURE__ */ jsx(Fragment, { children: placeholder }) : children
|
||||
children: /* @__PURE__ */ jsx(React.Fragment, { children: showPlaceholder ? placeholder : children }, showPlaceholder ? "placeholder" : "value")
|
||||
}
|
||||
);
|
||||
}
|
||||
@@ -246,37 +256,45 @@ var SelectIcon = React.forwardRef(
|
||||
);
|
||||
SelectIcon.displayName = ICON_NAME;
|
||||
var PORTAL_NAME = "SelectPortal";
|
||||
var [PortalProvider, usePortalContext] = createSelectContext(PORTAL_NAME, {
|
||||
forceMount: void 0
|
||||
});
|
||||
var SelectPortal = (props) => {
|
||||
return /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, ...props });
|
||||
const { __scopeSelect, forceMount, ...portalProps } = props;
|
||||
return /* @__PURE__ */ jsx(PortalProvider, { scope: props.__scopeSelect, forceMount, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, ...portalProps }) });
|
||||
};
|
||||
SelectPortal.displayName = PORTAL_NAME;
|
||||
var CONTENT_NAME = "SelectContent";
|
||||
var SelectContent = React.forwardRef(
|
||||
(props, forwardedRef) => {
|
||||
const portalContext = usePortalContext(CONTENT_NAME, props.__scopeSelect);
|
||||
const { forceMount = portalContext.forceMount, ...contentProps } = props;
|
||||
const context = useSelectContext(CONTENT_NAME, props.__scopeSelect);
|
||||
const [fragment, setFragment] = React.useState();
|
||||
useLayoutEffect(() => {
|
||||
setFragment(new DocumentFragment());
|
||||
}, []);
|
||||
if (!context.open) {
|
||||
const frag = fragment;
|
||||
return frag ? ReactDOM.createPortal(
|
||||
/* @__PURE__ */ jsx(SelectContentProvider, { scope: props.__scopeSelect, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeSelect, children: /* @__PURE__ */ jsx("div", { children: props.children }) }) }),
|
||||
frag
|
||||
) : null;
|
||||
}
|
||||
return /* @__PURE__ */ jsx(SelectContentImpl, { ...props, ref: forwardedRef });
|
||||
return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: ({ present }) => present ? /* @__PURE__ */ jsx(SelectContentImpl, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(SelectContentFragment, { ...contentProps, fragment }) });
|
||||
}
|
||||
);
|
||||
SelectContent.displayName = CONTENT_NAME;
|
||||
var SelectContentFragment = React.forwardRef((props, forwardedRef) => {
|
||||
const { __scopeSelect, children, fragment } = props;
|
||||
if (!fragment) return null;
|
||||
return ReactDOM.createPortal(
|
||||
/* @__PURE__ */ jsx(SelectContentProvider, { scope: __scopeSelect, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: __scopeSelect, children: /* @__PURE__ */ jsx("div", { ref: forwardedRef, children }) }) }),
|
||||
fragment
|
||||
);
|
||||
});
|
||||
SelectContentFragment.displayName = "SelectContentFragment";
|
||||
var CONTENT_MARGIN = 10;
|
||||
var [SelectContentProvider, useSelectContentContext] = createSelectContext(CONTENT_NAME);
|
||||
var CONTENT_IMPL_NAME = "SelectContentImpl";
|
||||
var Slot = createSlot("SelectContent.RemoveScroll");
|
||||
var SelectContentImpl = React.forwardRef(
|
||||
(props, forwardedRef) => {
|
||||
const { __scopeSelect } = props;
|
||||
const {
|
||||
__scopeSelect,
|
||||
position = "item-aligned",
|
||||
onCloseAutoFocus,
|
||||
onEscapeKeyDown,
|
||||
@@ -350,7 +368,7 @@ var SelectContentImpl = React.forwardRef(
|
||||
if (pointerMoveDelta.x <= 10 && pointerMoveDelta.y <= 10) {
|
||||
event.preventDefault();
|
||||
} else {
|
||||
if (!content.contains(event.target)) {
|
||||
if (!event.composedPath().includes(content)) {
|
||||
onOpenChange(false);
|
||||
}
|
||||
}
|
||||
@@ -713,7 +731,7 @@ var SelectViewport = React.forwardRef(
|
||||
const viewportContext = useSelectViewportContext(VIEWPORT_NAME, __scopeSelect);
|
||||
const composedRefs = useComposedRefs(forwardedRef, contentContext.onViewportChange);
|
||||
const prevScrollTopRef = React.useRef(0);
|
||||
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
||||
return /* @__PURE__ */ jsxs(Fragment2, { children: [
|
||||
/* @__PURE__ */ jsx(
|
||||
"style",
|
||||
{
|
||||
@@ -920,7 +938,7 @@ var SelectItemText = React.forwardRef(
|
||||
onNativeOptionAdd(nativeOption);
|
||||
return () => onNativeOptionRemove(nativeOption);
|
||||
}, [onNativeOptionAdd, onNativeOptionRemove, nativeOption]);
|
||||
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
||||
return /* @__PURE__ */ jsxs(Fragment2, { children: [
|
||||
/* @__PURE__ */ jsx(Primitive.span, { id: itemContext.textId, ...itemTextProps, ref: composedRefs }),
|
||||
itemContext.isSelected && context.valueNode && !context.valueNodeHasChildren ? ReactDOM.createPortal(itemTextProps.children, context.valueNode) : null
|
||||
] });
|
||||
@@ -1060,18 +1078,21 @@ var SelectArrow = React.forwardRef(
|
||||
(props, forwardedRef) => {
|
||||
const { __scopeSelect, ...arrowProps } = props;
|
||||
const popperScope = usePopperScope(__scopeSelect);
|
||||
const context = useSelectContext(ARROW_NAME, __scopeSelect);
|
||||
const contentContext = useSelectContentContext(ARROW_NAME, __scopeSelect);
|
||||
return context.open && contentContext.position === "popper" ? /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef }) : null;
|
||||
return contentContext.position === "popper" ? /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef }) : null;
|
||||
}
|
||||
);
|
||||
SelectArrow.displayName = ARROW_NAME;
|
||||
var BUBBLE_INPUT_NAME = "SelectBubbleInput";
|
||||
var SelectBubbleInput = React.forwardRef(
|
||||
({ __scopeSelect, value, ...props }, forwardedRef) => {
|
||||
({ __scopeSelect, ...props }, forwardedRef) => {
|
||||
const context = useSelectContext(BUBBLE_INPUT_NAME, __scopeSelect);
|
||||
const { value, onValueChange, required, disabled, name, autoComplete, form } = context;
|
||||
const { nativeOptions, nativeSelectKey } = context;
|
||||
const ref = React.useRef(null);
|
||||
const composedRefs = useComposedRefs(forwardedRef, ref);
|
||||
const prevValue = usePrevious(value);
|
||||
const selectValue = value ?? "";
|
||||
const prevValue = usePrevious(selectValue);
|
||||
React.useEffect(() => {
|
||||
const select = ref.current;
|
||||
if (!select) return;
|
||||
@@ -1081,24 +1102,40 @@ var SelectBubbleInput = React.forwardRef(
|
||||
"value"
|
||||
);
|
||||
const setValue = descriptor.set;
|
||||
if (prevValue !== value && setValue) {
|
||||
if (prevValue !== selectValue && setValue) {
|
||||
const event = new Event("change", { bubbles: true });
|
||||
setValue.call(select, value);
|
||||
setValue.call(select, selectValue);
|
||||
select.dispatchEvent(event);
|
||||
}
|
||||
}, [prevValue, value]);
|
||||
return /* @__PURE__ */ jsx(
|
||||
}, [prevValue, selectValue]);
|
||||
return /* @__PURE__ */ jsxs(
|
||||
Primitive.select,
|
||||
{
|
||||
"aria-hidden": true,
|
||||
required,
|
||||
tabIndex: -1,
|
||||
name,
|
||||
autoComplete,
|
||||
disabled,
|
||||
form,
|
||||
onChange: (event) => onValueChange(event.target.value),
|
||||
...props,
|
||||
style: { ...VISUALLY_HIDDEN_STYLES, ...props.style },
|
||||
ref: composedRefs,
|
||||
defaultValue: value
|
||||
}
|
||||
defaultValue: selectValue,
|
||||
children: [
|
||||
shouldShowPlaceholder(value) ? /* @__PURE__ */ jsx("option", { value: "" }) : null,
|
||||
Array.from(nativeOptions)
|
||||
]
|
||||
},
|
||||
nativeSelectKey
|
||||
);
|
||||
}
|
||||
);
|
||||
SelectBubbleInput.displayName = BUBBLE_INPUT_NAME;
|
||||
function isFunction(value) {
|
||||
return typeof value === "function";
|
||||
}
|
||||
function shouldShowPlaceholder(value) {
|
||||
return value === "" || value === void 0;
|
||||
}
|
||||
@@ -1142,35 +1179,19 @@ function findNextItem(items, search, currentItem) {
|
||||
function wrapArray(array, startIndex) {
|
||||
return array.map((_, index) => array[(startIndex + index) % array.length]);
|
||||
}
|
||||
var Root2 = Select;
|
||||
var Trigger = SelectTrigger;
|
||||
var Value = SelectValue;
|
||||
var Icon = SelectIcon;
|
||||
var Portal = SelectPortal;
|
||||
var Content2 = SelectContent;
|
||||
var Viewport = SelectViewport;
|
||||
var Group = SelectGroup;
|
||||
var Label = SelectLabel;
|
||||
var Item = SelectItem;
|
||||
var ItemText = SelectItemText;
|
||||
var ItemIndicator = SelectItemIndicator;
|
||||
var ScrollUpButton = SelectScrollUpButton;
|
||||
var ScrollDownButton = SelectScrollDownButton;
|
||||
var Separator = SelectSeparator;
|
||||
var Arrow2 = SelectArrow;
|
||||
export {
|
||||
Arrow2 as Arrow,
|
||||
Content2 as Content,
|
||||
Group,
|
||||
Icon,
|
||||
Item,
|
||||
ItemIndicator,
|
||||
ItemText,
|
||||
Label,
|
||||
Portal,
|
||||
Root2 as Root,
|
||||
ScrollDownButton,
|
||||
ScrollUpButton,
|
||||
SelectArrow as Arrow,
|
||||
SelectContent as Content,
|
||||
SelectGroup as Group,
|
||||
SelectIcon as Icon,
|
||||
SelectItem as Item,
|
||||
SelectItemIndicator as ItemIndicator,
|
||||
SelectItemText as ItemText,
|
||||
SelectLabel as Label,
|
||||
SelectPortal as Portal,
|
||||
Select as Root,
|
||||
SelectScrollDownButton as ScrollDownButton,
|
||||
SelectScrollUpButton as ScrollUpButton,
|
||||
Select,
|
||||
SelectArrow,
|
||||
SelectContent,
|
||||
@@ -1187,10 +1208,14 @@ export {
|
||||
SelectTrigger,
|
||||
SelectValue,
|
||||
SelectViewport,
|
||||
Separator,
|
||||
Trigger,
|
||||
Value,
|
||||
Viewport,
|
||||
createSelectScope
|
||||
SelectSeparator as Separator,
|
||||
SelectTrigger as Trigger,
|
||||
SelectValue as Value,
|
||||
SelectViewport as Viewport,
|
||||
createSelectScope,
|
||||
SelectBubbleInput as unstable_BubbleInput,
|
||||
SelectProvider as unstable_Provider,
|
||||
SelectBubbleInput as unstable_SelectBubbleInput,
|
||||
SelectProvider as unstable_SelectProvider
|
||||
};
|
||||
//# sourceMappingURL=index.mjs.map
|
||||
|
||||
Reference in New Issue
Block a user