@kingsy/headlessui-vue 1.7.23-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +36 -0
  3. package/dist/components/combobox/combobox.d.ts +323 -0
  4. package/dist/components/combobox/combobox.js +1 -0
  5. package/dist/components/description/description.d.ts +32 -0
  6. package/dist/components/description/description.js +1 -0
  7. package/dist/components/dialog/dialog.d.ts +202 -0
  8. package/dist/components/dialog/dialog.js +1 -0
  9. package/dist/components/disclosure/disclosure.d.ts +105 -0
  10. package/dist/components/disclosure/disclosure.js +1 -0
  11. package/dist/components/focus-trap/focus-trap.d.ts +151 -0
  12. package/dist/components/focus-trap/focus-trap.js +1 -0
  13. package/dist/components/label/label.d.ts +41 -0
  14. package/dist/components/label/label.js +1 -0
  15. package/dist/components/listbox/listbox.d.ts +229 -0
  16. package/dist/components/listbox/listbox.js +1 -0
  17. package/dist/components/menu/menu.d.ts +131 -0
  18. package/dist/components/menu/menu.js +1 -0
  19. package/dist/components/popover/popover.d.ts +151 -0
  20. package/dist/components/popover/popover.js +1 -0
  21. package/dist/components/portal/portal.d.ts +45 -0
  22. package/dist/components/portal/portal.js +1 -0
  23. package/dist/components/radio-group/radio-group.d.ts +184 -0
  24. package/dist/components/radio-group/radio-group.js +1 -0
  25. package/dist/components/switch/switch.d.ts +166 -0
  26. package/dist/components/switch/switch.js +1 -0
  27. package/dist/components/tabs/tabs.d.ts +177 -0
  28. package/dist/components/tabs/tabs.js +1 -0
  29. package/dist/components/transitions/transition.d.ts +234 -0
  30. package/dist/components/transitions/transition.js +1 -0
  31. package/dist/components/transitions/utils/transition.d.ts +5 -0
  32. package/dist/components/transitions/utils/transition.js +1 -0
  33. package/dist/headlessui.dev.cjs +8042 -0
  34. package/dist/headlessui.esm.js +1 -0
  35. package/dist/headlessui.esm.js.map +7 -0
  36. package/dist/headlessui.prod.cjs +7 -0
  37. package/dist/hooks/__mocks__/use-id.d.ts +1 -0
  38. package/dist/hooks/document-overflow/adjust-scrollbar-padding.d.ts +2 -0
  39. package/dist/hooks/document-overflow/adjust-scrollbar-padding.js +1 -0
  40. package/dist/hooks/document-overflow/handle-ios-locking.d.ts +6 -0
  41. package/dist/hooks/document-overflow/handle-ios-locking.js +1 -0
  42. package/dist/hooks/document-overflow/overflow-store.d.ts +19 -0
  43. package/dist/hooks/document-overflow/overflow-store.js +1 -0
  44. package/dist/hooks/document-overflow/prevent-scroll.d.ts +2 -0
  45. package/dist/hooks/document-overflow/prevent-scroll.js +1 -0
  46. package/dist/hooks/document-overflow/use-document-overflow.d.ts +3 -0
  47. package/dist/hooks/document-overflow/use-document-overflow.js +1 -0
  48. package/dist/hooks/use-controllable.d.ts +2 -0
  49. package/dist/hooks/use-controllable.js +1 -0
  50. package/dist/hooks/use-disposables.d.ts +25 -0
  51. package/dist/hooks/use-disposables.js +1 -0
  52. package/dist/hooks/use-document-event.d.ts +2 -0
  53. package/dist/hooks/use-document-event.js +1 -0
  54. package/dist/hooks/use-event-listener.d.ts +1 -0
  55. package/dist/hooks/use-event-listener.js +1 -0
  56. package/dist/hooks/use-frame-debounce.d.ts +8 -0
  57. package/dist/hooks/use-frame-debounce.js +1 -0
  58. package/dist/hooks/use-id.d.ts +1 -0
  59. package/dist/hooks/use-id.js +1 -0
  60. package/dist/hooks/use-inert.d.ts +2 -0
  61. package/dist/hooks/use-inert.js +1 -0
  62. package/dist/hooks/use-outside-click.d.ts +6 -0
  63. package/dist/hooks/use-outside-click.js +1 -0
  64. package/dist/hooks/use-resolve-button-type.d.ts +5 -0
  65. package/dist/hooks/use-resolve-button-type.js +1 -0
  66. package/dist/hooks/use-root-containers.d.ts +19 -0
  67. package/dist/hooks/use-root-containers.js +1 -0
  68. package/dist/hooks/use-store.d.ts +2 -0
  69. package/dist/hooks/use-store.js +1 -0
  70. package/dist/hooks/use-tab-direction.d.ts +5 -0
  71. package/dist/hooks/use-tab-direction.js +1 -0
  72. package/dist/hooks/use-text-value.d.ts +2 -0
  73. package/dist/hooks/use-text-value.js +1 -0
  74. package/dist/hooks/use-tracked-pointer.d.ts +4 -0
  75. package/dist/hooks/use-tracked-pointer.js +1 -0
  76. package/dist/hooks/use-tree-walker.d.ts +9 -0
  77. package/dist/hooks/use-tree-walker.js +1 -0
  78. package/dist/hooks/use-window-event.d.ts +2 -0
  79. package/dist/hooks/use-window-event.js +1 -0
  80. package/dist/index.cjs +7 -0
  81. package/dist/index.d.cts +12 -0
  82. package/dist/index.d.ts +12 -0
  83. package/dist/index.js +1 -0
  84. package/dist/internal/dom-containers.d.ts +1 -0
  85. package/dist/internal/dom-containers.js +1 -0
  86. package/dist/internal/focus-sentinel.d.ts +13 -0
  87. package/dist/internal/focus-sentinel.js +1 -0
  88. package/dist/internal/hidden.d.ts +32 -0
  89. package/dist/internal/hidden.js +1 -0
  90. package/dist/internal/open-closed.d.ts +10 -0
  91. package/dist/internal/open-closed.js +1 -0
  92. package/dist/internal/portal-force-root.d.ts +27 -0
  93. package/dist/internal/portal-force-root.js +1 -0
  94. package/dist/internal/stack-context.d.ts +14 -0
  95. package/dist/internal/stack-context.js +1 -0
  96. package/dist/keyboard.d.ts +16 -0
  97. package/dist/keyboard.js +1 -0
  98. package/dist/mouse.d.ts +4 -0
  99. package/dist/mouse.js +1 -0
  100. package/dist/utils/active-element-history.d.ts +1 -0
  101. package/dist/utils/active-element-history.js +1 -0
  102. package/dist/utils/calculate-active-index.d.ts +25 -0
  103. package/dist/utils/calculate-active-index.js +1 -0
  104. package/dist/utils/disposables.d.ts +12 -0
  105. package/dist/utils/disposables.js +1 -0
  106. package/dist/utils/document-ready.d.ts +1 -0
  107. package/dist/utils/document-ready.js +1 -0
  108. package/dist/utils/dom.d.ts +4 -0
  109. package/dist/utils/dom.js +1 -0
  110. package/dist/utils/env.d.ts +13 -0
  111. package/dist/utils/env.js +1 -0
  112. package/dist/utils/focus-management.d.ts +38 -0
  113. package/dist/utils/focus-management.js +1 -0
  114. package/dist/utils/form.d.ts +4 -0
  115. package/dist/utils/form.js +1 -0
  116. package/dist/utils/get-text-value.d.ts +1 -0
  117. package/dist/utils/get-text-value.js +1 -0
  118. package/dist/utils/match.d.ts +1 -0
  119. package/dist/utils/match.js +1 -0
  120. package/dist/utils/micro-task.d.ts +1 -0
  121. package/dist/utils/micro-task.js +1 -0
  122. package/dist/utils/once.d.ts +1 -0
  123. package/dist/utils/once.js +1 -0
  124. package/dist/utils/owner.d.ts +2 -0
  125. package/dist/utils/owner.js +1 -0
  126. package/dist/utils/pipeline.d.ts +4 -0
  127. package/dist/utils/pipeline.js +1 -0
  128. package/dist/utils/platform.d.ts +3 -0
  129. package/dist/utils/platform.js +1 -0
  130. package/dist/utils/render.d.ts +39 -0
  131. package/dist/utils/render.js +4 -0
  132. package/dist/utils/resolve-prop-value.d.ts +1 -0
  133. package/dist/utils/resolve-prop-value.js +1 -0
  134. package/dist/utils/store.d.ts +11 -0
  135. package/dist/utils/store.js +1 -0
  136. package/package.json +55 -0
