@headlessui/react
Advanced tools
Comparing version 0.0.0-insiders.38551c8 to 0.0.0-insiders.3905be6
@@ -1,1 +0,1 @@ | ||
"use client";import{useFocusRing as G}from"@react-aria/focus";import{useHover as S}from"@react-aria/interactions";import n,{useCallback as W,useMemo as N,useState as w}from"react";import{useActivePress as J}from'../../hooks/use-active-press.js';import{useControllable as V}from'../../hooks/use-controllable.js';import{useDisposables as $}from'../../hooks/use-disposables.js';import{useEvent as s}from'../../hooks/use-event.js';import{useId as j}from'../../hooks/use-id.js';import{useDisabled as q}from'../../internal/disabled.js';import{FormFields as z}from'../../internal/form-fields.js';import{useProvidedId as Q}from'../../internal/id.js';import{isDisabledReactIssue7711 as Y}from'../../utils/bugs.js';import{attemptSubmit as Z}from'../../utils/form.js';import{forwardRefWithAs as ee,mergeProps as oe,render as te}from'../../utils/render.js';import{useDescribedBy as re}from'../description/description.js';import{Keys as y}from'../keyboard.js';import{useLabelledBy as ae}from'../label/label.js';let se="span";function le(T,h){let C=j(),k=Q(),x=q(),{id:g=k||`headlessui-checkbox-${C}`,disabled:o=x||!1,autoFocus:l=!1,checked:E,defaultChecked:i=!1,onChange:v,name:d,value:P,form:D,indeterminate:a=!1,...R}=T,[r,t]=V(E,v,i),A=ae(),F=re(),K=$(),[p,c]=w(!1),m=s(()=>{c(!0),t==null||t(!r),K.nextFrame(()=>{c(!1)})}),_=s(e=>{if(Y(e.currentTarget))return e.preventDefault();e.preventDefault(),m()}),H=s(e=>{e.key===y.Space?(e.preventDefault(),m()):e.key===y.Enter&&Z(e.currentTarget)}),B=s(e=>e.preventDefault()),{isFocusVisible:b,focusProps:L}=G({autoFocus:l}),{isHovered:u,hoverProps:I}=S({isDisabled:o}),{pressed:f,pressProps:M}=J({disabled:o}),U=oe({ref:h,id:g,role:"checkbox","aria-checked":a?"mixed":r?"true":"false","aria-labelledby":A,"aria-describedby":F,"aria-disabled":o?!0:void 0,indeterminate:a?"true":void 0,tabIndex:0,onKeyUp:o?void 0:H,onKeyPress:o?void 0:B,onClick:o?void 0:_},L,I,M),O=N(()=>({checked:r,disabled:o,hover:u,focus:b,active:f,indeterminate:a,changing:p,autofocus:l}),[r,a,o,u,b,f,p,l]),X=W(()=>t==null?void 0:t(i),[t]);return n.createElement(n.Fragment,null,d!=null&&n.createElement(z,{disabled:o,data:{[d]:P||"on"},overrides:{type:"checkbox",checked:r},form:D,onReset:X}),te({ourProps:U,theirProps:R,slot:O,defaultTag:se,name:"Checkbox"}))}let ve=ee(le);export{ve as Checkbox}; | ||
"use client";import{useFocusRing as S}from"@react-aria/focus";import{useHover as W}from"@react-aria/interactions";import i,{useCallback as N,useMemo as V,useState as w}from"react";import{useActivePress as J}from'../../hooks/use-active-press.js';import{useControllable as $}from'../../hooks/use-controllable.js';import{useDefaultValue as j}from'../../hooks/use-default-value.js';import{useDisposables as q}from'../../hooks/use-disposables.js';import{useEvent as l}from'../../hooks/use-event.js';import{useId as z}from'../../hooks/use-id.js';import{useDisabled as Q}from'../../internal/disabled.js';import{FormFields as Y}from'../../internal/form-fields.js';import{useProvidedId as Z}from'../../internal/id.js';import{isDisabledReactIssue7711 as ee}from'../../utils/bugs.js';import{attemptSubmit as oe}from'../../utils/form.js';import{forwardRefWithAs as te,mergeProps as re,render as ae}from'../../utils/render.js';import{useDescribedBy as ne}from'../description/description.js';import{Keys as y}from'../keyboard.js';import{useLabelledBy as le}from'../label/label.js';let se="span";function ie(T,h){let C=z(),k=Z(),x=Q(),{id:g=k||`headlessui-checkbox-${C}`,disabled:e=x||!1,autoFocus:s=!1,checked:E,defaultChecked:v,onChange:P,name:d,value:D,form:R,indeterminate:n=!1,...A}=T,r=j(v),[a,t]=$(E,P,r!=null?r:!1),F=le(),K=ne(),_=q(),[p,c]=w(!1),u=l(()=>{c(!0),t==null||t(!a),_.nextFrame(()=>{c(!1)})}),H=l(o=>{if(ee(o.currentTarget))return o.preventDefault();o.preventDefault(),u()}),B=l(o=>{o.key===y.Space?(o.preventDefault(),u()):o.key===y.Enter&&oe(o.currentTarget)}),L=l(o=>o.preventDefault()),{isFocusVisible:m,focusProps:I}=S({autoFocus:s}),{isHovered:f,hoverProps:M}=W({isDisabled:e}),{pressed:b,pressProps:U}=J({disabled:e}),O=re({ref:h,id:g,role:"checkbox","aria-checked":n?"mixed":a?"true":"false","aria-labelledby":F,"aria-describedby":K,"aria-disabled":e?!0:void 0,indeterminate:n?"true":void 0,tabIndex:e?void 0:0,onKeyUp:e?void 0:B,onKeyPress:e?void 0:L,onClick:e?void 0:H},I,M,U),X=V(()=>({checked:a,disabled:e,hover:f,focus:m,active:b,indeterminate:n,changing:p,autofocus:s}),[a,n,e,f,m,b,p,s]),G=N(()=>{if(r!==void 0)return t==null?void 0:t(r)},[t,r]);return i.createElement(i.Fragment,null,d!=null&&i.createElement(Y,{disabled:e,data:{[d]:D||"on"},overrides:{type:"checkbox",checked:a},form:R,onReset:G}),ae({ourProps:O,theirProps:A,slot:X,defaultTag:se,name:"Checkbox"}))}let Re=te(ie);export{Re as Checkbox}; |
@@ -33,2 +33,3 @@ import React, { type ElementType, type Ref } from 'react'; | ||
} | null; | ||
onClose?(): void; | ||
__demoMode?: boolean; | ||
@@ -79,4 +80,6 @@ }>; | ||
anchor?: AnchorProps; | ||
portal?: boolean; | ||
modal?: boolean; | ||
}>; | ||
declare function OptionsFn<TTag extends ElementType = typeof DEFAULT_OPTIONS_TAG>(props: ComboboxOptionsProps<TTag>, ref: Ref<HTMLUListElement>): React.ReactElement<any, string | React.JSXElementConstructor<any>> | null; | ||
declare function OptionsFn<TTag extends ElementType = typeof DEFAULT_OPTIONS_TAG>(props: ComboboxOptionsProps<TTag>, ref: Ref<HTMLElement>): React.JSX.Element; | ||
declare let DEFAULT_OPTION_TAG: "div"; | ||
@@ -96,3 +99,3 @@ type OptionRenderPropArg = { | ||
}>; | ||
declare function OptionFn<TTag extends ElementType = typeof DEFAULT_OPTION_TAG, TType = Parameters<typeof ComboboxRoot>[0]['value']>(props: ComboboxOptionProps<TTag, TType>, ref: Ref<HTMLLIElement>): React.ReactElement<any, string | React.JSXElementConstructor<any>> | null; | ||
declare function OptionFn<TTag extends ElementType = typeof DEFAULT_OPTION_TAG, TType = Parameters<typeof ComboboxRoot>[0]['value']>(props: ComboboxOptionProps<TTag, TType>, ref: Ref<HTMLElement>): React.ReactElement<any, string | React.JSXElementConstructor<any>> | null; | ||
export interface _internal_ComponentCombobox extends HasDisplayName { | ||
@@ -123,9 +126,13 @@ <TValue, TMultiple extends boolean | undefined = false, TTag extends ElementType = typeof DEFAULT_COMBOBOX_TAG>(props: ComboboxProps<TValue, TMultiple, TTag> & RefProp<typeof ComboboxFn>): JSX.Element; | ||
export declare let Combobox: _internal_ComponentCombobox & { | ||
/** @deprecated use `<ComboboxInput>` instead of `<Combobox.Input>` */ | ||
Input: _internal_ComponentComboboxInput; | ||
/** @deprecated use `<ComboboxButton>` instead of `<Combobox.Button>` */ | ||
Button: _internal_ComponentComboboxButton; | ||
/** @deprecated use `<Label>` instead of `<Combobox.Label>` */ | ||
Label: _internal_ComponentComboboxLabel; | ||
/** @deprecated use `<ComboboxOptions>` instead of `<Combobox.Options>` */ | ||
Options: _internal_ComponentComboboxOptions; | ||
/** @deprecated use `<ComboboxOption>` instead of `<Combobox.Option>` */ | ||
Option: _internal_ComponentComboboxOption; | ||
}; | ||
export {}; |
@@ -1,1 +0,1 @@ | ||
"use client";import{useFocusRing as ge}from"@react-aria/focus";import{useHover as ve}from"@react-aria/interactions";import{useVirtualizer as he}from"@tanstack/react-virtual";import V,{Fragment as Oe,createContext as se,createRef as Me,useCallback as Ce,useContext as de,useMemo as k,useReducer as Ve,useRef as H,useState as Le}from"react";import{useActivePress as we}from'../../hooks/use-active-press.js';import{useByComparator as Be}from'../../hooks/use-by-comparator.js';import{useControllable as Ue}from'../../hooks/use-controllable.js';import{useDisposables as ye}from'../../hooks/use-disposables.js';import{useElementSize as Re}from'../../hooks/use-element-size.js';import{useEvent as v}from'../../hooks/use-event.js';import{useFrameDebounce as Ne}from'../../hooks/use-frame-debounce.js';import{useId as re}from'../../hooks/use-id.js';import{useIsoMorphicEffect as j}from'../../hooks/use-iso-morphic-effect.js';import{useLatestValue as ke}from'../../hooks/use-latest-value.js';import{useOnDisappear as He}from'../../hooks/use-on-disappear.js';import{useOutsideClick as Ge}from'../../hooks/use-outside-click.js';import{useOwnerDocument as je}from'../../hooks/use-owner.js';import{useRefocusableInput as Se}from'../../hooks/use-refocusable-input.js';import{useResolveButtonType as Ke}from'../../hooks/use-resolve-button-type.js';import{useSyncRefs as ie}from'../../hooks/use-sync-refs.js';import{useTrackedPointer as We}from'../../hooks/use-tracked-pointer.js';import{useTreeWalker as ze}from'../../hooks/use-tree-walker.js';import{useWatch as Pe}from'../../hooks/use-watch.js';import{useDisabled as $e}from'../../internal/disabled.js';import{FloatingProvider as Xe,useFloatingPanel as Je,useFloatingPanelProps as qe,useFloatingReference as Ye}from'../../internal/floating.js';import{FormFields as Qe}from'../../internal/form-fields.js';import{useProvidedId as Ze}from'../../internal/id.js';import{OpenClosedProvider as eo,State as ae,useOpenClosed as oo}from'../../internal/open-closed.js';import{history as Ie}from'../../utils/active-element-history.js';import{isDisabledReactIssue7711 as to}from'../../utils/bugs.js';import{Focus as I,calculateActiveIndex as Ae}from'../../utils/calculate-active-index.js';import{disposables as Ee}from'../../utils/disposables.js';import{sortByDomNode as no}from'../../utils/focus-management.js';import{match as $}from'../../utils/match.js';import{isMobile as ro}from'../../utils/platform.js';import{RenderFeatures as Fe,forwardRefWithAs as q,mergeProps as be,render as Y}from'../../utils/render.js';import{useDescribedBy as io}from'../description/description.js';import{Keys as D}from'../keyboard.js';import{Label as ao,useLabelledBy as ce,useLabels as lo}from'../label/label.js';import{MouseButton as _e}from'../mouse.js';var uo=(e=>(e[e.Open=0]="Open",e[e.Closed=1]="Closed",e))(uo||{}),po=(e=>(e[e.Single=0]="Single",e[e.Multi=1]="Multi",e))(po||{}),so=(t=>(t[t.Pointer=0]="Pointer",t[t.Focus=1]="Focus",t[t.Other=2]="Other",t))(so||{}),bo=(i=>(i[i.OpenCombobox=0]="OpenCombobox",i[i.CloseCombobox=1]="CloseCombobox",i[i.GoToOption=2]="GoToOption",i[i.RegisterOption=3]="RegisterOption",i[i.UnregisterOption=4]="UnregisterOption",i[i.SetActivationTrigger=5]="SetActivationTrigger",i[i.UpdateVirtualOptions=6]="UpdateVirtualOptions",i))(bo||{});function fe(o,r=e=>e){let e=o.activeOptionIndex!==null?o.options[o.activeOptionIndex]:null,t=r(o.options.slice()),l=t.length>0&&t[0].dataRef.current.order!==null?t.sort((m,i)=>m.dataRef.current.order-i.dataRef.current.order):no(t,m=>m.dataRef.current.domRef.current),d=e?l.indexOf(e):null;return d===-1&&(d=null),{options:l,activeOptionIndex:d}}let co={[1](o){var r;return(r=o.dataRef.current)!=null&&r.disabled||o.comboboxState===1?o:{...o,activeOptionIndex:null,comboboxState:1}},[0](o){var r,e;if((r=o.dataRef.current)!=null&&r.disabled||o.comboboxState===0)return o;if((e=o.dataRef.current)!=null&&e.value){let t=o.dataRef.current.calculateIndex(o.dataRef.current.value);if(t!==-1)return{...o,activeOptionIndex:t,comboboxState:0}}return{...o,comboboxState:0}},[2](o,r){var d,m,i,n,b;if((d=o.dataRef.current)!=null&&d.disabled||(m=o.dataRef.current)!=null&&m.optionsRef.current&&!((i=o.dataRef.current)!=null&&i.optionsPropsRef.current.static)&&o.comboboxState===1)return o;if(o.virtual){let f=r.focus===I.Specific?r.idx:Ae(r,{resolveItems:()=>o.virtual.options,resolveActiveIndex:()=>{var F,s;return(s=(F=o.activeOptionIndex)!=null?F:o.virtual.options.findIndex(E=>!o.virtual.disabled(E)))!=null?s:null},resolveDisabled:o.virtual.disabled,resolveId(){throw new Error("Function not implemented.")}}),x=(n=r.trigger)!=null?n:2;return o.activeOptionIndex===f&&o.activationTrigger===x?o:{...o,activeOptionIndex:f,activationTrigger:x}}let e=fe(o);if(e.activeOptionIndex===null){let f=e.options.findIndex(x=>!x.dataRef.current.disabled);f!==-1&&(e.activeOptionIndex=f)}let t=r.focus===I.Specific?r.idx:Ae(r,{resolveItems:()=>e.options,resolveActiveIndex:()=>e.activeOptionIndex,resolveId:f=>f.id,resolveDisabled:f=>f.dataRef.current.disabled}),l=(b=r.trigger)!=null?b:2;return o.activeOptionIndex===t&&o.activationTrigger===l?o:{...o,...e,activeOptionIndex:t,activationTrigger:l}},[3]:(o,r)=>{var d,m,i;if((d=o.dataRef.current)!=null&&d.virtual)return{...o,options:[...o.options,r.payload]};let e=r.payload,t=fe(o,n=>(n.push(e),n));o.activeOptionIndex===null&&(m=o.dataRef.current)!=null&&m.isSelected(r.payload.dataRef.current.value)&&(t.activeOptionIndex=t.options.indexOf(e));let l={...o,...t,activationTrigger:2};return(i=o.dataRef.current)!=null&&i.__demoMode&&o.dataRef.current.value===void 0&&(l.activeOptionIndex=0),l},[4]:(o,r)=>{var t;if((t=o.dataRef.current)!=null&&t.virtual)return{...o,options:o.options.filter(l=>l.id!==r.id)};let e=fe(o,l=>{let d=l.findIndex(m=>m.id===r.id);return d!==-1&&l.splice(d,1),l});return{...o,...e,activationTrigger:2}},[5]:(o,r)=>o.activationTrigger===r.trigger?o:{...o,activationTrigger:r.trigger},[6]:(o,r)=>{var t;if(((t=o.virtual)==null?void 0:t.options)===r.options)return o;let e=o.activeOptionIndex;if(o.activeOptionIndex!==null){let l=r.options.indexOf(o.virtual.options[o.activeOptionIndex]);l!==-1?e=l:e=null}return{...o,activeOptionIndex:e,virtual:Object.assign({},o.virtual,{options:r.options})}}},me=se(null);me.displayName="ComboboxActionsContext";function Q(o){let r=de(me);if(r===null){let e=new Error(`<${o} /> is missing a parent <Combobox /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(e,Q),e}return r}let De=se(null);function fo(o){var i;let r=X("VirtualProvider"),[e,t]=k(()=>{let n=r.optionsRef.current;if(!n)return[0,0];let b=window.getComputedStyle(n);return[parseFloat(b.paddingBlockStart||b.paddingTop),parseFloat(b.paddingBlockEnd||b.paddingBottom)]},[r.optionsRef.current]),l=he({scrollPaddingStart:e,scrollPaddingEnd:t,count:r.virtual.options.length,estimateSize(){return 40},getScrollElement(){var n;return(n=r.optionsRef.current)!=null?n:null},overscan:12}),[d,m]=Le(0);return j(()=>{m(n=>n+1)},[(i=r.virtual)==null?void 0:i.options]),V.createElement(De.Provider,{value:l},V.createElement("div",{style:{position:"relative",width:"100%",height:`${l.getTotalSize()}px`},ref:n=>{if(n){if(typeof process!="undefined"&&process.env.JEST_WORKER_ID!==void 0||r.activationTrigger===0)return;r.activeOptionIndex!==null&&r.virtual.options.length>r.activeOptionIndex&&l.scrollToIndex(r.activeOptionIndex)}}},l.getVirtualItems().map(n=>{var b;return V.createElement(Oe,{key:n.key},V.cloneElement((b=o.children)==null?void 0:b.call(o,{option:r.virtual.options[n.index],open:r.comboboxState===0}),{key:`${d}-${n.key}`,"data-index":n.index,"aria-setsize":r.virtual.options.length,"aria-posinset":n.index+1,style:{position:"absolute",top:0,left:0,transform:`translateY(${n.start}px)`,overflowAnchor:"none"}}))})))}let xe=se(null);xe.displayName="ComboboxDataContext";function X(o){let r=de(xe);if(r===null){let e=new Error(`<${o} /> is missing a parent <Combobox /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(e,X),e}return r}function mo(o,r){return $(r.type,co,o,r)}let xo=Oe;function To(o,r){var h,C;let e=$e(),{value:t,defaultValue:l,onChange:d,form:m,name:i,by:n,disabled:b=e||!1,__demoMode:f=!1,multiple:x=!1,immediate:F=!1,virtual:s=null,nullable:E,...T}=o,[P=x?[]:void 0,O]=Ue(t,d,l),[y,g]=Ve(mo,{dataRef:Me(),comboboxState:f?0:1,options:[],virtual:s?{options:s.options,disabled:(h=s.disabled)!=null?h:()=>!1}:null,activeOptionIndex:null,activationTrigger:2}),M=H(!1),B=H({static:!1,hold:!1}),G=H(null),U=H(null),R=H(null),L=Be(n),J=v(p=>s?n===null?s.options.indexOf(p):s.options.findIndex(c=>L(c,p)):y.options.findIndex(c=>L(c.dataRef.current.value,p))),K=Ce(p=>$(a.mode,{[1]:()=>P.some(c=>L(c,p)),[0]:()=>L(P,p)}),[P]),S=v(p=>y.activeOptionIndex===J(p)),a=k(()=>({...y,immediate:F,optionsPropsRef:B,inputRef:G,buttonRef:U,optionsRef:R,value:P,defaultValue:l,disabled:b,mode:x?1:0,virtual:y.virtual,get activeOptionIndex(){if(M.current&&y.activeOptionIndex===null&&(s?s.options.length>0:y.options.length>0)){if(s){let c=s.options.findIndex(w=>{var ne,Te;return!((Te=(ne=s==null?void 0:s.disabled)==null?void 0:ne.call(s,w))!=null&&Te)});if(c!==-1)return c}let p=y.options.findIndex(c=>!c.dataRef.current.disabled);if(p!==-1)return p}return y.activeOptionIndex},calculateIndex:J,compare:L,isSelected:K,isActive:S,__demoMode:f}),[P,l,b,x,f,y,s]);j(()=>{s&&g({type:6,options:s.options})},[s,s==null?void 0:s.options]),j(()=>{y.dataRef.current=a},[a]),Ge([a.buttonRef,a.inputRef,a.optionsRef],()=>z.closeCombobox(),a.comboboxState===0);let N=k(()=>{var p,c,w;return{open:a.comboboxState===0,disabled:b,activeIndex:a.activeOptionIndex,activeOption:a.activeOptionIndex===null?null:a.virtual?a.virtual.options[(p=a.activeOptionIndex)!=null?p:0]:(w=(c=a.options[a.activeOptionIndex])==null?void 0:c.dataRef.current.value)!=null?w:null,value:P}},[a,b,P]),Z=v(()=>{if(a.activeOptionIndex!==null){if(a.virtual)W(a.virtual.options[a.activeOptionIndex]);else{let{dataRef:p}=a.options[a.activeOptionIndex];W(p.current.value)}z.goToOption(I.Specific,a.activeOptionIndex)}}),le=v(()=>{g({type:0}),M.current=!0}),ue=v(()=>{g({type:1}),M.current=!1}),pe=v((p,c,w)=>(M.current=!1,p===I.Specific?g({type:2,focus:I.Specific,idx:c,trigger:w}):g({type:2,focus:p,trigger:w}))),ee=v((p,c)=>(g({type:3,payload:{id:p,dataRef:c}}),()=>{a.isActive(c.current.value)&&(M.current=!0),g({type:4,id:p})})),W=v(p=>$(a.mode,{[0](){return O==null?void 0:O(p)},[1](){let c=a.value.slice(),w=c.findIndex(ne=>L(ne,p));return w===-1?c.push(p):c.splice(w,1),O==null?void 0:O(c)}})),oe=v(p=>{g({type:5,trigger:p})}),z=k(()=>({onChange:W,registerOption:ee,goToOption:pe,closeCombobox:ue,openCombobox:le,setActivationTrigger:oe,selectActiveOption:Z}),[]),[te,u]=lo(),_=r===null?{}:{ref:r},A=Ce(()=>O==null?void 0:O(l),[O]);return V.createElement(u,{value:te,props:{htmlFor:(C=a.inputRef.current)==null?void 0:C.id},slot:{open:a.comboboxState===0,disabled:b}},V.createElement(Xe,null,V.createElement(me.Provider,{value:z},V.createElement(xe.Provider,{value:a},V.createElement(eo,{value:$(a.comboboxState,{[0]:ae.Open,[1]:ae.Closed})},i!=null&&V.createElement(Qe,{disabled:b,data:P!=null?{[i]:P}:{},form:m,onReset:A}),Y({ourProps:_,theirProps:T,slot:N,defaultTag:xo,name:"Combobox"}))))))}let go="input";function vo(o,r){var ee,W,oe,z,te;let e=X("Combobox.Input"),t=Q("Combobox.Input"),l=re(),d=Ze(),{id:m=d||`headlessui-combobox-input-${l}`,onChange:i,displayValue:n,disabled:b=e.disabled||!1,autoFocus:f=!1,type:x="text",...F}=o,s=ie(e.inputRef,r,Ye()),E=je(e.inputRef),T=H(!1),P=ye(),O=v(()=>{t.onChange(null),e.optionsRef.current&&(e.optionsRef.current.scrollTop=0),t.goToOption(I.Nothing)}),y=k(()=>{var u;return typeof n=="function"&&e.value!==void 0?(u=n(e.value))!=null?u:"":typeof e.value=="string"?e.value:""},[e.value,n]);Pe(([u,_],[A,h])=>{if(T.current)return;let C=e.inputRef.current;C&&((h===0&&_===1||u!==A)&&(C.value=u),requestAnimationFrame(()=>{if(T.current||!C||(E==null?void 0:E.activeElement)!==C)return;let{selectionStart:p,selectionEnd:c}=C;Math.abs((c!=null?c:0)-(p!=null?p:0))===0&&p===0&&C.setSelectionRange(C.value.length,C.value.length)}))},[y,e.comboboxState,E]),Pe(([u],[_])=>{if(u===0&&_===1){if(T.current)return;let A=e.inputRef.current;if(!A)return;let h=A.value,{selectionStart:C,selectionEnd:p,selectionDirection:c}=A;A.value="",A.value=h,c!==null?A.setSelectionRange(C,p,c):A.setSelectionRange(C,p)}},[e.comboboxState]);let g=H(!1),M=v(()=>{g.current=!0}),B=v(()=>{P.nextFrame(()=>{g.current=!1})}),G=Ne(),U=v(u=>{switch(T.current=!0,G(()=>{T.current=!1}),u.key){case D.Enter:if(T.current=!1,e.comboboxState!==0||g.current)return;if(u.preventDefault(),u.stopPropagation(),e.activeOptionIndex===null){t.closeCombobox();return}t.selectActiveOption(),e.mode===0&&t.closeCombobox();break;case D.ArrowDown:return T.current=!1,u.preventDefault(),u.stopPropagation(),$(e.comboboxState,{[0]:()=>t.goToOption(I.Next),[1]:()=>t.openCombobox()});case D.ArrowUp:return T.current=!1,u.preventDefault(),u.stopPropagation(),$(e.comboboxState,{[0]:()=>t.goToOption(I.Previous),[1]:()=>{t.openCombobox(),P.nextFrame(()=>{e.value||t.goToOption(I.Last)})}});case D.Home:if(u.shiftKey)break;return T.current=!1,u.preventDefault(),u.stopPropagation(),t.goToOption(I.First);case D.PageUp:return T.current=!1,u.preventDefault(),u.stopPropagation(),t.goToOption(I.First);case D.End:if(u.shiftKey)break;return T.current=!1,u.preventDefault(),u.stopPropagation(),t.goToOption(I.Last);case D.PageDown:return T.current=!1,u.preventDefault(),u.stopPropagation(),t.goToOption(I.Last);case D.Escape:return T.current=!1,e.comboboxState!==0?void 0:(u.preventDefault(),e.optionsRef.current&&!e.optionsPropsRef.current.static&&u.stopPropagation(),e.mode===0&&e.value===null&&O(),t.closeCombobox());case D.Tab:if(T.current=!1,e.comboboxState!==0)return;e.mode===0&&e.activationTrigger!==1&&t.selectActiveOption(),t.closeCombobox();break}}),R=v(u=>{i==null||i(u),e.mode===0&&u.target.value===""&&O(),t.openCombobox()}),L=v(u=>{var A,h,C;let _=(A=u.relatedTarget)!=null?A:Ie.find(p=>p!==u.currentTarget);if(T.current=!1,!((h=e.optionsRef.current)!=null&&h.contains(_))&&!((C=e.buttonRef.current)!=null&&C.contains(_))&&e.comboboxState===0)return u.preventDefault(),e.mode===0&&e.value===null&&O(),t.closeCombobox()}),J=v(u=>{var A,h,C;let _=(A=u.relatedTarget)!=null?A:Ie.find(p=>p!==u.currentTarget);(h=e.buttonRef.current)!=null&&h.contains(_)||(C=e.optionsRef.current)!=null&&C.contains(_)||e.disabled||e.immediate&&e.comboboxState!==0&&(t.openCombobox(),P.nextFrame(()=>{t.setActivationTrigger(1)}))}),K=ce(),S=io(),{isFocused:a,focusProps:N}=ge({autoFocus:f}),{isHovered:Z,hoverProps:le}=ve({isDisabled:b}),ue=k(()=>({open:e.comboboxState===0,disabled:b,hover:Z,focus:a,autofocus:f}),[e,Z,a,f,b]),pe=be({ref:s,id:m,role:"combobox",type:x,"aria-controls":(ee=e.optionsRef.current)==null?void 0:ee.id,"aria-expanded":e.comboboxState===0,"aria-activedescendant":e.activeOptionIndex===null?void 0:e.virtual?(W=e.options.find(u=>{var _;return!((_=e.virtual)!=null&&_.disabled(u.dataRef.current.value))&&e.compare(u.dataRef.current.value,e.virtual.options[e.activeOptionIndex])}))==null?void 0:W.id:(oe=e.options[e.activeOptionIndex])==null?void 0:oe.id,"aria-labelledby":K,"aria-describedby":S,"aria-autocomplete":"list",defaultValue:(te=(z=o.defaultValue)!=null?z:e.defaultValue!==void 0?n==null?void 0:n(e.defaultValue):null)!=null?te:e.defaultValue,disabled:b||void 0,autoFocus:f,onCompositionStart:M,onCompositionEnd:B,onKeyDown:U,onChange:R,onFocus:J,onBlur:L},N,le);return Y({ourProps:pe,theirProps:F,slot:ue,defaultTag:go,name:"Combobox.Input"})}let Oo="button";function Co(o,r){var U;let e=X("Combobox.Button"),t=Q("Combobox.Button"),l=ie(e.buttonRef,r),d=re(),{id:m=`headlessui-combobox-button-${d}`,disabled:i=e.disabled||!1,autoFocus:n=!1,...b}=o,f=ye(),x=Se(e.inputRef),F=v(R=>{switch(R.key){case D.Space:case D.Enter:return R.preventDefault(),R.stopPropagation(),e.comboboxState===1&&t.openCombobox(),f.nextFrame(()=>x());case D.ArrowDown:return R.preventDefault(),R.stopPropagation(),e.comboboxState===1&&(t.openCombobox(),f.nextFrame(()=>{e.value||t.goToOption(I.First)})),f.nextFrame(()=>x());case D.ArrowUp:return R.preventDefault(),R.stopPropagation(),e.comboboxState===1&&(t.openCombobox(),f.nextFrame(()=>{e.value||t.goToOption(I.Last)})),f.nextFrame(()=>x());case D.Escape:return e.comboboxState!==0?void 0:(R.preventDefault(),e.optionsRef.current&&!e.optionsPropsRef.current.static&&R.stopPropagation(),t.closeCombobox(),f.nextFrame(()=>x()));default:return}}),s=v(R=>{R.preventDefault(),!to(R.currentTarget)&&(R.button===_e.Left&&(e.comboboxState===0?t.closeCombobox():t.openCombobox()),x())}),E=ce([m]),{isFocusVisible:T,focusProps:P}=ge({autoFocus:n}),{isHovered:O,hoverProps:y}=ve({isDisabled:i}),{pressed:g,pressProps:M}=we({disabled:i}),B=k(()=>({open:e.comboboxState===0,active:g||e.comboboxState===0,disabled:i,value:e.value,hover:O,focus:T}),[e,O,T,g,i]),G=be({ref:l,id:m,type:Ke(o,e.buttonRef),tabIndex:-1,"aria-haspopup":"listbox","aria-controls":(U=e.optionsRef.current)==null?void 0:U.id,"aria-expanded":e.comboboxState===0,"aria-labelledby":E,disabled:i||void 0,autoFocus:n,onMouseDown:s,onKeyDown:F},P,y,M);return Y({ourProps:G,theirProps:b,slot:B,defaultTag:Oo,name:"Combobox.Button"})}let yo="div",Ro=Fe.RenderStrategy|Fe.Static;function So(o,r){var y;let e=re(),{id:t=`headlessui-combobox-options-${e}`,hold:l=!1,anchor:d,...m}=o,i=X("Combobox.Options"),n=Q("Combobox.Options"),[b,f]=Je(d),x=qe(),F=ie(i.optionsRef,r,d?b:null),s=oo(),E=(()=>s!==null?(s&ae.Open)===ae.Open:i.comboboxState===0)();He(i.inputRef,n.closeCombobox,E),j(()=>{var g;i.optionsPropsRef.current.static=(g=o.static)!=null?g:!1},[i.optionsPropsRef,o.static]),j(()=>{i.optionsPropsRef.current.hold=l},[i.optionsPropsRef,l]),ze({container:i.optionsRef.current,enabled:i.comboboxState===0,accept(g){return g.getAttribute("role")==="option"?NodeFilter.FILTER_REJECT:g.hasAttribute("role")?NodeFilter.FILTER_SKIP:NodeFilter.FILTER_ACCEPT},walk(g){g.setAttribute("role","none")}});let T=ce([(y=i.buttonRef.current)==null?void 0:y.id]),P=k(()=>({open:i.comboboxState===0,option:void 0}),[i]),O=be(d?x():{},{"aria-labelledby":T,role:"listbox","aria-multiselectable":i.mode===1?!0:void 0,id:t,ref:F,style:{...f,"--input-width":Re(i.inputRef,!0).width,"--button-width":Re(i.buttonRef,!0).width}});return i.virtual&&i.comboboxState===0&&Object.assign(m,{children:V.createElement(fo,null,m.children)}),Y({ourProps:O,theirProps:m,slot:P,defaultTag:yo,features:Ro,visible:E,name:"Combobox.Options"})}let Po="div";function Io(o,r){var K;let e=re(),{id:t=`headlessui-combobox-option-${e}`,disabled:l=!1,value:d,order:m=null,...i}=o,n=X("Combobox.Option"),b=Q("Combobox.Option"),f=Se(n.inputRef),x=n.virtual?n.activeOptionIndex===n.calculateIndex(d):n.activeOptionIndex===null?!1:((K=n.options[n.activeOptionIndex])==null?void 0:K.id)===t,F=n.isSelected(d),s=H(null),E=ke({disabled:l,value:d,domRef:s,order:m}),T=de(De),P=ie(r,s,T?T.measureElement:null),O=v(()=>b.onChange(d));j(()=>b.registerOption(t,E),[E,t]);let y=H(!(n.virtual||n.__demoMode));j(()=>{if(!n.virtual||!n.__demoMode)return;let S=Ee();return S.requestAnimationFrame(()=>{y.current=!0}),S.dispose},[n.virtual,n.__demoMode]),j(()=>{if(!y.current||n.comboboxState!==0||!x||n.activationTrigger===0)return;let S=Ee();return S.requestAnimationFrame(()=>{var a,N;(N=(a=s.current)==null?void 0:a.scrollIntoView)==null||N.call(a,{block:"nearest"})}),S.dispose},[s,x,n.comboboxState,n.activationTrigger,n.activeOptionIndex]);let g=v(S=>{var a;S.preventDefault(),S.button===_e.Left&&(l||(a=n.virtual)!=null&&a.disabled(d)||(O(),ro()||requestAnimationFrame(()=>f()),n.mode===0&&requestAnimationFrame(()=>b.closeCombobox())))}),M=v(()=>{var a;if(l||(a=n.virtual)!=null&&a.disabled(d))return b.goToOption(I.Nothing);let S=n.calculateIndex(d);b.goToOption(I.Specific,S)}),B=We(),G=v(S=>B.update(S)),U=v(S=>{var N;if(!B.wasMoved(S)||l||(N=n.virtual)!=null&&N.disabled(d)||x)return;let a=n.calculateIndex(d);b.goToOption(I.Specific,a,0)}),R=v(S=>{var a;B.wasMoved(S)&&(l||(a=n.virtual)!=null&&a.disabled(d)||x&&(n.optionsPropsRef.current.hold||b.goToOption(I.Nothing)))}),L=k(()=>({active:x,focus:x,selected:F,disabled:l}),[x,F,l]);return Y({ourProps:{id:t,ref:P,role:"option",tabIndex:l===!0?void 0:-1,"aria-disabled":l===!0?!0:void 0,"aria-selected":F,disabled:void 0,onMouseDown:g,onFocus:M,onPointerEnter:G,onMouseEnter:G,onPointerMove:U,onMouseMove:U,onPointerLeave:R,onMouseLeave:R},theirProps:i,slot:L,defaultTag:Po,name:"Combobox.Option"})}let Ao=q(To),Eo=q(Co),Fo=q(vo),_o=ao,Do=q(So),ho=q(Io),Ot=Object.assign(Ao,{Input:Fo,Button:Eo,Label:_o,Options:Do,Option:ho});export{Ot as Combobox,Eo as ComboboxButton,Fo as ComboboxInput,_o as ComboboxLabel,ho as ComboboxOption,Do as ComboboxOptions}; | ||
"use client";import{useFocusRing as Ce}from"@react-aria/focus";import{useHover as ye}from"@react-aria/interactions";import{useVirtualizer as Be}from"@tanstack/react-virtual";import B,{Fragment as Re,createContext as ce,createRef as ke,useCallback as Se,useContext as fe,useMemo as K,useReducer as Ne,useRef as W,useState as Pe}from"react";import{useActivePress as Ue}from'../../hooks/use-active-press.js';import{useByComparator as He}from'../../hooks/use-by-comparator.js';import{useControllable as Ge}from'../../hooks/use-controllable.js';import{useDefaultValue as je}from'../../hooks/use-default-value.js';import{useDisposables as Ae}from'../../hooks/use-disposables.js';import{useElementSize as Ie}from'../../hooks/use-element-size.js';import{useEvent as x}from'../../hooks/use-event.js';import{useFrameDebounce as Ke}from'../../hooks/use-frame-debounce.js';import{useId as le}from'../../hooks/use-id.js';import{useInertOthers as We}from'../../hooks/use-inert-others.js';import{useIsoMorphicEffect as $}from'../../hooks/use-iso-morphic-effect.js';import{useLatestValue as ze}from'../../hooks/use-latest-value.js';import{useOnDisappear as $e}from'../../hooks/use-on-disappear.js';import{useOutsideClick as Xe}from'../../hooks/use-outside-click.js';import{useOwnerDocument as Ee}from'../../hooks/use-owner.js';import{useRefocusableInput as _e}from'../../hooks/use-refocusable-input.js';import{useResolveButtonType as Je}from'../../hooks/use-resolve-button-type.js';import{useScrollLock as qe}from'../../hooks/use-scroll-lock.js';import{useSyncRefs as ue}from'../../hooks/use-sync-refs.js';import{useTrackedPointer as Ye}from'../../hooks/use-tracked-pointer.js';import{useTreeWalker as Qe}from'../../hooks/use-tree-walker.js';import{useWatch as Fe}from'../../hooks/use-watch.js';import{useDisabled as Ze}from'../../internal/disabled.js';import{FloatingProvider as eo,useFloatingPanel as oo,useFloatingPanelProps as to,useFloatingReference as no,useResolvedAnchor as ro}from'../../internal/floating.js';import{FormFields as io}from'../../internal/form-fields.js';import{useProvidedId as ao}from'../../internal/id.js';import{OpenClosedProvider as lo,State as pe,useOpenClosed as uo}from'../../internal/open-closed.js';import{history as he}from'../../utils/active-element-history.js';import{isDisabledReactIssue7711 as po}from'../../utils/bugs.js';import{Focus as R,calculateActiveIndex as De}from'../../utils/calculate-active-index.js';import{disposables as Me}from'../../utils/disposables.js';import{sortByDomNode as so}from'../../utils/focus-management.js';import{match as Y}from'../../utils/match.js';import{isMobile as bo}from'../../utils/platform.js';import{RenderFeatures as Ve,forwardRefWithAs as Z,mergeProps as me,render as ee}from'../../utils/render.js';import{useDescribedBy as co}from'../description/description.js';import{Keys as M}from'../keyboard.js';import{Label as fo,useLabelledBy as xe,useLabels as mo}from'../label/label.js';import{MouseButton as Le}from'../mouse.js';import{Portal as xo}from'../portal/portal.js';var To=(e=>(e[e.Open=0]="Open",e[e.Closed=1]="Closed",e))(To||{}),go=(e=>(e[e.Single=0]="Single",e[e.Multi=1]="Multi",e))(go||{}),vo=(t=>(t[t.Pointer=0]="Pointer",t[t.Focus=1]="Focus",t[t.Other=2]="Other",t))(vo||{}),Oo=(i=>(i[i.OpenCombobox=0]="OpenCombobox",i[i.CloseCombobox=1]="CloseCombobox",i[i.GoToOption=2]="GoToOption",i[i.RegisterOption=3]="RegisterOption",i[i.UnregisterOption=4]="UnregisterOption",i[i.SetActivationTrigger=5]="SetActivationTrigger",i[i.UpdateVirtualConfiguration=6]="UpdateVirtualConfiguration",i))(Oo||{});function Te(o,r=e=>e){let e=o.activeOptionIndex!==null?o.options[o.activeOptionIndex]:null,t=r(o.options.slice()),c=t.length>0&&t[0].dataRef.current.order!==null?t.sort((d,i)=>d.dataRef.current.order-i.dataRef.current.order):so(t,d=>d.dataRef.current.domRef.current),s=e?c.indexOf(e):null;return s===-1&&(s=null),{options:c,activeOptionIndex:s}}let Co={[1](o){var r;return(r=o.dataRef.current)!=null&&r.disabled||o.comboboxState===1?o:{...o,activeOptionIndex:null,comboboxState:1,activationTrigger:2,__demoMode:!1}},[0](o){var r,e;if((r=o.dataRef.current)!=null&&r.disabled||o.comboboxState===0)return o;if((e=o.dataRef.current)!=null&&e.value){let t=o.dataRef.current.calculateIndex(o.dataRef.current.value);if(t!==-1)return{...o,activeOptionIndex:t,comboboxState:0,__demoMode:!1}}return{...o,comboboxState:0,__demoMode:!1}},[2](o,r){var s,d,i,m,n;if((s=o.dataRef.current)!=null&&s.disabled||(d=o.dataRef.current)!=null&&d.optionsRef.current&&!((i=o.dataRef.current)!=null&&i.optionsPropsRef.current.static)&&o.comboboxState===1)return o;if(o.virtual){let{options:p,disabled:f}=o.virtual,_=r.focus===R.Specific?r.idx:De(r,{resolveItems:()=>p,resolveActiveIndex:()=>{var u,T;return(T=(u=o.activeOptionIndex)!=null?u:p.findIndex(V=>!f(V)))!=null?T:null},resolveDisabled:f,resolveId(){throw new Error("Function not implemented.")}}),F=(m=r.trigger)!=null?m:2;return o.activeOptionIndex===_&&o.activationTrigger===F?o:{...o,activeOptionIndex:_,activationTrigger:F,__demoMode:!1}}let e=Te(o);if(e.activeOptionIndex===null){let p=e.options.findIndex(f=>!f.dataRef.current.disabled);p!==-1&&(e.activeOptionIndex=p)}let t=r.focus===R.Specific?r.idx:De(r,{resolveItems:()=>e.options,resolveActiveIndex:()=>e.activeOptionIndex,resolveId:p=>p.id,resolveDisabled:p=>p.dataRef.current.disabled}),c=(n=r.trigger)!=null?n:2;return o.activeOptionIndex===t&&o.activationTrigger===c?o:{...o,...e,activeOptionIndex:t,activationTrigger:c,__demoMode:!1}},[3]:(o,r)=>{var s,d,i;if((s=o.dataRef.current)!=null&&s.virtual)return{...o,options:[...o.options,r.payload]};let e=r.payload,t=Te(o,m=>(m.push(e),m));o.activeOptionIndex===null&&(d=o.dataRef.current)!=null&&d.isSelected(r.payload.dataRef.current.value)&&(t.activeOptionIndex=t.options.indexOf(e));let c={...o,...t,activationTrigger:2};return(i=o.dataRef.current)!=null&&i.__demoMode&&o.dataRef.current.value===void 0&&(c.activeOptionIndex=0),c},[4]:(o,r)=>{var t;if((t=o.dataRef.current)!=null&&t.virtual)return{...o,options:o.options.filter(c=>c.id!==r.id)};let e=Te(o,c=>{let s=c.findIndex(d=>d.id===r.id);return s!==-1&&c.splice(s,1),c});return{...o,...e,activationTrigger:2}},[5]:(o,r)=>o.activationTrigger===r.trigger?o:{...o,activationTrigger:r.trigger},[6]:(o,r)=>{var t,c;if(o.virtual===null)return{...o,virtual:{options:r.options,disabled:(t=r.disabled)!=null?t:()=>!1}};if(o.virtual.options===r.options&&o.virtual.disabled===r.disabled)return o;let e=o.activeOptionIndex;if(o.activeOptionIndex!==null){let s=r.options.indexOf(o.virtual.options[o.activeOptionIndex]);s!==-1?e=s:e=null}return{...o,activeOptionIndex:e,virtual:{options:r.options,disabled:(c=r.disabled)!=null?c:()=>!1}}}},ge=ce(null);ge.displayName="ComboboxActionsContext";function oe(o){let r=fe(ge);if(r===null){let e=new Error(`<${o} /> is missing a parent <Combobox /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(e,oe),e}return r}let we=ce(null);function yo(o){let r=Q("VirtualProvider"),{options:e}=r.virtual,[t,c]=K(()=>{let n=r.optionsRef.current;if(!n)return[0,0];let p=window.getComputedStyle(n);return[parseFloat(p.paddingBlockStart||p.paddingTop),parseFloat(p.paddingBlockEnd||p.paddingBottom)]},[r.optionsRef.current]),s=Be({scrollPaddingStart:t,scrollPaddingEnd:c,count:e.length,estimateSize(){return 40},getScrollElement(){var n;return(n=r.optionsRef.current)!=null?n:null},overscan:12}),[d,i]=Pe(0);$(()=>{i(n=>n+1)},[e]);let m=s.getVirtualItems();return m.length===0?null:B.createElement(we.Provider,{value:s},B.createElement("div",{style:{position:"relative",width:"100%",height:`${s.getTotalSize()}px`},ref:n=>{if(n){if(typeof process!="undefined"&&process.env.JEST_WORKER_ID!==void 0||r.activationTrigger===0)return;r.activeOptionIndex!==null&&e.length>r.activeOptionIndex&&s.scrollToIndex(r.activeOptionIndex)}}},m.map(n=>{var p;return B.createElement(Re,{key:n.key},B.cloneElement((p=o.children)==null?void 0:p.call(o,{option:e[n.index],open:r.comboboxState===0}),{key:`${d}-${n.key}`,"data-index":n.index,"aria-setsize":e.length,"aria-posinset":n.index+1,style:{position:"absolute",top:0,left:0,transform:`translateY(${n.start}px)`,overflowAnchor:"none"}}))})))}let se=ce(null);se.displayName="ComboboxDataContext";function Q(o){let r=fe(se);if(r===null){let e=new Error(`<${o} /> is missing a parent <Combobox /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(e,Q),e}return r}function Ro(o,r){return Y(r.type,Co,o,r)}let So=Re;function Po(o,r){var j,ve;let e=Ze(),{value:t,defaultValue:c,onChange:s,form:d,name:i,by:m,disabled:n=e||!1,onClose:p,__demoMode:f=!1,multiple:_=!1,immediate:F=!1,virtual:u=null,nullable:T,...V}=o,S=je(c),[O=_?[]:void 0,C]=Ge(t,s,S),[P,A]=Ne(Ro,{dataRef:ke(),comboboxState:f?0:1,options:[],virtual:u?{options:u.options,disabled:(j=u.disabled)!=null?j:()=>!1}:null,activeOptionIndex:null,activationTrigger:2,__demoMode:f}),D=W(!1),k=W({static:!1,hold:!1}),v=W(null),X=W(null),J=W(null),h=He(m),G=x(b=>u?m===null?u.options.indexOf(b):u.options.findIndex(g=>h(g,b)):P.options.findIndex(g=>h(g.dataRef.current.value,b))),U=Se(b=>Y(a.mode,{[1]:()=>O.some(g=>h(g,b)),[0]:()=>h(O,b)}),[O]),I=x(b=>P.activeOptionIndex===G(b)),a=K(()=>({...P,immediate:F,optionsPropsRef:k,inputRef:v,buttonRef:X,optionsRef:J,value:O,defaultValue:S,disabled:n,mode:_?1:0,virtual:u?P.virtual:null,get activeOptionIndex(){if(D.current&&P.activeOptionIndex===null&&(u?u.options.length>0:P.options.length>0)){if(u){let g=u.options.findIndex(H=>{var ae,Oe;return!((Oe=(ae=u.disabled)==null?void 0:ae.call(u,H))!=null&&Oe)});if(g!==-1)return g}let b=P.options.findIndex(g=>!g.dataRef.current.disabled);if(b!==-1)return b}return P.activeOptionIndex},calculateIndex:G,compare:h,isSelected:U,isActive:I}),[O,S,n,_,f,P,u]);$(()=>{var b;u&&A({type:6,options:u.options,disabled:(b=u.disabled)!=null?b:null})},[u,u==null?void 0:u.options,u==null?void 0:u.disabled]),$(()=>{P.dataRef.current=a},[a]);let z=a.comboboxState===0;Xe(z,[a.buttonRef,a.inputRef,a.optionsRef],()=>L.closeCombobox());let de=K(()=>{var b,g,H;return{open:a.comboboxState===0,disabled:n,activeIndex:a.activeOptionIndex,activeOption:a.activeOptionIndex===null?null:a.virtual?a.virtual.options[(b=a.activeOptionIndex)!=null?b:0]:(H=(g=a.options[a.activeOptionIndex])==null?void 0:g.dataRef.current.value)!=null?H:null,value:O}},[a,n,O]),be=x(()=>{if(a.activeOptionIndex!==null){if(a.virtual)q(a.virtual.options[a.activeOptionIndex]);else{let{dataRef:b}=a.options[a.activeOptionIndex];q(b.current.value)}L.goToOption(R.Specific,a.activeOptionIndex)}}),te=x(()=>{A({type:0}),D.current=!0}),ne=x(()=>{A({type:1}),D.current=!1,p==null||p()}),re=x((b,g,H)=>(D.current=!1,b===R.Specific?A({type:2,focus:R.Specific,idx:g,trigger:H}):A({type:2,focus:b,trigger:H}))),ie=x((b,g)=>(A({type:3,payload:{id:b,dataRef:g}}),()=>{a.isActive(g.current.value)&&(D.current=!0),A({type:4,id:b})})),q=x(b=>Y(a.mode,{[0](){return C==null?void 0:C(b)},[1](){let g=a.value.slice(),H=g.findIndex(ae=>h(ae,b));return H===-1?g.push(b):g.splice(H,1),C==null?void 0:C(g)}})),l=x(b=>{A({type:5,trigger:b})}),L=K(()=>({onChange:q,registerOption:ie,goToOption:re,closeCombobox:ne,openCombobox:te,setActivationTrigger:l,selectActiveOption:be}),[]),[E,N]=mo(),y=r===null?{}:{ref:r},w=Se(()=>{if(S!==void 0)return C==null?void 0:C(S)},[C,S]);return B.createElement(N,{value:E,props:{htmlFor:(ve=a.inputRef.current)==null?void 0:ve.id},slot:{open:a.comboboxState===0,disabled:n}},B.createElement(eo,null,B.createElement(ge.Provider,{value:L},B.createElement(se.Provider,{value:a},B.createElement(lo,{value:Y(a.comboboxState,{[0]:pe.Open,[1]:pe.Closed})},i!=null&&B.createElement(io,{disabled:n,data:O!=null?{[i]:O}:{},form:d,onReset:w}),ee({ourProps:y,theirProps:V,slot:de,defaultTag:So,name:"Combobox"}))))))}let Ao="input";function Io(o,r){var te,ne,re,ie,q;let e=Q("Combobox.Input"),t=oe("Combobox.Input"),c=le(),s=ao(),{id:d=s||`headlessui-combobox-input-${c}`,onChange:i,displayValue:m,disabled:n=e.disabled||!1,autoFocus:p=!1,type:f="text",..._}=o,F=ue(e.inputRef,r,no()),u=Ee(e.inputRef),T=W(!1),V=Ae(),S=x(()=>{t.onChange(null),e.optionsRef.current&&(e.optionsRef.current.scrollTop=0),t.goToOption(R.Nothing)}),O=K(()=>{var l;return typeof m=="function"&&e.value!==void 0?(l=m(e.value))!=null?l:"":typeof e.value=="string"?e.value:""},[e.value,m]);Fe(([l,L],[E,N])=>{if(T.current)return;let y=e.inputRef.current;y&&((N===0&&L===1||l!==E)&&(y.value=l),requestAnimationFrame(()=>{if(T.current||!y||(u==null?void 0:u.activeElement)!==y)return;let{selectionStart:w,selectionEnd:j}=y;Math.abs((j!=null?j:0)-(w!=null?w:0))===0&&w===0&&y.setSelectionRange(y.value.length,y.value.length)}))},[O,e.comboboxState,u]),Fe(([l],[L])=>{if(l===0&&L===1){if(T.current)return;let E=e.inputRef.current;if(!E)return;let N=E.value,{selectionStart:y,selectionEnd:w,selectionDirection:j}=E;E.value="",E.value=N,j!==null?E.setSelectionRange(y,w,j):E.setSelectionRange(y,w)}},[e.comboboxState]);let C=W(!1),P=x(()=>{C.current=!0}),A=x(()=>{V.nextFrame(()=>{C.current=!1})}),D=Ke(),k=x(l=>{switch(T.current=!0,D(()=>{T.current=!1}),l.key){case M.Enter:if(T.current=!1,e.comboboxState!==0||C.current)return;if(l.preventDefault(),l.stopPropagation(),e.activeOptionIndex===null){t.closeCombobox();return}t.selectActiveOption(),e.mode===0&&t.closeCombobox();break;case M.ArrowDown:return T.current=!1,l.preventDefault(),l.stopPropagation(),Y(e.comboboxState,{[0]:()=>t.goToOption(R.Next),[1]:()=>t.openCombobox()});case M.ArrowUp:return T.current=!1,l.preventDefault(),l.stopPropagation(),Y(e.comboboxState,{[0]:()=>t.goToOption(R.Previous),[1]:()=>{t.openCombobox(),V.nextFrame(()=>{e.value||t.goToOption(R.Last)})}});case M.Home:if(l.shiftKey)break;return T.current=!1,l.preventDefault(),l.stopPropagation(),t.goToOption(R.First);case M.PageUp:return T.current=!1,l.preventDefault(),l.stopPropagation(),t.goToOption(R.First);case M.End:if(l.shiftKey)break;return T.current=!1,l.preventDefault(),l.stopPropagation(),t.goToOption(R.Last);case M.PageDown:return T.current=!1,l.preventDefault(),l.stopPropagation(),t.goToOption(R.Last);case M.Escape:return T.current=!1,e.comboboxState!==0?void 0:(l.preventDefault(),e.optionsRef.current&&!e.optionsPropsRef.current.static&&l.stopPropagation(),e.mode===0&&e.value===null&&S(),t.closeCombobox());case M.Tab:if(T.current=!1,e.comboboxState!==0)return;e.mode===0&&e.activationTrigger!==1&&t.selectActiveOption(),t.closeCombobox();break}}),v=x(l=>{i==null||i(l),e.mode===0&&l.target.value===""&&S(),t.openCombobox()}),X=x(l=>{var E,N,y;let L=(E=l.relatedTarget)!=null?E:he.find(w=>w!==l.currentTarget);if(T.current=!1,!((N=e.optionsRef.current)!=null&&N.contains(L))&&!((y=e.buttonRef.current)!=null&&y.contains(L))&&e.comboboxState===0)return l.preventDefault(),e.mode===0&&e.value===null&&S(),t.closeCombobox()}),J=x(l=>{var E,N,y;let L=(E=l.relatedTarget)!=null?E:he.find(w=>w!==l.currentTarget);(N=e.buttonRef.current)!=null&&N.contains(L)||(y=e.optionsRef.current)!=null&&y.contains(L)||e.disabled||e.immediate&&e.comboboxState!==0&&(t.openCombobox(),V.nextFrame(()=>{t.setActivationTrigger(1)}))}),h=xe(),G=co(),{isFocused:U,focusProps:I}=Ce({autoFocus:p}),{isHovered:a,hoverProps:z}=ye({isDisabled:n}),de=K(()=>({open:e.comboboxState===0,disabled:n,hover:a,focus:U,autofocus:p}),[e,a,U,p,n]),be=me({ref:F,id:d,role:"combobox",type:f,"aria-controls":(te=e.optionsRef.current)==null?void 0:te.id,"aria-expanded":e.comboboxState===0,"aria-activedescendant":e.activeOptionIndex===null?void 0:e.virtual?(ne=e.options.find(l=>!l.dataRef.current.disabled&&e.compare(l.dataRef.current.value,e.virtual.options[e.activeOptionIndex])))==null?void 0:ne.id:(re=e.options[e.activeOptionIndex])==null?void 0:re.id,"aria-labelledby":h,"aria-describedby":G,"aria-autocomplete":"list",defaultValue:(q=(ie=o.defaultValue)!=null?ie:e.defaultValue!==void 0?m==null?void 0:m(e.defaultValue):null)!=null?q:e.defaultValue,disabled:n||void 0,autoFocus:p,onCompositionStart:P,onCompositionEnd:A,onKeyDown:k,onChange:v,onFocus:J,onBlur:X},I,z);return ee({ourProps:be,theirProps:_,slot:de,defaultTag:Ao,name:"Combobox.Input"})}let Eo="button";function _o(o,r){var k;let e=Q("Combobox.Button"),t=oe("Combobox.Button"),c=ue(e.buttonRef,r),s=le(),{id:d=`headlessui-combobox-button-${s}`,disabled:i=e.disabled||!1,autoFocus:m=!1,...n}=o,p=Ae(),f=_e(e.inputRef),_=x(v=>{switch(v.key){case M.Space:case M.Enter:return v.preventDefault(),v.stopPropagation(),e.comboboxState===1&&t.openCombobox(),p.nextFrame(()=>f());case M.ArrowDown:return v.preventDefault(),v.stopPropagation(),e.comboboxState===1&&(t.openCombobox(),p.nextFrame(()=>{e.value||t.goToOption(R.First)})),p.nextFrame(()=>f());case M.ArrowUp:return v.preventDefault(),v.stopPropagation(),e.comboboxState===1&&(t.openCombobox(),p.nextFrame(()=>{e.value||t.goToOption(R.Last)})),p.nextFrame(()=>f());case M.Escape:return e.comboboxState!==0?void 0:(v.preventDefault(),e.optionsRef.current&&!e.optionsPropsRef.current.static&&v.stopPropagation(),t.closeCombobox(),p.nextFrame(()=>f()));default:return}}),F=x(v=>{v.preventDefault(),!po(v.currentTarget)&&(v.button===Le.Left&&(e.comboboxState===0?t.closeCombobox():t.openCombobox()),f())}),u=xe([d]),{isFocusVisible:T,focusProps:V}=Ce({autoFocus:m}),{isHovered:S,hoverProps:O}=ye({isDisabled:i}),{pressed:C,pressProps:P}=Ue({disabled:i}),A=K(()=>({open:e.comboboxState===0,active:C||e.comboboxState===0,disabled:i,value:e.value,hover:S,focus:T}),[e,S,T,C,i]),D=me({ref:c,id:d,type:Je(o,e.buttonRef),tabIndex:-1,"aria-haspopup":"listbox","aria-controls":(k=e.optionsRef.current)==null?void 0:k.id,"aria-expanded":e.comboboxState===0,"aria-labelledby":u,disabled:i||void 0,autoFocus:m,onMouseDown:F,onKeyDown:_},V,O,P);return ee({ourProps:D,theirProps:n,slot:A,defaultTag:Eo,name:"Combobox.Button"})}let Fo="div",ho=Ve.RenderStrategy|Ve.Static;function Do(o,r){var U;let e=le(),{id:t=`headlessui-combobox-options-${e}`,hold:c=!1,anchor:s,portal:d=!1,modal:i=!0,...m}=o,n=Q("Combobox.Options"),p=oe("Combobox.Options"),f=ro(s);f&&(d=!0);let[_,F]=oo(f),u=to(),T=ue(n.optionsRef,r,f?_:null),V=Ee(n.optionsRef),S=uo(),O=(()=>S!==null?(S&pe.Open)===pe.Open:n.comboboxState===0)();$e(O,n.inputRef,p.closeCombobox);let C=n.__demoMode?!1:i&&n.comboboxState===0;qe(C,V);let P=n.__demoMode?!1:i&&n.comboboxState===0;We(P,{allowed:x(()=>[n.inputRef.current,n.buttonRef.current,n.optionsRef.current])}),$(()=>{var I;n.optionsPropsRef.current.static=(I=o.static)!=null?I:!1},[n.optionsPropsRef,o.static]),$(()=>{n.optionsPropsRef.current.hold=c},[n.optionsPropsRef,c]),Qe(n.comboboxState===0,{container:n.optionsRef.current,accept(I){return I.getAttribute("role")==="option"?NodeFilter.FILTER_REJECT:I.hasAttribute("role")?NodeFilter.FILTER_SKIP:NodeFilter.FILTER_ACCEPT},walk(I){I.setAttribute("role","none")}});let A=xe([(U=n.buttonRef.current)==null?void 0:U.id]),D=K(()=>({open:n.comboboxState===0,option:void 0}),[n]),k=x(()=>{p.setActivationTrigger(0)}),v=x(I=>{I.preventDefault(),p.setActivationTrigger(0)}),X=me(f?u():{},{"aria-labelledby":A,role:"listbox","aria-multiselectable":n.mode===1?!0:void 0,id:t,ref:T,style:{...m.style,...F,"--input-width":Ie(n.inputRef,!0).width,"--button-width":Ie(n.buttonRef,!0).width},onWheel:n.activationTrigger===0?void 0:k,onMouseDown:v});n.virtual&&O&&Object.assign(m,{children:B.createElement(yo,null,m.children)});let[J,h]=Pe(n.value);n.value!==J&&n.comboboxState===0&&n.mode!==1&&h(n.value);let G=x(I=>n.compare(J,I));return B.createElement(xo,{enabled:d?o.static||O:!1},B.createElement(se.Provider,{value:n.mode===1?n:{...n,isSelected:G}},ee({ourProps:X,theirProps:m,slot:D,defaultTag:Fo,features:ho,visible:O,name:"Combobox.Options"})))}let Mo="div";function Vo(o,r){var h,G,U,I;let e=Q("Combobox.Option"),t=oe("Combobox.Option"),c=le(),{id:s=`headlessui-combobox-option-${c}`,value:d,disabled:i=(U=(G=(h=e.virtual)==null?void 0:h.disabled)==null?void 0:G.call(h,d))!=null?U:!1,order:m=null,...n}=o,p=_e(e.inputRef),f=e.virtual?e.activeOptionIndex===e.calculateIndex(d):e.activeOptionIndex===null?!1:((I=e.options[e.activeOptionIndex])==null?void 0:I.id)===s,_=e.isSelected(d),F=W(null),u=ze({disabled:i,value:d,domRef:F,order:m}),T=fe(we),V=ue(r,F,T?T.measureElement:null),S=x(()=>t.onChange(d));$(()=>t.registerOption(s,u),[u,s]);let O=W(!(e.virtual||e.__demoMode));$(()=>{if(!e.virtual&&!e.__demoMode)return Me().requestAnimationFrame(()=>{O.current=!0})},[e.virtual,e.__demoMode]),$(()=>{if(O.current&&e.comboboxState===0&&f&&e.activationTrigger!==0)return Me().requestAnimationFrame(()=>{var a,z;(z=(a=F.current)==null?void 0:a.scrollIntoView)==null||z.call(a,{block:"nearest"})})},[F,f,e.comboboxState,e.activationTrigger,e.activeOptionIndex]);let C=x(a=>{a.preventDefault(),a.button===Le.Left&&(i||(S(),bo()||requestAnimationFrame(()=>p()),e.mode===0&&t.closeCombobox()))}),P=x(()=>{if(i)return t.goToOption(R.Nothing);let a=e.calculateIndex(d);t.goToOption(R.Specific,a)}),A=Ye(),D=x(a=>A.update(a)),k=x(a=>{if(!A.wasMoved(a)||i||f)return;let z=e.calculateIndex(d);t.goToOption(R.Specific,z,0)}),v=x(a=>{A.wasMoved(a)&&(i||f&&(e.optionsPropsRef.current.hold||t.goToOption(R.Nothing)))}),X=K(()=>({active:f,focus:f,selected:_,disabled:i}),[f,_,i]);return ee({ourProps:{id:s,ref:V,role:"option",tabIndex:i===!0?void 0:-1,"aria-disabled":i===!0?!0:void 0,"aria-selected":_,disabled:void 0,onMouseDown:C,onFocus:P,onPointerEnter:D,onMouseEnter:D,onPointerMove:k,onMouseMove:k,onPointerLeave:v,onMouseLeave:v},theirProps:n,slot:X,defaultTag:Mo,name:"Combobox.Option"})}let Lo=Z(Po),wo=Z(_o),Bo=Z(Io),ko=fo,No=Z(Do),Uo=Z(Vo),Dt=Object.assign(Lo,{Input:Bo,Button:wo,Label:ko,Options:No,Option:Uo});export{Dt as Combobox,wo as ComboboxButton,Bo as ComboboxInput,ko as ComboboxLabel,Uo as ComboboxOption,No as ComboboxOptions}; |
@@ -20,3 +20,3 @@ import React, { type ElementType, type ReactNode, type Ref } from 'react'; | ||
export type DescriptionProps<TTag extends ElementType = typeof DEFAULT_DESCRIPTION_TAG> = Props<TTag>; | ||
declare function DescriptionFn<TTag extends ElementType = typeof DEFAULT_DESCRIPTION_TAG>(props: DescriptionProps<TTag>, ref: Ref<HTMLParagraphElement>): React.ReactElement<any, string | React.JSXElementConstructor<any>> | null; | ||
declare function DescriptionFn<TTag extends ElementType = typeof DEFAULT_DESCRIPTION_TAG>(props: DescriptionProps<TTag>, ref: Ref<HTMLElement>): React.ReactElement<any, string | React.JSXElementConstructor<any>> | null; | ||
export interface _internal_ComponentDescription extends HasDisplayName { | ||
@@ -23,0 +23,0 @@ <TTag extends ElementType = typeof DEFAULT_DESCRIPTION_TAG>(props: DescriptionProps<TTag> & RefProp<typeof DescriptionFn>): JSX.Element; |
@@ -1,1 +0,1 @@ | ||
"use client";import m,{createContext as T,useContext as u,useMemo as c,useState as P}from"react";import{useEvent as g}from'../../hooks/use-event.js';import{useId as x}from'../../hooks/use-id.js';import{useIsoMorphicEffect as y}from'../../hooks/use-iso-morphic-effect.js';import{useSyncRefs as E}from'../../hooks/use-sync-refs.js';import{useDisabled as v}from'../../internal/disabled.js';import{forwardRefWithAs as R,render as I}from'../../utils/render.js';let a=T(null);a.displayName="DescriptionContext";function f(){let r=u(a);if(r===null){let e=new Error("You used a <Description /> component, but it is not inside a relevant parent.");throw Error.captureStackTrace&&Error.captureStackTrace(e,f),e}return r}function G(){var r,e;return(e=(r=u(a))==null?void 0:r.value)!=null?e:void 0}function U(){let[r,e]=P([]);return[r.length>0?r.join(" "):void 0,c(()=>function(t){let i=g(n=>(e(s=>[...s,n]),()=>e(s=>{let o=s.slice(),p=o.indexOf(n);return p!==-1&&o.splice(p,1),o}))),l=c(()=>({register:i,slot:t.slot,name:t.name,props:t.props,value:t.value}),[i,t.slot,t.name,t.props,t.value]);return m.createElement(a.Provider,{value:l},t.children)},[e])]}let S="p";function h(r,e){let d=x(),t=v(),{id:i=`headlessui-description-${d}`,...l}=r,n=f(),s=E(e);y(()=>n.register(i),[i,n.register]);let o=t||!1,p=c(()=>({...n.slot,disabled:o}),[n.slot,o]),D={ref:s,...n.props,id:i};return I({ourProps:D,theirProps:l,slot:p,defaultTag:S,name:n.name||"Description"})}let C=R(h),w=Object.assign(C,{});export{w as Description,G as useDescribedBy,U as useDescriptions}; | ||
"use client";import m,{createContext as T,useContext as u,useMemo as c,useState as P}from"react";import{useEvent as g}from'../../hooks/use-event.js';import{useId as x}from'../../hooks/use-id.js';import{useIsoMorphicEffect as y}from'../../hooks/use-iso-morphic-effect.js';import{useSyncRefs as E}from'../../hooks/use-sync-refs.js';import{useDisabled as v}from'../../internal/disabled.js';import{forwardRefWithAs as R,render as I}from'../../utils/render.js';let a=T(null);a.displayName="DescriptionContext";function f(){let r=u(a);if(r===null){let e=new Error("You used a <Description /> component, but it is not inside a relevant parent.");throw Error.captureStackTrace&&Error.captureStackTrace(e,f),e}return r}function G(){var r,e;return(e=(r=u(a))==null?void 0:r.value)!=null?e:void 0}function U(){let[r,e]=P([]);return[r.length>0?r.join(" "):void 0,c(()=>function(t){let i=g(n=>(e(s=>[...s,n]),()=>e(s=>{let o=s.slice(),p=o.indexOf(n);return p!==-1&&o.splice(p,1),o}))),l=c(()=>({register:i,slot:t.slot,name:t.name,props:t.props,value:t.value}),[i,t.slot,t.name,t.props,t.value]);return m.createElement(a.Provider,{value:l},t.children)},[e])]}let S="p";function C(r,e){let d=x(),t=v(),{id:i=`headlessui-description-${d}`,...l}=r,n=f(),s=E(e);y(()=>n.register(i),[i,n.register]);let o=t||!1,p=c(()=>({...n.slot,disabled:o}),[n.slot,o]),D={ref:s,...n.props,id:i};return I({ourProps:D,theirProps:l,slot:p,defaultTag:S,name:n.name||"Description"})}let _=R(C),w=Object.assign(_,{});export{w as Description,G as useDescribedBy,U as useDescriptions}; |
@@ -19,17 +19,3 @@ import React, { type ElementType, type MutableRefObject, type Ref } from 'react'; | ||
}>; | ||
declare function DialogFn<TTag extends ElementType = typeof DEFAULT_DIALOG_TAG>(props: DialogProps<TTag>, ref: Ref<HTMLDivElement>): React.JSX.Element; | ||
declare let DEFAULT_OVERLAY_TAG: "div"; | ||
type OverlayRenderPropArg = { | ||
open: boolean; | ||
}; | ||
type OverlayPropsWeControl = 'aria-hidden'; | ||
export type DialogOverlayProps<TTag extends ElementType = typeof DEFAULT_OVERLAY_TAG> = Props<TTag, OverlayRenderPropArg, OverlayPropsWeControl>; | ||
declare function OverlayFn<TTag extends ElementType = typeof DEFAULT_OVERLAY_TAG>(props: DialogOverlayProps<TTag>, ref: Ref<HTMLDivElement>): React.ReactElement<any, string | React.JSXElementConstructor<any>> | null; | ||
declare let DEFAULT_BACKDROP_TAG: "div"; | ||
type BackdropRenderPropArg = { | ||
open: boolean; | ||
}; | ||
type BackdropPropsWeControl = 'aria-hidden'; | ||
export type DialogBackdropProps<TTag extends ElementType = typeof DEFAULT_BACKDROP_TAG> = Props<TTag, BackdropRenderPropArg, BackdropPropsWeControl>; | ||
declare function BackdropFn<TTag extends ElementType = typeof DEFAULT_BACKDROP_TAG>(props: DialogBackdropProps<TTag>, ref: Ref<HTMLDivElement>): React.JSX.Element; | ||
declare function DialogFn<TTag extends ElementType = typeof DEFAULT_DIALOG_TAG>(props: DialogProps<TTag>, ref: Ref<HTMLElement>): React.JSX.Element; | ||
declare let DEFAULT_PANEL_TAG: "div"; | ||
@@ -40,3 +26,3 @@ type PanelRenderPropArg = { | ||
export type DialogPanelProps<TTag extends ElementType = typeof DEFAULT_PANEL_TAG> = Props<TTag, PanelRenderPropArg>; | ||
declare function PanelFn<TTag extends ElementType = typeof DEFAULT_PANEL_TAG>(props: DialogPanelProps<TTag>, ref: Ref<HTMLDivElement>): React.ReactElement<any, string | React.JSXElementConstructor<any>> | null; | ||
declare function PanelFn<TTag extends ElementType = typeof DEFAULT_PANEL_TAG>(props: DialogPanelProps<TTag>, ref: Ref<HTMLElement>): React.ReactElement<any, string | React.JSXElementConstructor<any>> | null; | ||
declare let DEFAULT_TITLE_TAG: "h2"; | ||
@@ -47,15 +33,9 @@ type TitleRenderPropArg = { | ||
export type DialogTitleProps<TTag extends ElementType = typeof DEFAULT_TITLE_TAG> = Props<TTag, TitleRenderPropArg>; | ||
declare function TitleFn<TTag extends ElementType = typeof DEFAULT_TITLE_TAG>(props: DialogTitleProps<TTag>, ref: Ref<HTMLHeadingElement>): React.ReactElement<any, string | React.JSXElementConstructor<any>> | null; | ||
declare function TitleFn<TTag extends ElementType = typeof DEFAULT_TITLE_TAG>(props: DialogTitleProps<TTag>, ref: Ref<HTMLElement>): React.ReactElement<any, string | React.JSXElementConstructor<any>> | null; | ||
export interface _internal_ComponentDialog extends HasDisplayName { | ||
<TTag extends ElementType = typeof DEFAULT_DIALOG_TAG>(props: DialogProps<TTag> & RefProp<typeof DialogFn>): JSX.Element; | ||
} | ||
export interface _internal_ComponentDialogBackdrop extends HasDisplayName { | ||
<TTag extends ElementType = typeof DEFAULT_BACKDROP_TAG>(props: DialogBackdropProps<TTag> & RefProp<typeof BackdropFn>): JSX.Element; | ||
} | ||
export interface _internal_ComponentDialogPanel extends HasDisplayName { | ||
<TTag extends ElementType = typeof DEFAULT_PANEL_TAG>(props: DialogPanelProps<TTag> & RefProp<typeof PanelFn>): JSX.Element; | ||
} | ||
export interface _internal_ComponentDialogOverlay extends HasDisplayName { | ||
<TTag extends ElementType = typeof DEFAULT_OVERLAY_TAG>(props: DialogOverlayProps<TTag> & RefProp<typeof OverlayFn>): JSX.Element; | ||
} | ||
export interface _internal_ComponentDialogTitle extends HasDisplayName { | ||
@@ -66,5 +46,3 @@ <TTag extends ElementType = typeof DEFAULT_TITLE_TAG>(props: DialogTitleProps<TTag> & RefProp<typeof TitleFn>): JSX.Element; | ||
} | ||
export declare let DialogBackdrop: _internal_ComponentDialogBackdrop; | ||
export declare let DialogPanel: _internal_ComponentDialogPanel; | ||
export declare let DialogOverlay: _internal_ComponentDialogOverlay; | ||
export declare let DialogTitle: _internal_ComponentDialogTitle; | ||
@@ -74,5 +52,5 @@ /** @deprecated use `<Description>` instead of `<DialogDescription>` */ | ||
export declare let Dialog: _internal_ComponentDialog & { | ||
Backdrop: _internal_ComponentDialogBackdrop; | ||
/** @deprecated use `<DialogPanel>` instead of `<Dialog.Panel>` */ | ||
Panel: _internal_ComponentDialogPanel; | ||
Overlay: _internal_ComponentDialogOverlay; | ||
/** @deprecated use `<DialogTitle>` instead of `<Dialog.Title>` */ | ||
Title: _internal_ComponentDialogTitle; | ||
@@ -79,0 +57,0 @@ /** @deprecated use `<Description>` instead of `<Dialog.Description>` */ |
@@ -1,1 +0,1 @@ | ||
"use client";import i,{createContext as Ae,createRef as _e,useCallback as V,useContext as X,useEffect as q,useMemo as P,useReducer as Re,useRef as z,useState as Ce}from"react";import{useDocumentOverflowLockedEffect as ve}from'../../hooks/document-overflow/use-document-overflow.js';import{useEvent as _}from'../../hooks/use-event.js';import{useEventListener as Oe}from'../../hooks/use-event-listener.js';import{useId as R}from'../../hooks/use-id.js';import{useInert as Q}from'../../hooks/use-inert.js';import{useIsTouchDevice as Fe}from'../../hooks/use-is-touch-device.js';import{useOnDisappear as Le}from'../../hooks/use-on-disappear.js';import{useOutsideClick as be}from'../../hooks/use-outside-click.js';import{useOwnerDocument as xe}from'../../hooks/use-owner.js';import{useRootContainers as Se}from'../../hooks/use-root-containers.js';import{useServerHandoffComplete as he}from'../../hooks/use-server-handoff-complete.js';import{useSyncRefs as C}from'../../hooks/use-sync-refs.js';import{CloseProvider as ke}from'../../internal/close-provider.js';import{HoistFormFields as Ie}from'../../internal/form-fields.js';import{State as h,useOpenClosed as Me}from'../../internal/open-closed.js';import{ForcePortalRoot as H}from'../../internal/portal-force-root.js';import{StackMessage as Z,StackProvider as Ge}from'../../internal/stack-context.js';import{isDisabledReactIssue7711 as He}from'../../utils/bugs.js';import{match as B}from'../../utils/match.js';import{RenderFeatures as ee,forwardRefWithAs as v,render as O}from'../../utils/render.js';import{Description as te,useDescriptions as Be}from'../description/description.js';import{FocusTrap as Ue,FocusTrapFeatures as E}from'../focus-trap/focus-trap.js';import{Keys as Ne}from'../keyboard.js';import{Portal as U,useNestedPortals as we}from'../portal/portal.js';var We=(o=>(o[o.Open=0]="Open",o[o.Closed=1]="Closed",o))(We||{}),Ye=(e=>(e[e.SetTitleId=0]="SetTitleId",e))(Ye||{});let $e={[0](t,e){return t.titleId===e.id?t:{...t,titleId:e.id}}},k=Ae(null);k.displayName="DialogContext";function F(t){let e=X(k);if(e===null){let o=new Error(`<${t} /> is missing a parent <Dialog /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(o,F),o}return e}function je(t,e,o=()=>[document.body]){ve(t,e,s=>{var l;return{containers:[...(l=s.containers)!=null?l:[],o]}})}function Je(t,e){return B(e.type,$e,t,e)}let Ke="div",Ve=ee.RenderStrategy|ee.Static;function Xe(t,e){let o=R(),{id:s=`headlessui-dialog-${o}`,open:l,onClose:a,initialFocus:p,role:n="dialog",autoFocus:T=!0,__demoMode:D=!1,...I}=t,[u,N]=Ce(0),w=z(!1);n=function(){return n==="dialog"||n==="alertdialog"?n:(w.current||(w.current=!0,console.warn(`Invalid role [${n}] passed to <Dialog />. Only \`dialog\` and and \`alertdialog\` are supported. Using \`dialog\` instead.`)),"dialog")}();let A=Me();l===void 0&&A!==null&&(l=(A&h.Open)===h.Open);let m=z(null),oe=C(m,e),f=xe(m),W=t.hasOwnProperty("open")||A!==null,Y=t.hasOwnProperty("onClose");if(!W&&!Y)throw new Error("You have to provide an `open` and an `onClose` prop to the `Dialog` component.");if(!W)throw new Error("You provided an `onClose` prop to the `Dialog`, but forgot an `open` prop.");if(!Y)throw new Error("You provided an `open` prop to the `Dialog`, but forgot an `onClose` prop.");if(typeof l!="boolean")throw new Error(`You provided an \`open\` prop to the \`Dialog\`, but the value is not a boolean. Received: ${l}`);if(typeof a!="function")throw new Error(`You provided an \`onClose\` prop to the \`Dialog\`, but the value is not a function. Received: ${a}`);let d=l?0:1,[L,re]=Re(Je,{titleId:null,descriptionId:null,panelRef:_e()}),y=_(()=>a(!1)),$=_(r=>re({type:0,id:r})),b=he()?D?!1:d===0:!1,x=u>1,j=X(k)!==null,[le,ae]=we(),ne={get current(){var r;return(r=L.panelRef.current)!=null?r:m.current}},{resolveContainers:M,mainTreeNodeRef:S,MainTreeNode:ie}=Se({portals:le,defaultContainers:[ne]}),se=x?"parent":"leaf",J=A!==null?(A&h.Closing)===h.Closing:!1,pe=(()=>j||J?!1:b)(),de=V(()=>{var r,c;return(c=Array.from((r=f==null?void 0:f.querySelectorAll("body > *"))!=null?r:[]).find(g=>g.id==="headlessui-portal-root"?!1:g.contains(S.current)&&g instanceof HTMLElement))!=null?c:null},[S]);Q(de,pe);let ue=(()=>x?!0:b)(),fe=V(()=>{var r,c;return(c=Array.from((r=f==null?void 0:f.querySelectorAll("[data-headlessui-portal]"))!=null?r:[]).find(g=>g.contains(S.current)&&g instanceof HTMLElement))!=null?c:null},[S]);Q(fe,ue);let ge=(()=>!(!b||x))();be(M,r=>{r.preventDefault(),y()},ge);let Te=(()=>!(x||d!==0))();Oe(f==null?void 0:f.defaultView,"keydown",r=>{Te&&(r.defaultPrevented||r.key===Ne.Escape&&(r.preventDefault(),r.stopPropagation(),y()))});let ce=(()=>!(J||d!==0||j))();je(f,ce,M),Le(m,y,d===0);let[De,me]=Be(),ye=P(()=>[{dialogState:d,close:y,setTitleId:$},L],[d,L,y,$]),K=P(()=>({open:d===0}),[d]),Pe={ref:oe,id:s,role:n,tabIndex:-1,"aria-modal":d===0?!0:void 0,"aria-labelledby":L.titleId,"aria-describedby":De},Ee=!Fe(),G=b?B(se,{parent:E.RestoreFocus,leaf:E.All&~E.FocusLock}):E.None;return T&&(G|=E.AutoFocus),Ee||(G&=~E.InitialFocus),i.createElement(Ge,{type:"Dialog",enabled:d===0,element:m,onUpdate:_((r,c)=>{c!=="Dialog"&&c!=="Modal"||B(r,{[Z.Add]:()=>N(g=>g+1),[Z.Remove]:()=>N(g=>g-1)})})},i.createElement(H,{force:!0},i.createElement(U,null,i.createElement(k.Provider,{value:ye},i.createElement(U.Group,{target:m},i.createElement(H,{force:!1},i.createElement(me,{slot:K,name:"Dialog.Description"},i.createElement(ae,null,i.createElement(Ue,{initialFocus:p,initialFocusFallback:m,containers:M,features:G},i.createElement(ke,{value:y},O({ourProps:Pe,theirProps:I,slot:K,defaultTag:Ke,features:Ve,visible:d===0,name:"Dialog"})))))))))),i.createElement(Ie,null,i.createElement(ie,null)))}let qe="div";function ze(t,e){let o=R(),{id:s=`headlessui-dialog-overlay-${o}`,...l}=t,[{dialogState:a,close:p}]=F("Dialog.Overlay"),n=C(e),T=_(u=>{if(u.target===u.currentTarget){if(He(u.currentTarget))return u.preventDefault();u.preventDefault(),u.stopPropagation(),p()}}),D=P(()=>({open:a===0}),[a]);return O({ourProps:{ref:n,id:s,"aria-hidden":!0,onClick:T},theirProps:l,slot:D,defaultTag:qe,name:"Dialog.Overlay"})}let Qe="div";function Ze(t,e){let o=R(),{id:s=`headlessui-dialog-backdrop-${o}`,...l}=t,[{dialogState:a},p]=F("Dialog.Backdrop"),n=C(e);q(()=>{if(p.panelRef.current===null)throw new Error("A <Dialog.Backdrop /> component is being used, but a <Dialog.Panel /> component is missing.")},[p.panelRef]);let T=P(()=>({open:a===0}),[a]);return i.createElement(H,{force:!0},i.createElement(U,null,O({ourProps:{ref:n,id:s,"aria-hidden":!0},theirProps:l,slot:T,defaultTag:Qe,name:"Dialog.Backdrop"})))}let et="div";function tt(t,e){let o=R(),{id:s=`headlessui-dialog-panel-${o}`,...l}=t,[{dialogState:a},p]=F("Dialog.Panel"),n=C(e,p.panelRef),T=P(()=>({open:a===0}),[a]),D=_(u=>{u.stopPropagation()});return O({ourProps:{ref:n,id:s,onClick:D},theirProps:l,slot:T,defaultTag:et,name:"Dialog.Panel"})}let ot="h2";function rt(t,e){let o=R(),{id:s=`headlessui-dialog-title-${o}`,...l}=t,[{dialogState:a,setTitleId:p}]=F("Dialog.Title"),n=C(e);q(()=>(p(s),()=>p(null)),[s,p]);let T=P(()=>({open:a===0}),[a]);return O({ourProps:{ref:n,id:s},theirProps:l,slot:T,defaultTag:ot,name:"Dialog.Title"})}let lt=v(Xe),at=v(Ze),nt=v(tt),it=v(ze),st=v(rt),Mt=te,Gt=Object.assign(lt,{Backdrop:at,Panel:nt,Overlay:it,Title:st,Description:te});export{Gt as Dialog,at as DialogBackdrop,Mt as DialogDescription,it as DialogOverlay,nt as DialogPanel,st as DialogTitle}; | ||
"use client";import n,{createContext as te,createRef as oe,useContext as le,useEffect as ne,useMemo as F,useReducer as re,useRef as U}from"react";import{useEscape as ae}from'../../hooks/use-escape.js';import{useEvent as y}from'../../hooks/use-event.js';import{useId as v}from'../../hooks/use-id.js';import{useInertOthers as ie}from'../../hooks/use-inert-others.js';import{useIsTouchDevice as se}from'../../hooks/use-is-touch-device.js';import{useOnDisappear as pe}from'../../hooks/use-on-disappear.js';import{useOutsideClick as de}from'../../hooks/use-outside-click.js';import{useOwnerDocument as ue}from'../../hooks/use-owner.js';import{useRootContainers as fe}from'../../hooks/use-root-containers.js';import{useScrollLock as Te}from'../../hooks/use-scroll-lock.js';import{useServerHandoffComplete as ge}from'../../hooks/use-server-handoff-complete.js';import{useSyncRefs as x}from'../../hooks/use-sync-refs.js';import{CloseProvider as ce}from'../../internal/close-provider.js';import{HoistFormFields as me}from'../../internal/form-fields.js';import{State as b,useOpenClosed as De}from'../../internal/open-closed.js';import{ForcePortalRoot as k}from'../../internal/portal-force-root.js';import{match as Pe}from'../../utils/match.js';import{RenderFeatures as $,forwardRefWithAs as L,render as h}from'../../utils/render.js';import{Description as j,useDescriptions as ye}from'../description/description.js';import{FocusTrap as Ee,FocusTrapFeatures as E}from'../focus-trap/focus-trap.js';import{Portal as _e,PortalGroup as Ae,useNestedPortals as Ce}from'../portal/portal.js';var Fe=(l=>(l[l.Open=0]="Open",l[l.Closed=1]="Closed",l))(Fe||{}),be=(e=>(e[e.SetTitleId=0]="SetTitleId",e))(be||{});let Re={[0](t,e){return t.titleId===e.id?t:{...t,titleId:e.id}}},O=te(null);O.displayName="DialogContext";function I(t){let e=le(O);if(e===null){let l=new Error(`<${t} /> is missing a parent <Dialog /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(l,I),l}return e}function ve(t,e){return Pe(e.type,Re,t,e)}let xe="div",Le=$.RenderStrategy|$.Static;function he(t,e){let l=v(),{id:s=`headlessui-dialog-${l}`,open:a,onClose:i,initialFocus:p,role:r="dialog",autoFocus:c=!0,__demoMode:d=!1,...S}=t,_=U(!1);r=function(){return r==="dialog"||r==="alertdialog"?r:(_.current||(_.current=!0,console.warn(`Invalid role [${r}] passed to <Dialog />. Only \`dialog\` and and \`alertdialog\` are supported. Using \`dialog\` instead.`)),"dialog")}();let m=De();a===void 0&&m!==null&&(a=(m&b.Open)===b.Open);let u=U(null),W=x(u,e),A=ue(u),M=t.hasOwnProperty("open")||m!==null,w=t.hasOwnProperty("onClose");if(!M&&!w)throw new Error("You have to provide an `open` and an `onClose` prop to the `Dialog` component.");if(!M)throw new Error("You provided an `onClose` prop to the `Dialog`, but forgot an `open` prop.");if(!w)throw new Error("You provided an `open` prop to the `Dialog`, but forgot an `onClose` prop.");if(typeof a!="boolean")throw new Error(`You provided an \`open\` prop to the \`Dialog\`, but the value is not a boolean. Received: ${a}`);if(typeof i!="function")throw new Error(`You provided an \`onClose\` prop to the \`Dialog\`, but the value is not a function. Received: ${i}`);let f=a?0:1,[C,Y]=re(ve,{titleId:null,descriptionId:null,panelRef:oe()}),T=y(()=>i(!1)),G=y(o=>Y({type:0,id:o})),g=ge()?f===0:!1,[J,X]=Ce(),B={get current(){var o;return(o=C.panelRef.current)!=null?o:u.current}},{resolveContainers:R,mainTreeNodeRef:V,MainTreeNode:q}=fe({portals:J,defaultContainers:[B]}),H=m!==null?(m&b.Closing)===b.Closing:!1;ie(d||H?!1:g,{allowed:y(()=>{var o,P;return[(P=(o=u.current)==null?void 0:o.closest("[data-headlessui-portal]"))!=null?P:null]}),disallowed:y(()=>{var o,P;return[(P=(o=V.current)==null?void 0:o.closest("body > *:not(#headlessui-portal-root)"))!=null?P:null]})}),de(g,R,o=>{o.preventDefault(),T()}),ae(g,A==null?void 0:A.defaultView,o=>{o.preventDefault(),o.stopPropagation(),document.activeElement&&"blur"in document.activeElement&&typeof document.activeElement.blur=="function"&&document.activeElement.blur(),T()}),Te(d||H?!1:g,A,R),pe(g,u,T);let[z,K]=ye(),Q=F(()=>[{dialogState:f,close:T,setTitleId:G},C],[f,C,T,G]),N=F(()=>({open:f===0}),[f]),Z={ref:W,id:s,role:r,tabIndex:-1,"aria-modal":d?void 0:f===0?!0:void 0,"aria-labelledby":C.titleId,"aria-describedby":z},ee=!se(),D=E.None;return g&&!d&&(D|=E.RestoreFocus,D|=E.TabLock,c&&(D|=E.AutoFocus),ee&&(D|=E.InitialFocus)),n.createElement(n.Fragment,null,n.createElement(k,{force:!0},n.createElement(_e,null,n.createElement(O.Provider,{value:Q},n.createElement(Ae,{target:u},n.createElement(k,{force:!1},n.createElement(K,{slot:N},n.createElement(X,null,n.createElement(Ee,{initialFocus:p,initialFocusFallback:u,containers:R,features:D},n.createElement(ce,{value:T},h({ourProps:Z,theirProps:S,slot:N,defaultTag:xe,features:Le,visible:f===0,name:"Dialog"})))))))))),n.createElement(me,null,n.createElement(q,null)))}let Oe="div";function Ie(t,e){let l=v(),{id:s=`headlessui-dialog-panel-${l}`,...a}=t,[{dialogState:i},p]=I("Dialog.Panel"),r=x(e,p.panelRef),c=F(()=>({open:i===0}),[i]),d=y(_=>{_.stopPropagation()});return h({ourProps:{ref:r,id:s,onClick:d},theirProps:a,slot:c,defaultTag:Oe,name:"Dialog.Panel"})}let Se="h2";function Me(t,e){let l=v(),{id:s=`headlessui-dialog-title-${l}`,...a}=t,[{dialogState:i,setTitleId:p}]=I("Dialog.Title"),r=x(e);ne(()=>(p(s),()=>p(null)),[s,p]);let c=F(()=>({open:i===0}),[i]);return h({ourProps:{ref:r,id:s},theirProps:a,slot:c,defaultTag:Se,name:"Dialog.Title"})}let we=L(he),Ge=L(Ie),He=L(Me),pt=j,dt=Object.assign(we,{Panel:Ge,Title:He,Description:j});export{dt as Dialog,pt as DialogDescription,Ge as DialogPanel,He as DialogTitle}; |
@@ -39,3 +39,3 @@ import React, { type ElementType, type MutableRefObject, type Ref } from 'react'; | ||
export type DisclosurePanelProps<TTag extends ElementType = typeof DEFAULT_PANEL_TAG> = Props<TTag, PanelRenderPropArg, DisclosurePanelPropsWeControl, PropsForFeatures<typeof PanelRenderFeatures>>; | ||
declare function PanelFn<TTag extends ElementType = typeof DEFAULT_PANEL_TAG>(props: DisclosurePanelProps<TTag>, ref: Ref<HTMLDivElement>): React.JSX.Element; | ||
declare function PanelFn<TTag extends ElementType = typeof DEFAULT_PANEL_TAG>(props: DisclosurePanelProps<TTag>, ref: Ref<HTMLElement>): React.JSX.Element; | ||
export interface _internal_ComponentDisclosure extends HasDisplayName { | ||
@@ -53,5 +53,7 @@ <TTag extends ElementType = typeof DEFAULT_DISCLOSURE_TAG>(props: DisclosureProps<TTag> & RefProp<typeof DisclosureFn>): JSX.Element; | ||
export declare let Disclosure: _internal_ComponentDisclosure & { | ||
/** @deprecated use `<DisclosureButton>` instead of `<Disclosure.Button>` */ | ||
Button: _internal_ComponentDisclosureButton; | ||
/** @deprecated use `<DisclosurePanel>` instead of `<Disclosure.Panel>` */ | ||
Panel: _internal_ComponentDisclosurePanel; | ||
}; | ||
export {}; |
@@ -1,1 +0,1 @@ | ||
"use client";import{useFocusRing as Q}from"@react-aria/focus";import{useHover as Y}from"@react-aria/interactions";import g,{Fragment as K,createContext as x,useContext as L,useEffect as j,useMemo as b,useReducer as Z,useRef as R}from"react";import{useActivePress as ee}from'../../hooks/use-active-press.js';import{useEvent as A}from'../../hooks/use-event.js';import{useId as W}from'../../hooks/use-id.js';import{useResolveButtonType as te}from'../../hooks/use-resolve-button-type.js';import{optionalRef as ne,useSyncRefs as v}from'../../hooks/use-sync-refs.js';import{CloseProvider as oe}from'../../internal/close-provider.js';import{OpenClosedProvider as le,State as C,useOpenClosed as re}from'../../internal/open-closed.js';import{isDisabledReactIssue7711 as se}from'../../utils/bugs.js';import{match as O}from'../../utils/match.js';import{getOwnerDocument as ie}from'../../utils/owner.js';import{RenderFeatures as $,forwardRefWithAs as _,mergeProps as J,render as B,useMergeRefsFn as X}from'../../utils/render.js';import{startTransition as ue}from'../../utils/start-transition.js';import{Keys as S}from'../keyboard.js';var ae=(o=>(o[o.Open=0]="Open",o[o.Closed=1]="Closed",o))(ae||{}),pe=(t=>(t[t.ToggleDisclosure=0]="ToggleDisclosure",t[t.CloseDisclosure=1]="CloseDisclosure",t[t.SetButtonId=2]="SetButtonId",t[t.SetPanelId=3]="SetPanelId",t[t.LinkPanel=4]="LinkPanel",t[t.UnlinkPanel=5]="UnlinkPanel",t))(pe||{});let ce={[0]:e=>({...e,disclosureState:O(e.disclosureState,{[0]:1,[1]:0})}),[1]:e=>e.disclosureState===1?e:{...e,disclosureState:1},[4](e){return e.linkedPanel===!0?e:{...e,linkedPanel:!0}},[5](e){return e.linkedPanel===!1?e:{...e,linkedPanel:!1}},[2](e,n){return e.buttonId===n.buttonId?e:{...e,buttonId:n.buttonId}},[3](e,n){return e.panelId===n.panelId?e:{...e,panelId:n.panelId}}},M=x(null);M.displayName="DisclosureContext";function F(e){let n=L(M);if(n===null){let o=new Error(`<${e} /> is missing a parent <Disclosure /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(o,F),o}return n}let k=x(null);k.displayName="DisclosureAPIContext";function V(e){let n=L(k);if(n===null){let o=new Error(`<${e} /> is missing a parent <Disclosure /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(o,V),o}return n}let H=x(null);H.displayName="DisclosurePanelContext";function de(){return L(H)}function fe(e,n){return O(n.type,ce,e,n)}let Te=K;function De(e,n){let{defaultOpen:o=!1,...d}=e,i=R(null),r=v(n,ne(c=>{i.current=c},e.as===void 0||e.as===K)),t=R(null),l=R(null),u=Z(fe,{disclosureState:o?0:1,linkedPanel:!1,buttonRef:l,panelRef:t,buttonId:null,panelId:null}),[{disclosureState:f,buttonId:s},T]=u,p=A(c=>{T({type:1});let P=ie(i);if(!P||!s)return;let y=(()=>c?c instanceof HTMLElement?c:c.current instanceof HTMLElement?c.current:P.getElementById(s):P.getElementById(s))();y==null||y.focus()}),m=b(()=>({close:p}),[p]),D=b(()=>({open:f===0,close:p}),[f,p]),I={ref:r};return g.createElement(M.Provider,{value:u},g.createElement(k.Provider,{value:m},g.createElement(oe,{value:p},g.createElement(le,{value:O(f,{[0]:C.Open,[1]:C.Closed})},B({ourProps:I,theirProps:d,slot:D,defaultTag:Te,name:"Disclosure"})))))}let Pe="button";function ye(e,n){let o=W(),{id:d=`headlessui-disclosure-button-${o}`,disabled:i=!1,autoFocus:r=!1,...t}=e,[l,u]=F("Disclosure.Button"),f=de(),s=f===null?!1:f===l.panelId,T=R(null),p=v(T,n,s?null:l.buttonRef),m=X();j(()=>{if(!s)return u({type:2,buttonId:d}),()=>{u({type:2,buttonId:null})}},[d,u,s]);let D=A(a=>{var E;if(s){if(l.disclosureState===1)return;switch(a.key){case S.Space:case S.Enter:a.preventDefault(),a.stopPropagation(),u({type:0}),(E=l.buttonRef.current)==null||E.focus();break}}else switch(a.key){case S.Space:case S.Enter:a.preventDefault(),a.stopPropagation(),u({type:0});break}}),I=A(a=>{switch(a.key){case S.Space:a.preventDefault();break}}),c=A(a=>{var E;se(a.currentTarget)||i||(s?(u({type:0}),(E=l.buttonRef.current)==null||E.focus()):u({type:0}))}),{isFocusVisible:P,focusProps:y}=Q({autoFocus:r}),{isHovered:U,hoverProps:h}=Y({isDisabled:i}),{pressed:N,pressProps:w}=ee({disabled:i}),q=b(()=>({open:l.disclosureState===0,hover:U,active:N,disabled:i,focus:P,autofocus:r}),[l,U,N,P,i,r]),G=te(e,T),z=s?J({ref:p,type:G,disabled:i||void 0,autoFocus:r,onKeyDown:D,onClick:c},y,h,w):J({ref:p,id:d,type:G,"aria-expanded":l.disclosureState===0,"aria-controls":l.linkedPanel?l.panelId:void 0,disabled:i||void 0,autoFocus:r,onKeyDown:D,onKeyUp:I,onClick:c},y,h,w);return B({mergeRefs:m,ourProps:z,theirProps:t,slot:q,defaultTag:Pe,name:"Disclosure.Button"})}let me="div",Ee=$.RenderStrategy|$.Static;function ge(e,n){let o=W(),{id:d=`headlessui-disclosure-panel-${o}`,...i}=e,[r,t]=F("Disclosure.Panel"),{close:l}=V("Disclosure.Panel"),u=X(),f=v(n,r.panelRef,D=>{ue(()=>t({type:D?4:5}))});j(()=>(t({type:3,panelId:d}),()=>{t({type:3,panelId:null})}),[d,t]);let s=re(),T=(()=>s!==null?(s&C.Open)===C.Open:r.disclosureState===0)(),p=b(()=>({open:r.disclosureState===0,close:l}),[r,l]),m={ref:f,id:d};return g.createElement(H.Provider,{value:r.panelId},B({mergeRefs:u,ourProps:m,theirProps:i,slot:p,defaultTag:me,features:Ee,visible:T,name:"Disclosure.Panel"}))}let Se=_(De),be=_(ye),Re=_(ge),we=Object.assign(Se,{Button:be,Panel:Re});export{we as Disclosure,be as DisclosureButton,Re as DisclosurePanel}; | ||
"use client";import{useFocusRing as Q}from"@react-aria/focus";import{useHover as Y}from"@react-aria/interactions";import g,{Fragment as K,createContext as x,useContext as L,useEffect as j,useMemo as b,useReducer as Z,useRef as R}from"react";import{useActivePress as ee}from'../../hooks/use-active-press.js';import{useEvent as A}from'../../hooks/use-event.js';import{useId as W}from'../../hooks/use-id.js';import{useResolveButtonType as te}from'../../hooks/use-resolve-button-type.js';import{optionalRef as ne,useSyncRefs as v}from'../../hooks/use-sync-refs.js';import{CloseProvider as oe}from'../../internal/close-provider.js';import{OpenClosedProvider as le,State as C,useOpenClosed as re}from'../../internal/open-closed.js';import{isDisabledReactIssue7711 as se}from'../../utils/bugs.js';import{match as O}from'../../utils/match.js';import{getOwnerDocument as ue}from'../../utils/owner.js';import{RenderFeatures as $,forwardRefWithAs as _,mergeProps as J,render as B,useMergeRefsFn as X}from'../../utils/render.js';import{startTransition as ie}from'../../utils/start-transition.js';import{Keys as S}from'../keyboard.js';var ae=(o=>(o[o.Open=0]="Open",o[o.Closed=1]="Closed",o))(ae||{}),pe=(t=>(t[t.ToggleDisclosure=0]="ToggleDisclosure",t[t.CloseDisclosure=1]="CloseDisclosure",t[t.SetButtonId=2]="SetButtonId",t[t.SetPanelId=3]="SetPanelId",t[t.LinkPanel=4]="LinkPanel",t[t.UnlinkPanel=5]="UnlinkPanel",t))(pe||{});let ce={[0]:e=>({...e,disclosureState:O(e.disclosureState,{[0]:1,[1]:0})}),[1]:e=>e.disclosureState===1?e:{...e,disclosureState:1},[4](e){return e.linkedPanel===!0?e:{...e,linkedPanel:!0}},[5](e){return e.linkedPanel===!1?e:{...e,linkedPanel:!1}},[2](e,n){return e.buttonId===n.buttonId?e:{...e,buttonId:n.buttonId}},[3](e,n){return e.panelId===n.panelId?e:{...e,panelId:n.panelId}}},M=x(null);M.displayName="DisclosureContext";function F(e){let n=L(M);if(n===null){let o=new Error(`<${e} /> is missing a parent <Disclosure /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(o,F),o}return n}let k=x(null);k.displayName="DisclosureAPIContext";function V(e){let n=L(k);if(n===null){let o=new Error(`<${e} /> is missing a parent <Disclosure /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(o,V),o}return n}let H=x(null);H.displayName="DisclosurePanelContext";function de(){return L(H)}function fe(e,n){return O(n.type,ce,e,n)}let Te=K;function De(e,n){let{defaultOpen:o=!1,...d}=e,u=R(null),r=v(n,ne(c=>{u.current=c},e.as===void 0||e.as===K)),t=R(null),l=R(null),i=Z(fe,{disclosureState:o?0:1,linkedPanel:!1,buttonRef:l,panelRef:t,buttonId:null,panelId:null}),[{disclosureState:f,buttonId:s},T]=i,p=A(c=>{T({type:1});let P=ue(u);if(!P||!s)return;let y=(()=>c?c instanceof HTMLElement?c:c.current instanceof HTMLElement?c.current:P.getElementById(s):P.getElementById(s))();y==null||y.focus()}),m=b(()=>({close:p}),[p]),D=b(()=>({open:f===0,close:p}),[f,p]),I={ref:r};return g.createElement(M.Provider,{value:i},g.createElement(k.Provider,{value:m},g.createElement(oe,{value:p},g.createElement(le,{value:O(f,{[0]:C.Open,[1]:C.Closed})},B({ourProps:I,theirProps:d,slot:D,defaultTag:Te,name:"Disclosure"})))))}let Pe="button";function ye(e,n){let o=W(),{id:d=`headlessui-disclosure-button-${o}`,disabled:u=!1,autoFocus:r=!1,...t}=e,[l,i]=F("Disclosure.Button"),f=de(),s=f===null?!1:f===l.panelId,T=R(null),p=v(T,n,s?null:l.buttonRef),m=X();j(()=>{if(!s)return i({type:2,buttonId:d}),()=>{i({type:2,buttonId:null})}},[d,i,s]);let D=A(a=>{var E;if(s){if(l.disclosureState===1)return;switch(a.key){case S.Space:case S.Enter:a.preventDefault(),a.stopPropagation(),i({type:0}),(E=l.buttonRef.current)==null||E.focus();break}}else switch(a.key){case S.Space:case S.Enter:a.preventDefault(),a.stopPropagation(),i({type:0});break}}),I=A(a=>{switch(a.key){case S.Space:a.preventDefault();break}}),c=A(a=>{var E;se(a.currentTarget)||u||(s?(i({type:0}),(E=l.buttonRef.current)==null||E.focus()):i({type:0}))}),{isFocusVisible:P,focusProps:y}=Q({autoFocus:r}),{isHovered:U,hoverProps:h}=Y({isDisabled:u}),{pressed:N,pressProps:w}=ee({disabled:u}),q=b(()=>({open:l.disclosureState===0,hover:U,active:N,disabled:u,focus:P,autofocus:r}),[l,U,N,P,u,r]),G=te(e,T),z=s?J({ref:p,type:G,disabled:u||void 0,autoFocus:r,onKeyDown:D,onClick:c},y,h,w):J({ref:p,id:d,type:G,"aria-expanded":l.disclosureState===0,"aria-controls":l.linkedPanel?l.panelId:void 0,disabled:u||void 0,autoFocus:r,onKeyDown:D,onKeyUp:I,onClick:c},y,h,w);return B({mergeRefs:m,ourProps:z,theirProps:t,slot:q,defaultTag:Pe,name:"Disclosure.Button"})}let me="div",Ee=$.RenderStrategy|$.Static;function ge(e,n){let o=W(),{id:d=`headlessui-disclosure-panel-${o}`,...u}=e,[r,t]=F("Disclosure.Panel"),{close:l}=V("Disclosure.Panel"),i=X(),f=v(n,r.panelRef,D=>{ie(()=>t({type:D?4:5}))});j(()=>(t({type:3,panelId:d}),()=>{t({type:3,panelId:null})}),[d,t]);let s=re(),T=(()=>s!==null?(s&C.Open)===C.Open:r.disclosureState===0)(),p=b(()=>({open:r.disclosureState===0,close:l}),[r,l]),m={ref:f,id:d};return g.createElement(H.Provider,{value:r.panelId},B({mergeRefs:i,ourProps:m,theirProps:u,slot:p,defaultTag:me,features:Ee,visible:T,name:"Disclosure.Panel"}))}let Se=_(De),be=_(ye),Re=_(ge),we=Object.assign(Se,{Button:be,Panel:Re});export{we as Disclosure,be as DisclosureButton,Re as DisclosurePanel}; |
import { type ElementType } from 'react'; | ||
import type { Props } from '../../types.js'; | ||
import { type HasDisplayName } from '../../utils/render.js'; | ||
declare let DEFAULT_FIELDSET_TAG: "div"; | ||
declare let DEFAULT_FIELDSET_TAG: "fieldset"; | ||
type FieldsetRenderPropArg = {}; | ||
type FieldsetPropsWeControl = 'aria-controls'; | ||
type FieldsetPropsWeControl = 'aria-labelledby' | 'aria-disabled' | 'role'; | ||
export type FieldsetProps<TTag extends ElementType = typeof DEFAULT_FIELDSET_TAG> = Props<TTag, FieldsetRenderPropArg, FieldsetPropsWeControl, { | ||
@@ -8,0 +8,0 @@ disabled?: boolean; |
@@ -1,1 +0,1 @@ | ||
"use client";import t,{useMemo as a}from"react";import{DisabledProvider as n,useDisabled as T}from'../../internal/disabled.js';import{forwardRefWithAs as m,render as F}from'../../utils/render.js';import{useLabels as y}from'../label/label.js';let f="div";function E(r,l){let o=T(),{disabled:e=o||!1,...s}=r,[i,d]=y(),p=a(()=>({disabled:e}),[e]);return t.createElement(n,{value:e},t.createElement(d,null,F({ourProps:{ref:l,role:"group","aria-labelledby":i,"aria-disabled":e||void 0},theirProps:s,slot:p,defaultTag:f,name:"Fieldset"})))}let L=m(E);export{L as Fieldset}; | ||
"use client";import o,{useMemo as y}from"react";import{useResolvedTag as F}from'../../hooks/use-resolved-tag.js';import{useSyncRefs as b}from'../../hooks/use-sync-refs.js';import{DisabledProvider as E,useDisabled as P}from'../../internal/disabled.js';import{forwardRefWithAs as u,render as g}from'../../utils/render.js';import{useLabels as D}from'../label/label.js';let d="fieldset";function A(t,i){var s;let a=P(),{disabled:e=a||!1,...p}=t,[n,T]=F((s=t.as)!=null?s:d),l=b(i,T),[r,f]=D(),m=y(()=>({disabled:e}),[e]);return o.createElement(E,{value:e},o.createElement(f,null,g({ourProps:n==="fieldset"?{ref:l,"aria-labelledby":r,disabled:e||void 0}:{ref:l,role:"group","aria-labelledby":r,"aria-disabled":e||void 0},theirProps:p,slot:m,defaultTag:d,name:"Fieldset"})))}let C=u(A);export{C as Fieldset}; |
@@ -8,15 +8,13 @@ import React, { type ElementType, type MutableRefObject, type Ref } from 'react'; | ||
/** No features enabled for the focus trap. */ | ||
None = 1, | ||
None = 0, | ||
/** Ensure that we move focus initially into the container. */ | ||
InitialFocus = 2, | ||
InitialFocus = 1, | ||
/** Ensure that pressing `Tab` and `Shift+Tab` is trapped within the container. */ | ||
TabLock = 4, | ||
TabLock = 2, | ||
/** Ensure that programmatically moving focus outside of the container is disallowed. */ | ||
FocusLock = 8, | ||
FocusLock = 4, | ||
/** Ensure that we restore the focus when unmounting the focus trap. */ | ||
RestoreFocus = 16, | ||
RestoreFocus = 8, | ||
/** Initial focus should look for the `data-autofocus` */ | ||
AutoFocus = 32, | ||
/** Enable all features. */ | ||
All = 30 | ||
AutoFocus = 16 | ||
} | ||
@@ -31,3 +29,3 @@ type FocusTrapRenderPropArg = {}; | ||
}>; | ||
declare function FocusTrapFn<TTag extends ElementType = typeof DEFAULT_FOCUS_TRAP_TAG>(props: FocusTrapProps<TTag>, ref: Ref<HTMLDivElement>): React.JSX.Element; | ||
declare function FocusTrapFn<TTag extends ElementType = typeof DEFAULT_FOCUS_TRAP_TAG>(props: FocusTrapProps<TTag>, ref: Ref<HTMLElement>): React.JSX.Element; | ||
export interface _internal_ComponentFocusTrap extends HasDisplayName { | ||
@@ -37,4 +35,5 @@ <TTag extends ElementType = typeof DEFAULT_FOCUS_TRAP_TAG>(props: FocusTrapProps<TTag> & RefProp<typeof FocusTrapFn>): JSX.Element; | ||
export declare let FocusTrap: _internal_ComponentFocusTrap & { | ||
/** @deprecated use `FocusTrapFeatures` instead of `FocusTrap.features` */ | ||
features: typeof FocusTrapFeatures; | ||
}; | ||
export {}; |
@@ -1,1 +0,1 @@ | ||
"use client";import d,{useRef as L}from"react";import{useDisposables as I}from'../../hooks/use-disposables.js';import{useEvent as A}from'../../hooks/use-event.js';import{useEventListener as G}from'../../hooks/use-event-listener.js';import{useIsMounted as g}from'../../hooks/use-is-mounted.js';import{useOnUnmount as W}from'../../hooks/use-on-unmount.js';import{useOwnerDocument as k}from'../../hooks/use-owner.js';import{useServerHandoffComplete as K}from'../../hooks/use-server-handoff-complete.js';import{useSyncRefs as V}from'../../hooks/use-sync-refs.js';import{Direction as M,useTabDirection as q}from'../../hooks/use-tab-direction.js';import{useWatch as y}from'../../hooks/use-watch.js';import{Hidden as F,HiddenFeatures as P}from'../../internal/hidden.js';import{history as R}from'../../utils/active-element-history.js';import{Focus as T,FocusResult as O,focusElement as f,focusIn as m}from'../../utils/focus-management.js';import{match as C}from'../../utils/match.js';import{microTask as _}from'../../utils/micro-task.js';import{forwardRefWithAs as J,render as X}from'../../utils/render.js';function S(t){if(!t)return new Set;if(typeof t=="function")return new Set(t());let o=new Set;for(let e of t.current)e.current instanceof HTMLElement&&o.add(e.current);return o}let z="div";var h=(r=>(r[r.None=1]="None",r[r.InitialFocus=2]="InitialFocus",r[r.TabLock=4]="TabLock",r[r.FocusLock=8]="FocusLock",r[r.RestoreFocus=16]="RestoreFocus",r[r.AutoFocus=32]="AutoFocus",r[r.All=30]="All",r))(h||{});function Q(t,o){let e=L(null),n=V(e,o),{initialFocus:c,initialFocusFallback:p,containers:u,features:r=30,...l}=t;K()||(r=1);let s=k(e);$({ownerDocument:s},!!(r&16));let U=D({ownerDocument:s,container:e,initialFocus:c,initialFocusFallback:p},r);w({ownerDocument:s,container:e,containers:u,previousActiveElement:U},!!(r&8));let b=q(),v=A(a=>{let i=e.current;if(!i)return;(N=>N())(()=>{C(b.current,{[M.Forwards]:()=>{m(i,T.First,{skipElements:[a.relatedTarget,p]})},[M.Backwards]:()=>{m(i,T.Last,{skipElements:[a.relatedTarget,p]})}})})}),B=I(),H=L(!1),x={ref:n,onKeyDown(a){a.key=="Tab"&&(H.current=!0,B.requestAnimationFrame(()=>{H.current=!1}))},onBlur(a){if(!(r&8))return;let i=S(u);e.current instanceof HTMLElement&&i.add(e.current);let E=a.relatedTarget;E instanceof HTMLElement&&E.dataset.headlessuiFocusGuard!=="true"&&(j(i,E)||(H.current?m(e.current,C(b.current,{[M.Forwards]:()=>T.Next,[M.Backwards]:()=>T.Previous})|T.WrapAround,{relativeTo:a.target}):a.target instanceof HTMLElement&&f(a.target)))}};return d.createElement(d.Fragment,null,!!(r&4)&&d.createElement(F,{as:"button",type:"button","data-headlessui-focus-guard":!0,onFocus:v,features:P.Focusable}),X({ourProps:x,theirProps:l,defaultTag:z,name:"FocusTrap"}),!!(r&4)&&d.createElement(F,{as:"button",type:"button","data-headlessui-focus-guard":!0,onFocus:v,features:P.Focusable}))}let Y=J(Q),Le=Object.assign(Y,{features:h});function Z(t=!0){let o=L(R.slice());return y(([e],[n])=>{n===!0&&e===!1&&_(()=>{o.current.splice(0)}),n===!1&&e===!0&&(o.current=R.slice())},[t,R,o]),A(()=>{var e;return(e=o.current.find(n=>n!=null&&n.isConnected))!=null?e:null})}function $({ownerDocument:t},o){let e=Z(o);y(()=>{o||(t==null?void 0:t.activeElement)===(t==null?void 0:t.body)&&f(e())},[o]),W(()=>{o&&f(e())})}function D({ownerDocument:t,container:o,initialFocus:e,initialFocusFallback:n},c){let p=!!(c&2),u=L(null),r=g();return y(()=>{if(!p){n!=null&&n.current&&f(n.current);return}let l=o.current;l&&_(()=>{if(!r.current)return;let s=t==null?void 0:t.activeElement;if(e!=null&&e.current){if((e==null?void 0:e.current)===s){u.current=s;return}}else if(l.contains(s)){u.current=s;return}if(e!=null&&e.current)f(e.current);else{if(c&32){if(m(l,T.First|T.AutoFocus)!==O.Error)return}else if(m(l,T.First)!==O.Error)return;if(n!=null&&n.current&&(f(n.current),(t==null?void 0:t.activeElement)===n.current))return;console.warn("There are no focusable elements inside the <FocusTrap />")}u.current=t==null?void 0:t.activeElement})},[n,p,c]),u}function w({ownerDocument:t,container:o,containers:e,previousActiveElement:n},c){let p=g();G(t==null?void 0:t.defaultView,"focus",u=>{if(!c||!p.current)return;let r=S(e);o.current instanceof HTMLElement&&r.add(o.current);let l=n.current;if(!l)return;let s=u.target;s&&s instanceof HTMLElement?j(r,s)?(n.current=s,f(s)):(u.preventDefault(),u.stopPropagation(),f(l)):f(n.current)},!0)}function j(t,o){for(let e of t)if(e.contains(o))return!0;return!1}export{Le as FocusTrap,h as FocusTrapFeatures}; | ||
"use client";import L,{useRef as M}from"react";import{useDisposables as G}from'../../hooks/use-disposables.js';import{useEvent as A}from'../../hooks/use-event.js';import{useEventListener as W}from'../../hooks/use-event-listener.js';import{useIsMounted as P}from'../../hooks/use-is-mounted.js';import{useIsTopLayer as O}from'../../hooks/use-is-top-layer.js';import{useOnUnmount as K}from'../../hooks/use-on-unmount.js';import{useOwnerDocument as V}from'../../hooks/use-owner.js';import{useServerHandoffComplete as q}from'../../hooks/use-server-handoff-complete.js';import{useSyncRefs as J}from'../../hooks/use-sync-refs.js';import{Direction as H,useTabDirection as X}from'../../hooks/use-tab-direction.js';import{useWatch as y}from'../../hooks/use-watch.js';import{Hidden as C,HiddenFeatures as _}from'../../internal/hidden.js';import{history as b}from'../../utils/active-element-history.js';import{Focus as T,FocusResult as S,focusElement as p,focusIn as E}from'../../utils/focus-management.js';import{match as h}from'../../utils/match.js';import{microTask as j}from'../../utils/micro-task.js';import{forwardRefWithAs as z,render as Q}from'../../utils/render.js';function U(o){if(!o)return new Set;if(typeof o=="function")return new Set(o());let e=new Set;for(let t of o.current)t.current instanceof HTMLElement&&e.add(t.current);return e}let Y="div";var x=(n=>(n[n.None=0]="None",n[n.InitialFocus=1]="InitialFocus",n[n.TabLock=2]="TabLock",n[n.FocusLock=4]="FocusLock",n[n.RestoreFocus=8]="RestoreFocus",n[n.AutoFocus=16]="AutoFocus",n))(x||{});function Z(o,e){let t=M(null),r=J(t,e),{initialFocus:s,initialFocusFallback:a,containers:n,features:u=15,...f}=o;q()||(u=0);let l=V(t);w(u,{ownerDocument:l});let i=ee(u,{ownerDocument:l,container:t,initialFocus:s,initialFocusFallback:a});te(u,{ownerDocument:l,container:t,containers:n,previousActiveElement:i});let R=X(),g=A(c=>{let m=t.current;if(!m)return;(B=>B())(()=>{h(R.current,{[H.Forwards]:()=>{E(m,T.First,{skipElements:[c.relatedTarget,a]})},[H.Backwards]:()=>{E(m,T.Last,{skipElements:[c.relatedTarget,a]})}})})}),v=O(!!(u&2),"focus-trap#tab-lock"),N=G(),F=M(!1),k={ref:r,onKeyDown(c){c.key=="Tab"&&(F.current=!0,N.requestAnimationFrame(()=>{F.current=!1}))},onBlur(c){if(!(u&4))return;let m=U(n);t.current instanceof HTMLElement&&m.add(t.current);let d=c.relatedTarget;d instanceof HTMLElement&&d.dataset.headlessuiFocusGuard!=="true"&&(I(m,d)||(F.current?E(t.current,h(R.current,{[H.Forwards]:()=>T.Next,[H.Backwards]:()=>T.Previous})|T.WrapAround,{relativeTo:c.target}):c.target instanceof HTMLElement&&p(c.target)))}};return L.createElement(L.Fragment,null,v&&L.createElement(C,{as:"button",type:"button","data-headlessui-focus-guard":!0,onFocus:g,features:_.Focusable}),Q({ourProps:k,theirProps:f,defaultTag:Y,name:"FocusTrap"}),v&&L.createElement(C,{as:"button",type:"button","data-headlessui-focus-guard":!0,onFocus:g,features:_.Focusable}))}let $=z(Z),Fe=Object.assign($,{features:x});function D(o=!0){let e=M(b.slice());return y(([t],[r])=>{r===!0&&t===!1&&j(()=>{e.current.splice(0)}),r===!1&&t===!0&&(e.current=b.slice())},[o,b,e]),A(()=>{var t;return(t=e.current.find(r=>r!=null&&r.isConnected))!=null?t:null})}function w(o,{ownerDocument:e}){let t=!!(o&8),r=D(t);y(()=>{t||(e==null?void 0:e.activeElement)===(e==null?void 0:e.body)&&p(r())},[t]),K(()=>{t&&p(r())})}function ee(o,{ownerDocument:e,container:t,initialFocus:r,initialFocusFallback:s}){let a=M(null),n=O(!!(o&1),"focus-trap#initial-focus"),u=P();return y(()=>{if(o===0)return;if(!n){s!=null&&s.current&&p(s.current);return}let f=t.current;f&&j(()=>{if(!u.current)return;let l=e==null?void 0:e.activeElement;if(r!=null&&r.current){if((r==null?void 0:r.current)===l){a.current=l;return}}else if(f.contains(l)){a.current=l;return}if(r!=null&&r.current)p(r.current);else{if(o&16){if(E(f,T.First|T.AutoFocus)!==S.Error)return}else if(E(f,T.First)!==S.Error)return;if(s!=null&&s.current&&(p(s.current),(e==null?void 0:e.activeElement)===s.current))return;console.warn("There are no focusable elements inside the <FocusTrap />")}a.current=e==null?void 0:e.activeElement})},[s,n,o]),a}function te(o,{ownerDocument:e,container:t,containers:r,previousActiveElement:s}){let a=P(),n=!!(o&4);W(e==null?void 0:e.defaultView,"focus",u=>{if(!n||!a.current)return;let f=U(r);t.current instanceof HTMLElement&&f.add(t.current);let l=s.current;if(!l)return;let i=u.target;i&&i instanceof HTMLElement?I(f,i)?(s.current=i,p(i)):(u.preventDefault(),u.stopPropagation(),p(l)):p(s.current)},!0)}function I(o,e){for(let t of o)if(t.contains(e))return!0;return!1}export{Fe as FocusTrap,x as FocusTrapFeatures}; |
@@ -27,2 +27,3 @@ import React, { type ElementType, type Ref } from 'react'; | ||
multiple?: boolean; | ||
__demoMode?: boolean; | ||
}>; | ||
@@ -55,2 +56,3 @@ declare function ListboxFn<TTag extends ElementType = typeof DEFAULT_LISTBOX_TAG, TType = string, TActualType = TType extends (infer U)[] ? U : TType>(props: ListboxProps<TTag, TType, TActualType>, ref: Ref<HTMLElement>): React.JSX.Element; | ||
anchor?: AnchorPropsWithSelection; | ||
portal?: boolean; | ||
modal?: boolean; | ||
@@ -109,8 +111,13 @@ } & PropsForFeatures<typeof OptionsRenderFeatures>>; | ||
export declare let Listbox: _internal_ComponentListbox & { | ||
/** @deprecated use `<ListboxButton>` instead of `<Listbox.Button>` */ | ||
Button: _internal_ComponentListboxButton; | ||
/** @deprecated use `<Label>` instead of `<Listbox.Label>` */ | ||
Label: _internal_ComponentListboxLabel; | ||
/** @deprecated use `<ListboxOptions>` instead of `<Listbox.Options>` */ | ||
Options: _internal_ComponentListboxOptions; | ||
/** @deprecated use `<ListboxOption>` instead of `<Listbox.Option>` */ | ||
Option: _internal_ComponentListboxOption; | ||
/** @deprecated use `<ListboxSelectedOption>` instead of `<Listbox.SelectedOption>` */ | ||
SelectedOption: _internal_ComponentListboxSelectedOption; | ||
}; | ||
export {}; |
@@ -1,1 +0,1 @@ | ||
"use client";import{useFocusRing as Se}from"@react-aria/focus";import{useHover as Re}from"@react-aria/interactions";import h,{Fragment as Z,createContext as ee,createRef as Pe,useCallback as pe,useContext as te,useEffect as ue,useMemo as N,useReducer as Ae,useRef as H,useState as Ee}from"react";import{useActivePress as De}from'../../hooks/use-active-press.js';import{useByComparator as he}from'../../hooks/use-by-comparator.js';import{useComputed as Ie}from'../../hooks/use-computed.js';import{useControllable as _e}from'../../hooks/use-controllable.js';import{useDidElementMove as Ce}from'../../hooks/use-did-element-move.js';import{useDisposables as X}from'../../hooks/use-disposables.js';import{useElementSize as Fe}from'../../hooks/use-element-size.js';import{useEvent as x}from'../../hooks/use-event.js';import{useId as oe}from'../../hooks/use-id.js';import{useIsoMorphicEffect as ne}from'../../hooks/use-iso-morphic-effect.js';import{useLatestValue as Me}from'../../hooks/use-latest-value.js';import{useOnDisappear as we}from'../../hooks/use-on-disappear.js';import{useOutsideClick as Be}from'../../hooks/use-outside-click.js';import{useResolveButtonType as Ue}from'../../hooks/use-resolve-button-type.js';import{useSyncRefs as K}from'../../hooks/use-sync-refs.js';import{useTextValue as ke}from'../../hooks/use-text-value.js';import{useTrackedPointer as Ne}from'../../hooks/use-tracked-pointer.js';import{useDisabled as Ge}from'../../internal/disabled.js';import{FloatingProvider as He,useFloatingPanel as Ve,useFloatingPanelProps as Ke,useFloatingReference as je,useFloatingReferenceProps as We}from'../../internal/floating.js';import{FormFields as ze}from'../../internal/form-fields.js';import{useProvidedId as Qe}from'../../internal/id.js';import{Modal as Xe}from'../../internal/modal.js';import{OpenClosedProvider as Je,State as J,useOpenClosed as $e}from'../../internal/open-closed.js';import{isDisabledReactIssue7711 as qe}from'../../utils/bugs.js';import{Focus as O,calculateActiveIndex as ie}from'../../utils/calculate-active-index.js';import{disposables as re}from'../../utils/disposables.js';import{FocusableMode as Ye,isFocusableElement as Ze,sortByDomNode as et}from'../../utils/focus-management.js';import{attemptSubmit as tt}from'../../utils/form.js';import{match as V}from'../../utils/match.js';import{getOwnerDocument as ot}from'../../utils/owner.js';import{RenderFeatures as de,forwardRefWithAs as j,mergeProps as ce,render as W}from'../../utils/render.js';import{useDescribedBy as nt}from'../description/description.js';import{Keys as S}from'../keyboard.js';import{Label as it,useLabelledBy as rt,useLabels as lt}from'../label/label.js';import{Portal as at}from'../portal/portal.js';var st=(o=>(o[o.Open=0]="Open",o[o.Closed=1]="Closed",o))(st||{}),pt=(o=>(o[o.Single=0]="Single",o[o.Multi=1]="Multi",o))(pt||{}),ut=(o=>(o[o.Pointer=0]="Pointer",o[o.Other=1]="Other",o))(ut||{}),dt=(t=>(t[t.OpenListbox=0]="OpenListbox",t[t.CloseListbox=1]="CloseListbox",t[t.GoToOption=2]="GoToOption",t[t.Search=3]="Search",t[t.ClearSearch=4]="ClearSearch",t[t.RegisterOption=5]="RegisterOption",t[t.UnregisterOption=6]="UnregisterOption",t))(dt||{});function le(e,r=o=>o){let o=e.activeOptionIndex!==null?e.options[e.activeOptionIndex]:null,i=et(r(e.options.slice()),d=>d.dataRef.current.domRef.current),n=o?i.indexOf(o):null;return n===-1&&(n=null),{options:i,activeOptionIndex:n}}let ct={[1](e){return e.dataRef.current.disabled||e.listboxState===1?e:{...e,activeOptionIndex:null,listboxState:1}},[0](e){if(e.dataRef.current.disabled||e.listboxState===0)return e;let r=e.activeOptionIndex,{isSelected:o}=e.dataRef.current,i=e.options.findIndex(n=>o(n.dataRef.current.value));return i!==-1&&(r=i),{...e,listboxState:0,activeOptionIndex:r}},[2](e,r){var d,v,t,l,p;if(e.dataRef.current.disabled||e.listboxState===1)return e;let o={...e,searchQuery:"",activationTrigger:(d=r.trigger)!=null?d:1};if(r.focus===O.Nothing)return{...o,activeOptionIndex:null};if(r.focus===O.Specific)return{...o,activeOptionIndex:e.options.findIndex(s=>s.id===r.id)};if(r.focus===O.Previous){let s=e.activeOptionIndex;if(s!==null){let m=e.options[s].dataRef.current.domRef,c=ie(r,{resolveItems:()=>e.options,resolveActiveIndex:()=>e.activeOptionIndex,resolveId:b=>b.id,resolveDisabled:b=>b.dataRef.current.disabled});if(c!==null){let b=e.options[c].dataRef.current.domRef;if(((v=m.current)==null?void 0:v.previousElementSibling)===b.current||((t=b.current)==null?void 0:t.previousElementSibling)===null)return{...o,activeOptionIndex:c}}}}else if(r.focus===O.Next){let s=e.activeOptionIndex;if(s!==null){let m=e.options[s].dataRef.current.domRef,c=ie(r,{resolveItems:()=>e.options,resolveActiveIndex:()=>e.activeOptionIndex,resolveId:b=>b.id,resolveDisabled:b=>b.dataRef.current.disabled});if(c!==null){let b=e.options[c].dataRef.current.domRef;if(((l=m.current)==null?void 0:l.nextElementSibling)===b.current||((p=b.current)==null?void 0:p.nextElementSibling)===null)return{...o,activeOptionIndex:c}}}}let i=le(e),n=ie(r,{resolveItems:()=>i.options,resolveActiveIndex:()=>i.activeOptionIndex,resolveId:s=>s.id,resolveDisabled:s=>s.dataRef.current.disabled});return{...o,...i,activeOptionIndex:n}},[3]:(e,r)=>{if(e.dataRef.current.disabled||e.listboxState===1)return e;let i=e.searchQuery!==""?0:1,n=e.searchQuery+r.value.toLowerCase(),v=(e.activeOptionIndex!==null?e.options.slice(e.activeOptionIndex+i).concat(e.options.slice(0,e.activeOptionIndex+i)):e.options).find(l=>{var p;return!l.dataRef.current.disabled&&((p=l.dataRef.current.textValue)==null?void 0:p.startsWith(n))}),t=v?e.options.indexOf(v):-1;return t===-1||t===e.activeOptionIndex?{...e,searchQuery:n}:{...e,searchQuery:n,activeOptionIndex:t,activationTrigger:1}},[4](e){return e.dataRef.current.disabled||e.listboxState===1||e.searchQuery===""?e:{...e,searchQuery:""}},[5]:(e,r)=>{let o={id:r.id,dataRef:r.dataRef},i=le(e,n=>[...n,o]);return e.activeOptionIndex===null&&e.dataRef.current.isSelected(r.dataRef.current.value)&&(i.activeOptionIndex=i.options.indexOf(o)),{...e,...i}},[6]:(e,r)=>{let o=le(e,i=>{let n=i.findIndex(d=>d.id===r.id);return n!==-1&&i.splice(n,1),i});return{...e,...o,activationTrigger:1}}},ae=ee(null);ae.displayName="ListboxActionsContext";function $(e){let r=te(ae);if(r===null){let o=new Error(`<${e} /> is missing a parent <Listbox /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(o,$),o}return r}let q=ee(null);q.displayName="ListboxDataContext";function z(e){let r=te(q);if(r===null){let o=new Error(`<${e} /> is missing a parent <Listbox /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(o,z),o}return r}function ft(e,r){return V(r.type,ct,e,r)}let bt=Z;function Tt(e,r){var se;let o=Ge(),{value:i,defaultValue:n,form:d,name:v,onChange:t,by:l,invalid:p=!1,disabled:s=o||!1,horizontal:m=!1,multiple:c=!1,...b}=e;const w=m?"horizontal":"vertical";let B=K(r),[A=c?[]:void 0,R]=_e(i,t,n),[D,y]=Ae(ft,{dataRef:Pe(),listboxState:1,options:[],searchQuery:"",activeOptionIndex:null,activationTrigger:1,optionsVisible:!1}),_=H({static:!1,hold:!1}),C=H(null),U=H(null),F=H(new Map),f=he(l),E=pe(T=>V(u.mode,{[1]:()=>A.some(L=>f(L,T)),[0]:()=>f(A,T)}),[A]),u=N(()=>({...D,value:A,disabled:s,invalid:p,mode:c?1:0,orientation:w,compare:f,isSelected:E,optionsPropsRef:_,buttonRef:C,optionsRef:U,listRef:F}),[A,s,p,c,D,F]);ne(()=>{D.dataRef.current=u},[u]),Be([u.buttonRef,u.optionsRef],(T,L)=>{var I;y({type:1}),Ze(L,Ye.Loose)||(T.preventDefault(),(I=u.buttonRef.current)==null||I.focus())},u.listboxState===0);let k=N(()=>({open:u.listboxState===0,disabled:s,invalid:p,value:A}),[u,s,A,p]),g=x(T=>{let L=u.options.find(I=>I.id===T);L&&Y(L.dataRef.current.value)}),G=x(()=>{if(u.activeOptionIndex!==null){let{dataRef:T,id:L}=u.options[u.activeOptionIndex];Y(T.current.value),y({type:2,focus:O.Specific,id:L})}}),Q=x(()=>y({type:0})),a=x(()=>y({type:1})),P=X(),M=x((T,L,I)=>{P.dispose(),P.microTask(()=>T===O.Specific?y({type:2,focus:O.Specific,id:L,trigger:I}):y({type:2,focus:T,trigger:I}))}),be=x((T,L)=>(y({type:5,id:T,dataRef:L}),()=>y({type:6,id:T}))),Y=x(T=>V(u.mode,{[0](){return R==null?void 0:R(T)},[1](){let L=u.value.slice(),I=L.findIndex(Le=>f(Le,T));return I===-1?L.push(T):L.splice(I,1),R==null?void 0:R(L)}})),Te=x(T=>y({type:3,value:T})),xe=x(()=>y({type:4})),me=N(()=>({onChange:Y,registerOption:be,goToOption:M,closeListbox:a,openListbox:Q,selectActiveOption:G,selectOption:g,search:Te,clearSearch:xe}),[]),[Oe,ye]=lt({inherit:!0}),ve={ref:B},ge=pe(()=>R==null?void 0:R(n),[R]);return h.createElement(ye,{value:Oe,props:{htmlFor:(se=u.buttonRef.current)==null?void 0:se.id},slot:{open:u.listboxState===0,disabled:s}},h.createElement(He,null,h.createElement(ae.Provider,{value:me},h.createElement(q.Provider,{value:u},h.createElement(Je,{value:V(u.listboxState,{[0]:J.Open,[1]:J.Closed})},v!=null&&A!=null&&h.createElement(ze,{disabled:s,data:{[v]:A},form:d,onReset:ge}),W({ourProps:ve,theirProps:b,slot:k,defaultTag:bt,name:"Listbox"}))))))}let xt="button";function mt(e,r){var k;let o=z("Listbox.Button"),i=$("Listbox.Button"),n=oe(),d=Qe(),{id:v=d||`headlessui-listbox-button-${n}`,disabled:t=o.disabled||!1,autoFocus:l=!1,...p}=e,s=K(o.buttonRef,r,je()),m=We(),c=X(),b=x(g=>{switch(g.key){case S.Enter:tt(g.currentTarget);break;case S.Space:case S.ArrowDown:g.preventDefault(),i.openListbox(),c.nextFrame(()=>{o.value||i.goToOption(O.First)});break;case S.ArrowUp:g.preventDefault(),i.openListbox(),c.nextFrame(()=>{o.value||i.goToOption(O.Last)});break}}),w=x(g=>{switch(g.key){case S.Space:g.preventDefault();break}}),B=x(g=>{if(qe(g.currentTarget))return g.preventDefault();o.listboxState===0?(i.closeListbox(),c.nextFrame(()=>{var G;return(G=o.buttonRef.current)==null?void 0:G.focus({preventScroll:!0})})):(g.preventDefault(),i.openListbox())}),A=x(g=>g.preventDefault()),R=rt([v]),D=nt(),{isFocusVisible:y,focusProps:_}=Se({autoFocus:l}),{isHovered:C,hoverProps:U}=Re({isDisabled:t}),{pressed:F,pressProps:f}=De({disabled:t}),E=N(()=>({open:o.listboxState===0,active:F||o.listboxState===0,disabled:t,invalid:o.invalid,value:o.value,hover:C,focus:y,autofocus:l}),[o.listboxState,o.value,t,C,y,F,o.invalid,l]),u=ce(m(),{ref:s,id:v,type:Ue(e,o.buttonRef),"aria-haspopup":"listbox","aria-controls":(k=o.optionsRef.current)==null?void 0:k.id,"aria-expanded":o.listboxState===0,"aria-labelledby":R,"aria-describedby":D,disabled:t||void 0,autoFocus:l,onKeyDown:b,onKeyUp:w,onKeyPress:A,onClick:B},_,U,f);return W({ourProps:u,theirProps:p,slot:E,defaultTag:xt,name:"Listbox.Button"})}let fe=ee(!1),Ot="div",yt=de.RenderStrategy|de.Static;function vt(e,r){var Q;let o=oe(),{id:i=`headlessui-listbox-options-${o}`,anchor:n,modal:d,...v}=e;n!=null&&d==null?d=!0:d==null&&(d=!1);let t=z("Listbox.Options"),l=$("Listbox.Options"),p=$e(),s=(()=>p!==null?(p&J.Open)===J.Open:t.listboxState===0)();we(t.buttonRef,l.closeListbox,s);let m=H(null);ue(()=>{var P;if(!((P=n==null?void 0:n.to)!=null&&P.includes("selection")))return;if(!s){m.current=null;return}let a=Array.from(t.listRef.current.values());m.current=a.findIndex(M=>(M==null?void 0:M.dataset.selected)===""),m.current===-1&&(m.current=a.findIndex(M=>(M==null?void 0:M.dataset.disabled)===void 0),l.goToOption(O.First))},[s,t.listRef]);let b=Ce(t.buttonRef,t.listboxState!==0)?!1:s,w=(()=>{if(n==null)return;if(t.listRef.current.size<=0)return{...n,inner:void 0};let a=Array.from(t.listRef.current.values());return{...n,inner:{listRef:{current:a},index:m.current}}})(),[B,A]=Ve(w),R=Ke(),D=K(t.optionsRef,r,n?B:null),y=X(),_=X();ue(()=>{var P;let a=t.optionsRef.current;a&&t.listboxState===0&&a!==((P=ot(a))==null?void 0:P.activeElement)&&(a==null||a.focus({preventScroll:!0}))},[t.listboxState,t.optionsRef,t.optionsRef.current]);let C=x(a=>{switch(_.dispose(),a.key){case S.Space:if(t.searchQuery!=="")return a.preventDefault(),a.stopPropagation(),l.search(a.key);case S.Enter:if(a.preventDefault(),a.stopPropagation(),t.activeOptionIndex!==null){let{dataRef:P}=t.options[t.activeOptionIndex];l.onChange(P.current.value)}t.mode===0&&(l.closeListbox(),re().nextFrame(()=>{var P;return(P=t.buttonRef.current)==null?void 0:P.focus({preventScroll:!0})}));break;case V(t.orientation,{vertical:S.ArrowDown,horizontal:S.ArrowRight}):return a.preventDefault(),a.stopPropagation(),l.goToOption(O.Next);case V(t.orientation,{vertical:S.ArrowUp,horizontal:S.ArrowLeft}):return a.preventDefault(),a.stopPropagation(),l.goToOption(O.Previous);case S.Home:case S.PageUp:return a.preventDefault(),a.stopPropagation(),l.goToOption(O.First);case S.End:case S.PageDown:return a.preventDefault(),a.stopPropagation(),l.goToOption(O.Last);case S.Escape:return a.preventDefault(),a.stopPropagation(),l.closeListbox(),y.nextFrame(()=>{var P;return(P=t.buttonRef.current)==null?void 0:P.focus({preventScroll:!0})});case S.Tab:a.preventDefault(),a.stopPropagation();break;default:a.key.length===1&&(l.search(a.key),_.setTimeout(()=>l.clearSearch(),350));break}}),U=Ie(()=>{var a;return(a=t.buttonRef.current)==null?void 0:a.id},[t.buttonRef.current]),F=N(()=>({open:t.listboxState===0}),[t]),f=ce(n?R():{},{id:i,ref:D,"aria-activedescendant":t.activeOptionIndex===null||(Q=t.options[t.activeOptionIndex])==null?void 0:Q.id,"aria-multiselectable":t.mode===1?!0:void 0,"aria-labelledby":U,"aria-orientation":t.orientation,onKeyDown:C,role:"listbox",tabIndex:0,style:{...A,"--button-width":Fe(t.buttonRef,!0).width}}),E=d?Xe:n?at:Z,u=d?{enabled:t.listboxState===0}:{},[k,g]=Ee(t.value);t.value!==k&&t.listboxState===0&&t.mode!==1&&g(t.value);let G=x(a=>t.compare(k,a));return h.createElement(E,{...u},h.createElement(q.Provider,{value:t.mode===1?t:{...t,isSelected:G}},W({ourProps:f,theirProps:v,slot:F,defaultTag:Ot,features:yt,visible:b,name:"Listbox.Options"})))}let gt="div";function Lt(e,r){let o=oe(),{id:i=`headlessui-listbox-option-${o}`,disabled:n=!1,value:d,...v}=e,t=te(fe)===!0,l=z("Listbox.Option"),p=$("Listbox.Option"),s=l.activeOptionIndex!==null?l.options[l.activeOptionIndex].id===i:!1,m=l.isSelected(d),c=H(null),b=ke(c),w=Me({disabled:n,value:d,domRef:c,get textValue(){return b()}}),B=K(r,c,f=>{f?l.listRef.current.set(i,f):l.listRef.current.delete(i)});ne(()=>{if(l.listboxState!==0||!s||l.activationTrigger===0)return;let f=re();return f.requestAnimationFrame(()=>{var E,u;(u=(E=c.current)==null?void 0:E.scrollIntoView)==null||u.call(E,{block:"nearest"})}),f.dispose},[c,s,l.listboxState,l.activationTrigger,l.activeOptionIndex]),ne(()=>{if(!t)return p.registerOption(i,w)},[w,i,t]);let A=x(f=>{if(n)return f.preventDefault();p.onChange(d),l.mode===0&&(p.closeListbox(),re().nextFrame(()=>{var E;return(E=l.buttonRef.current)==null?void 0:E.focus({preventScroll:!0})}))}),R=x(()=>{if(n)return p.goToOption(O.Nothing);p.goToOption(O.Specific,i)}),D=Ne(),y=x(f=>{D.update(f),!n&&(s||p.goToOption(O.Specific,i,0))}),_=x(f=>{D.wasMoved(f)&&(n||s||p.goToOption(O.Specific,i,0))}),C=x(f=>{D.wasMoved(f)&&(n||s&&p.goToOption(O.Nothing))}),U=N(()=>({active:s,focus:s,selected:m,disabled:n,selectedOption:m&&t}),[s,m,n,t]),F=t?{}:{id:i,ref:B,role:"option",tabIndex:n===!0?void 0:-1,"aria-disabled":n===!0?!0:void 0,"aria-selected":m,disabled:void 0,onClick:A,onFocus:R,onPointerEnter:y,onMouseEnter:y,onPointerMove:_,onMouseMove:_,onPointerLeave:C,onMouseLeave:C};return!m&&t?null:W({ourProps:F,theirProps:v,slot:U,defaultTag:gt,name:"Listbox.Option"})}let St=Z;function Rt(e,r){let{options:o,placeholder:i,...n}=e,v={ref:K(r)},t=z("ListboxSelectedOption"),l=N(()=>({}),[]),p=t.value===void 0||t.value===null||t.mode===1&&Array.isArray(t.value)&&t.value.length===0;return h.createElement(fe.Provider,{value:!0},W({ourProps:v,theirProps:{...n,children:h.createElement(h.Fragment,null,i&&p?i:o)},slot:l,defaultTag:St,name:"ListboxSelectedOption"}))}let Pt=j(Tt),At=j(mt),Et=it,Dt=j(vt),ht=j(Lt),To=j(Rt),xo=Object.assign(Pt,{Button:At,Label:Et,Options:Dt,Option:ht});export{xo as Listbox,At as ListboxButton,Et as ListboxLabel,ht as ListboxOption,Dt as ListboxOptions,To as ListboxSelectedOption}; | ||
"use client";import{useFocusRing as Ae}from"@react-aria/focus";import{useHover as Ee}from"@react-aria/interactions";import D,{Fragment as ce,createContext as ne,createRef as he,useCallback as fe,useContext as ie,useEffect as be,useMemo as U,useReducer as De,useRef as V,useState as _e}from"react";import{useActivePress as Ie}from'../../hooks/use-active-press.js';import{useByComparator as Ce}from'../../hooks/use-by-comparator.js';import{useComputed as Fe}from'../../hooks/use-computed.js';import{useControllable as Me}from'../../hooks/use-controllable.js';import{useDefaultValue as we}from'../../hooks/use-default-value.js';import{useDidElementMove as Be}from'../../hooks/use-did-element-move.js';import{useDisposables as J}from'../../hooks/use-disposables.js';import{useElementSize as ke}from'../../hooks/use-element-size.js';import{useEvent as f}from'../../hooks/use-event.js';import{useId as re}from'../../hooks/use-id.js';import{useInertOthers as Ue}from'../../hooks/use-inert-others.js';import{useIsoMorphicEffect as le}from'../../hooks/use-iso-morphic-effect.js';import{useLatestValue as Ne}from'../../hooks/use-latest-value.js';import{useOnDisappear as Ge}from'../../hooks/use-on-disappear.js';import{useOutsideClick as Ve}from'../../hooks/use-outside-click.js';import{useOwnerDocument as He}from'../../hooks/use-owner.js';import{useResolveButtonType as Ke}from'../../hooks/use-resolve-button-type.js';import{useScrollLock as je}from'../../hooks/use-scroll-lock.js';import{useSyncRefs as K}from'../../hooks/use-sync-refs.js';import{useTextValue as ze}from'../../hooks/use-text-value.js';import{useTrackedPointer as We}from'../../hooks/use-tracked-pointer.js';import{useDisabled as Qe}from'../../internal/disabled.js';import{FloatingProvider as Xe,useFloatingPanel as Je,useFloatingPanelProps as $e,useFloatingReference as qe,useFloatingReferenceProps as Ye,useResolvedAnchor as Ze}from'../../internal/floating.js';import{FormFields as et}from'../../internal/form-fields.js';import{useProvidedId as tt}from'../../internal/id.js';import{OpenClosedProvider as ot,State as $,useOpenClosed as nt}from'../../internal/open-closed.js';import{isDisabledReactIssue7711 as it}from'../../utils/bugs.js';import{Focus as m,calculateActiveIndex as ae}from'../../utils/calculate-active-index.js';import{disposables as se}from'../../utils/disposables.js';import{FocusableMode as rt,isFocusableElement as lt,sortByDomNode as at}from'../../utils/focus-management.js';import{attemptSubmit as st}from'../../utils/form.js';import{match as H}from'../../utils/match.js';import{getOwnerDocument as pt}from'../../utils/owner.js';import{RenderFeatures as Te,forwardRefWithAs as j,mergeProps as xe,render as z}from'../../utils/render.js';import{useDescribedBy as ut}from'../description/description.js';import{Keys as L}from'../keyboard.js';import{Label as dt,useLabelledBy as ct,useLabels as ft}from'../label/label.js';import{Portal as bt}from'../portal/portal.js';var Tt=(o=>(o[o.Open=0]="Open",o[o.Closed=1]="Closed",o))(Tt||{}),xt=(o=>(o[o.Single=0]="Single",o[o.Multi=1]="Multi",o))(xt||{}),mt=(o=>(o[o.Pointer=0]="Pointer",o[o.Other=1]="Other",o))(mt||{}),Ot=(n=>(n[n.OpenListbox=0]="OpenListbox",n[n.CloseListbox=1]="CloseListbox",n[n.GoToOption=2]="GoToOption",n[n.Search=3]="Search",n[n.ClearSearch=4]="ClearSearch",n[n.RegisterOption=5]="RegisterOption",n[n.UnregisterOption=6]="UnregisterOption",n))(Ot||{});function pe(e,l=o=>o){let o=e.activeOptionIndex!==null?e.options[e.activeOptionIndex]:null,i=at(l(e.options.slice()),T=>T.dataRef.current.domRef.current),p=o?i.indexOf(o):null;return p===-1&&(p=null),{options:i,activeOptionIndex:p}}let yt={[1](e){return e.dataRef.current.disabled||e.listboxState===1?e:{...e,activeOptionIndex:null,listboxState:1,__demoMode:!1}},[0](e){if(e.dataRef.current.disabled||e.listboxState===0)return e;let l=e.activeOptionIndex,{isSelected:o}=e.dataRef.current,i=e.options.findIndex(p=>o(p.dataRef.current.value));return i!==-1&&(l=i),{...e,listboxState:0,activeOptionIndex:l,__demoMode:!1}},[2](e,l){var T,O,n,a,t;if(e.dataRef.current.disabled||e.listboxState===1)return e;let o={...e,searchQuery:"",activationTrigger:(T=l.trigger)!=null?T:1,__demoMode:!1};if(l.focus===m.Nothing)return{...o,activeOptionIndex:null};if(l.focus===m.Specific)return{...o,activeOptionIndex:e.options.findIndex(r=>r.id===l.id)};if(l.focus===m.Previous){let r=e.activeOptionIndex;if(r!==null){let R=e.options[r].dataRef.current.domRef,c=ae(l,{resolveItems:()=>e.options,resolveActiveIndex:()=>e.activeOptionIndex,resolveId:d=>d.id,resolveDisabled:d=>d.dataRef.current.disabled});if(c!==null){let d=e.options[c].dataRef.current.domRef;if(((O=R.current)==null?void 0:O.previousElementSibling)===d.current||((n=d.current)==null?void 0:n.previousElementSibling)===null)return{...o,activeOptionIndex:c}}}}else if(l.focus===m.Next){let r=e.activeOptionIndex;if(r!==null){let R=e.options[r].dataRef.current.domRef,c=ae(l,{resolveItems:()=>e.options,resolveActiveIndex:()=>e.activeOptionIndex,resolveId:d=>d.id,resolveDisabled:d=>d.dataRef.current.disabled});if(c!==null){let d=e.options[c].dataRef.current.domRef;if(((a=R.current)==null?void 0:a.nextElementSibling)===d.current||((t=d.current)==null?void 0:t.nextElementSibling)===null)return{...o,activeOptionIndex:c}}}}let i=pe(e),p=ae(l,{resolveItems:()=>i.options,resolveActiveIndex:()=>i.activeOptionIndex,resolveId:r=>r.id,resolveDisabled:r=>r.dataRef.current.disabled});return{...o,...i,activeOptionIndex:p}},[3]:(e,l)=>{if(e.dataRef.current.disabled||e.listboxState===1)return e;let i=e.searchQuery!==""?0:1,p=e.searchQuery+l.value.toLowerCase(),O=(e.activeOptionIndex!==null?e.options.slice(e.activeOptionIndex+i).concat(e.options.slice(0,e.activeOptionIndex+i)):e.options).find(a=>{var t;return!a.dataRef.current.disabled&&((t=a.dataRef.current.textValue)==null?void 0:t.startsWith(p))}),n=O?e.options.indexOf(O):-1;return n===-1||n===e.activeOptionIndex?{...e,searchQuery:p}:{...e,searchQuery:p,activeOptionIndex:n,activationTrigger:1}},[4](e){return e.dataRef.current.disabled||e.listboxState===1||e.searchQuery===""?e:{...e,searchQuery:""}},[5]:(e,l)=>{let o={id:l.id,dataRef:l.dataRef},i=pe(e,p=>[...p,o]);return e.activeOptionIndex===null&&e.dataRef.current.isSelected(l.dataRef.current.value)&&(i.activeOptionIndex=i.options.indexOf(o)),{...e,...i}},[6]:(e,l)=>{let o=pe(e,i=>{let p=i.findIndex(T=>T.id===l.id);return p!==-1&&i.splice(p,1),i});return{...e,...o,activationTrigger:1}}},ue=ne(null);ue.displayName="ListboxActionsContext";function q(e){let l=ie(ue);if(l===null){let o=new Error(`<${e} /> is missing a parent <Listbox /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(o,q),o}return l}let Y=ne(null);Y.displayName="ListboxDataContext";function W(e){let l=ie(Y);if(l===null){let o=new Error(`<${e} /> is missing a parent <Listbox /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(o,W),o}return l}function vt(e,l){return H(l.type,yt,e,l)}let gt=ce;function Lt(e,l){var de;let o=Qe(),{value:i,defaultValue:p,form:T,name:O,onChange:n,by:a,invalid:t=!1,disabled:r=o||!1,horizontal:R=!1,multiple:c=!1,__demoMode:d=!1,...M}=e;const B=R?"horizontal":"vertical";let h=K(l),_=we(p),[S=c?[]:void 0,y]=Me(i,n,_),[I,v]=De(vt,{dataRef:he(),listboxState:d?0:1,options:[],searchQuery:"",activeOptionIndex:null,activationTrigger:1,optionsVisible:!1,__demoMode:d}),k=V({static:!1,hold:!1}),w=V(null),x=V(null),A=V(new Map),E=Ce(a),N=fe(b=>H(u.mode,{[1]:()=>S.some(g=>E(g,b)),[0]:()=>E(S,b)}),[S]),u=U(()=>({...I,value:S,disabled:r,invalid:t,mode:c?1:0,orientation:B,compare:E,isSelected:N,optionsPropsRef:k,buttonRef:w,optionsRef:x,listRef:A}),[S,r,t,c,I,A]);le(()=>{I.dataRef.current=u},[u]);let G=u.listboxState===0;Ve(G,[u.buttonRef,u.optionsRef],(b,g)=>{var C;v({type:1}),lt(g,rt.Loose)||(b.preventDefault(),(C=u.buttonRef.current)==null||C.focus())});let Z=U(()=>({open:u.listboxState===0,disabled:r,invalid:t,value:S}),[u,r,S,t]),Q=f(b=>{let g=u.options.find(C=>C.id===b);g&&oe(g.dataRef.current.value)}),ee=f(()=>{if(u.activeOptionIndex!==null){let{dataRef:b,id:g}=u.options[u.activeOptionIndex];oe(b.current.value),v({type:2,focus:m.Specific,id:g})}}),te=f(()=>v({type:0})),X=f(()=>v({type:1})),s=J(),P=f((b,g,C)=>{s.dispose(),s.microTask(()=>b===m.Specific?v({type:2,focus:m.Specific,id:g,trigger:C}):v({type:2,focus:b,trigger:C}))}),F=f((b,g)=>(v({type:5,id:b,dataRef:g}),()=>v({type:6,id:b}))),oe=f(b=>H(u.mode,{[0](){return y==null?void 0:y(b)},[1](){let g=u.value.slice(),C=g.findIndex(Pe=>E(Pe,b));return C===-1?g.push(b):g.splice(C,1),y==null?void 0:y(g)}})),Oe=f(b=>v({type:3,value:b})),ye=f(()=>v({type:4})),ve=U(()=>({onChange:oe,registerOption:F,goToOption:P,closeListbox:X,openListbox:te,selectActiveOption:ee,selectOption:Q,search:Oe,clearSearch:ye}),[]),[ge,Le]=ft({inherit:!0}),Se={ref:h},Re=fe(()=>{if(_!==void 0)return y==null?void 0:y(_)},[y,_]);return D.createElement(Le,{value:ge,props:{htmlFor:(de=u.buttonRef.current)==null?void 0:de.id},slot:{open:u.listboxState===0,disabled:r}},D.createElement(Xe,null,D.createElement(ue.Provider,{value:ve},D.createElement(Y.Provider,{value:u},D.createElement(ot,{value:H(u.listboxState,{[0]:$.Open,[1]:$.Closed})},O!=null&&S!=null&&D.createElement(et,{disabled:r,data:{[O]:S},form:T,onReset:Re}),z({ourProps:Se,theirProps:M,slot:Z,defaultTag:gt,name:"Listbox"}))))))}let St="button";function Rt(e,l){var N;let o=W("Listbox.Button"),i=q("Listbox.Button"),p=re(),T=tt(),{id:O=T||`headlessui-listbox-button-${p}`,disabled:n=o.disabled||!1,autoFocus:a=!1,...t}=e,r=K(o.buttonRef,l,qe()),R=Ye(),c=J(),d=f(u=>{switch(u.key){case L.Enter:st(u.currentTarget);break;case L.Space:case L.ArrowDown:u.preventDefault(),i.openListbox(),c.nextFrame(()=>{o.value||i.goToOption(m.First)});break;case L.ArrowUp:u.preventDefault(),i.openListbox(),c.nextFrame(()=>{o.value||i.goToOption(m.Last)});break}}),M=f(u=>{switch(u.key){case L.Space:u.preventDefault();break}}),B=f(u=>{if(it(u.currentTarget))return u.preventDefault();o.listboxState===0?(i.closeListbox(),c.nextFrame(()=>{var G;return(G=o.buttonRef.current)==null?void 0:G.focus({preventScroll:!0})})):(u.preventDefault(),i.openListbox())}),h=f(u=>u.preventDefault()),_=ct([O]),S=ut(),{isFocusVisible:y,focusProps:I}=Ae({autoFocus:a}),{isHovered:v,hoverProps:k}=Ee({isDisabled:n}),{pressed:w,pressProps:x}=Ie({disabled:n}),A=U(()=>({open:o.listboxState===0,active:w||o.listboxState===0,disabled:n,invalid:o.invalid,value:o.value,hover:v,focus:y,autofocus:a}),[o.listboxState,o.value,n,v,y,w,o.invalid,a]),E=xe(R(),{ref:r,id:O,type:Ke(e,o.buttonRef),"aria-haspopup":"listbox","aria-controls":(N=o.optionsRef.current)==null?void 0:N.id,"aria-expanded":o.listboxState===0,"aria-labelledby":_,"aria-describedby":S,disabled:n||void 0,autoFocus:a,onKeyDown:d,onKeyUp:M,onKeyPress:h,onClick:B},I,k,x);return z({ourProps:E,theirProps:t,slot:A,defaultTag:St,name:"Listbox.Button"})}let me=ne(!1),Pt="div",At=Te.RenderStrategy|Te.Static;function Et(e,l){var X;let o=re(),{id:i=`headlessui-listbox-options-${o}`,anchor:p,portal:T=!1,modal:O=!0,...n}=e,a=Ze(p);a&&(T=!0);let t=W("Listbox.Options"),r=q("Listbox.Options"),R=He(t.optionsRef),c=nt(),d=(()=>c!==null?(c&$.Open)===$.Open:t.listboxState===0)();Ge(d,t.buttonRef,r.closeListbox);let M=t.__demoMode?!1:O&&t.listboxState===0;je(M,R);let B=t.__demoMode?!1:O&&t.listboxState===0;Ue(B,{allowed:f(()=>[t.buttonRef.current,t.optionsRef.current])});let h=V(null);be(()=>{var P;if(!((P=a==null?void 0:a.to)!=null&&P.includes("selection")))return;if(!d){h.current=null;return}let s=Array.from(t.listRef.current.values());h.current=s.findIndex(F=>(F==null?void 0:F.dataset.selected)===""),h.current===-1&&(h.current=s.findIndex(F=>(F==null?void 0:F.dataset.disabled)===void 0),r.goToOption(m.First))},[d,t.listRef]);let _=t.listboxState!==0,y=Be(_,t.buttonRef)?!1:d,I=(()=>{if(a==null)return;if(t.listRef.current.size<=0)return{...a,inner:void 0};let s=Array.from(t.listRef.current.values());return{...a,inner:{listRef:{current:s},index:h.current}}})(),[v,k]=Je(I),w=$e(),x=K(t.optionsRef,l,a?v:null),A=J(),E=J();be(()=>{var P;let s=t.optionsRef.current;s&&t.listboxState===0&&s!==((P=pt(s))==null?void 0:P.activeElement)&&(s==null||s.focus({preventScroll:!0}))},[t.listboxState,t.optionsRef,t.optionsRef.current]);let N=f(s=>{switch(E.dispose(),s.key){case L.Space:if(t.searchQuery!=="")return s.preventDefault(),s.stopPropagation(),r.search(s.key);case L.Enter:if(s.preventDefault(),s.stopPropagation(),t.activeOptionIndex!==null){let{dataRef:P}=t.options[t.activeOptionIndex];r.onChange(P.current.value)}t.mode===0&&(r.closeListbox(),se().nextFrame(()=>{var P;return(P=t.buttonRef.current)==null?void 0:P.focus({preventScroll:!0})}));break;case H(t.orientation,{vertical:L.ArrowDown,horizontal:L.ArrowRight}):return s.preventDefault(),s.stopPropagation(),r.goToOption(m.Next);case H(t.orientation,{vertical:L.ArrowUp,horizontal:L.ArrowLeft}):return s.preventDefault(),s.stopPropagation(),r.goToOption(m.Previous);case L.Home:case L.PageUp:return s.preventDefault(),s.stopPropagation(),r.goToOption(m.First);case L.End:case L.PageDown:return s.preventDefault(),s.stopPropagation(),r.goToOption(m.Last);case L.Escape:return s.preventDefault(),s.stopPropagation(),r.closeListbox(),A.nextFrame(()=>{var P;return(P=t.buttonRef.current)==null?void 0:P.focus({preventScroll:!0})});case L.Tab:s.preventDefault(),s.stopPropagation();break;default:s.key.length===1&&(r.search(s.key),E.setTimeout(()=>r.clearSearch(),350));break}}),u=Fe(()=>{var s;return(s=t.buttonRef.current)==null?void 0:s.id},[t.buttonRef.current]),G=U(()=>({open:t.listboxState===0}),[t]),Z=xe(a?w():{},{id:i,ref:x,"aria-activedescendant":t.activeOptionIndex===null||(X=t.options[t.activeOptionIndex])==null?void 0:X.id,"aria-multiselectable":t.mode===1?!0:void 0,"aria-labelledby":u,"aria-orientation":t.orientation,onKeyDown:N,role:"listbox",tabIndex:0,style:{...n.style,...k,"--button-width":ke(t.buttonRef,!0).width}}),[Q,ee]=_e(t.value);t.value!==Q&&t.listboxState===0&&t.mode!==1&&ee(t.value);let te=f(s=>t.compare(Q,s));return D.createElement(bt,{enabled:T?e.static||d:!1},D.createElement(Y.Provider,{value:t.mode===1?t:{...t,isSelected:te}},z({ourProps:Z,theirProps:n,slot:G,defaultTag:Pt,features:At,visible:y,name:"Listbox.Options"})))}let ht="div";function Dt(e,l){let o=re(),{id:i=`headlessui-listbox-option-${o}`,disabled:p=!1,value:T,...O}=e,n=ie(me)===!0,a=W("Listbox.Option"),t=q("Listbox.Option"),r=a.activeOptionIndex!==null?a.options[a.activeOptionIndex].id===i:!1,R=a.isSelected(T),c=V(null),d=ze(c),M=Ne({disabled:p,value:T,domRef:c,get textValue(){return d()}}),B=K(l,c,x=>{x?a.listRef.current.set(i,x):a.listRef.current.delete(i)});le(()=>{if(a.__demoMode||a.listboxState!==0||!r||a.activationTrigger===0)return;let x=se();return x.requestAnimationFrame(()=>{var A,E;(E=(A=c.current)==null?void 0:A.scrollIntoView)==null||E.call(A,{block:"nearest"})}),x.dispose},[c,r,a.__demoMode,a.listboxState,a.activationTrigger,a.activeOptionIndex]),le(()=>{if(!n)return t.registerOption(i,M)},[M,i,n]);let h=f(x=>{if(p)return x.preventDefault();t.onChange(T),a.mode===0&&(t.closeListbox(),se().nextFrame(()=>{var A;return(A=a.buttonRef.current)==null?void 0:A.focus({preventScroll:!0})}))}),_=f(()=>{if(p)return t.goToOption(m.Nothing);t.goToOption(m.Specific,i)}),S=We(),y=f(x=>{S.update(x),!p&&(r||t.goToOption(m.Specific,i,0))}),I=f(x=>{S.wasMoved(x)&&(p||r||t.goToOption(m.Specific,i,0))}),v=f(x=>{S.wasMoved(x)&&(p||r&&t.goToOption(m.Nothing))}),k=U(()=>({active:r,focus:r,selected:R,disabled:p,selectedOption:R&&n}),[r,R,p,n]),w=n?{}:{id:i,ref:B,role:"option",tabIndex:p===!0?void 0:-1,"aria-disabled":p===!0?!0:void 0,"aria-selected":R,disabled:void 0,onClick:h,onFocus:_,onPointerEnter:y,onMouseEnter:y,onPointerMove:I,onMouseMove:I,onPointerLeave:v,onMouseLeave:v};return!R&&n?null:z({ourProps:w,theirProps:O,slot:k,defaultTag:ht,name:"Listbox.Option"})}let _t=ce;function It(e,l){let{options:o,placeholder:i,...p}=e,O={ref:K(l)},n=W("ListboxSelectedOption"),a=U(()=>({}),[]),t=n.value===void 0||n.value===null||n.mode===1&&Array.isArray(n.value)&&n.value.length===0;return D.createElement(me.Provider,{value:!0},z({ourProps:O,theirProps:{...p,children:D.createElement(D.Fragment,null,i&&t?i:o)},slot:a,defaultTag:_t,name:"ListboxSelectedOption"}))}let Ct=j(Lt),Ft=j(Rt),Mt=dt,wt=j(Et),Bt=j(Dt),kt=j(It),Ao=Object.assign(Ct,{Button:Ft,Label:Mt,Options:wt,Option:Bt,SelectedOption:kt});export{Ao as Listbox,Ft as ListboxButton,Mt as ListboxLabel,Bt as ListboxOption,wt as ListboxOptions,kt as ListboxSelectedOption}; |
@@ -39,2 +39,3 @@ import React, { type ElementType, type Ref } from 'react'; | ||
anchor?: AnchorProps; | ||
portal?: boolean; | ||
modal?: boolean; | ||
@@ -44,3 +45,3 @@ static?: boolean; | ||
}>; | ||
declare function ItemsFn<TTag extends ElementType = typeof DEFAULT_ITEMS_TAG>(props: MenuItemsProps<TTag>, ref: Ref<HTMLDivElement>): React.JSX.Element; | ||
declare function ItemsFn<TTag extends ElementType = typeof DEFAULT_ITEMS_TAG>(props: MenuItemsProps<TTag>, ref: Ref<HTMLElement>): React.JSX.Element; | ||
declare let DEFAULT_ITEM_TAG: React.ExoticComponent<{ | ||
@@ -104,9 +105,15 @@ children?: React.ReactNode; | ||
export declare let Menu: _internal_ComponentMenu & { | ||
/** @deprecated use `<MenuButton>` instead of `<Menu.Button>` */ | ||
Button: _internal_ComponentMenuButton; | ||
/** @deprecated use `<MenuItems>` instead of `<Menu.Items>` */ | ||
Items: _internal_ComponentMenuItems; | ||
/** @deprecated use `<MenuItem>` instead of `<Menu.Item>` */ | ||
Item: _internal_ComponentMenuItem; | ||
/** @deprecated use `<MenuSection>` instead of `<Menu.Section>` */ | ||
Section: _internal_ComponentMenuSection; | ||
/** @deprecated use `<MenuHeading>` instead of `<Menu.Heading>` */ | ||
Heading: _internal_ComponentMenuHeading; | ||
/** @deprecated use `<MenuSeparator>` instead of `<Menu.Separator>` */ | ||
Separator: _internal_ComponentMenuSeparator; | ||
}; | ||
export {}; |
@@ -1,1 +0,1 @@ | ||
"use client";import{useFocusRing as re}from"@react-aria/focus";import{useHover as oe}from"@react-aria/interactions";import E,{Fragment as W,createContext as ae,createRef as X,useContext as ie,useEffect as se,useMemo as U,useReducer as le,useRef as $}from"react";import{useActivePress as ue}from'../../hooks/use-active-press.js';import{useDidElementMove as pe}from'../../hooks/use-did-element-move.js';import{useDisposables as q}from'../../hooks/use-disposables.js';import{useElementSize as de}from'../../hooks/use-element-size.js';import{useEvent as M}from'../../hooks/use-event.js';import{useId as H}from'../../hooks/use-id.js';import{useIsoMorphicEffect as N}from'../../hooks/use-iso-morphic-effect.js';import{useOnDisappear as me}from'../../hooks/use-on-disappear.js';import{useOutsideClick as ce}from'../../hooks/use-outside-click.js';import{useOwnerDocument as fe}from'../../hooks/use-owner.js';import{useResolveButtonType as Te}from'../../hooks/use-resolve-button-type.js';import{useSyncRefs as B}from'../../hooks/use-sync-refs.js';import{useTextValue as ye}from'../../hooks/use-text-value.js';import{useTrackedPointer as ge}from'../../hooks/use-tracked-pointer.js';import{useTreeWalker as Ie}from'../../hooks/use-tree-walker.js';import{FloatingProvider as Me,useFloatingPanel as Pe,useFloatingPanelProps as Ae,useFloatingReference as Se,useFloatingReferenceProps as be}from'../../internal/floating.js';import{Modal as Ee,ModalFeatures as Re}from'../../internal/modal.js';import{OpenClosedProvider as ve,State as k,useOpenClosed as xe}from'../../internal/open-closed.js';import{isDisabledReactIssue7711 as _e}from'../../utils/bugs.js';import{Focus as y,calculateActiveIndex as K}from'../../utils/calculate-active-index.js';import{disposables as j}from'../../utils/disposables.js';import{Focus as z,FocusableMode as De,focusFrom as he,isFocusableElement as Fe,restoreFocusIfNecessary as Y,sortByDomNode as Ce}from'../../utils/focus-management.js';import{match as Z}from'../../utils/match.js';import{RenderFeatures as ee,forwardRefWithAs as R,mergeProps as te,render as v}from'../../utils/render.js';import{useDescriptions as Oe}from'../description/description.js';import{Keys as T}from'../keyboard.js';import{useLabelContext as Le,useLabels as ne}from'../label/label.js';import{Portal as Ge}from'../portal/portal.js';var Ue=(r=>(r[r.Open=0]="Open",r[r.Closed=1]="Closed",r))(Ue||{}),He=(r=>(r[r.Pointer=0]="Pointer",r[r.Other=1]="Other",r))(He||{}),Ne=(e=>(e[e.OpenMenu=0]="OpenMenu",e[e.CloseMenu=1]="CloseMenu",e[e.GoToItem=2]="GoToItem",e[e.Search=3]="Search",e[e.ClearSearch=4]="ClearSearch",e[e.RegisterItem=5]="RegisterItem",e[e.UnregisterItem=6]="UnregisterItem",e))(Ne||{});function Q(t,o=r=>r){let r=t.activeItemIndex!==null?t.items[t.activeItemIndex]:null,i=Ce(o(t.items.slice()),l=>l.dataRef.current.domRef.current),n=r?i.indexOf(r):null;return n===-1&&(n=null),{items:i,activeItemIndex:n}}let Be={[1](t){return t.menuState===1?t:{...t,activeItemIndex:null,menuState:1}},[0](t){return t.menuState===0?t:{...t,__demoMode:!1,menuState:0}},[2]:(t,o)=>{var l,u,e,s,c;if(t.menuState===1)return t;let r={...t,searchQuery:"",activationTrigger:(l=o.trigger)!=null?l:1};if(o.focus===y.Nothing)return{...r,activeItemIndex:null};if(o.focus===y.Specific)return{...r,activeItemIndex:t.items.findIndex(d=>d.id===o.id)};if(o.focus===y.Previous){let d=t.activeItemIndex;if(d!==null){let g=t.items[d].dataRef.current.domRef,m=K(o,{resolveItems:()=>t.items,resolveActiveIndex:()=>t.activeItemIndex,resolveId:p=>p.id,resolveDisabled:p=>p.dataRef.current.disabled});if(m!==null){let p=t.items[m].dataRef.current.domRef;if(((u=g.current)==null?void 0:u.previousElementSibling)===p.current||((e=p.current)==null?void 0:e.previousElementSibling)===null)return{...r,activeItemIndex:m}}}}else if(o.focus===y.Next){let d=t.activeItemIndex;if(d!==null){let g=t.items[d].dataRef.current.domRef,m=K(o,{resolveItems:()=>t.items,resolveActiveIndex:()=>t.activeItemIndex,resolveId:p=>p.id,resolveDisabled:p=>p.dataRef.current.disabled});if(m!==null){let p=t.items[m].dataRef.current.domRef;if(((s=g.current)==null?void 0:s.nextElementSibling)===p.current||((c=p.current)==null?void 0:c.nextElementSibling)===null)return{...r,activeItemIndex:m}}}}let i=Q(t),n=K(o,{resolveItems:()=>i.items,resolveActiveIndex:()=>i.activeItemIndex,resolveId:d=>d.id,resolveDisabled:d=>d.dataRef.current.disabled});return{...r,...i,activeItemIndex:n}},[3]:(t,o)=>{let i=t.searchQuery!==""?0:1,n=t.searchQuery+o.value.toLowerCase(),u=(t.activeItemIndex!==null?t.items.slice(t.activeItemIndex+i).concat(t.items.slice(0,t.activeItemIndex+i)):t.items).find(s=>{var c;return((c=s.dataRef.current.textValue)==null?void 0:c.startsWith(n))&&!s.dataRef.current.disabled}),e=u?t.items.indexOf(u):-1;return e===-1||e===t.activeItemIndex?{...t,searchQuery:n}:{...t,searchQuery:n,activeItemIndex:e,activationTrigger:1}},[4](t){return t.searchQuery===""?t:{...t,searchQuery:"",searchActiveItemIndex:null}},[5]:(t,o)=>{let r=Q(t,i=>[...i,{id:o.id,dataRef:o.dataRef}]);return{...t,...r}},[6]:(t,o)=>{let r=Q(t,i=>{let n=i.findIndex(l=>l.id===o.id);return n!==-1&&i.splice(n,1),i});return{...t,...r,activationTrigger:1}}},J=ae(null);J.displayName="MenuContext";function w(t){let o=ie(J);if(o===null){let r=new Error(`<${t} /> is missing a parent <Menu /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(r,w),r}return o}function ke(t,o){return Z(o.type,Be,t,o)}let we=W;function We(t,o){let{__demoMode:r=!1,...i}=t,n=le(ke,{__demoMode:r,menuState:r?0:1,buttonRef:X(),itemsRef:X(),items:[],searchQuery:"",activeItemIndex:null,activationTrigger:1}),[{menuState:l,itemsRef:u,buttonRef:e},s]=n,c=B(o);ce([e,u],(p,A)=>{var P;s({type:1}),Fe(A,De.Loose)||(p.preventDefault(),(P=e.current)==null||P.focus())},l===0);let d=M(()=>{s({type:1})}),g=U(()=>({open:l===0,close:d}),[l,d]),m={ref:c};return E.createElement(Me,null,E.createElement(J.Provider,{value:n},E.createElement(ve,{value:Z(l,{[0]:k.Open,[1]:k.Closed})},v({ourProps:m,theirProps:i,slot:g,defaultTag:we,name:"Menu"}))))}let Ke="button";function je(t,o){var D;let r=H(),{id:i=`headlessui-menu-button-${r}`,disabled:n=!1,autoFocus:l=!1,...u}=t,[e,s]=w("Menu.Button"),c=be(),d=B(e.buttonRef,o,Se()),g=q(),m=M(f=>{switch(f.key){case T.Space:case T.Enter:case T.ArrowDown:f.preventDefault(),f.stopPropagation(),s({type:0}),g.nextFrame(()=>s({type:2,focus:y.First}));break;case T.ArrowUp:f.preventDefault(),f.stopPropagation(),s({type:0}),g.nextFrame(()=>s({type:2,focus:y.Last}));break}}),p=M(f=>{switch(f.key){case T.Space:f.preventDefault();break}}),A=M(f=>{if(_e(f.currentTarget))return f.preventDefault();n||(e.menuState===0?(s({type:1}),g.nextFrame(()=>{var h;return(h=e.buttonRef.current)==null?void 0:h.focus({preventScroll:!0})})):(f.preventDefault(),s({type:0})))}),{isFocusVisible:P,focusProps:S}=re({autoFocus:l}),{isHovered:x,hoverProps:_}=oe({isDisabled:n}),{pressed:b,pressProps:F}=ue({disabled:n}),C=U(()=>({open:e.menuState===0,active:b||e.menuState===0,disabled:n,hover:x,focus:P,autofocus:l}),[e,x,P,b,n,l]),O=te(c(),{ref:d,id:i,type:Te(t,e.buttonRef),"aria-haspopup":"menu","aria-controls":(D=e.itemsRef.current)==null?void 0:D.id,"aria-expanded":e.menuState===0,disabled:n||void 0,autoFocus:l,onKeyDown:m,onKeyUp:p,onClick:A},S,_,F);return v({ourProps:O,theirProps:u,slot:C,defaultTag:Ke,name:"Menu.Button"})}let Qe="div",Je=ee.RenderStrategy|ee.Static;function Ve(t,o){var h,I;let r=H(),{id:i=`headlessui-menu-items-${r}`,anchor:n,modal:l,...u}=t,[e,s]=w("Menu.Items"),[c,d]=Pe(n),g=Ae(),m=B(e.itemsRef,o,n?c:null),p=fe(e.itemsRef);n!=null&&l==null?l=!0:l==null&&(l=!1);let A=q(),P=xe(),S=(()=>P!==null?(P&k.Open)===k.Open:e.menuState===0)();me(e.buttonRef,()=>s({type:1}),S);let _=pe(e.buttonRef,e.menuState!==0)?!1:S;se(()=>{let a=e.itemsRef.current;a&&e.menuState===0&&a!==(p==null?void 0:p.activeElement)&&a.focus({preventScroll:!0})},[e.menuState,e.itemsRef,p,e.itemsRef.current]),Ie({container:e.itemsRef.current,enabled:e.menuState===0,accept(a){return a.getAttribute("role")==="menuitem"?NodeFilter.FILTER_REJECT:a.hasAttribute("role")?NodeFilter.FILTER_SKIP:NodeFilter.FILTER_ACCEPT},walk(a){a.setAttribute("role","none")}});let b=M(a=>{var L,V;switch(A.dispose(),a.key){case T.Space:if(e.searchQuery!=="")return a.preventDefault(),a.stopPropagation(),s({type:3,value:a.key});case T.Enter:if(a.preventDefault(),a.stopPropagation(),s({type:1}),e.activeItemIndex!==null){let{dataRef:G}=e.items[e.activeItemIndex];(V=(L=G.current)==null?void 0:L.domRef.current)==null||V.click()}Y(e.buttonRef.current);break;case T.ArrowDown:return a.preventDefault(),a.stopPropagation(),s({type:2,focus:y.Next});case T.ArrowUp:return a.preventDefault(),a.stopPropagation(),s({type:2,focus:y.Previous});case T.Home:case T.PageUp:return a.preventDefault(),a.stopPropagation(),s({type:2,focus:y.First});case T.End:case T.PageDown:return a.preventDefault(),a.stopPropagation(),s({type:2,focus:y.Last});case T.Escape:a.preventDefault(),a.stopPropagation(),s({type:1}),j().nextFrame(()=>{var G;return(G=e.buttonRef.current)==null?void 0:G.focus({preventScroll:!0})});break;case T.Tab:a.preventDefault(),a.stopPropagation(),s({type:1}),j().microTask(()=>{he(e.buttonRef.current,a.shiftKey?z.Previous:z.Next)});break;default:a.key.length===1&&(s({type:3,value:a.key}),A.setTimeout(()=>s({type:4}),350));break}}),F=M(a=>{switch(a.key){case T.Space:a.preventDefault();break}}),C=U(()=>({open:e.menuState===0}),[e]),O=te(n?g():{},{"aria-activedescendant":e.activeItemIndex===null||(h=e.items[e.activeItemIndex])==null?void 0:h.id,"aria-labelledby":(I=e.buttonRef.current)==null?void 0:I.id,id:i,onKeyDown:b,onKeyUp:F,role:"menu",tabIndex:0,ref:m,style:{...d,"--button-width":de(e.buttonRef,!0).width}}),D=l?Ee:n?Ge:W,f=l?{features:Re.ScrollLock,enabled:e.menuState===0}:{};return E.createElement(D,{...f},v({ourProps:O,theirProps:u,slot:C,defaultTag:Qe,features:Je,visible:_,name:"Menu.Items"}))}let Xe=W;function $e(t,o){let r=H(),{id:i=`headlessui-menu-item-${r}`,disabled:n=!1,...l}=t,[u,e]=w("Menu.Item"),s=u.activeItemIndex!==null?u.items[u.activeItemIndex].id===i:!1,c=$(null),d=B(o,c);N(()=>{if(u.__demoMode||u.menuState!==0||!s||u.activationTrigger===0)return;let I=j();return I.requestAnimationFrame(()=>{var a,L;(L=(a=c.current)==null?void 0:a.scrollIntoView)==null||L.call(a,{block:"nearest"})}),I.dispose},[u.__demoMode,c,s,u.menuState,u.activationTrigger,u.activeItemIndex]);let g=ye(c),m=$({disabled:n,domRef:c,get textValue(){return g()}});N(()=>{m.current.disabled=n},[m,n]),N(()=>(e({type:5,id:i,dataRef:m}),()=>e({type:6,id:i})),[m,i]);let p=M(()=>{e({type:1})}),A=M(I=>{if(n)return I.preventDefault();e({type:1}),Y(u.buttonRef.current)}),P=M(()=>{if(n)return e({type:2,focus:y.Nothing});e({type:2,focus:y.Specific,id:i})}),S=ge(),x=M(I=>{S.update(I),!n&&(s||e({type:2,focus:y.Specific,id:i,trigger:0}))}),_=M(I=>{S.wasMoved(I)&&(n||s||e({type:2,focus:y.Specific,id:i,trigger:0}))}),b=M(I=>{S.wasMoved(I)&&(n||s&&e({type:2,focus:y.Nothing}))}),[F,C]=ne(),[O,D]=Oe(),f=U(()=>({active:s,focus:s,disabled:n,close:p}),[s,n,p]);return E.createElement(C,null,E.createElement(D,null,v({ourProps:{id:i,ref:d,role:"menuitem",tabIndex:n===!0?void 0:-1,"aria-disabled":n===!0?!0:void 0,"aria-labelledby":F,"aria-describedby":O,disabled:void 0,onClick:A,onFocus:P,onPointerEnter:x,onMouseEnter:x,onPointerMove:_,onMouseMove:_,onPointerLeave:b,onMouseLeave:b},theirProps:l,slot:f,defaultTag:Xe,name:"Menu.Item"})))}let qe="div";function ze(t,o){let[r,i]=ne();return E.createElement(i,null,v({ourProps:{ref:o,"aria-labelledby":r,role:"group"},theirProps:t,slot:{},defaultTag:qe,name:"Menu.Section"}))}let Ye="header";function Ze(t,o){let r=H(),{id:i=`headlessui-menu-heading-${r}`,...n}=t,l=Le();N(()=>l.register(i),[i,l.register]);let u={id:i,ref:o,role:"presentation",...l.props};return v({ourProps:u,theirProps:n,slot:{},defaultTag:Ye,name:"Menu.Heading"})}let et="div";function tt(t,o){return v({ourProps:{ref:o,role:"separator"},theirProps:t,slot:{},defaultTag:et,name:"Menu.Separator"})}let nt=R(We),rt=R(je),ot=R(Ve),at=R($e),it=R(ze),st=R(Ze),lt=R(tt),kt=Object.assign(nt,{Button:rt,Items:ot,Item:at,Section:it,Heading:st,Separator:lt});export{kt as Menu,rt as MenuButton,st as MenuHeading,at as MenuItem,ot as MenuItems,it as MenuSection,lt as MenuSeparator}; | ||
"use client";import{useFocusRing as ie}from"@react-aria/focus";import{useHover as se}from"@react-aria/interactions";import x,{Fragment as q,createContext as le,createRef as z,useContext as ue,useEffect as pe,useMemo as H,useReducer as de,useRef as Y}from"react";import{useActivePress as me}from'../../hooks/use-active-press.js';import{useDidElementMove as ce}from'../../hooks/use-did-element-move.js';import{useDisposables as Z}from'../../hooks/use-disposables.js';import{useElementSize as fe}from'../../hooks/use-element-size.js';import{useEvent as I}from'../../hooks/use-event.js';import{useId as N}from'../../hooks/use-id.js';import{useInertOthers as Te}from'../../hooks/use-inert-others.js';import{useIsoMorphicEffect as k}from'../../hooks/use-iso-morphic-effect.js';import{useOnDisappear as ye}from'../../hooks/use-on-disappear.js';import{useOutsideClick as ge}from'../../hooks/use-outside-click.js';import{useOwnerDocument as Ie}from'../../hooks/use-owner.js';import{useResolveButtonType as Me}from'../../hooks/use-resolve-button-type.js';import{useScrollLock as Ae}from'../../hooks/use-scroll-lock.js';import{useSyncRefs as B}from'../../hooks/use-sync-refs.js';import{useTextValue as Pe}from'../../hooks/use-text-value.js';import{useTrackedPointer as be}from'../../hooks/use-tracked-pointer.js';import{useTreeWalker as Se}from'../../hooks/use-tree-walker.js';import{FloatingProvider as Ee,useFloatingPanel as Re,useFloatingPanelProps as xe,useFloatingReference as ve,useFloatingReferenceProps as _e,useResolvedAnchor as De}from'../../internal/floating.js';import{OpenClosedProvider as he,State as w,useOpenClosed as Fe}from'../../internal/open-closed.js';import{isDisabledReactIssue7711 as Ce}from'../../utils/bugs.js';import{Focus as y,calculateActiveIndex as W}from'../../utils/calculate-active-index.js';import{disposables as j}from'../../utils/disposables.js';import{Focus as ee,FocusableMode as Oe,focusFrom as Le,isFocusableElement as Ge,restoreFocusIfNecessary as te,sortByDomNode as Ue}from'../../utils/focus-management.js';import{match as ne}from'../../utils/match.js';import{RenderFeatures as re,forwardRefWithAs as v,mergeProps as oe,render as _}from'../../utils/render.js';import{useDescriptions as He}from'../description/description.js';import{Keys as T}from'../keyboard.js';import{useLabelContext as Ne,useLabels as ae}from'../label/label.js';import{Portal as ke}from'../portal/portal.js';var Be=(r=>(r[r.Open=0]="Open",r[r.Closed=1]="Closed",r))(Be||{}),we=(r=>(r[r.Pointer=0]="Pointer",r[r.Other=1]="Other",r))(we||{}),Ke=(n=>(n[n.OpenMenu=0]="OpenMenu",n[n.CloseMenu=1]="CloseMenu",n[n.GoToItem=2]="GoToItem",n[n.Search=3]="Search",n[n.ClearSearch=4]="ClearSearch",n[n.RegisterItem=5]="RegisterItem",n[n.UnregisterItem=6]="UnregisterItem",n))(Ke||{});function Q(e,a=r=>r){let r=e.activeItemIndex!==null?e.items[e.activeItemIndex]:null,i=Ue(a(e.items.slice()),p=>p.dataRef.current.domRef.current),o=r?i.indexOf(r):null;return o===-1&&(o=null),{items:i,activeItemIndex:o}}let We={[1](e){return e.menuState===1?e:{...e,activeItemIndex:null,menuState:1}},[0](e){return e.menuState===0?e:{...e,__demoMode:!1,menuState:0}},[2]:(e,a)=>{var p,d,n,l,t;if(e.menuState===1)return e;let r={...e,searchQuery:"",activationTrigger:(p=a.trigger)!=null?p:1,__demoMode:!1};if(a.focus===y.Nothing)return{...r,activeItemIndex:null};if(a.focus===y.Specific)return{...r,activeItemIndex:e.items.findIndex(u=>u.id===a.id)};if(a.focus===y.Previous){let u=e.activeItemIndex;if(u!==null){let g=e.items[u].dataRef.current.domRef,c=W(a,{resolveItems:()=>e.items,resolveActiveIndex:()=>e.activeItemIndex,resolveId:m=>m.id,resolveDisabled:m=>m.dataRef.current.disabled});if(c!==null){let m=e.items[c].dataRef.current.domRef;if(((d=g.current)==null?void 0:d.previousElementSibling)===m.current||((n=m.current)==null?void 0:n.previousElementSibling)===null)return{...r,activeItemIndex:c}}}}else if(a.focus===y.Next){let u=e.activeItemIndex;if(u!==null){let g=e.items[u].dataRef.current.domRef,c=W(a,{resolveItems:()=>e.items,resolveActiveIndex:()=>e.activeItemIndex,resolveId:m=>m.id,resolveDisabled:m=>m.dataRef.current.disabled});if(c!==null){let m=e.items[c].dataRef.current.domRef;if(((l=g.current)==null?void 0:l.nextElementSibling)===m.current||((t=m.current)==null?void 0:t.nextElementSibling)===null)return{...r,activeItemIndex:c}}}}let i=Q(e),o=W(a,{resolveItems:()=>i.items,resolveActiveIndex:()=>i.activeItemIndex,resolveId:u=>u.id,resolveDisabled:u=>u.dataRef.current.disabled});return{...r,...i,activeItemIndex:o}},[3]:(e,a)=>{let i=e.searchQuery!==""?0:1,o=e.searchQuery+a.value.toLowerCase(),d=(e.activeItemIndex!==null?e.items.slice(e.activeItemIndex+i).concat(e.items.slice(0,e.activeItemIndex+i)):e.items).find(l=>{var t;return((t=l.dataRef.current.textValue)==null?void 0:t.startsWith(o))&&!l.dataRef.current.disabled}),n=d?e.items.indexOf(d):-1;return n===-1||n===e.activeItemIndex?{...e,searchQuery:o}:{...e,searchQuery:o,activeItemIndex:n,activationTrigger:1}},[4](e){return e.searchQuery===""?e:{...e,searchQuery:"",searchActiveItemIndex:null}},[5]:(e,a)=>{let r=Q(e,i=>[...i,{id:a.id,dataRef:a.dataRef}]);return{...e,...r}},[6]:(e,a)=>{let r=Q(e,i=>{let o=i.findIndex(p=>p.id===a.id);return o!==-1&&i.splice(o,1),i});return{...e,...r,activationTrigger:1}}},J=le(null);J.displayName="MenuContext";function K(e){let a=ue(J);if(a===null){let r=new Error(`<${e} /> is missing a parent <Menu /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(r,K),r}return a}function je(e,a){return ne(a.type,We,e,a)}let Qe=q;function Je(e,a){let{__demoMode:r=!1,...i}=e,o=de(je,{__demoMode:r,menuState:r?0:1,buttonRef:z(),itemsRef:z(),items:[],searchQuery:"",activeItemIndex:null,activationTrigger:1}),[{menuState:p,itemsRef:d,buttonRef:n},l]=o,t=B(a);ge(p===0,[n,d],(E,M)=>{var P;l({type:1}),Ge(M,Oe.Loose)||(E.preventDefault(),(P=n.current)==null||P.focus())});let g=I(()=>{l({type:1})}),c=H(()=>({open:p===0,close:g}),[p,g]),m={ref:t};return x.createElement(Ee,null,x.createElement(J.Provider,{value:o},x.createElement(he,{value:ne(p,{[0]:w.Open,[1]:w.Closed})},_({ourProps:m,theirProps:i,slot:c,defaultTag:Qe,name:"Menu"}))))}let Ve="button";function Xe(e,a){var D;let r=N(),{id:i=`headlessui-menu-button-${r}`,disabled:o=!1,autoFocus:p=!1,...d}=e,[n,l]=K("Menu.Button"),t=_e(),u=B(n.buttonRef,a,ve()),g=Z(),c=I(f=>{switch(f.key){case T.Space:case T.Enter:case T.ArrowDown:f.preventDefault(),f.stopPropagation(),l({type:0}),g.nextFrame(()=>l({type:2,focus:y.First}));break;case T.ArrowUp:f.preventDefault(),f.stopPropagation(),l({type:0}),g.nextFrame(()=>l({type:2,focus:y.Last}));break}}),m=I(f=>{switch(f.key){case T.Space:f.preventDefault();break}}),E=I(f=>{if(Ce(f.currentTarget))return f.preventDefault();o||(n.menuState===0?(l({type:1}),g.nextFrame(()=>{var O;return(O=n.buttonRef.current)==null?void 0:O.focus({preventScroll:!0})})):(f.preventDefault(),l({type:0})))}),{isFocusVisible:M,focusProps:P}=ie({autoFocus:p}),{isHovered:b,hoverProps:S}=se({isDisabled:o}),{pressed:R,pressProps:F}=me({disabled:o}),C=H(()=>({open:n.menuState===0,active:R||n.menuState===0,disabled:o,hover:b,focus:M,autofocus:p}),[n,b,M,R,o,p]),G=oe(t(),{ref:u,id:i,type:Me(e,n.buttonRef),"aria-haspopup":"menu","aria-controls":(D=n.itemsRef.current)==null?void 0:D.id,"aria-expanded":n.menuState===0,disabled:o||void 0,autoFocus:p,onKeyDown:c,onKeyUp:m,onClick:E},P,S,F);return _({ourProps:G,theirProps:d,slot:C,defaultTag:Ve,name:"Menu.Button"})}let $e="div",qe=re.RenderStrategy|re.Static;function ze(e,a){var L,V;let r=N(),{id:i=`headlessui-menu-items-${r}`,anchor:o,portal:p=!1,modal:d=!0,...n}=e,l=De(o),[t,u]=K("Menu.Items"),[g,c]=Re(l),m=xe(),E=B(t.itemsRef,a,l?g:null),M=Ie(t.itemsRef);l&&(p=!0);let P=Z(),b=Fe(),S=(()=>b!==null?(b&w.Open)===w.Open:t.menuState===0)();ye(S,t.buttonRef,()=>{u({type:1})});let R=t.__demoMode?!1:d&&t.menuState===0;Ae(R,M);let F=t.__demoMode?!1:d&&t.menuState===0;Te(F,{allowed:I(()=>[t.buttonRef.current,t.itemsRef.current])});let C=t.menuState!==0,D=ce(C,t.buttonRef)?!1:S;pe(()=>{let s=t.itemsRef.current;s&&t.menuState===0&&s!==(M==null?void 0:M.activeElement)&&s.focus({preventScroll:!0})},[t.menuState,t.itemsRef,M,t.itemsRef.current]),Se(t.menuState===0,{container:t.itemsRef.current,accept(s){return s.getAttribute("role")==="menuitem"?NodeFilter.FILTER_REJECT:s.hasAttribute("role")?NodeFilter.FILTER_SKIP:NodeFilter.FILTER_ACCEPT},walk(s){s.setAttribute("role","none")}});let f=I(s=>{var X,$;switch(P.dispose(),s.key){case T.Space:if(t.searchQuery!=="")return s.preventDefault(),s.stopPropagation(),u({type:3,value:s.key});case T.Enter:if(s.preventDefault(),s.stopPropagation(),u({type:1}),t.activeItemIndex!==null){let{dataRef:U}=t.items[t.activeItemIndex];($=(X=U.current)==null?void 0:X.domRef.current)==null||$.click()}te(t.buttonRef.current);break;case T.ArrowDown:return s.preventDefault(),s.stopPropagation(),u({type:2,focus:y.Next});case T.ArrowUp:return s.preventDefault(),s.stopPropagation(),u({type:2,focus:y.Previous});case T.Home:case T.PageUp:return s.preventDefault(),s.stopPropagation(),u({type:2,focus:y.First});case T.End:case T.PageDown:return s.preventDefault(),s.stopPropagation(),u({type:2,focus:y.Last});case T.Escape:s.preventDefault(),s.stopPropagation(),u({type:1}),j().nextFrame(()=>{var U;return(U=t.buttonRef.current)==null?void 0:U.focus({preventScroll:!0})});break;case T.Tab:s.preventDefault(),s.stopPropagation(),u({type:1}),j().microTask(()=>{Le(t.buttonRef.current,s.shiftKey?ee.Previous:ee.Next)});break;default:s.key.length===1&&(u({type:3,value:s.key}),P.setTimeout(()=>u({type:4}),350));break}}),O=I(s=>{switch(s.key){case T.Space:s.preventDefault();break}}),A=H(()=>({open:t.menuState===0}),[t]),h=oe(l?m():{},{"aria-activedescendant":t.activeItemIndex===null||(L=t.items[t.activeItemIndex])==null?void 0:L.id,"aria-labelledby":(V=t.buttonRef.current)==null?void 0:V.id,id:i,onKeyDown:f,onKeyUp:O,role:"menu",tabIndex:0,ref:E,style:{...n.style,...c,"--button-width":fe(t.buttonRef,!0).width}});return x.createElement(ke,{enabled:p?e.static||S:!1},_({ourProps:h,theirProps:n,slot:A,defaultTag:$e,features:qe,visible:D,name:"Menu.Items"}))}let Ye=q;function Ze(e,a){let r=N(),{id:i=`headlessui-menu-item-${r}`,disabled:o=!1,...p}=e,[d,n]=K("Menu.Item"),l=d.activeItemIndex!==null?d.items[d.activeItemIndex].id===i:!1,t=Y(null),u=B(a,t);k(()=>{if(d.__demoMode||d.menuState!==0||!l||d.activationTrigger===0)return;let A=j();return A.requestAnimationFrame(()=>{var h,L;(L=(h=t.current)==null?void 0:h.scrollIntoView)==null||L.call(h,{block:"nearest"})}),A.dispose},[d.__demoMode,t,l,d.menuState,d.activationTrigger,d.activeItemIndex]);let g=Pe(t),c=Y({disabled:o,domRef:t,get textValue(){return g()}});k(()=>{c.current.disabled=o},[c,o]),k(()=>(n({type:5,id:i,dataRef:c}),()=>n({type:6,id:i})),[c,i]);let m=I(()=>{n({type:1})}),E=I(A=>{if(o)return A.preventDefault();n({type:1}),te(d.buttonRef.current)}),M=I(()=>{if(o)return n({type:2,focus:y.Nothing});n({type:2,focus:y.Specific,id:i})}),P=be(),b=I(A=>{P.update(A),!o&&(l||n({type:2,focus:y.Specific,id:i,trigger:0}))}),S=I(A=>{P.wasMoved(A)&&(o||l||n({type:2,focus:y.Specific,id:i,trigger:0}))}),R=I(A=>{P.wasMoved(A)&&(o||l&&n({type:2,focus:y.Nothing}))}),[F,C]=ae(),[G,D]=He(),f=H(()=>({active:l,focus:l,disabled:o,close:m}),[l,o,m]);return x.createElement(C,null,x.createElement(D,null,_({ourProps:{id:i,ref:u,role:"menuitem",tabIndex:o===!0?void 0:-1,"aria-disabled":o===!0?!0:void 0,"aria-labelledby":F,"aria-describedby":G,disabled:void 0,onClick:E,onFocus:M,onPointerEnter:b,onMouseEnter:b,onPointerMove:S,onMouseMove:S,onPointerLeave:R,onMouseLeave:R},theirProps:p,slot:f,defaultTag:Ye,name:"Menu.Item"})))}let et="div";function tt(e,a){let[r,i]=ae();return x.createElement(i,null,_({ourProps:{ref:a,"aria-labelledby":r,role:"group"},theirProps:e,slot:{},defaultTag:et,name:"Menu.Section"}))}let nt="header";function rt(e,a){let r=N(),{id:i=`headlessui-menu-heading-${r}`,...o}=e,p=Ne();k(()=>p.register(i),[i,p.register]);let d={id:i,ref:a,role:"presentation",...p.props};return _({ourProps:d,theirProps:o,slot:{},defaultTag:nt,name:"Menu.Heading"})}let ot="div";function at(e,a){return _({ourProps:{ref:a,role:"separator"},theirProps:e,slot:{},defaultTag:ot,name:"Menu.Separator"})}let it=v(Je),st=v(Xe),lt=v(ze),ut=v(Ze),pt=v(tt),dt=v(rt),mt=v(at),Qt=Object.assign(it,{Button:st,Items:lt,Item:ut,Section:pt,Heading:dt,Separator:mt});export{Qt as Menu,st as MenuButton,dt as MenuHeading,ut as MenuItem,lt as MenuItems,pt as MenuSection,mt as MenuSeparator}; |
@@ -38,3 +38,3 @@ import React, { type ElementType, type MouseEventHandler, type MutableRefObject, type Ref } from 'react'; | ||
export type PopoverOverlayProps<TTag extends ElementType = typeof DEFAULT_OVERLAY_TAG> = Props<TTag, OverlayRenderPropArg, OverlayPropsWeControl, PropsForFeatures<typeof OverlayRenderFeatures>>; | ||
declare function OverlayFn<TTag extends ElementType = typeof DEFAULT_OVERLAY_TAG>(props: PopoverOverlayProps<TTag>, ref: Ref<HTMLDivElement>): React.ReactElement<any, string | React.JSXElementConstructor<any>> | null; | ||
declare function OverlayFn<TTag extends ElementType = typeof DEFAULT_OVERLAY_TAG>(props: PopoverOverlayProps<TTag>, ref: Ref<HTMLElement>): React.ReactElement<any, string | React.JSXElementConstructor<any>> | null; | ||
declare let DEFAULT_PANEL_TAG: "div"; | ||
@@ -49,2 +49,3 @@ type PanelRenderPropArg = { | ||
anchor?: AnchorProps; | ||
portal?: boolean; | ||
modal?: boolean; | ||
@@ -54,3 +55,3 @@ static?: boolean; | ||
}>; | ||
declare function PanelFn<TTag extends ElementType = typeof DEFAULT_PANEL_TAG>(props: PopoverPanelProps<TTag>, ref: Ref<HTMLDivElement>): React.JSX.Element; | ||
declare function PanelFn<TTag extends ElementType = typeof DEFAULT_PANEL_TAG>(props: PopoverPanelProps<TTag>, ref: Ref<HTMLElement>): React.JSX.Element; | ||
declare let DEFAULT_GROUP_TAG: "div"; | ||
@@ -81,7 +82,11 @@ type GroupRenderPropArg = {}; | ||
export declare let Popover: _internal_ComponentPopover & { | ||
/** @deprecated use `<PopoverButton>` instead of `<Popover.Button>` */ | ||
Button: _internal_ComponentPopoverButton; | ||
/** @deprecated use `<PopoverOverlay>` instead of `<Popover.Overlay>` */ | ||
Overlay: _internal_ComponentPopoverOverlay; | ||
/** @deprecated use `<PopoverPanel>` instead of `<Popover.Panel>` */ | ||
Panel: _internal_ComponentPopoverPanel; | ||
/** @deprecated use `<PopoverGroup>` instead of `<Popover.Group>` */ | ||
Group: _internal_ComponentPopoverGroup; | ||
}; | ||
export {}; |
@@ -1,1 +0,1 @@ | ||
"use client";import{useFocusRing as Fe}from"@react-aria/focus";import{useHover as Ce}from"@react-aria/interactions";import b,{Fragment as Me,createContext as Z,createRef as me,useContext as ee,useEffect as te,useMemo as D,useReducer as xe,useRef as q,useState as ye}from"react";import{useActivePress as _e}from'../../hooks/use-active-press.js';import{useElementSize as Le}from'../../hooks/use-element-size.js';import{useEvent as R}from'../../hooks/use-event.js';import{useEventListener as Ie}from'../../hooks/use-event-listener.js';import{useId as oe}from'../../hooks/use-id.js';import{useIsoMorphicEffect as Be}from'../../hooks/use-iso-morphic-effect.js';import{useLatestValue as Ee}from'../../hooks/use-latest-value.js';import{useOnDisappear as he}from'../../hooks/use-on-disappear.js';import{useOutsideClick as De}from'../../hooks/use-outside-click.js';import{useOwnerDocument as pe}from'../../hooks/use-owner.js';import{useResolveButtonType as Ge}from'../../hooks/use-resolve-button-type.js';import{useMainTreeNode as He,useRootContainers as Ne}from'../../hooks/use-root-containers.js';import{optionalRef as Ue,useSyncRefs as J}from'../../hooks/use-sync-refs.js';import{Direction as U,useTabDirection as be}from'../../hooks/use-tab-direction.js';import{CloseProvider as ke}from'../../internal/close-provider.js';import{FloatingProvider as we,useFloatingPanel as We,useFloatingPanelProps as Ve,useFloatingReference as Ke}from'../../internal/floating.js';import{Hidden as se,HiddenFeatures as ue}from'../../internal/hidden.js';import{Modal as ge,ModalFeatures as je}from'../../internal/modal.js';import{OpenClosedProvider as $e,State as X,useOpenClosed as Se}from'../../internal/open-closed.js';import{isDisabledReactIssue7711 as Ae}from'../../utils/bugs.js';import{Focus as k,FocusResult as ie,FocusableMode as Je,focusIn as w,getFocusableElements as fe,isFocusableElement as Xe}from'../../utils/focus-management.js';import{match as W}from'../../utils/match.js';import'../../utils/micro-task.js';import{getOwnerDocument as Ye}from'../../utils/owner.js';import{RenderFeatures as re,forwardRefWithAs as z,mergeProps as Pe,render as Q,useMergeRefsFn as qe}from'../../utils/render.js';import{FocusTrapFeatures as ze}from'../focus-trap/focus-trap.js';import{Keys as V}from'../keyboard.js';import{Portal as Re,useNestedPortals as Qe}from'../portal/portal.js';var Ze=(f=>(f[f.Open=0]="Open",f[f.Closed=1]="Closed",f))(Ze||{}),et=(p=>(p[p.TogglePopover=0]="TogglePopover",p[p.ClosePopover=1]="ClosePopover",p[p.SetButton=2]="SetButton",p[p.SetButtonId=3]="SetButtonId",p[p.SetPanel=4]="SetPanel",p[p.SetPanelId=5]="SetPanelId",p))(et||{});let tt={[0]:t=>{let n={...t,popoverState:W(t.popoverState,{[0]:1,[1]:0})};return n.popoverState===0&&(n.__demoMode=!1),n},[1](t){return t.popoverState===1?t:{...t,popoverState:1}},[2](t,n){return t.button===n.button?t:{...t,button:n.button}},[3](t,n){return t.buttonId===n.buttonId?t:{...t,buttonId:n.buttonId}},[4](t,n){return t.panel===n.panel?t:{...t,panel:n.panel}},[5](t,n){return t.panelId===n.panelId?t:{...t,panelId:n.panelId}}},de=Z(null);de.displayName="PopoverContext";function ne(t){let n=ee(de);if(n===null){let f=new Error(`<${t} /> is missing a parent <Popover /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(f,ne),f}return n}let le=Z(null);le.displayName="PopoverAPIContext";function ce(t){let n=ee(le);if(n===null){let f=new Error(`<${t} /> is missing a parent <Popover /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(f,ce),f}return n}let ve=Z(null);ve.displayName="PopoverGroupContext";function Oe(){return ee(ve)}let ae=Z(null);ae.displayName="PopoverPanelContext";function ot(){return ee(ae)}function rt(t,n){return W(n.type,tt,t,n)}let nt="div";function lt(t,n){var P;let{__demoMode:f=!1,...F}=t,m=q(null),v=J(n,Ue(o=>{m.current=o})),p=q([]),l=xe(rt,{__demoMode:f,popoverState:f?0:1,buttons:p,button:null,buttonId:null,panel:null,panelId:null,beforePanelSentinel:me(),afterPanelSentinel:me()}),[{popoverState:e,button:a,buttonId:g,panel:d,panelId:L,beforePanelSentinel:y,afterPanelSentinel:S},s]=l,i=pe((P=m.current)!=null?P:a),M=D(()=>{if(!a||!d)return!1;for(let A of document.querySelectorAll("body > *"))if(Number(A==null?void 0:A.contains(a))^Number(A==null?void 0:A.contains(d)))return!0;let o=fe(),u=o.indexOf(a),c=(u+o.length-1)%o.length,C=(u+1)%o.length,r=o[c],T=o[C];return!d.contains(r)&&!d.contains(T)},[a,d]),x=Ee(g),E=Ee(L),I=D(()=>({buttonId:x,panelId:E,close:()=>s({type:1})}),[x,E,s]),O=Oe(),_=O==null?void 0:O.registerPopover,Y=R(()=>{var o;return(o=O==null?void 0:O.isFocusWithinPopoverGroup())!=null?o:(i==null?void 0:i.activeElement)&&((a==null?void 0:a.contains(i.activeElement))||(d==null?void 0:d.contains(i.activeElement)))});te(()=>_==null?void 0:_(I),[_,I]);let[K,j]=Qe(),h=Ne({mainTreeNodeRef:O==null?void 0:O.mainTreeNodeRef,portals:K,defaultContainers:[a,d]});Ie(i==null?void 0:i.defaultView,"focus",o=>{var u,c,C,r;o.target!==window&&o.target instanceof HTMLElement&&e===0&&(Y()||a&&d&&(h.contains(o.target)||(c=(u=y.current)==null?void 0:u.contains)!=null&&c.call(u,o.target)||(r=(C=S.current)==null?void 0:C.contains)!=null&&r.call(C,o.target)||s({type:1})))},!0),De(h.resolveContainers,(o,u)=>{s({type:1}),Xe(u,Je.Loose)||(o.preventDefault(),a==null||a.focus())},e===0);let B=R(o=>{s({type:1});let u=(()=>o?o instanceof HTMLElement?o:"current"in o&&o.current instanceof HTMLElement?o.current:a:a)();u==null||u.focus()}),$=D(()=>({close:B,isPortalled:M}),[B,M]),G=D(()=>({open:e===0,close:B}),[e,B]),H={ref:v};return b.createElement(we,null,b.createElement(ae.Provider,{value:null},b.createElement(de.Provider,{value:l},b.createElement(le.Provider,{value:$},b.createElement(ke,{value:B},b.createElement($e,{value:W(e,{[0]:X.Open,[1]:X.Closed})},b.createElement(j,null,Q({ourProps:H,theirProps:F,slot:G,defaultTag:nt,name:"Popover"}),b.createElement(h.MainTreeNode,null))))))))}let at="button";function pt(t,n){let f=oe(),{id:F=`headlessui-popover-button-${f}`,disabled:m=!1,autoFocus:v=!1,...p}=t,[l,e]=ne("Popover.Button"),{isPortalled:a}=ce("Popover.Button"),g=q(null),d=`headlessui-focus-sentinel-${oe()}`,L=Oe(),y=L==null?void 0:L.closeOthers,s=ot()!==null;te(()=>{if(!s)return e({type:3,buttonId:F}),()=>{e({type:3,buttonId:null})}},[s,F,e]);let[i]=ye(()=>Symbol()),M=J(g,n,Ke(),s?null:r=>{if(r)l.buttons.current.push(i);else{let T=l.buttons.current.indexOf(i);T!==-1&&l.buttons.current.splice(T,1)}l.buttons.current.length>1&&console.warn("You are already using a <Popover.Button /> but only 1 <Popover.Button /> is supported."),r&&e({type:2,button:r})}),x=J(g,n),E=pe(g),I=R(r=>{var T,A,N;if(s){if(l.popoverState===1)return;switch(r.key){case V.Space:case V.Enter:r.preventDefault(),(A=(T=r.target).click)==null||A.call(T),e({type:1}),(N=l.button)==null||N.focus();break}}else switch(r.key){case V.Space:case V.Enter:r.preventDefault(),r.stopPropagation(),l.popoverState===1&&(y==null||y(l.buttonId)),e({type:0});break;case V.Escape:if(l.popoverState!==0)return y==null?void 0:y(l.buttonId);if(!g.current||E!=null&&E.activeElement&&!g.current.contains(E.activeElement))return;r.preventDefault(),r.stopPropagation(),e({type:1});break}}),O=R(r=>{s||r.key===V.Space&&r.preventDefault()}),_=R(r=>{var T,A;Ae(r.currentTarget)||m||(s?(e({type:1}),(T=l.button)==null||T.focus()):(r.preventDefault(),r.stopPropagation(),l.popoverState===1&&(y==null||y(l.buttonId)),e({type:0}),(A=l.button)==null||A.focus()))}),Y=R(r=>{r.preventDefault(),r.stopPropagation()}),{isFocusVisible:K,focusProps:j}=Fe({autoFocus:v}),{isHovered:h,hoverProps:B}=Ce({isDisabled:m}),{pressed:$,pressProps:G}=_e({disabled:m}),H=l.popoverState===0,P=D(()=>({open:H,active:$||H,disabled:m,hover:h,focus:K,autofocus:v}),[H,h,K,$,m,v]),o=Ge(t,g),u=s?Pe({ref:x,type:o,onKeyDown:I,onClick:_,disabled:m||void 0,autoFocus:v},j,B,G):Pe({ref:M,id:l.buttonId,type:o,"aria-expanded":l.popoverState===0,"aria-controls":l.panel?l.panelId:void 0,disabled:m||void 0,autoFocus:v,onKeyDown:I,onKeyUp:O,onClick:_,onMouseDown:Y},j,B,G),c=be(),C=R(()=>{let r=l.panel;if(!r)return;function T(){W(c.current,{[U.Forwards]:()=>w(r,k.First),[U.Backwards]:()=>w(r,k.Last)})===ie.Error&&w(fe().filter(N=>N.dataset.headlessuiFocusGuard!=="true"),W(c.current,{[U.Forwards]:k.Next,[U.Backwards]:k.Previous}),{relativeTo:l.button})}T()});return b.createElement(b.Fragment,null,Q({ourProps:u,theirProps:p,slot:P,defaultTag:at,name:"Popover.Button"}),H&&!s&&a&&b.createElement(se,{id:d,features:ue.Focusable,"data-headlessui-focus-guard":!0,as:"button",type:"button",onFocus:C}))}let st="div",ut=re.RenderStrategy|re.Static;function it(t,n){let f=oe(),{id:F=`headlessui-popover-overlay-${f}`,...m}=t,[{popoverState:v},p]=ne("Popover.Overlay"),l=J(n),e=Se(),a=(()=>e!==null?(e&X.Open)===X.Open:v===0)(),g=R(y=>{if(Ae(y.currentTarget))return y.preventDefault();p({type:1})}),d=D(()=>({open:v===0}),[v]);return Q({ourProps:{ref:l,id:F,"aria-hidden":!0,onClick:g},theirProps:m,slot:d,defaultTag:st,features:ut,visible:a,name:"Popover.Overlay"})}let ft="div",Pt=re.RenderStrategy|re.Static;function dt(t,n){let f=oe(),{id:F=`headlessui-popover-panel-${f}`,focus:m=!1,anchor:v,modal:p,...l}=t,[e,a]=ne("Popover.Panel"),{close:g,isPortalled:d}=ce("Popover.Panel"),L=`headlessui-focus-sentinel-before-${f}`,y=`headlessui-focus-sentinel-after-${f}`,S=q(null),[s,i]=We(v),M=Ve();v!=null&&p==null?p=!0:p==null&&(p=!1);let x=J(S,n,v?s:null,P=>{a({type:4,panel:P})}),E=pe(S),I=qe();Be(()=>(a({type:5,panelId:F}),()=>{a({type:5,panelId:null})}),[F,a]);let O=Se(),_=(()=>O!==null?(O&X.Open)===X.Open:e.popoverState===0)();he(e.button,()=>a({type:1}),_);let Y=R(P=>{var o;switch(P.key){case V.Escape:if(e.popoverState!==0||!S.current||E!=null&&E.activeElement&&!S.current.contains(E.activeElement))return;P.preventDefault(),P.stopPropagation(),a({type:1}),(o=e.button)==null||o.focus();break}});te(()=>{var P;t.static||e.popoverState===1&&((P=t.unmount)==null||P)&&a({type:4,panel:null})},[e.popoverState,t.unmount,t.static,a]),te(()=>{if(e.__demoMode||!m||e.popoverState!==0||!S.current)return;let P=E==null?void 0:E.activeElement;S.current.contains(P)||w(S.current,k.First)},[e.__demoMode,m,S,e.popoverState]);let K=D(()=>({open:e.popoverState===0,close:g}),[e,g]),j=Pe(v?M():{},{ref:x,id:F,onKeyDown:Y,onBlur:m&&e.popoverState===0?P=>{var u,c,C,r,T;let o=P.relatedTarget;o&&S.current&&((u=S.current)!=null&&u.contains(o)||(a({type:1}),((C=(c=e.beforePanelSentinel.current)==null?void 0:c.contains)!=null&&C.call(c,o)||(T=(r=e.afterPanelSentinel.current)==null?void 0:r.contains)!=null&&T.call(r,o))&&o.focus({preventScroll:!0})))}:void 0,tabIndex:-1,style:{...i,"--button-width":Le(e.button,!0).width}}),h=be(),B=R(()=>{let P=S.current;if(!P)return;function o(){W(h.current,{[U.Forwards]:()=>{var c;w(P,k.First)===ie.Error&&((c=e.afterPanelSentinel.current)==null||c.focus())},[U.Backwards]:()=>{var u;(u=e.button)==null||u.focus({preventScroll:!0})}})}o()}),$=R(()=>{let P=S.current;if(!P)return;function o(){W(h.current,{[U.Forwards]:()=>{var A;if(!e.button)return;let u=fe(),c=u.indexOf(e.button),C=u.slice(0,c+1),T=[...u.slice(c+1),...C];for(let N of T.slice())if(N.dataset.headlessuiFocusGuard==="true"||(A=e.panel)!=null&&A.contains(N)){let Te=T.indexOf(N);Te!==-1&&T.splice(Te,1)}w(T,k.First,{sorted:!1})},[U.Backwards]:()=>{var c;w(P,k.Previous)===ie.Error&&((c=e.button)==null||c.focus())}})}o()}),G=p?ge:v?Re:Me,H=p?{focusTrapFeatures:ze.None,features:je.ScrollLock,enabled:e.popoverState===0}:{};return(G===Re||G===ge)&&(d=!0),b.createElement(ae.Provider,{value:F},b.createElement(le.Provider,{value:{close:g,isPortalled:d}},b.createElement(G,{...H},_&&d&&b.createElement(se,{id:L,ref:e.beforePanelSentinel,features:ue.Focusable,"data-headlessui-focus-guard":!0,as:"button",type:"button",onFocus:B}),Q({mergeRefs:I,ourProps:j,theirProps:l,slot:K,defaultTag:ft,features:Pt,visible:_,name:"Popover.Panel"}),_&&d&&b.createElement(se,{id:y,ref:e.afterPanelSentinel,features:ue.Focusable,"data-headlessui-focus-guard":!0,as:"button",type:"button",onFocus:$}))))}let ct="div";function vt(t,n){let f=q(null),F=J(f,n),[m,v]=ye([]),p=He(),l=R(s=>{v(i=>{let M=i.indexOf(s);if(M!==-1){let x=i.slice();return x.splice(M,1),x}return i})}),e=R(s=>(v(i=>[...i,s]),()=>l(s))),a=R(()=>{var M;let s=Ye(f);if(!s)return!1;let i=s.activeElement;return(M=f.current)!=null&&M.contains(i)?!0:m.some(x=>{var E,I;return((E=s.getElementById(x.buttonId.current))==null?void 0:E.contains(i))||((I=s.getElementById(x.panelId.current))==null?void 0:I.contains(i))})}),g=R(s=>{for(let i of m)i.buttonId.current!==s&&i.close()}),d=D(()=>({registerPopover:e,unregisterPopover:l,isFocusWithinPopoverGroup:a,closeOthers:g,mainTreeNodeRef:p.mainTreeNodeRef}),[e,l,a,g,p.mainTreeNodeRef]),L=D(()=>({}),[]),y=t,S={ref:F};return b.createElement(ve.Provider,{value:d},Q({ourProps:S,theirProps:y,slot:L,defaultTag:ct,name:"Popover.Group"}),b.createElement(p.MainTreeNode,null))}let Tt=z(lt),mt=z(pt),yt=z(it),Et=z(dt),bt=z(vt),Zt=Object.assign(Tt,{Button:mt,Overlay:yt,Panel:Et,Group:bt});export{Zt as Popover,mt as PopoverButton,bt as PopoverGroup,yt as PopoverOverlay,Et as PopoverPanel}; | ||
"use client";import{useFocusRing as Oe}from"@react-aria/focus";import{useHover as Ce}from"@react-aria/interactions";import b,{createContext as ee,createRef as se,useContext as te,useEffect as oe,useMemo as G,useReducer as Fe,useRef as z,useState as Ee}from"react";import{useActivePress as Me}from'../../hooks/use-active-press.js';import{useElementSize as _e}from'../../hooks/use-element-size.js';import{useEvent as A}from'../../hooks/use-event.js';import{useEventListener as xe}from'../../hooks/use-event-listener.js';import{useId as re}from'../../hooks/use-id.js';import{useIsoMorphicEffect as Le}from'../../hooks/use-iso-morphic-effect.js';import{useLatestValue as be}from'../../hooks/use-latest-value.js';import{useOnDisappear as Ie}from'../../hooks/use-on-disappear.js';import{useOutsideClick as Be}from'../../hooks/use-outside-click.js';import{useOwnerDocument as ue}from'../../hooks/use-owner.js';import{useResolveButtonType as he}from'../../hooks/use-resolve-button-type.js';import{useMainTreeNode as De,useRootContainers as Ge}from'../../hooks/use-root-containers.js';import{useScrollLock as He}from'../../hooks/use-scroll-lock.js';import{optionalRef as Ne,useSyncRefs as J}from'../../hooks/use-sync-refs.js';import{Direction as k,useTabDirection as ge}from'../../hooks/use-tab-direction.js';import{CloseProvider as ke}from'../../internal/close-provider.js';import{FloatingProvider as Ue,useFloatingPanel as we,useFloatingPanelProps as We,useFloatingReference as Ve,useResolvedAnchor as je}from'../../internal/floating.js';import{Hidden as ie,HiddenFeatures as fe}from'../../internal/hidden.js';import{OpenClosedProvider as Ke,State as X,useOpenClosed as Se}from'../../internal/open-closed.js';import{isDisabledReactIssue7711 as Ae}from'../../utils/bugs.js';import{Focus as U,FocusResult as Pe,FocusableMode as $e,focusIn as w,getFocusableElements as de,isFocusableElement as Je}from'../../utils/focus-management.js';import{match as W}from'../../utils/match.js';import'../../utils/micro-task.js';import{getOwnerDocument as Xe}from'../../utils/owner.js';import{RenderFeatures as ne,forwardRefWithAs as Q,mergeProps as ce,render as Z,useMergeRefsFn as Ye}from'../../utils/render.js';import{Keys as V}from'../keyboard.js';import{Portal as qe,useNestedPortals as ze}from'../portal/portal.js';var Qe=(u=>(u[u.Open=0]="Open",u[u.Closed=1]="Closed",u))(Qe||{}),Ze=(i=>(i[i.TogglePopover=0]="TogglePopover",i[i.ClosePopover=1]="ClosePopover",i[i.SetButton=2]="SetButton",i[i.SetButtonId=3]="SetButtonId",i[i.SetPanel=4]="SetPanel",i[i.SetPanelId=5]="SetPanelId",i))(Ze||{});let et={[0]:t=>({...t,popoverState:W(t.popoverState,{[0]:1,[1]:0}),__demoMode:!1}),[1](t){return t.popoverState===1?t:{...t,popoverState:1,__demoMode:!1}},[2](t,a){return t.button===a.button?t:{...t,button:a.button}},[3](t,a){return t.buttonId===a.buttonId?t:{...t,buttonId:a.buttonId}},[4](t,a){return t.panel===a.panel?t:{...t,panel:a.panel}},[5](t,a){return t.panelId===a.panelId?t:{...t,panelId:a.panelId}}},ve=ee(null);ve.displayName="PopoverContext";function le(t){let a=te(ve);if(a===null){let u=new Error(`<${t} /> is missing a parent <Popover /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(u,le),u}return a}let ae=ee(null);ae.displayName="PopoverAPIContext";function Te(t){let a=te(ae);if(a===null){let u=new Error(`<${t} /> is missing a parent <Popover /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(u,Te),u}return a}let me=ee(null);me.displayName="PopoverGroupContext";function Re(){return te(me)}let pe=ee(null);pe.displayName="PopoverPanelContext";function tt(){return te(pe)}function ot(t,a){return W(a.type,et,t,a)}let rt="div";function nt(t,a){var g;let{__demoMode:u=!1,...C}=t,T=z(null),S=J(a,Ne(o=>{T.current=o})),i=z([]),l=Fe(ot,{__demoMode:u,popoverState:u?0:1,buttons:i,button:null,buttonId:null,panel:null,panelId:null,beforePanelSentinel:se(),afterPanelSentinel:se(),afterButtonSentinel:se()}),[{popoverState:f,button:e,buttonId:P,panel:v,panelId:_,beforePanelSentinel:y,afterPanelSentinel:j,afterButtonSentinel:n},s]=l,E=ue((g=T.current)!=null?g:e),x=G(()=>{if(!e||!v)return!1;for(let M of document.querySelectorAll("body > *"))if(Number(M==null?void 0:M.contains(e))^Number(M==null?void 0:M.contains(v)))return!0;let o=de(),p=o.indexOf(e),r=(p+o.length-1)%o.length,c=(p+1)%o.length,m=o[r],O=o[c];return!v.contains(m)&&!v.contains(O)},[e,v]),L=be(P),h=be(_),F=G(()=>({buttonId:L,panelId:h,close:()=>s({type:1})}),[L,h,s]),R=Re(),D=R==null?void 0:R.registerPopover,I=A(()=>{var o;return(o=R==null?void 0:R.isFocusWithinPopoverGroup())!=null?o:(E==null?void 0:E.activeElement)&&((e==null?void 0:e.contains(E.activeElement))||(v==null?void 0:v.contains(E.activeElement)))});oe(()=>D==null?void 0:D(F),[D,F]);let[K,$]=ze(),H=Ge({mainTreeNodeRef:R==null?void 0:R.mainTreeNodeRef,portals:K,defaultContainers:[e,v]});xe(E==null?void 0:E.defaultView,"focus",o=>{var p,r,c,m,O,M;o.target!==window&&o.target instanceof HTMLElement&&f===0&&(I()||e&&v&&(H.contains(o.target)||(r=(p=y.current)==null?void 0:p.contains)!=null&&r.call(p,o.target)||(m=(c=j.current)==null?void 0:c.contains)!=null&&m.call(c,o.target)||(M=(O=n.current)==null?void 0:O.contains)!=null&&M.call(O,o.target)||s({type:1})))},!0),Be(f===0,H.resolveContainers,(o,p)=>{s({type:1}),Je(p,$e.Loose)||(o.preventDefault(),e==null||e.focus())});let B=A(o=>{s({type:1});let p=(()=>o?o instanceof HTMLElement?o:"current"in o&&o.current instanceof HTMLElement?o.current:e:e)();p==null||p.focus()}),N=G(()=>({close:B,isPortalled:x}),[B,x]),q=G(()=>({open:f===0,close:B}),[f,B]),d={ref:S};return b.createElement(Ue,null,b.createElement(pe.Provider,{value:null},b.createElement(ve.Provider,{value:l},b.createElement(ae.Provider,{value:N},b.createElement(ke,{value:B},b.createElement(Ke,{value:W(f,{[0]:X.Open,[1]:X.Closed})},b.createElement($,null,Z({ourProps:d,theirProps:C,slot:q,defaultTag:rt,name:"Popover"}),b.createElement(H.MainTreeNode,null))))))))}let lt="button";function at(t,a){let u=re(),{id:C=`headlessui-popover-button-${u}`,disabled:T=!1,autoFocus:S=!1,...i}=t,[l,f]=le("Popover.Button"),{isPortalled:e}=Te("Popover.Button"),P=z(null),v=`headlessui-focus-sentinel-${re()}`,_=Re(),y=_==null?void 0:_.closeOthers,n=tt()!==null;oe(()=>{if(!n)return f({type:3,buttonId:C}),()=>{f({type:3,buttonId:null})}},[n,C,f]);let[s]=Ee(()=>Symbol()),E=J(P,a,Ve(),n?null:r=>{if(r)l.buttons.current.push(s);else{let c=l.buttons.current.indexOf(s);c!==-1&&l.buttons.current.splice(c,1)}l.buttons.current.length>1&&console.warn("You are already using a <Popover.Button /> but only 1 <Popover.Button /> is supported."),r&&f({type:2,button:r})}),x=J(P,a),L=ue(P),h=A(r=>{var c,m,O;if(n){if(l.popoverState===1)return;switch(r.key){case V.Space:case V.Enter:r.preventDefault(),(m=(c=r.target).click)==null||m.call(c),f({type:1}),(O=l.button)==null||O.focus();break}}else switch(r.key){case V.Space:case V.Enter:r.preventDefault(),r.stopPropagation(),l.popoverState===1&&(y==null||y(l.buttonId)),f({type:0});break;case V.Escape:if(l.popoverState!==0)return y==null?void 0:y(l.buttonId);if(!P.current||L!=null&&L.activeElement&&!P.current.contains(L.activeElement))return;r.preventDefault(),r.stopPropagation(),f({type:1});break}}),F=A(r=>{n||r.key===V.Space&&r.preventDefault()}),R=A(r=>{var c,m;Ae(r.currentTarget)||T||(n?(f({type:1}),(c=l.button)==null||c.focus()):(r.preventDefault(),r.stopPropagation(),l.popoverState===1&&(y==null||y(l.buttonId)),f({type:0}),(m=l.button)==null||m.focus()))}),D=A(r=>{r.preventDefault(),r.stopPropagation()}),{isFocusVisible:I,focusProps:K}=Oe({autoFocus:S}),{isHovered:$,hoverProps:H}=Ce({isDisabled:T}),{pressed:Y,pressProps:B}=Me({disabled:T}),N=l.popoverState===0,q=G(()=>({open:N,active:Y||N,disabled:T,hover:$,focus:I,autofocus:S}),[N,$,I,Y,T,S]),d=he(t,P),g=n?ce({ref:x,type:d,onKeyDown:h,onClick:R,disabled:T||void 0,autoFocus:S},K,H,B):ce({ref:E,id:l.buttonId,type:d,"aria-expanded":l.popoverState===0,"aria-controls":l.panel?l.panelId:void 0,disabled:T||void 0,autoFocus:S,onKeyDown:h,onKeyUp:F,onClick:R,onMouseDown:D},K,H,B),o=ge(),p=A(()=>{let r=l.panel;if(!r)return;function c(){W(o.current,{[k.Forwards]:()=>w(r,U.First),[k.Backwards]:()=>w(r,U.Last)})===Pe.Error&&w(de().filter(O=>O.dataset.headlessuiFocusGuard!=="true"),W(o.current,{[k.Forwards]:U.Next,[k.Backwards]:U.Previous}),{relativeTo:l.button})}c()});return b.createElement(b.Fragment,null,Z({ourProps:g,theirProps:i,slot:q,defaultTag:lt,name:"Popover.Button"}),N&&!n&&e&&b.createElement(ie,{id:v,ref:l.afterButtonSentinel,features:fe.Focusable,"data-headlessui-focus-guard":!0,as:"button",type:"button",onFocus:p}))}let pt="div",st=ne.RenderStrategy|ne.Static;function ut(t,a){let u=re(),{id:C=`headlessui-popover-overlay-${u}`,...T}=t,[{popoverState:S},i]=le("Popover.Overlay"),l=J(a),f=Se(),e=(()=>f!==null?(f&X.Open)===X.Open:S===0)(),P=A(y=>{if(Ae(y.currentTarget))return y.preventDefault();i({type:1})}),v=G(()=>({open:S===0}),[S]);return Z({ourProps:{ref:l,id:C,"aria-hidden":!0,onClick:P},theirProps:T,slot:v,defaultTag:pt,features:st,visible:e,name:"Popover.Overlay"})}let it="div",ft=ne.RenderStrategy|ne.Static;function Pt(t,a){let u=re(),{id:C=`headlessui-popover-panel-${u}`,focus:T=!1,anchor:S,portal:i=!1,modal:l=!1,...f}=t,[e,P]=le("Popover.Panel"),{close:v,isPortalled:_}=Te("Popover.Panel"),y=`headlessui-focus-sentinel-before-${u}`,j=`headlessui-focus-sentinel-after-${u}`,n=z(null),s=je(S),[E,x]=we(s),L=We();s&&(i=!0);let h=J(n,a,s?E:null,d=>{P({type:4,panel:d})}),F=ue(n),R=Ye();Le(()=>(P({type:5,panelId:C}),()=>{P({type:5,panelId:null})}),[C,P]);let D=Se(),I=(()=>D!==null?(D&X.Open)===X.Open:e.popoverState===0)();Ie(I,e.button,()=>{P({type:1})});let K=e.__demoMode?!1:l&&I;He(K,F);let $=A(d=>{var g;switch(d.key){case V.Escape:if(e.popoverState!==0||!n.current||F!=null&&F.activeElement&&!n.current.contains(F.activeElement))return;d.preventDefault(),d.stopPropagation(),P({type:1}),(g=e.button)==null||g.focus();break}});oe(()=>{var d;t.static||e.popoverState===1&&((d=t.unmount)==null||d)&&P({type:4,panel:null})},[e.popoverState,t.unmount,t.static,P]),oe(()=>{if(e.__demoMode||!T||e.popoverState!==0||!n.current)return;let d=F==null?void 0:F.activeElement;n.current.contains(d)||w(n.current,U.First)},[e.__demoMode,T,n,e.popoverState]);let H=G(()=>({open:e.popoverState===0,close:v}),[e,v]),Y=ce(s?L():{},{ref:h,id:C,onKeyDown:$,onBlur:T&&e.popoverState===0?d=>{var o,p,r,c,m;let g=d.relatedTarget;g&&n.current&&((o=n.current)!=null&&o.contains(g)||(P({type:1}),((r=(p=e.beforePanelSentinel.current)==null?void 0:p.contains)!=null&&r.call(p,g)||(m=(c=e.afterPanelSentinel.current)==null?void 0:c.contains)!=null&&m.call(c,g))&&g.focus({preventScroll:!0})))}:void 0,tabIndex:-1,style:{...f.style,...x,"--button-width":_e(e.button,!0).width}}),B=ge(),N=A(()=>{let d=n.current;if(!d)return;function g(){W(B.current,{[k.Forwards]:()=>{var p;w(d,U.First)===Pe.Error&&((p=e.afterPanelSentinel.current)==null||p.focus())},[k.Backwards]:()=>{var o;(o=e.button)==null||o.focus({preventScroll:!0})}})}g()}),q=A(()=>{let d=n.current;if(!d)return;function g(){W(B.current,{[k.Forwards]:()=>{var O;if(!e.button)return;let o=de(),p=o.indexOf(e.button),r=o.slice(0,p+1),m=[...o.slice(p+1),...r];for(let M of m.slice())if(M.dataset.headlessuiFocusGuard==="true"||(O=e.panel)!=null&&O.contains(M)){let ye=m.indexOf(M);ye!==-1&&m.splice(ye,1)}w(m,U.First,{sorted:!1})},[k.Backwards]:()=>{var p;w(d,U.Previous)===Pe.Error&&((p=e.button)==null||p.focus())}})}g()});return b.createElement(pe.Provider,{value:C},b.createElement(ae.Provider,{value:{close:v,isPortalled:_}},b.createElement(qe,{enabled:i?t.static||I:!1},I&&_&&b.createElement(ie,{id:y,ref:e.beforePanelSentinel,features:fe.Focusable,"data-headlessui-focus-guard":!0,as:"button",type:"button",onFocus:N}),Z({mergeRefs:R,ourProps:Y,theirProps:f,slot:H,defaultTag:it,features:ft,visible:I,name:"Popover.Panel"}),I&&_&&b.createElement(ie,{id:j,ref:e.afterPanelSentinel,features:fe.Focusable,"data-headlessui-focus-guard":!0,as:"button",type:"button",onFocus:q}))))}let dt="div";function ct(t,a){let u=z(null),C=J(u,a),[T,S]=Ee([]),i=De(),l=A(n=>{S(s=>{let E=s.indexOf(n);if(E!==-1){let x=s.slice();return x.splice(E,1),x}return s})}),f=A(n=>(S(s=>[...s,n]),()=>l(n))),e=A(()=>{var E;let n=Xe(u);if(!n)return!1;let s=n.activeElement;return(E=u.current)!=null&&E.contains(s)?!0:T.some(x=>{var L,h;return((L=n.getElementById(x.buttonId.current))==null?void 0:L.contains(s))||((h=n.getElementById(x.panelId.current))==null?void 0:h.contains(s))})}),P=A(n=>{for(let s of T)s.buttonId.current!==n&&s.close()}),v=G(()=>({registerPopover:f,unregisterPopover:l,isFocusWithinPopoverGroup:e,closeOthers:P,mainTreeNodeRef:i.mainTreeNodeRef}),[f,l,e,P,i.mainTreeNodeRef]),_=G(()=>({}),[]),y=t,j={ref:C};return b.createElement(me.Provider,{value:v},Z({ourProps:j,theirProps:y,slot:_,defaultTag:dt,name:"Popover.Group"}),b.createElement(i.MainTreeNode,null))}let vt=Q(nt),Tt=Q(at),mt=Q(ut),yt=Q(Pt),Et=Q(ct),zt=Object.assign(vt,{Button:Tt,Overlay:mt,Panel:yt,Group:Et});export{zt as Popover,Tt as PopoverButton,Et as PopoverGroup,mt as PopoverOverlay,yt as PopoverPanel}; |
@@ -9,4 +9,6 @@ import React, { type ElementType, type MutableRefObject, type Ref } from 'react'; | ||
type PortalPropsWeControl = never; | ||
export type PortalProps<TTag extends ElementType = typeof DEFAULT_PORTAL_TAG> = Props<TTag, PortalRenderPropArg, PortalPropsWeControl>; | ||
declare function PortalFn<TTag extends ElementType = typeof DEFAULT_PORTAL_TAG>(props: PortalProps<TTag>, ref: Ref<HTMLElement>): React.ReactPortal | null; | ||
export type PortalProps<TTag extends ElementType = typeof DEFAULT_PORTAL_TAG> = Props<TTag, PortalRenderPropArg, PortalPropsWeControl, { | ||
enabled?: boolean; | ||
}>; | ||
declare function PortalFn<TTag extends ElementType = typeof DEFAULT_PORTAL_TAG>(props: PortalProps<TTag>, ref: Ref<HTMLElement>): React.JSX.Element | null; | ||
declare let DEFAULT_GROUP_TAG: React.ExoticComponent<{ | ||
@@ -32,4 +34,5 @@ children?: React.ReactNode; | ||
export declare let Portal: _internal_ComponentPortal & { | ||
/** @deprecated use `<PortalGroup>` instead of `<Portal.Group>` */ | ||
Group: _internal_ComponentPortalGroup; | ||
}; | ||
export {}; |
@@ -1,1 +0,1 @@ | ||
"use client";import P,{Fragment as T,createContext as m,useContext as s,useEffect as d,useMemo as y,useRef as g,useState as R}from"react";import{createPortal as M}from"react-dom";import{useEvent as E}from'../../hooks/use-event.js';import{useIsoMorphicEffect as c}from'../../hooks/use-iso-morphic-effect.js';import{useOnUnmount as H}from'../../hooks/use-on-unmount.js';import{useOwnerDocument as G}from'../../hooks/use-owner.js';import{useServerHandoffComplete as O}from'../../hooks/use-server-handoff-complete.js';import{optionalRef as b,useSyncRefs as x}from'../../hooks/use-sync-refs.js';import{usePortalRoot as h}from'../../internal/portal-force-root.js';import{env as A}from'../../utils/env.js';import{forwardRefWithAs as L,render as _}from'../../utils/render.js';function F(a){let l=h(),n=s(C),e=G(a),[p,o]=R(()=>{if(!l&&n!==null||A.isServer)return null;let t=e==null?void 0:e.getElementById("headlessui-portal-root");if(t)return t;if(e===null)return null;let r=e.createElement("div");return r.setAttribute("id","headlessui-portal-root"),e.body.appendChild(r)});return d(()=>{p!==null&&(e!=null&&e.body.contains(p)||e==null||e.body.appendChild(p))},[p,e]),d(()=>{l||n!==null&&o(n.current)},[n,o,l]),p}let U=T;function D(a,l){let n=a,e=g(null),p=x(b(u=>{e.current=u}),l),o=G(e),t=F(e),[r]=R(()=>{var u;return A.isServer?null:(u=o==null?void 0:o.createElement("div"))!=null?u:null}),i=s(f),v=O();return c(()=>{!t||!r||t.contains(r)||(r.setAttribute("data-headlessui-portal",""),t.appendChild(r))},[t,r]),c(()=>{if(r&&i)return i.register(r)},[i,r]),H(()=>{var u;!t||!r||(r instanceof Node&&t.contains(r)&&t.removeChild(r),t.childNodes.length<=0&&((u=t.parentElement)==null||u.removeChild(t)))}),v?!t||!r?null:M(_({ourProps:{ref:p},theirProps:n,slot:{},defaultTag:U,name:"Portal"}),r):null}let N=T,C=m(null);function S(a,l){let{target:n,...e}=a,o={ref:x(l)};return P.createElement(C.Provider,{value:n},_({ourProps:o,theirProps:e,defaultTag:N,name:"Popover.Group"}))}let f=m(null);function $(){let a=s(f),l=g([]),n=E(o=>(l.current.push(o),a&&a.register(o),()=>e(o))),e=E(o=>{let t=l.current.indexOf(o);t!==-1&&l.current.splice(t,1),a&&a.unregister(o)}),p=y(()=>({register:n,unregister:e,portals:l}),[n,e,l]);return[l,y(()=>function({children:t}){return P.createElement(f.Provider,{value:p},t)},[p])]}let j=L(D),W=L(S),w=Object.assign(j,{Group:W});export{w as Portal,W as PortalGroup,$ as useNestedPortals}; | ||
"use client";import f,{Fragment as g,createContext as E,useContext as T,useEffect as R,useMemo as c,useRef as A,useState as G}from"react";import{createPortal as H}from"react-dom";import{useEvent as L}from'../../hooks/use-event.js';import{useIsoMorphicEffect as x}from'../../hooks/use-iso-morphic-effect.js';import{useOnUnmount as O}from'../../hooks/use-on-unmount.js';import{useOwnerDocument as _}from'../../hooks/use-owner.js';import{useServerHandoffComplete as h}from'../../hooks/use-server-handoff-complete.js';import{optionalRef as F,useSyncRefs as P}from'../../hooks/use-sync-refs.js';import{usePortalRoot as U}from'../../internal/portal-force-root.js';import{env as C}from'../../utils/env.js';import{forwardRefWithAs as m,render as d}from'../../utils/render.js';function D(p){let r=U(),l=T(v),e=_(p),[o,n]=G(()=>{var t;if(!r&&l!==null)return(t=l.current)!=null?t:null;if(C.isServer)return null;let u=e==null?void 0:e.getElementById("headlessui-portal-root");if(u)return u;if(e===null)return null;let a=e.createElement("div");return a.setAttribute("id","headlessui-portal-root"),e.body.appendChild(a)});return R(()=>{o!==null&&(e!=null&&e.body.contains(o)||e==null||e.body.appendChild(o))},[o,e]),R(()=>{r||l!==null&&n(l.current)},[l,n,r]),o}let M=g,N=m(function(r,l){let e=r,o=A(null),n=P(F(i=>{o.current=i}),l),u=_(o),a=D(o),[t]=G(()=>{var i;return C.isServer?null:(i=u==null?void 0:u.createElement("div"))!=null?i:null}),s=T(y),b=h();return x(()=>{!a||!t||a.contains(t)||(t.setAttribute("data-headlessui-portal",""),a.appendChild(t))},[a,t]),x(()=>{if(t&&s)return s.register(t)},[s,t]),O(()=>{var i;!a||!t||(t instanceof Node&&a.contains(t)&&a.removeChild(t),a.childNodes.length<=0&&((i=a.parentElement)==null||i.removeChild(a)))}),b?!a||!t?null:H(d({ourProps:{ref:n},theirProps:e,slot:{},defaultTag:M,name:"Portal"}),t):null});function S(p,r){let l=P(r),{enabled:e=!0,...o}=p;return e?f.createElement(N,{...o,ref:l}):d({ourProps:{ref:l},theirProps:o,slot:{},defaultTag:M,name:"Portal"})}let j=g,v=E(null);function W(p,r){let{target:l,...e}=p,n={ref:P(r)};return f.createElement(v.Provider,{value:l},d({ourProps:n,theirProps:e,defaultTag:j,name:"Popover.Group"}))}let y=E(null);function ee(){let p=T(y),r=A([]),l=L(n=>(r.current.push(n),p&&p.register(n),()=>e(n))),e=L(n=>{let u=r.current.indexOf(n);u!==-1&&r.current.splice(u,1),p&&p.unregister(n)}),o=c(()=>({register:l,unregister:e,portals:r}),[l,e,r]);return[r,c(()=>function({children:u}){return f.createElement(y.Provider,{value:o},u)},[o])]}let I=m(S),J=m(W),te=Object.assign(I,{Group:J});export{te as Portal,J as PortalGroup,ee as useNestedPortals}; |
@@ -68,2 +68,3 @@ import React, { type ElementType, type Ref } from 'react'; | ||
declare let RadioGroupRoot: _internal_ComponentRadioGroup; | ||
/** @deprecated use `<Radio>` instead of `<RadioGroupOption>` */ | ||
export declare let RadioGroupOption: _internal_ComponentRadioOption; | ||
@@ -76,3 +77,6 @@ export declare let Radio: _internal_ComponentRadio; | ||
export declare let RadioGroup: _internal_ComponentRadioGroup & { | ||
/** @deprecated use `<Radio>` instead of `<RadioGroup.Option>` */ | ||
Option: _internal_ComponentRadioOption; | ||
/** @deprecated use `<Radio>` instead of `<RadioGroup.Radio>` */ | ||
Radio: _internal_ComponentRadio; | ||
/** @deprecated use `<Label>` instead of `<RadioGroup.Label>` */ | ||
@@ -79,0 +83,0 @@ Label: _internal_ComponentRadioLabel; |
@@ -1,1 +0,1 @@ | ||
"use client";import{useFocusRing as Q}from"@react-aria/focus";import{useHover as Y}from"@react-aria/interactions";import G,{createContext as Z,useCallback as ye,useContext as ee,useMemo as x,useReducer as me,useRef as W}from"react";import{useByComparator as Re}from'../../hooks/use-by-comparator.js';import{useControllable as be}from'../../hooks/use-controllable.js';import{useEvent as S}from'../../hooks/use-event.js';import{useId as B}from'../../hooks/use-id.js';import{useIsoMorphicEffect as te}from'../../hooks/use-iso-morphic-effect.js';import{useLatestValue as oe}from'../../hooks/use-latest-value.js';import{useSyncRefs as K}from'../../hooks/use-sync-refs.js';import{useDisabled as re}from'../../internal/disabled.js';import{FormFields as ge}from'../../internal/form-fields.js';import{useProvidedId as Oe}from'../../internal/id.js';import{isDisabledReactIssue7711 as ne}from'../../utils/bugs.js';import{Focus as w,FocusResult as ie,focusIn as ae,sortByDomNode as Pe}from'../../utils/focus-management.js';import{attemptSubmit as ve}from'../../utils/form.js';import{match as De}from'../../utils/match.js';import{getOwnerDocument as Ae}from'../../utils/owner.js';import{forwardRefWithAs as $,mergeProps as pe,render as j}from'../../utils/render.js';import{Description as _e,useDescribedBy as Ee,useDescriptions as le}from'../description/description.js';import{Keys as I}from'../keyboard.js';import{Label as Ge,useLabelledBy as xe,useLabels as se}from'../label/label.js';var Ce=(e=>(e[e.RegisterOption=0]="RegisterOption",e[e.UnregisterOption=1]="UnregisterOption",e))(Ce||{});let he={[0](o,t){let e=[...o.options,{id:t.id,element:t.element,propsRef:t.propsRef}];return{...o,options:Pe(e,a=>a.element.current)}},[1](o,t){let e=o.options.slice(),a=o.options.findIndex(O=>O.id===t.id);return a===-1?o:(e.splice(a,1),{...o,options:e})}},V=Z(null);V.displayName="RadioGroupDataContext";function J(o){let t=ee(V);if(t===null){let e=new Error(`<${o} /> is missing a parent <RadioGroup /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(e,J),e}return t}let X=Z(null);X.displayName="RadioGroupActionsContext";function z(o){let t=ee(X);if(t===null){let e=new Error(`<${o} /> is missing a parent <RadioGroup /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(e,z),e}return t}function Le(o,t){return De(t.type,he,o,t)}let ke="div";function Fe(o,t){let e=B(),a=re(),{id:O=`headlessui-radiogroup-${e}`,value:T,defaultValue:y,form:p,name:d,onChange:u,by:c,disabled:m=a||!1,...R}=o,f=Re(c),[P,C]=me(Le,{options:[]}),i=P.options,[U,h]=se(),[v,L]=le(),D=W(null),M=K(D,t),[r,A]=be(T,u,y),k=x(()=>i.find(n=>!n.propsRef.current.disabled),[i]),b=x(()=>i.some(n=>f(n.propsRef.current.value,r)),[i,r]),l=S(n=>{var s;if(m||f(n,r))return!1;let F=(s=i.find(H=>f(H.propsRef.current.value,n)))==null?void 0:s.propsRef.current;return F!=null&&F.disabled?!1:(A==null||A(n),!0)}),_=S(n=>{let F=D.current;if(!F)return;let s=Ae(F),H=i.filter(g=>g.propsRef.current.disabled===!1).map(g=>g.element.current);switch(n.key){case I.Enter:ve(n.currentTarget);break;case I.ArrowLeft:case I.ArrowUp:if(n.preventDefault(),n.stopPropagation(),ae(H,w.Previous|w.WrapAround)===ie.Success){let E=i.find(N=>N.element.current===(s==null?void 0:s.activeElement));E&&l(E.propsRef.current.value)}break;case I.ArrowRight:case I.ArrowDown:if(n.preventDefault(),n.stopPropagation(),ae(H,w.Next|w.WrapAround)===ie.Success){let E=i.find(N=>N.element.current===(s==null?void 0:s.activeElement));E&&l(E.propsRef.current.value)}break;case I.Space:{n.preventDefault(),n.stopPropagation();let g=i.find(E=>E.element.current===(s==null?void 0:s.activeElement));g&&l(g.propsRef.current.value)}break}}),q=S(n=>(C({type:0,...n}),()=>C({type:1,id:n.id}))),de=x(()=>({value:r,firstOption:k,containsCheckedOption:b,disabled:m,compare:f,...P}),[r,k,b,m,f,P]),ue=x(()=>({registerOption:q,change:l}),[q,l]),ce={ref:M,id:O,role:"radiogroup","aria-labelledby":U,"aria-describedby":v,onKeyDown:_},fe=x(()=>({value:r}),[r]),Te=ye(()=>l(y),[l]);return G.createElement(L,{name:"RadioGroup.Description"},G.createElement(h,{name:"RadioGroup.Label"},G.createElement(X.Provider,{value:ue},G.createElement(V.Provider,{value:de},d!=null&&G.createElement(ge,{disabled:m,data:{[d]:r||"on"},overrides:{type:"radio",checked:r!=null},form:p,onReset:Te}),j({ourProps:ce,theirProps:R,slot:fe,defaultTag:ke,name:"RadioGroup"})))))}let Ie="div";function Ue(o,t){var b;let e=J("RadioGroup.Option"),a=z("RadioGroup.Option"),O=B(),{id:T=`headlessui-radiogroup-option-${O}`,value:y,disabled:p=e.disabled||!1,autoFocus:d=!1,...u}=o,c=W(null),m=K(c,t),[R,f]=se(),[P,C]=le(),i=oe({value:y,disabled:p});te(()=>a.registerOption({id:T,element:c,propsRef:i}),[T,a,c,i]);let U=S(l=>{var _;if(ne(l.currentTarget))return l.preventDefault();a.change(y)&&((_=c.current)==null||_.focus())}),h=((b=e.firstOption)==null?void 0:b.id)===T,{isFocusVisible:v,focusProps:L}=Q({autoFocus:d}),{isHovered:D,hoverProps:M}=Y({isDisabled:p}),r=e.compare(e.value,y),A=pe({ref:m,id:T,role:"radio","aria-checked":r?"true":"false","aria-labelledby":R,"aria-describedby":P,"aria-disabled":p?!0:void 0,tabIndex:(()=>p?-1:r||!e.containsCheckedOption&&h?0:-1)(),onClick:p?void 0:U,autoFocus:d},L,M),k=x(()=>({checked:r,disabled:p,active:v,hover:D,focus:v,autofocus:d}),[r,p,D,v,d]);return G.createElement(C,{name:"RadioGroup.Description"},G.createElement(f,{name:"RadioGroup.Label"},j({ourProps:A,theirProps:u,slot:k,defaultTag:Ie,name:"RadioGroup.Option"})))}let Me="span";function Se(o,t){var b;let e=J("Radio"),a=z("Radio"),O=B(),T=Oe(),y=re(),{id:p=T||`headlessui-radio-${O}`,value:d,disabled:u=e.disabled||y||!1,autoFocus:c=!1,...m}=o,R=W(null),f=K(R,t),P=xe(),C=Ee(),i=oe({value:d,disabled:u});te(()=>a.registerOption({id:p,element:R,propsRef:i}),[p,a,R,i]);let U=S(l=>{var _;if(ne(l.currentTarget))return l.preventDefault();a.change(d)&&((_=R.current)==null||_.focus())}),{isFocusVisible:h,focusProps:v}=Q({autoFocus:c}),{isHovered:L,hoverProps:D}=Y({isDisabled:u}),M=((b=e.firstOption)==null?void 0:b.id)===p,r=e.compare(e.value,d),A=pe({ref:f,id:p,role:"radio","aria-checked":r?"true":"false","aria-labelledby":P,"aria-describedby":C,"aria-disabled":u?!0:void 0,tabIndex:(()=>u?-1:r||!e.containsCheckedOption&&M?0:-1)(),autoFocus:c,onClick:u?void 0:U},v,D),k=x(()=>({checked:r,disabled:u,hover:L,focus:h,autofocus:c}),[r,u,L,h,c]);return j({ourProps:A,theirProps:m,slot:k,defaultTag:Me,name:"Radio"})}let He=$(Fe),we=$(Ue),dt=$(Se),Ne=Ge,We=_e,ut=Object.assign(He,{Option:we,Label:Ne,Description:We});export{dt as Radio,ut as RadioGroup,We as RadioGroupDescription,Ne as RadioGroupLabel,we as RadioGroupOption}; | ||
"use client";import{useFocusRing as Q}from"@react-aria/focus";import{useHover as Y}from"@react-aria/interactions";import G,{createContext as Z,useCallback as ye,useContext as ee,useMemo as x,useReducer as Re,useRef as W}from"react";import{useByComparator as be}from'../../hooks/use-by-comparator.js';import{useControllable as ge}from'../../hooks/use-controllable.js';import{useDefaultValue as Oe}from'../../hooks/use-default-value.js';import{useEvent as S}from'../../hooks/use-event.js';import{useId as B}from'../../hooks/use-id.js';import{useIsoMorphicEffect as te}from'../../hooks/use-iso-morphic-effect.js';import{useLatestValue as oe}from'../../hooks/use-latest-value.js';import{useSyncRefs as V}from'../../hooks/use-sync-refs.js';import{useDisabled as re}from'../../internal/disabled.js';import{FormFields as Pe}from'../../internal/form-fields.js';import{useProvidedId as ve}from'../../internal/id.js';import{isDisabledReactIssue7711 as ie}from'../../utils/bugs.js';import{Focus as w,FocusResult as ne,focusIn as ae,sortByDomNode as De}from'../../utils/focus-management.js';import{attemptSubmit as Ae}from'../../utils/form.js';import{match as _e}from'../../utils/match.js';import{getOwnerDocument as Ee}from'../../utils/owner.js';import{forwardRefWithAs as K,mergeProps as pe,render as $}from'../../utils/render.js';import{Description as Ge,useDescribedBy as xe,useDescriptions as le}from'../description/description.js';import{Keys as F}from'../keyboard.js';import{Label as Ce,useLabelledBy as he,useLabels as se}from'../label/label.js';var Le=(e=>(e[e.RegisterOption=0]="RegisterOption",e[e.UnregisterOption=1]="UnregisterOption",e))(Le||{});let ke={[0](o,t){let e=[...o.options,{id:t.id,element:t.element,propsRef:t.propsRef}];return{...o,options:De(e,a=>a.element.current)}},[1](o,t){let e=o.options.slice(),a=o.options.findIndex(O=>O.id===t.id);return a===-1?o:(e.splice(a,1),{...o,options:e})}},j=Z(null);j.displayName="RadioGroupDataContext";function J(o){let t=ee(j);if(t===null){let e=new Error(`<${o} /> is missing a parent <RadioGroup /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(e,J),e}return t}let X=Z(null);X.displayName="RadioGroupActionsContext";function z(o){let t=ee(X);if(t===null){let e=new Error(`<${o} /> is missing a parent <RadioGroup /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(e,z),e}return t}function Fe(o,t){return _e(t.type,ke,o,t)}let Ie="div";function Ue(o,t){let e=B(),a=re(),{id:O=`headlessui-radiogroup-${e}`,value:m,form:P,name:i,onChange:f,by:c,disabled:p=a||!1,defaultValue:I,...y}=o,T=be(c),[v,C]=Re(Fe,{options:[]}),n=v.options,[U,h]=se(),[D,L]=le(),A=W(null),M=V(A,t),l=Oe(I),[s,_]=ge(m,f,l),R=x(()=>n.find(r=>!r.propsRef.current.disabled),[n]),b=x(()=>n.some(r=>T(r.propsRef.current.value,s)),[n,s]),d=S(r=>{var u;if(p||T(r,s))return!1;let k=(u=n.find(H=>T(H.propsRef.current.value,r)))==null?void 0:u.propsRef.current;return k!=null&&k.disabled?!1:(_==null||_(r),!0)}),de=S(r=>{let k=A.current;if(!k)return;let u=Ee(k),H=n.filter(g=>g.propsRef.current.disabled===!1).map(g=>g.element.current);switch(r.key){case F.Enter:Ae(r.currentTarget);break;case F.ArrowLeft:case F.ArrowUp:if(r.preventDefault(),r.stopPropagation(),ae(H,w.Previous|w.WrapAround)===ne.Success){let E=n.find(N=>N.element.current===(u==null?void 0:u.activeElement));E&&d(E.propsRef.current.value)}break;case F.ArrowRight:case F.ArrowDown:if(r.preventDefault(),r.stopPropagation(),ae(H,w.Next|w.WrapAround)===ne.Success){let E=n.find(N=>N.element.current===(u==null?void 0:u.activeElement));E&&d(E.propsRef.current.value)}break;case F.Space:{r.preventDefault(),r.stopPropagation();let g=n.find(E=>E.element.current===(u==null?void 0:u.activeElement));g&&d(g.propsRef.current.value)}break}}),q=S(r=>(C({type:0,...r}),()=>C({type:1,id:r.id}))),ue=x(()=>({value:s,firstOption:R,containsCheckedOption:b,disabled:p,compare:T,...v}),[s,R,b,p,T,v]),ce=x(()=>({registerOption:q,change:d}),[q,d]),fe={ref:M,id:O,role:"radiogroup","aria-labelledby":U,"aria-describedby":D,onKeyDown:de},Te=x(()=>({value:s}),[s]),me=ye(()=>{if(l!==void 0)return d(l)},[d,l]);return G.createElement(L,{name:"RadioGroup.Description"},G.createElement(h,{name:"RadioGroup.Label"},G.createElement(X.Provider,{value:ce},G.createElement(j.Provider,{value:ue},i!=null&&G.createElement(Pe,{disabled:p,data:{[i]:s||"on"},overrides:{type:"radio",checked:s!=null},form:P,onReset:me}),$({ourProps:fe,theirProps:y,slot:Te,defaultTag:Ie,name:"RadioGroup"})))))}let Me="div";function Se(o,t){var R;let e=J("RadioGroup.Option"),a=z("RadioGroup.Option"),O=B(),{id:m=`headlessui-radiogroup-option-${O}`,value:P,disabled:i=e.disabled||!1,autoFocus:f=!1,...c}=o,p=W(null),I=V(p,t),[y,T]=se(),[v,C]=le(),n=oe({value:P,disabled:i});te(()=>a.registerOption({id:m,element:p,propsRef:n}),[m,a,p,n]);let U=S(b=>{var d;if(ie(b.currentTarget))return b.preventDefault();a.change(P)&&((d=p.current)==null||d.focus())}),h=((R=e.firstOption)==null?void 0:R.id)===m,{isFocusVisible:D,focusProps:L}=Q({autoFocus:f}),{isHovered:A,hoverProps:M}=Y({isDisabled:i}),l=e.compare(e.value,P),s=pe({ref:I,id:m,role:"radio","aria-checked":l?"true":"false","aria-labelledby":y,"aria-describedby":v,"aria-disabled":i?!0:void 0,tabIndex:(()=>i?-1:l||!e.containsCheckedOption&&h?0:-1)(),onClick:i?void 0:U,autoFocus:f},L,M),_=x(()=>({checked:l,disabled:i,active:D,hover:A,focus:D,autofocus:f}),[l,i,A,D,f]);return G.createElement(C,{name:"RadioGroup.Description"},G.createElement(T,{name:"RadioGroup.Label"},$({ourProps:s,theirProps:c,slot:_,defaultTag:Me,name:"RadioGroup.Option"})))}let He="span";function we(o,t){var R;let e=J("Radio"),a=z("Radio"),O=B(),m=ve(),P=re(),{id:i=m||`headlessui-radio-${O}`,value:f,disabled:c=e.disabled||P||!1,autoFocus:p=!1,...I}=o,y=W(null),T=V(y,t),v=he(),C=xe(),n=oe({value:f,disabled:c});te(()=>a.registerOption({id:i,element:y,propsRef:n}),[i,a,y,n]);let U=S(b=>{var d;if(ie(b.currentTarget))return b.preventDefault();a.change(f)&&((d=y.current)==null||d.focus())}),{isFocusVisible:h,focusProps:D}=Q({autoFocus:p}),{isHovered:L,hoverProps:A}=Y({isDisabled:c}),M=((R=e.firstOption)==null?void 0:R.id)===i,l=e.compare(e.value,f),s=pe({ref:T,id:i,role:"radio","aria-checked":l?"true":"false","aria-labelledby":v,"aria-describedby":C,"aria-disabled":c?!0:void 0,tabIndex:(()=>c?-1:l||!e.containsCheckedOption&&M?0:-1)(),autoFocus:p,onClick:c?void 0:U},D,A),_=x(()=>({checked:l,disabled:c,hover:L,focus:h,autofocus:p}),[l,c,L,h,p]);return $({ourProps:s,theirProps:I,slot:_,defaultTag:He,name:"Radio"})}let Ne=K(Ue),We=K(Se),Be=K(we),Ve=Ce,Ke=Ge,Tt=Object.assign(Ne,{Option:We,Radio:Be,Label:Ve,Description:Ke});export{Be as Radio,Tt as RadioGroup,Ke as RadioGroupDescription,Ve as RadioGroupLabel,We as RadioGroupOption}; |
@@ -44,2 +44,3 @@ import React, { type ElementType, type Ref } from 'react'; | ||
} | ||
/** @deprecated use `<Field>` instead of `<SwitchGroup>` */ | ||
export declare let SwitchGroup: _internal_ComponentSwitchGroup; | ||
@@ -51,2 +52,3 @@ /** @deprecated use `<Label>` instead of `<SwitchLabel>` */ | ||
export declare let Switch: _internal_ComponentSwitch & { | ||
/** @deprecated use `<Field>` instead of `<Switch.Group>` */ | ||
Group: _internal_ComponentSwitchGroup; | ||
@@ -53,0 +55,0 @@ /** @deprecated use `<Label>` instead of `<Switch.Label>` */ |
@@ -1,1 +0,1 @@ | ||
"use client";import{useFocusRing as V}from"@react-aria/focus";import{useHover as $}from"@react-aria/interactions";import l,{Fragment as q,createContext as z,useCallback as Q,useContext as Y,useMemo as C,useRef as Z,useState as L}from"react";import{useActivePress as ee}from'../../hooks/use-active-press.js';import{useControllable as te}from'../../hooks/use-controllable.js';import{useDisposables as oe}from'../../hooks/use-disposables.js';import{useEvent as m}from'../../hooks/use-event.js';import{useId as re}from'../../hooks/use-id.js';import{useResolveButtonType as ne}from'../../hooks/use-resolve-button-type.js';import{useSyncRefs as le}from'../../hooks/use-sync-refs.js';import{useDisabled as ie}from'../../internal/disabled.js';import{FormFields as ae}from'../../internal/form-fields.js';import{useProvidedId as se}from'../../internal/id.js';import{isDisabledReactIssue7711 as pe}from'../../utils/bugs.js';import{attemptSubmit as ce}from'../../utils/form.js';import{forwardRefWithAs as ue,mergeProps as de,render as G}from'../../utils/render.js';import{Description as me,useDescribedBy as fe,useDescriptions as be}from'../description/description.js';import{Keys as R}from'../keyboard.js';import{Label as he,useLabelledBy as Te,useLabels as ye}from'../label/label.js';let y=z(null);y.displayName="GroupContext";let Se=q;function we(n){var i;let[o,s]=L(null),[f,b]=ye(),[h,t]=be(),p=C(()=>({switch:o,setSwitch:s}),[o,s]),c={},T=n;return l.createElement(t,{name:"Switch.Description",value:h},l.createElement(b,{name:"Switch.Label",value:f,props:{htmlFor:(i=p.switch)==null?void 0:i.id,onClick(u){o&&(u.currentTarget instanceof HTMLLabelElement&&u.preventDefault(),o.click(),o.focus({preventScroll:!0}))}}},l.createElement(y.Provider,{value:p},G({ourProps:c,theirProps:T,slot:{},defaultTag:Se,name:"Switch.Group"}))))}let _e="button";function Pe(n,o){var x;let s=re(),f=se(),b=ie(),{id:h=f||`headlessui-switch-${s}`,disabled:t=b||!1,checked:p,defaultChecked:c=!1,onChange:T,name:i,value:u,form:A,autoFocus:d=!1,...F}=n,S=Y(y),w=Z(null),k=le(w,o,S===null?null:S.setSwitch),[a,r]=te(p,T,c),H=oe(),[_,P]=L(!1),E=m(()=>{P(!0),r==null||r(!a),H.nextFrame(()=>{P(!1)})}),M=m(e=>{if(pe(e.currentTarget))return e.preventDefault();e.preventDefault(),E()}),U=m(e=>{e.key===R.Space?(e.preventDefault(),E()):e.key===R.Enter&&ce(e.currentTarget)}),I=m(e=>e.preventDefault()),B=Te(),K=fe(),{isFocusVisible:g,focusProps:W}=V({autoFocus:d}),{isHovered:D,hoverProps:O}=$({isDisabled:t}),{pressed:v,pressProps:N}=ee({disabled:t}),J=C(()=>({checked:a,disabled:t,hover:D,focus:g,active:v,autofocus:d,changing:_}),[a,D,g,v,t,_,d]),X=de({id:h,ref:k,role:"switch",type:ne(n,w),tabIndex:n.tabIndex===-1?0:(x=n.tabIndex)!=null?x:0,"aria-checked":a,"aria-labelledby":B,"aria-describedby":K,disabled:t||void 0,autoFocus:d,onClick:M,onKeyUp:U,onKeyPress:I},W,O,N),j=Q(()=>r==null?void 0:r(c),[r]);return l.createElement(l.Fragment,null,i!=null&&l.createElement(ae,{disabled:t,data:{[i]:u||"on"},overrides:{type:"checkbox",checked:a},form:A,onReset:j}),G({ourProps:X,theirProps:F,slot:J,defaultTag:_e,name:"Switch"}))}let Ee=ue(Pe),ge=we,De=he,ve=me,je=Object.assign(Ee,{Group:ge,Label:De,Description:ve});export{je as Switch,ve as SwitchDescription,ge as SwitchGroup,De as SwitchLabel}; | ||
"use client";import{useFocusRing as $}from"@react-aria/focus";import{useHover as q}from"@react-aria/interactions";import i,{Fragment as z,createContext as Q,useCallback as Y,useContext as Z,useMemo as L,useRef as ee,useState as G}from"react";import{useActivePress as te}from'../../hooks/use-active-press.js';import{useControllable as oe}from'../../hooks/use-controllable.js';import{useDefaultValue as re}from'../../hooks/use-default-value.js';import{useDisposables as ne}from'../../hooks/use-disposables.js';import{useEvent as m}from'../../hooks/use-event.js';import{useId as le}from'../../hooks/use-id.js';import{useResolveButtonType as ie}from'../../hooks/use-resolve-button-type.js';import{useSyncRefs as ae}from'../../hooks/use-sync-refs.js';import{useDisabled as se}from'../../internal/disabled.js';import{FormFields as pe}from'../../internal/form-fields.js';import{useProvidedId as ce}from'../../internal/id.js';import{isDisabledReactIssue7711 as ue}from'../../utils/bugs.js';import{attemptSubmit as de}from'../../utils/form.js';import{forwardRefWithAs as me,mergeProps as fe,render as R}from'../../utils/render.js';import{Description as be,useDescribedBy as he,useDescriptions as Te}from'../description/description.js';import{Keys as A}from'../keyboard.js';import{Label as ye,useLabelledBy as Se,useLabels as we}from'../label/label.js';let S=Q(null);S.displayName="GroupContext";let _e=z;function Pe(n){var a;let[o,p]=G(null),[f,b]=we(),[h,t]=Te(),c=L(()=>({switch:o,setSwitch:p}),[o,p]),T={},y=n;return i.createElement(t,{name:"Switch.Description",value:h},i.createElement(b,{name:"Switch.Label",value:f,props:{htmlFor:(a=c.switch)==null?void 0:a.id,onClick(u){o&&(u.currentTarget instanceof HTMLLabelElement&&u.preventDefault(),o.click(),o.focus({preventScroll:!0}))}}},i.createElement(S.Provider,{value:c},R({ourProps:T,theirProps:y,slot:{},defaultTag:_e,name:"Switch.Group"}))))}let Ee="button";function De(n,o){var C;let p=le(),f=ce(),b=se(),{id:h=f||`headlessui-switch-${p}`,disabled:t=b||!1,checked:c,defaultChecked:T,onChange:y,name:a,value:u,form:F,autoFocus:d=!1,...k}=n,w=Z(S),_=ee(null),H=ae(_,o,w===null?null:w.setSwitch),l=re(T),[s,r]=oe(c,y,l!=null?l:!1),M=ne(),[P,E]=G(!1),D=m(()=>{E(!0),r==null||r(!s),M.nextFrame(()=>{E(!1)})}),U=m(e=>{if(ue(e.currentTarget))return e.preventDefault();e.preventDefault(),D()}),I=m(e=>{e.key===A.Space?(e.preventDefault(),D()):e.key===A.Enter&&de(e.currentTarget)}),B=m(e=>e.preventDefault()),K=Se(),W=he(),{isFocusVisible:g,focusProps:O}=$({autoFocus:d}),{isHovered:v,hoverProps:N}=q({isDisabled:t}),{pressed:x,pressProps:J}=te({disabled:t}),V=L(()=>({checked:s,disabled:t,hover:v,focus:g,active:x,autofocus:d,changing:P}),[s,v,g,x,t,P,d]),X=fe({id:h,ref:H,role:"switch",type:ie(n,_),tabIndex:n.tabIndex===-1?0:(C=n.tabIndex)!=null?C:0,"aria-checked":s,"aria-labelledby":K,"aria-describedby":W,disabled:t||void 0,autoFocus:d,onClick:U,onKeyUp:I,onKeyPress:B},O,N,J),j=Y(()=>{if(l!==void 0)return r==null?void 0:r(l)},[r,l]);return i.createElement(i.Fragment,null,a!=null&&i.createElement(pe,{disabled:t,data:{[a]:u||"on"},overrides:{type:"checkbox",checked:s},form:F,onReset:j}),R({ourProps:X,theirProps:k,slot:V,defaultTag:Ee,name:"Switch"}))}let ge=me(De),ve=Pe,xe=ye,Ce=be,qe=Object.assign(ge,{Group:ve,Label:xe,Description:Ce});export{qe as Switch,Ce as SwitchDescription,ve as SwitchGroup,xe as SwitchLabel}; |
@@ -77,7 +77,11 @@ import React, { type ElementType, type Ref } from 'react'; | ||
export declare let Tab: _internal_ComponentTab & { | ||
/** @deprecated use `<TabGroup>` instead of `<Tab.Group>` */ | ||
Group: _internal_ComponentTabGroup; | ||
/** @deprecated use `<TabList>` instead of `<Tab.List>` */ | ||
List: _internal_ComponentTabList; | ||
/** @deprecated use `<TabPanels>` instead of `<Tab.Panels>` */ | ||
Panels: _internal_ComponentTabPanels; | ||
/** @deprecated use `<TabPanel>` instead of `<Tab.Panel>` */ | ||
Panel: _internal_ComponentTabPanel; | ||
}; | ||
export {}; |
@@ -1,1 +0,1 @@ | ||
"use client";var J=Object.defineProperty;var X=(o,e,t)=>e in o?J(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t;var f=(o,e,t)=>(X(o,typeof e!="symbol"?e+"":e,t),t);import{useFocusRing as $}from"@react-aria/focus";import{useHover as j}from"@react-aria/interactions";import c,{Fragment as A,createContext as w,useContext as C,useEffect as q,useId as z,useMemo as P,useReducer as Q,useRef as M,useSyncExternalStore as Y}from"react";import{useDisposables as Z}from'../../hooks/use-disposables.js';import{useEvent as p}from'../../hooks/use-event.js';import{useSyncRefs as b}from'../../hooks/use-sync-refs.js';import{FloatingProvider as ee,useFloatingPanel as te,useFloatingReference as oe}from'../../internal/floating.js';import{State as G,useOpenClosed as ie}from'../../internal/open-closed.js';import{match as a}from'../../utils/match.js';import{RenderFeatures as O,forwardRefWithAs as R,mergeProps as re,render as I}from'../../utils/render.js';import{Description as U,useDescribedBy as ne,useDescriptions as le}from'../description/description.js';import{Keys as F}from'../keyboard.js';import{Portal as pe}from'../portal/portal.js';var ae=(r=>(r[r.Hidden=0]="Hidden",r[r.Initiated=1]="Initiated",r[r.Visible=2]="Visible",r[r.Hiding=3]="Hiding",r))(ae||{}),se=(t=>(t[t.Delayed=0]="Delayed",t[t.Immediate=1]="Immediate",t))(se||{});class Te{constructor(){f(this,"_state",null);f(this,"_listeners",[]);f(this,"subscribe",e=>(this._listeners.push(e),()=>{this._listeners=this._listeners.filter(t=>t!==e)}));f(this,"getSnapshot",()=>this._state);f(this,"getServerSnapshot",()=>this._state);f(this,"setTooltipId",e=>{this._state!==e&&(this._state=e,this._listeners.forEach(t=>t(e)))})}}let S=new Te;var de=(t=>(t[t.ShowTooltip=0]="ShowTooltip",t[t.HideTooltip=1]="HideTooltip",t))(de||{});let ue={[0](o,e){return{...o,tooltipState:a(o.tooltipState,{[0]:a(e.when,{[1]:2,[0]:1}),[1]:a(e.when,{[1]:2,[0]:1}),[2]:2,[3]:2})}},[1](o,e){return{...o,tooltipState:a(o.tooltipState,{[0]:0,[1]:0,[2]:a(e.when,{[1]:0,[0]:3}),[3]:a(e.when,{[1]:0,[0]:3})})}}},H=w(null);H.displayName="TooltipActionsContext";function V(o){let e=C(H);if(e===null){let t=new Error(`<${o} /> is missing a parent <Tooltip /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(t,V),t}return e}let x=w(null);x.displayName="TooltipDataContext";function W(o){let e=C(x);if(e===null){let t=new Error(`<${o} /> is missing a parent <Tooltip /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(t,W),t}return e}function me(o,e){return a(e.type,ue,o,e)}let fe=A;function ge(o,e){let{id:t=`headlessui-tooltip-${z()}`,showDelayMs:s=750,hideDelayMs:r=300,...T}=o,i=Y(S.subscribe,S.getSnapshot,S.getServerSnapshot),[n,g]=Q(me,{id:t,tooltipState:0}),[y,m]=le(),d=Z();q(()=>{d.dispose(),a(n.tooltipState,{[0](){},[1](){d.setTimeout(()=>u(1),s)},[2](){},[3](){d.setTimeout(()=>h(1),r)}})},[d,n.tooltipState,s,r]);let u=p(l=>{l===0&&i!==null&&i!==t&&(l=1),l===1&&S.setTooltipId(t),g({type:0,when:l})}),h=p(l=>{i===t&&l===1&&S.setTooltipId(null),g({type:1,when:l})}),E={ref:b(e)},D=P(()=>({}),[]),_=P(()=>({visible:i===n.id&&a(n.tooltipState,{[0]:!1,[1]:!1,[2]:!0,[3]:!0}),...n}),[i,n]),v=P(()=>({showTooltip:u,hideTooltip:h}),[u,h]);return c.createElement(m,{value:y},c.createElement(ee,null,c.createElement(H.Provider,{value:v},c.createElement(x.Provider,{value:_},I({ourProps:E,theirProps:T,slot:D,defaultTag:fe,name:"Tooltip"})))))}let ye=A;function ce(o,e){let{disabled:t=!1,autoFocus:s=!1,...r}=o,T=W("TooltipTrigger"),i=V("TooltipTrigger"),n=ne(),g=M(null),y=b(g,e,oe()),{isFocusVisible:m,focusProps:d}=$({autoFocus:s}),{isHovered:u,hoverProps:h}=j({isDisabled:t}),L=p(K=>{switch(K.key){case F.Enter:case F.Escape:case F.Space:if(T.tooltipState===2)return i.hideTooltip(1);break}}),E=p(()=>{i.showTooltip(1)}),D=p(()=>{i.hideTooltip(1)}),_=p(()=>{i.hideTooltip(1)}),v=p(()=>{i.showTooltip(0)}),l=p(()=>{i.hideTooltip(0)}),N=p(()=>{T.tooltipState===3&&i.showTooltip(1)}),B=P(()=>({hover:u,focus:m,autofocus:s}),[u,m,s]),k=re({ref:y,"aria-describedby":T.visible?n:void 0,onKeyDown:L,onFocus:E,onBlur:D,onMouseDown:_,onMouseEnter:v,onMouseLeave:l,onMouseMove:N},d,h);return I({ourProps:k,theirProps:r,slot:B,defaultTag:ye,name:"TooltipTrigger"})}let we=U,he=O.RenderStrategy|O.Static;function Pe(o,e){let{anchor:t={to:"top",padding:8,gap:8,offset:-4},...s}=o,r=W("TooltipPanel"),T=ie(),i=(()=>T!==null?(T&G.Open)===G.Open:r.visible)(),n=M(null),[g,y]=te(i?t:void 0),m=b(n,e,g),d={ref:m,role:"tooltip",...y?{style:y}:{}},u=P(()=>({}),[]);return I({ourProps:{...d,as:A,children:c.createElement(pe,null,c.createElement(U,{ref:m,...s}))},theirProps:{},slot:u,defaultTag:A,features:he,visible:i,name:"TooltipPanel"})}let Ce=R(ge),Me=R(ce),Ge=R(Pe);export{Ce as Tooltip,Ge as TooltipPanel,Me as TooltipTrigger}; | ||
"use client";var J=Object.defineProperty;var X=(o,t,e)=>t in o?J(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e;var g=(o,t,e)=>(X(o,typeof t!="symbol"?t+"":t,e),e);import{useFocusRing as $}from"@react-aria/focus";import{useHover as j}from"@react-aria/interactions";import c,{Fragment as A,createContext as w,useContext as C,useEffect as q,useId as z,useMemo as P,useReducer as Q,useRef as M,useSyncExternalStore as Y}from"react";import{useDisposables as Z}from'../../hooks/use-disposables.js';import{useEvent as a}from'../../hooks/use-event.js';import{useSyncRefs as b}from'../../hooks/use-sync-refs.js';import{FloatingProvider as ee,useFloatingPanel as te,useFloatingReference as oe,useResolvedAnchor as ie}from'../../internal/floating.js';import{State as G,useOpenClosed as re}from'../../internal/open-closed.js';import{match as s}from'../../utils/match.js';import{RenderFeatures as O,forwardRefWithAs as R,mergeProps as ne,render as I}from'../../utils/render.js';import{Description as U,useDescribedBy as le,useDescriptions as pe}from'../description/description.js';import{Keys as F}from'../keyboard.js';import{Portal as ae}from'../portal/portal.js';var se=(r=>(r[r.Hidden=0]="Hidden",r[r.Initiated=1]="Initiated",r[r.Visible=2]="Visible",r[r.Hiding=3]="Hiding",r))(se||{}),Te=(e=>(e[e.Delayed=0]="Delayed",e[e.Immediate=1]="Immediate",e))(Te||{});class de{constructor(){g(this,"_state",null);g(this,"_listeners",[]);g(this,"subscribe",t=>(this._listeners.push(t),()=>{this._listeners=this._listeners.filter(e=>e!==t)}));g(this,"getSnapshot",()=>this._state);g(this,"getServerSnapshot",()=>this._state);g(this,"setTooltipId",t=>{this._state!==t&&(this._state=t,this._listeners.forEach(e=>e(t)))})}}let S=new de;var ue=(e=>(e[e.ShowTooltip=0]="ShowTooltip",e[e.HideTooltip=1]="HideTooltip",e))(ue||{});let me={[0](o,t){return{...o,tooltipState:s(o.tooltipState,{[0]:s(t.when,{[1]:2,[0]:1}),[1]:s(t.when,{[1]:2,[0]:1}),[2]:2,[3]:2})}},[1](o,t){return{...o,tooltipState:s(o.tooltipState,{[0]:0,[1]:0,[2]:s(t.when,{[1]:0,[0]:3}),[3]:s(t.when,{[1]:0,[0]:3})})}}},H=w(null);H.displayName="TooltipActionsContext";function V(o){let t=C(H);if(t===null){let e=new Error(`<${o} /> is missing a parent <Tooltip /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(e,V),e}return t}let x=w(null);x.displayName="TooltipDataContext";function W(o){let t=C(x);if(t===null){let e=new Error(`<${o} /> is missing a parent <Tooltip /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(e,W),e}return t}function fe(o,t){return s(t.type,me,o,t)}let ge=A;function ye(o,t){let{id:e=`headlessui-tooltip-${z()}`,showDelayMs:T=750,hideDelayMs:r=300,...d}=o,i=Y(S.subscribe,S.getSnapshot,S.getServerSnapshot),[n,y]=Q(fe,{id:e,tooltipState:0}),[h,m]=pe(),l=Z();q(()=>{l.dispose(),s(n.tooltipState,{[0](){},[1](){l.setTimeout(()=>u(1),T)},[2](){},[3](){l.setTimeout(()=>f(1),r)}})},[l,n.tooltipState,T,r]);let u=a(p=>{p===0&&i!==null&&i!==e&&(p=1),p===1&&S.setTooltipId(e),y({type:0,when:p})}),f=a(p=>{i===e&&p===1&&S.setTooltipId(null),y({type:1,when:p})}),E={ref:b(t)},D=P(()=>({}),[]),_=P(()=>({visible:i===n.id&&s(n.tooltipState,{[0]:!1,[1]:!1,[2]:!0,[3]:!0}),...n}),[i,n]),v=P(()=>({showTooltip:u,hideTooltip:f}),[u,f]);return c.createElement(m,{value:h},c.createElement(ee,null,c.createElement(H.Provider,{value:v},c.createElement(x.Provider,{value:_},I({ourProps:E,theirProps:d,slot:D,defaultTag:ge,name:"Tooltip"})))))}let ce=A;function he(o,t){let{disabled:e=!1,autoFocus:T=!1,...r}=o,d=W("TooltipTrigger"),i=V("TooltipTrigger"),n=le(),y=M(null),h=b(y,t,oe()),{isFocusVisible:m,focusProps:l}=$({autoFocus:T}),{isHovered:u,hoverProps:f}=j({isDisabled:e}),L=a(K=>{switch(K.key){case F.Enter:case F.Escape:case F.Space:if(d.tooltipState===2)return i.hideTooltip(1);break}}),E=a(()=>{i.showTooltip(1)}),D=a(()=>{i.hideTooltip(1)}),_=a(()=>{i.hideTooltip(1)}),v=a(()=>{i.showTooltip(0)}),p=a(()=>{i.hideTooltip(0)}),N=a(()=>{d.tooltipState===3&&i.showTooltip(1)}),B=P(()=>({hover:u,focus:m,autofocus:T}),[u,m,T]),k=ne({ref:h,"aria-describedby":d.visible?n:void 0,onKeyDown:L,onFocus:E,onBlur:D,onMouseDown:_,onMouseEnter:v,onMouseLeave:p,onMouseMove:N},l,f);return I({ourProps:k,theirProps:r,slot:B,defaultTag:ce,name:"TooltipTrigger"})}let Ce=U,Pe=O.RenderStrategy|O.Static;function Se(o,t){let{anchor:e,...T}=o,r=W("TooltipPanel"),d=re(),i=(()=>d!==null?(d&G.Open)===G.Open:r.visible)(),n=M(null),y=ie(e!=null?e:{to:"top",padding:8,gap:8,offset:-4}),[h,m]=te(i?y:void 0),l=b(n,t,h),u={ref:l,role:"tooltip",...m?{style:m}:{}},f=P(()=>({}),[]);return I({ourProps:{...u,as:A,children:c.createElement(ae,null,c.createElement(U,{ref:l,...T}))},theirProps:{},slot:f,defaultTag:A,features:Pe,visible:i,name:"TooltipPanel"})}let Me=R(ye),Ge=R(he),Oe=R(Se);export{Me as Tooltip,Oe as TooltipPanel,Ge as TooltipTrigger}; |
@@ -29,3 +29,3 @@ import React, { type ElementType, type MutableRefObject, type Ref } from 'react'; | ||
}>; | ||
type TransitionChildRenderPropArg = MutableRefObject<HTMLDivElement>; | ||
type TransitionChildRenderPropArg = MutableRefObject<HTMLElement>; | ||
declare let TransitionChildRenderFeatures: RenderFeatures; | ||
@@ -46,5 +46,7 @@ declare function TransitionChildFn<TTag extends ElementType = typeof DEFAULT_TRANSITION_CHILD_TAG>(props: TransitionChildProps<TTag>, ref: Ref<HTMLElement>): React.JSX.Element; | ||
export declare let Transition: _internal_ComponentTransitionRoot & { | ||
/** @deprecated use `<TransitionChild>` instead of `<Transition.Child>` */ | ||
Child: _internal_ComponentTransitionChild; | ||
/** @deprecated use `<Transition>` instead of `<Transition.Root>` */ | ||
Root: _internal_ComponentTransitionRoot; | ||
}; | ||
export {}; |
@@ -1,1 +0,1 @@ | ||
"use client";import T,{Fragment as B,createContext as oe,useContext as z,useMemo as se,useRef as E,useState as K}from"react";import{useDisposables as be}from'../../hooks/use-disposables.js';import{useEvent as S}from'../../hooks/use-event.js';import{useFlags as Ee}from'../../hooks/use-flags.js';import{useIsMounted as Se}from'../../hooks/use-is-mounted.js';import{useIsoMorphicEffect as I}from'../../hooks/use-iso-morphic-effect.js';import{useLatestValue as O}from'../../hooks/use-latest-value.js';import{useOnDisappear as Ne}from'../../hooks/use-on-disappear.js';import{useServerHandoffComplete as ae}from'../../hooks/use-server-handoff-complete.js';import{useSyncRefs as le}from'../../hooks/use-sync-refs.js';import{useTransition as ye}from'../../hooks/use-transition.js';import{OpenClosedProvider as Re,State as N,useOpenClosed as ue}from'../../internal/open-closed.js';import{classNames as Q}from'../../utils/class-names.js';import{match as _}from'../../utils/match.js';import{RenderFeatures as Pe,RenderStrategy as x,forwardRefWithAs as Y,render as Te}from'../../utils/render.js';function y(t=""){return t.split(/\s+/).filter(n=>n.length>1)}function de(t){var n;return!!(t.enter||t.enterFrom||t.enterTo||t.leave||t.leaveFrom||t.leaveTo)||((n=t.as)!=null?n:me)!==B||T.Children.count(t.children)===1}let W=oe(null);W.displayName="TransitionContext";var xe=(r=>(r.Visible="visible",r.Hidden="hidden",r))(xe||{});function De(){let t=z(W);if(t===null)throw new Error("A <Transition.Child /> is used but it is missing a parent <Transition /> or <Transition.Root />.");return t}function Fe(){let t=z(k);if(t===null)throw new Error("A <Transition.Child /> is used but it is missing a parent <Transition /> or <Transition.Root />.");return t}let k=oe(null);k.displayName="NestingContext";function q(t){return"children"in t?q(t.children):t.current.filter(({el:n})=>n.current!==null).filter(({state:n})=>n==="visible").length>0}function fe(t,n){let r=O(t),a=E([]),H=Se(),L=be(),p=S((i,e=x.Hidden)=>{let o=a.current.findIndex(({el:s})=>s===i);o!==-1&&(_(e,{[x.Unmount](){a.current.splice(o,1)},[x.Hidden](){a.current[o].state="hidden"}}),L.microTask(()=>{var s;!q(a)&&H.current&&((s=r.current)==null||s.call(r))}))}),D=S(i=>{let e=a.current.find(({el:o})=>o===i);return e?e.state!=="visible"&&(e.state="visible"):a.current.push({el:i,state:"visible"}),()=>p(i,x.Unmount)}),R=E([]),d=E(Promise.resolve()),C=E({enter:[],leave:[],idle:[]}),f=S((i,e,o)=>{R.current.splice(0),n&&(n.chains.current[e]=n.chains.current[e].filter(([s])=>s!==i)),n==null||n.chains.current[e].push([i,new Promise(s=>{R.current.push(s)})]),n==null||n.chains.current[e].push([i,new Promise(s=>{Promise.all(C.current[e].map(([g,m])=>m)).then(()=>s())})]),e==="enter"?d.current=d.current.then(()=>n==null?void 0:n.wait.current).then(()=>o(e)):o(e)}),h=S((i,e,o)=>{Promise.all(C.current[e].splice(0).map(([s,g])=>g)).then(()=>{var s;(s=R.current.shift())==null||s()}).then(()=>o(e))});return se(()=>({children:a,register:D,unregister:p,onStart:f,onStop:h,wait:d,chains:C}),[D,p,a,f,h,C,d])}let me=B,ce=Pe.RenderStrategy;function _e(t,n){var ne,re,ie;let{beforeEnter:r,afterEnter:a,beforeLeave:H,afterLeave:L,enter:p,enterFrom:D,enterTo:R,entered:d,leave:C,leaveFrom:f,leaveTo:h,...i}=t,e=E(null),o=de(t),s=le(...o?[e,n]:n===null?[]:[n]),g=(ne=i.unmount)==null||ne?x.Unmount:x.Hidden,{show:m,appear:V,initial:v}=De(),[P,J]=K(m?"visible":"hidden"),$=Fe(),{register:w,unregister:M}=$;I(()=>w(e),[w,e]),I(()=>{if(g===x.Hidden&&e.current){if(m&&P!=="visible"){J("visible");return}return _(P,{["hidden"]:()=>M(e),["visible"]:()=>w(e)})}},[P,e,w,M,m,g]);let F=O({base:y(i.className),enter:y(p),enterFrom:y(D),enterTo:y(R),entered:y(d),leave:y(C),leaveFrom:y(f),leaveTo:y(h)}),U=O({beforeEnter:r,afterEnter:a,beforeLeave:H,afterLeave:L}),X=ae();I(()=>{if(o&&X&&P==="visible"&&e.current===null)throw new Error("Did you forget to passthrough the `ref` to the actual DOM node?")},[e,P,X,o]);let Ce=v&&!V,ee=V&&m&&v,te=(()=>ee?"enter":!X||Ce?"idle":m?"enter":"leave")(),A=Ee(0),he=S(b=>_(b,{enter:()=>{var l,u;A.addFlag(N.Opening),(u=(l=U.current).beforeEnter)==null||u.call(l)},leave:()=>{var l,u;A.addFlag(N.Closing),(u=(l=U.current).beforeLeave)==null||u.call(l)},idle:()=>{}})),ge=S(b=>_(b,{enter:()=>{var l,u;A.removeFlag(N.Opening),(u=(l=U.current).afterEnter)==null||u.call(l)},leave:()=>{var l,u;A.removeFlag(N.Closing),(u=(l=U.current).afterLeave)==null||u.call(l)},idle:()=>{}})),j=E(!1),G=fe(()=>{j.current||(J("hidden"),M(e))},$);ye({container:e,classes:F,direction:te,onStart:O(b=>{j.current=!0,G.onStart(e,b,he)}),onStop:O(b=>{j.current=!1,G.onStop(e,b,ge),b==="leave"&&!q(G)&&(J("hidden"),M(e))})});let c=i,ve={ref:s};return ee?c={...c,className:Q(i.className,...F.current.enter,...F.current.enterFrom)}:j.current?(c.className=Q(i.className,(re=e.current)==null?void 0:re.className),c.className===""&&delete c.className):(c.className=Q(i.className,(ie=e.current)==null?void 0:ie.className,..._(te,{enter:[...F.current.enterTo,...F.current.entered],leave:F.current.leaveTo,idle:[]})),c.className===""&&delete c.className),T.createElement(k.Provider,{value:G},T.createElement(Re,{value:_(P,{["visible"]:N.Open,["hidden"]:N.Closed})|A.flags},Te({ourProps:ve,theirProps:c,defaultTag:me,features:ce,visible:P==="visible",name:"Transition.Child"})))}function He(t,n){let{show:r,appear:a=!1,unmount:H=!0,...L}=t,p=E(null),D=de(t),R=le(...D?[p,n]:n===null?[]:[n]);ae();let d=ue();if(r===void 0&&d!==null&&(r=(d&N.Open)===N.Open),r===void 0)throw new Error("A <Transition /> is used but it is missing a `show={true | false}` prop.");let[C,f]=K(r?"visible":"hidden"),h=fe(()=>{f("hidden")}),[i,e]=K(!0),o=E([r]);I(()=>{i!==!1&&o.current[o.current.length-1]!==r&&(o.current.push(r),e(!1))},[o,r]);let s=se(()=>({show:r,appear:a,initial:i}),[r,a,i]);Ne(p,()=>f("hidden")),I(()=>{r?f("visible"):q(h)||f("hidden")},[r,h]);let g={unmount:H},m=S(()=>{var v;i&&e(!1),(v=t.beforeEnter)==null||v.call(t)}),V=S(()=>{var v;i&&e(!1),(v=t.beforeLeave)==null||v.call(t)});return T.createElement(k.Provider,{value:h},T.createElement(W.Provider,{value:s},Te({ourProps:{...g,as:B,children:T.createElement(pe,{ref:R,...g,...L,beforeEnter:m,beforeLeave:V})},theirProps:{},defaultTag:B,features:ce,visible:C==="visible",name:"Transition"})))}function Le(t,n){let r=z(W)!==null,a=ue()!==null;return T.createElement(T.Fragment,null,!r&&a?T.createElement(Z,{ref:n,...t}):T.createElement(pe,{ref:n,...t}))}let Z=Y(He),pe=Y(_e),Ae=Y(Le),Ke=Object.assign(Z,{Child:Ae,Root:Z});export{Ke as Transition,Ae as TransitionChild}; | ||
"use client";import T,{Fragment as B,createContext as oe,useContext as z,useMemo as se,useRef as E,useState as K}from"react";import{useDisposables as be}from'../../hooks/use-disposables.js';import{useEvent as S}from'../../hooks/use-event.js';import{useFlags as Ee}from'../../hooks/use-flags.js';import{useIsMounted as Se}from'../../hooks/use-is-mounted.js';import{useIsoMorphicEffect as I}from'../../hooks/use-iso-morphic-effect.js';import{useLatestValue as O}from'../../hooks/use-latest-value.js';import{useOnDisappear as Ne}from'../../hooks/use-on-disappear.js';import{useServerHandoffComplete as ae}from'../../hooks/use-server-handoff-complete.js';import{useSyncRefs as le}from'../../hooks/use-sync-refs.js';import{useTransition as ye}from'../../hooks/use-transition.js';import{OpenClosedProvider as Re,State as N,useOpenClosed as ue}from'../../internal/open-closed.js';import{classNames as Q}from'../../utils/class-names.js';import{match as D}from'../../utils/match.js';import{RenderFeatures as Pe,RenderStrategy as x,forwardRefWithAs as Y,render as Te}from'../../utils/render.js';function y(t=""){return t.split(/\s+/).filter(n=>n.length>1)}function de(t){var n;return!!(t.enter||t.enterFrom||t.enterTo||t.leave||t.leaveFrom||t.leaveTo)||((n=t.as)!=null?n:me)!==B||T.Children.count(t.children)===1}let W=oe(null);W.displayName="TransitionContext";var xe=(r=>(r.Visible="visible",r.Hidden="hidden",r))(xe||{});function Fe(){let t=z(W);if(t===null)throw new Error("A <Transition.Child /> is used but it is missing a parent <Transition /> or <Transition.Root />.");return t}function _e(){let t=z(k);if(t===null)throw new Error("A <Transition.Child /> is used but it is missing a parent <Transition /> or <Transition.Root />.");return t}let k=oe(null);k.displayName="NestingContext";function q(t){return"children"in t?q(t.children):t.current.filter(({el:n})=>n.current!==null).filter(({state:n})=>n==="visible").length>0}function fe(t,n){let r=O(t),a=E([]),H=Se(),L=be(),d=S((i,e=x.Hidden)=>{let o=a.current.findIndex(({el:s})=>s===i);o!==-1&&(D(e,{[x.Unmount](){a.current.splice(o,1)},[x.Hidden](){a.current[o].state="hidden"}}),L.microTask(()=>{var s;!q(a)&&H.current&&((s=r.current)==null||s.call(r))}))}),F=S(i=>{let e=a.current.find(({el:o})=>o===i);return e?e.state!=="visible"&&(e.state="visible"):a.current.push({el:i,state:"visible"}),()=>d(i,x.Unmount)}),R=E([]),f=E(Promise.resolve()),C=E({enter:[],leave:[],idle:[]}),m=S((i,e,o)=>{R.current.splice(0),n&&(n.chains.current[e]=n.chains.current[e].filter(([s])=>s!==i)),n==null||n.chains.current[e].push([i,new Promise(s=>{R.current.push(s)})]),n==null||n.chains.current[e].push([i,new Promise(s=>{Promise.all(C.current[e].map(([g,c])=>c)).then(()=>s())})]),e==="enter"?f.current=f.current.then(()=>n==null?void 0:n.wait.current).then(()=>o(e)):o(e)}),h=S((i,e,o)=>{Promise.all(C.current[e].splice(0).map(([s,g])=>g)).then(()=>{var s;(s=R.current.shift())==null||s()}).then(()=>o(e))});return se(()=>({children:a,register:F,unregister:d,onStart:m,onStop:h,wait:f,chains:C}),[F,d,a,m,h,C,f])}let me=B,ce=Pe.RenderStrategy;function De(t,n){var ne,re,ie;let{beforeEnter:r,afterEnter:a,beforeLeave:H,afterLeave:L,enter:d,enterFrom:F,enterTo:R,entered:f,leave:C,leaveFrom:m,leaveTo:h,...i}=t,e=E(null),o=de(t),s=le(...o?[e,n]:n===null?[]:[n]),g=(ne=i.unmount)==null||ne?x.Unmount:x.Hidden,{show:c,appear:V,initial:v}=Fe(),[P,J]=K(c?"visible":"hidden"),$=_e(),{register:w,unregister:M}=$;I(()=>w(e),[w,e]),I(()=>{if(g===x.Hidden&&e.current){if(c&&P!=="visible"){J("visible");return}return D(P,{["hidden"]:()=>M(e),["visible"]:()=>w(e)})}},[P,e,w,M,c,g]);let _=O({base:y(i.className),enter:y(d),enterFrom:y(F),enterTo:y(R),entered:y(f),leave:y(C),leaveFrom:y(m),leaveTo:y(h)}),U=O({beforeEnter:r,afterEnter:a,beforeLeave:H,afterLeave:L}),X=ae();I(()=>{if(o&&X&&P==="visible"&&e.current===null)throw new Error("Did you forget to passthrough the `ref` to the actual DOM node?")},[e,P,X,o]);let Ce=v&&!V,ee=V&&c&&v,te=(()=>ee?"enter":!X||Ce?"idle":c?"enter":"leave")(),A=Ee(0),he=S(b=>D(b,{enter:()=>{var l,u;A.addFlag(N.Opening),(u=(l=U.current).beforeEnter)==null||u.call(l)},leave:()=>{var l,u;A.addFlag(N.Closing),(u=(l=U.current).beforeLeave)==null||u.call(l)},idle:()=>{}})),ge=S(b=>D(b,{enter:()=>{var l,u;A.removeFlag(N.Opening),(u=(l=U.current).afterEnter)==null||u.call(l)},leave:()=>{var l,u;A.removeFlag(N.Closing),(u=(l=U.current).afterLeave)==null||u.call(l)},idle:()=>{}})),j=E(!1),G=fe(()=>{j.current||(J("hidden"),M(e))},$);ye({container:e,classes:_,direction:te,onStart:O(b=>{j.current=!0,G.onStart(e,b,he)}),onStop:O(b=>{j.current=!1,G.onStop(e,b,ge),b==="leave"&&!q(G)&&(J("hidden"),M(e))})});let p=i,ve={ref:s};return ee?p={...p,className:Q(i.className,..._.current.enter,..._.current.enterFrom)}:j.current?(p.className=Q(i.className,(re=e.current)==null?void 0:re.className),p.className===""&&delete p.className):(p.className=Q(i.className,(ie=e.current)==null?void 0:ie.className,...D(te,{enter:[..._.current.enterTo,..._.current.entered],leave:_.current.leaveTo,idle:[]})),p.className===""&&delete p.className),T.createElement(k.Provider,{value:G},T.createElement(Re,{value:D(P,{["visible"]:N.Open,["hidden"]:N.Closed})|A.flags},Te({ourProps:ve,theirProps:p,defaultTag:me,features:ce,visible:P==="visible",name:"Transition.Child"})))}function He(t,n){let{show:r,appear:a=!1,unmount:H=!0,...L}=t,d=E(null),F=de(t),R=le(...F?[d,n]:n===null?[]:[n]);ae();let f=ue();if(r===void 0&&f!==null&&(r=(f&N.Open)===N.Open),r===void 0)throw new Error("A <Transition /> is used but it is missing a `show={true | false}` prop.");let[C,m]=K(r?"visible":"hidden"),h=fe(()=>{r||m("hidden")}),[i,e]=K(!0),o=E([r]);I(()=>{i!==!1&&o.current[o.current.length-1]!==r&&(o.current.push(r),e(!1))},[o,r]);let s=se(()=>({show:r,appear:a,initial:i}),[r,a,i]);Ne(r,d,()=>m("hidden")),I(()=>{r?m("visible"):!q(h)&&d.current!==null&&m("hidden")},[r,h]);let g={unmount:H},c=S(()=>{var v;i&&e(!1),(v=t.beforeEnter)==null||v.call(t)}),V=S(()=>{var v;i&&e(!1),(v=t.beforeLeave)==null||v.call(t)});return T.createElement(k.Provider,{value:h},T.createElement(W.Provider,{value:s},Te({ourProps:{...g,as:B,children:T.createElement(pe,{ref:R,...g,...L,beforeEnter:c,beforeLeave:V})},theirProps:{},defaultTag:B,features:ce,visible:C==="visible",name:"Transition"})))}function Le(t,n){let r=z(W)!==null,a=ue()!==null;return T.createElement(T.Fragment,null,!r&&a?T.createElement(Z,{ref:n,...t}):T.createElement(pe,{ref:n,...t}))}let Z=Y(He),pe=Y(De),Ae=Y(Le),Ke=Object.assign(Z,{Child:Ae,Root:Z});export{Ke as Transition,Ae as TransitionChild}; |
@@ -1,1 +0,1 @@ | ||
import{disposables as m}from'../../utils/disposables.js';import{isIOS as u}from'../../utils/platform.js';function d(){return u()?{before({doc:r,d:l,meta:c}){function o(a){return c.containers.flatMap(n=>n()).some(n=>n.contains(a))}l.microTask(()=>{var s;if(window.getComputedStyle(r.documentElement).scrollBehavior!=="auto"){let t=m();t.style(r.documentElement,"scrollBehavior","auto"),l.add(()=>l.microTask(()=>t.dispose()))}let a=(s=window.scrollY)!=null?s:window.pageYOffset,n=null;l.addEventListener(r,"click",t=>{if(t.target instanceof HTMLElement)try{let e=t.target.closest("a");if(!e)return;let{hash:f}=new URL(e.href),i=r.querySelector(f);i&&!o(i)&&(n=i)}catch{}},!0),l.addEventListener(r,"touchstart",t=>{if(t.target instanceof HTMLElement)if(o(t.target)){let e=t.target;for(;e.parentElement&&o(e.parentElement);)e=e.parentElement;l.style(e,"overscrollBehavior","contain")}else l.style(t.target,"touchAction","none")}),l.addEventListener(r,"touchmove",t=>{if(t.target instanceof HTMLElement)if(o(t.target)){let e=t.target;for(;e.parentElement&&e.dataset.headlessuiPortal!==""&&!(e.scrollHeight>e.clientHeight||e.scrollWidth>e.clientWidth);)e=e.parentElement;e.dataset.headlessuiPortal===""&&t.preventDefault()}else t.preventDefault()},{passive:!1}),l.add(()=>{var e;let t=(e=window.scrollY)!=null?e:window.pageYOffset;a!==t&&window.scrollTo(0,a),n&&n.isConnected&&(n.scrollIntoView({block:"nearest"}),n=null)})})}}:{}}export{d as handleIOSLocking}; | ||
import{disposables as m}from'../../utils/disposables.js';import{isIOS as u}from'../../utils/platform.js';function d(){return u()?{before({doc:r,d:n,meta:c}){function o(a){return c.containers.flatMap(l=>l()).some(l=>l.contains(a))}n.microTask(()=>{var s;if(window.getComputedStyle(r.documentElement).scrollBehavior!=="auto"){let t=m();t.style(r.documentElement,"scrollBehavior","auto"),n.add(()=>n.microTask(()=>t.dispose()))}let a=(s=window.scrollY)!=null?s:window.pageYOffset,l=null;n.addEventListener(r,"click",t=>{if(t.target instanceof HTMLElement)try{let e=t.target.closest("a");if(!e)return;let{hash:f}=new URL(e.href),i=r.querySelector(f);i&&!o(i)&&(l=i)}catch{}},!0),n.addEventListener(r,"touchstart",t=>{if(t.target instanceof HTMLElement)if(o(t.target)){let e=t.target;for(;e.parentElement&&o(e.parentElement);)e=e.parentElement;n.style(e,"overscrollBehavior","contain")}else n.style(t.target,"touchAction","none")}),n.addEventListener(r,"touchmove",t=>{if(t.target instanceof HTMLElement){if(t.target.tagName==="INPUT")return;if(o(t.target)){let e=t.target;for(;e.parentElement&&e.dataset.headlessuiPortal!==""&&!(e.scrollHeight>e.clientHeight||e.scrollWidth>e.clientWidth);)e=e.parentElement;e.dataset.headlessuiPortal===""&&t.preventDefault()}else t.preventDefault()}},{passive:!1}),n.add(()=>{var e;let t=(e=window.scrollY)!=null?e:window.pageYOffset;a!==t&&window.scrollTo(0,a),l&&l.isConnected&&(l.scrollIntoView({block:"nearest"}),l=null)})})}}:{}}export{d as handleIOSLocking}; |
@@ -1,1 +0,1 @@ | ||
export declare function useDocumentOverflowLockedEffect(doc: Document | null, shouldBeLocked: boolean, meta?: (meta: Record<string, any>) => Record<string, any>): boolean; | ||
export declare function useDocumentOverflowLockedEffect(shouldBeLocked: boolean, doc: Document | null, meta?: (meta: Record<string, any>) => Record<string, any>): boolean; |
@@ -1,1 +0,1 @@ | ||
import{useStore as s}from'../../hooks/use-store.js';import{useIsoMorphicEffect as u}from'../use-iso-morphic-effect.js';import{overflows as t}from'./overflow-store.js';function a(e,r,n=()=>({containers:[]})){let f=s(t),o=e?f.get(e):void 0,i=o?o.count>0:!1;return u(()=>{if(!(!e||!r))return t.dispatch("PUSH",e,n),()=>t.dispatch("POP",e,n)},[r,e]),i}export{a as useDocumentOverflowLockedEffect}; | ||
import{useStore as s}from'../../hooks/use-store.js';import{useIsoMorphicEffect as u}from'../use-iso-morphic-effect.js';import{overflows as t}from'./overflow-store.js';function a(r,e,n=()=>({containers:[]})){let f=s(t),o=e?f.get(e):void 0,i=o?o.count>0:!1;return u(()=>{if(!(!e||!r))return t.dispatch("PUSH",e,n),()=>t.dispatch("POP",e,n)},[r,e]),i}export{a as useDocumentOverflowLockedEffect}; |
import { type MutableRefObject } from 'react'; | ||
export declare function useDidElementMove(element: MutableRefObject<HTMLElement | null>, enabled?: boolean): boolean; | ||
export declare function useDidElementMove(enabled: boolean, element: MutableRefObject<HTMLElement | null>): boolean; |
@@ -1,1 +0,1 @@ | ||
import{useRef as o}from"react";import{useIsoMorphicEffect as f}from'./use-iso-morphic-effect.js';function p(e,r=!0){let t=o({left:0,top:0});if(f(()=>{let u=e.current;if(!u)return;let l=u.getBoundingClientRect();l&&(t.current=l)},[r]),e.current==null||!r||e.current===document.activeElement)return!1;let n=e.current.getBoundingClientRect();return n.top!==t.current.top||n.left!==t.current.left}export{p as useDidElementMove}; | ||
import{useRef as o}from"react";import{useIsoMorphicEffect as f}from'./use-iso-morphic-effect.js';function p(r,e){let t=o({left:0,top:0});if(f(()=>{let u=e.current;if(!u)return;let l=u.getBoundingClientRect();l&&(t.current=l)},[r]),e.current==null||!r||e.current===document.activeElement)return!1;let n=e.current.getBoundingClientRect();return n.top!==t.current.top||n.left!==t.current.left}export{p as useDidElementMove}; |
@@ -1,1 +0,1 @@ | ||
import{useState as o}from"react";import{useIsoMorphicEffect as h}from'./use-iso-morphic-effect.js';function l(e){if(e===null)return{width:0,height:0};let{width:n,height:t}=e.getBoundingClientRect();return{width:n,height:t}}function m(e,n=!1){let t=e===null?null:"current"in e?e.current:e,[i,u]=o(()=>l(t));return h(()=>{if(!t)return;let r=new ResizeObserver(()=>{u(l(t))});return r.observe(t),()=>{r.disconnect()}},[t]),n?{width:`${i.width}px`,height:`${i.height}px`}:i}export{m as useElementSize}; | ||
import{useMemo as o,useReducer as c}from"react";import{useIsoMorphicEffect as h}from'./use-iso-morphic-effect.js';function s(e){if(e===null)return{width:0,height:0};let{width:n,height:t}=e.getBoundingClientRect();return{width:n,height:t}}function f(e,n=!1){let t=e===null?null:"current"in e?e.current:e,[l,u]=c(()=>({}),{}),r=o(()=>s(t),[t,l]);return h(()=>{if(!t)return;let i=new ResizeObserver(u);return i.observe(t),()=>{i.disconnect()}},[t]),n?{width:`${r.width}px`,height:`${r.height}px`}:r}export{f as useElementSize}; |
@@ -1,1 +0,1 @@ | ||
import{useDisposables as r}from'./use-disposables.js';import{useEvent as s}from'./use-event.js';function m(){let e=r();return s(o=>{e.dispose(),e.nextFrame(()=>o())})}export{m as useFrameDebounce}; | ||
import{useDisposables as r}from'./use-disposables.js';import{useEvent as s}from'./use-event.js';function m(){let e=r();return s(o=>{e.dispose(),e.nextFrame(o)})}export{m as useFrameDebounce}; |
@@ -9,2 +9,2 @@ import { type MutableRefObject } from 'react'; | ||
*/ | ||
export declare function useOnDisappear(ref: MutableRefObject<HTMLElement | null> | HTMLElement | null, cb: () => void, enabled?: boolean): void; | ||
export declare function useOnDisappear(enabled: boolean, ref: MutableRefObject<HTMLElement | null> | HTMLElement | null, cb: () => void): void; |
@@ -1,1 +0,1 @@ | ||
import{useEffect as o}from"react";import{disposables as u}from'../utils/disposables.js';import{useLatestValue as c}from'./use-latest-value.js';function m(n,l,s=!0){let i=c(t=>{let e=t.getBoundingClientRect();e.x===0&&e.y===0&&e.width===0&&e.height===0&&l()});o(()=>{if(!s)return;let t=n===null?null:n instanceof HTMLElement?n:n.current;if(!t)return;let e=u();if(typeof ResizeObserver!="undefined"){let r=new ResizeObserver(()=>i.current(t));r.observe(t),e.add(()=>r.disconnect())}if(typeof IntersectionObserver!="undefined"){let r=new IntersectionObserver(()=>i.current(t));r.observe(t),e.add(()=>r.disconnect())}return()=>e.dispose()},[n,i,s])}export{m as useOnDisappear}; | ||
import{useEffect as o}from"react";import{disposables as u}from'../utils/disposables.js';import{useLatestValue as c}from'./use-latest-value.js';function m(s,n,l){let i=c(t=>{let e=t.getBoundingClientRect();e.x===0&&e.y===0&&e.width===0&&e.height===0&&l()});o(()=>{if(!s)return;let t=n===null?null:n instanceof HTMLElement?n:n.current;if(!t)return;let e=u();if(typeof ResizeObserver!="undefined"){let r=new ResizeObserver(()=>i.current(t));r.observe(t),e.add(()=>r.disconnect())}if(typeof IntersectionObserver!="undefined"){let r=new IntersectionObserver(()=>i.current(t));r.observe(t),e.add(()=>r.disconnect())}return()=>e.dispose()},[n,i,s])}export{m as useOnDisappear}; |
@@ -5,3 +5,3 @@ import { type MutableRefObject } from 'react'; | ||
type ContainerInput = Container | ContainerCollection; | ||
export declare function useOutsideClick(containers: ContainerInput | (() => ContainerInput), cb: (event: MouseEvent | PointerEvent | FocusEvent | TouchEvent, target: HTMLElement) => void, enabled?: boolean): void; | ||
export declare function useOutsideClick(enabled: boolean, containers: ContainerInput | (() => ContainerInput), cb: (event: MouseEvent | PointerEvent | FocusEvent | TouchEvent, target: HTMLElement) => void): void; | ||
export {}; |
@@ -1,1 +0,1 @@ | ||
import{useEffect as d,useRef as f}from"react";import{FocusableMode as p,isFocusableElement as C}from'../utils/focus-management.js';import{isMobile as M}from'../utils/platform.js';import{useDocumentEvent as l}from'./use-document-event.js';import{useWindowEvent as T}from'./use-window-event.js';function w(s,m,a=!0){let i=f(!1);d(()=>{requestAnimationFrame(()=>{i.current=a})},[a]);function c(e,r){if(!i.current||e.defaultPrevented)return;let t=r(e);if(t===null||!t.getRootNode().contains(t)||!t.isConnected)return;let E=function u(n){return typeof n=="function"?u(n()):Array.isArray(n)||n instanceof Set?n:[n]}(s);for(let u of E){if(u===null)continue;let n=u instanceof HTMLElement?u:u.current;if(n!=null&&n.contains(t)||e.composed&&e.composedPath().includes(n))return}return!C(t,p.Loose)&&t.tabIndex!==-1&&e.preventDefault(),m(e,t)}let o=f(null);l("pointerdown",e=>{var r,t;i.current&&(o.current=((t=(r=e.composedPath)==null?void 0:r.call(e))==null?void 0:t[0])||e.target)},!0),l("mousedown",e=>{var r,t;i.current&&(o.current=((t=(r=e.composedPath)==null?void 0:r.call(e))==null?void 0:t[0])||e.target)},!0),l("click",e=>{M()||o.current&&(c(e,()=>o.current),o.current=null)},!0),l("touchend",e=>c(e,()=>e.target instanceof HTMLElement?e.target:null),!0),T("blur",e=>c(e,()=>window.document.activeElement instanceof HTMLIFrameElement?window.document.activeElement:null),!0)}export{w as useOutsideClick}; | ||
import{useEffect as p,useRef as f}from"react";import{FocusableMode as C,isFocusableElement as T}from'../utils/focus-management.js';import{isMobile as M}from'../utils/platform.js';import{useDocumentEvent as l}from'./use-document-event.js';import{useIsTopLayer as b}from'./use-is-top-layer.js';import{useWindowEvent as L}from'./use-window-event.js';function I(s,m,E){let a=b(s,"outside-click"),i=f(!1);p(()=>{requestAnimationFrame(()=>{i.current=a})},[a]);function c(e,r){if(!i.current||e.defaultPrevented)return;let t=r(e);if(t===null||!t.getRootNode().contains(t)||!t.isConnected)return;let d=function o(n){return typeof n=="function"?o(n()):Array.isArray(n)||n instanceof Set?n:[n]}(m);for(let o of d){if(o===null)continue;let n=o instanceof HTMLElement?o:o.current;if(n!=null&&n.contains(t)||e.composed&&e.composedPath().includes(n))return}return!T(t,C.Loose)&&t.tabIndex!==-1&&e.preventDefault(),E(e,t)}let u=f(null);l("pointerdown",e=>{var r,t;i.current&&(u.current=((t=(r=e.composedPath)==null?void 0:r.call(e))==null?void 0:t[0])||e.target)},!0),l("mousedown",e=>{var r,t;i.current&&(u.current=((t=(r=e.composedPath)==null?void 0:r.call(e))==null?void 0:t[0])||e.target)},!0),l("click",e=>{M()||u.current&&(c(e,()=>u.current),u.current=null)},!0),l("touchend",e=>c(e,()=>e.target instanceof HTMLElement?e.target:null),!0),L("blur",e=>c(e,()=>window.document.activeElement instanceof HTMLIFrameElement?window.document.activeElement:null),!0)}export{I as useOutsideClick}; |
@@ -1,1 +0,1 @@ | ||
import{useRef as u}from"react";import{transition as f}from'../components/transition/utils/transition.js';import{useDisposables as c}from'./use-disposables.js';import{useIsMounted as d}from'./use-is-mounted.js';import{useIsoMorphicEffect as m}from'./use-iso-morphic-effect.js';function v({container:n,direction:e,classes:i,onStart:s,onStop:o}){let a=d(),t=c(),l=u(!1);m(()=>{let r=n.current;if(r&&e!=="idle"&&a.current)return s.current(e),t.add(f(r,{direction:e,classes:i.current,inFlight:l,done(){o.current(e)}})),t.dispose},[e])}export{v as useTransition}; | ||
import{useRef as u}from"react";import{transition as f}from'../components/transition/utils/transition.js';import{useDisposables as c}from'./use-disposables.js';import{useIsMounted as m}from'./use-is-mounted.js';import{useIsoMorphicEffect as d}from'./use-iso-morphic-effect.js';function v({container:i,direction:e,classes:s,onStart:o,onStop:t}){let a=m(),r=c(),l=u(!1);d(()=>{if(e==="idle"||!a.current)return;o.current(e);let n=i.current;return n?r.add(f(n,{direction:e,classes:s.current,inFlight:l,done(){t.current(e)}})):t.current(e),r.dispose},[e])}export{v as useTransition}; |
type AcceptNode = (node: HTMLElement) => typeof NodeFilter.FILTER_ACCEPT | typeof NodeFilter.FILTER_SKIP | typeof NodeFilter.FILTER_REJECT; | ||
export declare function useTreeWalker({ container, accept, walk, enabled, }: { | ||
export declare function useTreeWalker(enabled: boolean, { container, accept, walk, }: { | ||
container: HTMLElement | null; | ||
accept: AcceptNode; | ||
walk(node: HTMLElement): void; | ||
enabled?: boolean; | ||
}): void; | ||
export {}; |
@@ -1,1 +0,1 @@ | ||
import{useEffect as m,useRef as E}from"react";import{getOwnerDocument as T}from'../utils/owner.js';import{useIsoMorphicEffect as N}from'./use-iso-morphic-effect.js';function F({container:e,accept:t,walk:r,enabled:c=!0}){let o=E(t),l=E(r);m(()=>{o.current=t,l.current=r},[t,r]),N(()=>{if(!e||!c)return;let n=T(e);if(!n)return;let f=o.current,p=l.current,d=Object.assign(i=>f(i),{acceptNode:f}),u=n.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,d,!1);for(;u.nextNode();)p(u.currentNode)},[e,c,o,l])}export{F as useTreeWalker}; | ||
import{useEffect as T,useRef as E}from"react";import{getOwnerDocument as d}from'../utils/owner.js';import{useIsoMorphicEffect as N}from'./use-iso-morphic-effect.js';function F(c,{container:e,accept:t,walk:r}){let o=E(t),l=E(r);T(()=>{o.current=t,l.current=r},[t,r]),N(()=>{if(!e||!c)return;let n=d(e);if(!n)return;let f=o.current,p=l.current,i=Object.assign(m=>f(m),{acceptNode:f}),u=n.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,i,!1);for(;u.nextNode();)p(u.currentNode)},[e,c,o,l])}export{F as useTreeWalker}; |
@@ -7,6 +7,2 @@ import { type InnerProps } from '@floating-ui/react'; | ||
/** | ||
* The strategy to use when positioning the panel. Defaults to `absolute`. | ||
*/ | ||
strategy: 'absolute' | 'fixed'; | ||
/** | ||
* The `gap` is the space between the trigger and the panel. | ||
@@ -24,3 +20,3 @@ */ | ||
}; | ||
export type AnchorProps = Partial<BaseAnchorProps & { | ||
export type AnchorProps = false | (`${Placement}` | `${Placement} ${Align}`) | Partial<BaseAnchorProps & { | ||
/** | ||
@@ -32,3 +28,3 @@ * The `to` value defines which side of the trigger the panel should be placed on and its | ||
}>; | ||
export type AnchorPropsWithSelection = Partial<BaseAnchorProps & { | ||
export type AnchorPropsWithSelection = false | (`${Placement | 'selection'}` | `${Placement | 'selection'} ${Align}`) | Partial<BaseAnchorProps & { | ||
/** | ||
@@ -46,2 +42,3 @@ * The `to` value defines which side of the trigger the panel should be placed on and its | ||
}>; | ||
export declare function useResolvedAnchor<T extends AnchorProps | AnchorPropsWithSelection>(anchor?: T): Exclude<T, boolean | string> | null; | ||
export declare function useFloatingReference(): ((node: import("@floating-ui/react-dom").ReferenceType | null) => void) & ((node: any) => void); | ||
@@ -52,3 +49,3 @@ export declare function useFloatingReferenceProps(): (userProps?: React.HTMLProps<Element> | undefined) => Record<string, unknown>; | ||
}; | ||
export declare function useFloatingPanel(placement?: AnchorPropsWithSelection & InternalFloatingPanelProps): readonly [((node: HTMLElement | null) => void) & ((node: HTMLElement | null) => void), React.CSSProperties | undefined]; | ||
export declare function useFloatingPanel(placement?: (AnchorPropsWithSelection & InternalFloatingPanelProps) | null): readonly [((node: HTMLElement | null) => void) & ((node: HTMLElement | null) => void), React.CSSProperties | undefined]; | ||
export declare function FloatingProvider({ children, enabled, }: { | ||
@@ -55,0 +52,0 @@ children: React.ReactNode; |
@@ -1,1 +0,1 @@ | ||
import{autoUpdate as ee,flip as te,inner as ne,offset as le,shift as re,size as oe,useFloating as ie,useInnerOffset as se,useInteractions as ae}from"@floating-ui/react";import*as _ from"react";import{createContext as z,useCallback as ue,useContext as x,useMemo as E,useRef as pe,useState as I}from"react";import{useDisposables as fe}from'../hooks/use-disposables.js';import{useEvent as q}from'../hooks/use-event.js';import{useIsoMorphicEffect as w}from'../hooks/use-iso-morphic-effect.js';let h=z({styles:void 0,setReference:()=>{},setFloating:()=>{},getReferenceProps:()=>({}),getFloatingProps:()=>({}),slot:{}});h.displayName="FloatingContext";let L=z(null);L.displayName="PlacementContext";function xe(){return x(h).setReference}function Fe(){return x(h).getReferenceProps}function be(){let{getFloatingProps:e,slot:t}=x(h);return ue((...n)=>Object.assign({},e(...n),{"data-anchor":t.anchor}),[e,t])}function Me(e){let t=x(L),n=E(()=>e,[JSON.stringify(e,typeof HTMLElement!="undefined"?(s,a)=>a instanceof HTMLElement?a.outerHTML:a:void 0)]);w(()=>{t==null||t(n!=null?n:null)},[t,n]);let l=x(h);return E(()=>[l.setFloating,e?l.styles:{}],[l.setFloating,e,l.styles])}let D=4;function Re({children:e,enabled:t=!0}){let[n,l]=I(null),[s,a]=I(0),F=pe(null),[g,i]=I(null);ce(g);let r=t&&n!==null&&g!==null,{to:y="bottom",gap:A=0,offset:b=0,padding:u=0,inner:d,strategy:M="absolute"}=ge(n,g),[o,p="center"]=y.split(" ");w(()=>{r&&a(0)},[r]);let{refs:R,floatingStyles:C,context:v}=ie({open:r,placement:o==="selection"?p==="center"?"bottom":`bottom-${p}`:p==="center"?`${o}`:`${o}-${p}`,strategy:M,transform:!1,middleware:[le({mainAxis:o==="selection"?0:A,crossAxis:b}),re({padding:u}),o!=="selection"&&te(),o==="selection"&&d?ne({...d,padding:u,overflowRef:F,offset:s,minItemsVisible:D,referenceOverflowThreshold:u,onFallbackChange(m){var N,U;if(!m)return;let f=v.elements.floating;if(!f)return;let T=parseFloat(getComputedStyle(f).scrollPaddingBottom)||0,S=Math.min(D,f.childElementCount),O=0,k=0;for(let c of(U=(N=v.elements.floating)==null?void 0:N.childNodes)!=null?U:[])if(c instanceof HTMLElement){let P=c.offsetTop,W=P+c.clientHeight+T,$=f.scrollTop,j=$+f.clientHeight;if(P>=$&&W<=j)S--;else{k=Math.max(0,Math.min(W,j)-Math.max(P,$)),O=c.clientHeight;break}}S>=1&&a(c=>{let P=O*S-k+T;return c>=P?c:P})}}):null,oe({apply({availableWidth:m,availableHeight:f,elements:T}){Object.assign(T.floating.style,{maxWidth:`${m-u}px`,maxHeight:`${f-u}px`})}})].filter(Boolean),whileElementsMounted:ee}),[H=o,B=p]=v.placement.split("-");o==="selection"&&(H="selection");let K=E(()=>({anchor:[H,B].filter(Boolean).join(" ")}),[H,B]),Q=se(v,{overflowRef:F,onChange:a}),{getReferenceProps:X,getFloatingProps:Y}=ae([Q]),Z=q(m=>{i(m),R.setFloating(m)});return _.createElement(L.Provider,{value:l},_.createElement(h.Provider,{value:{setFloating:Z,setReference:R.setReference,styles:C,getReferenceProps:X,getFloatingProps:Y,slot:K}},e))}function ce(e){w(()=>{if(!e)return;let t=new MutationObserver(()=>{let n=e.style.maxHeight;parseFloat(n)!==parseInt(n)&&(e.style.maxHeight=`${Math.ceil(parseFloat(n))}px`)});return t.observe(e,{attributes:!0,attributeFilter:["style"]}),()=>{t.disconnect()}},[e])}function ge(e,t){let n=V(e==null?void 0:e.gap,t),l=V(e==null?void 0:e.offset,t),s=V(e==null?void 0:e.padding,t);return{...e,gap:n,offset:l,padding:s}}function V(e,t,n=void 0){let l=fe(),s=q((i,r)=>{if(i==null)return[n,null];if(typeof i=="number")return[i,null];if(typeof i=="string"){if(!r)return[n,null];let y=G(i,r);return[y,A=>{let b=J(i);{let u=b.map(d=>window.getComputedStyle(r).getPropertyValue(d));l.requestAnimationFrame(function d(){l.nextFrame(d);let M=!1;for(let[p,R]of b.entries()){let C=window.getComputedStyle(r).getPropertyValue(R);if(u[p]!==C){u[p]=C,M=!0;break}}if(!M)return;let o=G(i,r);y!==o&&(A(o),y=o)})}return l.dispose}]}return[n,null]}),a=E(()=>s(e,t)[0],[e,t]),[F=a,g]=I();return w(()=>{let[i,r]=s(e,t);if(g(i),!!r)return r(g)},[e,t]),F}function J(e){let t=/var\((.*)\)/.exec(e);if(t){let n=t[1].indexOf(",");if(n===-1)return[t[1]];let l=t[1].slice(0,n).trim(),s=t[1].slice(n+1).trim();return s?[l,...J(s)]:[l]}return[]}function G(e,t){let n=document.createElement("div");t.appendChild(n),n.style.setProperty("margin-top","0px","important"),n.style.setProperty("margin-top",e,"important");let l=parseFloat(window.getComputedStyle(n).marginTop)||0;return t.removeChild(n),l}export{Re as FloatingProvider,Me as useFloatingPanel,be as useFloatingPanelProps,xe as useFloatingReference,Fe as useFloatingReferenceProps}; | ||
import{autoUpdate as Z,flip as ee,inner as te,offset as ne,shift as le,size as re,useFloating as oe,useInnerOffset as ie,useInteractions as se}from"@floating-ui/react";import*as j from"react";import{createContext as _,useCallback as ae,useContext as R,useMemo as v,useRef as ue,useState as E}from"react";import{useDisposables as fe}from'../hooks/use-disposables.js';import{useEvent as z}from'../hooks/use-event.js';import{useIsoMorphicEffect as A}from'../hooks/use-iso-morphic-effect.js';let y=_({styles:void 0,setReference:()=>{},setFloating:()=>{},getReferenceProps:()=>({}),getFloatingProps:()=>({}),slot:{}});y.displayName="FloatingContext";let S=_(null);S.displayName="PlacementContext";function xe(e){return v(()=>e?typeof e=="string"?{to:e}:e:null,[e])}function ye(){return R(y).setReference}function Fe(){return R(y).getReferenceProps}function be(){let{getFloatingProps:e,slot:t}=R(y);return ae((...n)=>Object.assign({},e(...n),{"data-anchor":t.anchor}),[e,t])}function Re(e=null){e===!1&&(e=null),typeof e=="string"&&(e={to:e});let t=R(S),n=v(()=>e,[JSON.stringify(e,typeof HTMLElement!="undefined"?(a,r)=>r instanceof HTMLElement?r.outerHTML:r:void 0)]);A(()=>{t==null||t(n!=null?n:null)},[t,n]);let l=R(y);return v(()=>[l.setFloating,e?l.styles:{}],[l.setFloating,e,l.styles])}let q=4;function ve({children:e,enabled:t=!0}){let[n,l]=E(null),[a,r]=E(0),c=ue(null),[u,i]=E(null);pe(u);let o=t&&n!==null&&u!==null,{to:F="bottom",gap:C=0,offset:M=0,padding:p=0,inner:P}=ce(n,u),[s,f="center"]=F.split(" ");A(()=>{o&&r(0)},[o]);let{refs:b,floatingStyles:$,context:g}=oe({open:o,placement:s==="selection"?f==="center"?"bottom":`bottom-${f}`:f==="center"?`${s}`:`${s}-${f}`,strategy:"absolute",transform:!1,middleware:[ne({mainAxis:s==="selection"?0:C,crossAxis:M}),le({padding:p}),s!=="selection"&&ee({padding:p}),s==="selection"&&P?te({...P,padding:p,overflowRef:c,offset:a,minItemsVisible:q,referenceOverflowThreshold:p,onFallbackChange(h){var W,k;if(!h)return;let d=g.elements.floating;if(!d)return;let T=parseFloat(getComputedStyle(d).scrollPaddingBottom)||0,w=Math.min(q,d.childElementCount),B=0,O=0;for(let m of(k=(W=g.elements.floating)==null?void 0:W.childNodes)!=null?k:[])if(m instanceof HTMLElement){let x=m.offsetTop,N=x+m.clientHeight+T,H=d.scrollTop,U=H+d.clientHeight;if(x>=H&&N<=U)w--;else{O=Math.max(0,Math.min(N,U)-Math.max(x,H)),B=m.clientHeight;break}}w>=1&&r(m=>{let x=B*w-O+T;return m>=x?m:x})}}):null,re({padding:p,apply({availableWidth:h,availableHeight:d,elements:T}){Object.assign(T.floating.style,{overflow:"auto",maxWidth:`${h}px`,maxHeight:`min(var(--anchor-max-height, 100vh), ${d}px)`})}})].filter(Boolean),whileElementsMounted:Z}),[I=s,V=f]=g.placement.split("-");s==="selection"&&(I="selection");let G=v(()=>({anchor:[I,V].filter(Boolean).join(" ")}),[I,V]),K=ie(g,{overflowRef:c,onChange:r}),{getReferenceProps:Q,getFloatingProps:X}=se([K]),Y=z(h=>{i(h),b.setFloating(h)});return j.createElement(S.Provider,{value:l},j.createElement(y.Provider,{value:{setFloating:Y,setReference:b.setReference,styles:$,getReferenceProps:Q,getFloatingProps:X,slot:G}},e))}function pe(e){A(()=>{if(!e)return;let t=new MutationObserver(()=>{let n=e.style.maxHeight;parseFloat(n)!==parseInt(n)&&(e.style.maxHeight=`${Math.ceil(parseFloat(n))}px`)});return t.observe(e,{attributes:!0,attributeFilter:["style"]}),()=>{t.disconnect()}},[e])}function ce(e,t){var r,c,u;let n=L((r=e==null?void 0:e.gap)!=null?r:"var(--anchor-gap, 0)",t),l=L((c=e==null?void 0:e.offset)!=null?c:"var(--anchor-offset, 0)",t),a=L((u=e==null?void 0:e.padding)!=null?u:"var(--anchor-padding, 0)",t);return{...e,gap:n,offset:l,padding:a}}function L(e,t,n=void 0){let l=fe(),a=z((i,o)=>{if(i==null)return[n,null];if(typeof i=="number")return[i,null];if(typeof i=="string"){if(!o)return[n,null];let F=J(i,o);return[F,C=>{let M=D(i);{let p=M.map(P=>window.getComputedStyle(o).getPropertyValue(P));l.requestAnimationFrame(function P(){l.nextFrame(P);let s=!1;for(let[b,$]of M.entries()){let g=window.getComputedStyle(o).getPropertyValue($);if(p[b]!==g){p[b]=g,s=!0;break}}if(!s)return;let f=J(i,o);F!==f&&(C(f),F=f)})}return l.dispose}]}return[n,null]}),r=v(()=>a(e,t)[0],[e,t]),[c=r,u]=E();return A(()=>{let[i,o]=a(e,t);if(u(i),!!o)return o(u)},[e,t]),c}function D(e){let t=/var\((.*)\)/.exec(e);if(t){let n=t[1].indexOf(",");if(n===-1)return[t[1]];let l=t[1].slice(0,n).trim(),a=t[1].slice(n+1).trim();return a?[l,...D(a)]:[l]}return[]}function J(e,t){let n=document.createElement("div");t.appendChild(n),n.style.setProperty("margin-top","0px","important"),n.style.setProperty("margin-top",e,"important");let l=parseFloat(window.getComputedStyle(n).marginTop)||0;return t.removeChild(n),l}export{ve as FloatingProvider,Re as useFloatingPanel,be as useFloatingPanelProps,ye as useFloatingReference,Fe as useFloatingReferenceProps,xe as useResolvedAnchor}; |
@@ -1,1 +0,1 @@ | ||
import*as r from"react";const s=r.createContext(null);function a(){return{groups:new Map,get(n,t){var c;let e=this.groups.get(n);e||(e=new Map,this.groups.set(n,e));let l=(c=e.get(t))!=null?c:0;e.set(t,l+1);let o=Array.from(e.keys()).indexOf(t);function i(){let u=e.get(t);u>1?e.set(t,u-1):e.delete(t)}return[o,i]}}}function C({children:n}){let t=r.useRef(a());return r.createElement(s.Provider,{value:t},n)}function d(n){let t=r.useContext(s);if(!t)throw new Error("You must wrap your component in a <StableCollection>");let e=f(),[l,o]=t.current.get(n,e);return r.useEffect(()=>o,[]),l}function f(){var l,o,i;let n=(i=(o=(l=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED)==null?void 0:l.ReactCurrentOwner)==null?void 0:o.current)!=null?i:null;if(!n)return Symbol();let t=[],e=n;for(;e;)t.push(e.index),e=e.return;return"$."+t.join(".")}export{C as StableCollection,d as useStableCollectionIndex}; | ||
import*as l from"react";const s=l.createContext(null);function a(){return{groups:new Map,get(o,e){var i;let t=this.groups.get(o);t||(t=new Map,this.groups.set(o,t));let n=(i=t.get(e))!=null?i:0;t.set(e,n+1);let r=Array.from(t.keys()).indexOf(e);function u(){let c=t.get(e);c>1?t.set(e,c-1):t.delete(e)}return[r,u]}}}function f({children:o}){let e=l.useRef(a());return l.createElement(s.Provider,{value:e},o)}function C(o){let e=l.useContext(s);if(!e)throw new Error("You must wrap your component in a <StableCollection>");let t=l.useId(),[n,r]=e.current.get(o,t);return l.useEffect(()=>r,[]),n}export{f as StableCollection,C as useStableCollectionIndex}; |
{ | ||
"name": "@headlessui/react", | ||
"version": "0.0.0-insiders.38551c8", | ||
"version": "0.0.0-insiders.3905be6", | ||
"description": "A set of completely unstyled, fully accessible UI components for React, designed to integrate beautifully with Tailwind CSS.", | ||
@@ -45,19 +45,19 @@ "main": "dist/index.cjs", | ||
"peerDependencies": { | ||
"react": "^16 || ^17 || ^18", | ||
"react-dom": "^16 || ^17 || ^18" | ||
"react": "^18", | ||
"react-dom": "^18" | ||
}, | ||
"devDependencies": { | ||
"@testing-library/react": "^13.0.0", | ||
"@types/react": "^18.2.14", | ||
"@types/react-dom": "^18.2.6", | ||
"react": "^18.2.0", | ||
"react-dom": "^18.2.0", | ||
"snapshot-diff": "^0.8.1" | ||
"@testing-library/react": "^15.0.7", | ||
"@types/react": "^18.3.3", | ||
"@types/react-dom": "^18.3.0", | ||
"react": "^18.3.1", | ||
"react-dom": "^18.3.1", | ||
"snapshot-diff": "^0.10.0" | ||
}, | ||
"dependencies": { | ||
"@floating-ui/react": "^0.26.2", | ||
"@tanstack/react-virtual": "3.0.0-beta.60", | ||
"@react-aria/focus": "^3.14.3", | ||
"@react-aria/interactions": "3.0.0-nightly.2584" | ||
"@floating-ui/react": "^0.26.16", | ||
"@tanstack/react-virtual": "3.5.0", | ||
"@react-aria/focus": "^3.17.1", | ||
"@react-aria/interactions": "^3.21.3" | ||
} | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
299
896998
16189
+ Added@tanstack/react-virtual@3.5.0(transitive)
+ Added@tanstack/virtual-core@3.5.0(transitive)
- Removed@react-aria/interactions@3.0.0-nightly.2584(transitive)
- Removed@tanstack/react-virtual@3.0.0-beta.60(transitive)
- Removed@tanstack/virtual-core@3.0.0-beta.60(transitive)
Updated@floating-ui/react@^0.26.16
Updated@react-aria/focus@^3.17.1