1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306 |
- var $cg2C9$babelruntimehelpersextends = require("@babel/runtime/helpers/extends");
- var $cg2C9$react = require("react");
- var $cg2C9$reactdom = require("react-dom");
- var $cg2C9$radixuinumber = require("@radix-ui/number");
- var $cg2C9$radixuiprimitive = require("@radix-ui/primitive");
- var $cg2C9$radixuireactcollection = require("@radix-ui/react-collection");
- var $cg2C9$radixuireactcomposerefs = require("@radix-ui/react-compose-refs");
- var $cg2C9$radixuireactcontext = require("@radix-ui/react-context");
- var $cg2C9$radixuireactdirection = require("@radix-ui/react-direction");
- var $cg2C9$radixuireactdismissablelayer = require("@radix-ui/react-dismissable-layer");
- var $cg2C9$radixuireactfocusguards = require("@radix-ui/react-focus-guards");
- var $cg2C9$radixuireactfocusscope = require("@radix-ui/react-focus-scope");
- var $cg2C9$radixuireactid = require("@radix-ui/react-id");
- var $cg2C9$radixuireactpopper = require("@radix-ui/react-popper");
- var $cg2C9$radixuireactportal = require("@radix-ui/react-portal");
- var $cg2C9$radixuireactprimitive = require("@radix-ui/react-primitive");
- var $cg2C9$radixuireactslot = require("@radix-ui/react-slot");
- var $cg2C9$radixuireactusecallbackref = require("@radix-ui/react-use-callback-ref");
- var $cg2C9$radixuireactusecontrollablestate = require("@radix-ui/react-use-controllable-state");
- var $cg2C9$radixuireactuselayouteffect = require("@radix-ui/react-use-layout-effect");
- var $cg2C9$radixuireactuseprevious = require("@radix-ui/react-use-previous");
- var $cg2C9$radixuireactvisuallyhidden = require("@radix-ui/react-visually-hidden");
- var $cg2C9$ariahidden = require("aria-hidden");
- var $cg2C9$reactremovescroll = require("react-remove-scroll");
- function $parcel$export(e, n, v, s) {
- Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
- }
- function $parcel$interopDefault(a) {
- return a && a.__esModule ? a.default : a;
- }
- $parcel$export(module.exports, "createSelectScope", () => $1345bda09ffc1bc6$export$286727a75dc039bd);
- $parcel$export(module.exports, "Select", () => $1345bda09ffc1bc6$export$ef9b1a59e592288f);
- $parcel$export(module.exports, "SelectTrigger", () => $1345bda09ffc1bc6$export$3ac1e88a1c0b9f1);
- $parcel$export(module.exports, "SelectValue", () => $1345bda09ffc1bc6$export$e288731fd71264f0);
- $parcel$export(module.exports, "SelectIcon", () => $1345bda09ffc1bc6$export$99b400cabb58c515);
- $parcel$export(module.exports, "SelectPortal", () => $1345bda09ffc1bc6$export$b2af6c9944296213);
- $parcel$export(module.exports, "SelectContent", () => $1345bda09ffc1bc6$export$c973a4b3cb86a03d);
- $parcel$export(module.exports, "SelectViewport", () => $1345bda09ffc1bc6$export$9ed6e7b40248d36d);
- $parcel$export(module.exports, "SelectGroup", () => $1345bda09ffc1bc6$export$ee25a334c55de1f4);
- $parcel$export(module.exports, "SelectLabel", () => $1345bda09ffc1bc6$export$f67338d29bd972f8);
- $parcel$export(module.exports, "SelectItem", () => $1345bda09ffc1bc6$export$13ef48a934230896);
- $parcel$export(module.exports, "SelectItemText", () => $1345bda09ffc1bc6$export$3572fb0fb821ff49);
- $parcel$export(module.exports, "SelectItemIndicator", () => $1345bda09ffc1bc6$export$6b9198de19accfe6);
- $parcel$export(module.exports, "SelectScrollUpButton", () => $1345bda09ffc1bc6$export$d8117927658af6d7);
- $parcel$export(module.exports, "SelectScrollDownButton", () => $1345bda09ffc1bc6$export$ff951e476c12189);
- $parcel$export(module.exports, "SelectSeparator", () => $1345bda09ffc1bc6$export$eba4b1df07cb1d3);
- $parcel$export(module.exports, "SelectArrow", () => $1345bda09ffc1bc6$export$314f4cb8f8099628);
- $parcel$export(module.exports, "Root", () => $1345bda09ffc1bc6$export$be92b6f5f03c0fe9);
- $parcel$export(module.exports, "Trigger", () => $1345bda09ffc1bc6$export$41fb9f06171c75f4);
- $parcel$export(module.exports, "Value", () => $1345bda09ffc1bc6$export$4c8d1a57a761ef94);
- $parcel$export(module.exports, "Icon", () => $1345bda09ffc1bc6$export$f04a61298a47a40f);
- $parcel$export(module.exports, "Portal", () => $1345bda09ffc1bc6$export$602eac185826482c);
- $parcel$export(module.exports, "Content", () => $1345bda09ffc1bc6$export$7c6e2c02157bb7d2);
- $parcel$export(module.exports, "Viewport", () => $1345bda09ffc1bc6$export$d5c6c08dc2d3ca7);
- $parcel$export(module.exports, "Group", () => $1345bda09ffc1bc6$export$eb2fcfdbd7ba97d4);
- $parcel$export(module.exports, "Label", () => $1345bda09ffc1bc6$export$b04be29aa201d4f5);
- $parcel$export(module.exports, "Item", () => $1345bda09ffc1bc6$export$6d08773d2e66f8f2);
- $parcel$export(module.exports, "ItemText", () => $1345bda09ffc1bc6$export$d6e5bf9c43ea9319);
- $parcel$export(module.exports, "ItemIndicator", () => $1345bda09ffc1bc6$export$c3468e2714d175fa);
- $parcel$export(module.exports, "ScrollUpButton", () => $1345bda09ffc1bc6$export$2f60d3ec9ad468f2);
- $parcel$export(module.exports, "ScrollDownButton", () => $1345bda09ffc1bc6$export$bf1aedc3039c8d63);
- $parcel$export(module.exports, "Separator", () => $1345bda09ffc1bc6$export$1ff3c3f08ae963c0);
- $parcel$export(module.exports, "Arrow", () => $1345bda09ffc1bc6$export$21b07c8f274aebd5);
- const $1345bda09ffc1bc6$var$OPEN_KEYS = [
- ' ',
- 'Enter',
- 'ArrowUp',
- 'ArrowDown'
- ];
- const $1345bda09ffc1bc6$var$SELECTION_KEYS = [
- ' ',
- 'Enter'
- ];
- /* -------------------------------------------------------------------------------------------------
- * Select
- * -----------------------------------------------------------------------------------------------*/ const $1345bda09ffc1bc6$var$SELECT_NAME = 'Select';
- const [$1345bda09ffc1bc6$var$Collection, $1345bda09ffc1bc6$var$useCollection, $1345bda09ffc1bc6$var$createCollectionScope] = $cg2C9$radixuireactcollection.createCollection($1345bda09ffc1bc6$var$SELECT_NAME);
- const [$1345bda09ffc1bc6$var$createSelectContext, $1345bda09ffc1bc6$export$286727a75dc039bd] = $cg2C9$radixuireactcontext.createContextScope($1345bda09ffc1bc6$var$SELECT_NAME, [
- $1345bda09ffc1bc6$var$createCollectionScope,
- $cg2C9$radixuireactpopper.createPopperScope
- ]);
- const $1345bda09ffc1bc6$var$usePopperScope = $cg2C9$radixuireactpopper.createPopperScope();
- const [$1345bda09ffc1bc6$var$SelectProvider, $1345bda09ffc1bc6$var$useSelectContext] = $1345bda09ffc1bc6$var$createSelectContext($1345bda09ffc1bc6$var$SELECT_NAME);
- const [$1345bda09ffc1bc6$var$SelectNativeOptionsProvider, $1345bda09ffc1bc6$var$useSelectNativeOptionsContext] = $1345bda09ffc1bc6$var$createSelectContext($1345bda09ffc1bc6$var$SELECT_NAME);
- const $1345bda09ffc1bc6$export$ef9b1a59e592288f = (props)=>{
- const { __scopeSelect: __scopeSelect , children: children , open: openProp , defaultOpen: defaultOpen , onOpenChange: onOpenChange , value: valueProp , defaultValue: defaultValue , onValueChange: onValueChange , dir: dir , name: name , autoComplete: autoComplete , disabled: disabled , required: required } = props;
- const popperScope = $1345bda09ffc1bc6$var$usePopperScope(__scopeSelect);
- const [trigger, setTrigger] = $cg2C9$react.useState(null);
- const [valueNode, setValueNode] = $cg2C9$react.useState(null);
- const [valueNodeHasChildren, setValueNodeHasChildren] = $cg2C9$react.useState(false);
- const direction = $cg2C9$radixuireactdirection.useDirection(dir);
- const [open = false, setOpen] = $cg2C9$radixuireactusecontrollablestate.useControllableState({
- prop: openProp,
- defaultProp: defaultOpen,
- onChange: onOpenChange
- });
- const [value, setValue] = $cg2C9$radixuireactusecontrollablestate.useControllableState({
- prop: valueProp,
- defaultProp: defaultValue,
- onChange: onValueChange
- });
- const triggerPointerDownPosRef = $cg2C9$react.useRef(null); // We set this to true by default so that events bubble to forms without JS (SSR)
- const isFormControl = trigger ? Boolean(trigger.closest('form')) : true;
- const [nativeOptionsSet, setNativeOptionsSet] = $cg2C9$react.useState(new Set()); // The native `select` only associates the correct default value if the corresponding
- // `option` is rendered as a child **at the same time** as itself.
- // Because it might take a few renders for our items to gather the information to build
- // the native `option`(s), we generate a key on the `select` to make sure React re-builds it
- // each time the options change.
- const nativeSelectKey = Array.from(nativeOptionsSet).map((option)=>option.props.value
- ).join(';');
- return /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$radixuireactpopper.Root, popperScope, /*#__PURE__*/ $cg2C9$react.createElement($1345bda09ffc1bc6$var$SelectProvider, {
- required: required,
- scope: __scopeSelect,
- trigger: trigger,
- onTriggerChange: setTrigger,
- valueNode: valueNode,
- onValueNodeChange: setValueNode,
- valueNodeHasChildren: valueNodeHasChildren,
- onValueNodeHasChildrenChange: setValueNodeHasChildren,
- contentId: $cg2C9$radixuireactid.useId(),
- value: value,
- onValueChange: setValue,
- open: open,
- onOpenChange: setOpen,
- dir: direction,
- triggerPointerDownPosRef: triggerPointerDownPosRef,
- disabled: disabled
- }, /*#__PURE__*/ $cg2C9$react.createElement($1345bda09ffc1bc6$var$Collection.Provider, {
- scope: __scopeSelect
- }, /*#__PURE__*/ $cg2C9$react.createElement($1345bda09ffc1bc6$var$SelectNativeOptionsProvider, {
- scope: props.__scopeSelect,
- onNativeOptionAdd: $cg2C9$react.useCallback((option)=>{
- setNativeOptionsSet((prev)=>new Set(prev).add(option)
- );
- }, []),
- onNativeOptionRemove: $cg2C9$react.useCallback((option)=>{
- setNativeOptionsSet((prev)=>{
- const optionsSet = new Set(prev);
- optionsSet.delete(option);
- return optionsSet;
- });
- }, [])
- }, children)), isFormControl ? /*#__PURE__*/ $cg2C9$react.createElement($1345bda09ffc1bc6$var$BubbleSelect, {
- key: nativeSelectKey,
- "aria-hidden": true,
- required: required,
- tabIndex: -1,
- name: name,
- autoComplete: autoComplete,
- value: value // enable form autofill
- ,
- onChange: (event)=>setValue(event.target.value)
- ,
- disabled: disabled
- }, value === undefined ? /*#__PURE__*/ $cg2C9$react.createElement("option", {
- value: ""
- }) : null, Array.from(nativeOptionsSet)) : null));
- };
- /*#__PURE__*/ Object.assign($1345bda09ffc1bc6$export$ef9b1a59e592288f, {
- displayName: $1345bda09ffc1bc6$var$SELECT_NAME
- });
- /* -------------------------------------------------------------------------------------------------
- * SelectTrigger
- * -----------------------------------------------------------------------------------------------*/ const $1345bda09ffc1bc6$var$TRIGGER_NAME = 'SelectTrigger';
- const $1345bda09ffc1bc6$export$3ac1e88a1c0b9f1 = /*#__PURE__*/ $cg2C9$react.forwardRef((props, forwardedRef)=>{
- const { __scopeSelect: __scopeSelect , disabled: disabled = false , ...triggerProps } = props;
- const popperScope = $1345bda09ffc1bc6$var$usePopperScope(__scopeSelect);
- const context = $1345bda09ffc1bc6$var$useSelectContext($1345bda09ffc1bc6$var$TRIGGER_NAME, __scopeSelect);
- const isDisabled = context.disabled || disabled;
- const composedRefs = $cg2C9$radixuireactcomposerefs.useComposedRefs(forwardedRef, context.onTriggerChange);
- const getItems = $1345bda09ffc1bc6$var$useCollection(__scopeSelect);
- const [searchRef, handleTypeaheadSearch, resetTypeahead] = $1345bda09ffc1bc6$var$useTypeaheadSearch((search)=>{
- const enabledItems = getItems().filter((item)=>!item.disabled
- );
- const currentItem = enabledItems.find((item)=>item.value === context.value
- );
- const nextItem = $1345bda09ffc1bc6$var$findNextItem(enabledItems, search, currentItem);
- if (nextItem !== undefined) context.onValueChange(nextItem.value);
- });
- const handleOpen = ()=>{
- if (!isDisabled) {
- context.onOpenChange(true); // reset typeahead when we open
- resetTypeahead();
- }
- };
- return /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$radixuireactpopper.Anchor, ($parcel$interopDefault($cg2C9$babelruntimehelpersextends))({
- asChild: true
- }, popperScope), /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$radixuireactprimitive.Primitive.button, ($parcel$interopDefault($cg2C9$babelruntimehelpersextends))({
- type: "button",
- role: "combobox",
- "aria-controls": context.contentId,
- "aria-expanded": context.open,
- "aria-required": context.required,
- "aria-autocomplete": "none",
- dir: context.dir,
- "data-state": context.open ? 'open' : 'closed',
- disabled: isDisabled,
- "data-disabled": isDisabled ? '' : undefined,
- "data-placeholder": context.value === undefined ? '' : undefined
- }, triggerProps, {
- ref: composedRefs // Enable compatibility with native label or custom `Label` "click" for Safari:
- ,
- onClick: $cg2C9$radixuiprimitive.composeEventHandlers(triggerProps.onClick, (event)=>{
- // Whilst browsers generally have no issue focusing the trigger when clicking
- // on a label, Safari seems to struggle with the fact that there's no `onClick`.
- // We force `focus` in this case. Note: this doesn't create any other side-effect
- // because we are preventing default in `onPointerDown` so effectively
- // this only runs for a label "click"
- event.currentTarget.focus();
- }),
- onPointerDown: $cg2C9$radixuiprimitive.composeEventHandlers(triggerProps.onPointerDown, (event)=>{
- // prevent implicit pointer capture
- // https://www.w3.org/TR/pointerevents3/#implicit-pointer-capture
- const target = event.target;
- if (target.hasPointerCapture(event.pointerId)) target.releasePointerCapture(event.pointerId);
- // only call handler if it's the left button (mousedown gets triggered by all mouse buttons)
- // but not when the control key is pressed (avoiding MacOS right click)
- if (event.button === 0 && event.ctrlKey === false) {
- handleOpen();
- context.triggerPointerDownPosRef.current = {
- x: Math.round(event.pageX),
- y: Math.round(event.pageY)
- }; // prevent trigger from stealing focus from the active item after opening.
- event.preventDefault();
- }
- }),
- onKeyDown: $cg2C9$radixuiprimitive.composeEventHandlers(triggerProps.onKeyDown, (event)=>{
- const isTypingAhead = searchRef.current !== '';
- const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;
- if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);
- if (isTypingAhead && event.key === ' ') return;
- if ($1345bda09ffc1bc6$var$OPEN_KEYS.includes(event.key)) {
- handleOpen();
- event.preventDefault();
- }
- })
- })));
- });
- /*#__PURE__*/ Object.assign($1345bda09ffc1bc6$export$3ac1e88a1c0b9f1, {
- displayName: $1345bda09ffc1bc6$var$TRIGGER_NAME
- });
- /* -------------------------------------------------------------------------------------------------
- * SelectValue
- * -----------------------------------------------------------------------------------------------*/ const $1345bda09ffc1bc6$var$VALUE_NAME = 'SelectValue';
- const $1345bda09ffc1bc6$export$e288731fd71264f0 = /*#__PURE__*/ $cg2C9$react.forwardRef((props, forwardedRef)=>{
- // We ignore `className` and `style` as this part shouldn't be styled.
- const { __scopeSelect: __scopeSelect , className: className , style: style , children: children , placeholder: placeholder , ...valueProps } = props;
- const context = $1345bda09ffc1bc6$var$useSelectContext($1345bda09ffc1bc6$var$VALUE_NAME, __scopeSelect);
- const { onValueNodeHasChildrenChange: onValueNodeHasChildrenChange } = context;
- const hasChildren = children !== undefined;
- const composedRefs = $cg2C9$radixuireactcomposerefs.useComposedRefs(forwardedRef, context.onValueNodeChange);
- $cg2C9$radixuireactuselayouteffect.useLayoutEffect(()=>{
- onValueNodeHasChildrenChange(hasChildren);
- }, [
- onValueNodeHasChildrenChange,
- hasChildren
- ]);
- return /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$radixuireactprimitive.Primitive.span, ($parcel$interopDefault($cg2C9$babelruntimehelpersextends))({}, valueProps, {
- ref: composedRefs // we don't want events from the portalled `SelectValue` children to bubble
- ,
- style: {
- pointerEvents: 'none'
- }
- }), context.value === undefined && placeholder !== undefined ? placeholder : children);
- });
- /*#__PURE__*/ Object.assign($1345bda09ffc1bc6$export$e288731fd71264f0, {
- displayName: $1345bda09ffc1bc6$var$VALUE_NAME
- });
- /* -------------------------------------------------------------------------------------------------
- * SelectIcon
- * -----------------------------------------------------------------------------------------------*/ const $1345bda09ffc1bc6$var$ICON_NAME = 'SelectIcon';
- const $1345bda09ffc1bc6$export$99b400cabb58c515 = /*#__PURE__*/ $cg2C9$react.forwardRef((props, forwardedRef)=>{
- const { __scopeSelect: __scopeSelect , children: children , ...iconProps } = props;
- return /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$radixuireactprimitive.Primitive.span, ($parcel$interopDefault($cg2C9$babelruntimehelpersextends))({
- "aria-hidden": true
- }, iconProps, {
- ref: forwardedRef
- }), children || '▼');
- });
- /*#__PURE__*/ Object.assign($1345bda09ffc1bc6$export$99b400cabb58c515, {
- displayName: $1345bda09ffc1bc6$var$ICON_NAME
- });
- /* -------------------------------------------------------------------------------------------------
- * SelectPortal
- * -----------------------------------------------------------------------------------------------*/ const $1345bda09ffc1bc6$var$PORTAL_NAME = 'SelectPortal';
- const $1345bda09ffc1bc6$export$b2af6c9944296213 = (props)=>{
- return /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$radixuireactportal.Portal, ($parcel$interopDefault($cg2C9$babelruntimehelpersextends))({
- asChild: true
- }, props));
- };
- /*#__PURE__*/ Object.assign($1345bda09ffc1bc6$export$b2af6c9944296213, {
- displayName: $1345bda09ffc1bc6$var$PORTAL_NAME
- });
- /* -------------------------------------------------------------------------------------------------
- * SelectContent
- * -----------------------------------------------------------------------------------------------*/ const $1345bda09ffc1bc6$var$CONTENT_NAME = 'SelectContent';
- const $1345bda09ffc1bc6$export$c973a4b3cb86a03d = /*#__PURE__*/ $cg2C9$react.forwardRef((props, forwardedRef)=>{
- const context = $1345bda09ffc1bc6$var$useSelectContext($1345bda09ffc1bc6$var$CONTENT_NAME, props.__scopeSelect);
- const [fragment, setFragment] = $cg2C9$react.useState(); // setting the fragment in `useLayoutEffect` as `DocumentFragment` doesn't exist on the server
- $cg2C9$radixuireactuselayouteffect.useLayoutEffect(()=>{
- setFragment(new DocumentFragment());
- }, []);
- if (!context.open) {
- const frag = fragment;
- return frag ? /*#__PURE__*/ $cg2C9$reactdom.createPortal(/*#__PURE__*/ $cg2C9$react.createElement($1345bda09ffc1bc6$var$SelectContentProvider, {
- scope: props.__scopeSelect
- }, /*#__PURE__*/ $cg2C9$react.createElement($1345bda09ffc1bc6$var$Collection.Slot, {
- scope: props.__scopeSelect
- }, /*#__PURE__*/ $cg2C9$react.createElement("div", null, props.children))), frag) : null;
- }
- return /*#__PURE__*/ $cg2C9$react.createElement($1345bda09ffc1bc6$var$SelectContentImpl, ($parcel$interopDefault($cg2C9$babelruntimehelpersextends))({}, props, {
- ref: forwardedRef
- }));
- });
- /*#__PURE__*/ Object.assign($1345bda09ffc1bc6$export$c973a4b3cb86a03d, {
- displayName: $1345bda09ffc1bc6$var$CONTENT_NAME
- });
- /* -------------------------------------------------------------------------------------------------
- * SelectContentImpl
- * -----------------------------------------------------------------------------------------------*/ const $1345bda09ffc1bc6$var$CONTENT_MARGIN = 10;
- const [$1345bda09ffc1bc6$var$SelectContentProvider, $1345bda09ffc1bc6$var$useSelectContentContext] = $1345bda09ffc1bc6$var$createSelectContext($1345bda09ffc1bc6$var$CONTENT_NAME);
- const $1345bda09ffc1bc6$var$CONTENT_IMPL_NAME = 'SelectContentImpl';
- const $1345bda09ffc1bc6$var$SelectContentImpl = /*#__PURE__*/ $cg2C9$react.forwardRef((props, forwardedRef)=>{
- const { __scopeSelect: __scopeSelect , position: position = 'item-aligned' , onCloseAutoFocus: onCloseAutoFocus , onEscapeKeyDown: onEscapeKeyDown , onPointerDownOutside: onPointerDownOutside , side: //
- // PopperContent props
- side , sideOffset: sideOffset , align: align , alignOffset: alignOffset , arrowPadding: arrowPadding , collisionBoundary: collisionBoundary , collisionPadding: collisionPadding , sticky: sticky , hideWhenDetached: hideWhenDetached , avoidCollisions: avoidCollisions , //
- ...contentProps } = props;
- const context = $1345bda09ffc1bc6$var$useSelectContext($1345bda09ffc1bc6$var$CONTENT_NAME, __scopeSelect);
- const [content, setContent] = $cg2C9$react.useState(null);
- const [viewport, setViewport] = $cg2C9$react.useState(null);
- const composedRefs = $cg2C9$radixuireactcomposerefs.useComposedRefs(forwardedRef, (node)=>setContent(node)
- );
- const [selectedItem, setSelectedItem] = $cg2C9$react.useState(null);
- const [selectedItemText, setSelectedItemText] = $cg2C9$react.useState(null);
- const getItems = $1345bda09ffc1bc6$var$useCollection(__scopeSelect);
- const [isPositioned, setIsPositioned] = $cg2C9$react.useState(false);
- const firstValidItemFoundRef = $cg2C9$react.useRef(false); // aria-hide everything except the content (better supported equivalent to setting aria-modal)
- $cg2C9$react.useEffect(()=>{
- if (content) return $cg2C9$ariahidden.hideOthers(content);
- }, [
- content
- ]); // Make sure the whole tree has focus guards as our `Select` may be
- // the last element in the DOM (because of the `Portal`)
- $cg2C9$radixuireactfocusguards.useFocusGuards();
- const focusFirst = $cg2C9$react.useCallback((candidates)=>{
- const [firstItem, ...restItems] = getItems().map((item)=>item.ref.current
- );
- const [lastItem] = restItems.slice(-1);
- const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;
- for (const candidate of candidates){
- // if focus is already where we want to go, we don't want to keep going through the candidates
- if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;
- candidate === null || candidate === void 0 || candidate.scrollIntoView({
- block: 'nearest'
- }); // viewport might have padding so scroll to its edges when focusing first/last items.
- if (candidate === firstItem && viewport) viewport.scrollTop = 0;
- if (candidate === lastItem && viewport) viewport.scrollTop = viewport.scrollHeight;
- candidate === null || candidate === void 0 || candidate.focus();
- if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;
- }
- }, [
- getItems,
- viewport
- ]);
- const focusSelectedItem = $cg2C9$react.useCallback(()=>focusFirst([
- selectedItem,
- content
- ])
- , [
- focusFirst,
- selectedItem,
- content
- ]); // Since this is not dependent on layout, we want to ensure this runs at the same time as
- // other effects across components. Hence why we don't call `focusSelectedItem` inside `position`.
- $cg2C9$react.useEffect(()=>{
- if (isPositioned) focusSelectedItem();
- }, [
- isPositioned,
- focusSelectedItem
- ]); // prevent selecting items on `pointerup` in some cases after opening from `pointerdown`
- // and close on `pointerup` outside.
- const { onOpenChange: onOpenChange , triggerPointerDownPosRef: triggerPointerDownPosRef } = context;
- $cg2C9$react.useEffect(()=>{
- if (content) {
- let pointerMoveDelta = {
- x: 0,
- y: 0
- };
- const handlePointerMove = (event)=>{
- var _triggerPointerDownPo, _triggerPointerDownPo2, _triggerPointerDownPo3, _triggerPointerDownPo4;
- pointerMoveDelta = {
- x: Math.abs(Math.round(event.pageX) - ((_triggerPointerDownPo = (_triggerPointerDownPo2 = triggerPointerDownPosRef.current) === null || _triggerPointerDownPo2 === void 0 ? void 0 : _triggerPointerDownPo2.x) !== null && _triggerPointerDownPo !== void 0 ? _triggerPointerDownPo : 0)),
- y: Math.abs(Math.round(event.pageY) - ((_triggerPointerDownPo3 = (_triggerPointerDownPo4 = triggerPointerDownPosRef.current) === null || _triggerPointerDownPo4 === void 0 ? void 0 : _triggerPointerDownPo4.y) !== null && _triggerPointerDownPo3 !== void 0 ? _triggerPointerDownPo3 : 0))
- };
- };
- const handlePointerUp = (event)=>{
- // If the pointer hasn't moved by a certain threshold then we prevent selecting item on `pointerup`.
- if (pointerMoveDelta.x <= 10 && pointerMoveDelta.y <= 10) event.preventDefault();
- else // otherwise, if the event was outside the content, close.
- if (!content.contains(event.target)) onOpenChange(false);
- document.removeEventListener('pointermove', handlePointerMove);
- triggerPointerDownPosRef.current = null;
- };
- if (triggerPointerDownPosRef.current !== null) {
- document.addEventListener('pointermove', handlePointerMove);
- document.addEventListener('pointerup', handlePointerUp, {
- capture: true,
- once: true
- });
- }
- return ()=>{
- document.removeEventListener('pointermove', handlePointerMove);
- document.removeEventListener('pointerup', handlePointerUp, {
- capture: true
- });
- };
- }
- }, [
- content,
- onOpenChange,
- triggerPointerDownPosRef
- ]);
- $cg2C9$react.useEffect(()=>{
- const close = ()=>onOpenChange(false)
- ;
- window.addEventListener('blur', close);
- window.addEventListener('resize', close);
- return ()=>{
- window.removeEventListener('blur', close);
- window.removeEventListener('resize', close);
- };
- }, [
- onOpenChange
- ]);
- const [searchRef, handleTypeaheadSearch] = $1345bda09ffc1bc6$var$useTypeaheadSearch((search)=>{
- const enabledItems = getItems().filter((item)=>!item.disabled
- );
- const currentItem = enabledItems.find((item)=>item.ref.current === document.activeElement
- );
- const nextItem = $1345bda09ffc1bc6$var$findNextItem(enabledItems, search, currentItem);
- if (nextItem) /**
- * Imperative focus during keydown is risky so we prevent React's batching updates
- * to avoid potential bugs. See: https://github.com/facebook/react/issues/20332
- */ setTimeout(()=>nextItem.ref.current.focus()
- );
- });
- const itemRefCallback = $cg2C9$react.useCallback((node, value, disabled)=>{
- const isFirstValidItem = !firstValidItemFoundRef.current && !disabled;
- const isSelectedItem = context.value !== undefined && context.value === value;
- if (isSelectedItem || isFirstValidItem) {
- setSelectedItem(node);
- if (isFirstValidItem) firstValidItemFoundRef.current = true;
- }
- }, [
- context.value
- ]);
- const handleItemLeave = $cg2C9$react.useCallback(()=>content === null || content === void 0 ? void 0 : content.focus()
- , [
- content
- ]);
- const itemTextRefCallback = $cg2C9$react.useCallback((node, value, disabled)=>{
- const isFirstValidItem = !firstValidItemFoundRef.current && !disabled;
- const isSelectedItem = context.value !== undefined && context.value === value;
- if (isSelectedItem || isFirstValidItem) setSelectedItemText(node);
- }, [
- context.value
- ]);
- const SelectPosition = position === 'popper' ? $1345bda09ffc1bc6$var$SelectPopperPosition : $1345bda09ffc1bc6$var$SelectItemAlignedPosition; // Silently ignore props that are not supported by `SelectItemAlignedPosition`
- const popperContentProps = SelectPosition === $1345bda09ffc1bc6$var$SelectPopperPosition ? {
- side: side,
- sideOffset: sideOffset,
- align: align,
- alignOffset: alignOffset,
- arrowPadding: arrowPadding,
- collisionBoundary: collisionBoundary,
- collisionPadding: collisionPadding,
- sticky: sticky,
- hideWhenDetached: hideWhenDetached,
- avoidCollisions: avoidCollisions
- } : {};
- return /*#__PURE__*/ $cg2C9$react.createElement($1345bda09ffc1bc6$var$SelectContentProvider, {
- scope: __scopeSelect,
- content: content,
- viewport: viewport,
- onViewportChange: setViewport,
- itemRefCallback: itemRefCallback,
- selectedItem: selectedItem,
- onItemLeave: handleItemLeave,
- itemTextRefCallback: itemTextRefCallback,
- focusSelectedItem: focusSelectedItem,
- selectedItemText: selectedItemText,
- position: position,
- isPositioned: isPositioned,
- searchRef: searchRef
- }, /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$reactremovescroll.RemoveScroll, {
- as: $cg2C9$radixuireactslot.Slot,
- allowPinchZoom: true
- }, /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$radixuireactfocusscope.FocusScope, {
- asChild: true // we make sure we're not trapping once it's been closed
- ,
- trapped: context.open,
- onMountAutoFocus: (event)=>{
- // we prevent open autofocus because we manually focus the selected item
- event.preventDefault();
- },
- onUnmountAutoFocus: $cg2C9$radixuiprimitive.composeEventHandlers(onCloseAutoFocus, (event)=>{
- var _context$trigger;
- (_context$trigger = context.trigger) === null || _context$trigger === void 0 || _context$trigger.focus({
- preventScroll: true
- });
- event.preventDefault();
- })
- }, /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$radixuireactdismissablelayer.DismissableLayer, {
- asChild: true,
- disableOutsidePointerEvents: true,
- onEscapeKeyDown: onEscapeKeyDown,
- onPointerDownOutside: onPointerDownOutside // When focus is trapped, a focusout event may still happen.
- ,
- onFocusOutside: (event)=>event.preventDefault()
- ,
- onDismiss: ()=>context.onOpenChange(false)
- }, /*#__PURE__*/ $cg2C9$react.createElement(SelectPosition, ($parcel$interopDefault($cg2C9$babelruntimehelpersextends))({
- role: "listbox",
- id: context.contentId,
- "data-state": context.open ? 'open' : 'closed',
- dir: context.dir,
- onContextMenu: (event)=>event.preventDefault()
- }, contentProps, popperContentProps, {
- onPlaced: ()=>setIsPositioned(true)
- ,
- ref: composedRefs,
- style: {
- // flex layout so we can place the scroll buttons properly
- display: 'flex',
- flexDirection: 'column',
- // reset the outline by default as the content MAY get focused
- outline: 'none',
- ...contentProps.style
- },
- onKeyDown: $cg2C9$radixuiprimitive.composeEventHandlers(contentProps.onKeyDown, (event)=>{
- const isModifierKey = event.ctrlKey || event.altKey || event.metaKey; // select should not be navigated using tab key so we prevent it
- if (event.key === 'Tab') event.preventDefault();
- if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);
- if ([
- 'ArrowUp',
- 'ArrowDown',
- 'Home',
- 'End'
- ].includes(event.key)) {
- const items = getItems().filter((item)=>!item.disabled
- );
- let candidateNodes = items.map((item)=>item.ref.current
- );
- if ([
- 'ArrowUp',
- 'End'
- ].includes(event.key)) candidateNodes = candidateNodes.slice().reverse();
- if ([
- 'ArrowUp',
- 'ArrowDown'
- ].includes(event.key)) {
- const currentElement = event.target;
- const currentIndex = candidateNodes.indexOf(currentElement);
- candidateNodes = candidateNodes.slice(currentIndex + 1);
- }
- /**
- * Imperative focus during keydown is risky so we prevent React's batching updates
- * to avoid potential bugs. See: https://github.com/facebook/react/issues/20332
- */ setTimeout(()=>focusFirst(candidateNodes)
- );
- event.preventDefault();
- }
- })
- }))))));
- });
- /*#__PURE__*/ Object.assign($1345bda09ffc1bc6$var$SelectContentImpl, {
- displayName: $1345bda09ffc1bc6$var$CONTENT_IMPL_NAME
- });
- /* -------------------------------------------------------------------------------------------------
- * SelectItemAlignedPosition
- * -----------------------------------------------------------------------------------------------*/ const $1345bda09ffc1bc6$var$ITEM_ALIGNED_POSITION_NAME = 'SelectItemAlignedPosition';
- const $1345bda09ffc1bc6$var$SelectItemAlignedPosition = /*#__PURE__*/ $cg2C9$react.forwardRef((props, forwardedRef)=>{
- const { __scopeSelect: __scopeSelect , onPlaced: onPlaced , ...popperProps } = props;
- const context = $1345bda09ffc1bc6$var$useSelectContext($1345bda09ffc1bc6$var$CONTENT_NAME, __scopeSelect);
- const contentContext = $1345bda09ffc1bc6$var$useSelectContentContext($1345bda09ffc1bc6$var$CONTENT_NAME, __scopeSelect);
- const [contentWrapper, setContentWrapper] = $cg2C9$react.useState(null);
- const [content, setContent] = $cg2C9$react.useState(null);
- const composedRefs = $cg2C9$radixuireactcomposerefs.useComposedRefs(forwardedRef, (node)=>setContent(node)
- );
- const getItems = $1345bda09ffc1bc6$var$useCollection(__scopeSelect);
- const shouldExpandOnScrollRef = $cg2C9$react.useRef(false);
- const shouldRepositionRef = $cg2C9$react.useRef(true);
- const { viewport: viewport , selectedItem: selectedItem , selectedItemText: selectedItemText , focusSelectedItem: focusSelectedItem } = contentContext;
- const position = $cg2C9$react.useCallback(()=>{
- if (context.trigger && context.valueNode && contentWrapper && content && viewport && selectedItem && selectedItemText) {
- const triggerRect = context.trigger.getBoundingClientRect(); // -----------------------------------------------------------------------------------------
- // Horizontal positioning
- // -----------------------------------------------------------------------------------------
- const contentRect = content.getBoundingClientRect();
- const valueNodeRect = context.valueNode.getBoundingClientRect();
- const itemTextRect = selectedItemText.getBoundingClientRect();
- if (context.dir !== 'rtl') {
- const itemTextOffset = itemTextRect.left - contentRect.left;
- const left = valueNodeRect.left - itemTextOffset;
- const leftDelta = triggerRect.left - left;
- const minContentWidth = triggerRect.width + leftDelta;
- const contentWidth = Math.max(minContentWidth, contentRect.width);
- const rightEdge = window.innerWidth - $1345bda09ffc1bc6$var$CONTENT_MARGIN;
- const clampedLeft = $cg2C9$radixuinumber.clamp(left, [
- $1345bda09ffc1bc6$var$CONTENT_MARGIN,
- rightEdge - contentWidth
- ]);
- contentWrapper.style.minWidth = minContentWidth + 'px';
- contentWrapper.style.left = clampedLeft + 'px';
- } else {
- const itemTextOffset = contentRect.right - itemTextRect.right;
- const right = window.innerWidth - valueNodeRect.right - itemTextOffset;
- const rightDelta = window.innerWidth - triggerRect.right - right;
- const minContentWidth = triggerRect.width + rightDelta;
- const contentWidth = Math.max(minContentWidth, contentRect.width);
- const leftEdge = window.innerWidth - $1345bda09ffc1bc6$var$CONTENT_MARGIN;
- const clampedRight = $cg2C9$radixuinumber.clamp(right, [
- $1345bda09ffc1bc6$var$CONTENT_MARGIN,
- leftEdge - contentWidth
- ]);
- contentWrapper.style.minWidth = minContentWidth + 'px';
- contentWrapper.style.right = clampedRight + 'px';
- } // -----------------------------------------------------------------------------------------
- // Vertical positioning
- // -----------------------------------------------------------------------------------------
- const items = getItems();
- const availableHeight = window.innerHeight - $1345bda09ffc1bc6$var$CONTENT_MARGIN * 2;
- const itemsHeight = viewport.scrollHeight;
- const contentStyles = window.getComputedStyle(content);
- const contentBorderTopWidth = parseInt(contentStyles.borderTopWidth, 10);
- const contentPaddingTop = parseInt(contentStyles.paddingTop, 10);
- const contentBorderBottomWidth = parseInt(contentStyles.borderBottomWidth, 10);
- const contentPaddingBottom = parseInt(contentStyles.paddingBottom, 10);
- const fullContentHeight = contentBorderTopWidth + contentPaddingTop + itemsHeight + contentPaddingBottom + contentBorderBottomWidth; // prettier-ignore
- const minContentHeight = Math.min(selectedItem.offsetHeight * 5, fullContentHeight);
- const viewportStyles = window.getComputedStyle(viewport);
- const viewportPaddingTop = parseInt(viewportStyles.paddingTop, 10);
- const viewportPaddingBottom = parseInt(viewportStyles.paddingBottom, 10);
- const topEdgeToTriggerMiddle = triggerRect.top + triggerRect.height / 2 - $1345bda09ffc1bc6$var$CONTENT_MARGIN;
- const triggerMiddleToBottomEdge = availableHeight - topEdgeToTriggerMiddle;
- const selectedItemHalfHeight = selectedItem.offsetHeight / 2;
- const itemOffsetMiddle = selectedItem.offsetTop + selectedItemHalfHeight;
- const contentTopToItemMiddle = contentBorderTopWidth + contentPaddingTop + itemOffsetMiddle;
- const itemMiddleToContentBottom = fullContentHeight - contentTopToItemMiddle;
- const willAlignWithoutTopOverflow = contentTopToItemMiddle <= topEdgeToTriggerMiddle;
- if (willAlignWithoutTopOverflow) {
- const isLastItem = selectedItem === items[items.length - 1].ref.current;
- contentWrapper.style.bottom = "0px";
- const viewportOffsetBottom = content.clientHeight - viewport.offsetTop - viewport.offsetHeight;
- const clampedTriggerMiddleToBottomEdge = Math.max(triggerMiddleToBottomEdge, selectedItemHalfHeight + (isLastItem ? viewportPaddingBottom : 0) + viewportOffsetBottom + contentBorderBottomWidth);
- const height = contentTopToItemMiddle + clampedTriggerMiddleToBottomEdge;
- contentWrapper.style.height = height + 'px';
- } else {
- const isFirstItem = selectedItem === items[0].ref.current;
- contentWrapper.style.top = "0px";
- const clampedTopEdgeToTriggerMiddle = Math.max(topEdgeToTriggerMiddle, contentBorderTopWidth + viewport.offsetTop + (isFirstItem ? viewportPaddingTop : 0) + selectedItemHalfHeight);
- const height = clampedTopEdgeToTriggerMiddle + itemMiddleToContentBottom;
- contentWrapper.style.height = height + 'px';
- viewport.scrollTop = contentTopToItemMiddle - topEdgeToTriggerMiddle + viewport.offsetTop;
- }
- contentWrapper.style.margin = `${$1345bda09ffc1bc6$var$CONTENT_MARGIN}px 0`;
- contentWrapper.style.minHeight = minContentHeight + 'px';
- contentWrapper.style.maxHeight = availableHeight + 'px'; // -----------------------------------------------------------------------------------------
- onPlaced === null || onPlaced === void 0 || onPlaced(); // we don't want the initial scroll position adjustment to trigger "expand on scroll"
- // so we explicitly turn it on only after they've registered.
- requestAnimationFrame(()=>shouldExpandOnScrollRef.current = true
- );
- }
- }, [
- getItems,
- context.trigger,
- context.valueNode,
- contentWrapper,
- content,
- viewport,
- selectedItem,
- selectedItemText,
- context.dir,
- onPlaced
- ]);
- $cg2C9$radixuireactuselayouteffect.useLayoutEffect(()=>position()
- , [
- position
- ]); // copy z-index from content to wrapper
- const [contentZIndex, setContentZIndex] = $cg2C9$react.useState();
- $cg2C9$radixuireactuselayouteffect.useLayoutEffect(()=>{
- if (content) setContentZIndex(window.getComputedStyle(content).zIndex);
- }, [
- content
- ]); // When the viewport becomes scrollable at the top, the scroll up button will mount.
- // Because it is part of the normal flow, it will push down the viewport, thus throwing our
- // trigger => selectedItem alignment off by the amount the viewport was pushed down.
- // We wait for this to happen and then re-run the positining logic one more time to account for it.
- const handleScrollButtonChange = $cg2C9$react.useCallback((node)=>{
- if (node && shouldRepositionRef.current === true) {
- position();
- focusSelectedItem === null || focusSelectedItem === void 0 || focusSelectedItem();
- shouldRepositionRef.current = false;
- }
- }, [
- position,
- focusSelectedItem
- ]);
- return /*#__PURE__*/ $cg2C9$react.createElement($1345bda09ffc1bc6$var$SelectViewportProvider, {
- scope: __scopeSelect,
- contentWrapper: contentWrapper,
- shouldExpandOnScrollRef: shouldExpandOnScrollRef,
- onScrollButtonChange: handleScrollButtonChange
- }, /*#__PURE__*/ $cg2C9$react.createElement("div", {
- ref: setContentWrapper,
- style: {
- display: 'flex',
- flexDirection: 'column',
- position: 'fixed',
- zIndex: contentZIndex
- }
- }, /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$radixuireactprimitive.Primitive.div, ($parcel$interopDefault($cg2C9$babelruntimehelpersextends))({}, popperProps, {
- ref: composedRefs,
- style: {
- // When we get the height of the content, it includes borders. If we were to set
- // the height without having `boxSizing: 'border-box'` it would be too big.
- boxSizing: 'border-box',
- // We need to ensure the content doesn't get taller than the wrapper
- maxHeight: '100%',
- ...popperProps.style
- }
- }))));
- });
- /*#__PURE__*/ Object.assign($1345bda09ffc1bc6$var$SelectItemAlignedPosition, {
- displayName: $1345bda09ffc1bc6$var$ITEM_ALIGNED_POSITION_NAME
- });
- /* -------------------------------------------------------------------------------------------------
- * SelectPopperPosition
- * -----------------------------------------------------------------------------------------------*/ const $1345bda09ffc1bc6$var$POPPER_POSITION_NAME = 'SelectPopperPosition';
- const $1345bda09ffc1bc6$var$SelectPopperPosition = /*#__PURE__*/ $cg2C9$react.forwardRef((props, forwardedRef)=>{
- const { __scopeSelect: __scopeSelect , align: align = 'start' , collisionPadding: collisionPadding = $1345bda09ffc1bc6$var$CONTENT_MARGIN , ...popperProps } = props;
- const popperScope = $1345bda09ffc1bc6$var$usePopperScope(__scopeSelect);
- return /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$radixuireactpopper.Content, ($parcel$interopDefault($cg2C9$babelruntimehelpersextends))({}, popperScope, popperProps, {
- ref: forwardedRef,
- align: align,
- collisionPadding: collisionPadding,
- style: {
- // Ensure border-box for floating-ui calculations
- boxSizing: 'border-box',
- ...popperProps.style,
- '--radix-select-content-transform-origin': 'var(--radix-popper-transform-origin)',
- '--radix-select-content-available-width': 'var(--radix-popper-available-width)',
- '--radix-select-content-available-height': 'var(--radix-popper-available-height)',
- '--radix-select-trigger-width': 'var(--radix-popper-anchor-width)',
- '--radix-select-trigger-height': 'var(--radix-popper-anchor-height)'
- }
- }));
- });
- /*#__PURE__*/ Object.assign($1345bda09ffc1bc6$var$SelectPopperPosition, {
- displayName: $1345bda09ffc1bc6$var$POPPER_POSITION_NAME
- });
- /* -------------------------------------------------------------------------------------------------
- * SelectViewport
- * -----------------------------------------------------------------------------------------------*/ const [$1345bda09ffc1bc6$var$SelectViewportProvider, $1345bda09ffc1bc6$var$useSelectViewportContext] = $1345bda09ffc1bc6$var$createSelectContext($1345bda09ffc1bc6$var$CONTENT_NAME, {});
- const $1345bda09ffc1bc6$var$VIEWPORT_NAME = 'SelectViewport';
- const $1345bda09ffc1bc6$export$9ed6e7b40248d36d = /*#__PURE__*/ $cg2C9$react.forwardRef((props, forwardedRef)=>{
- const { __scopeSelect: __scopeSelect , ...viewportProps } = props;
- const contentContext = $1345bda09ffc1bc6$var$useSelectContentContext($1345bda09ffc1bc6$var$VIEWPORT_NAME, __scopeSelect);
- const viewportContext = $1345bda09ffc1bc6$var$useSelectViewportContext($1345bda09ffc1bc6$var$VIEWPORT_NAME, __scopeSelect);
- const composedRefs = $cg2C9$radixuireactcomposerefs.useComposedRefs(forwardedRef, contentContext.onViewportChange);
- const prevScrollTopRef = $cg2C9$react.useRef(0);
- return /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$react.Fragment, null, /*#__PURE__*/ $cg2C9$react.createElement("style", {
- dangerouslySetInnerHTML: {
- __html: `[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}`
- }
- }), /*#__PURE__*/ $cg2C9$react.createElement($1345bda09ffc1bc6$var$Collection.Slot, {
- scope: __scopeSelect
- }, /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$radixuireactprimitive.Primitive.div, ($parcel$interopDefault($cg2C9$babelruntimehelpersextends))({
- "data-radix-select-viewport": "",
- role: "presentation"
- }, viewportProps, {
- ref: composedRefs,
- style: {
- // we use position: 'relative' here on the `viewport` so that when we call
- // `selectedItem.offsetTop` in calculations, the offset is relative to the viewport
- // (independent of the scrollUpButton).
- position: 'relative',
- flex: 1,
- overflow: 'auto',
- ...viewportProps.style
- },
- onScroll: $cg2C9$radixuiprimitive.composeEventHandlers(viewportProps.onScroll, (event)=>{
- const viewport = event.currentTarget;
- const { contentWrapper: contentWrapper , shouldExpandOnScrollRef: shouldExpandOnScrollRef } = viewportContext;
- if (shouldExpandOnScrollRef !== null && shouldExpandOnScrollRef !== void 0 && shouldExpandOnScrollRef.current && contentWrapper) {
- const scrolledBy = Math.abs(prevScrollTopRef.current - viewport.scrollTop);
- if (scrolledBy > 0) {
- const availableHeight = window.innerHeight - $1345bda09ffc1bc6$var$CONTENT_MARGIN * 2;
- const cssMinHeight = parseFloat(contentWrapper.style.minHeight);
- const cssHeight = parseFloat(contentWrapper.style.height);
- const prevHeight = Math.max(cssMinHeight, cssHeight);
- if (prevHeight < availableHeight) {
- const nextHeight = prevHeight + scrolledBy;
- const clampedNextHeight = Math.min(availableHeight, nextHeight);
- const heightDiff = nextHeight - clampedNextHeight;
- contentWrapper.style.height = clampedNextHeight + 'px';
- if (contentWrapper.style.bottom === '0px') {
- viewport.scrollTop = heightDiff > 0 ? heightDiff : 0; // ensure the content stays pinned to the bottom
- contentWrapper.style.justifyContent = 'flex-end';
- }
- }
- }
- }
- prevScrollTopRef.current = viewport.scrollTop;
- })
- }))));
- });
- /*#__PURE__*/ Object.assign($1345bda09ffc1bc6$export$9ed6e7b40248d36d, {
- displayName: $1345bda09ffc1bc6$var$VIEWPORT_NAME
- });
- /* -------------------------------------------------------------------------------------------------
- * SelectGroup
- * -----------------------------------------------------------------------------------------------*/ const $1345bda09ffc1bc6$var$GROUP_NAME = 'SelectGroup';
- const [$1345bda09ffc1bc6$var$SelectGroupContextProvider, $1345bda09ffc1bc6$var$useSelectGroupContext] = $1345bda09ffc1bc6$var$createSelectContext($1345bda09ffc1bc6$var$GROUP_NAME);
- const $1345bda09ffc1bc6$export$ee25a334c55de1f4 = /*#__PURE__*/ $cg2C9$react.forwardRef((props, forwardedRef)=>{
- const { __scopeSelect: __scopeSelect , ...groupProps } = props;
- const groupId = $cg2C9$radixuireactid.useId();
- return /*#__PURE__*/ $cg2C9$react.createElement($1345bda09ffc1bc6$var$SelectGroupContextProvider, {
- scope: __scopeSelect,
- id: groupId
- }, /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$radixuireactprimitive.Primitive.div, ($parcel$interopDefault($cg2C9$babelruntimehelpersextends))({
- role: "group",
- "aria-labelledby": groupId
- }, groupProps, {
- ref: forwardedRef
- })));
- });
- /*#__PURE__*/ Object.assign($1345bda09ffc1bc6$export$ee25a334c55de1f4, {
- displayName: $1345bda09ffc1bc6$var$GROUP_NAME
- });
- /* -------------------------------------------------------------------------------------------------
- * SelectLabel
- * -----------------------------------------------------------------------------------------------*/ const $1345bda09ffc1bc6$var$LABEL_NAME = 'SelectLabel';
- const $1345bda09ffc1bc6$export$f67338d29bd972f8 = /*#__PURE__*/ $cg2C9$react.forwardRef((props, forwardedRef)=>{
- const { __scopeSelect: __scopeSelect , ...labelProps } = props;
- const groupContext = $1345bda09ffc1bc6$var$useSelectGroupContext($1345bda09ffc1bc6$var$LABEL_NAME, __scopeSelect);
- return /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$radixuireactprimitive.Primitive.div, ($parcel$interopDefault($cg2C9$babelruntimehelpersextends))({
- id: groupContext.id
- }, labelProps, {
- ref: forwardedRef
- }));
- });
- /*#__PURE__*/ Object.assign($1345bda09ffc1bc6$export$f67338d29bd972f8, {
- displayName: $1345bda09ffc1bc6$var$LABEL_NAME
- });
- /* -------------------------------------------------------------------------------------------------
- * SelectItem
- * -----------------------------------------------------------------------------------------------*/ const $1345bda09ffc1bc6$var$ITEM_NAME = 'SelectItem';
- const [$1345bda09ffc1bc6$var$SelectItemContextProvider, $1345bda09ffc1bc6$var$useSelectItemContext] = $1345bda09ffc1bc6$var$createSelectContext($1345bda09ffc1bc6$var$ITEM_NAME);
- const $1345bda09ffc1bc6$export$13ef48a934230896 = /*#__PURE__*/ $cg2C9$react.forwardRef((props, forwardedRef)=>{
- const { __scopeSelect: __scopeSelect , value: value , disabled: disabled = false , textValue: textValueProp , ...itemProps } = props;
- const context = $1345bda09ffc1bc6$var$useSelectContext($1345bda09ffc1bc6$var$ITEM_NAME, __scopeSelect);
- const contentContext = $1345bda09ffc1bc6$var$useSelectContentContext($1345bda09ffc1bc6$var$ITEM_NAME, __scopeSelect);
- const isSelected = context.value === value;
- const [textValue, setTextValue] = $cg2C9$react.useState(textValueProp !== null && textValueProp !== void 0 ? textValueProp : '');
- const [isFocused, setIsFocused] = $cg2C9$react.useState(false);
- const composedRefs = $cg2C9$radixuireactcomposerefs.useComposedRefs(forwardedRef, (node)=>{
- var _contentContext$itemR;
- return (_contentContext$itemR = contentContext.itemRefCallback) === null || _contentContext$itemR === void 0 ? void 0 : _contentContext$itemR.call(contentContext, node, value, disabled);
- });
- const textId = $cg2C9$radixuireactid.useId();
- const handleSelect = ()=>{
- if (!disabled) {
- context.onValueChange(value);
- context.onOpenChange(false);
- }
- };
- return /*#__PURE__*/ $cg2C9$react.createElement($1345bda09ffc1bc6$var$SelectItemContextProvider, {
- scope: __scopeSelect,
- value: value,
- disabled: disabled,
- textId: textId,
- isSelected: isSelected,
- onItemTextChange: $cg2C9$react.useCallback((node)=>{
- setTextValue((prevTextValue)=>{
- var _node$textContent;
- return prevTextValue || ((_node$textContent = node === null || node === void 0 ? void 0 : node.textContent) !== null && _node$textContent !== void 0 ? _node$textContent : '').trim();
- });
- }, [])
- }, /*#__PURE__*/ $cg2C9$react.createElement($1345bda09ffc1bc6$var$Collection.ItemSlot, {
- scope: __scopeSelect,
- value: value,
- disabled: disabled,
- textValue: textValue
- }, /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$radixuireactprimitive.Primitive.div, ($parcel$interopDefault($cg2C9$babelruntimehelpersextends))({
- role: "option",
- "aria-labelledby": textId,
- "data-highlighted": isFocused ? '' : undefined // `isFocused` caveat fixes stuttering in VoiceOver
- ,
- "aria-selected": isSelected && isFocused,
- "data-state": isSelected ? 'checked' : 'unchecked',
- "aria-disabled": disabled || undefined,
- "data-disabled": disabled ? '' : undefined,
- tabIndex: disabled ? undefined : -1
- }, itemProps, {
- ref: composedRefs,
- onFocus: $cg2C9$radixuiprimitive.composeEventHandlers(itemProps.onFocus, ()=>setIsFocused(true)
- ),
- onBlur: $cg2C9$radixuiprimitive.composeEventHandlers(itemProps.onBlur, ()=>setIsFocused(false)
- ),
- onPointerUp: $cg2C9$radixuiprimitive.composeEventHandlers(itemProps.onPointerUp, handleSelect),
- onPointerMove: $cg2C9$radixuiprimitive.composeEventHandlers(itemProps.onPointerMove, (event)=>{
- if (disabled) {
- var _contentContext$onIte;
- (_contentContext$onIte = contentContext.onItemLeave) === null || _contentContext$onIte === void 0 || _contentContext$onIte.call(contentContext);
- } else // even though safari doesn't support this option, it's acceptable
- // as it only means it might scroll a few pixels when using the pointer.
- event.currentTarget.focus({
- preventScroll: true
- });
- }),
- onPointerLeave: $cg2C9$radixuiprimitive.composeEventHandlers(itemProps.onPointerLeave, (event)=>{
- if (event.currentTarget === document.activeElement) {
- var _contentContext$onIte2;
- (_contentContext$onIte2 = contentContext.onItemLeave) === null || _contentContext$onIte2 === void 0 || _contentContext$onIte2.call(contentContext);
- }
- }),
- onKeyDown: $cg2C9$radixuiprimitive.composeEventHandlers(itemProps.onKeyDown, (event)=>{
- var _contentContext$searc;
- const isTypingAhead = ((_contentContext$searc = contentContext.searchRef) === null || _contentContext$searc === void 0 ? void 0 : _contentContext$searc.current) !== '';
- if (isTypingAhead && event.key === ' ') return;
- if ($1345bda09ffc1bc6$var$SELECTION_KEYS.includes(event.key)) handleSelect(); // prevent page scroll if using the space key to select an item
- if (event.key === ' ') event.preventDefault();
- })
- }))));
- });
- /*#__PURE__*/ Object.assign($1345bda09ffc1bc6$export$13ef48a934230896, {
- displayName: $1345bda09ffc1bc6$var$ITEM_NAME
- });
- /* -------------------------------------------------------------------------------------------------
- * SelectItemText
- * -----------------------------------------------------------------------------------------------*/ const $1345bda09ffc1bc6$var$ITEM_TEXT_NAME = 'SelectItemText';
- const $1345bda09ffc1bc6$export$3572fb0fb821ff49 = /*#__PURE__*/ $cg2C9$react.forwardRef((props, forwardedRef)=>{
- // We ignore `className` and `style` as this part shouldn't be styled.
- const { __scopeSelect: __scopeSelect , className: className , style: style , ...itemTextProps } = props;
- const context = $1345bda09ffc1bc6$var$useSelectContext($1345bda09ffc1bc6$var$ITEM_TEXT_NAME, __scopeSelect);
- const contentContext = $1345bda09ffc1bc6$var$useSelectContentContext($1345bda09ffc1bc6$var$ITEM_TEXT_NAME, __scopeSelect);
- const itemContext = $1345bda09ffc1bc6$var$useSelectItemContext($1345bda09ffc1bc6$var$ITEM_TEXT_NAME, __scopeSelect);
- const nativeOptionsContext = $1345bda09ffc1bc6$var$useSelectNativeOptionsContext($1345bda09ffc1bc6$var$ITEM_TEXT_NAME, __scopeSelect);
- const [itemTextNode, setItemTextNode] = $cg2C9$react.useState(null);
- const composedRefs = $cg2C9$radixuireactcomposerefs.useComposedRefs(forwardedRef, (node)=>setItemTextNode(node)
- , itemContext.onItemTextChange, (node)=>{
- var _contentContext$itemT;
- return (_contentContext$itemT = contentContext.itemTextRefCallback) === null || _contentContext$itemT === void 0 ? void 0 : _contentContext$itemT.call(contentContext, node, itemContext.value, itemContext.disabled);
- });
- const textContent = itemTextNode === null || itemTextNode === void 0 ? void 0 : itemTextNode.textContent;
- const nativeOption = $cg2C9$react.useMemo(()=>/*#__PURE__*/ $cg2C9$react.createElement("option", {
- key: itemContext.value,
- value: itemContext.value,
- disabled: itemContext.disabled
- }, textContent)
- , [
- itemContext.disabled,
- itemContext.value,
- textContent
- ]);
- const { onNativeOptionAdd: onNativeOptionAdd , onNativeOptionRemove: onNativeOptionRemove } = nativeOptionsContext;
- $cg2C9$radixuireactuselayouteffect.useLayoutEffect(()=>{
- onNativeOptionAdd(nativeOption);
- return ()=>onNativeOptionRemove(nativeOption)
- ;
- }, [
- onNativeOptionAdd,
- onNativeOptionRemove,
- nativeOption
- ]);
- return /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$react.Fragment, null, /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$radixuireactprimitive.Primitive.span, ($parcel$interopDefault($cg2C9$babelruntimehelpersextends))({
- id: itemContext.textId
- }, itemTextProps, {
- ref: composedRefs
- })), itemContext.isSelected && context.valueNode && !context.valueNodeHasChildren ? /*#__PURE__*/ $cg2C9$reactdom.createPortal(itemTextProps.children, context.valueNode) : null);
- });
- /*#__PURE__*/ Object.assign($1345bda09ffc1bc6$export$3572fb0fb821ff49, {
- displayName: $1345bda09ffc1bc6$var$ITEM_TEXT_NAME
- });
- /* -------------------------------------------------------------------------------------------------
- * SelectItemIndicator
- * -----------------------------------------------------------------------------------------------*/ const $1345bda09ffc1bc6$var$ITEM_INDICATOR_NAME = 'SelectItemIndicator';
- const $1345bda09ffc1bc6$export$6b9198de19accfe6 = /*#__PURE__*/ $cg2C9$react.forwardRef((props, forwardedRef)=>{
- const { __scopeSelect: __scopeSelect , ...itemIndicatorProps } = props;
- const itemContext = $1345bda09ffc1bc6$var$useSelectItemContext($1345bda09ffc1bc6$var$ITEM_INDICATOR_NAME, __scopeSelect);
- return itemContext.isSelected ? /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$radixuireactprimitive.Primitive.span, ($parcel$interopDefault($cg2C9$babelruntimehelpersextends))({
- "aria-hidden": true
- }, itemIndicatorProps, {
- ref: forwardedRef
- })) : null;
- });
- /*#__PURE__*/ Object.assign($1345bda09ffc1bc6$export$6b9198de19accfe6, {
- displayName: $1345bda09ffc1bc6$var$ITEM_INDICATOR_NAME
- });
- /* -------------------------------------------------------------------------------------------------
- * SelectScrollUpButton
- * -----------------------------------------------------------------------------------------------*/ const $1345bda09ffc1bc6$var$SCROLL_UP_BUTTON_NAME = 'SelectScrollUpButton';
- const $1345bda09ffc1bc6$export$d8117927658af6d7 = /*#__PURE__*/ $cg2C9$react.forwardRef((props, forwardedRef)=>{
- const contentContext = $1345bda09ffc1bc6$var$useSelectContentContext($1345bda09ffc1bc6$var$SCROLL_UP_BUTTON_NAME, props.__scopeSelect);
- const viewportContext = $1345bda09ffc1bc6$var$useSelectViewportContext($1345bda09ffc1bc6$var$SCROLL_UP_BUTTON_NAME, props.__scopeSelect);
- const [canScrollUp1, setCanScrollUp] = $cg2C9$react.useState(false);
- const composedRefs = $cg2C9$radixuireactcomposerefs.useComposedRefs(forwardedRef, viewportContext.onScrollButtonChange);
- $cg2C9$radixuireactuselayouteffect.useLayoutEffect(()=>{
- if (contentContext.viewport && contentContext.isPositioned) {
- const viewport = contentContext.viewport;
- function handleScroll() {
- const canScrollUp = viewport.scrollTop > 0;
- setCanScrollUp(canScrollUp);
- }
- handleScroll();
- viewport.addEventListener('scroll', handleScroll);
- return ()=>viewport.removeEventListener('scroll', handleScroll)
- ;
- }
- }, [
- contentContext.viewport,
- contentContext.isPositioned
- ]);
- return canScrollUp1 ? /*#__PURE__*/ $cg2C9$react.createElement($1345bda09ffc1bc6$var$SelectScrollButtonImpl, ($parcel$interopDefault($cg2C9$babelruntimehelpersextends))({}, props, {
- ref: composedRefs,
- onAutoScroll: ()=>{
- const { viewport: viewport , selectedItem: selectedItem } = contentContext;
- if (viewport && selectedItem) viewport.scrollTop = viewport.scrollTop - selectedItem.offsetHeight;
- }
- })) : null;
- });
- /*#__PURE__*/ Object.assign($1345bda09ffc1bc6$export$d8117927658af6d7, {
- displayName: $1345bda09ffc1bc6$var$SCROLL_UP_BUTTON_NAME
- });
- /* -------------------------------------------------------------------------------------------------
- * SelectScrollDownButton
- * -----------------------------------------------------------------------------------------------*/ const $1345bda09ffc1bc6$var$SCROLL_DOWN_BUTTON_NAME = 'SelectScrollDownButton';
- const $1345bda09ffc1bc6$export$ff951e476c12189 = /*#__PURE__*/ $cg2C9$react.forwardRef((props, forwardedRef)=>{
- const contentContext = $1345bda09ffc1bc6$var$useSelectContentContext($1345bda09ffc1bc6$var$SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect);
- const viewportContext = $1345bda09ffc1bc6$var$useSelectViewportContext($1345bda09ffc1bc6$var$SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect);
- const [canScrollDown1, setCanScrollDown] = $cg2C9$react.useState(false);
- const composedRefs = $cg2C9$radixuireactcomposerefs.useComposedRefs(forwardedRef, viewportContext.onScrollButtonChange);
- $cg2C9$radixuireactuselayouteffect.useLayoutEffect(()=>{
- if (contentContext.viewport && contentContext.isPositioned) {
- const viewport = contentContext.viewport;
- function handleScroll() {
- const maxScroll = viewport.scrollHeight - viewport.clientHeight; // we use Math.ceil here because if the UI is zoomed-in
- // `scrollTop` is not always reported as an integer
- const canScrollDown = Math.ceil(viewport.scrollTop) < maxScroll;
- setCanScrollDown(canScrollDown);
- }
- handleScroll();
- viewport.addEventListener('scroll', handleScroll);
- return ()=>viewport.removeEventListener('scroll', handleScroll)
- ;
- }
- }, [
- contentContext.viewport,
- contentContext.isPositioned
- ]);
- return canScrollDown1 ? /*#__PURE__*/ $cg2C9$react.createElement($1345bda09ffc1bc6$var$SelectScrollButtonImpl, ($parcel$interopDefault($cg2C9$babelruntimehelpersextends))({}, props, {
- ref: composedRefs,
- onAutoScroll: ()=>{
- const { viewport: viewport , selectedItem: selectedItem } = contentContext;
- if (viewport && selectedItem) viewport.scrollTop = viewport.scrollTop + selectedItem.offsetHeight;
- }
- })) : null;
- });
- /*#__PURE__*/ Object.assign($1345bda09ffc1bc6$export$ff951e476c12189, {
- displayName: $1345bda09ffc1bc6$var$SCROLL_DOWN_BUTTON_NAME
- });
- const $1345bda09ffc1bc6$var$SelectScrollButtonImpl = /*#__PURE__*/ $cg2C9$react.forwardRef((props, forwardedRef)=>{
- const { __scopeSelect: __scopeSelect , onAutoScroll: onAutoScroll , ...scrollIndicatorProps } = props;
- const contentContext = $1345bda09ffc1bc6$var$useSelectContentContext('SelectScrollButton', __scopeSelect);
- const autoScrollTimerRef = $cg2C9$react.useRef(null);
- const getItems = $1345bda09ffc1bc6$var$useCollection(__scopeSelect);
- const clearAutoScrollTimer = $cg2C9$react.useCallback(()=>{
- if (autoScrollTimerRef.current !== null) {
- window.clearInterval(autoScrollTimerRef.current);
- autoScrollTimerRef.current = null;
- }
- }, []);
- $cg2C9$react.useEffect(()=>{
- return ()=>clearAutoScrollTimer()
- ;
- }, [
- clearAutoScrollTimer
- ]); // When the viewport becomes scrollable on either side, the relevant scroll button will mount.
- // Because it is part of the normal flow, it will push down (top button) or shrink (bottom button)
- // the viewport, potentially causing the active item to now be partially out of view.
- // We re-run the `scrollIntoView` logic to make sure it stays within the viewport.
- $cg2C9$radixuireactuselayouteffect.useLayoutEffect(()=>{
- var _activeItem$ref$curre;
- const activeItem = getItems().find((item)=>item.ref.current === document.activeElement
- );
- activeItem === null || activeItem === void 0 || (_activeItem$ref$curre = activeItem.ref.current) === null || _activeItem$ref$curre === void 0 || _activeItem$ref$curre.scrollIntoView({
- block: 'nearest'
- });
- }, [
- getItems
- ]);
- return /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$radixuireactprimitive.Primitive.div, ($parcel$interopDefault($cg2C9$babelruntimehelpersextends))({
- "aria-hidden": true
- }, scrollIndicatorProps, {
- ref: forwardedRef,
- style: {
- flexShrink: 0,
- ...scrollIndicatorProps.style
- },
- onPointerDown: $cg2C9$radixuiprimitive.composeEventHandlers(scrollIndicatorProps.onPointerDown, ()=>{
- if (autoScrollTimerRef.current === null) autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);
- }),
- onPointerMove: $cg2C9$radixuiprimitive.composeEventHandlers(scrollIndicatorProps.onPointerMove, ()=>{
- var _contentContext$onIte3;
- (_contentContext$onIte3 = contentContext.onItemLeave) === null || _contentContext$onIte3 === void 0 || _contentContext$onIte3.call(contentContext);
- if (autoScrollTimerRef.current === null) autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);
- }),
- onPointerLeave: $cg2C9$radixuiprimitive.composeEventHandlers(scrollIndicatorProps.onPointerLeave, ()=>{
- clearAutoScrollTimer();
- })
- }));
- });
- /* -------------------------------------------------------------------------------------------------
- * SelectSeparator
- * -----------------------------------------------------------------------------------------------*/ const $1345bda09ffc1bc6$var$SEPARATOR_NAME = 'SelectSeparator';
- const $1345bda09ffc1bc6$export$eba4b1df07cb1d3 = /*#__PURE__*/ $cg2C9$react.forwardRef((props, forwardedRef)=>{
- const { __scopeSelect: __scopeSelect , ...separatorProps } = props;
- return /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$radixuireactprimitive.Primitive.div, ($parcel$interopDefault($cg2C9$babelruntimehelpersextends))({
- "aria-hidden": true
- }, separatorProps, {
- ref: forwardedRef
- }));
- });
- /*#__PURE__*/ Object.assign($1345bda09ffc1bc6$export$eba4b1df07cb1d3, {
- displayName: $1345bda09ffc1bc6$var$SEPARATOR_NAME
- });
- /* -------------------------------------------------------------------------------------------------
- * SelectArrow
- * -----------------------------------------------------------------------------------------------*/ const $1345bda09ffc1bc6$var$ARROW_NAME = 'SelectArrow';
- const $1345bda09ffc1bc6$export$314f4cb8f8099628 = /*#__PURE__*/ $cg2C9$react.forwardRef((props, forwardedRef)=>{
- const { __scopeSelect: __scopeSelect , ...arrowProps } = props;
- const popperScope = $1345bda09ffc1bc6$var$usePopperScope(__scopeSelect);
- const context = $1345bda09ffc1bc6$var$useSelectContext($1345bda09ffc1bc6$var$ARROW_NAME, __scopeSelect);
- const contentContext = $1345bda09ffc1bc6$var$useSelectContentContext($1345bda09ffc1bc6$var$ARROW_NAME, __scopeSelect);
- return context.open && contentContext.position === 'popper' ? /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$radixuireactpopper.Arrow, ($parcel$interopDefault($cg2C9$babelruntimehelpersextends))({}, popperScope, arrowProps, {
- ref: forwardedRef
- })) : null;
- });
- /*#__PURE__*/ Object.assign($1345bda09ffc1bc6$export$314f4cb8f8099628, {
- displayName: $1345bda09ffc1bc6$var$ARROW_NAME
- });
- /* -----------------------------------------------------------------------------------------------*/ const $1345bda09ffc1bc6$var$BubbleSelect = /*#__PURE__*/ $cg2C9$react.forwardRef((props, forwardedRef)=>{
- const { value: value , ...selectProps } = props;
- const ref = $cg2C9$react.useRef(null);
- const composedRefs = $cg2C9$radixuireactcomposerefs.useComposedRefs(forwardedRef, ref);
- const prevValue = $cg2C9$radixuireactuseprevious.usePrevious(value); // Bubble value change to parents (e.g form change event)
- $cg2C9$react.useEffect(()=>{
- const select = ref.current;
- const selectProto = window.HTMLSelectElement.prototype;
- const descriptor = Object.getOwnPropertyDescriptor(selectProto, 'value');
- const setValue = descriptor.set;
- if (prevValue !== value && setValue) {
- const event = new Event('change', {
- bubbles: true
- });
- setValue.call(select, value);
- select.dispatchEvent(event);
- }
- }, [
- prevValue,
- value
- ]);
- /**
- * We purposefully use a `select` here to support form autofill as much
- * as possible.
- *
- * We purposefully do not add the `value` attribute here to allow the value
- * to be set programatically and bubble to any parent form `onChange` event.
- * Adding the `value` will cause React to consider the programatic
- * dispatch a duplicate and it will get swallowed.
- *
- * We use `VisuallyHidden` rather than `display: "none"` because Safari autofill
- * won't work otherwise.
- */ return /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$radixuireactvisuallyhidden.VisuallyHidden, {
- asChild: true
- }, /*#__PURE__*/ $cg2C9$react.createElement("select", ($parcel$interopDefault($cg2C9$babelruntimehelpersextends))({}, selectProps, {
- ref: composedRefs,
- defaultValue: value
- })));
- });
- $1345bda09ffc1bc6$var$BubbleSelect.displayName = 'BubbleSelect';
- function $1345bda09ffc1bc6$var$useTypeaheadSearch(onSearchChange) {
- const handleSearchChange = $cg2C9$radixuireactusecallbackref.useCallbackRef(onSearchChange);
- const searchRef = $cg2C9$react.useRef('');
- const timerRef = $cg2C9$react.useRef(0);
- const handleTypeaheadSearch = $cg2C9$react.useCallback((key)=>{
- const search = searchRef.current + key;
- handleSearchChange(search);
- (function updateSearch(value) {
- searchRef.current = value;
- window.clearTimeout(timerRef.current); // Reset `searchRef` 1 second after it was last updated
- if (value !== '') timerRef.current = window.setTimeout(()=>updateSearch('')
- , 1000);
- })(search);
- }, [
- handleSearchChange
- ]);
- const resetTypeahead = $cg2C9$react.useCallback(()=>{
- searchRef.current = '';
- window.clearTimeout(timerRef.current);
- }, []);
- $cg2C9$react.useEffect(()=>{
- return ()=>window.clearTimeout(timerRef.current)
- ;
- }, []);
- return [
- searchRef,
- handleTypeaheadSearch,
- resetTypeahead
- ];
- }
- /**
- * This is the "meat" of the typeahead matching logic. It takes in a list of items,
- * the search and the current item, and returns the next item (or `undefined`).
- *
- * We normalize the search because if a user has repeatedly pressed a character,
- * we want the exact same behavior as if we only had that one character
- * (ie. cycle through items starting with that character)
- *
- * We also reorder the items by wrapping the array around the current item.
- * This is so we always look forward from the current item, and picking the first
- * item will always be the correct one.
- *
- * Finally, if the normalized search is exactly one character, we exclude the
- * current item from the values because otherwise it would be the first to match always
- * and focus would never move. This is as opposed to the regular case, where we
- * don't want focus to move if the current item still matches.
- */ function $1345bda09ffc1bc6$var$findNextItem(items, search, currentItem) {
- const isRepeated = search.length > 1 && Array.from(search).every((char)=>char === search[0]
- );
- const normalizedSearch = isRepeated ? search[0] : search;
- const currentItemIndex = currentItem ? items.indexOf(currentItem) : -1;
- let wrappedItems = $1345bda09ffc1bc6$var$wrapArray(items, Math.max(currentItemIndex, 0));
- const excludeCurrentItem = normalizedSearch.length === 1;
- if (excludeCurrentItem) wrappedItems = wrappedItems.filter((v)=>v !== currentItem
- );
- const nextItem = wrappedItems.find((item)=>item.textValue.toLowerCase().startsWith(normalizedSearch.toLowerCase())
- );
- return nextItem !== currentItem ? nextItem : undefined;
- }
- /**
- * Wraps an array around itself at a given start index
- * Example: `wrapArray(['a', 'b', 'c', 'd'], 2) === ['c', 'd', 'a', 'b']`
- */ function $1345bda09ffc1bc6$var$wrapArray(array, startIndex) {
- return array.map((_, index)=>array[(startIndex + index) % array.length]
- );
- }
- const $1345bda09ffc1bc6$export$be92b6f5f03c0fe9 = $1345bda09ffc1bc6$export$ef9b1a59e592288f;
- const $1345bda09ffc1bc6$export$41fb9f06171c75f4 = $1345bda09ffc1bc6$export$3ac1e88a1c0b9f1;
- const $1345bda09ffc1bc6$export$4c8d1a57a761ef94 = $1345bda09ffc1bc6$export$e288731fd71264f0;
- const $1345bda09ffc1bc6$export$f04a61298a47a40f = $1345bda09ffc1bc6$export$99b400cabb58c515;
- const $1345bda09ffc1bc6$export$602eac185826482c = $1345bda09ffc1bc6$export$b2af6c9944296213;
- const $1345bda09ffc1bc6$export$7c6e2c02157bb7d2 = $1345bda09ffc1bc6$export$c973a4b3cb86a03d;
- const $1345bda09ffc1bc6$export$d5c6c08dc2d3ca7 = $1345bda09ffc1bc6$export$9ed6e7b40248d36d;
- const $1345bda09ffc1bc6$export$eb2fcfdbd7ba97d4 = $1345bda09ffc1bc6$export$ee25a334c55de1f4;
- const $1345bda09ffc1bc6$export$b04be29aa201d4f5 = $1345bda09ffc1bc6$export$f67338d29bd972f8;
- const $1345bda09ffc1bc6$export$6d08773d2e66f8f2 = $1345bda09ffc1bc6$export$13ef48a934230896;
- const $1345bda09ffc1bc6$export$d6e5bf9c43ea9319 = $1345bda09ffc1bc6$export$3572fb0fb821ff49;
- const $1345bda09ffc1bc6$export$c3468e2714d175fa = $1345bda09ffc1bc6$export$6b9198de19accfe6;
- const $1345bda09ffc1bc6$export$2f60d3ec9ad468f2 = $1345bda09ffc1bc6$export$d8117927658af6d7;
- const $1345bda09ffc1bc6$export$bf1aedc3039c8d63 = $1345bda09ffc1bc6$export$ff951e476c12189;
- const $1345bda09ffc1bc6$export$1ff3c3f08ae963c0 = $1345bda09ffc1bc6$export$eba4b1df07cb1d3;
- const $1345bda09ffc1bc6$export$21b07c8f274aebd5 = $1345bda09ffc1bc6$export$314f4cb8f8099628;
- //# sourceMappingURL=index.js.map
|