@@ -0,0 +1 @@
1
+ import{computed as o,defineComponent as O,h as g,inject as q,nextTick as ie,onMounted as L,onUnmounted as ue,provide as se,ref as y,watchEffect as pe}from"vue";import{FocusTrap as P}from'../../components/focus-trap/focus-trap.js';import{useDocumentOverflowLockedEffect as de}from'../../hooks/document-overflow/use-document-overflow.js';import{useEventListener as fe}from'../../hooks/use-event-listener.js';import{useId as b}from'../../hooks/use-id.js';import{useInert as W}from'../../hooks/use-inert.js';import{useOutsideClick as ge}from'../../hooks/use-outside-click.js';import{useRootContainers as ce}from'../../hooks/use-root-containers.js';import{State as x,useOpenClosed as ve}from'../../internal/open-closed.js';import{ForcePortalRoot as $}from'../../internal/portal-force-root.js';import{StackMessage as Y,useStackProvider as me}from'../../internal/stack-context.js';import{Keys as De}from'../../keyboard.js';import{dom as F}from'../../utils/dom.js';import{match as _}from'../../utils/match.js';import{getOwnerDocument as ye}from'../../utils/owner.js';import{Features as z,render as C}from'../../utils/render.js';import{Description as Se,useDescriptions as he}from'../description/description.js';import{Portal as G,PortalGroup as Oe,useNestedPortals as Pe}from'../portal/portal.js';var be=(l=>(l[l.Open=0]="Open",l[l.Closed=1]="Closed",l))(be||{});let j=Symbol("DialogContext");function T(t){let n=q(j,null);if(n===null){let l=new Error(`<${t} /> is missing a parent <Dialog /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(l,T),l}return n}let I="DC8F892D-2EBD-447C-A4C8-A03058436FF4",qe=O({name:"Dialog",inheritAttrs:!1,props:{as:{type:[Object,String],default:"div"},static:{type:Boolean,default:!1},unmount:{type:Boolean,default:!0},open:{type:[Boolean,String],default:I},initialFocus:{type:Object,default:null},id:{type:String,default:()=>`headlessui-dialog-${b()}`},role:{type:String,default:"dialog"}},emits:{close:t=>!0},setup(t,{emit:n,attrs:l,slots:u,expose:i}){var U;let r=y(!1);L(()=>{r.value=!0});let s=!1,v=o(()=>t.role==="dialog"||t.role==="alertdialog"?t.role:(s||(s=!0,console.warn(`Invalid role [${v}] passed to <Dialog />. Only \`dialog\` and and \`alertdialog\` are supported. Using \`dialog\` instead.`)),"dialog")),m=y(0),S=ve(),R=o(()=>t.open===I&&S!==null?(S.value&x.Open)===x.Open:t.open),c=y(null),E=o(()=>ye(c));if(i({el:c,$el:c}),!(t.open!==I||S!==null))throw new Error("You forgot to provide an `open` prop to the `Dialog`.");if(typeof R.value!="boolean")throw new Error(`You provided an \`open\` prop to the \`Dialog\`, but the value is not a boolean. Received: ${R.value===I?void 0:t.open}`);let f=o(()=>r.value&&R.value?0:1),k=o(()=>f.value===0),w=o(()=>m.value>1),H=q(j,null)!==null,[V,J]=Pe(),{resolveContainers:A,mainTreeNodeRef:N,MainTreeNode:Q}=ce({portals:V,defaultContainers:[o(()=>{var e;return(e=h.panelRef.value)!=null?e:c.value})]}),X=o(()=>w.value?"parent":"leaf"),K=o(()=>S!==null?(S.value&x.Closing)===x.Closing:!1),Z=o(()=>H||K.value?!1:k.value),ee=o(()=>{var e,a,p;return(p=Array.from((a=(e=E.value)==null?void 0:e.querySelectorAll("body > *"))!=null?a:[]).find(d=>d.id==="headlessui-portal-root"?!1:d.contains(F(N))&&d instanceof HTMLElement))!=null?p:null});W(ee,Z);let te=o(()=>w.value?!0:k.value),le=o(()=>{var e,a,p;return(p=Array.from((a=(e=E.value)==null?void 0:e.querySelectorAll("[data-headlessui-portal]"))!=null?a:[]).find(d=>d.contains(F(N))&&d instanceof HTMLElement))!=null?p:null});W(le,te),me({type:"Dialog",enabled:o(()=>f.value===0),element:c,onUpdate:(e,a)=>{if(a==="Dialog")return _(e,{[Y.Add]:()=>m.value+=1,[Y.Remove]:()=>m.value-=1})}});let ae=he({name:"DialogDescription",slot:o(()=>({open:R.value}))}),M=y(null),h={titleId:M,panelRef:y(null),dialogState:f,setTitleId(e){M.value!==e&&(M.value=e)},close(){n("close",!1)}};se(j,h);let oe=o(()=>!(!k.value||w.value));ge(A,(e,a)=>{e.preventDefault(),h.close(),ie(()=>a==null?void 0:a.focus())},oe);let re=o(()=>!(w.value||f.value!==0));fe((U=E.value)==null?void 0:U.defaultView,"keydown",e=>{re.value&&(e.defaultPrevented||e.key===De.Escape&&(e.preventDefault(),e.stopPropagation(),h.close()))});let ne=o(()=>!(K.value||f.value!==0||H));return de(E,ne,e=>{var a;return{containers:[...(a=e.containers)!=null?a:[],A]}}),pe(e=>{if(f.value!==0)return;let a=F(c);if(!a)return;let p=new ResizeObserver(d=>{for(let B of d){let D=B.target.getBoundingClientRect();D.x===0&&D.y===0&&D.width===0&&D.height===0&&h.close()}});p.observe(a),e(()=>p.disconnect())}),()=>{let{id:e,open:a,initialFocus:p,...d}=t,B={...l,ref:c,id:e,role:v.value,"aria-modal":f.value===0?!0:void 0,"aria-labelledby":M.value,"aria-describedby":ae.value},D={open:f.value===0};return g($,{force:!0},()=>[g(G,()=>g(Oe,{target:c.value},()=>g($,{force:!1},()=>g(P,{initialFocus:p,containers:A,features:k.value?_(X.value,{parent:P.features.RestoreFocus,leaf:P.features.All&~P.features.FocusLock}):P.features.None},()=>g(J,{},()=>C({ourProps:B,theirProps:{...d,...l},slot:D,attrs:l,slots:u,visible:f.value===0,features:z.RenderStrategy|z.Static,name:"Dialog"})))))),g(Q)])}}}),We=O({name:"DialogOverlay",props:{as:{type:[Object,String],default:"div"},id:{type:String,default:()=>`headlessui-dialog-overlay-${b()}`}},setup(t,{attrs:n,slots:l}){let u=T("DialogOverlay");function i(r){r.target===r.currentTarget&&(r.preventDefault(),r.stopPropagation(),u.close())}return()=>{let{id:r,...s}=t;return C({ourProps:{id:r,"aria-hidden":!0,onClick:i},theirProps:s,slot:{open:u.dialogState.value===0},attrs:n,slots:l,name:"DialogOverlay"})}}}),Ye=O({name:"DialogBackdrop",props:{as:{type:[Object,String],default:"div"},id:{type:String,default:()=>`headlessui-dialog-backdrop-${b()}`}},inheritAttrs:!1,setup(t,{attrs:n,slots:l,expose:u}){let i=T("DialogBackdrop"),r=y(null);return u({el:r,$el:r}),L(()=>{if(i.panelRef.value===null)throw new Error("A <DialogBackdrop /> component is being used, but a <DialogPanel /> component is missing.")}),()=>{let{id:s,...v}=t,m={id:s,ref:r,"aria-hidden":!0};return g($,{force:!0},()=>g(G,()=>C({ourProps:m,theirProps:{...n,...v},slot:{open:i.dialogState.value===0},attrs:n,slots:l,name:"DialogBackdrop"})))}}}),_e=O({name:"DialogPanel",props:{as:{type:[Object,String],default:"div"},id:{type:String,default:()=>`headlessui-dialog-panel-${b()}`}},setup(t,{attrs:n,slots:l,expose:u}){let i=T("DialogPanel");u({el:i.panelRef,$el:i.panelRef});function r(s){s.stopPropagation()}return()=>{let{id:s,...v}=t,m={id:s,ref:i.panelRef,onClick:r};return C({ourProps:m,theirProps:v,slot:{open:i.dialogState.value===0},attrs:n,slots:l,name:"DialogPanel"})}}}),ze=O({name:"DialogTitle",props:{as:{type:[Object,String],default:"h2"},id:{type:String,default:()=>`headlessui-dialog-title-${b()}`}},setup(t,{attrs:n,slots:l}){let u=T("DialogTitle");return L(()=>{u.setTitleId(t.id),ue(()=>u.setTitleId(null))}),()=>{let{id:i,...r}=t;return C({ourProps:{id:i},theirProps:r,slot:{open:u.dialogState.value===0},attrs:n,slots:l,name:"DialogTitle"})}}}),Ge=Se;export{qe as Dialog,Ye as DialogBackdrop,Ge as DialogDescription,We as DialogOverlay,_e as DialogPanel,ze as DialogTitle};
@@ -0,0 +1,105 @@
1
+ export declare let Disclosure: import("vue").DefineComponent<{
2
+ as: {
3
+ type: (ObjectConstructor | StringConstructor)[];
4
+ default: string;
5
+ };
6
+ defaultOpen: {
7
+ type: BooleanConstructor[];
8
+ default: boolean;
9
+ };
10
+ }, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
11
+ [key: string]: any;
12
+ }> | import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
13
+ [key: string]: any;
14
+ }>[] | null, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
15
+ as: {
16
+ type: (ObjectConstructor | StringConstructor)[];
17
+ default: string;
18
+ };
19
+ defaultOpen: {
20
+ type: BooleanConstructor[];
21
+ default: boolean;
22
+ };
23
+ }>>, {
24
+ as: string | Record<string, any>;
25
+ defaultOpen: boolean;
26
+ }>;
27
+ export declare let DisclosureButton: import("vue").DefineComponent<{
28
+ as: {
29
+ type: (ObjectConstructor | StringConstructor)[];
30
+ default: string;
31
+ };
32
+ disabled: {
33
+ type: BooleanConstructor[];
34
+ default: boolean;
35
+ };
36
+ id: {
37
+ type: StringConstructor;
38
+ default: null;
39
+ };
40
+ }, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
41
+ [key: string]: any;
42
+ }> | import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
43
+ [key: string]: any;
44
+ }>[] | null, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
45
+ as: {
46
+ type: (ObjectConstructor | StringConstructor)[];
47
+ default: string;
48
+ };
49
+ disabled: {
50
+ type: BooleanConstructor[];
51
+ default: boolean;
52
+ };
53
+ id: {
54
+ type: StringConstructor;
55
+ default: null;
56
+ };
57
+ }>>, {
58
+ id: string;
59
+ as: string | Record<string, any>;
60
+ disabled: boolean;
61
+ }>;
62
+ export declare let DisclosurePanel: import("vue").DefineComponent<{
63
+ as: {
64
+ type: (ObjectConstructor | StringConstructor)[];
65
+ default: string;
66
+ };
67
+ static: {
68
+ type: BooleanConstructor;
69
+ default: boolean;
70
+ };
71
+ unmount: {
72
+ type: BooleanConstructor;
73
+ default: boolean;
74
+ };
75
+ id: {
76
+ type: StringConstructor;
77
+ default: null;
78
+ };
79
+ }, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
80
+ [key: string]: any;
81
+ }> | import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
82
+ [key: string]: any;
83
+ }>[] | null, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
84
+ as: {
85
+ type: (ObjectConstructor | StringConstructor)[];
86
+ default: string;
87
+ };
88
+ static: {
89
+ type: BooleanConstructor;
90
+ default: boolean;
91
+ };
92
+ unmount: {
93
+ type: BooleanConstructor;
94
+ default: boolean;
95
+ };
96
+ id: {
97
+ type: StringConstructor;
98
+ default: null;
99
+ };
100
+ }>>, {
101
+ id: string;
102
+ as: string | Record<string, any>;
103
+ unmount: boolean;
104
+ static: boolean;
105
+ }>;
@@ -0,0 +1 @@
1
+ import{computed as m,defineComponent as b,inject as I,onMounted as P,onUnmounted as h,provide as R,ref as d,watchEffect as w}from"vue";import{useId as E}from'../../hooks/use-id.js';import{useResolveButtonType as H}from'../../hooks/use-resolve-button-type.js';import{State as y,useOpenClosed as L,useOpenClosedProvider as j}from'../../internal/open-closed.js';import{Keys as f}from'../../keyboard.js';import{dom as p}from'../../utils/dom.js';import{match as x}from'../../utils/match.js';import{Features as B,render as g}from'../../utils/render.js';var $=(o=>(o[o.Open=0]="Open",o[o.Closed=1]="Closed",o))($||{});let T=Symbol("DisclosureContext");function O(t){let r=I(T,null);if(r===null){let o=new Error(`<${t} /> is missing a parent <Disclosure /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(o,O),o}return r}let k=Symbol("DisclosurePanelContext");function U(){return I(k,null)}let N=b({name:"Disclosure",props:{as:{type:[Object,String],default:"template"},defaultOpen:{type:[Boolean],default:!1}},setup(t,{slots:r,attrs:o}){let s=d(t.defaultOpen?0:1),e=d(null),i=d(null),n={buttonId:d(`headlessui-disclosure-button-${E()}`),panelId:d(`headlessui-disclosure-panel-${E()}`),disclosureState:s,panel:e,button:i,toggleDisclosure(){s.value=x(s.value,{[0]:1,[1]:0})},closeDisclosure(){s.value!==1&&(s.value=1)},close(l){n.closeDisclosure();let a=(()=>l?l instanceof HTMLElement?l:l.value instanceof HTMLElement?p(l):p(n.button):p(n.button))();a==null||a.focus()}};return R(T,n),j(m(()=>x(s.value,{[0]:y.Open,[1]:y.Closed}))),()=>{let{defaultOpen:l,...a}=t,c={open:s.value===0,close:n.close};return g({theirProps:a,ourProps:{},slot:c,slots:r,attrs:o,name:"Disclosure"})}}}),Q=b({name:"DisclosureButton",props:{as:{type:[Object,String],default:"button"},disabled:{type:[Boolean],default:!1},id:{type:String,default:null}},setup(t,{attrs:r,slots:o,expose:s}){let e=O("DisclosureButton"),i=U(),n=m(()=>i===null?!1:i.value===e.panelId.value);P(()=>{n.value||t.id!==null&&(e.buttonId.value=t.id)}),h(()=>{n.value||(e.buttonId.value=null)});let l=d(null);s({el:l,$el:l}),n.value||w(()=>{e.button.value=l.value});let a=H(m(()=>({as:t.as,type:r.type})),l);function c(){var u;t.disabled||(n.value?(e.toggleDisclosure(),(u=p(e.button))==null||u.focus()):e.toggleDisclosure())}function D(u){var S;if(!t.disabled)if(n.value)switch(u.key){case f.Space:case f.Enter:u.preventDefault(),u.stopPropagation(),e.toggleDisclosure(),(S=p(e.button))==null||S.focus();break}else switch(u.key){case f.Space:case f.Enter:u.preventDefault(),u.stopPropagation(),e.toggleDisclosure();break}}function v(u){switch(u.key){case f.Space:u.preventDefault();break}}return()=>{var C;let u={open:e.disclosureState.value===0},{id:S,...K}=t,M=n.value?{ref:l,type:a.value,onClick:c,onKeydown:D}:{id:(C=e.buttonId.value)!=null?C:S,ref:l,type:a.value,"aria-expanded":e.disclosureState.value===0,"aria-controls":e.disclosureState.value===0||p(e.panel)?e.panelId.value:void 0,disabled:t.disabled?!0:void 0,onClick:c,onKeydown:D,onKeyup:v};return g({ourProps:M,theirProps:K,slot:u,attrs:r,slots:o,name:"DisclosureButton"})}}}),V=b({name:"DisclosurePanel",props:{as:{type:[Object,String],default:"div"},static:{type:Boolean,default:!1},unmount:{type:Boolean,default:!0},id:{type:String,default:null}},setup(t,{attrs:r,slots:o,expose:s}){let e=O("DisclosurePanel");P(()=>{t.id!==null&&(e.panelId.value=t.id)}),h(()=>{e.panelId.value=null}),s({el:e.panel,$el:e.panel}),R(k,e.panelId);let i=L(),n=m(()=>i!==null?(i.value&y.Open)===y.Open:e.disclosureState.value===0);return()=>{var v;let l={open:e.disclosureState.value===0,close:e.close},{id:a,...c}=t,D={id:(v=e.panelId.value)!=null?v:a,ref:e.panel};return g({ourProps:D,theirProps:c,slot:l,attrs:r,slots:o,features:B.RenderStrategy|B.Static,visible:n.value,name:"DisclosurePanel"})}}});export{N as Disclosure,Q as DisclosureButton,V as DisclosurePanel};
@@ -0,0 +1,151 @@
1
+ import { type PropType, type Ref } from 'vue';
2
+ type Containers = (() => Iterable<HTMLElement>) | Ref<Set<Ref<HTMLElement | null>>>;
3
+ declare enum Features {
4
+ /** No features enabled for the focus trap. */
5
+ None = 1,
6
+ /** Ensure that we move focus initially into the container. */
7
+ InitialFocus = 2,
8
+ /** Ensure that pressing `Tab` and `Shift+Tab` is trapped within the container. */
9
+ TabLock = 4,
10
+ /** Ensure that programmatically moving focus outside of the container is disallowed. */
11
+ FocusLock = 8,
12
+ /** Ensure that we restore the focus when unmounting the focus trap. */
13
+ RestoreFocus = 16,
14
+ /** Enable all features. */
15
+ All = 30
16
+ }
17
+ export declare let FocusTrap: {
18
+ new (...args: any[]): {
19
+ $: import("vue").ComponentInternalInstance;
20
+ $data: {};
21
+ $props: Partial<{
22
+ features: Features;
23
+ as: string | Record<string, any>;
24
+ initialFocus: HTMLElement | null;
25
+ containers: Containers;
26
+ }> & Omit<Readonly<import("vue").ExtractPropTypes<{
27
+ as: {
28
+ type: (ObjectConstructor | StringConstructor)[];
29
+ default: string;
30
+ };
31
+ initialFocus: {
32
+ type: PropType<HTMLElement | null>;
33
+ default: null;
34
+ };
35
+ features: {
36
+ type: PropType<Features>;
37
+ default: Features;
38
+ };
39
+ containers: {
40
+ type: PropType<Containers>;
41
+ default: Ref<Set<unknown>>;
42
+ };
43
+ }>> & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, "features" | "as" | "initialFocus" | "containers">;
44
+ $attrs: {
45
+ [x: string]: unknown;
46
+ };
47
+ $refs: {
48
+ [x: string]: unknown;
49
+ };
50
+ $slots: Readonly<{
51
+ [name: string]: import("vue").Slot | undefined;
52
+ }>;
53
+ $root: import("vue").ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, import("vue").ComponentOptionsBase<any, any, any, any, any, any, any, any, any, {}>> | null;
54
+ $parent: import("vue").ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, import("vue").ComponentOptionsBase<any, any, any, any, any, any, any, any, any, {}>> | null;
55
+ $emit: (event: string, ...args: any[]) => void;
56
+ $el: any;
57
+ $options: import("vue").ComponentOptionsBase<Readonly<import("vue").ExtractPropTypes<{
58
+ as: {
59
+ type: (ObjectConstructor | StringConstructor)[];
60
+ default: string;
61
+ };
62
+ initialFocus: {
63
+ type: PropType<HTMLElement | null>;
64
+ default: null;
65
+ };
66
+ features: {
67
+ type: PropType<Features>;
68
+ default: Features;
69
+ };
70
+ containers: {
71
+ type: PropType<Containers>;
72
+ default: Ref<Set<unknown>>;
73
+ };
74
+ }>>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
75
+ [key: string]: any;
76
+ }>, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, string, {
77
+ features: Features;
78
+ as: string | Record<string, any>;
79
+ initialFocus: HTMLElement | null;
80
+ containers: Containers;
81
+ }> & {
82
+ beforeCreate?: ((() => void) | (() => void)[]) | undefined;
83
+ created?: ((() => void) | (() => void)[]) | undefined;
84
+ beforeMount?: ((() => void) | (() => void)[]) | undefined;
85
+ mounted?: ((() => void) | (() => void)[]) | undefined;
86
+ beforeUpdate?: ((() => void) | (() => void)[]) | undefined;
87
+ updated?: ((() => void) | (() => void)[]) | undefined;
88
+ activated?: ((() => void) | (() => void)[]) | undefined;
89
+ deactivated?: ((() => void) | (() => void)[]) | undefined;
90
+ beforeDestroy?: ((() => void) | (() => void)[]) | undefined;
91
+ beforeUnmount?: ((() => void) | (() => void)[]) | undefined;
92
+ destroyed?: ((() => void) | (() => void)[]) | undefined;
93
+ unmounted?: ((() => void) | (() => void)[]) | undefined;
94
+ renderTracked?: (((e: import("vue").DebuggerEvent) => void) | ((e: import("vue").DebuggerEvent) => void)[]) | undefined;
95
+ renderTriggered?: (((e: import("vue").DebuggerEvent) => void) | ((e: import("vue").DebuggerEvent) => void)[]) | undefined;
96
+ errorCaptured?: (((err: unknown, instance: import("vue").ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, import("vue").ComponentOptionsBase<any, any, any, any, any, any, any, any, any, {}>> | null, info: string) => boolean | void) | ((err: unknown, instance: import("vue").ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, import("vue").ComponentOptionsBase<any, any, any, any, any, any, any, any, any, {}>> | null, info: string) => boolean | void)[]) | undefined;
97
+ };
98
+ $forceUpdate: () => void;
99
+ $nextTick: typeof import("vue").nextTick;
100
+ $watch(source: string | Function, cb: Function, options?: import("vue").WatchOptions<boolean> | undefined): import("vue").WatchStopHandle;
101
+ } & Readonly<import("vue").ExtractPropTypes<{
102
+ as: {
103
+ type: (ObjectConstructor | StringConstructor)[];
104
+ default: string;
105
+ };
106
+ initialFocus: {
107
+ type: PropType<HTMLElement | null>;
108
+ default: null;
109
+ };
110
+ features: {
111
+ type: PropType<Features>;
112
+ default: Features;
113
+ };
114
+ containers: {
115
+ type: PropType<Containers>;
116
+ default: Ref<Set<unknown>>;
117
+ };
118
+ }>> & import("vue").ShallowUnwrapRef<() => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
119
+ [key: string]: any;
120
+ }>> & {} & import("vue").ComponentCustomProperties;
121
+ __isFragment?: undefined;
122
+ __isTeleport?: undefined;
123
+ __isSuspense?: undefined;
124
+ } & import("vue").ComponentOptionsBase<Readonly<import("vue").ExtractPropTypes<{
125
+ as: {
126
+ type: (ObjectConstructor | StringConstructor)[];
127
+ default: string;
128
+ };
129
+ initialFocus: {
130
+ type: PropType<HTMLElement | null>;
131
+ default: null;
132
+ };
133
+ features: {
134
+ type: PropType<Features>;
135
+ default: Features;
136
+ };
137
+ containers: {
138
+ type: PropType<Containers>;
139
+ default: Ref<Set<unknown>>;
140
+ };
141
+ }>>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
142
+ [key: string]: any;
143
+ }>, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, string, {
144
+ features: Features;
145
+ as: string | Record<string, any>;
146
+ initialFocus: HTMLElement | null;
147
+ containers: Containers;
148
+ }> & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps & {
149
+ features: typeof Features;
150
+ };
151
+ export {};
@@ -0,0 +1 @@
1
+ import{Fragment as I,computed as L,defineComponent as j,h as R,onMounted as M,onUnmounted as h,ref as E,watch as g,watchEffect as K}from"vue";import{useEventListener as U}from'../../hooks/use-event-listener.js';import{Direction as y,useTabDirection as _}from'../../hooks/use-tab-direction.js';import{Hidden as k,Features as D}from'../../internal/hidden.js';import{history as C}from'../../utils/active-element-history.js';import{dom as c}from'../../utils/dom.js';import{Focus as v,FocusResult as q,focusElement as p,focusIn as b}from'../../utils/focus-management.js';import{match as P}from'../../utils/match.js';import{microTask as S}from'../../utils/micro-task.js';import{getOwnerDocument as x}from'../../utils/owner.js';import{render as G}from'../../utils/render.js';function B(t){if(!t)return new Set;if(typeof t=="function")return new Set(t());let n=new Set;for(let r of t.value){let l=c(r);l instanceof HTMLElement&&n.add(l)}return n}var A=(e=>(e[e.None=1]="None",e[e.InitialFocus=2]="InitialFocus",e[e.TabLock=4]="TabLock",e[e.FocusLock=8]="FocusLock",e[e.RestoreFocus=16]="RestoreFocus",e[e.All=30]="All",e))(A||{});let ue=Object.assign(j({name:"FocusTrap",props:{as:{type:[Object,String],default:"div"},initialFocus:{type:Object,default:null},features:{type:Number,default:30},containers:{type:[Object,Function],default:E(new Set)}},inheritAttrs:!1,setup(t,{attrs:n,slots:r,expose:l}){let o=E(null);l({el:o,$el:o});let i=L(()=>x(o)),e=E(!1);M(()=>e.value=!0),h(()=>e.value=!1),$({ownerDocument:i},L(()=>e.value&&!!(t.features&16)));let m=z({ownerDocument:i,container:o,initialFocus:L(()=>t.initialFocus)},L(()=>e.value&&!!(t.features&2)));J({ownerDocument:i,container:o,containers:t.containers,previousActiveElement:m},L(()=>e.value&&!!(t.features&8)));let f=_();function a(u){let T=c(o);if(!T)return;(w=>w())(()=>{P(f.value,{[y.Forwards]:()=>{b(T,v.First,{skipElements:[u.relatedTarget]})},[y.Backwards]:()=>{b(T,v.Last,{skipElements:[u.relatedTarget]})}})})}let s=E(!1);function F(u){u.key==="Tab"&&(s.value=!0,requestAnimationFrame(()=>{s.value=!1}))}function H(u){if(!e.value)return;let T=B(t.containers);c(o)instanceof HTMLElement&&T.add(c(o));let d=u.relatedTarget;d instanceof HTMLElement&&d.dataset.headlessuiFocusGuard!=="true"&&(N(T,d)||(s.value?b(c(o),P(f.value,{[y.Forwards]:()=>v.Next,[y.Backwards]:()=>v.Previous})|v.WrapAround,{relativeTo:u.target}):u.target instanceof HTMLElement&&p(u.target)))}return()=>{let u={},T={ref:o,onKeydown:F,onFocusout:H},{features:d,initialFocus:w,containers:Q,...O}=t;return R(I,[!!(d&4)&&R(k,{as:"button",type:"button","data-headlessui-focus-guard":!0,onFocus:a,features:D.Focusable}),G({ourProps:T,theirProps:{...n,...O},slot:u,attrs:n,slots:r,name:"FocusTrap"}),!!(d&4)&&R(k,{as:"button",type:"button","data-headlessui-focus-guard":!0,onFocus:a,features:D.Focusable})])}}}),{features:A});function W(t){let n=E(C.slice());return g([t],([r],[l])=>{l===!0&&r===!1?S(()=>{n.value.splice(0)}):l===!1&&r===!0&&(n.value=C.slice())},{flush:"post"}),()=>{var r;return(r=n.value.find(l=>l!=null&&l.isConnected))!=null?r:null}}function $({ownerDocument:t},n){let r=W(n);M(()=>{K(()=>{var l,o;n.value||((l=t.value)==null?void 0:l.activeElement)===((o=t.value)==null?void 0:o.body)&&p(r())},{flush:"post"})}),h(()=>{n.value&&p(r())})}function z({ownerDocument:t,container:n,initialFocus:r},l){let o=E(null),i=E(!1);return M(()=>i.value=!0),h(()=>i.value=!1),M(()=>{g([n,r,l],(e,m)=>{if(e.every((a,s)=>(m==null?void 0:m[s])===a)||!l.value)return;let f=c(n);f&&S(()=>{var F,H;if(!i.value)return;let a=c(r),s=(F=t.value)==null?void 0:F.activeElement;if(a){if(a===s){o.value=s;return}}else if(f.contains(s)){o.value=s;return}a?p(a):b(f,v.First|v.NoScroll)===q.Error&&console.warn("There are no focusable elements inside the <FocusTrap />"),o.value=(H=t.value)==null?void 0:H.activeElement})},{immediate:!0,flush:"post"})}),o}function J({ownerDocument:t,container:n,containers:r,previousActiveElement:l},o){var i;U((i=t.value)==null?void 0:i.defaultView,"focus",e=>{if(!o.value)return;let m=B(r);c(n)instanceof HTMLElement&&m.add(c(n));let f=l.value;if(!f)return;let a=e.target;a&&a instanceof HTMLElement?N(m,a)?(l.value=a,p(a)):(e.preventDefault(),e.stopPropagation(),p(f)):p(l.value)},!0)}function N(t,n){for(let r of t)if(r.contains(n))return!0;return!1}export{ue as FocusTrap};
@@ -0,0 +1,41 @@
1
+ import { type ComputedRef } from 'vue';
2
+ export declare function useLabels({ slot, name, props, }?: {
3
+ slot?: Record<string, unknown>;
4
+ name?: string;
5
+ props?: Record<string, unknown>;
6
+ }): ComputedRef<string | undefined>;
7
+ export declare let Label: import("vue").DefineComponent<{
8
+ as: {
9
+ type: (ObjectConstructor | StringConstructor)[];
10
+ default: string;
11
+ };
12
+ passive: {
13
+ type: BooleanConstructor[];
14
+ default: boolean;
15
+ };
16
+ id: {
17
+ type: StringConstructor;
18
+ default: () => string;
19
+ };
20
+ }, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
21
+ [key: string]: any;
22
+ }> | import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
23
+ [key: string]: any;
24
+ }>[] | null, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
25
+ as: {
26
+ type: (ObjectConstructor | StringConstructor)[];
27
+ default: string;
28
+ };
29
+ passive: {
30
+ type: BooleanConstructor[];
31
+ default: boolean;
32
+ };
33
+ id: {
34
+ type: StringConstructor;
35
+ default: () => string;
36
+ };
37
+ }>>, {
38
+ passive: boolean;
39
+ id: string;
40
+ as: string | Record<string, any>;
41
+ }>;
@@ -0,0 +1 @@
1
+ import{computed as m,defineComponent as v,inject as x,onMounted as L,onUnmounted as k,provide as C,ref as j,unref as y}from"vue";import{useId as h}from'../../hooks/use-id.js';import{render as w}from'../../utils/render.js';let a=Symbol("LabelContext");function d(){let t=x(a,null);if(t===null){let n=new Error("You used a <Label /> component, but it is not inside a parent.");throw Error.captureStackTrace&&Error.captureStackTrace(n,d),n}return t}function O({slot:t={},name:n="Label",props:i={}}={}){let e=j([]);function l(r){return e.value.push(r),()=>{let o=e.value.indexOf(r);o!==-1&&e.value.splice(o,1)}}return C(a,{register:l,slot:t,name:n,props:i}),m(()=>e.value.length>0?e.value.join(" "):void 0)}let E=v({name:"Label",props:{as:{type:[Object,String],default:"label"},passive:{type:[Boolean],default:!1},id:{type:String,default:()=>`headlessui-label-${h()}`}},setup(t,{slots:n,attrs:i}){let e=d();return L(()=>k(e.register(t.id))),()=>{let{name:l="Label",slot:r={},props:o={}}=e,{id:p,passive:c,...u}=t,s={...Object.entries(o).reduce((f,[b,g])=>Object.assign(f,{[b]:y(g)}),{}),id:p};return c&&(delete s.onClick,delete s.htmlFor,delete u.onClick),w({ourProps:s,theirProps:u,slot:r,attrs:i,slots:n,name:l})}}});export{E as Label,O as useLabels};
@@ -0,0 +1,229 @@
1
+ import { type PropType } from 'vue';
2
+ declare function defaultComparator<T>(a: T, z: T): boolean;
3
+ export declare let Listbox: import("vue").DefineComponent<{
4
+ as: {
5
+ type: (ObjectConstructor | StringConstructor)[];
6
+ default: string;
7
+ };
8
+ disabled: {
9
+ type: BooleanConstructor[];
10
+ default: boolean;
11
+ };
12
+ by: {
13
+ type: (StringConstructor | FunctionConstructor)[];
14
+ default: () => typeof defaultComparator;
15
+ };
16
+ horizontal: {
17
+ type: BooleanConstructor[];
18
+ default: boolean;
19
+ };
20
+ modelValue: {
21
+ type: PropType<string | number | boolean | object | null>;
22
+ default: undefined;
23
+ };
24
+ defaultValue: {
25
+ type: PropType<string | number | boolean | object | null>;
26
+ default: undefined;
27
+ };
28
+ form: {
29
+ type: StringConstructor;
30
+ optional: boolean;
31
+ };
32
+ name: {
33
+ type: StringConstructor;
34
+ optional: boolean;
35
+ };
36
+ multiple: {
37
+ type: BooleanConstructor[];
38
+ default: boolean;
39
+ };
40
+ }, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
41
+ [key: string]: any;
42
+ }>, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
43
+ 'update:modelValue': (_value: any) => true;
44
+ }, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
45
+ as: {
46
+ type: (ObjectConstructor | StringConstructor)[];
47
+ default: string;
48
+ };
49
+ disabled: {
50
+ type: BooleanConstructor[];
51
+ default: boolean;
52
+ };
53
+ by: {
54
+ type: (StringConstructor | FunctionConstructor)[];
55
+ default: () => typeof defaultComparator;
56
+ };
57
+ horizontal: {
58
+ type: BooleanConstructor[];
59
+ default: boolean;
60
+ };
61
+ modelValue: {
62
+ type: PropType<string | number | boolean | object | null>;
63
+ default: undefined;
64
+ };
65
+ defaultValue: {
66
+ type: PropType<string | number | boolean | object | null>;
67
+ default: undefined;
68
+ };
69
+ form: {
70
+ type: StringConstructor;
71
+ optional: boolean;
72
+ };
73
+ name: {
74
+ type: StringConstructor;
75
+ optional: boolean;
76
+ };
77
+ multiple: {
78
+ type: BooleanConstructor[];
79
+ default: boolean;
80
+ };
81
+ }>> & {
82
+ "onUpdate:modelValue"?: ((_value: any) => any) | undefined;
83
+ }, {
84
+ as: string | Record<string, any>;
85
+ disabled: boolean;
86
+ horizontal: boolean;
87
+ by: string | Function;
88
+ modelValue: string | number | boolean | object | null;
89
+ defaultValue: string | number | boolean | object | null;
90
+ multiple: boolean;
91
+ }>;
92
+ export declare let ListboxLabel: import("vue").DefineComponent<{
93
+ as: {
94
+ type: (ObjectConstructor | StringConstructor)[];
95
+ default: string;
96
+ };
97
+ id: {
98
+ type: StringConstructor;
99
+ default: () => string;
100
+ };
101
+ }, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
102
+ [key: string]: any;
103
+ }> | import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
104
+ [key: string]: any;
105
+ }>[] | null, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
106
+ as: {
107
+ type: (ObjectConstructor | StringConstructor)[];
108
+ default: string;
109
+ };
110
+ id: {
111
+ type: StringConstructor;
112
+ default: () => string;
113
+ };
114
+ }>>, {
115
+ id: string;
116
+ as: string | Record<string, any>;
117
+ }>;
118
+ export declare let ListboxButton: import("vue").DefineComponent<{
119
+ as: {
120
+ type: (ObjectConstructor | StringConstructor)[];
121
+ default: string;
122
+ };
123
+ id: {
124
+ type: StringConstructor;
125
+ default: () => string;
126
+ };
127
+ }, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
128
+ [key: string]: any;
129
+ }> | import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
130
+ [key: string]: any;
131
+ }>[] | null, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
132
+ as: {
133
+ type: (ObjectConstructor | StringConstructor)[];
134
+ default: string;
135
+ };
136
+ id: {
137
+ type: StringConstructor;
138
+ default: () => string;
139
+ };
140
+ }>>, {
141
+ id: string;
142
+ as: string | Record<string, any>;
143
+ }>;
144
+ export declare let ListboxOptions: import("vue").DefineComponent<{
145
+ as: {
146
+ type: (ObjectConstructor | StringConstructor)[];
147
+ default: string;
148
+ };
149
+ static: {
150
+ type: BooleanConstructor;
151
+ default: boolean;
152
+ };
153
+ unmount: {
154
+ type: BooleanConstructor;
155
+ default: boolean;
156
+ };
157
+ id: {
158
+ type: StringConstructor;
159
+ default: () => string;
160
+ };
161
+ }, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
162
+ [key: string]: any;
163
+ }> | import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
164
+ [key: string]: any;
165
+ }>[] | null, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
166
+ as: {
167
+ type: (ObjectConstructor | StringConstructor)[];
168
+ default: string;
169
+ };
170
+ static: {
171
+ type: BooleanConstructor;
172
+ default: boolean;
173
+ };
174
+ unmount: {
175
+ type: BooleanConstructor;
176
+ default: boolean;
177
+ };
178
+ id: {
179
+ type: StringConstructor;
180
+ default: () => string;
181
+ };
182
+ }>>, {
183
+ id: string;
184
+ as: string | Record<string, any>;
185
+ unmount: boolean;
186
+ static: boolean;
187
+ }>;
188
+ export declare let ListboxOption: import("vue").DefineComponent<{
189
+ as: {
190
+ type: (ObjectConstructor | StringConstructor)[];
191
+ default: string;
192
+ };
193
+ value: {
194
+ type: PropType<string | number | boolean | object | null>;
195
+ };
196
+ disabled: {
197
+ type: BooleanConstructor;
198
+ default: boolean;
199
+ };
200
+ id: {
201
+ type: StringConstructor;
202
+ default: () => string;
203
+ };
204
+ }, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
205
+ [key: string]: any;
206
+ }> | import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
207
+ [key: string]: any;
208
+ }>[] | null, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
209
+ as: {
210
+ type: (ObjectConstructor | StringConstructor)[];
211
+ default: string;
212
+ };
213
+ value: {
214
+ type: PropType<string | number | boolean | object | null>;
215
+ };
216
+ disabled: {
217
+ type: BooleanConstructor;
218
+ default: boolean;
219
+ };
220
+ id: {
221
+ type: StringConstructor;
222
+ default: () => string;
223
+ };
224
+ }>>, {
225
+ id: string;
226
+ as: string | Record<string, any>;
227
+ disabled: boolean;
228
+ }>;
229
+ export {};
@@ -0,0 +1 @@
1
+ import{Fragment as z,computed as x,defineComponent as E,h as N,inject as _,nextTick as C,onMounted as K,onUnmounted as q,provide as W,ref as w,toRaw as R,watch as H,watchEffect as G}from"vue";import{useControllable as J}from'../../hooks/use-controllable.js';import{useId as F}from'../../hooks/use-id.js';import{useOutsideClick as X}from'../../hooks/use-outside-click.js';import{useResolveButtonType as Y}from'../../hooks/use-resolve-button-type.js';import{useTextValue as Z}from'../../hooks/use-text-value.js';import{useTrackedPointer as ee}from'../../hooks/use-tracked-pointer.js';import{Hidden as te,Features as oe}from'../../internal/hidden.js';import{State as B,useOpenClosed as ie,useOpenClosedProvider as ae}from'../../internal/open-closed.js';import{Keys as p}from'../../keyboard.js';import{Focus as g,calculateActiveIndex as ne}from'../../utils/calculate-active-index.js';import{dom as S}from'../../utils/dom.js';import{FocusableMode as le,isFocusableElement as ue,sortByDomNode as re}from'../../utils/focus-management.js';import{objectToFormEntries as se}from'../../utils/form.js';import{match as P}from'../../utils/match.js';import{Features as U,compact as de,omit as fe,render as j}from'../../utils/render.js';function pe(t,c){return t===c}var ce=(u=>(u[u.Open=0]="Open",u[u.Closed=1]="Closed",u))(ce||{}),ve=(u=>(u[u.Single=0]="Single",u[u.Multi=1]="Multi",u))(ve||{}),be=(u=>(u[u.Pointer=0]="Pointer",u[u.Other=1]="Other",u))(be||{});function me(t){requestAnimationFrame(()=>requestAnimationFrame(t))}let $=Symbol("ListboxContext");function A(t){let c=_($,null);if(c===null){let u=new Error(`<${t} /> is missing a parent <Listbox /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(u,A),u}return c}let Ie=E({name:"Listbox",emits:{"update:modelValue":t=>!0},props:{as:{type:[Object,String],default:"template"},disabled:{type:[Boolean],default:!1},by:{type:[String,Function],default:()=>pe},horizontal:{type:[Boolean],default:!1},modelValue:{type:[Object,String,Number,Boolean],default:void 0},defaultValue:{type:[Object,String,Number,Boolean],default:void 0},form:{type:String,optional:!0},name:{type:String,optional:!0},multiple:{type:[Boolean],default:!1}},inheritAttrs:!1,setup(t,{slots:c,attrs:u,emit:L}){let e=w(1),d=w(null),v=w(null),b=w(null),f=w([]),o=w(""),i=w(null),T=w(1);function D(a=n=>n){let n=i.value!==null?f.value[i.value]:null,l=re(a(f.value.slice()),O=>S(O.dataRef.domRef)),s=n?l.indexOf(n):null;return s===-1&&(s=null),{options:l,activeOptionIndex:s}}let y=x(()=>t.multiple?1:0),[h,V]=J(x(()=>t.modelValue),a=>L("update:modelValue",a),x(()=>t.defaultValue)),M=x(()=>h.value===void 0?P(y.value,{[1]:[],[0]:void 0}):h.value),r={listboxState:e,value:M,mode:y,compare(a,n){if(typeof t.by=="string"){let l=t.by;return(a==null?void 0:a[l])===(n==null?void 0:n[l])}return t.by(a,n)},orientation:x(()=>t.horizontal?"horizontal":"vertical"),labelRef:d,buttonRef:v,optionsRef:b,disabled:x(()=>t.disabled),options:f,searchQuery:o,activeOptionIndex:i,activationTrigger:T,closeListbox(){t.disabled||e.value!==1&&(e.value=1,i.value=null)},openListbox(){t.disabled||e.value!==0&&(e.value=0)},goToOption(a,n,l){if(t.disabled||e.value===1)return;let s=D(),O=ne(a===g.Specific?{focus:g.Specific,id:n}:{focus:a},{resolveItems:()=>s.options,resolveActiveIndex:()=>s.activeOptionIndex,resolveId:k=>k.id,resolveDisabled:k=>k.dataRef.disabled});o.value="",i.value=O,T.value=l!=null?l:1,f.value=s.options},search(a){if(t.disabled||e.value===1)return;let l=o.value!==""?0:1;o.value+=a.toLowerCase();let O=(i.value!==null?f.value.slice(i.value+l).concat(f.value.slice(0,i.value+l)):f.value).find(I=>I.dataRef.textValue.startsWith(o.value)&&!I.dataRef.disabled),k=O?f.value.indexOf(O):-1;k===-1||k===i.value||(i.value=k,T.value=1)},clearSearch(){t.disabled||e.value!==1&&o.value!==""&&(o.value="")},registerOption(a,n){let l=D(s=>[...s,{id:a,dataRef:n}]);f.value=l.options,i.value=l.activeOptionIndex},unregisterOption(a){let n=D(l=>{let s=l.findIndex(O=>O.id===a);return s!==-1&&l.splice(s,1),l});f.value=n.options,i.value=n.activeOptionIndex,T.value=1},theirOnChange(a){t.disabled||V(a)},select(a){t.disabled||V(P(y.value,{[0]:()=>a,[1]:()=>{let n=R(r.value.value).slice(),l=R(a),s=n.findIndex(O=>r.compare(l,R(O)));return s===-1?n.push(l):n.splice(s,1),n}}))}};X([v,b],(a,n)=>{var l;r.closeListbox(),ue(n,le.Loose)||(a.preventDefault(),(l=S(v))==null||l.focus())},x(()=>e.value===0)),W($,r),ae(x(()=>P(e.value,{[0]:B.Open,[1]:B.Closed})));let m=x(()=>{var a;return(a=S(v))==null?void 0:a.closest("form")});return K(()=>{H([m],()=>{if(!m.value||t.defaultValue===void 0)return;function a(){r.theirOnChange(t.defaultValue)}return m.value.addEventListener("reset",a),()=>{var n;(n=m.value)==null||n.removeEventListener("reset",a)}},{immediate:!0})}),()=>{let{name:a,modelValue:n,disabled:l,form:s,...O}=t,k={open:e.value===0,disabled:l,value:M.value};return N(z,[...a!=null&&M.value!=null?se({[a]:M.value}).map(([I,Q])=>N(te,de({features:oe.Hidden,key:I,as:"input",type:"hidden",hidden:!0,readOnly:!0,form:s,disabled:l,name:I,value:Q}))):[],j({ourProps:{},theirProps:{...u,...fe(O,["defaultValue","onUpdate:modelValue","horizontal","multiple","by"])},slot:k,slots:c,attrs:u,name:"Listbox"})])}}}),Ee=E({name:"ListboxLabel",props:{as:{type:[Object,String],default:"label"},id:{type:String,default:()=>`headlessui-listbox-label-${F()}`}},setup(t,{attrs:c,slots:u}){let L=A("ListboxLabel");function e(){var d;(d=S(L.buttonRef))==null||d.focus({preventScroll:!0})}return()=>{let d={open:L.listboxState.value===0,disabled:L.disabled.value},{id:v,...b}=t,f={id:v,ref:L.labelRef,onClick:e};return j({ourProps:f,theirProps:b,slot:d,attrs:c,slots:u,name:"ListboxLabel"})}}}),je=E({name:"ListboxButton",props:{as:{type:[Object,String],default:"button"},id:{type:String,default:()=>`headlessui-listbox-button-${F()}`}},setup(t,{attrs:c,slots:u,expose:L}){let e=A("ListboxButton");L({el:e.buttonRef,$el:e.buttonRef});function d(o){switch(o.key){case p.Space:case p.Enter:case p.ArrowDown:o.preventDefault(),e.openListbox(),C(()=>{var i;(i=S(e.optionsRef))==null||i.focus({preventScroll:!0}),e.value.value||e.goToOption(g.First)});break;case p.ArrowUp:o.preventDefault(),e.openListbox(),C(()=>{var i;(i=S(e.optionsRef))==null||i.focus({preventScroll:!0}),e.value.value||e.goToOption(g.Last)});break}}function v(o){switch(o.key){case p.Space:o.preventDefault();break}}function b(o){e.disabled.value||(e.listboxState.value===0?(e.closeListbox(),C(()=>{var i;return(i=S(e.buttonRef))==null?void 0:i.focus({preventScroll:!0})})):(o.preventDefault(),e.openListbox(),me(()=>{var i;return(i=S(e.optionsRef))==null?void 0:i.focus({preventScroll:!0})})))}let f=Y(x(()=>({as:t.as,type:c.type})),e.buttonRef);return()=>{var y,h;let o={open:e.listboxState.value===0,disabled:e.disabled.value,value:e.value.value},{id:i,...T}=t,D={ref:e.buttonRef,id:i,type:f.value,"aria-haspopup":"listbox","aria-controls":(y=S(e.optionsRef))==null?void 0:y.id,"aria-expanded":e.listboxState.value===0,"aria-labelledby":e.labelRef.value?[(h=S(e.labelRef))==null?void 0:h.id,i].join(" "):void 0,disabled:e.disabled.value===!0?!0:void 0,onKeydown:d,onKeyup:v,onClick:b};return j({ourProps:D,theirProps:T,slot:o,attrs:c,slots:u,name:"ListboxButton"})}}}),Ae=E({name:"ListboxOptions",props:{as:{type:[Object,String],default:"ul"},static:{type:Boolean,default:!1},unmount:{type:Boolean,default:!0},id:{type:String,default:()=>`headlessui-listbox-options-${F()}`}},setup(t,{attrs:c,slots:u,expose:L}){let e=A("ListboxOptions"),d=w(null);L({el:e.optionsRef,$el:e.optionsRef});function v(o){switch(d.value&&clearTimeout(d.value),o.key){case p.Space:if(e.searchQuery.value!=="")return o.preventDefault(),o.stopPropagation(),e.search(o.key);case p.Enter:if(o.preventDefault(),o.stopPropagation(),e.activeOptionIndex.value!==null){let i=e.options.value[e.activeOptionIndex.value];e.select(i.dataRef.value)}e.mode.value===0&&(e.closeListbox(),C(()=>{var i;return(i=S(e.buttonRef))==null?void 0:i.focus({preventScroll:!0})}));break;case P(e.orientation.value,{vertical:p.ArrowDown,horizontal:p.ArrowRight}):return o.preventDefault(),o.stopPropagation(),e.goToOption(g.Next);case P(e.orientation.value,{vertical:p.ArrowUp,horizontal:p.ArrowLeft}):return o.preventDefault(),o.stopPropagation(),e.goToOption(g.Previous);case p.Home:case p.PageUp:return o.preventDefault(),o.stopPropagation(),e.goToOption(g.First);case p.End:case p.PageDown:return o.preventDefault(),o.stopPropagation(),e.goToOption(g.Last);case p.Escape:o.preventDefault(),o.stopPropagation(),e.closeListbox(),C(()=>{var i;return(i=S(e.buttonRef))==null?void 0:i.focus({preventScroll:!0})});break;case p.Tab:o.preventDefault(),o.stopPropagation();break;default:o.key.length===1&&(e.search(o.key),d.value=setTimeout(()=>e.clearSearch(),350));break}}let b=ie(),f=x(()=>b!==null?(b.value&B.Open)===B.Open:e.listboxState.value===0);return()=>{var y,h;let o={open:e.listboxState.value===0},{id:i,...T}=t,D={"aria-activedescendant":e.activeOptionIndex.value===null||(y=e.options.value[e.activeOptionIndex.value])==null?void 0:y.id,"aria-multiselectable":e.mode.value===1?!0:void 0,"aria-labelledby":(h=S(e.buttonRef))==null?void 0:h.id,"aria-orientation":e.orientation.value,id:i,onKeydown:v,role:"listbox",tabIndex:0,ref:e.optionsRef};return j({ourProps:D,theirProps:T,slot:o,attrs:c,slots:u,features:U.RenderStrategy|U.Static,visible:f.value,name:"ListboxOptions"})}}}),Fe=E({name:"ListboxOption",props:{as:{type:[Object,String],default:"li"},value:{type:[Object,String,Number,Boolean]},disabled:{type:Boolean,default:!1},id:{type:String,default:()=>`headlessui-listbox.option-${F()}`}},setup(t,{slots:c,attrs:u,expose:L}){let e=A("ListboxOption"),d=w(null);L({el:d,$el:d});let v=x(()=>e.activeOptionIndex.value!==null?e.options.value[e.activeOptionIndex.value].id===t.id:!1),b=x(()=>P(e.mode.value,{[0]:()=>e.compare(R(e.value.value),R(t.value)),[1]:()=>R(e.value.value).some(r=>e.compare(R(r),R(t.value)))})),f=x(()=>P(e.mode.value,{[1]:()=>{var m;let r=R(e.value.value);return((m=e.options.value.find(a=>r.some(n=>e.compare(R(n),R(a.dataRef.value)))))==null?void 0:m.id)===t.id},[0]:()=>b.value})),o=Z(d),i=x(()=>({disabled:t.disabled,value:t.value,get textValue(){return o()},domRef:d}));K(()=>e.registerOption(t.id,i)),q(()=>e.unregisterOption(t.id)),K(()=>{H([e.listboxState,b],()=>{e.listboxState.value===0&&b.value&&P(e.mode.value,{[1]:()=>{f.value&&e.goToOption(g.Specific,t.id)},[0]:()=>{e.goToOption(g.Specific,t.id)}})},{immediate:!0})}),G(()=>{e.listboxState.value===0&&v.value&&e.activationTrigger.value!==0&&C(()=>{var r,m;return(m=(r=S(d))==null?void 0:r.scrollIntoView)==null?void 0:m.call(r,{block:"nearest"})})});function T(r){if(t.disabled)return r.preventDefault();e.select(t.value),e.mode.value===0&&(e.closeListbox(),C(()=>{var m;return(m=S(e.buttonRef))==null?void 0:m.focus({preventScroll:!0})}))}function D(){if(t.disabled)return e.goToOption(g.Nothing);e.goToOption(g.Specific,t.id)}let y=ee();function h(r){y.update(r)}function V(r){y.wasMoved(r)&&(t.disabled||v.value||e.goToOption(g.Specific,t.id,0))}function M(r){y.wasMoved(r)&&(t.disabled||v.value&&e.goToOption(g.Nothing))}return()=>{let{disabled:r}=t,m={active:v.value,selected:b.value,disabled:r},{id:a,value:n,disabled:l,...s}=t,O={id:a,ref:d,role:"option",tabIndex:r===!0?void 0:-1,"aria-disabled":r===!0?!0:void 0,"aria-selected":b.value,disabled:void 0,onClick:T,onFocus:D,onPointerenter:h,onMouseenter:h,onPointermove:V,onMousemove:V,onPointerleave:M,onMouseleave:M};return j({ourProps:O,theirProps:s,slot:m,attrs:u,slots:c,name:"ListboxOption"})}}});export{Ie as Listbox,je as ListboxButton,Ee as ListboxLabel,Fe as ListboxOption,Ae as ListboxOptions};