@zag-js/combobox 0.51.1 → 0.52.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +11 -11
- package/src/combobox.connect.ts +4 -14
package/dist/index.d.mts
CHANGED
|
@@ -9,7 +9,7 @@ import { StateMachine } from '@zag-js/core';
|
|
|
9
9
|
import { PositioningOptions } from '@zag-js/popper';
|
|
10
10
|
export { Placement, PositioningOptions } from '@zag-js/popper';
|
|
11
11
|
|
|
12
|
-
declare const anatomy: _zag_js_anatomy.AnatomyInstance<"input" | "label" | "
|
|
12
|
+
declare const anatomy: _zag_js_anatomy.AnatomyInstance<"input" | "label" | "root" | "content" | "item" | "positioner" | "control" | "trigger" | "clearTrigger" | "itemText" | "itemIndicator" | "itemGroup" | "itemGroupLabel">;
|
|
13
13
|
|
|
14
14
|
declare const collection: {
|
|
15
15
|
<T extends unknown>(options: CollectionOptions<T>): Collection<T>;
|
package/dist/index.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ import { StateMachine } from '@zag-js/core';
|
|
|
9
9
|
import { PositioningOptions } from '@zag-js/popper';
|
|
10
10
|
export { Placement, PositioningOptions } from '@zag-js/popper';
|
|
11
11
|
|
|
12
|
-
declare const anatomy: _zag_js_anatomy.AnatomyInstance<"input" | "label" | "
|
|
12
|
+
declare const anatomy: _zag_js_anatomy.AnatomyInstance<"input" | "label" | "root" | "content" | "item" | "positioner" | "control" | "trigger" | "clearTrigger" | "itemText" | "itemIndicator" | "itemGroup" | "itemGroupLabel">;
|
|
13
13
|
|
|
14
14
|
declare const collection: {
|
|
15
15
|
<T extends unknown>(options: CollectionOptions<T>): Collection<T>;
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __hasOwnProp=Object.prototype.hasOwnProperty;var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:true})};var __copyProps=(to,from,except,desc)=>{if(from&&typeof from==="object"||typeof from==="function"){for(let key of __getOwnPropNames(from))if(!__hasOwnProp.call(to,key)&&key!==except)__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable})}return to};var __toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:true}),mod);var src_exports={};__export(src_exports,{anatomy:()=>anatomy,collection:()=>collection,connect:()=>connect,machine:()=>machine});module.exports=__toCommonJS(src_exports);var import_anatomy=require("@zag-js/anatomy");var anatomy=(0,import_anatomy.createAnatomy)("combobox").parts("root","label","input","positioner","control","trigger","content","clearTrigger","item","itemText","itemIndicator","itemGroup","itemGroupLabel");var parts=anatomy.build();var import_collection=require("@zag-js/collection");var import_core=require("@zag-js/core");var collection=options=>{return(0,import_core.ref)(new import_collection.Collection(options))};collection.empty=()=>{return(0,import_core.ref)(new import_collection.Collection({items:[]}))};var import_dom_event=require("@zag-js/dom-event");var import_dom_query2=require("@zag-js/dom-query");var import_popper=require("@zag-js/popper");var import_dom_query=require("@zag-js/dom-query");var dom=(0,import_dom_query.createScope)({getRootId:ctx=>ctx.ids?.root??`combobox:${ctx.id}`,getLabelId:ctx=>ctx.ids?.label??`combobox:${ctx.id}:label`,getControlId:ctx=>ctx.ids?.control??`combobox:${ctx.id}:control`,getInputId:ctx=>ctx.ids?.input??`combobox:${ctx.id}:input`,getContentId:ctx=>ctx.ids?.content??`combobox:${ctx.id}:content`,getPositionerId:ctx=>ctx.ids?.positioner??`combobox:${ctx.id}:popper`,getTriggerId:ctx=>ctx.ids?.trigger??`combobox:${ctx.id}:toggle-btn`,getClearTriggerId:ctx=>ctx.ids?.clearTrigger??`combobox:${ctx.id}:clear-btn`,getItemGroupId:(ctx,id)=>ctx.ids?.itemGroup?.(id)??`combobox:${ctx.id}:optgroup:${id}`,getItemGroupLabelId:(ctx,id)=>ctx.ids?.itemGroupLabel?.(id)??`combobox:${ctx.id}:optgroup-label:${id}`,getItemId:(ctx,id)=>`combobox:${ctx.id}:option:${id}`,getContentEl:ctx=>dom.getById(ctx,dom.getContentId(ctx)),getInputEl:ctx=>dom.getById(ctx,dom.getInputId(ctx)),getPositionerEl:ctx=>dom.getById(ctx,dom.getPositionerId(ctx)),getControlEl:ctx=>dom.getById(ctx,dom.getControlId(ctx)),getTriggerEl:ctx=>dom.getById(ctx,dom.getTriggerId(ctx)),getClearTriggerEl:ctx=>dom.getById(ctx,dom.getClearTriggerId(ctx)),getHighlightedItemEl:ctx=>{const value=ctx.highlightedValue;if(value==null)return;return(0,import_dom_query.query)(dom.getContentEl(ctx),`[role=option][data-value="${CSS.escape(value)}"`)},focusInputEl:ctx=>{const inputEl=dom.getInputEl(ctx);if(dom.getActiveElement(ctx)===inputEl)return;inputEl?.focus({preventScroll:true})},focusTriggerEl:ctx=>{const triggerEl=dom.getTriggerEl(ctx);if(dom.getActiveElement(ctx)===triggerEl)return;triggerEl?.focus({preventScroll:true})}});function connect(state,send,normalize){const translations=state.context.translations;const collection2=state.context.collection;const disabled=state.context.disabled;const interactive=state.context.isInteractive;const invalid=state.context.invalid;const readOnly=state.context.readOnly;const open=state.hasTag("open");const focused=state.hasTag("focused");const composite=state.context.composite;const highlightedValue=state.context.highlightedValue;const popperStyles=(0,import_popper.getPlacementStyles)({...state.context.positioning,placement:state.context.currentPlacement});function getItemState(props){const{item}=props;const disabled2=collection2.isItemDisabled(item);const value=collection2.itemToValue(item);return{value,disabled:Boolean(disabled2||disabled2),highlighted:highlightedValue===value,selected:state.context.value.includes(value)}}return{focused,open,inputValue:state.context.inputValue,highlightedValue,highlightedItem:state.context.highlightedItem,value:state.context.value,valueAsString:state.context.valueAsString,hasSelectedItems:state.context.hasSelectedItems,selectedItems:state.context.selectedItems,collection:state.context.collection,reposition(options={}){send({type:"POSITIONING.SET",options})},setCollection(collection3){send({type:"COLLECTION.SET",value:collection3})},setHighlightValue(value){send({type:"HIGHLIGHTED_VALUE.SET",value})},selectValue(value){send({type:"ITEM.SELECT",value})},setValue(value){send({type:"VALUE.SET",value})},setInputValue(value){send({type:"INPUT_VALUE.SET",value})},clearValue(value){if(value!=null){send({type:"ITEM.CLEAR",value})}else{send("VALUE.CLEAR")}},focus(){dom.getInputEl(state.context)?.focus()},setOpen(nextOpen){if(nextOpen===open)return;send(nextOpen?"OPEN":"CLOSE")},rootProps:normalize.element({...parts.root.attrs,dir:state.context.dir,id:dom.getRootId(state.context),"data-invalid":(0,import_dom_query2.dataAttr)(invalid),"data-readonly":(0,import_dom_query2.dataAttr)(readOnly)}),labelProps:normalize.label({...parts.label.attrs,dir:state.context.dir,htmlFor:dom.getInputId(state.context),id:dom.getLabelId(state.context),"data-readonly":(0,import_dom_query2.dataAttr)(readOnly),"data-disabled":(0,import_dom_query2.dataAttr)(disabled),"data-invalid":(0,import_dom_query2.dataAttr)(invalid),"data-focus":(0,import_dom_query2.dataAttr)(focused),onClick(event){if(composite)return;event.preventDefault();dom.getTriggerEl(state.context)?.focus({preventScroll:true})}}),controlProps:normalize.element({...parts.control.attrs,dir:state.context.dir,id:dom.getControlId(state.context),"data-state":open?"open":"closed","data-focus":(0,import_dom_query2.dataAttr)(focused),"data-disabled":(0,import_dom_query2.dataAttr)(disabled),"data-invalid":(0,import_dom_query2.dataAttr)(invalid)}),positionerProps:normalize.element({...parts.positioner.attrs,dir:state.context.dir,id:dom.getPositionerId(state.context),style:popperStyles.floating}),inputProps:normalize.input({...parts.input.attrs,dir:state.context.dir,"aria-invalid":(0,import_dom_query2.ariaAttr)(invalid),"data-invalid":(0,import_dom_query2.dataAttr)(invalid),name:state.context.name,form:state.context.form,disabled,autoFocus:state.context.autoFocus,autoComplete:"off",autoCorrect:"off",autoCapitalize:"none",spellCheck:"false",readOnly,placeholder:state.context.placeholder,id:dom.getInputId(state.context),type:"text",role:"combobox",defaultValue:state.context.inputValue,"aria-autocomplete":state.context.autoComplete?"both":"list","aria-controls":dom.getContentId(state.context),"aria-expanded":open,"data-state":open?"open":"closed","aria-activedescendant":highlightedValue?dom.getItemId(state.context,highlightedValue):void 0,onClick(event){if(event.defaultPrevented)return;if(!state.context.openOnClick)return;if(!interactive)return;send("INPUT.CLICK")},onFocus(){if(disabled)return;send("INPUT.FOCUS")},onBlur(){if(disabled)return;send("INPUT.BLUR")},onChange(event){send({type:"INPUT.CHANGE",value:event.currentTarget.value})},onKeyDown(event){if(event.defaultPrevented)return;if(!interactive)return;const evt=(0,import_dom_event.getNativeEvent)(event);if(evt.ctrlKey||evt.shiftKey||evt.isComposing)return;const openOnKeyPress=state.context.openOnKeyPress;const isModifierKey=event.ctrlKey||event.metaKey||event.shiftKey;const keypress=true;const keymap={ArrowDown(event2){if(!openOnKeyPress&&!open)return;send({type:event2.altKey?"OPEN":"INPUT.ARROW_DOWN",keypress});event2.preventDefault()},ArrowUp(){if(!openOnKeyPress&&!open)return;send({type:event.altKey?"CLOSE":"INPUT.ARROW_UP",keypress});event.preventDefault()},Home(event2){if(isModifierKey)return;send({type:"INPUT.HOME",keypress});if(open){event2.preventDefault()}},End(event2){if(isModifierKey)return;send({type:"INPUT.END",keypress});if(open){event2.preventDefault()}},Enter(event2){if(evt.isComposing)return;send({type:"INPUT.ENTER",keypress});if(open){event2.preventDefault()}const itemEl=dom.getHighlightedItemEl(state.context);(0,import_dom_event.clickIfLink)(itemEl)},Escape(){send({type:"INPUT.ESCAPE",keypress});event.preventDefault()}};const key=(0,import_dom_event.getEventKey)(event,state.context);const exec=keymap[key];exec?.(event)}}),getTriggerProps(props={}){return normalize.button({...parts.trigger.attrs,dir:state.context.dir,id:dom.getTriggerId(state.context),"aria-haspopup":composite?"listbox":"dialog",type:"button",tabIndex:props.focusable?void 0:-1,"aria-label":translations.triggerLabel,"aria-expanded":open,"data-state":open?"open":"closed","aria-controls":open?dom.getContentId(state.context):void 0,disabled,"data-focusable":(0,import_dom_query2.dataAttr)(props.focusable),"data-readonly":(0,import_dom_query2.dataAttr)(readOnly),"data-disabled":(0,import_dom_query2.dataAttr)(disabled),onFocus(){if(!props.focusable)return;send({type:"INPUT.FOCUS",src:"trigger"})},onClick(event){if(event.defaultPrevented)return;const evt=(0,import_dom_event.getNativeEvent)(event);if(!interactive)return;if(!(0,import_dom_event.isLeftClick)(evt))return;send("TRIGGER.CLICK")},onPointerDown(event){if(!interactive)return;if(event.pointerType==="touch")return;event.preventDefault();queueMicrotask(()=>{dom.getInputEl(state.context)?.focus({preventScroll:true})})},onKeyDown(event){if(event.defaultPrevented)return;if(composite)return;const keyMap={ArrowDown(){send({type:"INPUT.ARROW_DOWN",src:"trigger"})},ArrowUp(){send({type:"INPUT.ARROW_UP",src:"trigger"})}};const key=(0,import_dom_event.getEventKey)(event,state.context);const exec=keyMap[key];if(exec){exec(event);event.preventDefault()}}})},contentProps:normalize.element({...parts.content.attrs,dir:state.context.dir,id:dom.getContentId(state.context),role:!composite?"dialog":"listbox",tabIndex:-1,hidden:!open,"data-state":open?"open":"closed","aria-labelledby":dom.getLabelId(state.context),"aria-multiselectable":state.context.multiple&&composite?true:void 0,onPointerDown(event){event.preventDefault()}}),listProps:normalize.element({role:!composite?"listbox":void 0,"aria-labelledby":dom.getLabelId(state.context),"aria-multiselectable":state.context.multiple&&!composite?true:void 0}),clearTriggerProps:normalize.button({...parts.clearTrigger.attrs,dir:state.context.dir,id:dom.getClearTriggerId(state.context),type:"button",tabIndex:-1,disabled,"aria-label":translations.clearTriggerLabel,"aria-controls":dom.getInputId(state.context),hidden:!state.context.value.length,onPointerDown(event){event.preventDefault()},onClick(event){if(event.defaultPrevented)return;if(!interactive)return;send({type:"VALUE.CLEAR",src:"clear-trigger"})}}),getItemState,getItemProps(props){const itemState=getItemState(props);const value=itemState.value;return normalize.element({...parts.item.attrs,dir:state.context.dir,id:dom.getItemId(state.context,value),role:"option",tabIndex:-1,"data-highlighted":(0,import_dom_query2.dataAttr)(itemState.highlighted),"data-state":itemState.selected?"checked":"unchecked","aria-selected":itemState.highlighted,"aria-disabled":itemState.disabled,"data-disabled":(0,import_dom_query2.dataAttr)(itemState.disabled),"data-value":itemState.value,onPointerMove(){if(itemState.disabled)return;if(itemState.highlighted)return;send({type:"ITEM.POINTER_MOVE",value})},onPointerLeave(){if(props.persistFocus)return;if(itemState.disabled)return;const mouseMoved=state.previousEvent.type.includes("POINTER");if(!mouseMoved)return;send({type:"ITEM.POINTER_LEAVE",value})},onPointerUp(event){if((0,import_dom_query2.isDownloadingEvent)(event))return;if((0,import_dom_query2.isOpeningInNewTab)(event))return;if((0,import_dom_event.isContextMenuEvent)(event))return;if(itemState.disabled)return;send({type:"ITEM.CLICK",src:"pointerup",value})},onTouchEnd(event){event.preventDefault();event.stopPropagation()}})},getItemTextProps(props){const itemState=getItemState(props);return normalize.element({...parts.itemText.attrs,dir:state.context.dir,"data-disabled":(0,import_dom_query2.dataAttr)(itemState.disabled),"data-highlighted":(0,import_dom_query2.dataAttr)(itemState.highlighted)})},getItemIndicatorProps(props){const itemState=getItemState(props);return normalize.element({"aria-hidden":true,...parts.itemIndicator.attrs,dir:state.context.dir,"data-state":itemState.selected?"checked":"unchecked",hidden:!itemState.selected})},getItemGroupProps(props){const{id}=props;return normalize.element({...parts.itemGroup.attrs,dir:state.context.dir,id:dom.getItemGroupId(state.context,id),"aria-labelledby":dom.getItemGroupLabelId(state.context,id)})},getItemGroupLabelProps(props){const{htmlFor}=props;return normalize.element({...parts.itemGroupLabel.attrs,dir:state.context.dir,id:dom.getItemGroupLabelId(state.context,htmlFor),role:"group"})}}}var import_aria_hidden=require("@zag-js/aria-hidden");var import_core2=require("@zag-js/core");var import_dismissable=require("@zag-js/dismissable");var import_dom_query3=require("@zag-js/dom-query");var import_popper2=require("@zag-js/popper");var import_utils=require("@zag-js/utils");var{and,not}=import_core2.guards;function machine(userContext){const ctx=(0,import_utils.compact)(userContext);return(0,import_core2.createMachine)({id:"combobox",initial:ctx.open?"suggesting":"idle",context:{loopFocus:true,openOnClick:false,value:[],highlightedValue:null,inputValue:"",allowCustomValue:false,closeOnSelect:!ctx.multiple,inputBehavior:"none",selectionBehavior:"replace",openOnKeyPress:true,openOnChange:true,composite:true,...ctx,highlightedItem:null,selectedItems:[],valueAsString:"",collection:ctx.collection??collection.empty(),positioning:{placement:"bottom",flip:false,sameWidth:true,...ctx.positioning},translations:{triggerLabel:"Toggle suggestions",clearTriggerLabel:"Clear value",...ctx.translations}},created:["syncInitialValues","syncSelectionBehavior"],computed:{isInputValueEmpty:ctx2=>ctx2.inputValue.length===0,isInteractive:ctx2=>!(ctx2.readOnly||ctx2.disabled),autoComplete:ctx2=>ctx2.inputBehavior==="autocomplete",autoHighlight:ctx2=>ctx2.inputBehavior==="autohighlight",hasSelectedItems:ctx2=>ctx2.value.length>0},watch:{value:["syncSelectedItems"],inputValue:["syncInputValue"],highlightedValue:["syncHighlightedItem","autofillInputValue"],multiple:["syncSelectionBehavior"],open:["toggleVisibility"]},on:{"HIGHLIGHTED_VALUE.SET":{actions:["setHighlightedItem"]},"ITEM.SELECT":{actions:["selectItem"]},"ITEM.CLEAR":{actions:["clearItem"]},"VALUE.SET":{actions:["setSelectedItems"]},"INPUT_VALUE.SET":{actions:"setInputValue"},"COLLECTION.SET":{actions:["setCollection"]},"POSITIONING.SET":{actions:["reposition"]}},states:{idle:{tags:["idle","closed"],entry:["scrollContentToTop","clearHighlightedItem"],on:{"CONTROLLED.OPEN":{target:"interacting"},"TRIGGER.CLICK":[{guard:"isOpenControlled",actions:["setInitialFocus","highlightFirstSelectedItem","invokeOnOpen"]},{target:"interacting",actions:["setInitialFocus","highlightFirstSelectedItem","invokeOnOpen"]}],"INPUT.CLICK":[{guard:"isOpenControlled",actions:["highlightFirstSelectedItem","invokeOnOpen"]},{target:"interacting",actions:["highlightFirstSelectedItem","invokeOnOpen"]}],"INPUT.FOCUS":{target:"focused"},OPEN:[{guard:"isOpenControlled",actions:["invokeOnOpen"]},{target:"interacting",actions:["invokeOnOpen"]}],"VALUE.CLEAR":{target:"focused",actions:["clearInputValue","clearSelectedItems","setInitialFocus"]}}},focused:{tags:["focused","closed"],entry:["scrollContentToTop","clearHighlightedItem"],on:{"CONTROLLED.OPEN":[{guard:"isChangeEvent",target:"suggesting"},{target:"interacting"}],"INPUT.CHANGE":[{guard:and("isOpenControlled","openOnChange"),actions:["setInputValue","invokeOnOpen","highlightFirstItemIfNeeded"]},{guard:"openOnChange",target:"suggesting",actions:["setInputValue","invokeOnOpen","highlightFirstItemIfNeeded"]},{actions:"setInputValue"}],"LAYER.INTERACT_OUTSIDE":{target:"idle"},"INPUT.ESCAPE":{guard:and("isCustomValue",not("allowCustomValue")),actions:"revertInputValue"},"INPUT.BLUR":{target:"idle"},"INPUT.CLICK":[{guard:"isOpenControlled",actions:["highlightFirstSelectedItem","invokeOnOpen"]},{target:"interacting",actions:["highlightFirstSelectedItem","invokeOnOpen"]}],"TRIGGER.CLICK":[{guard:"isOpenControlled",actions:["setInitialFocus","highlightFirstSelectedItem","invokeOnOpen"]},{target:"interacting",actions:["setInitialFocus","highlightFirstSelectedItem","invokeOnOpen"]}],"INPUT.ARROW_DOWN":[{guard:and("isOpenControlled","autoComplete"),actions:["invokeOnOpen"]},{guard:"autoComplete",target:"interacting",actions:["invokeOnOpen"]},{guard:"isOpenControlled",actions:["highlightFirstOrSelectedItem","invokeOnOpen"]},{target:"interacting",actions:["highlightFirstOrSelectedItem","invokeOnOpen"]}],"INPUT.ARROW_UP":[{guard:"autoComplete",target:"interacting",actions:"invokeOnOpen"},{guard:"autoComplete",target:"interacting",actions:"invokeOnOpen"},{target:"interacting",actions:["highlightLastOrSelectedItem","invokeOnOpen"]},{target:"interacting",actions:["highlightLastOrSelectedItem","invokeOnOpen"]}],OPEN:[{guard:"isOpenControlled",actions:["invokeOnOpen"]},{target:"interacting",actions:["invokeOnOpen"]}],"VALUE.CLEAR":{actions:["clearInputValue","clearSelectedItems"]}}},interacting:{tags:["open","focused"],entry:["setInitialFocus"],activities:["scrollToHighlightedItem","trackDismissableLayer","computePlacement","hideOtherElements"],on:{"CONTROLLED.CLOSE":[{guard:"restoreFocus",target:"focused",actions:["setFinalFocus"]},{target:"idle"}],"INPUT.HOME":{actions:["highlightFirstItem"]},"INPUT.END":{actions:["highlightLastItem"]},"INPUT.ARROW_DOWN":[{guard:and("autoComplete","isLastItemHighlighted"),actions:["clearHighlightedItem","scrollContentToTop"]},{actions:["highlightNextItem"]}],"INPUT.ARROW_UP":[{guard:and("autoComplete","isFirstItemHighlighted"),actions:"clearHighlightedItem"},{actions:"highlightPrevItem"}],"INPUT.ENTER":[{guard:and("isOpenControlled","closeOnSelect"),actions:["selectHighlightedItem","invokeOnClose"]},{guard:"closeOnSelect",target:"focused",actions:["selectHighlightedItem","invokeOnClose","setFinalFocus"]},{actions:["selectHighlightedItem"]}],"INPUT.CHANGE":[{guard:"autoComplete",target:"suggesting",actions:["setInputValue","invokeOnOpen"]},{target:"suggesting",actions:["clearHighlightedItem","setInputValue","invokeOnOpen"]}],"ITEM.POINTER_MOVE":{actions:["setHighlightedItem"]},"ITEM.POINTER_LEAVE":{actions:["clearHighlightedItem"]},"ITEM.CLICK":[{guard:and("isOpenControlled","closeOnSelect"),actions:["selectItem","invokeOnClose"]},{guard:"closeOnSelect",target:"focused",actions:["selectItem","invokeOnClose","setFinalFocus"]},{actions:["selectItem"]}],"LAYER.ESCAPE":[{guard:and("isOpenControlled","autoComplete"),actions:["syncInputValue","invokeOnClose"]},{guard:"autoComplete",target:"focused",actions:["syncInputValue","invokeOnClose"]},{guard:"isOpenControlled",actions:"invokeOnClose"},{target:"focused",actions:["invokeOnClose","setFinalFocus"]}],"TRIGGER.CLICK":[{guard:"isOpenControlled",actions:"invokeOnClose"},{target:"focused",actions:"invokeOnClose"}],"LAYER.INTERACT_OUTSIDE":[{guard:and("isOpenControlled","isCustomValue",not("allowCustomValue")),actions:["revertInputValue","invokeOnClose"]},{guard:and("isCustomValue",not("allowCustomValue")),target:"idle",actions:["revertInputValue","invokeOnClose"]},{guard:"isOpenControlled",actions:"invokeOnClose"},{target:"idle",actions:"invokeOnClose"}],CLOSE:[{guard:"isOpenControlled",actions:["invokeOnClose"]},{target:"focused",actions:["invokeOnClose","setFinalFocus"]}],"VALUE.CLEAR":[{guard:"isOpenControlled",actions:["clearInputValue","clearSelectedItems","invokeOnClose"]},{target:"focused",actions:["clearInputValue","clearSelectedItems","invokeOnClose","setFinalFocus"]}]}},suggesting:{tags:["open","focused"],activities:["trackDismissableLayer","scrollToHighlightedItem","computePlacement","trackChildNodes","hideOtherElements"],entry:["setInitialFocus"],on:{"CONTROLLED.CLOSE":[{guard:"restoreFocus",target:"focused",actions:["setFinalFocus"]},{target:"idle"}],CHILDREN_CHANGE:{actions:["highlightFirstItem"]},"INPUT.ARROW_DOWN":{target:"interacting",actions:["highlightNextItem"]},"INPUT.ARROW_UP":{target:"interacting",actions:["highlightPrevItem"]},"INPUT.HOME":{target:"interacting",actions:["highlightFirstItem"]},"INPUT.END":{target:"interacting",actions:["highlightLastItem"]},"INPUT.ENTER":[{guard:and("isOpenControlled","closeOnSelect"),actions:["selectHighlightedItem","invokeOnClose"]},{guard:"closeOnSelect",target:"focused",actions:["selectHighlightedItem","invokeOnClose","setFinalFocus"]},{actions:["selectHighlightedItem"]}],"INPUT.CHANGE":[{guard:"autoHighlight",actions:["setInputValue"]},{actions:["setInputValue"]}],"LAYER.ESCAPE":[{guard:"isOpenControlled",actions:["invokeOnClose"]},{target:"focused",actions:["invokeOnClose"]}],"ITEM.POINTER_MOVE":{target:"interacting",actions:["setHighlightedItem"]},"ITEM.POINTER_LEAVE":{actions:["clearHighlightedItem"]},"LAYER.INTERACT_OUTSIDE":[{guard:and("isOpenControlled","isCustomValue",not("allowCustomValue")),actions:["revertInputValue","invokeOnClose"]},{guard:and("isCustomValue",not("allowCustomValue")),target:"idle",actions:["revertInputValue","invokeOnClose"]},{guard:"isOpenControlled",actions:["invokeOnClose"]},{target:"idle",actions:["invokeOnClose"]}],"TRIGGER.CLICK":[{guard:"isOpenControlled",actions:["invokeOnClose"]},{target:"focused",actions:["invokeOnClose"]}],"ITEM.CLICK":[{guard:and("isOpenControlled","closeOnSelect"),actions:["selectItem","invokeOnClose"]},{guard:"closeOnSelect",target:"focused",actions:["selectItem","invokeOnClose","setFinalFocus"]},{actions:["selectItem"]}],CLOSE:[{guard:"isOpenControlled",actions:["invokeOnClose"]},{target:"focused",actions:["invokeOnClose","setFinalFocus"]}],"VALUE.CLEAR":[{guard:"isOpenControlled",actions:["clearInputValue","clearSelectedItems","invokeOnClose"]},{target:"focused",actions:["clearInputValue","clearSelectedItems","invokeOnClose","setFinalFocus"]}]}}}},{guards:{isInputValueEmpty:ctx2=>ctx2.isInputValueEmpty,autoComplete:ctx2=>ctx2.autoComplete&&!ctx2.multiple,autoHighlight:ctx2=>ctx2.autoHighlight,isFirstItemHighlighted:ctx2=>ctx2.collection.first()===ctx2.highlightedValue,isLastItemHighlighted:ctx2=>ctx2.collection.last()===ctx2.highlightedValue,isCustomValue:ctx2=>ctx2.inputValue!==ctx2.valueAsString,allowCustomValue:ctx2=>!!ctx2.allowCustomValue,hasHighlightedItem:ctx2=>ctx2.highlightedValue!=null,closeOnSelect:ctx2=>!!ctx2.closeOnSelect,isOpenControlled:ctx2=>!!ctx2["open.controlled"],openOnChange:(ctx2,evt)=>{if((0,import_utils.isBoolean)(ctx2.openOnChange))return ctx2.openOnChange;return!!ctx2.openOnChange?.({inputValue:evt.value})},restoreFocus:(_ctx,evt)=>evt.restoreFocus==null?true:!!evt.restoreFocus,isChangeEvent:(_ctx,evt)=>evt.previousEvent?.type==="INPUT.CHANGE"},activities:{trackDismissableLayer(ctx2,_evt,{send}){if(ctx2.disableLayer)return;const contentEl=()=>dom.getContentEl(ctx2);return(0,import_dismissable.trackDismissableElement)(contentEl,{defer:true,exclude:()=>[dom.getInputEl(ctx2),dom.getTriggerEl(ctx2),dom.getClearTriggerEl(ctx2)],onFocusOutside:ctx2.onFocusOutside,onPointerDownOutside:ctx2.onPointerDownOutside,onInteractOutside:ctx2.onInteractOutside,onEscapeKeyDown(event){event.preventDefault();event.stopPropagation();send("LAYER.ESCAPE")},onDismiss(){send({type:"LAYER.INTERACT_OUTSIDE",restoreFocus:false})}})},hideOtherElements(ctx2){return(0,import_aria_hidden.ariaHidden)([dom.getInputEl(ctx2),dom.getContentEl(ctx2),dom.getTriggerEl(ctx2)])},computePlacement(ctx2){const controlEl=()=>dom.getControlEl(ctx2);const positionerEl=()=>dom.getPositionerEl(ctx2);ctx2.currentPlacement=ctx2.positioning.placement;return(0,import_popper2.getPlacement)(controlEl,positionerEl,{...ctx2.positioning,defer:true,onComplete(data){ctx2.currentPlacement=data.placement}})},trackChildNodes(ctx2,_evt,{send}){if(!ctx2.autoHighlight)return;const exec=()=>send("CHILDREN_CHANGE");const contentEl=()=>dom.getContentEl(ctx2);return(0,import_dom_query3.observeChildren)(contentEl,{callback:exec,defer:true})},scrollToHighlightedItem(ctx2,_evt,{getState}){const inputEl=dom.getInputEl(ctx2);let cleanups=[];const exec=immediate=>{const state=getState();const pointer=state.event.type.includes("POINTER");if(pointer||!ctx2.highlightedValue)return;const itemEl=dom.getHighlightedItemEl(ctx2);const contentEl=dom.getContentEl(ctx2);if(ctx2.scrollToIndexFn){const highlightedIndex=ctx2.collection.indexOf(ctx2.highlightedValue);ctx2.scrollToIndexFn({index:highlightedIndex,immediate});return}const rafCleanup2=(0,import_dom_query3.raf)(()=>{(0,import_dom_query3.scrollIntoView)(itemEl,{rootEl:contentEl,block:"nearest"})});cleanups.push(rafCleanup2)};const rafCleanup=(0,import_dom_query3.raf)(()=>exec(true));cleanups.push(rafCleanup);const observerCleanup=(0,import_dom_query3.observeAttributes)(inputEl,{attributes:["aria-activedescendant"],callback:()=>exec(false)});cleanups.push(observerCleanup);return()=>{cleanups.forEach(cleanup=>cleanup())}}},actions:{reposition(ctx2,evt){const controlEl=()=>dom.getControlEl(ctx2);const positionerEl=()=>dom.getPositionerEl(ctx2);(0,import_popper2.getPlacement)(controlEl,positionerEl,{...ctx2.positioning,...evt.options,defer:true,listeners:false,onComplete(data){ctx2.currentPlacement=data.placement}})},setHighlightedItem(ctx2,evt){if(evt.value==null)return;set.highlightedValue(ctx2,evt.value)},clearHighlightedItem(ctx2){set.highlightedValue(ctx2,null,true)},selectHighlightedItem(ctx2){set.value(ctx2,ctx2.highlightedValue)},selectItem(ctx2,evt){if(evt.value==null)return;set.value(ctx2,evt.value)},clearItem(ctx2,evt){if(evt.value==null)return;const value=ctx2.value.filter(v=>v!==evt.value);set.value(ctx2,value)},setInitialFocus(ctx2){(0,import_dom_query3.raf)(()=>{dom.focusInputEl(ctx2)})},setFinalFocus(ctx2){(0,import_dom_query3.raf)(()=>{const triggerEl=dom.getTriggerEl(ctx2);if(triggerEl?.dataset.focusable==null){dom.focusInputEl(ctx2)}else{dom.focusTriggerEl(ctx2)}})},syncInputValue(ctx2){const inputEl=dom.getInputEl(ctx2);if(!inputEl)return;inputEl.value=ctx2.inputValue;queueMicrotask(()=>{const{selectionStart,selectionEnd}=inputEl;if(Math.abs((selectionEnd??0)-(selectionStart??0))!==0)return;if(selectionStart!==0)return;inputEl.setSelectionRange(inputEl.value.length,inputEl.value.length)})},setInputValue(ctx2,evt){set.inputValue(ctx2,evt.value)},clearInputValue(ctx2){set.inputValue(ctx2,"")},revertInputValue(ctx2){const inputValue=(0,import_utils.match)(ctx2.selectionBehavior,{replace:ctx2.hasSelectedItems?ctx2.valueAsString:"",preserve:ctx2.inputValue,clear:""});set.inputValue(ctx2,inputValue)},syncInitialValues(ctx2){const selectedItems=ctx2.collection.items(ctx2.value);const valueAsString=ctx2.collection.itemsToString(selectedItems);ctx2.highlightedItem=ctx2.collection.item(ctx2.highlightedValue);ctx2.selectedItems=selectedItems;ctx2.valueAsString=valueAsString;ctx2.inputValue=(0,import_utils.match)(ctx2.selectionBehavior,{preserve:ctx2.inputValue||valueAsString,replace:valueAsString,clear:""})},syncSelectionBehavior(ctx2){if(ctx2.multiple){ctx2.selectionBehavior="clear"}},setSelectedItems(ctx2,evt){if(!(0,import_utils.isArray)(evt.value))return;set.value(ctx2,evt.value)},clearSelectedItems(ctx2){set.value(ctx2,[])},scrollContentToTop(ctx2){if(ctx2.scrollToIndexFn){ctx2.scrollToIndexFn({index:0,immediate:true})}else{const contentEl=dom.getContentEl(ctx2);if(!contentEl)return;contentEl.scrollTop=0}},invokeOnOpen(ctx2){ctx2.onOpenChange?.({open:true})},invokeOnClose(ctx2){ctx2.onOpenChange?.({open:false})},highlightFirstItem(ctx2){(0,import_dom_query3.raf)(()=>{const value=ctx2.collection.first();set.highlightedValue(ctx2,value)})},highlightFirstItemIfNeeded(ctx2){if(!ctx2.autoHighlight)return;(0,import_dom_query3.raf)(()=>{const value=ctx2.collection.first();set.highlightedValue(ctx2,value)})},highlightLastItem(ctx2){(0,import_dom_query3.raf)(()=>{const value=ctx2.collection.last();set.highlightedValue(ctx2,value)})},highlightNextItem(ctx2){let value=null;if(ctx2.highlightedValue){value=ctx2.collection.next(ctx2.highlightedValue);if(!value&&ctx2.loopFocus)value=ctx2.collection.first()}else{value=ctx2.collection.first()}set.highlightedValue(ctx2,value)},highlightPrevItem(ctx2){let value=null;if(ctx2.highlightedValue){value=ctx2.collection.prev(ctx2.highlightedValue);if(!value&&ctx2.loopFocus)value=ctx2.collection.last()}else{value=ctx2.collection.last()}set.highlightedValue(ctx2,value)},highlightFirstSelectedItem(ctx2){(0,import_dom_query3.raf)(()=>{const[value]=ctx2.collection.sort(ctx2.value);set.highlightedValue(ctx2,value)})},highlightFirstOrSelectedItem(ctx2){(0,import_dom_query3.raf)(()=>{let value=null;if(ctx2.hasSelectedItems){value=ctx2.collection.sort(ctx2.value)[0]}else{value=ctx2.collection.first()}set.highlightedValue(ctx2,value)})},highlightLastOrSelectedItem(ctx2){(0,import_dom_query3.raf)(()=>{let value=null;if(ctx2.hasSelectedItems){value=ctx2.collection.sort(ctx2.value)[0]}else{value=ctx2.collection.last()}set.highlightedValue(ctx2,value)})},autofillInputValue(ctx2,evt){const inputEl=dom.getInputEl(ctx2);if(!ctx2.autoComplete||!inputEl||!evt.keypress)return;const valueText=ctx2.collection.valueToString(ctx2.highlightedValue);(0,import_dom_query3.raf)(()=>{inputEl.value=valueText||ctx2.inputValue})},setCollection(ctx2,evt){ctx2.collection=evt.value},syncSelectedItems(ctx2){sync.valueChange(ctx2)},syncHighlightedItem(ctx2){sync.highlightChange(ctx2)},toggleVisibility(ctx2,evt,{send}){send({type:ctx2.open?"CONTROLLED.OPEN":"CONTROLLED.CLOSE",previousEvent:evt})}}})}var sync={valueChange:ctx=>{const prevSelectedItems=ctx.selectedItems;ctx.selectedItems=ctx.value.map(v=>{const foundItem=prevSelectedItems.find(item=>ctx.collection.itemToValue(item)===v);if(foundItem)return foundItem;return ctx.collection.item(v)});const valueAsString=ctx.collection.itemsToString(ctx.selectedItems);ctx.valueAsString=valueAsString;let inputValue;if(ctx.getSelectionValue){inputValue=ctx.getSelectionValue({inputValue:ctx.inputValue,selectedItems:Array.from(ctx.selectedItems),valueAsString})}else{inputValue=(0,import_utils.match)(ctx.selectionBehavior,{replace:ctx.valueAsString,preserve:ctx.inputValue,clear:""})}set.inputValue(ctx,inputValue)},highlightChange:ctx=>{ctx.highlightedItem=ctx.collection.item(ctx.highlightedValue)}};var invoke={valueChange:ctx=>{sync.valueChange(ctx);ctx.onValueChange?.({value:Array.from(ctx.value),items:Array.from(ctx.selectedItems)})},highlightChange:ctx=>{sync.highlightChange(ctx);ctx.onHighlightChange?.({highlightedValue:ctx.highlightedValue,highlightedItem:ctx.highlightedItem})},inputChange:ctx=>{ctx.onInputValueChange?.({inputValue:ctx.inputValue})}};var set={value:(ctx,value,force=false)=>{if((0,import_utils.isEqual)(ctx.value,value))return;if(value==null&&!force)return;if(value==null&&force){ctx.value=[];invoke.valueChange(ctx);return}if((0,import_utils.isArray)(value)){ctx.value=value}else if(value!=null){ctx.value=ctx.multiple?(0,import_utils.addOrRemove)(ctx.value,value):[value]}invoke.valueChange(ctx)},highlightedValue:(ctx,value,force=false)=>{if((0,import_utils.isEqual)(ctx.highlightedValue,value))return;if(!value&&!force)return;ctx.highlightedValue=value||null;invoke.highlightChange(ctx)},inputValue:(ctx,value)=>{if((0,import_utils.isEqual)(ctx.inputValue,value))return;ctx.inputValue=value;invoke.inputChange(ctx)}};0&&(module.exports={anatomy,collection,connect,machine});
|
|
1
|
+
"use strict";var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __hasOwnProp=Object.prototype.hasOwnProperty;var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:true})};var __copyProps=(to,from,except,desc)=>{if(from&&typeof from==="object"||typeof from==="function"){for(let key of __getOwnPropNames(from))if(!__hasOwnProp.call(to,key)&&key!==except)__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable})}return to};var __toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:true}),mod);var src_exports={};__export(src_exports,{anatomy:()=>anatomy,collection:()=>collection,connect:()=>connect,machine:()=>machine});module.exports=__toCommonJS(src_exports);var import_anatomy=require("@zag-js/anatomy");var anatomy=(0,import_anatomy.createAnatomy)("combobox").parts("root","label","input","positioner","control","trigger","content","clearTrigger","item","itemText","itemIndicator","itemGroup","itemGroupLabel");var parts=anatomy.build();var import_collection=require("@zag-js/collection");var import_core=require("@zag-js/core");var collection=options=>{return(0,import_core.ref)(new import_collection.Collection(options))};collection.empty=()=>{return(0,import_core.ref)(new import_collection.Collection({items:[]}))};var import_dom_event=require("@zag-js/dom-event");var import_dom_query2=require("@zag-js/dom-query");var import_popper=require("@zag-js/popper");var import_dom_query=require("@zag-js/dom-query");var dom=(0,import_dom_query.createScope)({getRootId:ctx=>ctx.ids?.root??`combobox:${ctx.id}`,getLabelId:ctx=>ctx.ids?.label??`combobox:${ctx.id}:label`,getControlId:ctx=>ctx.ids?.control??`combobox:${ctx.id}:control`,getInputId:ctx=>ctx.ids?.input??`combobox:${ctx.id}:input`,getContentId:ctx=>ctx.ids?.content??`combobox:${ctx.id}:content`,getPositionerId:ctx=>ctx.ids?.positioner??`combobox:${ctx.id}:popper`,getTriggerId:ctx=>ctx.ids?.trigger??`combobox:${ctx.id}:toggle-btn`,getClearTriggerId:ctx=>ctx.ids?.clearTrigger??`combobox:${ctx.id}:clear-btn`,getItemGroupId:(ctx,id)=>ctx.ids?.itemGroup?.(id)??`combobox:${ctx.id}:optgroup:${id}`,getItemGroupLabelId:(ctx,id)=>ctx.ids?.itemGroupLabel?.(id)??`combobox:${ctx.id}:optgroup-label:${id}`,getItemId:(ctx,id)=>`combobox:${ctx.id}:option:${id}`,getContentEl:ctx=>dom.getById(ctx,dom.getContentId(ctx)),getInputEl:ctx=>dom.getById(ctx,dom.getInputId(ctx)),getPositionerEl:ctx=>dom.getById(ctx,dom.getPositionerId(ctx)),getControlEl:ctx=>dom.getById(ctx,dom.getControlId(ctx)),getTriggerEl:ctx=>dom.getById(ctx,dom.getTriggerId(ctx)),getClearTriggerEl:ctx=>dom.getById(ctx,dom.getClearTriggerId(ctx)),getHighlightedItemEl:ctx=>{const value=ctx.highlightedValue;if(value==null)return;return(0,import_dom_query.query)(dom.getContentEl(ctx),`[role=option][data-value="${CSS.escape(value)}"`)},focusInputEl:ctx=>{const inputEl=dom.getInputEl(ctx);if(dom.getActiveElement(ctx)===inputEl)return;inputEl?.focus({preventScroll:true})},focusTriggerEl:ctx=>{const triggerEl=dom.getTriggerEl(ctx);if(dom.getActiveElement(ctx)===triggerEl)return;triggerEl?.focus({preventScroll:true})}});function connect(state,send,normalize){const translations=state.context.translations;const collection2=state.context.collection;const disabled=state.context.disabled;const interactive=state.context.isInteractive;const invalid=state.context.invalid;const readOnly=state.context.readOnly;const open=state.hasTag("open");const focused=state.hasTag("focused");const composite=state.context.composite;const highlightedValue=state.context.highlightedValue;const popperStyles=(0,import_popper.getPlacementStyles)({...state.context.positioning,placement:state.context.currentPlacement});function getItemState(props){const{item}=props;const disabled2=collection2.isItemDisabled(item);const value=collection2.itemToValue(item);return{value,disabled:Boolean(disabled2||disabled2),highlighted:highlightedValue===value,selected:state.context.value.includes(value)}}return{focused,open,inputValue:state.context.inputValue,highlightedValue,highlightedItem:state.context.highlightedItem,value:state.context.value,valueAsString:state.context.valueAsString,hasSelectedItems:state.context.hasSelectedItems,selectedItems:state.context.selectedItems,collection:state.context.collection,reposition(options={}){send({type:"POSITIONING.SET",options})},setCollection(collection3){send({type:"COLLECTION.SET",value:collection3})},setHighlightValue(value){send({type:"HIGHLIGHTED_VALUE.SET",value})},selectValue(value){send({type:"ITEM.SELECT",value})},setValue(value){send({type:"VALUE.SET",value})},setInputValue(value){send({type:"INPUT_VALUE.SET",value})},clearValue(value){if(value!=null){send({type:"ITEM.CLEAR",value})}else{send("VALUE.CLEAR")}},focus(){dom.getInputEl(state.context)?.focus()},setOpen(nextOpen){if(nextOpen===open)return;send(nextOpen?"OPEN":"CLOSE")},rootProps:normalize.element({...parts.root.attrs,dir:state.context.dir,id:dom.getRootId(state.context),"data-invalid":(0,import_dom_query2.dataAttr)(invalid),"data-readonly":(0,import_dom_query2.dataAttr)(readOnly)}),labelProps:normalize.label({...parts.label.attrs,dir:state.context.dir,htmlFor:dom.getInputId(state.context),id:dom.getLabelId(state.context),"data-readonly":(0,import_dom_query2.dataAttr)(readOnly),"data-disabled":(0,import_dom_query2.dataAttr)(disabled),"data-invalid":(0,import_dom_query2.dataAttr)(invalid),"data-focus":(0,import_dom_query2.dataAttr)(focused),onClick(event){if(composite)return;event.preventDefault();dom.getTriggerEl(state.context)?.focus({preventScroll:true})}}),controlProps:normalize.element({...parts.control.attrs,dir:state.context.dir,id:dom.getControlId(state.context),"data-state":open?"open":"closed","data-focus":(0,import_dom_query2.dataAttr)(focused),"data-disabled":(0,import_dom_query2.dataAttr)(disabled),"data-invalid":(0,import_dom_query2.dataAttr)(invalid)}),positionerProps:normalize.element({...parts.positioner.attrs,dir:state.context.dir,id:dom.getPositionerId(state.context),style:popperStyles.floating}),inputProps:normalize.input({...parts.input.attrs,dir:state.context.dir,"aria-invalid":(0,import_dom_query2.ariaAttr)(invalid),"data-invalid":(0,import_dom_query2.dataAttr)(invalid),name:state.context.name,form:state.context.form,disabled,autoFocus:state.context.autoFocus,autoComplete:"off",autoCorrect:"off",autoCapitalize:"none",spellCheck:"false",readOnly,placeholder:state.context.placeholder,id:dom.getInputId(state.context),type:"text",role:"combobox",defaultValue:state.context.inputValue,"aria-autocomplete":state.context.autoComplete?"both":"list","aria-controls":dom.getContentId(state.context),"aria-expanded":open,"data-state":open?"open":"closed","aria-activedescendant":highlightedValue?dom.getItemId(state.context,highlightedValue):void 0,onClick(event){if(event.defaultPrevented)return;if(!state.context.openOnClick)return;if(!interactive)return;send("INPUT.CLICK")},onFocus(){if(disabled)return;send("INPUT.FOCUS")},onBlur(){if(disabled)return;send("INPUT.BLUR")},onChange(event){send({type:"INPUT.CHANGE",value:event.currentTarget.value})},onKeyDown(event){if(event.defaultPrevented)return;if(!interactive)return;if(event.ctrlKey||event.shiftKey||(0,import_dom_query2.isComposingEvent)(event))return;const openOnKeyPress=state.context.openOnKeyPress;const isModifierKey=event.ctrlKey||event.metaKey||event.shiftKey;const keypress=true;const keymap={ArrowDown(event2){if(!openOnKeyPress&&!open)return;send({type:event2.altKey?"OPEN":"INPUT.ARROW_DOWN",keypress});event2.preventDefault()},ArrowUp(){if(!openOnKeyPress&&!open)return;send({type:event.altKey?"CLOSE":"INPUT.ARROW_UP",keypress});event.preventDefault()},Home(event2){if(isModifierKey)return;send({type:"INPUT.HOME",keypress});if(open){event2.preventDefault()}},End(event2){if(isModifierKey)return;send({type:"INPUT.END",keypress});if(open){event2.preventDefault()}},Enter(event2){send({type:"INPUT.ENTER",keypress});if(open){event2.preventDefault()}const itemEl=dom.getHighlightedItemEl(state.context);(0,import_dom_event.clickIfLink)(itemEl)},Escape(){send({type:"INPUT.ESCAPE",keypress});event.preventDefault()}};const key=(0,import_dom_event.getEventKey)(event,state.context);const exec=keymap[key];exec?.(event)}}),getTriggerProps(props={}){return normalize.button({...parts.trigger.attrs,dir:state.context.dir,id:dom.getTriggerId(state.context),"aria-haspopup":composite?"listbox":"dialog",type:"button",tabIndex:props.focusable?void 0:-1,"aria-label":translations.triggerLabel,"aria-expanded":open,"data-state":open?"open":"closed","aria-controls":open?dom.getContentId(state.context):void 0,disabled,"data-focusable":(0,import_dom_query2.dataAttr)(props.focusable),"data-readonly":(0,import_dom_query2.dataAttr)(readOnly),"data-disabled":(0,import_dom_query2.dataAttr)(disabled),onFocus(){if(!props.focusable)return;send({type:"INPUT.FOCUS",src:"trigger"})},onClick(event){if(event.defaultPrevented)return;if(!interactive)return;if(!(0,import_dom_event.isLeftClick)(event))return;send("TRIGGER.CLICK")},onPointerDown(event){if(!interactive)return;if(event.pointerType==="touch")return;event.preventDefault();queueMicrotask(()=>{dom.getInputEl(state.context)?.focus({preventScroll:true})})},onKeyDown(event){if(event.defaultPrevented)return;if(composite)return;const keyMap={ArrowDown(){send({type:"INPUT.ARROW_DOWN",src:"trigger"})},ArrowUp(){send({type:"INPUT.ARROW_UP",src:"trigger"})}};const key=(0,import_dom_event.getEventKey)(event,state.context);const exec=keyMap[key];if(exec){exec(event);event.preventDefault()}}})},contentProps:normalize.element({...parts.content.attrs,dir:state.context.dir,id:dom.getContentId(state.context),role:!composite?"dialog":"listbox",tabIndex:-1,hidden:!open,"data-state":open?"open":"closed","aria-labelledby":dom.getLabelId(state.context),"aria-multiselectable":state.context.multiple&&composite?true:void 0,onPointerDown(event){event.preventDefault()}}),listProps:normalize.element({role:!composite?"listbox":void 0,"aria-labelledby":dom.getLabelId(state.context),"aria-multiselectable":state.context.multiple&&!composite?true:void 0}),clearTriggerProps:normalize.button({...parts.clearTrigger.attrs,dir:state.context.dir,id:dom.getClearTriggerId(state.context),type:"button",tabIndex:-1,disabled,"aria-label":translations.clearTriggerLabel,"aria-controls":dom.getInputId(state.context),hidden:!state.context.value.length,onPointerDown(event){event.preventDefault()},onClick(event){if(event.defaultPrevented)return;if(!interactive)return;send({type:"VALUE.CLEAR",src:"clear-trigger"})}}),getItemState,getItemProps(props){const itemState=getItemState(props);const value=itemState.value;return normalize.element({...parts.item.attrs,dir:state.context.dir,id:dom.getItemId(state.context,value),role:"option",tabIndex:-1,"data-highlighted":(0,import_dom_query2.dataAttr)(itemState.highlighted),"data-state":itemState.selected?"checked":"unchecked","aria-selected":itemState.highlighted,"aria-disabled":itemState.disabled,"data-disabled":(0,import_dom_query2.dataAttr)(itemState.disabled),"data-value":itemState.value,onPointerMove(){if(itemState.disabled)return;if(itemState.highlighted)return;send({type:"ITEM.POINTER_MOVE",value})},onPointerLeave(){if(props.persistFocus)return;if(itemState.disabled)return;const mouseMoved=state.previousEvent.type.includes("POINTER");if(!mouseMoved)return;send({type:"ITEM.POINTER_LEAVE",value})},onPointerUp(event){if((0,import_dom_query2.isDownloadingEvent)(event))return;if((0,import_dom_query2.isOpeningInNewTab)(event))return;if((0,import_dom_event.isContextMenuEvent)(event))return;if(itemState.disabled)return;send({type:"ITEM.CLICK",src:"pointerup",value})},onTouchEnd(event){event.preventDefault();event.stopPropagation()}})},getItemTextProps(props){const itemState=getItemState(props);return normalize.element({...parts.itemText.attrs,dir:state.context.dir,"data-disabled":(0,import_dom_query2.dataAttr)(itemState.disabled),"data-highlighted":(0,import_dom_query2.dataAttr)(itemState.highlighted)})},getItemIndicatorProps(props){const itemState=getItemState(props);return normalize.element({"aria-hidden":true,...parts.itemIndicator.attrs,dir:state.context.dir,"data-state":itemState.selected?"checked":"unchecked",hidden:!itemState.selected})},getItemGroupProps(props){const{id}=props;return normalize.element({...parts.itemGroup.attrs,dir:state.context.dir,id:dom.getItemGroupId(state.context,id),"aria-labelledby":dom.getItemGroupLabelId(state.context,id)})},getItemGroupLabelProps(props){const{htmlFor}=props;return normalize.element({...parts.itemGroupLabel.attrs,dir:state.context.dir,id:dom.getItemGroupLabelId(state.context,htmlFor),role:"group"})}}}var import_aria_hidden=require("@zag-js/aria-hidden");var import_core2=require("@zag-js/core");var import_dismissable=require("@zag-js/dismissable");var import_dom_query3=require("@zag-js/dom-query");var import_popper2=require("@zag-js/popper");var import_utils=require("@zag-js/utils");var{and,not}=import_core2.guards;function machine(userContext){const ctx=(0,import_utils.compact)(userContext);return(0,import_core2.createMachine)({id:"combobox",initial:ctx.open?"suggesting":"idle",context:{loopFocus:true,openOnClick:false,value:[],highlightedValue:null,inputValue:"",allowCustomValue:false,closeOnSelect:!ctx.multiple,inputBehavior:"none",selectionBehavior:"replace",openOnKeyPress:true,openOnChange:true,composite:true,...ctx,highlightedItem:null,selectedItems:[],valueAsString:"",collection:ctx.collection??collection.empty(),positioning:{placement:"bottom",flip:false,sameWidth:true,...ctx.positioning},translations:{triggerLabel:"Toggle suggestions",clearTriggerLabel:"Clear value",...ctx.translations}},created:["syncInitialValues","syncSelectionBehavior"],computed:{isInputValueEmpty:ctx2=>ctx2.inputValue.length===0,isInteractive:ctx2=>!(ctx2.readOnly||ctx2.disabled),autoComplete:ctx2=>ctx2.inputBehavior==="autocomplete",autoHighlight:ctx2=>ctx2.inputBehavior==="autohighlight",hasSelectedItems:ctx2=>ctx2.value.length>0},watch:{value:["syncSelectedItems"],inputValue:["syncInputValue"],highlightedValue:["syncHighlightedItem","autofillInputValue"],multiple:["syncSelectionBehavior"],open:["toggleVisibility"]},on:{"HIGHLIGHTED_VALUE.SET":{actions:["setHighlightedItem"]},"ITEM.SELECT":{actions:["selectItem"]},"ITEM.CLEAR":{actions:["clearItem"]},"VALUE.SET":{actions:["setSelectedItems"]},"INPUT_VALUE.SET":{actions:"setInputValue"},"COLLECTION.SET":{actions:["setCollection"]},"POSITIONING.SET":{actions:["reposition"]}},states:{idle:{tags:["idle","closed"],entry:["scrollContentToTop","clearHighlightedItem"],on:{"CONTROLLED.OPEN":{target:"interacting"},"TRIGGER.CLICK":[{guard:"isOpenControlled",actions:["setInitialFocus","highlightFirstSelectedItem","invokeOnOpen"]},{target:"interacting",actions:["setInitialFocus","highlightFirstSelectedItem","invokeOnOpen"]}],"INPUT.CLICK":[{guard:"isOpenControlled",actions:["highlightFirstSelectedItem","invokeOnOpen"]},{target:"interacting",actions:["highlightFirstSelectedItem","invokeOnOpen"]}],"INPUT.FOCUS":{target:"focused"},OPEN:[{guard:"isOpenControlled",actions:["invokeOnOpen"]},{target:"interacting",actions:["invokeOnOpen"]}],"VALUE.CLEAR":{target:"focused",actions:["clearInputValue","clearSelectedItems","setInitialFocus"]}}},focused:{tags:["focused","closed"],entry:["scrollContentToTop","clearHighlightedItem"],on:{"CONTROLLED.OPEN":[{guard:"isChangeEvent",target:"suggesting"},{target:"interacting"}],"INPUT.CHANGE":[{guard:and("isOpenControlled","openOnChange"),actions:["setInputValue","invokeOnOpen","highlightFirstItemIfNeeded"]},{guard:"openOnChange",target:"suggesting",actions:["setInputValue","invokeOnOpen","highlightFirstItemIfNeeded"]},{actions:"setInputValue"}],"LAYER.INTERACT_OUTSIDE":{target:"idle"},"INPUT.ESCAPE":{guard:and("isCustomValue",not("allowCustomValue")),actions:"revertInputValue"},"INPUT.BLUR":{target:"idle"},"INPUT.CLICK":[{guard:"isOpenControlled",actions:["highlightFirstSelectedItem","invokeOnOpen"]},{target:"interacting",actions:["highlightFirstSelectedItem","invokeOnOpen"]}],"TRIGGER.CLICK":[{guard:"isOpenControlled",actions:["setInitialFocus","highlightFirstSelectedItem","invokeOnOpen"]},{target:"interacting",actions:["setInitialFocus","highlightFirstSelectedItem","invokeOnOpen"]}],"INPUT.ARROW_DOWN":[{guard:and("isOpenControlled","autoComplete"),actions:["invokeOnOpen"]},{guard:"autoComplete",target:"interacting",actions:["invokeOnOpen"]},{guard:"isOpenControlled",actions:["highlightFirstOrSelectedItem","invokeOnOpen"]},{target:"interacting",actions:["highlightFirstOrSelectedItem","invokeOnOpen"]}],"INPUT.ARROW_UP":[{guard:"autoComplete",target:"interacting",actions:"invokeOnOpen"},{guard:"autoComplete",target:"interacting",actions:"invokeOnOpen"},{target:"interacting",actions:["highlightLastOrSelectedItem","invokeOnOpen"]},{target:"interacting",actions:["highlightLastOrSelectedItem","invokeOnOpen"]}],OPEN:[{guard:"isOpenControlled",actions:["invokeOnOpen"]},{target:"interacting",actions:["invokeOnOpen"]}],"VALUE.CLEAR":{actions:["clearInputValue","clearSelectedItems"]}}},interacting:{tags:["open","focused"],entry:["setInitialFocus"],activities:["scrollToHighlightedItem","trackDismissableLayer","computePlacement","hideOtherElements"],on:{"CONTROLLED.CLOSE":[{guard:"restoreFocus",target:"focused",actions:["setFinalFocus"]},{target:"idle"}],"INPUT.HOME":{actions:["highlightFirstItem"]},"INPUT.END":{actions:["highlightLastItem"]},"INPUT.ARROW_DOWN":[{guard:and("autoComplete","isLastItemHighlighted"),actions:["clearHighlightedItem","scrollContentToTop"]},{actions:["highlightNextItem"]}],"INPUT.ARROW_UP":[{guard:and("autoComplete","isFirstItemHighlighted"),actions:"clearHighlightedItem"},{actions:"highlightPrevItem"}],"INPUT.ENTER":[{guard:and("isOpenControlled","closeOnSelect"),actions:["selectHighlightedItem","invokeOnClose"]},{guard:"closeOnSelect",target:"focused",actions:["selectHighlightedItem","invokeOnClose","setFinalFocus"]},{actions:["selectHighlightedItem"]}],"INPUT.CHANGE":[{guard:"autoComplete",target:"suggesting",actions:["setInputValue","invokeOnOpen"]},{target:"suggesting",actions:["clearHighlightedItem","setInputValue","invokeOnOpen"]}],"ITEM.POINTER_MOVE":{actions:["setHighlightedItem"]},"ITEM.POINTER_LEAVE":{actions:["clearHighlightedItem"]},"ITEM.CLICK":[{guard:and("isOpenControlled","closeOnSelect"),actions:["selectItem","invokeOnClose"]},{guard:"closeOnSelect",target:"focused",actions:["selectItem","invokeOnClose","setFinalFocus"]},{actions:["selectItem"]}],"LAYER.ESCAPE":[{guard:and("isOpenControlled","autoComplete"),actions:["syncInputValue","invokeOnClose"]},{guard:"autoComplete",target:"focused",actions:["syncInputValue","invokeOnClose"]},{guard:"isOpenControlled",actions:"invokeOnClose"},{target:"focused",actions:["invokeOnClose","setFinalFocus"]}],"TRIGGER.CLICK":[{guard:"isOpenControlled",actions:"invokeOnClose"},{target:"focused",actions:"invokeOnClose"}],"LAYER.INTERACT_OUTSIDE":[{guard:and("isOpenControlled","isCustomValue",not("allowCustomValue")),actions:["revertInputValue","invokeOnClose"]},{guard:and("isCustomValue",not("allowCustomValue")),target:"idle",actions:["revertInputValue","invokeOnClose"]},{guard:"isOpenControlled",actions:"invokeOnClose"},{target:"idle",actions:"invokeOnClose"}],CLOSE:[{guard:"isOpenControlled",actions:["invokeOnClose"]},{target:"focused",actions:["invokeOnClose","setFinalFocus"]}],"VALUE.CLEAR":[{guard:"isOpenControlled",actions:["clearInputValue","clearSelectedItems","invokeOnClose"]},{target:"focused",actions:["clearInputValue","clearSelectedItems","invokeOnClose","setFinalFocus"]}]}},suggesting:{tags:["open","focused"],activities:["trackDismissableLayer","scrollToHighlightedItem","computePlacement","trackChildNodes","hideOtherElements"],entry:["setInitialFocus"],on:{"CONTROLLED.CLOSE":[{guard:"restoreFocus",target:"focused",actions:["setFinalFocus"]},{target:"idle"}],CHILDREN_CHANGE:{actions:["highlightFirstItem"]},"INPUT.ARROW_DOWN":{target:"interacting",actions:["highlightNextItem"]},"INPUT.ARROW_UP":{target:"interacting",actions:["highlightPrevItem"]},"INPUT.HOME":{target:"interacting",actions:["highlightFirstItem"]},"INPUT.END":{target:"interacting",actions:["highlightLastItem"]},"INPUT.ENTER":[{guard:and("isOpenControlled","closeOnSelect"),actions:["selectHighlightedItem","invokeOnClose"]},{guard:"closeOnSelect",target:"focused",actions:["selectHighlightedItem","invokeOnClose","setFinalFocus"]},{actions:["selectHighlightedItem"]}],"INPUT.CHANGE":[{guard:"autoHighlight",actions:["setInputValue"]},{actions:["setInputValue"]}],"LAYER.ESCAPE":[{guard:"isOpenControlled",actions:["invokeOnClose"]},{target:"focused",actions:["invokeOnClose"]}],"ITEM.POINTER_MOVE":{target:"interacting",actions:["setHighlightedItem"]},"ITEM.POINTER_LEAVE":{actions:["clearHighlightedItem"]},"LAYER.INTERACT_OUTSIDE":[{guard:and("isOpenControlled","isCustomValue",not("allowCustomValue")),actions:["revertInputValue","invokeOnClose"]},{guard:and("isCustomValue",not("allowCustomValue")),target:"idle",actions:["revertInputValue","invokeOnClose"]},{guard:"isOpenControlled",actions:["invokeOnClose"]},{target:"idle",actions:["invokeOnClose"]}],"TRIGGER.CLICK":[{guard:"isOpenControlled",actions:["invokeOnClose"]},{target:"focused",actions:["invokeOnClose"]}],"ITEM.CLICK":[{guard:and("isOpenControlled","closeOnSelect"),actions:["selectItem","invokeOnClose"]},{guard:"closeOnSelect",target:"focused",actions:["selectItem","invokeOnClose","setFinalFocus"]},{actions:["selectItem"]}],CLOSE:[{guard:"isOpenControlled",actions:["invokeOnClose"]},{target:"focused",actions:["invokeOnClose","setFinalFocus"]}],"VALUE.CLEAR":[{guard:"isOpenControlled",actions:["clearInputValue","clearSelectedItems","invokeOnClose"]},{target:"focused",actions:["clearInputValue","clearSelectedItems","invokeOnClose","setFinalFocus"]}]}}}},{guards:{isInputValueEmpty:ctx2=>ctx2.isInputValueEmpty,autoComplete:ctx2=>ctx2.autoComplete&&!ctx2.multiple,autoHighlight:ctx2=>ctx2.autoHighlight,isFirstItemHighlighted:ctx2=>ctx2.collection.first()===ctx2.highlightedValue,isLastItemHighlighted:ctx2=>ctx2.collection.last()===ctx2.highlightedValue,isCustomValue:ctx2=>ctx2.inputValue!==ctx2.valueAsString,allowCustomValue:ctx2=>!!ctx2.allowCustomValue,hasHighlightedItem:ctx2=>ctx2.highlightedValue!=null,closeOnSelect:ctx2=>!!ctx2.closeOnSelect,isOpenControlled:ctx2=>!!ctx2["open.controlled"],openOnChange:(ctx2,evt)=>{if((0,import_utils.isBoolean)(ctx2.openOnChange))return ctx2.openOnChange;return!!ctx2.openOnChange?.({inputValue:evt.value})},restoreFocus:(_ctx,evt)=>evt.restoreFocus==null?true:!!evt.restoreFocus,isChangeEvent:(_ctx,evt)=>evt.previousEvent?.type==="INPUT.CHANGE"},activities:{trackDismissableLayer(ctx2,_evt,{send}){if(ctx2.disableLayer)return;const contentEl=()=>dom.getContentEl(ctx2);return(0,import_dismissable.trackDismissableElement)(contentEl,{defer:true,exclude:()=>[dom.getInputEl(ctx2),dom.getTriggerEl(ctx2),dom.getClearTriggerEl(ctx2)],onFocusOutside:ctx2.onFocusOutside,onPointerDownOutside:ctx2.onPointerDownOutside,onInteractOutside:ctx2.onInteractOutside,onEscapeKeyDown(event){event.preventDefault();event.stopPropagation();send("LAYER.ESCAPE")},onDismiss(){send({type:"LAYER.INTERACT_OUTSIDE",restoreFocus:false})}})},hideOtherElements(ctx2){return(0,import_aria_hidden.ariaHidden)([dom.getInputEl(ctx2),dom.getContentEl(ctx2),dom.getTriggerEl(ctx2)])},computePlacement(ctx2){const controlEl=()=>dom.getControlEl(ctx2);const positionerEl=()=>dom.getPositionerEl(ctx2);ctx2.currentPlacement=ctx2.positioning.placement;return(0,import_popper2.getPlacement)(controlEl,positionerEl,{...ctx2.positioning,defer:true,onComplete(data){ctx2.currentPlacement=data.placement}})},trackChildNodes(ctx2,_evt,{send}){if(!ctx2.autoHighlight)return;const exec=()=>send("CHILDREN_CHANGE");const contentEl=()=>dom.getContentEl(ctx2);return(0,import_dom_query3.observeChildren)(contentEl,{callback:exec,defer:true})},scrollToHighlightedItem(ctx2,_evt,{getState}){const inputEl=dom.getInputEl(ctx2);let cleanups=[];const exec=immediate=>{const state=getState();const pointer=state.event.type.includes("POINTER");if(pointer||!ctx2.highlightedValue)return;const itemEl=dom.getHighlightedItemEl(ctx2);const contentEl=dom.getContentEl(ctx2);if(ctx2.scrollToIndexFn){const highlightedIndex=ctx2.collection.indexOf(ctx2.highlightedValue);ctx2.scrollToIndexFn({index:highlightedIndex,immediate});return}const rafCleanup2=(0,import_dom_query3.raf)(()=>{(0,import_dom_query3.scrollIntoView)(itemEl,{rootEl:contentEl,block:"nearest"})});cleanups.push(rafCleanup2)};const rafCleanup=(0,import_dom_query3.raf)(()=>exec(true));cleanups.push(rafCleanup);const observerCleanup=(0,import_dom_query3.observeAttributes)(inputEl,{attributes:["aria-activedescendant"],callback:()=>exec(false)});cleanups.push(observerCleanup);return()=>{cleanups.forEach(cleanup=>cleanup())}}},actions:{reposition(ctx2,evt){const controlEl=()=>dom.getControlEl(ctx2);const positionerEl=()=>dom.getPositionerEl(ctx2);(0,import_popper2.getPlacement)(controlEl,positionerEl,{...ctx2.positioning,...evt.options,defer:true,listeners:false,onComplete(data){ctx2.currentPlacement=data.placement}})},setHighlightedItem(ctx2,evt){if(evt.value==null)return;set.highlightedValue(ctx2,evt.value)},clearHighlightedItem(ctx2){set.highlightedValue(ctx2,null,true)},selectHighlightedItem(ctx2){set.value(ctx2,ctx2.highlightedValue)},selectItem(ctx2,evt){if(evt.value==null)return;set.value(ctx2,evt.value)},clearItem(ctx2,evt){if(evt.value==null)return;const value=ctx2.value.filter(v=>v!==evt.value);set.value(ctx2,value)},setInitialFocus(ctx2){(0,import_dom_query3.raf)(()=>{dom.focusInputEl(ctx2)})},setFinalFocus(ctx2){(0,import_dom_query3.raf)(()=>{const triggerEl=dom.getTriggerEl(ctx2);if(triggerEl?.dataset.focusable==null){dom.focusInputEl(ctx2)}else{dom.focusTriggerEl(ctx2)}})},syncInputValue(ctx2){const inputEl=dom.getInputEl(ctx2);if(!inputEl)return;inputEl.value=ctx2.inputValue;queueMicrotask(()=>{const{selectionStart,selectionEnd}=inputEl;if(Math.abs((selectionEnd??0)-(selectionStart??0))!==0)return;if(selectionStart!==0)return;inputEl.setSelectionRange(inputEl.value.length,inputEl.value.length)})},setInputValue(ctx2,evt){set.inputValue(ctx2,evt.value)},clearInputValue(ctx2){set.inputValue(ctx2,"")},revertInputValue(ctx2){const inputValue=(0,import_utils.match)(ctx2.selectionBehavior,{replace:ctx2.hasSelectedItems?ctx2.valueAsString:"",preserve:ctx2.inputValue,clear:""});set.inputValue(ctx2,inputValue)},syncInitialValues(ctx2){const selectedItems=ctx2.collection.items(ctx2.value);const valueAsString=ctx2.collection.itemsToString(selectedItems);ctx2.highlightedItem=ctx2.collection.item(ctx2.highlightedValue);ctx2.selectedItems=selectedItems;ctx2.valueAsString=valueAsString;ctx2.inputValue=(0,import_utils.match)(ctx2.selectionBehavior,{preserve:ctx2.inputValue||valueAsString,replace:valueAsString,clear:""})},syncSelectionBehavior(ctx2){if(ctx2.multiple){ctx2.selectionBehavior="clear"}},setSelectedItems(ctx2,evt){if(!(0,import_utils.isArray)(evt.value))return;set.value(ctx2,evt.value)},clearSelectedItems(ctx2){set.value(ctx2,[])},scrollContentToTop(ctx2){if(ctx2.scrollToIndexFn){ctx2.scrollToIndexFn({index:0,immediate:true})}else{const contentEl=dom.getContentEl(ctx2);if(!contentEl)return;contentEl.scrollTop=0}},invokeOnOpen(ctx2){ctx2.onOpenChange?.({open:true})},invokeOnClose(ctx2){ctx2.onOpenChange?.({open:false})},highlightFirstItem(ctx2){(0,import_dom_query3.raf)(()=>{const value=ctx2.collection.first();set.highlightedValue(ctx2,value)})},highlightFirstItemIfNeeded(ctx2){if(!ctx2.autoHighlight)return;(0,import_dom_query3.raf)(()=>{const value=ctx2.collection.first();set.highlightedValue(ctx2,value)})},highlightLastItem(ctx2){(0,import_dom_query3.raf)(()=>{const value=ctx2.collection.last();set.highlightedValue(ctx2,value)})},highlightNextItem(ctx2){let value=null;if(ctx2.highlightedValue){value=ctx2.collection.next(ctx2.highlightedValue);if(!value&&ctx2.loopFocus)value=ctx2.collection.first()}else{value=ctx2.collection.first()}set.highlightedValue(ctx2,value)},highlightPrevItem(ctx2){let value=null;if(ctx2.highlightedValue){value=ctx2.collection.prev(ctx2.highlightedValue);if(!value&&ctx2.loopFocus)value=ctx2.collection.last()}else{value=ctx2.collection.last()}set.highlightedValue(ctx2,value)},highlightFirstSelectedItem(ctx2){(0,import_dom_query3.raf)(()=>{const[value]=ctx2.collection.sort(ctx2.value);set.highlightedValue(ctx2,value)})},highlightFirstOrSelectedItem(ctx2){(0,import_dom_query3.raf)(()=>{let value=null;if(ctx2.hasSelectedItems){value=ctx2.collection.sort(ctx2.value)[0]}else{value=ctx2.collection.first()}set.highlightedValue(ctx2,value)})},highlightLastOrSelectedItem(ctx2){(0,import_dom_query3.raf)(()=>{let value=null;if(ctx2.hasSelectedItems){value=ctx2.collection.sort(ctx2.value)[0]}else{value=ctx2.collection.last()}set.highlightedValue(ctx2,value)})},autofillInputValue(ctx2,evt){const inputEl=dom.getInputEl(ctx2);if(!ctx2.autoComplete||!inputEl||!evt.keypress)return;const valueText=ctx2.collection.valueToString(ctx2.highlightedValue);(0,import_dom_query3.raf)(()=>{inputEl.value=valueText||ctx2.inputValue})},setCollection(ctx2,evt){ctx2.collection=evt.value},syncSelectedItems(ctx2){sync.valueChange(ctx2)},syncHighlightedItem(ctx2){sync.highlightChange(ctx2)},toggleVisibility(ctx2,evt,{send}){send({type:ctx2.open?"CONTROLLED.OPEN":"CONTROLLED.CLOSE",previousEvent:evt})}}})}var sync={valueChange:ctx=>{const prevSelectedItems=ctx.selectedItems;ctx.selectedItems=ctx.value.map(v=>{const foundItem=prevSelectedItems.find(item=>ctx.collection.itemToValue(item)===v);if(foundItem)return foundItem;return ctx.collection.item(v)});const valueAsString=ctx.collection.itemsToString(ctx.selectedItems);ctx.valueAsString=valueAsString;let inputValue;if(ctx.getSelectionValue){inputValue=ctx.getSelectionValue({inputValue:ctx.inputValue,selectedItems:Array.from(ctx.selectedItems),valueAsString})}else{inputValue=(0,import_utils.match)(ctx.selectionBehavior,{replace:ctx.valueAsString,preserve:ctx.inputValue,clear:""})}set.inputValue(ctx,inputValue)},highlightChange:ctx=>{ctx.highlightedItem=ctx.collection.item(ctx.highlightedValue)}};var invoke={valueChange:ctx=>{sync.valueChange(ctx);ctx.onValueChange?.({value:Array.from(ctx.value),items:Array.from(ctx.selectedItems)})},highlightChange:ctx=>{sync.highlightChange(ctx);ctx.onHighlightChange?.({highlightedValue:ctx.highlightedValue,highlightedItem:ctx.highlightedItem})},inputChange:ctx=>{ctx.onInputValueChange?.({inputValue:ctx.inputValue})}};var set={value:(ctx,value,force=false)=>{if((0,import_utils.isEqual)(ctx.value,value))return;if(value==null&&!force)return;if(value==null&&force){ctx.value=[];invoke.valueChange(ctx);return}if((0,import_utils.isArray)(value)){ctx.value=value}else if(value!=null){ctx.value=ctx.multiple?(0,import_utils.addOrRemove)(ctx.value,value):[value]}invoke.valueChange(ctx)},highlightedValue:(ctx,value,force=false)=>{if((0,import_utils.isEqual)(ctx.highlightedValue,value))return;if(!value&&!force)return;ctx.highlightedValue=value||null;invoke.highlightChange(ctx)},inputValue:(ctx,value)=>{if((0,import_utils.isEqual)(ctx.inputValue,value))return;ctx.inputValue=value;invoke.inputChange(ctx)}};0&&(module.exports={anatomy,collection,connect,machine});
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/combobox.anatomy.ts","../src/combobox.collection.ts","../src/combobox.connect.ts","../src/combobox.dom.ts","../src/combobox.machine.ts"],"sourcesContent":["export type { FocusOutsideEvent, InteractOutsideEvent, PointerDownOutsideEvent } from \"@zag-js/dismissable\"\nexport { anatomy } from \"./combobox.anatomy\"\nexport { collection } from \"./combobox.collection\"\nexport { connect } from \"./combobox.connect\"\nexport { machine } from \"./combobox.machine\"\nexport type {\n MachineApi as Api,\n CollectionItem,\n CollectionOptions,\n UserDefinedContext as Context,\n ElementIds,\n HighlightChangeDetails,\n InputValueChangeDetails,\n IntlTranslations,\n ItemGroupLabelProps,\n ItemGroupProps,\n ItemProps,\n ItemState,\n OpenChangeDetails,\n Placement,\n PositioningOptions,\n ScrollToIndexDetails,\n SelectionValueDetails,\n TriggerProps,\n ValueChangeDetails,\n} from \"./combobox.types\"\n","import { createAnatomy } from \"@zag-js/anatomy\"\n\nexport const anatomy = createAnatomy(\"combobox\").parts(\n \"root\",\n \"label\",\n \"input\",\n \"positioner\",\n \"control\",\n \"trigger\",\n \"content\",\n \"clearTrigger\",\n \"item\",\n \"itemText\",\n \"itemIndicator\",\n \"itemGroup\",\n \"itemGroupLabel\",\n)\nexport const parts = anatomy.build()\n","import { Collection, type CollectionItem, type CollectionOptions } from \"@zag-js/collection\"\nimport { ref } from \"@zag-js/core\"\n\nexport const collection = <T extends CollectionItem>(options: CollectionOptions<T>): Collection<T> => {\n return ref(new Collection(options))\n}\n\ncollection.empty = (): Collection<CollectionItem> => {\n return ref(new Collection<CollectionItem>({ items: [] }))\n}\n","import {\n clickIfLink,\n getEventKey,\n getNativeEvent,\n isContextMenuEvent,\n isLeftClick,\n type EventKeyMap,\n} from \"@zag-js/dom-event\"\nimport { ariaAttr, dataAttr, isDownloadingEvent, isOpeningInNewTab } from \"@zag-js/dom-query\"\nimport { getPlacementStyles } from \"@zag-js/popper\"\nimport type { NormalizeProps, PropTypes } from \"@zag-js/types\"\nimport { parts } from \"./combobox.anatomy\"\nimport { dom } from \"./combobox.dom\"\nimport type { CollectionItem, ItemProps, ItemState, MachineApi, Send, State } from \"./combobox.types\"\n\nexport function connect<T extends PropTypes, V extends CollectionItem>(\n state: State,\n send: Send,\n normalize: NormalizeProps<T>,\n): MachineApi<T, V> {\n const translations = state.context.translations\n const collection = state.context.collection\n\n const disabled = state.context.disabled\n const interactive = state.context.isInteractive\n const invalid = state.context.invalid\n const readOnly = state.context.readOnly\n\n const open = state.hasTag(\"open\")\n const focused = state.hasTag(\"focused\")\n const composite = state.context.composite\n const highlightedValue = state.context.highlightedValue\n\n const popperStyles = getPlacementStyles({\n ...state.context.positioning,\n placement: state.context.currentPlacement,\n })\n\n function getItemState(props: ItemProps): ItemState {\n const { item } = props\n const disabled = collection.isItemDisabled(item)\n const value = collection.itemToValue(item)\n return {\n value,\n disabled: Boolean(disabled || disabled),\n highlighted: highlightedValue === value,\n selected: state.context.value.includes(value),\n }\n }\n\n return {\n focused,\n open,\n inputValue: state.context.inputValue,\n highlightedValue,\n highlightedItem: state.context.highlightedItem,\n value: state.context.value,\n valueAsString: state.context.valueAsString,\n hasSelectedItems: state.context.hasSelectedItems,\n selectedItems: state.context.selectedItems,\n collection: state.context.collection,\n reposition(options = {}) {\n send({ type: \"POSITIONING.SET\", options })\n },\n setCollection(collection) {\n send({ type: \"COLLECTION.SET\", value: collection })\n },\n setHighlightValue(value) {\n send({ type: \"HIGHLIGHTED_VALUE.SET\", value })\n },\n selectValue(value) {\n send({ type: \"ITEM.SELECT\", value })\n },\n setValue(value) {\n send({ type: \"VALUE.SET\", value })\n },\n setInputValue(value) {\n send({ type: \"INPUT_VALUE.SET\", value })\n },\n clearValue(value) {\n if (value != null) {\n send({ type: \"ITEM.CLEAR\", value })\n } else {\n send(\"VALUE.CLEAR\")\n }\n },\n focus() {\n dom.getInputEl(state.context)?.focus()\n },\n setOpen(nextOpen) {\n if (nextOpen === open) return\n send(nextOpen ? \"OPEN\" : \"CLOSE\")\n },\n rootProps: normalize.element({\n ...parts.root.attrs,\n dir: state.context.dir,\n id: dom.getRootId(state.context),\n \"data-invalid\": dataAttr(invalid),\n \"data-readonly\": dataAttr(readOnly),\n }),\n\n labelProps: normalize.label({\n ...parts.label.attrs,\n dir: state.context.dir,\n htmlFor: dom.getInputId(state.context),\n id: dom.getLabelId(state.context),\n \"data-readonly\": dataAttr(readOnly),\n \"data-disabled\": dataAttr(disabled),\n \"data-invalid\": dataAttr(invalid),\n \"data-focus\": dataAttr(focused),\n onClick(event) {\n if (composite) return\n event.preventDefault()\n dom.getTriggerEl(state.context)?.focus({ preventScroll: true })\n },\n }),\n\n controlProps: normalize.element({\n ...parts.control.attrs,\n dir: state.context.dir,\n id: dom.getControlId(state.context),\n \"data-state\": open ? \"open\" : \"closed\",\n \"data-focus\": dataAttr(focused),\n \"data-disabled\": dataAttr(disabled),\n \"data-invalid\": dataAttr(invalid),\n }),\n\n positionerProps: normalize.element({\n ...parts.positioner.attrs,\n dir: state.context.dir,\n id: dom.getPositionerId(state.context),\n style: popperStyles.floating,\n }),\n\n inputProps: normalize.input({\n ...parts.input.attrs,\n dir: state.context.dir,\n \"aria-invalid\": ariaAttr(invalid),\n \"data-invalid\": dataAttr(invalid),\n name: state.context.name,\n form: state.context.form,\n disabled: disabled,\n autoFocus: state.context.autoFocus,\n autoComplete: \"off\",\n autoCorrect: \"off\",\n autoCapitalize: \"none\",\n spellCheck: \"false\",\n readOnly: readOnly,\n placeholder: state.context.placeholder,\n id: dom.getInputId(state.context),\n type: \"text\",\n role: \"combobox\",\n defaultValue: state.context.inputValue,\n \"aria-autocomplete\": state.context.autoComplete ? \"both\" : \"list\",\n \"aria-controls\": dom.getContentId(state.context),\n \"aria-expanded\": open,\n \"data-state\": open ? \"open\" : \"closed\",\n \"aria-activedescendant\": highlightedValue ? dom.getItemId(state.context, highlightedValue) : undefined,\n onClick(event) {\n if (event.defaultPrevented) return\n if (!state.context.openOnClick) return\n if (!interactive) return\n send(\"INPUT.CLICK\")\n },\n onFocus() {\n if (disabled) return\n send(\"INPUT.FOCUS\")\n },\n onBlur() {\n if (disabled) return\n send(\"INPUT.BLUR\")\n },\n onChange(event) {\n send({ type: \"INPUT.CHANGE\", value: event.currentTarget.value })\n },\n onKeyDown(event) {\n if (event.defaultPrevented) return\n if (!interactive) return\n\n const evt = getNativeEvent(event)\n if (evt.ctrlKey || evt.shiftKey || evt.isComposing) return\n\n const openOnKeyPress = state.context.openOnKeyPress\n const isModifierKey = event.ctrlKey || event.metaKey || event.shiftKey\n const keypress = true\n\n const keymap: EventKeyMap = {\n ArrowDown(event) {\n if (!openOnKeyPress && !open) return\n send({ type: event.altKey ? \"OPEN\" : \"INPUT.ARROW_DOWN\", keypress })\n event.preventDefault()\n },\n ArrowUp() {\n if (!openOnKeyPress && !open) return\n send({ type: event.altKey ? \"CLOSE\" : \"INPUT.ARROW_UP\", keypress })\n event.preventDefault()\n },\n Home(event) {\n if (isModifierKey) return\n send({ type: \"INPUT.HOME\", keypress })\n if (open) {\n event.preventDefault()\n }\n },\n End(event) {\n if (isModifierKey) return\n send({ type: \"INPUT.END\", keypress })\n if (open) {\n event.preventDefault()\n }\n },\n Enter(event) {\n if (evt.isComposing) return\n send({ type: \"INPUT.ENTER\", keypress })\n if (open) {\n event.preventDefault()\n }\n const itemEl = dom.getHighlightedItemEl(state.context)\n clickIfLink(itemEl)\n },\n Escape() {\n send({ type: \"INPUT.ESCAPE\", keypress })\n event.preventDefault()\n },\n }\n\n const key = getEventKey(event, state.context)\n const exec = keymap[key]\n exec?.(event)\n },\n }),\n\n getTriggerProps(props = {}) {\n return normalize.button({\n ...parts.trigger.attrs,\n dir: state.context.dir,\n id: dom.getTriggerId(state.context),\n \"aria-haspopup\": composite ? \"listbox\" : \"dialog\",\n type: \"button\",\n tabIndex: props.focusable ? undefined : -1,\n \"aria-label\": translations.triggerLabel,\n \"aria-expanded\": open,\n \"data-state\": open ? \"open\" : \"closed\",\n \"aria-controls\": open ? dom.getContentId(state.context) : undefined,\n disabled,\n \"data-focusable\": dataAttr(props.focusable),\n \"data-readonly\": dataAttr(readOnly),\n \"data-disabled\": dataAttr(disabled),\n onFocus() {\n if (!props.focusable) return\n send({ type: \"INPUT.FOCUS\", src: \"trigger\" })\n },\n onClick(event) {\n if (event.defaultPrevented) return\n const evt = getNativeEvent(event)\n if (!interactive) return\n if (!isLeftClick(evt)) return\n send(\"TRIGGER.CLICK\")\n },\n onPointerDown(event) {\n if (!interactive) return\n if (event.pointerType === \"touch\") return\n event.preventDefault()\n queueMicrotask(() => {\n dom.getInputEl(state.context)?.focus({ preventScroll: true })\n })\n },\n onKeyDown(event) {\n if (event.defaultPrevented) return\n if (composite) return\n\n const keyMap: EventKeyMap = {\n ArrowDown() {\n send({ type: \"INPUT.ARROW_DOWN\", src: \"trigger\" })\n },\n ArrowUp() {\n send({ type: \"INPUT.ARROW_UP\", src: \"trigger\" })\n },\n }\n\n const key = getEventKey(event, state.context)\n const exec = keyMap[key]\n\n if (exec) {\n exec(event)\n event.preventDefault()\n }\n },\n })\n },\n\n contentProps: normalize.element({\n ...parts.content.attrs,\n dir: state.context.dir,\n id: dom.getContentId(state.context),\n role: !composite ? \"dialog\" : \"listbox\",\n tabIndex: -1,\n hidden: !open,\n \"data-state\": open ? \"open\" : \"closed\",\n \"aria-labelledby\": dom.getLabelId(state.context),\n \"aria-multiselectable\": state.context.multiple && composite ? true : undefined,\n onPointerDown(event) {\n // prevent options or elements within listbox from taking focus\n event.preventDefault()\n },\n }),\n\n listProps: normalize.element({\n role: !composite ? \"listbox\" : undefined,\n \"aria-labelledby\": dom.getLabelId(state.context),\n \"aria-multiselectable\": state.context.multiple && !composite ? true : undefined,\n }),\n\n clearTriggerProps: normalize.button({\n ...parts.clearTrigger.attrs,\n dir: state.context.dir,\n id: dom.getClearTriggerId(state.context),\n type: \"button\",\n tabIndex: -1,\n disabled: disabled,\n \"aria-label\": translations.clearTriggerLabel,\n \"aria-controls\": dom.getInputId(state.context),\n hidden: !state.context.value.length,\n onPointerDown(event) {\n event.preventDefault()\n },\n onClick(event) {\n if (event.defaultPrevented) return\n if (!interactive) return\n send({ type: \"VALUE.CLEAR\", src: \"clear-trigger\" })\n },\n }),\n\n getItemState,\n\n getItemProps(props) {\n const itemState = getItemState(props)\n const value = itemState.value\n\n return normalize.element({\n ...parts.item.attrs,\n dir: state.context.dir,\n id: dom.getItemId(state.context, value),\n role: \"option\",\n tabIndex: -1,\n \"data-highlighted\": dataAttr(itemState.highlighted),\n \"data-state\": itemState.selected ? \"checked\" : \"unchecked\",\n \"aria-selected\": itemState.highlighted,\n \"aria-disabled\": itemState.disabled,\n \"data-disabled\": dataAttr(itemState.disabled),\n \"data-value\": itemState.value,\n onPointerMove() {\n if (itemState.disabled) return\n if (itemState.highlighted) return\n send({ type: \"ITEM.POINTER_MOVE\", value })\n },\n onPointerLeave() {\n if (props.persistFocus) return\n if (itemState.disabled) return\n const mouseMoved = state.previousEvent.type.includes(\"POINTER\")\n if (!mouseMoved) return\n send({ type: \"ITEM.POINTER_LEAVE\", value })\n },\n onPointerUp(event) {\n if (isDownloadingEvent(event)) return\n if (isOpeningInNewTab(event)) return\n if (isContextMenuEvent(event)) return\n if (itemState.disabled) return\n send({ type: \"ITEM.CLICK\", src: \"pointerup\", value })\n },\n onTouchEnd(event) {\n // prevent clicking elements behind content\n event.preventDefault()\n event.stopPropagation()\n },\n })\n },\n\n getItemTextProps(props) {\n const itemState = getItemState(props)\n return normalize.element({\n ...parts.itemText.attrs,\n dir: state.context.dir,\n \"data-disabled\": dataAttr(itemState.disabled),\n \"data-highlighted\": dataAttr(itemState.highlighted),\n })\n },\n getItemIndicatorProps(props) {\n const itemState = getItemState(props)\n return normalize.element({\n \"aria-hidden\": true,\n ...parts.itemIndicator.attrs,\n dir: state.context.dir,\n \"data-state\": itemState.selected ? \"checked\" : \"unchecked\",\n hidden: !itemState.selected,\n })\n },\n\n getItemGroupProps(props) {\n const { id } = props\n return normalize.element({\n ...parts.itemGroup.attrs,\n dir: state.context.dir,\n id: dom.getItemGroupId(state.context, id),\n \"aria-labelledby\": dom.getItemGroupLabelId(state.context, id),\n })\n },\n\n getItemGroupLabelProps(props) {\n const { htmlFor } = props\n return normalize.element({\n ...parts.itemGroupLabel.attrs,\n dir: state.context.dir,\n id: dom.getItemGroupLabelId(state.context, htmlFor),\n role: \"group\",\n })\n },\n }\n}\n","import { createScope, query } from \"@zag-js/dom-query\"\nimport type { MachineContext as Ctx } from \"./combobox.types\"\n\nexport const dom = createScope({\n getRootId: (ctx: Ctx) => ctx.ids?.root ?? `combobox:${ctx.id}`,\n getLabelId: (ctx: Ctx) => ctx.ids?.label ?? `combobox:${ctx.id}:label`,\n getControlId: (ctx: Ctx) => ctx.ids?.control ?? `combobox:${ctx.id}:control`,\n getInputId: (ctx: Ctx) => ctx.ids?.input ?? `combobox:${ctx.id}:input`,\n getContentId: (ctx: Ctx) => ctx.ids?.content ?? `combobox:${ctx.id}:content`,\n getPositionerId: (ctx: Ctx) => ctx.ids?.positioner ?? `combobox:${ctx.id}:popper`,\n getTriggerId: (ctx: Ctx) => ctx.ids?.trigger ?? `combobox:${ctx.id}:toggle-btn`,\n getClearTriggerId: (ctx: Ctx) => ctx.ids?.clearTrigger ?? `combobox:${ctx.id}:clear-btn`,\n getItemGroupId: (ctx: Ctx, id: string | number) => ctx.ids?.itemGroup?.(id) ?? `combobox:${ctx.id}:optgroup:${id}`,\n getItemGroupLabelId: (ctx: Ctx, id: string | number) =>\n ctx.ids?.itemGroupLabel?.(id) ?? `combobox:${ctx.id}:optgroup-label:${id}`,\n getItemId: (ctx: Ctx, id: string) => `combobox:${ctx.id}:option:${id}`,\n\n getContentEl: (ctx: Ctx) => dom.getById(ctx, dom.getContentId(ctx)),\n getInputEl: (ctx: Ctx) => dom.getById<HTMLInputElement>(ctx, dom.getInputId(ctx)),\n getPositionerEl: (ctx: Ctx) => dom.getById(ctx, dom.getPositionerId(ctx)),\n getControlEl: (ctx: Ctx) => dom.getById(ctx, dom.getControlId(ctx)),\n getTriggerEl: (ctx: Ctx) => dom.getById(ctx, dom.getTriggerId(ctx)),\n getClearTriggerEl: (ctx: Ctx) => dom.getById(ctx, dom.getClearTriggerId(ctx)),\n getHighlightedItemEl: (ctx: Ctx) => {\n const value = ctx.highlightedValue\n if (value == null) return\n return query(dom.getContentEl(ctx), `[role=option][data-value=\"${CSS.escape(value)}\"`)\n },\n\n focusInputEl: (ctx: Ctx) => {\n const inputEl = dom.getInputEl(ctx)\n if (dom.getActiveElement(ctx) === inputEl) return\n inputEl?.focus({ preventScroll: true })\n },\n focusTriggerEl: (ctx: Ctx) => {\n const triggerEl = dom.getTriggerEl(ctx)\n if (dom.getActiveElement(ctx) === triggerEl) return\n triggerEl?.focus({ preventScroll: true })\n },\n})\n","import { ariaHidden } from \"@zag-js/aria-hidden\"\nimport { createMachine, guards } from \"@zag-js/core\"\nimport { trackDismissableElement } from \"@zag-js/dismissable\"\nimport { observeAttributes, observeChildren, raf, scrollIntoView } from \"@zag-js/dom-query\"\nimport { getPlacement } from \"@zag-js/popper\"\nimport { addOrRemove, compact, isArray, isBoolean, isEqual, match } from \"@zag-js/utils\"\nimport { collection } from \"./combobox.collection\"\nimport { dom } from \"./combobox.dom\"\nimport type { CollectionItem, MachineContext, MachineState, UserDefinedContext } from \"./combobox.types\"\n\nconst { and, not } = guards\n\nexport function machine<T extends CollectionItem>(userContext: UserDefinedContext<T>) {\n const ctx = compact(userContext)\n return createMachine<MachineContext, MachineState>(\n {\n id: \"combobox\",\n initial: ctx.open ? \"suggesting\" : \"idle\",\n context: {\n loopFocus: true,\n openOnClick: false,\n value: [],\n highlightedValue: null,\n inputValue: \"\",\n allowCustomValue: false,\n closeOnSelect: !ctx.multiple,\n inputBehavior: \"none\",\n selectionBehavior: \"replace\",\n openOnKeyPress: true,\n openOnChange: true,\n composite: true,\n ...ctx,\n highlightedItem: null,\n selectedItems: [],\n valueAsString: \"\",\n collection: ctx.collection ?? collection.empty(),\n positioning: {\n placement: \"bottom\",\n flip: false,\n sameWidth: true,\n ...ctx.positioning,\n },\n translations: {\n triggerLabel: \"Toggle suggestions\",\n clearTriggerLabel: \"Clear value\",\n ...ctx.translations,\n },\n },\n\n created: [\"syncInitialValues\", \"syncSelectionBehavior\"],\n\n computed: {\n isInputValueEmpty: (ctx) => ctx.inputValue.length === 0,\n isInteractive: (ctx) => !(ctx.readOnly || ctx.disabled),\n autoComplete: (ctx) => ctx.inputBehavior === \"autocomplete\",\n autoHighlight: (ctx) => ctx.inputBehavior === \"autohighlight\",\n hasSelectedItems: (ctx) => ctx.value.length > 0,\n },\n\n watch: {\n value: [\"syncSelectedItems\"],\n inputValue: [\"syncInputValue\"],\n highlightedValue: [\"syncHighlightedItem\", \"autofillInputValue\"],\n multiple: [\"syncSelectionBehavior\"],\n open: [\"toggleVisibility\"],\n },\n\n on: {\n \"HIGHLIGHTED_VALUE.SET\": {\n actions: [\"setHighlightedItem\"],\n },\n \"ITEM.SELECT\": {\n actions: [\"selectItem\"],\n },\n \"ITEM.CLEAR\": {\n actions: [\"clearItem\"],\n },\n \"VALUE.SET\": {\n actions: [\"setSelectedItems\"],\n },\n \"INPUT_VALUE.SET\": {\n actions: \"setInputValue\",\n },\n \"COLLECTION.SET\": {\n actions: [\"setCollection\"],\n },\n \"POSITIONING.SET\": {\n actions: [\"reposition\"],\n },\n },\n\n states: {\n idle: {\n tags: [\"idle\", \"closed\"],\n entry: [\"scrollContentToTop\", \"clearHighlightedItem\"],\n on: {\n \"CONTROLLED.OPEN\": {\n target: \"interacting\",\n },\n \"TRIGGER.CLICK\": [\n {\n guard: \"isOpenControlled\",\n actions: [\"setInitialFocus\", \"highlightFirstSelectedItem\", \"invokeOnOpen\"],\n },\n {\n target: \"interacting\",\n actions: [\"setInitialFocus\", \"highlightFirstSelectedItem\", \"invokeOnOpen\"],\n },\n ],\n \"INPUT.CLICK\": [\n {\n guard: \"isOpenControlled\",\n actions: [\"highlightFirstSelectedItem\", \"invokeOnOpen\"],\n },\n {\n target: \"interacting\",\n actions: [\"highlightFirstSelectedItem\", \"invokeOnOpen\"],\n },\n ],\n \"INPUT.FOCUS\": {\n target: \"focused\",\n },\n OPEN: [\n {\n guard: \"isOpenControlled\",\n actions: [\"invokeOnOpen\"],\n },\n {\n target: \"interacting\",\n actions: [\"invokeOnOpen\"],\n },\n ],\n \"VALUE.CLEAR\": {\n target: \"focused\",\n actions: [\"clearInputValue\", \"clearSelectedItems\", \"setInitialFocus\"],\n },\n },\n },\n\n focused: {\n tags: [\"focused\", \"closed\"],\n entry: [\"scrollContentToTop\", \"clearHighlightedItem\"],\n on: {\n \"CONTROLLED.OPEN\": [\n {\n guard: \"isChangeEvent\",\n target: \"suggesting\",\n },\n {\n target: \"interacting\",\n },\n ],\n \"INPUT.CHANGE\": [\n {\n guard: and(\"isOpenControlled\", \"openOnChange\"),\n actions: [\"setInputValue\", \"invokeOnOpen\", \"highlightFirstItemIfNeeded\"],\n },\n {\n guard: \"openOnChange\",\n target: \"suggesting\",\n actions: [\"setInputValue\", \"invokeOnOpen\", \"highlightFirstItemIfNeeded\"],\n },\n {\n actions: \"setInputValue\",\n },\n ],\n \"LAYER.INTERACT_OUTSIDE\": {\n target: \"idle\",\n },\n \"INPUT.ESCAPE\": {\n guard: and(\"isCustomValue\", not(\"allowCustomValue\")),\n actions: \"revertInputValue\",\n },\n \"INPUT.BLUR\": {\n target: \"idle\",\n },\n \"INPUT.CLICK\": [\n {\n guard: \"isOpenControlled\",\n actions: [\"highlightFirstSelectedItem\", \"invokeOnOpen\"],\n },\n {\n target: \"interacting\",\n actions: [\"highlightFirstSelectedItem\", \"invokeOnOpen\"],\n },\n ],\n \"TRIGGER.CLICK\": [\n {\n guard: \"isOpenControlled\",\n actions: [\"setInitialFocus\", \"highlightFirstSelectedItem\", \"invokeOnOpen\"],\n },\n {\n target: \"interacting\",\n actions: [\"setInitialFocus\", \"highlightFirstSelectedItem\", \"invokeOnOpen\"],\n },\n ],\n \"INPUT.ARROW_DOWN\": [\n // == group 1 ==\n {\n guard: and(\"isOpenControlled\", \"autoComplete\"),\n actions: [\"invokeOnOpen\"],\n },\n {\n guard: \"autoComplete\",\n target: \"interacting\",\n actions: [\"invokeOnOpen\"],\n },\n // == group 2 ==\n {\n guard: \"isOpenControlled\",\n actions: [\"highlightFirstOrSelectedItem\", \"invokeOnOpen\"],\n },\n {\n target: \"interacting\",\n actions: [\"highlightFirstOrSelectedItem\", \"invokeOnOpen\"],\n },\n ],\n \"INPUT.ARROW_UP\": [\n // == group 1 ==\n {\n guard: \"autoComplete\",\n target: \"interacting\",\n actions: \"invokeOnOpen\",\n },\n {\n guard: \"autoComplete\",\n target: \"interacting\",\n actions: \"invokeOnOpen\",\n },\n // == group 2 ==\n {\n target: \"interacting\",\n actions: [\"highlightLastOrSelectedItem\", \"invokeOnOpen\"],\n },\n {\n target: \"interacting\",\n actions: [\"highlightLastOrSelectedItem\", \"invokeOnOpen\"],\n },\n ],\n OPEN: [\n {\n guard: \"isOpenControlled\",\n actions: [\"invokeOnOpen\"],\n },\n {\n target: \"interacting\",\n actions: [\"invokeOnOpen\"],\n },\n ],\n \"VALUE.CLEAR\": {\n actions: [\"clearInputValue\", \"clearSelectedItems\"],\n },\n },\n },\n\n interacting: {\n tags: [\"open\", \"focused\"],\n entry: [\"setInitialFocus\"],\n activities: [\"scrollToHighlightedItem\", \"trackDismissableLayer\", \"computePlacement\", \"hideOtherElements\"],\n on: {\n \"CONTROLLED.CLOSE\": [\n {\n guard: \"restoreFocus\",\n target: \"focused\",\n actions: [\"setFinalFocus\"],\n },\n {\n target: \"idle\",\n },\n ],\n \"INPUT.HOME\": {\n actions: [\"highlightFirstItem\"],\n },\n \"INPUT.END\": {\n actions: [\"highlightLastItem\"],\n },\n \"INPUT.ARROW_DOWN\": [\n {\n guard: and(\"autoComplete\", \"isLastItemHighlighted\"),\n actions: [\"clearHighlightedItem\", \"scrollContentToTop\"],\n },\n {\n actions: [\"highlightNextItem\"],\n },\n ],\n \"INPUT.ARROW_UP\": [\n {\n guard: and(\"autoComplete\", \"isFirstItemHighlighted\"),\n actions: \"clearHighlightedItem\",\n },\n {\n actions: \"highlightPrevItem\",\n },\n ],\n \"INPUT.ENTER\": [\n {\n guard: and(\"isOpenControlled\", \"closeOnSelect\"),\n actions: [\"selectHighlightedItem\", \"invokeOnClose\"],\n },\n {\n guard: \"closeOnSelect\",\n target: \"focused\",\n actions: [\"selectHighlightedItem\", \"invokeOnClose\", \"setFinalFocus\"],\n },\n {\n actions: [\"selectHighlightedItem\"],\n },\n ],\n \"INPUT.CHANGE\": [\n {\n guard: \"autoComplete\",\n target: \"suggesting\",\n actions: [\"setInputValue\", \"invokeOnOpen\"],\n },\n {\n target: \"suggesting\",\n actions: [\"clearHighlightedItem\", \"setInputValue\", \"invokeOnOpen\"],\n },\n ],\n \"ITEM.POINTER_MOVE\": {\n actions: [\"setHighlightedItem\"],\n },\n \"ITEM.POINTER_LEAVE\": {\n actions: [\"clearHighlightedItem\"],\n },\n \"ITEM.CLICK\": [\n {\n guard: and(\"isOpenControlled\", \"closeOnSelect\"),\n actions: [\"selectItem\", \"invokeOnClose\"],\n },\n {\n guard: \"closeOnSelect\",\n target: \"focused\",\n actions: [\"selectItem\", \"invokeOnClose\", \"setFinalFocus\"],\n },\n {\n actions: [\"selectItem\"],\n },\n ],\n \"LAYER.ESCAPE\": [\n {\n guard: and(\"isOpenControlled\", \"autoComplete\"),\n actions: [\"syncInputValue\", \"invokeOnClose\"],\n },\n {\n guard: \"autoComplete\",\n target: \"focused\",\n actions: [\"syncInputValue\", \"invokeOnClose\"],\n },\n {\n guard: \"isOpenControlled\",\n actions: \"invokeOnClose\",\n },\n {\n target: \"focused\",\n actions: [\"invokeOnClose\", \"setFinalFocus\"],\n },\n ],\n \"TRIGGER.CLICK\": [\n {\n guard: \"isOpenControlled\",\n actions: \"invokeOnClose\",\n },\n {\n target: \"focused\",\n actions: \"invokeOnClose\",\n },\n ],\n \"LAYER.INTERACT_OUTSIDE\": [\n // == group 1 ==\n {\n guard: and(\"isOpenControlled\", \"isCustomValue\", not(\"allowCustomValue\")),\n actions: [\"revertInputValue\", \"invokeOnClose\"],\n },\n {\n guard: and(\"isCustomValue\", not(\"allowCustomValue\")),\n target: \"idle\",\n actions: [\"revertInputValue\", \"invokeOnClose\"],\n },\n // == group 2 ==\n {\n guard: \"isOpenControlled\",\n actions: \"invokeOnClose\",\n },\n {\n target: \"idle\",\n actions: \"invokeOnClose\",\n },\n ],\n CLOSE: [\n {\n guard: \"isOpenControlled\",\n actions: [\"invokeOnClose\"],\n },\n {\n target: \"focused\",\n actions: [\"invokeOnClose\", \"setFinalFocus\"],\n },\n ],\n \"VALUE.CLEAR\": [\n {\n guard: \"isOpenControlled\",\n actions: [\"clearInputValue\", \"clearSelectedItems\", \"invokeOnClose\"],\n },\n {\n target: \"focused\",\n actions: [\"clearInputValue\", \"clearSelectedItems\", \"invokeOnClose\", \"setFinalFocus\"],\n },\n ],\n },\n },\n\n suggesting: {\n tags: [\"open\", \"focused\"],\n activities: [\n \"trackDismissableLayer\",\n \"scrollToHighlightedItem\",\n \"computePlacement\",\n \"trackChildNodes\",\n \"hideOtherElements\",\n ],\n entry: [\"setInitialFocus\"],\n on: {\n \"CONTROLLED.CLOSE\": [\n {\n guard: \"restoreFocus\",\n target: \"focused\",\n actions: [\"setFinalFocus\"],\n },\n {\n target: \"idle\",\n },\n ],\n CHILDREN_CHANGE: {\n actions: [\"highlightFirstItem\"],\n },\n \"INPUT.ARROW_DOWN\": {\n target: \"interacting\",\n actions: [\"highlightNextItem\"],\n },\n \"INPUT.ARROW_UP\": {\n target: \"interacting\",\n actions: [\"highlightPrevItem\"],\n },\n \"INPUT.HOME\": {\n target: \"interacting\",\n actions: [\"highlightFirstItem\"],\n },\n \"INPUT.END\": {\n target: \"interacting\",\n actions: [\"highlightLastItem\"],\n },\n \"INPUT.ENTER\": [\n {\n guard: and(\"isOpenControlled\", \"closeOnSelect\"),\n actions: [\"selectHighlightedItem\", \"invokeOnClose\"],\n },\n {\n guard: \"closeOnSelect\",\n target: \"focused\",\n actions: [\"selectHighlightedItem\", \"invokeOnClose\", \"setFinalFocus\"],\n },\n {\n actions: [\"selectHighlightedItem\"],\n },\n ],\n \"INPUT.CHANGE\": [\n {\n guard: \"autoHighlight\",\n actions: [\"setInputValue\"],\n },\n {\n actions: [\"setInputValue\"],\n },\n ],\n \"LAYER.ESCAPE\": [\n {\n guard: \"isOpenControlled\",\n actions: [\"invokeOnClose\"],\n },\n {\n target: \"focused\",\n actions: [\"invokeOnClose\"],\n },\n ],\n \"ITEM.POINTER_MOVE\": {\n target: \"interacting\",\n actions: [\"setHighlightedItem\"],\n },\n \"ITEM.POINTER_LEAVE\": {\n actions: [\"clearHighlightedItem\"],\n },\n \"LAYER.INTERACT_OUTSIDE\": [\n // == group 1 ==\n {\n guard: and(\"isOpenControlled\", \"isCustomValue\", not(\"allowCustomValue\")),\n actions: [\"revertInputValue\", \"invokeOnClose\"],\n },\n {\n guard: and(\"isCustomValue\", not(\"allowCustomValue\")),\n target: \"idle\",\n actions: [\"revertInputValue\", \"invokeOnClose\"],\n },\n // == group 2 ==\n {\n guard: \"isOpenControlled\",\n actions: [\"invokeOnClose\"],\n },\n {\n target: \"idle\",\n actions: [\"invokeOnClose\"],\n },\n ],\n \"TRIGGER.CLICK\": [\n {\n guard: \"isOpenControlled\",\n actions: [\"invokeOnClose\"],\n },\n {\n target: \"focused\",\n actions: [\"invokeOnClose\"],\n },\n ],\n \"ITEM.CLICK\": [\n {\n guard: and(\"isOpenControlled\", \"closeOnSelect\"),\n actions: [\"selectItem\", \"invokeOnClose\"],\n },\n {\n guard: \"closeOnSelect\",\n target: \"focused\",\n actions: [\"selectItem\", \"invokeOnClose\", \"setFinalFocus\"],\n },\n {\n actions: [\"selectItem\"],\n },\n ],\n CLOSE: [\n {\n guard: \"isOpenControlled\",\n actions: [\"invokeOnClose\"],\n },\n {\n target: \"focused\",\n actions: [\"invokeOnClose\", \"setFinalFocus\"],\n },\n ],\n \"VALUE.CLEAR\": [\n {\n guard: \"isOpenControlled\",\n actions: [\"clearInputValue\", \"clearSelectedItems\", \"invokeOnClose\"],\n },\n {\n target: \"focused\",\n actions: [\"clearInputValue\", \"clearSelectedItems\", \"invokeOnClose\", \"setFinalFocus\"],\n },\n ],\n },\n },\n },\n },\n\n {\n guards: {\n isInputValueEmpty: (ctx) => ctx.isInputValueEmpty,\n autoComplete: (ctx) => ctx.autoComplete && !ctx.multiple,\n autoHighlight: (ctx) => ctx.autoHighlight,\n isFirstItemHighlighted: (ctx) => ctx.collection.first() === ctx.highlightedValue,\n isLastItemHighlighted: (ctx) => ctx.collection.last() === ctx.highlightedValue,\n isCustomValue: (ctx) => ctx.inputValue !== ctx.valueAsString,\n allowCustomValue: (ctx) => !!ctx.allowCustomValue,\n hasHighlightedItem: (ctx) => ctx.highlightedValue != null,\n closeOnSelect: (ctx) => !!ctx.closeOnSelect,\n isOpenControlled: (ctx) => !!ctx[\"open.controlled\"],\n openOnChange: (ctx, evt) => {\n if (isBoolean(ctx.openOnChange)) return ctx.openOnChange\n return !!ctx.openOnChange?.({ inputValue: evt.value })\n },\n restoreFocus: (_ctx, evt) => (evt.restoreFocus == null ? true : !!evt.restoreFocus),\n isChangeEvent: (_ctx, evt) => evt.previousEvent?.type === \"INPUT.CHANGE\",\n },\n\n activities: {\n trackDismissableLayer(ctx, _evt, { send }) {\n if (ctx.disableLayer) return\n const contentEl = () => dom.getContentEl(ctx)\n return trackDismissableElement(contentEl, {\n defer: true,\n exclude: () => [dom.getInputEl(ctx), dom.getTriggerEl(ctx), dom.getClearTriggerEl(ctx)],\n onFocusOutside: ctx.onFocusOutside,\n onPointerDownOutside: ctx.onPointerDownOutside,\n onInteractOutside: ctx.onInteractOutside,\n onEscapeKeyDown(event) {\n event.preventDefault()\n event.stopPropagation()\n send(\"LAYER.ESCAPE\")\n },\n onDismiss() {\n send({ type: \"LAYER.INTERACT_OUTSIDE\", restoreFocus: false })\n },\n })\n },\n hideOtherElements(ctx) {\n return ariaHidden([dom.getInputEl(ctx), dom.getContentEl(ctx), dom.getTriggerEl(ctx)])\n },\n computePlacement(ctx) {\n const controlEl = () => dom.getControlEl(ctx)\n const positionerEl = () => dom.getPositionerEl(ctx)\n ctx.currentPlacement = ctx.positioning.placement\n return getPlacement(controlEl, positionerEl, {\n ...ctx.positioning,\n defer: true,\n onComplete(data) {\n ctx.currentPlacement = data.placement\n },\n })\n },\n // in event the options are fetched (async), we still want to auto-highlight the first option\n trackChildNodes(ctx, _evt, { send }) {\n if (!ctx.autoHighlight) return\n const exec = () => send(\"CHILDREN_CHANGE\")\n const contentEl = () => dom.getContentEl(ctx)\n return observeChildren(contentEl, {\n callback: exec,\n defer: true,\n })\n },\n scrollToHighlightedItem(ctx, _evt, { getState }) {\n const inputEl = dom.getInputEl(ctx)\n\n let cleanups: VoidFunction[] = []\n\n const exec = (immediate: boolean) => {\n const state = getState()\n\n const pointer = state.event.type.includes(\"POINTER\")\n if (pointer || !ctx.highlightedValue) return\n\n const itemEl = dom.getHighlightedItemEl(ctx)\n const contentEl = dom.getContentEl(ctx)\n\n if (ctx.scrollToIndexFn) {\n const highlightedIndex = ctx.collection.indexOf(ctx.highlightedValue)\n ctx.scrollToIndexFn({ index: highlightedIndex, immediate })\n return\n }\n\n const rafCleanup = raf(() => {\n scrollIntoView(itemEl, { rootEl: contentEl, block: \"nearest\" })\n })\n cleanups.push(rafCleanup)\n }\n\n const rafCleanup = raf(() => exec(true))\n cleanups.push(rafCleanup)\n\n const observerCleanup = observeAttributes(inputEl, {\n attributes: [\"aria-activedescendant\"],\n callback: () => exec(false),\n })\n cleanups.push(observerCleanup)\n\n return () => {\n cleanups.forEach((cleanup) => cleanup())\n }\n },\n },\n\n actions: {\n reposition(ctx, evt) {\n const controlEl = () => dom.getControlEl(ctx)\n const positionerEl = () => dom.getPositionerEl(ctx)\n getPlacement(controlEl, positionerEl, {\n ...ctx.positioning,\n ...evt.options,\n defer: true,\n listeners: false,\n onComplete(data) {\n ctx.currentPlacement = data.placement\n },\n })\n },\n setHighlightedItem(ctx, evt) {\n if (evt.value == null) return\n set.highlightedValue(ctx, evt.value)\n },\n clearHighlightedItem(ctx) {\n set.highlightedValue(ctx, null, true)\n },\n selectHighlightedItem(ctx) {\n set.value(ctx, ctx.highlightedValue)\n },\n selectItem(ctx, evt) {\n if (evt.value == null) return\n set.value(ctx, evt.value)\n },\n clearItem(ctx, evt) {\n if (evt.value == null) return\n const value = ctx.value.filter((v) => v !== evt.value)\n set.value(ctx, value)\n },\n setInitialFocus(ctx) {\n raf(() => {\n dom.focusInputEl(ctx)\n })\n },\n setFinalFocus(ctx) {\n raf(() => {\n const triggerEl = dom.getTriggerEl(ctx)\n if (triggerEl?.dataset.focusable == null) {\n dom.focusInputEl(ctx)\n } else {\n dom.focusTriggerEl(ctx)\n }\n })\n },\n syncInputValue(ctx) {\n const inputEl = dom.getInputEl(ctx)\n if (!inputEl) return\n\n inputEl.value = ctx.inputValue\n\n queueMicrotask(() => {\n const { selectionStart, selectionEnd } = inputEl\n\n if (Math.abs((selectionEnd ?? 0) - (selectionStart ?? 0)) !== 0) return\n if (selectionStart !== 0) return\n\n inputEl.setSelectionRange(inputEl.value.length, inputEl.value.length)\n })\n },\n setInputValue(ctx, evt) {\n set.inputValue(ctx, evt.value)\n },\n clearInputValue(ctx) {\n set.inputValue(ctx, \"\")\n },\n revertInputValue(ctx) {\n const inputValue = match(ctx.selectionBehavior, {\n replace: ctx.hasSelectedItems ? ctx.valueAsString : \"\",\n preserve: ctx.inputValue,\n clear: \"\",\n })\n\n set.inputValue(ctx, inputValue)\n },\n syncInitialValues(ctx) {\n const selectedItems = ctx.collection.items(ctx.value)\n const valueAsString = ctx.collection.itemsToString(selectedItems)\n\n ctx.highlightedItem = ctx.collection.item(ctx.highlightedValue)\n ctx.selectedItems = selectedItems\n ctx.valueAsString = valueAsString\n\n ctx.inputValue = match(ctx.selectionBehavior, {\n preserve: ctx.inputValue || valueAsString,\n replace: valueAsString,\n clear: \"\",\n })\n },\n syncSelectionBehavior(ctx) {\n if (ctx.multiple) {\n ctx.selectionBehavior = \"clear\"\n }\n },\n setSelectedItems(ctx, evt) {\n if (!isArray(evt.value)) return\n set.value(ctx, evt.value)\n },\n clearSelectedItems(ctx) {\n set.value(ctx, [])\n },\n scrollContentToTop(ctx) {\n if (ctx.scrollToIndexFn) {\n ctx.scrollToIndexFn({ index: 0, immediate: true })\n } else {\n const contentEl = dom.getContentEl(ctx)\n if (!contentEl) return\n contentEl.scrollTop = 0\n }\n },\n invokeOnOpen(ctx) {\n ctx.onOpenChange?.({ open: true })\n },\n invokeOnClose(ctx) {\n ctx.onOpenChange?.({ open: false })\n },\n highlightFirstItem(ctx) {\n raf(() => {\n const value = ctx.collection.first()\n set.highlightedValue(ctx, value)\n })\n },\n highlightFirstItemIfNeeded(ctx) {\n if (!ctx.autoHighlight) return\n raf(() => {\n const value = ctx.collection.first()\n set.highlightedValue(ctx, value)\n })\n },\n highlightLastItem(ctx) {\n raf(() => {\n const value = ctx.collection.last()\n set.highlightedValue(ctx, value)\n })\n },\n highlightNextItem(ctx) {\n let value: string | null = null\n if (ctx.highlightedValue) {\n value = ctx.collection.next(ctx.highlightedValue)\n if (!value && ctx.loopFocus) value = ctx.collection.first()\n } else {\n value = ctx.collection.first()\n }\n set.highlightedValue(ctx, value)\n },\n highlightPrevItem(ctx) {\n let value: string | null = null\n if (ctx.highlightedValue) {\n value = ctx.collection.prev(ctx.highlightedValue)\n if (!value && ctx.loopFocus) value = ctx.collection.last()\n } else {\n value = ctx.collection.last()\n }\n set.highlightedValue(ctx, value)\n },\n highlightFirstSelectedItem(ctx) {\n raf(() => {\n const [value] = ctx.collection.sort(ctx.value)\n set.highlightedValue(ctx, value)\n })\n },\n highlightFirstOrSelectedItem(ctx) {\n raf(() => {\n let value: string | null = null\n if (ctx.hasSelectedItems) {\n value = ctx.collection.sort(ctx.value)[0]\n } else {\n value = ctx.collection.first()\n }\n set.highlightedValue(ctx, value)\n })\n },\n highlightLastOrSelectedItem(ctx) {\n raf(() => {\n let value: string | null = null\n if (ctx.hasSelectedItems) {\n value = ctx.collection.sort(ctx.value)[0]\n } else {\n value = ctx.collection.last()\n }\n set.highlightedValue(ctx, value)\n })\n },\n autofillInputValue(ctx, evt) {\n const inputEl = dom.getInputEl(ctx)\n if (!ctx.autoComplete || !inputEl || !evt.keypress) return\n const valueText = ctx.collection.valueToString(ctx.highlightedValue)\n raf(() => {\n inputEl.value = valueText || ctx.inputValue\n })\n },\n setCollection(ctx, evt) {\n ctx.collection = evt.value\n },\n syncSelectedItems(ctx) {\n sync.valueChange(ctx)\n },\n syncHighlightedItem(ctx) {\n sync.highlightChange(ctx)\n },\n toggleVisibility(ctx, evt, { send }) {\n send({ type: ctx.open ? \"CONTROLLED.OPEN\" : \"CONTROLLED.CLOSE\", previousEvent: evt })\n },\n },\n },\n )\n}\n\nconst sync = {\n valueChange: (ctx: MachineContext) => {\n // side effect\n const prevSelectedItems = ctx.selectedItems\n ctx.selectedItems = ctx.value.map((v) => {\n const foundItem = prevSelectedItems.find((item) => ctx.collection.itemToValue(item) === v)\n if (foundItem) return foundItem\n return ctx.collection.item(v)\n })\n\n // set valueAsString\n const valueAsString = ctx.collection.itemsToString(ctx.selectedItems)\n ctx.valueAsString = valueAsString\n\n // set inputValue\n let inputValue: string | undefined\n if (ctx.getSelectionValue) {\n //\n inputValue = ctx.getSelectionValue({\n inputValue: ctx.inputValue,\n selectedItems: Array.from(ctx.selectedItems),\n valueAsString,\n })\n //\n } else {\n //\n inputValue = match(ctx.selectionBehavior, {\n replace: ctx.valueAsString,\n preserve: ctx.inputValue,\n clear: \"\",\n })\n }\n\n set.inputValue(ctx, inputValue)\n },\n highlightChange: (ctx: MachineContext) => {\n ctx.highlightedItem = ctx.collection.item(ctx.highlightedValue)\n },\n}\n\nconst invoke = {\n valueChange: (ctx: MachineContext) => {\n sync.valueChange(ctx)\n ctx.onValueChange?.({\n value: Array.from(ctx.value),\n items: Array.from(ctx.selectedItems),\n })\n },\n highlightChange: (ctx: MachineContext) => {\n sync.highlightChange(ctx)\n ctx.onHighlightChange?.({\n highlightedValue: ctx.highlightedValue,\n highlightedItem: ctx.highlightedItem,\n })\n },\n inputChange: (ctx: MachineContext) => {\n ctx.onInputValueChange?.({ inputValue: ctx.inputValue })\n },\n}\n\nconst set = {\n value: (ctx: MachineContext, value: string | string[] | null | undefined, force = false) => {\n if (isEqual(ctx.value, value)) return\n if (value == null && !force) return\n if (value == null && force) {\n ctx.value = []\n invoke.valueChange(ctx)\n return\n }\n if (isArray(value)) {\n ctx.value = value\n } else if (value != null) {\n ctx.value = ctx.multiple ? addOrRemove(ctx.value, value) : [value]\n }\n invoke.valueChange(ctx)\n },\n highlightedValue: (ctx: MachineContext, value: string | null | undefined, force = false) => {\n if (isEqual(ctx.highlightedValue, value)) return\n if (!value && !force) return\n ctx.highlightedValue = value || null\n invoke.highlightChange(ctx)\n },\n inputValue: (ctx: MachineContext, value: string) => {\n if (isEqual(ctx.inputValue, value)) return\n ctx.inputValue = value\n invoke.inputChange(ctx)\n },\n}\n"],"mappings":"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","names":["import_dom_query","collection","disabled","event","import_core","import_dom_query","import_popper","ctx","rafCleanup"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/combobox.anatomy.ts","../src/combobox.collection.ts","../src/combobox.connect.ts","../src/combobox.dom.ts","../src/combobox.machine.ts"],"sourcesContent":["export type { FocusOutsideEvent, InteractOutsideEvent, PointerDownOutsideEvent } from \"@zag-js/dismissable\"\nexport { anatomy } from \"./combobox.anatomy\"\nexport { collection } from \"./combobox.collection\"\nexport { connect } from \"./combobox.connect\"\nexport { machine } from \"./combobox.machine\"\nexport type {\n MachineApi as Api,\n CollectionItem,\n CollectionOptions,\n UserDefinedContext as Context,\n ElementIds,\n HighlightChangeDetails,\n InputValueChangeDetails,\n IntlTranslations,\n ItemGroupLabelProps,\n ItemGroupProps,\n ItemProps,\n ItemState,\n OpenChangeDetails,\n Placement,\n PositioningOptions,\n ScrollToIndexDetails,\n SelectionValueDetails,\n TriggerProps,\n ValueChangeDetails,\n} from \"./combobox.types\"\n","import { createAnatomy } from \"@zag-js/anatomy\"\n\nexport const anatomy = createAnatomy(\"combobox\").parts(\n \"root\",\n \"label\",\n \"input\",\n \"positioner\",\n \"control\",\n \"trigger\",\n \"content\",\n \"clearTrigger\",\n \"item\",\n \"itemText\",\n \"itemIndicator\",\n \"itemGroup\",\n \"itemGroupLabel\",\n)\nexport const parts = anatomy.build()\n","import { Collection, type CollectionItem, type CollectionOptions } from \"@zag-js/collection\"\nimport { ref } from \"@zag-js/core\"\n\nexport const collection = <T extends CollectionItem>(options: CollectionOptions<T>): Collection<T> => {\n return ref(new Collection(options))\n}\n\ncollection.empty = (): Collection<CollectionItem> => {\n return ref(new Collection<CollectionItem>({ items: [] }))\n}\n","import { clickIfLink, getEventKey, isContextMenuEvent, isLeftClick, type EventKeyMap } from \"@zag-js/dom-event\"\nimport { ariaAttr, dataAttr, isComposingEvent, isDownloadingEvent, isOpeningInNewTab } from \"@zag-js/dom-query\"\nimport { getPlacementStyles } from \"@zag-js/popper\"\nimport type { NormalizeProps, PropTypes } from \"@zag-js/types\"\nimport { parts } from \"./combobox.anatomy\"\nimport { dom } from \"./combobox.dom\"\nimport type { CollectionItem, ItemProps, ItemState, MachineApi, Send, State } from \"./combobox.types\"\n\nexport function connect<T extends PropTypes, V extends CollectionItem>(\n state: State,\n send: Send,\n normalize: NormalizeProps<T>,\n): MachineApi<T, V> {\n const translations = state.context.translations\n const collection = state.context.collection\n\n const disabled = state.context.disabled\n const interactive = state.context.isInteractive\n const invalid = state.context.invalid\n const readOnly = state.context.readOnly\n\n const open = state.hasTag(\"open\")\n const focused = state.hasTag(\"focused\")\n const composite = state.context.composite\n const highlightedValue = state.context.highlightedValue\n\n const popperStyles = getPlacementStyles({\n ...state.context.positioning,\n placement: state.context.currentPlacement,\n })\n\n function getItemState(props: ItemProps): ItemState {\n const { item } = props\n const disabled = collection.isItemDisabled(item)\n const value = collection.itemToValue(item)\n return {\n value,\n disabled: Boolean(disabled || disabled),\n highlighted: highlightedValue === value,\n selected: state.context.value.includes(value),\n }\n }\n\n return {\n focused,\n open,\n inputValue: state.context.inputValue,\n highlightedValue,\n highlightedItem: state.context.highlightedItem,\n value: state.context.value,\n valueAsString: state.context.valueAsString,\n hasSelectedItems: state.context.hasSelectedItems,\n selectedItems: state.context.selectedItems,\n collection: state.context.collection,\n reposition(options = {}) {\n send({ type: \"POSITIONING.SET\", options })\n },\n setCollection(collection) {\n send({ type: \"COLLECTION.SET\", value: collection })\n },\n setHighlightValue(value) {\n send({ type: \"HIGHLIGHTED_VALUE.SET\", value })\n },\n selectValue(value) {\n send({ type: \"ITEM.SELECT\", value })\n },\n setValue(value) {\n send({ type: \"VALUE.SET\", value })\n },\n setInputValue(value) {\n send({ type: \"INPUT_VALUE.SET\", value })\n },\n clearValue(value) {\n if (value != null) {\n send({ type: \"ITEM.CLEAR\", value })\n } else {\n send(\"VALUE.CLEAR\")\n }\n },\n focus() {\n dom.getInputEl(state.context)?.focus()\n },\n setOpen(nextOpen) {\n if (nextOpen === open) return\n send(nextOpen ? \"OPEN\" : \"CLOSE\")\n },\n rootProps: normalize.element({\n ...parts.root.attrs,\n dir: state.context.dir,\n id: dom.getRootId(state.context),\n \"data-invalid\": dataAttr(invalid),\n \"data-readonly\": dataAttr(readOnly),\n }),\n\n labelProps: normalize.label({\n ...parts.label.attrs,\n dir: state.context.dir,\n htmlFor: dom.getInputId(state.context),\n id: dom.getLabelId(state.context),\n \"data-readonly\": dataAttr(readOnly),\n \"data-disabled\": dataAttr(disabled),\n \"data-invalid\": dataAttr(invalid),\n \"data-focus\": dataAttr(focused),\n onClick(event) {\n if (composite) return\n event.preventDefault()\n dom.getTriggerEl(state.context)?.focus({ preventScroll: true })\n },\n }),\n\n controlProps: normalize.element({\n ...parts.control.attrs,\n dir: state.context.dir,\n id: dom.getControlId(state.context),\n \"data-state\": open ? \"open\" : \"closed\",\n \"data-focus\": dataAttr(focused),\n \"data-disabled\": dataAttr(disabled),\n \"data-invalid\": dataAttr(invalid),\n }),\n\n positionerProps: normalize.element({\n ...parts.positioner.attrs,\n dir: state.context.dir,\n id: dom.getPositionerId(state.context),\n style: popperStyles.floating,\n }),\n\n inputProps: normalize.input({\n ...parts.input.attrs,\n dir: state.context.dir,\n \"aria-invalid\": ariaAttr(invalid),\n \"data-invalid\": dataAttr(invalid),\n name: state.context.name,\n form: state.context.form,\n disabled: disabled,\n autoFocus: state.context.autoFocus,\n autoComplete: \"off\",\n autoCorrect: \"off\",\n autoCapitalize: \"none\",\n spellCheck: \"false\",\n readOnly: readOnly,\n placeholder: state.context.placeholder,\n id: dom.getInputId(state.context),\n type: \"text\",\n role: \"combobox\",\n defaultValue: state.context.inputValue,\n \"aria-autocomplete\": state.context.autoComplete ? \"both\" : \"list\",\n \"aria-controls\": dom.getContentId(state.context),\n \"aria-expanded\": open,\n \"data-state\": open ? \"open\" : \"closed\",\n \"aria-activedescendant\": highlightedValue ? dom.getItemId(state.context, highlightedValue) : undefined,\n onClick(event) {\n if (event.defaultPrevented) return\n if (!state.context.openOnClick) return\n if (!interactive) return\n send(\"INPUT.CLICK\")\n },\n onFocus() {\n if (disabled) return\n send(\"INPUT.FOCUS\")\n },\n onBlur() {\n if (disabled) return\n send(\"INPUT.BLUR\")\n },\n onChange(event) {\n send({ type: \"INPUT.CHANGE\", value: event.currentTarget.value })\n },\n onKeyDown(event) {\n if (event.defaultPrevented) return\n if (!interactive) return\n\n if (event.ctrlKey || event.shiftKey || isComposingEvent(event)) return\n\n const openOnKeyPress = state.context.openOnKeyPress\n const isModifierKey = event.ctrlKey || event.metaKey || event.shiftKey\n const keypress = true\n\n const keymap: EventKeyMap = {\n ArrowDown(event) {\n if (!openOnKeyPress && !open) return\n send({ type: event.altKey ? \"OPEN\" : \"INPUT.ARROW_DOWN\", keypress })\n event.preventDefault()\n },\n ArrowUp() {\n if (!openOnKeyPress && !open) return\n send({ type: event.altKey ? \"CLOSE\" : \"INPUT.ARROW_UP\", keypress })\n event.preventDefault()\n },\n Home(event) {\n if (isModifierKey) return\n send({ type: \"INPUT.HOME\", keypress })\n if (open) {\n event.preventDefault()\n }\n },\n End(event) {\n if (isModifierKey) return\n send({ type: \"INPUT.END\", keypress })\n if (open) {\n event.preventDefault()\n }\n },\n Enter(event) {\n send({ type: \"INPUT.ENTER\", keypress })\n if (open) {\n event.preventDefault()\n }\n const itemEl = dom.getHighlightedItemEl(state.context)\n clickIfLink(itemEl)\n },\n Escape() {\n send({ type: \"INPUT.ESCAPE\", keypress })\n event.preventDefault()\n },\n }\n\n const key = getEventKey(event, state.context)\n const exec = keymap[key]\n exec?.(event)\n },\n }),\n\n getTriggerProps(props = {}) {\n return normalize.button({\n ...parts.trigger.attrs,\n dir: state.context.dir,\n id: dom.getTriggerId(state.context),\n \"aria-haspopup\": composite ? \"listbox\" : \"dialog\",\n type: \"button\",\n tabIndex: props.focusable ? undefined : -1,\n \"aria-label\": translations.triggerLabel,\n \"aria-expanded\": open,\n \"data-state\": open ? \"open\" : \"closed\",\n \"aria-controls\": open ? dom.getContentId(state.context) : undefined,\n disabled,\n \"data-focusable\": dataAttr(props.focusable),\n \"data-readonly\": dataAttr(readOnly),\n \"data-disabled\": dataAttr(disabled),\n onFocus() {\n if (!props.focusable) return\n send({ type: \"INPUT.FOCUS\", src: \"trigger\" })\n },\n onClick(event) {\n if (event.defaultPrevented) return\n if (!interactive) return\n if (!isLeftClick(event)) return\n send(\"TRIGGER.CLICK\")\n },\n onPointerDown(event) {\n if (!interactive) return\n if (event.pointerType === \"touch\") return\n event.preventDefault()\n queueMicrotask(() => {\n dom.getInputEl(state.context)?.focus({ preventScroll: true })\n })\n },\n onKeyDown(event) {\n if (event.defaultPrevented) return\n if (composite) return\n\n const keyMap: EventKeyMap = {\n ArrowDown() {\n send({ type: \"INPUT.ARROW_DOWN\", src: \"trigger\" })\n },\n ArrowUp() {\n send({ type: \"INPUT.ARROW_UP\", src: \"trigger\" })\n },\n }\n\n const key = getEventKey(event, state.context)\n const exec = keyMap[key]\n\n if (exec) {\n exec(event)\n event.preventDefault()\n }\n },\n })\n },\n\n contentProps: normalize.element({\n ...parts.content.attrs,\n dir: state.context.dir,\n id: dom.getContentId(state.context),\n role: !composite ? \"dialog\" : \"listbox\",\n tabIndex: -1,\n hidden: !open,\n \"data-state\": open ? \"open\" : \"closed\",\n \"aria-labelledby\": dom.getLabelId(state.context),\n \"aria-multiselectable\": state.context.multiple && composite ? true : undefined,\n onPointerDown(event) {\n // prevent options or elements within listbox from taking focus\n event.preventDefault()\n },\n }),\n\n listProps: normalize.element({\n role: !composite ? \"listbox\" : undefined,\n \"aria-labelledby\": dom.getLabelId(state.context),\n \"aria-multiselectable\": state.context.multiple && !composite ? true : undefined,\n }),\n\n clearTriggerProps: normalize.button({\n ...parts.clearTrigger.attrs,\n dir: state.context.dir,\n id: dom.getClearTriggerId(state.context),\n type: \"button\",\n tabIndex: -1,\n disabled: disabled,\n \"aria-label\": translations.clearTriggerLabel,\n \"aria-controls\": dom.getInputId(state.context),\n hidden: !state.context.value.length,\n onPointerDown(event) {\n event.preventDefault()\n },\n onClick(event) {\n if (event.defaultPrevented) return\n if (!interactive) return\n send({ type: \"VALUE.CLEAR\", src: \"clear-trigger\" })\n },\n }),\n\n getItemState,\n\n getItemProps(props) {\n const itemState = getItemState(props)\n const value = itemState.value\n\n return normalize.element({\n ...parts.item.attrs,\n dir: state.context.dir,\n id: dom.getItemId(state.context, value),\n role: \"option\",\n tabIndex: -1,\n \"data-highlighted\": dataAttr(itemState.highlighted),\n \"data-state\": itemState.selected ? \"checked\" : \"unchecked\",\n \"aria-selected\": itemState.highlighted,\n \"aria-disabled\": itemState.disabled,\n \"data-disabled\": dataAttr(itemState.disabled),\n \"data-value\": itemState.value,\n onPointerMove() {\n if (itemState.disabled) return\n if (itemState.highlighted) return\n send({ type: \"ITEM.POINTER_MOVE\", value })\n },\n onPointerLeave() {\n if (props.persistFocus) return\n if (itemState.disabled) return\n const mouseMoved = state.previousEvent.type.includes(\"POINTER\")\n if (!mouseMoved) return\n send({ type: \"ITEM.POINTER_LEAVE\", value })\n },\n onPointerUp(event) {\n if (isDownloadingEvent(event)) return\n if (isOpeningInNewTab(event)) return\n if (isContextMenuEvent(event)) return\n if (itemState.disabled) return\n send({ type: \"ITEM.CLICK\", src: \"pointerup\", value })\n },\n onTouchEnd(event) {\n // prevent clicking elements behind content\n event.preventDefault()\n event.stopPropagation()\n },\n })\n },\n\n getItemTextProps(props) {\n const itemState = getItemState(props)\n return normalize.element({\n ...parts.itemText.attrs,\n dir: state.context.dir,\n \"data-disabled\": dataAttr(itemState.disabled),\n \"data-highlighted\": dataAttr(itemState.highlighted),\n })\n },\n getItemIndicatorProps(props) {\n const itemState = getItemState(props)\n return normalize.element({\n \"aria-hidden\": true,\n ...parts.itemIndicator.attrs,\n dir: state.context.dir,\n \"data-state\": itemState.selected ? \"checked\" : \"unchecked\",\n hidden: !itemState.selected,\n })\n },\n\n getItemGroupProps(props) {\n const { id } = props\n return normalize.element({\n ...parts.itemGroup.attrs,\n dir: state.context.dir,\n id: dom.getItemGroupId(state.context, id),\n \"aria-labelledby\": dom.getItemGroupLabelId(state.context, id),\n })\n },\n\n getItemGroupLabelProps(props) {\n const { htmlFor } = props\n return normalize.element({\n ...parts.itemGroupLabel.attrs,\n dir: state.context.dir,\n id: dom.getItemGroupLabelId(state.context, htmlFor),\n role: \"group\",\n })\n },\n }\n}\n","import { createScope, query } from \"@zag-js/dom-query\"\nimport type { MachineContext as Ctx } from \"./combobox.types\"\n\nexport const dom = createScope({\n getRootId: (ctx: Ctx) => ctx.ids?.root ?? `combobox:${ctx.id}`,\n getLabelId: (ctx: Ctx) => ctx.ids?.label ?? `combobox:${ctx.id}:label`,\n getControlId: (ctx: Ctx) => ctx.ids?.control ?? `combobox:${ctx.id}:control`,\n getInputId: (ctx: Ctx) => ctx.ids?.input ?? `combobox:${ctx.id}:input`,\n getContentId: (ctx: Ctx) => ctx.ids?.content ?? `combobox:${ctx.id}:content`,\n getPositionerId: (ctx: Ctx) => ctx.ids?.positioner ?? `combobox:${ctx.id}:popper`,\n getTriggerId: (ctx: Ctx) => ctx.ids?.trigger ?? `combobox:${ctx.id}:toggle-btn`,\n getClearTriggerId: (ctx: Ctx) => ctx.ids?.clearTrigger ?? `combobox:${ctx.id}:clear-btn`,\n getItemGroupId: (ctx: Ctx, id: string | number) => ctx.ids?.itemGroup?.(id) ?? `combobox:${ctx.id}:optgroup:${id}`,\n getItemGroupLabelId: (ctx: Ctx, id: string | number) =>\n ctx.ids?.itemGroupLabel?.(id) ?? `combobox:${ctx.id}:optgroup-label:${id}`,\n getItemId: (ctx: Ctx, id: string) => `combobox:${ctx.id}:option:${id}`,\n\n getContentEl: (ctx: Ctx) => dom.getById(ctx, dom.getContentId(ctx)),\n getInputEl: (ctx: Ctx) => dom.getById<HTMLInputElement>(ctx, dom.getInputId(ctx)),\n getPositionerEl: (ctx: Ctx) => dom.getById(ctx, dom.getPositionerId(ctx)),\n getControlEl: (ctx: Ctx) => dom.getById(ctx, dom.getControlId(ctx)),\n getTriggerEl: (ctx: Ctx) => dom.getById(ctx, dom.getTriggerId(ctx)),\n getClearTriggerEl: (ctx: Ctx) => dom.getById(ctx, dom.getClearTriggerId(ctx)),\n getHighlightedItemEl: (ctx: Ctx) => {\n const value = ctx.highlightedValue\n if (value == null) return\n return query(dom.getContentEl(ctx), `[role=option][data-value=\"${CSS.escape(value)}\"`)\n },\n\n focusInputEl: (ctx: Ctx) => {\n const inputEl = dom.getInputEl(ctx)\n if (dom.getActiveElement(ctx) === inputEl) return\n inputEl?.focus({ preventScroll: true })\n },\n focusTriggerEl: (ctx: Ctx) => {\n const triggerEl = dom.getTriggerEl(ctx)\n if (dom.getActiveElement(ctx) === triggerEl) return\n triggerEl?.focus({ preventScroll: true })\n },\n})\n","import { ariaHidden } from \"@zag-js/aria-hidden\"\nimport { createMachine, guards } from \"@zag-js/core\"\nimport { trackDismissableElement } from \"@zag-js/dismissable\"\nimport { observeAttributes, observeChildren, raf, scrollIntoView } from \"@zag-js/dom-query\"\nimport { getPlacement } from \"@zag-js/popper\"\nimport { addOrRemove, compact, isArray, isBoolean, isEqual, match } from \"@zag-js/utils\"\nimport { collection } from \"./combobox.collection\"\nimport { dom } from \"./combobox.dom\"\nimport type { CollectionItem, MachineContext, MachineState, UserDefinedContext } from \"./combobox.types\"\n\nconst { and, not } = guards\n\nexport function machine<T extends CollectionItem>(userContext: UserDefinedContext<T>) {\n const ctx = compact(userContext)\n return createMachine<MachineContext, MachineState>(\n {\n id: \"combobox\",\n initial: ctx.open ? \"suggesting\" : \"idle\",\n context: {\n loopFocus: true,\n openOnClick: false,\n value: [],\n highlightedValue: null,\n inputValue: \"\",\n allowCustomValue: false,\n closeOnSelect: !ctx.multiple,\n inputBehavior: \"none\",\n selectionBehavior: \"replace\",\n openOnKeyPress: true,\n openOnChange: true,\n composite: true,\n ...ctx,\n highlightedItem: null,\n selectedItems: [],\n valueAsString: \"\",\n collection: ctx.collection ?? collection.empty(),\n positioning: {\n placement: \"bottom\",\n flip: false,\n sameWidth: true,\n ...ctx.positioning,\n },\n translations: {\n triggerLabel: \"Toggle suggestions\",\n clearTriggerLabel: \"Clear value\",\n ...ctx.translations,\n },\n },\n\n created: [\"syncInitialValues\", \"syncSelectionBehavior\"],\n\n computed: {\n isInputValueEmpty: (ctx) => ctx.inputValue.length === 0,\n isInteractive: (ctx) => !(ctx.readOnly || ctx.disabled),\n autoComplete: (ctx) => ctx.inputBehavior === \"autocomplete\",\n autoHighlight: (ctx) => ctx.inputBehavior === \"autohighlight\",\n hasSelectedItems: (ctx) => ctx.value.length > 0,\n },\n\n watch: {\n value: [\"syncSelectedItems\"],\n inputValue: [\"syncInputValue\"],\n highlightedValue: [\"syncHighlightedItem\", \"autofillInputValue\"],\n multiple: [\"syncSelectionBehavior\"],\n open: [\"toggleVisibility\"],\n },\n\n on: {\n \"HIGHLIGHTED_VALUE.SET\": {\n actions: [\"setHighlightedItem\"],\n },\n \"ITEM.SELECT\": {\n actions: [\"selectItem\"],\n },\n \"ITEM.CLEAR\": {\n actions: [\"clearItem\"],\n },\n \"VALUE.SET\": {\n actions: [\"setSelectedItems\"],\n },\n \"INPUT_VALUE.SET\": {\n actions: \"setInputValue\",\n },\n \"COLLECTION.SET\": {\n actions: [\"setCollection\"],\n },\n \"POSITIONING.SET\": {\n actions: [\"reposition\"],\n },\n },\n\n states: {\n idle: {\n tags: [\"idle\", \"closed\"],\n entry: [\"scrollContentToTop\", \"clearHighlightedItem\"],\n on: {\n \"CONTROLLED.OPEN\": {\n target: \"interacting\",\n },\n \"TRIGGER.CLICK\": [\n {\n guard: \"isOpenControlled\",\n actions: [\"setInitialFocus\", \"highlightFirstSelectedItem\", \"invokeOnOpen\"],\n },\n {\n target: \"interacting\",\n actions: [\"setInitialFocus\", \"highlightFirstSelectedItem\", \"invokeOnOpen\"],\n },\n ],\n \"INPUT.CLICK\": [\n {\n guard: \"isOpenControlled\",\n actions: [\"highlightFirstSelectedItem\", \"invokeOnOpen\"],\n },\n {\n target: \"interacting\",\n actions: [\"highlightFirstSelectedItem\", \"invokeOnOpen\"],\n },\n ],\n \"INPUT.FOCUS\": {\n target: \"focused\",\n },\n OPEN: [\n {\n guard: \"isOpenControlled\",\n actions: [\"invokeOnOpen\"],\n },\n {\n target: \"interacting\",\n actions: [\"invokeOnOpen\"],\n },\n ],\n \"VALUE.CLEAR\": {\n target: \"focused\",\n actions: [\"clearInputValue\", \"clearSelectedItems\", \"setInitialFocus\"],\n },\n },\n },\n\n focused: {\n tags: [\"focused\", \"closed\"],\n entry: [\"scrollContentToTop\", \"clearHighlightedItem\"],\n on: {\n \"CONTROLLED.OPEN\": [\n {\n guard: \"isChangeEvent\",\n target: \"suggesting\",\n },\n {\n target: \"interacting\",\n },\n ],\n \"INPUT.CHANGE\": [\n {\n guard: and(\"isOpenControlled\", \"openOnChange\"),\n actions: [\"setInputValue\", \"invokeOnOpen\", \"highlightFirstItemIfNeeded\"],\n },\n {\n guard: \"openOnChange\",\n target: \"suggesting\",\n actions: [\"setInputValue\", \"invokeOnOpen\", \"highlightFirstItemIfNeeded\"],\n },\n {\n actions: \"setInputValue\",\n },\n ],\n \"LAYER.INTERACT_OUTSIDE\": {\n target: \"idle\",\n },\n \"INPUT.ESCAPE\": {\n guard: and(\"isCustomValue\", not(\"allowCustomValue\")),\n actions: \"revertInputValue\",\n },\n \"INPUT.BLUR\": {\n target: \"idle\",\n },\n \"INPUT.CLICK\": [\n {\n guard: \"isOpenControlled\",\n actions: [\"highlightFirstSelectedItem\", \"invokeOnOpen\"],\n },\n {\n target: \"interacting\",\n actions: [\"highlightFirstSelectedItem\", \"invokeOnOpen\"],\n },\n ],\n \"TRIGGER.CLICK\": [\n {\n guard: \"isOpenControlled\",\n actions: [\"setInitialFocus\", \"highlightFirstSelectedItem\", \"invokeOnOpen\"],\n },\n {\n target: \"interacting\",\n actions: [\"setInitialFocus\", \"highlightFirstSelectedItem\", \"invokeOnOpen\"],\n },\n ],\n \"INPUT.ARROW_DOWN\": [\n // == group 1 ==\n {\n guard: and(\"isOpenControlled\", \"autoComplete\"),\n actions: [\"invokeOnOpen\"],\n },\n {\n guard: \"autoComplete\",\n target: \"interacting\",\n actions: [\"invokeOnOpen\"],\n },\n // == group 2 ==\n {\n guard: \"isOpenControlled\",\n actions: [\"highlightFirstOrSelectedItem\", \"invokeOnOpen\"],\n },\n {\n target: \"interacting\",\n actions: [\"highlightFirstOrSelectedItem\", \"invokeOnOpen\"],\n },\n ],\n \"INPUT.ARROW_UP\": [\n // == group 1 ==\n {\n guard: \"autoComplete\",\n target: \"interacting\",\n actions: \"invokeOnOpen\",\n },\n {\n guard: \"autoComplete\",\n target: \"interacting\",\n actions: \"invokeOnOpen\",\n },\n // == group 2 ==\n {\n target: \"interacting\",\n actions: [\"highlightLastOrSelectedItem\", \"invokeOnOpen\"],\n },\n {\n target: \"interacting\",\n actions: [\"highlightLastOrSelectedItem\", \"invokeOnOpen\"],\n },\n ],\n OPEN: [\n {\n guard: \"isOpenControlled\",\n actions: [\"invokeOnOpen\"],\n },\n {\n target: \"interacting\",\n actions: [\"invokeOnOpen\"],\n },\n ],\n \"VALUE.CLEAR\": {\n actions: [\"clearInputValue\", \"clearSelectedItems\"],\n },\n },\n },\n\n interacting: {\n tags: [\"open\", \"focused\"],\n entry: [\"setInitialFocus\"],\n activities: [\"scrollToHighlightedItem\", \"trackDismissableLayer\", \"computePlacement\", \"hideOtherElements\"],\n on: {\n \"CONTROLLED.CLOSE\": [\n {\n guard: \"restoreFocus\",\n target: \"focused\",\n actions: [\"setFinalFocus\"],\n },\n {\n target: \"idle\",\n },\n ],\n \"INPUT.HOME\": {\n actions: [\"highlightFirstItem\"],\n },\n \"INPUT.END\": {\n actions: [\"highlightLastItem\"],\n },\n \"INPUT.ARROW_DOWN\": [\n {\n guard: and(\"autoComplete\", \"isLastItemHighlighted\"),\n actions: [\"clearHighlightedItem\", \"scrollContentToTop\"],\n },\n {\n actions: [\"highlightNextItem\"],\n },\n ],\n \"INPUT.ARROW_UP\": [\n {\n guard: and(\"autoComplete\", \"isFirstItemHighlighted\"),\n actions: \"clearHighlightedItem\",\n },\n {\n actions: \"highlightPrevItem\",\n },\n ],\n \"INPUT.ENTER\": [\n {\n guard: and(\"isOpenControlled\", \"closeOnSelect\"),\n actions: [\"selectHighlightedItem\", \"invokeOnClose\"],\n },\n {\n guard: \"closeOnSelect\",\n target: \"focused\",\n actions: [\"selectHighlightedItem\", \"invokeOnClose\", \"setFinalFocus\"],\n },\n {\n actions: [\"selectHighlightedItem\"],\n },\n ],\n \"INPUT.CHANGE\": [\n {\n guard: \"autoComplete\",\n target: \"suggesting\",\n actions: [\"setInputValue\", \"invokeOnOpen\"],\n },\n {\n target: \"suggesting\",\n actions: [\"clearHighlightedItem\", \"setInputValue\", \"invokeOnOpen\"],\n },\n ],\n \"ITEM.POINTER_MOVE\": {\n actions: [\"setHighlightedItem\"],\n },\n \"ITEM.POINTER_LEAVE\": {\n actions: [\"clearHighlightedItem\"],\n },\n \"ITEM.CLICK\": [\n {\n guard: and(\"isOpenControlled\", \"closeOnSelect\"),\n actions: [\"selectItem\", \"invokeOnClose\"],\n },\n {\n guard: \"closeOnSelect\",\n target: \"focused\",\n actions: [\"selectItem\", \"invokeOnClose\", \"setFinalFocus\"],\n },\n {\n actions: [\"selectItem\"],\n },\n ],\n \"LAYER.ESCAPE\": [\n {\n guard: and(\"isOpenControlled\", \"autoComplete\"),\n actions: [\"syncInputValue\", \"invokeOnClose\"],\n },\n {\n guard: \"autoComplete\",\n target: \"focused\",\n actions: [\"syncInputValue\", \"invokeOnClose\"],\n },\n {\n guard: \"isOpenControlled\",\n actions: \"invokeOnClose\",\n },\n {\n target: \"focused\",\n actions: [\"invokeOnClose\", \"setFinalFocus\"],\n },\n ],\n \"TRIGGER.CLICK\": [\n {\n guard: \"isOpenControlled\",\n actions: \"invokeOnClose\",\n },\n {\n target: \"focused\",\n actions: \"invokeOnClose\",\n },\n ],\n \"LAYER.INTERACT_OUTSIDE\": [\n // == group 1 ==\n {\n guard: and(\"isOpenControlled\", \"isCustomValue\", not(\"allowCustomValue\")),\n actions: [\"revertInputValue\", \"invokeOnClose\"],\n },\n {\n guard: and(\"isCustomValue\", not(\"allowCustomValue\")),\n target: \"idle\",\n actions: [\"revertInputValue\", \"invokeOnClose\"],\n },\n // == group 2 ==\n {\n guard: \"isOpenControlled\",\n actions: \"invokeOnClose\",\n },\n {\n target: \"idle\",\n actions: \"invokeOnClose\",\n },\n ],\n CLOSE: [\n {\n guard: \"isOpenControlled\",\n actions: [\"invokeOnClose\"],\n },\n {\n target: \"focused\",\n actions: [\"invokeOnClose\", \"setFinalFocus\"],\n },\n ],\n \"VALUE.CLEAR\": [\n {\n guard: \"isOpenControlled\",\n actions: [\"clearInputValue\", \"clearSelectedItems\", \"invokeOnClose\"],\n },\n {\n target: \"focused\",\n actions: [\"clearInputValue\", \"clearSelectedItems\", \"invokeOnClose\", \"setFinalFocus\"],\n },\n ],\n },\n },\n\n suggesting: {\n tags: [\"open\", \"focused\"],\n activities: [\n \"trackDismissableLayer\",\n \"scrollToHighlightedItem\",\n \"computePlacement\",\n \"trackChildNodes\",\n \"hideOtherElements\",\n ],\n entry: [\"setInitialFocus\"],\n on: {\n \"CONTROLLED.CLOSE\": [\n {\n guard: \"restoreFocus\",\n target: \"focused\",\n actions: [\"setFinalFocus\"],\n },\n {\n target: \"idle\",\n },\n ],\n CHILDREN_CHANGE: {\n actions: [\"highlightFirstItem\"],\n },\n \"INPUT.ARROW_DOWN\": {\n target: \"interacting\",\n actions: [\"highlightNextItem\"],\n },\n \"INPUT.ARROW_UP\": {\n target: \"interacting\",\n actions: [\"highlightPrevItem\"],\n },\n \"INPUT.HOME\": {\n target: \"interacting\",\n actions: [\"highlightFirstItem\"],\n },\n \"INPUT.END\": {\n target: \"interacting\",\n actions: [\"highlightLastItem\"],\n },\n \"INPUT.ENTER\": [\n {\n guard: and(\"isOpenControlled\", \"closeOnSelect\"),\n actions: [\"selectHighlightedItem\", \"invokeOnClose\"],\n },\n {\n guard: \"closeOnSelect\",\n target: \"focused\",\n actions: [\"selectHighlightedItem\", \"invokeOnClose\", \"setFinalFocus\"],\n },\n {\n actions: [\"selectHighlightedItem\"],\n },\n ],\n \"INPUT.CHANGE\": [\n {\n guard: \"autoHighlight\",\n actions: [\"setInputValue\"],\n },\n {\n actions: [\"setInputValue\"],\n },\n ],\n \"LAYER.ESCAPE\": [\n {\n guard: \"isOpenControlled\",\n actions: [\"invokeOnClose\"],\n },\n {\n target: \"focused\",\n actions: [\"invokeOnClose\"],\n },\n ],\n \"ITEM.POINTER_MOVE\": {\n target: \"interacting\",\n actions: [\"setHighlightedItem\"],\n },\n \"ITEM.POINTER_LEAVE\": {\n actions: [\"clearHighlightedItem\"],\n },\n \"LAYER.INTERACT_OUTSIDE\": [\n // == group 1 ==\n {\n guard: and(\"isOpenControlled\", \"isCustomValue\", not(\"allowCustomValue\")),\n actions: [\"revertInputValue\", \"invokeOnClose\"],\n },\n {\n guard: and(\"isCustomValue\", not(\"allowCustomValue\")),\n target: \"idle\",\n actions: [\"revertInputValue\", \"invokeOnClose\"],\n },\n // == group 2 ==\n {\n guard: \"isOpenControlled\",\n actions: [\"invokeOnClose\"],\n },\n {\n target: \"idle\",\n actions: [\"invokeOnClose\"],\n },\n ],\n \"TRIGGER.CLICK\": [\n {\n guard: \"isOpenControlled\",\n actions: [\"invokeOnClose\"],\n },\n {\n target: \"focused\",\n actions: [\"invokeOnClose\"],\n },\n ],\n \"ITEM.CLICK\": [\n {\n guard: and(\"isOpenControlled\", \"closeOnSelect\"),\n actions: [\"selectItem\", \"invokeOnClose\"],\n },\n {\n guard: \"closeOnSelect\",\n target: \"focused\",\n actions: [\"selectItem\", \"invokeOnClose\", \"setFinalFocus\"],\n },\n {\n actions: [\"selectItem\"],\n },\n ],\n CLOSE: [\n {\n guard: \"isOpenControlled\",\n actions: [\"invokeOnClose\"],\n },\n {\n target: \"focused\",\n actions: [\"invokeOnClose\", \"setFinalFocus\"],\n },\n ],\n \"VALUE.CLEAR\": [\n {\n guard: \"isOpenControlled\",\n actions: [\"clearInputValue\", \"clearSelectedItems\", \"invokeOnClose\"],\n },\n {\n target: \"focused\",\n actions: [\"clearInputValue\", \"clearSelectedItems\", \"invokeOnClose\", \"setFinalFocus\"],\n },\n ],\n },\n },\n },\n },\n\n {\n guards: {\n isInputValueEmpty: (ctx) => ctx.isInputValueEmpty,\n autoComplete: (ctx) => ctx.autoComplete && !ctx.multiple,\n autoHighlight: (ctx) => ctx.autoHighlight,\n isFirstItemHighlighted: (ctx) => ctx.collection.first() === ctx.highlightedValue,\n isLastItemHighlighted: (ctx) => ctx.collection.last() === ctx.highlightedValue,\n isCustomValue: (ctx) => ctx.inputValue !== ctx.valueAsString,\n allowCustomValue: (ctx) => !!ctx.allowCustomValue,\n hasHighlightedItem: (ctx) => ctx.highlightedValue != null,\n closeOnSelect: (ctx) => !!ctx.closeOnSelect,\n isOpenControlled: (ctx) => !!ctx[\"open.controlled\"],\n openOnChange: (ctx, evt) => {\n if (isBoolean(ctx.openOnChange)) return ctx.openOnChange\n return !!ctx.openOnChange?.({ inputValue: evt.value })\n },\n restoreFocus: (_ctx, evt) => (evt.restoreFocus == null ? true : !!evt.restoreFocus),\n isChangeEvent: (_ctx, evt) => evt.previousEvent?.type === \"INPUT.CHANGE\",\n },\n\n activities: {\n trackDismissableLayer(ctx, _evt, { send }) {\n if (ctx.disableLayer) return\n const contentEl = () => dom.getContentEl(ctx)\n return trackDismissableElement(contentEl, {\n defer: true,\n exclude: () => [dom.getInputEl(ctx), dom.getTriggerEl(ctx), dom.getClearTriggerEl(ctx)],\n onFocusOutside: ctx.onFocusOutside,\n onPointerDownOutside: ctx.onPointerDownOutside,\n onInteractOutside: ctx.onInteractOutside,\n onEscapeKeyDown(event) {\n event.preventDefault()\n event.stopPropagation()\n send(\"LAYER.ESCAPE\")\n },\n onDismiss() {\n send({ type: \"LAYER.INTERACT_OUTSIDE\", restoreFocus: false })\n },\n })\n },\n hideOtherElements(ctx) {\n return ariaHidden([dom.getInputEl(ctx), dom.getContentEl(ctx), dom.getTriggerEl(ctx)])\n },\n computePlacement(ctx) {\n const controlEl = () => dom.getControlEl(ctx)\n const positionerEl = () => dom.getPositionerEl(ctx)\n ctx.currentPlacement = ctx.positioning.placement\n return getPlacement(controlEl, positionerEl, {\n ...ctx.positioning,\n defer: true,\n onComplete(data) {\n ctx.currentPlacement = data.placement\n },\n })\n },\n // in event the options are fetched (async), we still want to auto-highlight the first option\n trackChildNodes(ctx, _evt, { send }) {\n if (!ctx.autoHighlight) return\n const exec = () => send(\"CHILDREN_CHANGE\")\n const contentEl = () => dom.getContentEl(ctx)\n return observeChildren(contentEl, {\n callback: exec,\n defer: true,\n })\n },\n scrollToHighlightedItem(ctx, _evt, { getState }) {\n const inputEl = dom.getInputEl(ctx)\n\n let cleanups: VoidFunction[] = []\n\n const exec = (immediate: boolean) => {\n const state = getState()\n\n const pointer = state.event.type.includes(\"POINTER\")\n if (pointer || !ctx.highlightedValue) return\n\n const itemEl = dom.getHighlightedItemEl(ctx)\n const contentEl = dom.getContentEl(ctx)\n\n if (ctx.scrollToIndexFn) {\n const highlightedIndex = ctx.collection.indexOf(ctx.highlightedValue)\n ctx.scrollToIndexFn({ index: highlightedIndex, immediate })\n return\n }\n\n const rafCleanup = raf(() => {\n scrollIntoView(itemEl, { rootEl: contentEl, block: \"nearest\" })\n })\n cleanups.push(rafCleanup)\n }\n\n const rafCleanup = raf(() => exec(true))\n cleanups.push(rafCleanup)\n\n const observerCleanup = observeAttributes(inputEl, {\n attributes: [\"aria-activedescendant\"],\n callback: () => exec(false),\n })\n cleanups.push(observerCleanup)\n\n return () => {\n cleanups.forEach((cleanup) => cleanup())\n }\n },\n },\n\n actions: {\n reposition(ctx, evt) {\n const controlEl = () => dom.getControlEl(ctx)\n const positionerEl = () => dom.getPositionerEl(ctx)\n getPlacement(controlEl, positionerEl, {\n ...ctx.positioning,\n ...evt.options,\n defer: true,\n listeners: false,\n onComplete(data) {\n ctx.currentPlacement = data.placement\n },\n })\n },\n setHighlightedItem(ctx, evt) {\n if (evt.value == null) return\n set.highlightedValue(ctx, evt.value)\n },\n clearHighlightedItem(ctx) {\n set.highlightedValue(ctx, null, true)\n },\n selectHighlightedItem(ctx) {\n set.value(ctx, ctx.highlightedValue)\n },\n selectItem(ctx, evt) {\n if (evt.value == null) return\n set.value(ctx, evt.value)\n },\n clearItem(ctx, evt) {\n if (evt.value == null) return\n const value = ctx.value.filter((v) => v !== evt.value)\n set.value(ctx, value)\n },\n setInitialFocus(ctx) {\n raf(() => {\n dom.focusInputEl(ctx)\n })\n },\n setFinalFocus(ctx) {\n raf(() => {\n const triggerEl = dom.getTriggerEl(ctx)\n if (triggerEl?.dataset.focusable == null) {\n dom.focusInputEl(ctx)\n } else {\n dom.focusTriggerEl(ctx)\n }\n })\n },\n syncInputValue(ctx) {\n const inputEl = dom.getInputEl(ctx)\n if (!inputEl) return\n\n inputEl.value = ctx.inputValue\n\n queueMicrotask(() => {\n const { selectionStart, selectionEnd } = inputEl\n\n if (Math.abs((selectionEnd ?? 0) - (selectionStart ?? 0)) !== 0) return\n if (selectionStart !== 0) return\n\n inputEl.setSelectionRange(inputEl.value.length, inputEl.value.length)\n })\n },\n setInputValue(ctx, evt) {\n set.inputValue(ctx, evt.value)\n },\n clearInputValue(ctx) {\n set.inputValue(ctx, \"\")\n },\n revertInputValue(ctx) {\n const inputValue = match(ctx.selectionBehavior, {\n replace: ctx.hasSelectedItems ? ctx.valueAsString : \"\",\n preserve: ctx.inputValue,\n clear: \"\",\n })\n\n set.inputValue(ctx, inputValue)\n },\n syncInitialValues(ctx) {\n const selectedItems = ctx.collection.items(ctx.value)\n const valueAsString = ctx.collection.itemsToString(selectedItems)\n\n ctx.highlightedItem = ctx.collection.item(ctx.highlightedValue)\n ctx.selectedItems = selectedItems\n ctx.valueAsString = valueAsString\n\n ctx.inputValue = match(ctx.selectionBehavior, {\n preserve: ctx.inputValue || valueAsString,\n replace: valueAsString,\n clear: \"\",\n })\n },\n syncSelectionBehavior(ctx) {\n if (ctx.multiple) {\n ctx.selectionBehavior = \"clear\"\n }\n },\n setSelectedItems(ctx, evt) {\n if (!isArray(evt.value)) return\n set.value(ctx, evt.value)\n },\n clearSelectedItems(ctx) {\n set.value(ctx, [])\n },\n scrollContentToTop(ctx) {\n if (ctx.scrollToIndexFn) {\n ctx.scrollToIndexFn({ index: 0, immediate: true })\n } else {\n const contentEl = dom.getContentEl(ctx)\n if (!contentEl) return\n contentEl.scrollTop = 0\n }\n },\n invokeOnOpen(ctx) {\n ctx.onOpenChange?.({ open: true })\n },\n invokeOnClose(ctx) {\n ctx.onOpenChange?.({ open: false })\n },\n highlightFirstItem(ctx) {\n raf(() => {\n const value = ctx.collection.first()\n set.highlightedValue(ctx, value)\n })\n },\n highlightFirstItemIfNeeded(ctx) {\n if (!ctx.autoHighlight) return\n raf(() => {\n const value = ctx.collection.first()\n set.highlightedValue(ctx, value)\n })\n },\n highlightLastItem(ctx) {\n raf(() => {\n const value = ctx.collection.last()\n set.highlightedValue(ctx, value)\n })\n },\n highlightNextItem(ctx) {\n let value: string | null = null\n if (ctx.highlightedValue) {\n value = ctx.collection.next(ctx.highlightedValue)\n if (!value && ctx.loopFocus) value = ctx.collection.first()\n } else {\n value = ctx.collection.first()\n }\n set.highlightedValue(ctx, value)\n },\n highlightPrevItem(ctx) {\n let value: string | null = null\n if (ctx.highlightedValue) {\n value = ctx.collection.prev(ctx.highlightedValue)\n if (!value && ctx.loopFocus) value = ctx.collection.last()\n } else {\n value = ctx.collection.last()\n }\n set.highlightedValue(ctx, value)\n },\n highlightFirstSelectedItem(ctx) {\n raf(() => {\n const [value] = ctx.collection.sort(ctx.value)\n set.highlightedValue(ctx, value)\n })\n },\n highlightFirstOrSelectedItem(ctx) {\n raf(() => {\n let value: string | null = null\n if (ctx.hasSelectedItems) {\n value = ctx.collection.sort(ctx.value)[0]\n } else {\n value = ctx.collection.first()\n }\n set.highlightedValue(ctx, value)\n })\n },\n highlightLastOrSelectedItem(ctx) {\n raf(() => {\n let value: string | null = null\n if (ctx.hasSelectedItems) {\n value = ctx.collection.sort(ctx.value)[0]\n } else {\n value = ctx.collection.last()\n }\n set.highlightedValue(ctx, value)\n })\n },\n autofillInputValue(ctx, evt) {\n const inputEl = dom.getInputEl(ctx)\n if (!ctx.autoComplete || !inputEl || !evt.keypress) return\n const valueText = ctx.collection.valueToString(ctx.highlightedValue)\n raf(() => {\n inputEl.value = valueText || ctx.inputValue\n })\n },\n setCollection(ctx, evt) {\n ctx.collection = evt.value\n },\n syncSelectedItems(ctx) {\n sync.valueChange(ctx)\n },\n syncHighlightedItem(ctx) {\n sync.highlightChange(ctx)\n },\n toggleVisibility(ctx, evt, { send }) {\n send({ type: ctx.open ? \"CONTROLLED.OPEN\" : \"CONTROLLED.CLOSE\", previousEvent: evt })\n },\n },\n },\n )\n}\n\nconst sync = {\n valueChange: (ctx: MachineContext) => {\n // side effect\n const prevSelectedItems = ctx.selectedItems\n ctx.selectedItems = ctx.value.map((v) => {\n const foundItem = prevSelectedItems.find((item) => ctx.collection.itemToValue(item) === v)\n if (foundItem) return foundItem\n return ctx.collection.item(v)\n })\n\n // set valueAsString\n const valueAsString = ctx.collection.itemsToString(ctx.selectedItems)\n ctx.valueAsString = valueAsString\n\n // set inputValue\n let inputValue: string | undefined\n if (ctx.getSelectionValue) {\n //\n inputValue = ctx.getSelectionValue({\n inputValue: ctx.inputValue,\n selectedItems: Array.from(ctx.selectedItems),\n valueAsString,\n })\n //\n } else {\n //\n inputValue = match(ctx.selectionBehavior, {\n replace: ctx.valueAsString,\n preserve: ctx.inputValue,\n clear: \"\",\n })\n }\n\n set.inputValue(ctx, inputValue)\n },\n highlightChange: (ctx: MachineContext) => {\n ctx.highlightedItem = ctx.collection.item(ctx.highlightedValue)\n },\n}\n\nconst invoke = {\n valueChange: (ctx: MachineContext) => {\n sync.valueChange(ctx)\n ctx.onValueChange?.({\n value: Array.from(ctx.value),\n items: Array.from(ctx.selectedItems),\n })\n },\n highlightChange: (ctx: MachineContext) => {\n sync.highlightChange(ctx)\n ctx.onHighlightChange?.({\n highlightedValue: ctx.highlightedValue,\n highlightedItem: ctx.highlightedItem,\n })\n },\n inputChange: (ctx: MachineContext) => {\n ctx.onInputValueChange?.({ inputValue: ctx.inputValue })\n },\n}\n\nconst set = {\n value: (ctx: MachineContext, value: string | string[] | null | undefined, force = false) => {\n if (isEqual(ctx.value, value)) return\n if (value == null && !force) return\n if (value == null && force) {\n ctx.value = []\n invoke.valueChange(ctx)\n return\n }\n if (isArray(value)) {\n ctx.value = value\n } else if (value != null) {\n ctx.value = ctx.multiple ? addOrRemove(ctx.value, value) : [value]\n }\n invoke.valueChange(ctx)\n },\n highlightedValue: (ctx: MachineContext, value: string | null | undefined, force = false) => {\n if (isEqual(ctx.highlightedValue, value)) return\n if (!value && !force) return\n ctx.highlightedValue = value || null\n invoke.highlightChange(ctx)\n },\n inputValue: (ctx: MachineContext, value: string) => {\n if (isEqual(ctx.inputValue, value)) return\n ctx.inputValue = value\n invoke.inputChange(ctx)\n },\n}\n"],"mappings":"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","names":["import_dom_query","collection","disabled","event","import_core","import_dom_query","import_popper","ctx","rafCleanup"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createAnatomy}from"@zag-js/anatomy";var anatomy=createAnatomy("combobox").parts("root","label","input","positioner","control","trigger","content","clearTrigger","item","itemText","itemIndicator","itemGroup","itemGroupLabel");var parts=anatomy.build();import{Collection}from"@zag-js/collection";import{ref}from"@zag-js/core";var collection=options=>{return ref(new Collection(options))};collection.empty=()=>{return ref(new Collection({items:[]}))};import{clickIfLink,getEventKey,getNativeEvent,isContextMenuEvent,isLeftClick}from"@zag-js/dom-event";import{ariaAttr,dataAttr,isDownloadingEvent,isOpeningInNewTab}from"@zag-js/dom-query";import{getPlacementStyles}from"@zag-js/popper";import{createScope,query}from"@zag-js/dom-query";var dom=createScope({getRootId:ctx=>ctx.ids?.root??`combobox:${ctx.id}`,getLabelId:ctx=>ctx.ids?.label??`combobox:${ctx.id}:label`,getControlId:ctx=>ctx.ids?.control??`combobox:${ctx.id}:control`,getInputId:ctx=>ctx.ids?.input??`combobox:${ctx.id}:input`,getContentId:ctx=>ctx.ids?.content??`combobox:${ctx.id}:content`,getPositionerId:ctx=>ctx.ids?.positioner??`combobox:${ctx.id}:popper`,getTriggerId:ctx=>ctx.ids?.trigger??`combobox:${ctx.id}:toggle-btn`,getClearTriggerId:ctx=>ctx.ids?.clearTrigger??`combobox:${ctx.id}:clear-btn`,getItemGroupId:(ctx,id)=>ctx.ids?.itemGroup?.(id)??`combobox:${ctx.id}:optgroup:${id}`,getItemGroupLabelId:(ctx,id)=>ctx.ids?.itemGroupLabel?.(id)??`combobox:${ctx.id}:optgroup-label:${id}`,getItemId:(ctx,id)=>`combobox:${ctx.id}:option:${id}`,getContentEl:ctx=>dom.getById(ctx,dom.getContentId(ctx)),getInputEl:ctx=>dom.getById(ctx,dom.getInputId(ctx)),getPositionerEl:ctx=>dom.getById(ctx,dom.getPositionerId(ctx)),getControlEl:ctx=>dom.getById(ctx,dom.getControlId(ctx)),getTriggerEl:ctx=>dom.getById(ctx,dom.getTriggerId(ctx)),getClearTriggerEl:ctx=>dom.getById(ctx,dom.getClearTriggerId(ctx)),getHighlightedItemEl:ctx=>{const value=ctx.highlightedValue;if(value==null)return;return query(dom.getContentEl(ctx),`[role=option][data-value="${CSS.escape(value)}"`)},focusInputEl:ctx=>{const inputEl=dom.getInputEl(ctx);if(dom.getActiveElement(ctx)===inputEl)return;inputEl?.focus({preventScroll:true})},focusTriggerEl:ctx=>{const triggerEl=dom.getTriggerEl(ctx);if(dom.getActiveElement(ctx)===triggerEl)return;triggerEl?.focus({preventScroll:true})}});function connect(state,send,normalize){const translations=state.context.translations;const collection2=state.context.collection;const disabled=state.context.disabled;const interactive=state.context.isInteractive;const invalid=state.context.invalid;const readOnly=state.context.readOnly;const open=state.hasTag("open");const focused=state.hasTag("focused");const composite=state.context.composite;const highlightedValue=state.context.highlightedValue;const popperStyles=getPlacementStyles({...state.context.positioning,placement:state.context.currentPlacement});function getItemState(props){const{item}=props;const disabled2=collection2.isItemDisabled(item);const value=collection2.itemToValue(item);return{value,disabled:Boolean(disabled2||disabled2),highlighted:highlightedValue===value,selected:state.context.value.includes(value)}}return{focused,open,inputValue:state.context.inputValue,highlightedValue,highlightedItem:state.context.highlightedItem,value:state.context.value,valueAsString:state.context.valueAsString,hasSelectedItems:state.context.hasSelectedItems,selectedItems:state.context.selectedItems,collection:state.context.collection,reposition(options={}){send({type:"POSITIONING.SET",options})},setCollection(collection3){send({type:"COLLECTION.SET",value:collection3})},setHighlightValue(value){send({type:"HIGHLIGHTED_VALUE.SET",value})},selectValue(value){send({type:"ITEM.SELECT",value})},setValue(value){send({type:"VALUE.SET",value})},setInputValue(value){send({type:"INPUT_VALUE.SET",value})},clearValue(value){if(value!=null){send({type:"ITEM.CLEAR",value})}else{send("VALUE.CLEAR")}},focus(){dom.getInputEl(state.context)?.focus()},setOpen(nextOpen){if(nextOpen===open)return;send(nextOpen?"OPEN":"CLOSE")},rootProps:normalize.element({...parts.root.attrs,dir:state.context.dir,id:dom.getRootId(state.context),"data-invalid":dataAttr(invalid),"data-readonly":dataAttr(readOnly)}),labelProps:normalize.label({...parts.label.attrs,dir:state.context.dir,htmlFor:dom.getInputId(state.context),id:dom.getLabelId(state.context),"data-readonly":dataAttr(readOnly),"data-disabled":dataAttr(disabled),"data-invalid":dataAttr(invalid),"data-focus":dataAttr(focused),onClick(event){if(composite)return;event.preventDefault();dom.getTriggerEl(state.context)?.focus({preventScroll:true})}}),controlProps:normalize.element({...parts.control.attrs,dir:state.context.dir,id:dom.getControlId(state.context),"data-state":open?"open":"closed","data-focus":dataAttr(focused),"data-disabled":dataAttr(disabled),"data-invalid":dataAttr(invalid)}),positionerProps:normalize.element({...parts.positioner.attrs,dir:state.context.dir,id:dom.getPositionerId(state.context),style:popperStyles.floating}),inputProps:normalize.input({...parts.input.attrs,dir:state.context.dir,"aria-invalid":ariaAttr(invalid),"data-invalid":dataAttr(invalid),name:state.context.name,form:state.context.form,disabled,autoFocus:state.context.autoFocus,autoComplete:"off",autoCorrect:"off",autoCapitalize:"none",spellCheck:"false",readOnly,placeholder:state.context.placeholder,id:dom.getInputId(state.context),type:"text",role:"combobox",defaultValue:state.context.inputValue,"aria-autocomplete":state.context.autoComplete?"both":"list","aria-controls":dom.getContentId(state.context),"aria-expanded":open,"data-state":open?"open":"closed","aria-activedescendant":highlightedValue?dom.getItemId(state.context,highlightedValue):void 0,onClick(event){if(event.defaultPrevented)return;if(!state.context.openOnClick)return;if(!interactive)return;send("INPUT.CLICK")},onFocus(){if(disabled)return;send("INPUT.FOCUS")},onBlur(){if(disabled)return;send("INPUT.BLUR")},onChange(event){send({type:"INPUT.CHANGE",value:event.currentTarget.value})},onKeyDown(event){if(event.defaultPrevented)return;if(!interactive)return;const evt=getNativeEvent(event);if(evt.ctrlKey||evt.shiftKey||evt.isComposing)return;const openOnKeyPress=state.context.openOnKeyPress;const isModifierKey=event.ctrlKey||event.metaKey||event.shiftKey;const keypress=true;const keymap={ArrowDown(event2){if(!openOnKeyPress&&!open)return;send({type:event2.altKey?"OPEN":"INPUT.ARROW_DOWN",keypress});event2.preventDefault()},ArrowUp(){if(!openOnKeyPress&&!open)return;send({type:event.altKey?"CLOSE":"INPUT.ARROW_UP",keypress});event.preventDefault()},Home(event2){if(isModifierKey)return;send({type:"INPUT.HOME",keypress});if(open){event2.preventDefault()}},End(event2){if(isModifierKey)return;send({type:"INPUT.END",keypress});if(open){event2.preventDefault()}},Enter(event2){if(evt.isComposing)return;send({type:"INPUT.ENTER",keypress});if(open){event2.preventDefault()}const itemEl=dom.getHighlightedItemEl(state.context);clickIfLink(itemEl)},Escape(){send({type:"INPUT.ESCAPE",keypress});event.preventDefault()}};const key=getEventKey(event,state.context);const exec=keymap[key];exec?.(event)}}),getTriggerProps(props={}){return normalize.button({...parts.trigger.attrs,dir:state.context.dir,id:dom.getTriggerId(state.context),"aria-haspopup":composite?"listbox":"dialog",type:"button",tabIndex:props.focusable?void 0:-1,"aria-label":translations.triggerLabel,"aria-expanded":open,"data-state":open?"open":"closed","aria-controls":open?dom.getContentId(state.context):void 0,disabled,"data-focusable":dataAttr(props.focusable),"data-readonly":dataAttr(readOnly),"data-disabled":dataAttr(disabled),onFocus(){if(!props.focusable)return;send({type:"INPUT.FOCUS",src:"trigger"})},onClick(event){if(event.defaultPrevented)return;const evt=getNativeEvent(event);if(!interactive)return;if(!isLeftClick(evt))return;send("TRIGGER.CLICK")},onPointerDown(event){if(!interactive)return;if(event.pointerType==="touch")return;event.preventDefault();queueMicrotask(()=>{dom.getInputEl(state.context)?.focus({preventScroll:true})})},onKeyDown(event){if(event.defaultPrevented)return;if(composite)return;const keyMap={ArrowDown(){send({type:"INPUT.ARROW_DOWN",src:"trigger"})},ArrowUp(){send({type:"INPUT.ARROW_UP",src:"trigger"})}};const key=getEventKey(event,state.context);const exec=keyMap[key];if(exec){exec(event);event.preventDefault()}}})},contentProps:normalize.element({...parts.content.attrs,dir:state.context.dir,id:dom.getContentId(state.context),role:!composite?"dialog":"listbox",tabIndex:-1,hidden:!open,"data-state":open?"open":"closed","aria-labelledby":dom.getLabelId(state.context),"aria-multiselectable":state.context.multiple&&composite?true:void 0,onPointerDown(event){event.preventDefault()}}),listProps:normalize.element({role:!composite?"listbox":void 0,"aria-labelledby":dom.getLabelId(state.context),"aria-multiselectable":state.context.multiple&&!composite?true:void 0}),clearTriggerProps:normalize.button({...parts.clearTrigger.attrs,dir:state.context.dir,id:dom.getClearTriggerId(state.context),type:"button",tabIndex:-1,disabled,"aria-label":translations.clearTriggerLabel,"aria-controls":dom.getInputId(state.context),hidden:!state.context.value.length,onPointerDown(event){event.preventDefault()},onClick(event){if(event.defaultPrevented)return;if(!interactive)return;send({type:"VALUE.CLEAR",src:"clear-trigger"})}}),getItemState,getItemProps(props){const itemState=getItemState(props);const value=itemState.value;return normalize.element({...parts.item.attrs,dir:state.context.dir,id:dom.getItemId(state.context,value),role:"option",tabIndex:-1,"data-highlighted":dataAttr(itemState.highlighted),"data-state":itemState.selected?"checked":"unchecked","aria-selected":itemState.highlighted,"aria-disabled":itemState.disabled,"data-disabled":dataAttr(itemState.disabled),"data-value":itemState.value,onPointerMove(){if(itemState.disabled)return;if(itemState.highlighted)return;send({type:"ITEM.POINTER_MOVE",value})},onPointerLeave(){if(props.persistFocus)return;if(itemState.disabled)return;const mouseMoved=state.previousEvent.type.includes("POINTER");if(!mouseMoved)return;send({type:"ITEM.POINTER_LEAVE",value})},onPointerUp(event){if(isDownloadingEvent(event))return;if(isOpeningInNewTab(event))return;if(isContextMenuEvent(event))return;if(itemState.disabled)return;send({type:"ITEM.CLICK",src:"pointerup",value})},onTouchEnd(event){event.preventDefault();event.stopPropagation()}})},getItemTextProps(props){const itemState=getItemState(props);return normalize.element({...parts.itemText.attrs,dir:state.context.dir,"data-disabled":dataAttr(itemState.disabled),"data-highlighted":dataAttr(itemState.highlighted)})},getItemIndicatorProps(props){const itemState=getItemState(props);return normalize.element({"aria-hidden":true,...parts.itemIndicator.attrs,dir:state.context.dir,"data-state":itemState.selected?"checked":"unchecked",hidden:!itemState.selected})},getItemGroupProps(props){const{id}=props;return normalize.element({...parts.itemGroup.attrs,dir:state.context.dir,id:dom.getItemGroupId(state.context,id),"aria-labelledby":dom.getItemGroupLabelId(state.context,id)})},getItemGroupLabelProps(props){const{htmlFor}=props;return normalize.element({...parts.itemGroupLabel.attrs,dir:state.context.dir,id:dom.getItemGroupLabelId(state.context,htmlFor),role:"group"})}}}import{ariaHidden}from"@zag-js/aria-hidden";import{createMachine,guards}from"@zag-js/core";import{trackDismissableElement}from"@zag-js/dismissable";import{observeAttributes,observeChildren,raf,scrollIntoView}from"@zag-js/dom-query";import{getPlacement}from"@zag-js/popper";import{addOrRemove,compact,isArray,isBoolean,isEqual,match}from"@zag-js/utils";var{and,not}=guards;function machine(userContext){const ctx=compact(userContext);return createMachine({id:"combobox",initial:ctx.open?"suggesting":"idle",context:{loopFocus:true,openOnClick:false,value:[],highlightedValue:null,inputValue:"",allowCustomValue:false,closeOnSelect:!ctx.multiple,inputBehavior:"none",selectionBehavior:"replace",openOnKeyPress:true,openOnChange:true,composite:true,...ctx,highlightedItem:null,selectedItems:[],valueAsString:"",collection:ctx.collection??collection.empty(),positioning:{placement:"bottom",flip:false,sameWidth:true,...ctx.positioning},translations:{triggerLabel:"Toggle suggestions",clearTriggerLabel:"Clear value",...ctx.translations}},created:["syncInitialValues","syncSelectionBehavior"],computed:{isInputValueEmpty:ctx2=>ctx2.inputValue.length===0,isInteractive:ctx2=>!(ctx2.readOnly||ctx2.disabled),autoComplete:ctx2=>ctx2.inputBehavior==="autocomplete",autoHighlight:ctx2=>ctx2.inputBehavior==="autohighlight",hasSelectedItems:ctx2=>ctx2.value.length>0},watch:{value:["syncSelectedItems"],inputValue:["syncInputValue"],highlightedValue:["syncHighlightedItem","autofillInputValue"],multiple:["syncSelectionBehavior"],open:["toggleVisibility"]},on:{"HIGHLIGHTED_VALUE.SET":{actions:["setHighlightedItem"]},"ITEM.SELECT":{actions:["selectItem"]},"ITEM.CLEAR":{actions:["clearItem"]},"VALUE.SET":{actions:["setSelectedItems"]},"INPUT_VALUE.SET":{actions:"setInputValue"},"COLLECTION.SET":{actions:["setCollection"]},"POSITIONING.SET":{actions:["reposition"]}},states:{idle:{tags:["idle","closed"],entry:["scrollContentToTop","clearHighlightedItem"],on:{"CONTROLLED.OPEN":{target:"interacting"},"TRIGGER.CLICK":[{guard:"isOpenControlled",actions:["setInitialFocus","highlightFirstSelectedItem","invokeOnOpen"]},{target:"interacting",actions:["setInitialFocus","highlightFirstSelectedItem","invokeOnOpen"]}],"INPUT.CLICK":[{guard:"isOpenControlled",actions:["highlightFirstSelectedItem","invokeOnOpen"]},{target:"interacting",actions:["highlightFirstSelectedItem","invokeOnOpen"]}],"INPUT.FOCUS":{target:"focused"},OPEN:[{guard:"isOpenControlled",actions:["invokeOnOpen"]},{target:"interacting",actions:["invokeOnOpen"]}],"VALUE.CLEAR":{target:"focused",actions:["clearInputValue","clearSelectedItems","setInitialFocus"]}}},focused:{tags:["focused","closed"],entry:["scrollContentToTop","clearHighlightedItem"],on:{"CONTROLLED.OPEN":[{guard:"isChangeEvent",target:"suggesting"},{target:"interacting"}],"INPUT.CHANGE":[{guard:and("isOpenControlled","openOnChange"),actions:["setInputValue","invokeOnOpen","highlightFirstItemIfNeeded"]},{guard:"openOnChange",target:"suggesting",actions:["setInputValue","invokeOnOpen","highlightFirstItemIfNeeded"]},{actions:"setInputValue"}],"LAYER.INTERACT_OUTSIDE":{target:"idle"},"INPUT.ESCAPE":{guard:and("isCustomValue",not("allowCustomValue")),actions:"revertInputValue"},"INPUT.BLUR":{target:"idle"},"INPUT.CLICK":[{guard:"isOpenControlled",actions:["highlightFirstSelectedItem","invokeOnOpen"]},{target:"interacting",actions:["highlightFirstSelectedItem","invokeOnOpen"]}],"TRIGGER.CLICK":[{guard:"isOpenControlled",actions:["setInitialFocus","highlightFirstSelectedItem","invokeOnOpen"]},{target:"interacting",actions:["setInitialFocus","highlightFirstSelectedItem","invokeOnOpen"]}],"INPUT.ARROW_DOWN":[{guard:and("isOpenControlled","autoComplete"),actions:["invokeOnOpen"]},{guard:"autoComplete",target:"interacting",actions:["invokeOnOpen"]},{guard:"isOpenControlled",actions:["highlightFirstOrSelectedItem","invokeOnOpen"]},{target:"interacting",actions:["highlightFirstOrSelectedItem","invokeOnOpen"]}],"INPUT.ARROW_UP":[{guard:"autoComplete",target:"interacting",actions:"invokeOnOpen"},{guard:"autoComplete",target:"interacting",actions:"invokeOnOpen"},{target:"interacting",actions:["highlightLastOrSelectedItem","invokeOnOpen"]},{target:"interacting",actions:["highlightLastOrSelectedItem","invokeOnOpen"]}],OPEN:[{guard:"isOpenControlled",actions:["invokeOnOpen"]},{target:"interacting",actions:["invokeOnOpen"]}],"VALUE.CLEAR":{actions:["clearInputValue","clearSelectedItems"]}}},interacting:{tags:["open","focused"],entry:["setInitialFocus"],activities:["scrollToHighlightedItem","trackDismissableLayer","computePlacement","hideOtherElements"],on:{"CONTROLLED.CLOSE":[{guard:"restoreFocus",target:"focused",actions:["setFinalFocus"]},{target:"idle"}],"INPUT.HOME":{actions:["highlightFirstItem"]},"INPUT.END":{actions:["highlightLastItem"]},"INPUT.ARROW_DOWN":[{guard:and("autoComplete","isLastItemHighlighted"),actions:["clearHighlightedItem","scrollContentToTop"]},{actions:["highlightNextItem"]}],"INPUT.ARROW_UP":[{guard:and("autoComplete","isFirstItemHighlighted"),actions:"clearHighlightedItem"},{actions:"highlightPrevItem"}],"INPUT.ENTER":[{guard:and("isOpenControlled","closeOnSelect"),actions:["selectHighlightedItem","invokeOnClose"]},{guard:"closeOnSelect",target:"focused",actions:["selectHighlightedItem","invokeOnClose","setFinalFocus"]},{actions:["selectHighlightedItem"]}],"INPUT.CHANGE":[{guard:"autoComplete",target:"suggesting",actions:["setInputValue","invokeOnOpen"]},{target:"suggesting",actions:["clearHighlightedItem","setInputValue","invokeOnOpen"]}],"ITEM.POINTER_MOVE":{actions:["setHighlightedItem"]},"ITEM.POINTER_LEAVE":{actions:["clearHighlightedItem"]},"ITEM.CLICK":[{guard:and("isOpenControlled","closeOnSelect"),actions:["selectItem","invokeOnClose"]},{guard:"closeOnSelect",target:"focused",actions:["selectItem","invokeOnClose","setFinalFocus"]},{actions:["selectItem"]}],"LAYER.ESCAPE":[{guard:and("isOpenControlled","autoComplete"),actions:["syncInputValue","invokeOnClose"]},{guard:"autoComplete",target:"focused",actions:["syncInputValue","invokeOnClose"]},{guard:"isOpenControlled",actions:"invokeOnClose"},{target:"focused",actions:["invokeOnClose","setFinalFocus"]}],"TRIGGER.CLICK":[{guard:"isOpenControlled",actions:"invokeOnClose"},{target:"focused",actions:"invokeOnClose"}],"LAYER.INTERACT_OUTSIDE":[{guard:and("isOpenControlled","isCustomValue",not("allowCustomValue")),actions:["revertInputValue","invokeOnClose"]},{guard:and("isCustomValue",not("allowCustomValue")),target:"idle",actions:["revertInputValue","invokeOnClose"]},{guard:"isOpenControlled",actions:"invokeOnClose"},{target:"idle",actions:"invokeOnClose"}],CLOSE:[{guard:"isOpenControlled",actions:["invokeOnClose"]},{target:"focused",actions:["invokeOnClose","setFinalFocus"]}],"VALUE.CLEAR":[{guard:"isOpenControlled",actions:["clearInputValue","clearSelectedItems","invokeOnClose"]},{target:"focused",actions:["clearInputValue","clearSelectedItems","invokeOnClose","setFinalFocus"]}]}},suggesting:{tags:["open","focused"],activities:["trackDismissableLayer","scrollToHighlightedItem","computePlacement","trackChildNodes","hideOtherElements"],entry:["setInitialFocus"],on:{"CONTROLLED.CLOSE":[{guard:"restoreFocus",target:"focused",actions:["setFinalFocus"]},{target:"idle"}],CHILDREN_CHANGE:{actions:["highlightFirstItem"]},"INPUT.ARROW_DOWN":{target:"interacting",actions:["highlightNextItem"]},"INPUT.ARROW_UP":{target:"interacting",actions:["highlightPrevItem"]},"INPUT.HOME":{target:"interacting",actions:["highlightFirstItem"]},"INPUT.END":{target:"interacting",actions:["highlightLastItem"]},"INPUT.ENTER":[{guard:and("isOpenControlled","closeOnSelect"),actions:["selectHighlightedItem","invokeOnClose"]},{guard:"closeOnSelect",target:"focused",actions:["selectHighlightedItem","invokeOnClose","setFinalFocus"]},{actions:["selectHighlightedItem"]}],"INPUT.CHANGE":[{guard:"autoHighlight",actions:["setInputValue"]},{actions:["setInputValue"]}],"LAYER.ESCAPE":[{guard:"isOpenControlled",actions:["invokeOnClose"]},{target:"focused",actions:["invokeOnClose"]}],"ITEM.POINTER_MOVE":{target:"interacting",actions:["setHighlightedItem"]},"ITEM.POINTER_LEAVE":{actions:["clearHighlightedItem"]},"LAYER.INTERACT_OUTSIDE":[{guard:and("isOpenControlled","isCustomValue",not("allowCustomValue")),actions:["revertInputValue","invokeOnClose"]},{guard:and("isCustomValue",not("allowCustomValue")),target:"idle",actions:["revertInputValue","invokeOnClose"]},{guard:"isOpenControlled",actions:["invokeOnClose"]},{target:"idle",actions:["invokeOnClose"]}],"TRIGGER.CLICK":[{guard:"isOpenControlled",actions:["invokeOnClose"]},{target:"focused",actions:["invokeOnClose"]}],"ITEM.CLICK":[{guard:and("isOpenControlled","closeOnSelect"),actions:["selectItem","invokeOnClose"]},{guard:"closeOnSelect",target:"focused",actions:["selectItem","invokeOnClose","setFinalFocus"]},{actions:["selectItem"]}],CLOSE:[{guard:"isOpenControlled",actions:["invokeOnClose"]},{target:"focused",actions:["invokeOnClose","setFinalFocus"]}],"VALUE.CLEAR":[{guard:"isOpenControlled",actions:["clearInputValue","clearSelectedItems","invokeOnClose"]},{target:"focused",actions:["clearInputValue","clearSelectedItems","invokeOnClose","setFinalFocus"]}]}}}},{guards:{isInputValueEmpty:ctx2=>ctx2.isInputValueEmpty,autoComplete:ctx2=>ctx2.autoComplete&&!ctx2.multiple,autoHighlight:ctx2=>ctx2.autoHighlight,isFirstItemHighlighted:ctx2=>ctx2.collection.first()===ctx2.highlightedValue,isLastItemHighlighted:ctx2=>ctx2.collection.last()===ctx2.highlightedValue,isCustomValue:ctx2=>ctx2.inputValue!==ctx2.valueAsString,allowCustomValue:ctx2=>!!ctx2.allowCustomValue,hasHighlightedItem:ctx2=>ctx2.highlightedValue!=null,closeOnSelect:ctx2=>!!ctx2.closeOnSelect,isOpenControlled:ctx2=>!!ctx2["open.controlled"],openOnChange:(ctx2,evt)=>{if(isBoolean(ctx2.openOnChange))return ctx2.openOnChange;return!!ctx2.openOnChange?.({inputValue:evt.value})},restoreFocus:(_ctx,evt)=>evt.restoreFocus==null?true:!!evt.restoreFocus,isChangeEvent:(_ctx,evt)=>evt.previousEvent?.type==="INPUT.CHANGE"},activities:{trackDismissableLayer(ctx2,_evt,{send}){if(ctx2.disableLayer)return;const contentEl=()=>dom.getContentEl(ctx2);return trackDismissableElement(contentEl,{defer:true,exclude:()=>[dom.getInputEl(ctx2),dom.getTriggerEl(ctx2),dom.getClearTriggerEl(ctx2)],onFocusOutside:ctx2.onFocusOutside,onPointerDownOutside:ctx2.onPointerDownOutside,onInteractOutside:ctx2.onInteractOutside,onEscapeKeyDown(event){event.preventDefault();event.stopPropagation();send("LAYER.ESCAPE")},onDismiss(){send({type:"LAYER.INTERACT_OUTSIDE",restoreFocus:false})}})},hideOtherElements(ctx2){return ariaHidden([dom.getInputEl(ctx2),dom.getContentEl(ctx2),dom.getTriggerEl(ctx2)])},computePlacement(ctx2){const controlEl=()=>dom.getControlEl(ctx2);const positionerEl=()=>dom.getPositionerEl(ctx2);ctx2.currentPlacement=ctx2.positioning.placement;return getPlacement(controlEl,positionerEl,{...ctx2.positioning,defer:true,onComplete(data){ctx2.currentPlacement=data.placement}})},trackChildNodes(ctx2,_evt,{send}){if(!ctx2.autoHighlight)return;const exec=()=>send("CHILDREN_CHANGE");const contentEl=()=>dom.getContentEl(ctx2);return observeChildren(contentEl,{callback:exec,defer:true})},scrollToHighlightedItem(ctx2,_evt,{getState}){const inputEl=dom.getInputEl(ctx2);let cleanups=[];const exec=immediate=>{const state=getState();const pointer=state.event.type.includes("POINTER");if(pointer||!ctx2.highlightedValue)return;const itemEl=dom.getHighlightedItemEl(ctx2);const contentEl=dom.getContentEl(ctx2);if(ctx2.scrollToIndexFn){const highlightedIndex=ctx2.collection.indexOf(ctx2.highlightedValue);ctx2.scrollToIndexFn({index:highlightedIndex,immediate});return}const rafCleanup2=raf(()=>{scrollIntoView(itemEl,{rootEl:contentEl,block:"nearest"})});cleanups.push(rafCleanup2)};const rafCleanup=raf(()=>exec(true));cleanups.push(rafCleanup);const observerCleanup=observeAttributes(inputEl,{attributes:["aria-activedescendant"],callback:()=>exec(false)});cleanups.push(observerCleanup);return()=>{cleanups.forEach(cleanup=>cleanup())}}},actions:{reposition(ctx2,evt){const controlEl=()=>dom.getControlEl(ctx2);const positionerEl=()=>dom.getPositionerEl(ctx2);getPlacement(controlEl,positionerEl,{...ctx2.positioning,...evt.options,defer:true,listeners:false,onComplete(data){ctx2.currentPlacement=data.placement}})},setHighlightedItem(ctx2,evt){if(evt.value==null)return;set.highlightedValue(ctx2,evt.value)},clearHighlightedItem(ctx2){set.highlightedValue(ctx2,null,true)},selectHighlightedItem(ctx2){set.value(ctx2,ctx2.highlightedValue)},selectItem(ctx2,evt){if(evt.value==null)return;set.value(ctx2,evt.value)},clearItem(ctx2,evt){if(evt.value==null)return;const value=ctx2.value.filter(v=>v!==evt.value);set.value(ctx2,value)},setInitialFocus(ctx2){raf(()=>{dom.focusInputEl(ctx2)})},setFinalFocus(ctx2){raf(()=>{const triggerEl=dom.getTriggerEl(ctx2);if(triggerEl?.dataset.focusable==null){dom.focusInputEl(ctx2)}else{dom.focusTriggerEl(ctx2)}})},syncInputValue(ctx2){const inputEl=dom.getInputEl(ctx2);if(!inputEl)return;inputEl.value=ctx2.inputValue;queueMicrotask(()=>{const{selectionStart,selectionEnd}=inputEl;if(Math.abs((selectionEnd??0)-(selectionStart??0))!==0)return;if(selectionStart!==0)return;inputEl.setSelectionRange(inputEl.value.length,inputEl.value.length)})},setInputValue(ctx2,evt){set.inputValue(ctx2,evt.value)},clearInputValue(ctx2){set.inputValue(ctx2,"")},revertInputValue(ctx2){const inputValue=match(ctx2.selectionBehavior,{replace:ctx2.hasSelectedItems?ctx2.valueAsString:"",preserve:ctx2.inputValue,clear:""});set.inputValue(ctx2,inputValue)},syncInitialValues(ctx2){const selectedItems=ctx2.collection.items(ctx2.value);const valueAsString=ctx2.collection.itemsToString(selectedItems);ctx2.highlightedItem=ctx2.collection.item(ctx2.highlightedValue);ctx2.selectedItems=selectedItems;ctx2.valueAsString=valueAsString;ctx2.inputValue=match(ctx2.selectionBehavior,{preserve:ctx2.inputValue||valueAsString,replace:valueAsString,clear:""})},syncSelectionBehavior(ctx2){if(ctx2.multiple){ctx2.selectionBehavior="clear"}},setSelectedItems(ctx2,evt){if(!isArray(evt.value))return;set.value(ctx2,evt.value)},clearSelectedItems(ctx2){set.value(ctx2,[])},scrollContentToTop(ctx2){if(ctx2.scrollToIndexFn){ctx2.scrollToIndexFn({index:0,immediate:true})}else{const contentEl=dom.getContentEl(ctx2);if(!contentEl)return;contentEl.scrollTop=0}},invokeOnOpen(ctx2){ctx2.onOpenChange?.({open:true})},invokeOnClose(ctx2){ctx2.onOpenChange?.({open:false})},highlightFirstItem(ctx2){raf(()=>{const value=ctx2.collection.first();set.highlightedValue(ctx2,value)})},highlightFirstItemIfNeeded(ctx2){if(!ctx2.autoHighlight)return;raf(()=>{const value=ctx2.collection.first();set.highlightedValue(ctx2,value)})},highlightLastItem(ctx2){raf(()=>{const value=ctx2.collection.last();set.highlightedValue(ctx2,value)})},highlightNextItem(ctx2){let value=null;if(ctx2.highlightedValue){value=ctx2.collection.next(ctx2.highlightedValue);if(!value&&ctx2.loopFocus)value=ctx2.collection.first()}else{value=ctx2.collection.first()}set.highlightedValue(ctx2,value)},highlightPrevItem(ctx2){let value=null;if(ctx2.highlightedValue){value=ctx2.collection.prev(ctx2.highlightedValue);if(!value&&ctx2.loopFocus)value=ctx2.collection.last()}else{value=ctx2.collection.last()}set.highlightedValue(ctx2,value)},highlightFirstSelectedItem(ctx2){raf(()=>{const[value]=ctx2.collection.sort(ctx2.value);set.highlightedValue(ctx2,value)})},highlightFirstOrSelectedItem(ctx2){raf(()=>{let value=null;if(ctx2.hasSelectedItems){value=ctx2.collection.sort(ctx2.value)[0]}else{value=ctx2.collection.first()}set.highlightedValue(ctx2,value)})},highlightLastOrSelectedItem(ctx2){raf(()=>{let value=null;if(ctx2.hasSelectedItems){value=ctx2.collection.sort(ctx2.value)[0]}else{value=ctx2.collection.last()}set.highlightedValue(ctx2,value)})},autofillInputValue(ctx2,evt){const inputEl=dom.getInputEl(ctx2);if(!ctx2.autoComplete||!inputEl||!evt.keypress)return;const valueText=ctx2.collection.valueToString(ctx2.highlightedValue);raf(()=>{inputEl.value=valueText||ctx2.inputValue})},setCollection(ctx2,evt){ctx2.collection=evt.value},syncSelectedItems(ctx2){sync.valueChange(ctx2)},syncHighlightedItem(ctx2){sync.highlightChange(ctx2)},toggleVisibility(ctx2,evt,{send}){send({type:ctx2.open?"CONTROLLED.OPEN":"CONTROLLED.CLOSE",previousEvent:evt})}}})}var sync={valueChange:ctx=>{const prevSelectedItems=ctx.selectedItems;ctx.selectedItems=ctx.value.map(v=>{const foundItem=prevSelectedItems.find(item=>ctx.collection.itemToValue(item)===v);if(foundItem)return foundItem;return ctx.collection.item(v)});const valueAsString=ctx.collection.itemsToString(ctx.selectedItems);ctx.valueAsString=valueAsString;let inputValue;if(ctx.getSelectionValue){inputValue=ctx.getSelectionValue({inputValue:ctx.inputValue,selectedItems:Array.from(ctx.selectedItems),valueAsString})}else{inputValue=match(ctx.selectionBehavior,{replace:ctx.valueAsString,preserve:ctx.inputValue,clear:""})}set.inputValue(ctx,inputValue)},highlightChange:ctx=>{ctx.highlightedItem=ctx.collection.item(ctx.highlightedValue)}};var invoke={valueChange:ctx=>{sync.valueChange(ctx);ctx.onValueChange?.({value:Array.from(ctx.value),items:Array.from(ctx.selectedItems)})},highlightChange:ctx=>{sync.highlightChange(ctx);ctx.onHighlightChange?.({highlightedValue:ctx.highlightedValue,highlightedItem:ctx.highlightedItem})},inputChange:ctx=>{ctx.onInputValueChange?.({inputValue:ctx.inputValue})}};var set={value:(ctx,value,force=false)=>{if(isEqual(ctx.value,value))return;if(value==null&&!force)return;if(value==null&&force){ctx.value=[];invoke.valueChange(ctx);return}if(isArray(value)){ctx.value=value}else if(value!=null){ctx.value=ctx.multiple?addOrRemove(ctx.value,value):[value]}invoke.valueChange(ctx)},highlightedValue:(ctx,value,force=false)=>{if(isEqual(ctx.highlightedValue,value))return;if(!value&&!force)return;ctx.highlightedValue=value||null;invoke.highlightChange(ctx)},inputValue:(ctx,value)=>{if(isEqual(ctx.inputValue,value))return;ctx.inputValue=value;invoke.inputChange(ctx)}};export{anatomy,collection,connect,machine};
|
|
1
|
+
import{createAnatomy}from"@zag-js/anatomy";var anatomy=createAnatomy("combobox").parts("root","label","input","positioner","control","trigger","content","clearTrigger","item","itemText","itemIndicator","itemGroup","itemGroupLabel");var parts=anatomy.build();import{Collection}from"@zag-js/collection";import{ref}from"@zag-js/core";var collection=options=>{return ref(new Collection(options))};collection.empty=()=>{return ref(new Collection({items:[]}))};import{clickIfLink,getEventKey,isContextMenuEvent,isLeftClick}from"@zag-js/dom-event";import{ariaAttr,dataAttr,isComposingEvent,isDownloadingEvent,isOpeningInNewTab}from"@zag-js/dom-query";import{getPlacementStyles}from"@zag-js/popper";import{createScope,query}from"@zag-js/dom-query";var dom=createScope({getRootId:ctx=>ctx.ids?.root??`combobox:${ctx.id}`,getLabelId:ctx=>ctx.ids?.label??`combobox:${ctx.id}:label`,getControlId:ctx=>ctx.ids?.control??`combobox:${ctx.id}:control`,getInputId:ctx=>ctx.ids?.input??`combobox:${ctx.id}:input`,getContentId:ctx=>ctx.ids?.content??`combobox:${ctx.id}:content`,getPositionerId:ctx=>ctx.ids?.positioner??`combobox:${ctx.id}:popper`,getTriggerId:ctx=>ctx.ids?.trigger??`combobox:${ctx.id}:toggle-btn`,getClearTriggerId:ctx=>ctx.ids?.clearTrigger??`combobox:${ctx.id}:clear-btn`,getItemGroupId:(ctx,id)=>ctx.ids?.itemGroup?.(id)??`combobox:${ctx.id}:optgroup:${id}`,getItemGroupLabelId:(ctx,id)=>ctx.ids?.itemGroupLabel?.(id)??`combobox:${ctx.id}:optgroup-label:${id}`,getItemId:(ctx,id)=>`combobox:${ctx.id}:option:${id}`,getContentEl:ctx=>dom.getById(ctx,dom.getContentId(ctx)),getInputEl:ctx=>dom.getById(ctx,dom.getInputId(ctx)),getPositionerEl:ctx=>dom.getById(ctx,dom.getPositionerId(ctx)),getControlEl:ctx=>dom.getById(ctx,dom.getControlId(ctx)),getTriggerEl:ctx=>dom.getById(ctx,dom.getTriggerId(ctx)),getClearTriggerEl:ctx=>dom.getById(ctx,dom.getClearTriggerId(ctx)),getHighlightedItemEl:ctx=>{const value=ctx.highlightedValue;if(value==null)return;return query(dom.getContentEl(ctx),`[role=option][data-value="${CSS.escape(value)}"`)},focusInputEl:ctx=>{const inputEl=dom.getInputEl(ctx);if(dom.getActiveElement(ctx)===inputEl)return;inputEl?.focus({preventScroll:true})},focusTriggerEl:ctx=>{const triggerEl=dom.getTriggerEl(ctx);if(dom.getActiveElement(ctx)===triggerEl)return;triggerEl?.focus({preventScroll:true})}});function connect(state,send,normalize){const translations=state.context.translations;const collection2=state.context.collection;const disabled=state.context.disabled;const interactive=state.context.isInteractive;const invalid=state.context.invalid;const readOnly=state.context.readOnly;const open=state.hasTag("open");const focused=state.hasTag("focused");const composite=state.context.composite;const highlightedValue=state.context.highlightedValue;const popperStyles=getPlacementStyles({...state.context.positioning,placement:state.context.currentPlacement});function getItemState(props){const{item}=props;const disabled2=collection2.isItemDisabled(item);const value=collection2.itemToValue(item);return{value,disabled:Boolean(disabled2||disabled2),highlighted:highlightedValue===value,selected:state.context.value.includes(value)}}return{focused,open,inputValue:state.context.inputValue,highlightedValue,highlightedItem:state.context.highlightedItem,value:state.context.value,valueAsString:state.context.valueAsString,hasSelectedItems:state.context.hasSelectedItems,selectedItems:state.context.selectedItems,collection:state.context.collection,reposition(options={}){send({type:"POSITIONING.SET",options})},setCollection(collection3){send({type:"COLLECTION.SET",value:collection3})},setHighlightValue(value){send({type:"HIGHLIGHTED_VALUE.SET",value})},selectValue(value){send({type:"ITEM.SELECT",value})},setValue(value){send({type:"VALUE.SET",value})},setInputValue(value){send({type:"INPUT_VALUE.SET",value})},clearValue(value){if(value!=null){send({type:"ITEM.CLEAR",value})}else{send("VALUE.CLEAR")}},focus(){dom.getInputEl(state.context)?.focus()},setOpen(nextOpen){if(nextOpen===open)return;send(nextOpen?"OPEN":"CLOSE")},rootProps:normalize.element({...parts.root.attrs,dir:state.context.dir,id:dom.getRootId(state.context),"data-invalid":dataAttr(invalid),"data-readonly":dataAttr(readOnly)}),labelProps:normalize.label({...parts.label.attrs,dir:state.context.dir,htmlFor:dom.getInputId(state.context),id:dom.getLabelId(state.context),"data-readonly":dataAttr(readOnly),"data-disabled":dataAttr(disabled),"data-invalid":dataAttr(invalid),"data-focus":dataAttr(focused),onClick(event){if(composite)return;event.preventDefault();dom.getTriggerEl(state.context)?.focus({preventScroll:true})}}),controlProps:normalize.element({...parts.control.attrs,dir:state.context.dir,id:dom.getControlId(state.context),"data-state":open?"open":"closed","data-focus":dataAttr(focused),"data-disabled":dataAttr(disabled),"data-invalid":dataAttr(invalid)}),positionerProps:normalize.element({...parts.positioner.attrs,dir:state.context.dir,id:dom.getPositionerId(state.context),style:popperStyles.floating}),inputProps:normalize.input({...parts.input.attrs,dir:state.context.dir,"aria-invalid":ariaAttr(invalid),"data-invalid":dataAttr(invalid),name:state.context.name,form:state.context.form,disabled,autoFocus:state.context.autoFocus,autoComplete:"off",autoCorrect:"off",autoCapitalize:"none",spellCheck:"false",readOnly,placeholder:state.context.placeholder,id:dom.getInputId(state.context),type:"text",role:"combobox",defaultValue:state.context.inputValue,"aria-autocomplete":state.context.autoComplete?"both":"list","aria-controls":dom.getContentId(state.context),"aria-expanded":open,"data-state":open?"open":"closed","aria-activedescendant":highlightedValue?dom.getItemId(state.context,highlightedValue):void 0,onClick(event){if(event.defaultPrevented)return;if(!state.context.openOnClick)return;if(!interactive)return;send("INPUT.CLICK")},onFocus(){if(disabled)return;send("INPUT.FOCUS")},onBlur(){if(disabled)return;send("INPUT.BLUR")},onChange(event){send({type:"INPUT.CHANGE",value:event.currentTarget.value})},onKeyDown(event){if(event.defaultPrevented)return;if(!interactive)return;if(event.ctrlKey||event.shiftKey||isComposingEvent(event))return;const openOnKeyPress=state.context.openOnKeyPress;const isModifierKey=event.ctrlKey||event.metaKey||event.shiftKey;const keypress=true;const keymap={ArrowDown(event2){if(!openOnKeyPress&&!open)return;send({type:event2.altKey?"OPEN":"INPUT.ARROW_DOWN",keypress});event2.preventDefault()},ArrowUp(){if(!openOnKeyPress&&!open)return;send({type:event.altKey?"CLOSE":"INPUT.ARROW_UP",keypress});event.preventDefault()},Home(event2){if(isModifierKey)return;send({type:"INPUT.HOME",keypress});if(open){event2.preventDefault()}},End(event2){if(isModifierKey)return;send({type:"INPUT.END",keypress});if(open){event2.preventDefault()}},Enter(event2){send({type:"INPUT.ENTER",keypress});if(open){event2.preventDefault()}const itemEl=dom.getHighlightedItemEl(state.context);clickIfLink(itemEl)},Escape(){send({type:"INPUT.ESCAPE",keypress});event.preventDefault()}};const key=getEventKey(event,state.context);const exec=keymap[key];exec?.(event)}}),getTriggerProps(props={}){return normalize.button({...parts.trigger.attrs,dir:state.context.dir,id:dom.getTriggerId(state.context),"aria-haspopup":composite?"listbox":"dialog",type:"button",tabIndex:props.focusable?void 0:-1,"aria-label":translations.triggerLabel,"aria-expanded":open,"data-state":open?"open":"closed","aria-controls":open?dom.getContentId(state.context):void 0,disabled,"data-focusable":dataAttr(props.focusable),"data-readonly":dataAttr(readOnly),"data-disabled":dataAttr(disabled),onFocus(){if(!props.focusable)return;send({type:"INPUT.FOCUS",src:"trigger"})},onClick(event){if(event.defaultPrevented)return;if(!interactive)return;if(!isLeftClick(event))return;send("TRIGGER.CLICK")},onPointerDown(event){if(!interactive)return;if(event.pointerType==="touch")return;event.preventDefault();queueMicrotask(()=>{dom.getInputEl(state.context)?.focus({preventScroll:true})})},onKeyDown(event){if(event.defaultPrevented)return;if(composite)return;const keyMap={ArrowDown(){send({type:"INPUT.ARROW_DOWN",src:"trigger"})},ArrowUp(){send({type:"INPUT.ARROW_UP",src:"trigger"})}};const key=getEventKey(event,state.context);const exec=keyMap[key];if(exec){exec(event);event.preventDefault()}}})},contentProps:normalize.element({...parts.content.attrs,dir:state.context.dir,id:dom.getContentId(state.context),role:!composite?"dialog":"listbox",tabIndex:-1,hidden:!open,"data-state":open?"open":"closed","aria-labelledby":dom.getLabelId(state.context),"aria-multiselectable":state.context.multiple&&composite?true:void 0,onPointerDown(event){event.preventDefault()}}),listProps:normalize.element({role:!composite?"listbox":void 0,"aria-labelledby":dom.getLabelId(state.context),"aria-multiselectable":state.context.multiple&&!composite?true:void 0}),clearTriggerProps:normalize.button({...parts.clearTrigger.attrs,dir:state.context.dir,id:dom.getClearTriggerId(state.context),type:"button",tabIndex:-1,disabled,"aria-label":translations.clearTriggerLabel,"aria-controls":dom.getInputId(state.context),hidden:!state.context.value.length,onPointerDown(event){event.preventDefault()},onClick(event){if(event.defaultPrevented)return;if(!interactive)return;send({type:"VALUE.CLEAR",src:"clear-trigger"})}}),getItemState,getItemProps(props){const itemState=getItemState(props);const value=itemState.value;return normalize.element({...parts.item.attrs,dir:state.context.dir,id:dom.getItemId(state.context,value),role:"option",tabIndex:-1,"data-highlighted":dataAttr(itemState.highlighted),"data-state":itemState.selected?"checked":"unchecked","aria-selected":itemState.highlighted,"aria-disabled":itemState.disabled,"data-disabled":dataAttr(itemState.disabled),"data-value":itemState.value,onPointerMove(){if(itemState.disabled)return;if(itemState.highlighted)return;send({type:"ITEM.POINTER_MOVE",value})},onPointerLeave(){if(props.persistFocus)return;if(itemState.disabled)return;const mouseMoved=state.previousEvent.type.includes("POINTER");if(!mouseMoved)return;send({type:"ITEM.POINTER_LEAVE",value})},onPointerUp(event){if(isDownloadingEvent(event))return;if(isOpeningInNewTab(event))return;if(isContextMenuEvent(event))return;if(itemState.disabled)return;send({type:"ITEM.CLICK",src:"pointerup",value})},onTouchEnd(event){event.preventDefault();event.stopPropagation()}})},getItemTextProps(props){const itemState=getItemState(props);return normalize.element({...parts.itemText.attrs,dir:state.context.dir,"data-disabled":dataAttr(itemState.disabled),"data-highlighted":dataAttr(itemState.highlighted)})},getItemIndicatorProps(props){const itemState=getItemState(props);return normalize.element({"aria-hidden":true,...parts.itemIndicator.attrs,dir:state.context.dir,"data-state":itemState.selected?"checked":"unchecked",hidden:!itemState.selected})},getItemGroupProps(props){const{id}=props;return normalize.element({...parts.itemGroup.attrs,dir:state.context.dir,id:dom.getItemGroupId(state.context,id),"aria-labelledby":dom.getItemGroupLabelId(state.context,id)})},getItemGroupLabelProps(props){const{htmlFor}=props;return normalize.element({...parts.itemGroupLabel.attrs,dir:state.context.dir,id:dom.getItemGroupLabelId(state.context,htmlFor),role:"group"})}}}import{ariaHidden}from"@zag-js/aria-hidden";import{createMachine,guards}from"@zag-js/core";import{trackDismissableElement}from"@zag-js/dismissable";import{observeAttributes,observeChildren,raf,scrollIntoView}from"@zag-js/dom-query";import{getPlacement}from"@zag-js/popper";import{addOrRemove,compact,isArray,isBoolean,isEqual,match}from"@zag-js/utils";var{and,not}=guards;function machine(userContext){const ctx=compact(userContext);return createMachine({id:"combobox",initial:ctx.open?"suggesting":"idle",context:{loopFocus:true,openOnClick:false,value:[],highlightedValue:null,inputValue:"",allowCustomValue:false,closeOnSelect:!ctx.multiple,inputBehavior:"none",selectionBehavior:"replace",openOnKeyPress:true,openOnChange:true,composite:true,...ctx,highlightedItem:null,selectedItems:[],valueAsString:"",collection:ctx.collection??collection.empty(),positioning:{placement:"bottom",flip:false,sameWidth:true,...ctx.positioning},translations:{triggerLabel:"Toggle suggestions",clearTriggerLabel:"Clear value",...ctx.translations}},created:["syncInitialValues","syncSelectionBehavior"],computed:{isInputValueEmpty:ctx2=>ctx2.inputValue.length===0,isInteractive:ctx2=>!(ctx2.readOnly||ctx2.disabled),autoComplete:ctx2=>ctx2.inputBehavior==="autocomplete",autoHighlight:ctx2=>ctx2.inputBehavior==="autohighlight",hasSelectedItems:ctx2=>ctx2.value.length>0},watch:{value:["syncSelectedItems"],inputValue:["syncInputValue"],highlightedValue:["syncHighlightedItem","autofillInputValue"],multiple:["syncSelectionBehavior"],open:["toggleVisibility"]},on:{"HIGHLIGHTED_VALUE.SET":{actions:["setHighlightedItem"]},"ITEM.SELECT":{actions:["selectItem"]},"ITEM.CLEAR":{actions:["clearItem"]},"VALUE.SET":{actions:["setSelectedItems"]},"INPUT_VALUE.SET":{actions:"setInputValue"},"COLLECTION.SET":{actions:["setCollection"]},"POSITIONING.SET":{actions:["reposition"]}},states:{idle:{tags:["idle","closed"],entry:["scrollContentToTop","clearHighlightedItem"],on:{"CONTROLLED.OPEN":{target:"interacting"},"TRIGGER.CLICK":[{guard:"isOpenControlled",actions:["setInitialFocus","highlightFirstSelectedItem","invokeOnOpen"]},{target:"interacting",actions:["setInitialFocus","highlightFirstSelectedItem","invokeOnOpen"]}],"INPUT.CLICK":[{guard:"isOpenControlled",actions:["highlightFirstSelectedItem","invokeOnOpen"]},{target:"interacting",actions:["highlightFirstSelectedItem","invokeOnOpen"]}],"INPUT.FOCUS":{target:"focused"},OPEN:[{guard:"isOpenControlled",actions:["invokeOnOpen"]},{target:"interacting",actions:["invokeOnOpen"]}],"VALUE.CLEAR":{target:"focused",actions:["clearInputValue","clearSelectedItems","setInitialFocus"]}}},focused:{tags:["focused","closed"],entry:["scrollContentToTop","clearHighlightedItem"],on:{"CONTROLLED.OPEN":[{guard:"isChangeEvent",target:"suggesting"},{target:"interacting"}],"INPUT.CHANGE":[{guard:and("isOpenControlled","openOnChange"),actions:["setInputValue","invokeOnOpen","highlightFirstItemIfNeeded"]},{guard:"openOnChange",target:"suggesting",actions:["setInputValue","invokeOnOpen","highlightFirstItemIfNeeded"]},{actions:"setInputValue"}],"LAYER.INTERACT_OUTSIDE":{target:"idle"},"INPUT.ESCAPE":{guard:and("isCustomValue",not("allowCustomValue")),actions:"revertInputValue"},"INPUT.BLUR":{target:"idle"},"INPUT.CLICK":[{guard:"isOpenControlled",actions:["highlightFirstSelectedItem","invokeOnOpen"]},{target:"interacting",actions:["highlightFirstSelectedItem","invokeOnOpen"]}],"TRIGGER.CLICK":[{guard:"isOpenControlled",actions:["setInitialFocus","highlightFirstSelectedItem","invokeOnOpen"]},{target:"interacting",actions:["setInitialFocus","highlightFirstSelectedItem","invokeOnOpen"]}],"INPUT.ARROW_DOWN":[{guard:and("isOpenControlled","autoComplete"),actions:["invokeOnOpen"]},{guard:"autoComplete",target:"interacting",actions:["invokeOnOpen"]},{guard:"isOpenControlled",actions:["highlightFirstOrSelectedItem","invokeOnOpen"]},{target:"interacting",actions:["highlightFirstOrSelectedItem","invokeOnOpen"]}],"INPUT.ARROW_UP":[{guard:"autoComplete",target:"interacting",actions:"invokeOnOpen"},{guard:"autoComplete",target:"interacting",actions:"invokeOnOpen"},{target:"interacting",actions:["highlightLastOrSelectedItem","invokeOnOpen"]},{target:"interacting",actions:["highlightLastOrSelectedItem","invokeOnOpen"]}],OPEN:[{guard:"isOpenControlled",actions:["invokeOnOpen"]},{target:"interacting",actions:["invokeOnOpen"]}],"VALUE.CLEAR":{actions:["clearInputValue","clearSelectedItems"]}}},interacting:{tags:["open","focused"],entry:["setInitialFocus"],activities:["scrollToHighlightedItem","trackDismissableLayer","computePlacement","hideOtherElements"],on:{"CONTROLLED.CLOSE":[{guard:"restoreFocus",target:"focused",actions:["setFinalFocus"]},{target:"idle"}],"INPUT.HOME":{actions:["highlightFirstItem"]},"INPUT.END":{actions:["highlightLastItem"]},"INPUT.ARROW_DOWN":[{guard:and("autoComplete","isLastItemHighlighted"),actions:["clearHighlightedItem","scrollContentToTop"]},{actions:["highlightNextItem"]}],"INPUT.ARROW_UP":[{guard:and("autoComplete","isFirstItemHighlighted"),actions:"clearHighlightedItem"},{actions:"highlightPrevItem"}],"INPUT.ENTER":[{guard:and("isOpenControlled","closeOnSelect"),actions:["selectHighlightedItem","invokeOnClose"]},{guard:"closeOnSelect",target:"focused",actions:["selectHighlightedItem","invokeOnClose","setFinalFocus"]},{actions:["selectHighlightedItem"]}],"INPUT.CHANGE":[{guard:"autoComplete",target:"suggesting",actions:["setInputValue","invokeOnOpen"]},{target:"suggesting",actions:["clearHighlightedItem","setInputValue","invokeOnOpen"]}],"ITEM.POINTER_MOVE":{actions:["setHighlightedItem"]},"ITEM.POINTER_LEAVE":{actions:["clearHighlightedItem"]},"ITEM.CLICK":[{guard:and("isOpenControlled","closeOnSelect"),actions:["selectItem","invokeOnClose"]},{guard:"closeOnSelect",target:"focused",actions:["selectItem","invokeOnClose","setFinalFocus"]},{actions:["selectItem"]}],"LAYER.ESCAPE":[{guard:and("isOpenControlled","autoComplete"),actions:["syncInputValue","invokeOnClose"]},{guard:"autoComplete",target:"focused",actions:["syncInputValue","invokeOnClose"]},{guard:"isOpenControlled",actions:"invokeOnClose"},{target:"focused",actions:["invokeOnClose","setFinalFocus"]}],"TRIGGER.CLICK":[{guard:"isOpenControlled",actions:"invokeOnClose"},{target:"focused",actions:"invokeOnClose"}],"LAYER.INTERACT_OUTSIDE":[{guard:and("isOpenControlled","isCustomValue",not("allowCustomValue")),actions:["revertInputValue","invokeOnClose"]},{guard:and("isCustomValue",not("allowCustomValue")),target:"idle",actions:["revertInputValue","invokeOnClose"]},{guard:"isOpenControlled",actions:"invokeOnClose"},{target:"idle",actions:"invokeOnClose"}],CLOSE:[{guard:"isOpenControlled",actions:["invokeOnClose"]},{target:"focused",actions:["invokeOnClose","setFinalFocus"]}],"VALUE.CLEAR":[{guard:"isOpenControlled",actions:["clearInputValue","clearSelectedItems","invokeOnClose"]},{target:"focused",actions:["clearInputValue","clearSelectedItems","invokeOnClose","setFinalFocus"]}]}},suggesting:{tags:["open","focused"],activities:["trackDismissableLayer","scrollToHighlightedItem","computePlacement","trackChildNodes","hideOtherElements"],entry:["setInitialFocus"],on:{"CONTROLLED.CLOSE":[{guard:"restoreFocus",target:"focused",actions:["setFinalFocus"]},{target:"idle"}],CHILDREN_CHANGE:{actions:["highlightFirstItem"]},"INPUT.ARROW_DOWN":{target:"interacting",actions:["highlightNextItem"]},"INPUT.ARROW_UP":{target:"interacting",actions:["highlightPrevItem"]},"INPUT.HOME":{target:"interacting",actions:["highlightFirstItem"]},"INPUT.END":{target:"interacting",actions:["highlightLastItem"]},"INPUT.ENTER":[{guard:and("isOpenControlled","closeOnSelect"),actions:["selectHighlightedItem","invokeOnClose"]},{guard:"closeOnSelect",target:"focused",actions:["selectHighlightedItem","invokeOnClose","setFinalFocus"]},{actions:["selectHighlightedItem"]}],"INPUT.CHANGE":[{guard:"autoHighlight",actions:["setInputValue"]},{actions:["setInputValue"]}],"LAYER.ESCAPE":[{guard:"isOpenControlled",actions:["invokeOnClose"]},{target:"focused",actions:["invokeOnClose"]}],"ITEM.POINTER_MOVE":{target:"interacting",actions:["setHighlightedItem"]},"ITEM.POINTER_LEAVE":{actions:["clearHighlightedItem"]},"LAYER.INTERACT_OUTSIDE":[{guard:and("isOpenControlled","isCustomValue",not("allowCustomValue")),actions:["revertInputValue","invokeOnClose"]},{guard:and("isCustomValue",not("allowCustomValue")),target:"idle",actions:["revertInputValue","invokeOnClose"]},{guard:"isOpenControlled",actions:["invokeOnClose"]},{target:"idle",actions:["invokeOnClose"]}],"TRIGGER.CLICK":[{guard:"isOpenControlled",actions:["invokeOnClose"]},{target:"focused",actions:["invokeOnClose"]}],"ITEM.CLICK":[{guard:and("isOpenControlled","closeOnSelect"),actions:["selectItem","invokeOnClose"]},{guard:"closeOnSelect",target:"focused",actions:["selectItem","invokeOnClose","setFinalFocus"]},{actions:["selectItem"]}],CLOSE:[{guard:"isOpenControlled",actions:["invokeOnClose"]},{target:"focused",actions:["invokeOnClose","setFinalFocus"]}],"VALUE.CLEAR":[{guard:"isOpenControlled",actions:["clearInputValue","clearSelectedItems","invokeOnClose"]},{target:"focused",actions:["clearInputValue","clearSelectedItems","invokeOnClose","setFinalFocus"]}]}}}},{guards:{isInputValueEmpty:ctx2=>ctx2.isInputValueEmpty,autoComplete:ctx2=>ctx2.autoComplete&&!ctx2.multiple,autoHighlight:ctx2=>ctx2.autoHighlight,isFirstItemHighlighted:ctx2=>ctx2.collection.first()===ctx2.highlightedValue,isLastItemHighlighted:ctx2=>ctx2.collection.last()===ctx2.highlightedValue,isCustomValue:ctx2=>ctx2.inputValue!==ctx2.valueAsString,allowCustomValue:ctx2=>!!ctx2.allowCustomValue,hasHighlightedItem:ctx2=>ctx2.highlightedValue!=null,closeOnSelect:ctx2=>!!ctx2.closeOnSelect,isOpenControlled:ctx2=>!!ctx2["open.controlled"],openOnChange:(ctx2,evt)=>{if(isBoolean(ctx2.openOnChange))return ctx2.openOnChange;return!!ctx2.openOnChange?.({inputValue:evt.value})},restoreFocus:(_ctx,evt)=>evt.restoreFocus==null?true:!!evt.restoreFocus,isChangeEvent:(_ctx,evt)=>evt.previousEvent?.type==="INPUT.CHANGE"},activities:{trackDismissableLayer(ctx2,_evt,{send}){if(ctx2.disableLayer)return;const contentEl=()=>dom.getContentEl(ctx2);return trackDismissableElement(contentEl,{defer:true,exclude:()=>[dom.getInputEl(ctx2),dom.getTriggerEl(ctx2),dom.getClearTriggerEl(ctx2)],onFocusOutside:ctx2.onFocusOutside,onPointerDownOutside:ctx2.onPointerDownOutside,onInteractOutside:ctx2.onInteractOutside,onEscapeKeyDown(event){event.preventDefault();event.stopPropagation();send("LAYER.ESCAPE")},onDismiss(){send({type:"LAYER.INTERACT_OUTSIDE",restoreFocus:false})}})},hideOtherElements(ctx2){return ariaHidden([dom.getInputEl(ctx2),dom.getContentEl(ctx2),dom.getTriggerEl(ctx2)])},computePlacement(ctx2){const controlEl=()=>dom.getControlEl(ctx2);const positionerEl=()=>dom.getPositionerEl(ctx2);ctx2.currentPlacement=ctx2.positioning.placement;return getPlacement(controlEl,positionerEl,{...ctx2.positioning,defer:true,onComplete(data){ctx2.currentPlacement=data.placement}})},trackChildNodes(ctx2,_evt,{send}){if(!ctx2.autoHighlight)return;const exec=()=>send("CHILDREN_CHANGE");const contentEl=()=>dom.getContentEl(ctx2);return observeChildren(contentEl,{callback:exec,defer:true})},scrollToHighlightedItem(ctx2,_evt,{getState}){const inputEl=dom.getInputEl(ctx2);let cleanups=[];const exec=immediate=>{const state=getState();const pointer=state.event.type.includes("POINTER");if(pointer||!ctx2.highlightedValue)return;const itemEl=dom.getHighlightedItemEl(ctx2);const contentEl=dom.getContentEl(ctx2);if(ctx2.scrollToIndexFn){const highlightedIndex=ctx2.collection.indexOf(ctx2.highlightedValue);ctx2.scrollToIndexFn({index:highlightedIndex,immediate});return}const rafCleanup2=raf(()=>{scrollIntoView(itemEl,{rootEl:contentEl,block:"nearest"})});cleanups.push(rafCleanup2)};const rafCleanup=raf(()=>exec(true));cleanups.push(rafCleanup);const observerCleanup=observeAttributes(inputEl,{attributes:["aria-activedescendant"],callback:()=>exec(false)});cleanups.push(observerCleanup);return()=>{cleanups.forEach(cleanup=>cleanup())}}},actions:{reposition(ctx2,evt){const controlEl=()=>dom.getControlEl(ctx2);const positionerEl=()=>dom.getPositionerEl(ctx2);getPlacement(controlEl,positionerEl,{...ctx2.positioning,...evt.options,defer:true,listeners:false,onComplete(data){ctx2.currentPlacement=data.placement}})},setHighlightedItem(ctx2,evt){if(evt.value==null)return;set.highlightedValue(ctx2,evt.value)},clearHighlightedItem(ctx2){set.highlightedValue(ctx2,null,true)},selectHighlightedItem(ctx2){set.value(ctx2,ctx2.highlightedValue)},selectItem(ctx2,evt){if(evt.value==null)return;set.value(ctx2,evt.value)},clearItem(ctx2,evt){if(evt.value==null)return;const value=ctx2.value.filter(v=>v!==evt.value);set.value(ctx2,value)},setInitialFocus(ctx2){raf(()=>{dom.focusInputEl(ctx2)})},setFinalFocus(ctx2){raf(()=>{const triggerEl=dom.getTriggerEl(ctx2);if(triggerEl?.dataset.focusable==null){dom.focusInputEl(ctx2)}else{dom.focusTriggerEl(ctx2)}})},syncInputValue(ctx2){const inputEl=dom.getInputEl(ctx2);if(!inputEl)return;inputEl.value=ctx2.inputValue;queueMicrotask(()=>{const{selectionStart,selectionEnd}=inputEl;if(Math.abs((selectionEnd??0)-(selectionStart??0))!==0)return;if(selectionStart!==0)return;inputEl.setSelectionRange(inputEl.value.length,inputEl.value.length)})},setInputValue(ctx2,evt){set.inputValue(ctx2,evt.value)},clearInputValue(ctx2){set.inputValue(ctx2,"")},revertInputValue(ctx2){const inputValue=match(ctx2.selectionBehavior,{replace:ctx2.hasSelectedItems?ctx2.valueAsString:"",preserve:ctx2.inputValue,clear:""});set.inputValue(ctx2,inputValue)},syncInitialValues(ctx2){const selectedItems=ctx2.collection.items(ctx2.value);const valueAsString=ctx2.collection.itemsToString(selectedItems);ctx2.highlightedItem=ctx2.collection.item(ctx2.highlightedValue);ctx2.selectedItems=selectedItems;ctx2.valueAsString=valueAsString;ctx2.inputValue=match(ctx2.selectionBehavior,{preserve:ctx2.inputValue||valueAsString,replace:valueAsString,clear:""})},syncSelectionBehavior(ctx2){if(ctx2.multiple){ctx2.selectionBehavior="clear"}},setSelectedItems(ctx2,evt){if(!isArray(evt.value))return;set.value(ctx2,evt.value)},clearSelectedItems(ctx2){set.value(ctx2,[])},scrollContentToTop(ctx2){if(ctx2.scrollToIndexFn){ctx2.scrollToIndexFn({index:0,immediate:true})}else{const contentEl=dom.getContentEl(ctx2);if(!contentEl)return;contentEl.scrollTop=0}},invokeOnOpen(ctx2){ctx2.onOpenChange?.({open:true})},invokeOnClose(ctx2){ctx2.onOpenChange?.({open:false})},highlightFirstItem(ctx2){raf(()=>{const value=ctx2.collection.first();set.highlightedValue(ctx2,value)})},highlightFirstItemIfNeeded(ctx2){if(!ctx2.autoHighlight)return;raf(()=>{const value=ctx2.collection.first();set.highlightedValue(ctx2,value)})},highlightLastItem(ctx2){raf(()=>{const value=ctx2.collection.last();set.highlightedValue(ctx2,value)})},highlightNextItem(ctx2){let value=null;if(ctx2.highlightedValue){value=ctx2.collection.next(ctx2.highlightedValue);if(!value&&ctx2.loopFocus)value=ctx2.collection.first()}else{value=ctx2.collection.first()}set.highlightedValue(ctx2,value)},highlightPrevItem(ctx2){let value=null;if(ctx2.highlightedValue){value=ctx2.collection.prev(ctx2.highlightedValue);if(!value&&ctx2.loopFocus)value=ctx2.collection.last()}else{value=ctx2.collection.last()}set.highlightedValue(ctx2,value)},highlightFirstSelectedItem(ctx2){raf(()=>{const[value]=ctx2.collection.sort(ctx2.value);set.highlightedValue(ctx2,value)})},highlightFirstOrSelectedItem(ctx2){raf(()=>{let value=null;if(ctx2.hasSelectedItems){value=ctx2.collection.sort(ctx2.value)[0]}else{value=ctx2.collection.first()}set.highlightedValue(ctx2,value)})},highlightLastOrSelectedItem(ctx2){raf(()=>{let value=null;if(ctx2.hasSelectedItems){value=ctx2.collection.sort(ctx2.value)[0]}else{value=ctx2.collection.last()}set.highlightedValue(ctx2,value)})},autofillInputValue(ctx2,evt){const inputEl=dom.getInputEl(ctx2);if(!ctx2.autoComplete||!inputEl||!evt.keypress)return;const valueText=ctx2.collection.valueToString(ctx2.highlightedValue);raf(()=>{inputEl.value=valueText||ctx2.inputValue})},setCollection(ctx2,evt){ctx2.collection=evt.value},syncSelectedItems(ctx2){sync.valueChange(ctx2)},syncHighlightedItem(ctx2){sync.highlightChange(ctx2)},toggleVisibility(ctx2,evt,{send}){send({type:ctx2.open?"CONTROLLED.OPEN":"CONTROLLED.CLOSE",previousEvent:evt})}}})}var sync={valueChange:ctx=>{const prevSelectedItems=ctx.selectedItems;ctx.selectedItems=ctx.value.map(v=>{const foundItem=prevSelectedItems.find(item=>ctx.collection.itemToValue(item)===v);if(foundItem)return foundItem;return ctx.collection.item(v)});const valueAsString=ctx.collection.itemsToString(ctx.selectedItems);ctx.valueAsString=valueAsString;let inputValue;if(ctx.getSelectionValue){inputValue=ctx.getSelectionValue({inputValue:ctx.inputValue,selectedItems:Array.from(ctx.selectedItems),valueAsString})}else{inputValue=match(ctx.selectionBehavior,{replace:ctx.valueAsString,preserve:ctx.inputValue,clear:""})}set.inputValue(ctx,inputValue)},highlightChange:ctx=>{ctx.highlightedItem=ctx.collection.item(ctx.highlightedValue)}};var invoke={valueChange:ctx=>{sync.valueChange(ctx);ctx.onValueChange?.({value:Array.from(ctx.value),items:Array.from(ctx.selectedItems)})},highlightChange:ctx=>{sync.highlightChange(ctx);ctx.onHighlightChange?.({highlightedValue:ctx.highlightedValue,highlightedItem:ctx.highlightedItem})},inputChange:ctx=>{ctx.onInputValueChange?.({inputValue:ctx.inputValue})}};var set={value:(ctx,value,force=false)=>{if(isEqual(ctx.value,value))return;if(value==null&&!force)return;if(value==null&&force){ctx.value=[];invoke.valueChange(ctx);return}if(isArray(value)){ctx.value=value}else if(value!=null){ctx.value=ctx.multiple?addOrRemove(ctx.value,value):[value]}invoke.valueChange(ctx)},highlightedValue:(ctx,value,force=false)=>{if(isEqual(ctx.highlightedValue,value))return;if(!value&&!force)return;ctx.highlightedValue=value||null;invoke.highlightChange(ctx)},inputValue:(ctx,value)=>{if(isEqual(ctx.inputValue,value))return;ctx.inputValue=value;invoke.inputChange(ctx)}};export{anatomy,collection,connect,machine};
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/combobox.anatomy.ts","../src/combobox.collection.ts","../src/combobox.connect.ts","../src/combobox.dom.ts","../src/combobox.machine.ts"],"sourcesContent":["import { createAnatomy } from \"@zag-js/anatomy\"\n\nexport const anatomy = createAnatomy(\"combobox\").parts(\n \"root\",\n \"label\",\n \"input\",\n \"positioner\",\n \"control\",\n \"trigger\",\n \"content\",\n \"clearTrigger\",\n \"item\",\n \"itemText\",\n \"itemIndicator\",\n \"itemGroup\",\n \"itemGroupLabel\",\n)\nexport const parts = anatomy.build()\n","import { Collection, type CollectionItem, type CollectionOptions } from \"@zag-js/collection\"\nimport { ref } from \"@zag-js/core\"\n\nexport const collection = <T extends CollectionItem>(options: CollectionOptions<T>): Collection<T> => {\n return ref(new Collection(options))\n}\n\ncollection.empty = (): Collection<CollectionItem> => {\n return ref(new Collection<CollectionItem>({ items: [] }))\n}\n","import {\n clickIfLink,\n getEventKey,\n getNativeEvent,\n isContextMenuEvent,\n isLeftClick,\n type EventKeyMap,\n} from \"@zag-js/dom-event\"\nimport { ariaAttr, dataAttr, isDownloadingEvent, isOpeningInNewTab } from \"@zag-js/dom-query\"\nimport { getPlacementStyles } from \"@zag-js/popper\"\nimport type { NormalizeProps, PropTypes } from \"@zag-js/types\"\nimport { parts } from \"./combobox.anatomy\"\nimport { dom } from \"./combobox.dom\"\nimport type { CollectionItem, ItemProps, ItemState, MachineApi, Send, State } from \"./combobox.types\"\n\nexport function connect<T extends PropTypes, V extends CollectionItem>(\n state: State,\n send: Send,\n normalize: NormalizeProps<T>,\n): MachineApi<T, V> {\n const translations = state.context.translations\n const collection = state.context.collection\n\n const disabled = state.context.disabled\n const interactive = state.context.isInteractive\n const invalid = state.context.invalid\n const readOnly = state.context.readOnly\n\n const open = state.hasTag(\"open\")\n const focused = state.hasTag(\"focused\")\n const composite = state.context.composite\n const highlightedValue = state.context.highlightedValue\n\n const popperStyles = getPlacementStyles({\n ...state.context.positioning,\n placement: state.context.currentPlacement,\n })\n\n function getItemState(props: ItemProps): ItemState {\n const { item } = props\n const disabled = collection.isItemDisabled(item)\n const value = collection.itemToValue(item)\n return {\n value,\n disabled: Boolean(disabled || disabled),\n highlighted: highlightedValue === value,\n selected: state.context.value.includes(value),\n }\n }\n\n return {\n focused,\n open,\n inputValue: state.context.inputValue,\n highlightedValue,\n highlightedItem: state.context.highlightedItem,\n value: state.context.value,\n valueAsString: state.context.valueAsString,\n hasSelectedItems: state.context.hasSelectedItems,\n selectedItems: state.context.selectedItems,\n collection: state.context.collection,\n reposition(options = {}) {\n send({ type: \"POSITIONING.SET\", options })\n },\n setCollection(collection) {\n send({ type: \"COLLECTION.SET\", value: collection })\n },\n setHighlightValue(value) {\n send({ type: \"HIGHLIGHTED_VALUE.SET\", value })\n },\n selectValue(value) {\n send({ type: \"ITEM.SELECT\", value })\n },\n setValue(value) {\n send({ type: \"VALUE.SET\", value })\n },\n setInputValue(value) {\n send({ type: \"INPUT_VALUE.SET\", value })\n },\n clearValue(value) {\n if (value != null) {\n send({ type: \"ITEM.CLEAR\", value })\n } else {\n send(\"VALUE.CLEAR\")\n }\n },\n focus() {\n dom.getInputEl(state.context)?.focus()\n },\n setOpen(nextOpen) {\n if (nextOpen === open) return\n send(nextOpen ? \"OPEN\" : \"CLOSE\")\n },\n rootProps: normalize.element({\n ...parts.root.attrs,\n dir: state.context.dir,\n id: dom.getRootId(state.context),\n \"data-invalid\": dataAttr(invalid),\n \"data-readonly\": dataAttr(readOnly),\n }),\n\n labelProps: normalize.label({\n ...parts.label.attrs,\n dir: state.context.dir,\n htmlFor: dom.getInputId(state.context),\n id: dom.getLabelId(state.context),\n \"data-readonly\": dataAttr(readOnly),\n \"data-disabled\": dataAttr(disabled),\n \"data-invalid\": dataAttr(invalid),\n \"data-focus\": dataAttr(focused),\n onClick(event) {\n if (composite) return\n event.preventDefault()\n dom.getTriggerEl(state.context)?.focus({ preventScroll: true })\n },\n }),\n\n controlProps: normalize.element({\n ...parts.control.attrs,\n dir: state.context.dir,\n id: dom.getControlId(state.context),\n \"data-state\": open ? \"open\" : \"closed\",\n \"data-focus\": dataAttr(focused),\n \"data-disabled\": dataAttr(disabled),\n \"data-invalid\": dataAttr(invalid),\n }),\n\n positionerProps: normalize.element({\n ...parts.positioner.attrs,\n dir: state.context.dir,\n id: dom.getPositionerId(state.context),\n style: popperStyles.floating,\n }),\n\n inputProps: normalize.input({\n ...parts.input.attrs,\n dir: state.context.dir,\n \"aria-invalid\": ariaAttr(invalid),\n \"data-invalid\": dataAttr(invalid),\n name: state.context.name,\n form: state.context.form,\n disabled: disabled,\n autoFocus: state.context.autoFocus,\n autoComplete: \"off\",\n autoCorrect: \"off\",\n autoCapitalize: \"none\",\n spellCheck: \"false\",\n readOnly: readOnly,\n placeholder: state.context.placeholder,\n id: dom.getInputId(state.context),\n type: \"text\",\n role: \"combobox\",\n defaultValue: state.context.inputValue,\n \"aria-autocomplete\": state.context.autoComplete ? \"both\" : \"list\",\n \"aria-controls\": dom.getContentId(state.context),\n \"aria-expanded\": open,\n \"data-state\": open ? \"open\" : \"closed\",\n \"aria-activedescendant\": highlightedValue ? dom.getItemId(state.context, highlightedValue) : undefined,\n onClick(event) {\n if (event.defaultPrevented) return\n if (!state.context.openOnClick) return\n if (!interactive) return\n send(\"INPUT.CLICK\")\n },\n onFocus() {\n if (disabled) return\n send(\"INPUT.FOCUS\")\n },\n onBlur() {\n if (disabled) return\n send(\"INPUT.BLUR\")\n },\n onChange(event) {\n send({ type: \"INPUT.CHANGE\", value: event.currentTarget.value })\n },\n onKeyDown(event) {\n if (event.defaultPrevented) return\n if (!interactive) return\n\n const evt = getNativeEvent(event)\n if (evt.ctrlKey || evt.shiftKey || evt.isComposing) return\n\n const openOnKeyPress = state.context.openOnKeyPress\n const isModifierKey = event.ctrlKey || event.metaKey || event.shiftKey\n const keypress = true\n\n const keymap: EventKeyMap = {\n ArrowDown(event) {\n if (!openOnKeyPress && !open) return\n send({ type: event.altKey ? \"OPEN\" : \"INPUT.ARROW_DOWN\", keypress })\n event.preventDefault()\n },\n ArrowUp() {\n if (!openOnKeyPress && !open) return\n send({ type: event.altKey ? \"CLOSE\" : \"INPUT.ARROW_UP\", keypress })\n event.preventDefault()\n },\n Home(event) {\n if (isModifierKey) return\n send({ type: \"INPUT.HOME\", keypress })\n if (open) {\n event.preventDefault()\n }\n },\n End(event) {\n if (isModifierKey) return\n send({ type: \"INPUT.END\", keypress })\n if (open) {\n event.preventDefault()\n }\n },\n Enter(event) {\n if (evt.isComposing) return\n send({ type: \"INPUT.ENTER\", keypress })\n if (open) {\n event.preventDefault()\n }\n const itemEl = dom.getHighlightedItemEl(state.context)\n clickIfLink(itemEl)\n },\n Escape() {\n send({ type: \"INPUT.ESCAPE\", keypress })\n event.preventDefault()\n },\n }\n\n const key = getEventKey(event, state.context)\n const exec = keymap[key]\n exec?.(event)\n },\n }),\n\n getTriggerProps(props = {}) {\n return normalize.button({\n ...parts.trigger.attrs,\n dir: state.context.dir,\n id: dom.getTriggerId(state.context),\n \"aria-haspopup\": composite ? \"listbox\" : \"dialog\",\n type: \"button\",\n tabIndex: props.focusable ? undefined : -1,\n \"aria-label\": translations.triggerLabel,\n \"aria-expanded\": open,\n \"data-state\": open ? \"open\" : \"closed\",\n \"aria-controls\": open ? dom.getContentId(state.context) : undefined,\n disabled,\n \"data-focusable\": dataAttr(props.focusable),\n \"data-readonly\": dataAttr(readOnly),\n \"data-disabled\": dataAttr(disabled),\n onFocus() {\n if (!props.focusable) return\n send({ type: \"INPUT.FOCUS\", src: \"trigger\" })\n },\n onClick(event) {\n if (event.defaultPrevented) return\n const evt = getNativeEvent(event)\n if (!interactive) return\n if (!isLeftClick(evt)) return\n send(\"TRIGGER.CLICK\")\n },\n onPointerDown(event) {\n if (!interactive) return\n if (event.pointerType === \"touch\") return\n event.preventDefault()\n queueMicrotask(() => {\n dom.getInputEl(state.context)?.focus({ preventScroll: true })\n })\n },\n onKeyDown(event) {\n if (event.defaultPrevented) return\n if (composite) return\n\n const keyMap: EventKeyMap = {\n ArrowDown() {\n send({ type: \"INPUT.ARROW_DOWN\", src: \"trigger\" })\n },\n ArrowUp() {\n send({ type: \"INPUT.ARROW_UP\", src: \"trigger\" })\n },\n }\n\n const key = getEventKey(event, state.context)\n const exec = keyMap[key]\n\n if (exec) {\n exec(event)\n event.preventDefault()\n }\n },\n })\n },\n\n contentProps: normalize.element({\n ...parts.content.attrs,\n dir: state.context.dir,\n id: dom.getContentId(state.context),\n role: !composite ? \"dialog\" : \"listbox\",\n tabIndex: -1,\n hidden: !open,\n \"data-state\": open ? \"open\" : \"closed\",\n \"aria-labelledby\": dom.getLabelId(state.context),\n \"aria-multiselectable\": state.context.multiple && composite ? true : undefined,\n onPointerDown(event) {\n // prevent options or elements within listbox from taking focus\n event.preventDefault()\n },\n }),\n\n listProps: normalize.element({\n role: !composite ? \"listbox\" : undefined,\n \"aria-labelledby\": dom.getLabelId(state.context),\n \"aria-multiselectable\": state.context.multiple && !composite ? true : undefined,\n }),\n\n clearTriggerProps: normalize.button({\n ...parts.clearTrigger.attrs,\n dir: state.context.dir,\n id: dom.getClearTriggerId(state.context),\n type: \"button\",\n tabIndex: -1,\n disabled: disabled,\n \"aria-label\": translations.clearTriggerLabel,\n \"aria-controls\": dom.getInputId(state.context),\n hidden: !state.context.value.length,\n onPointerDown(event) {\n event.preventDefault()\n },\n onClick(event) {\n if (event.defaultPrevented) return\n if (!interactive) return\n send({ type: \"VALUE.CLEAR\", src: \"clear-trigger\" })\n },\n }),\n\n getItemState,\n\n getItemProps(props) {\n const itemState = getItemState(props)\n const value = itemState.value\n\n return normalize.element({\n ...parts.item.attrs,\n dir: state.context.dir,\n id: dom.getItemId(state.context, value),\n role: \"option\",\n tabIndex: -1,\n \"data-highlighted\": dataAttr(itemState.highlighted),\n \"data-state\": itemState.selected ? \"checked\" : \"unchecked\",\n \"aria-selected\": itemState.highlighted,\n \"aria-disabled\": itemState.disabled,\n \"data-disabled\": dataAttr(itemState.disabled),\n \"data-value\": itemState.value,\n onPointerMove() {\n if (itemState.disabled) return\n if (itemState.highlighted) return\n send({ type: \"ITEM.POINTER_MOVE\", value })\n },\n onPointerLeave() {\n if (props.persistFocus) return\n if (itemState.disabled) return\n const mouseMoved = state.previousEvent.type.includes(\"POINTER\")\n if (!mouseMoved) return\n send({ type: \"ITEM.POINTER_LEAVE\", value })\n },\n onPointerUp(event) {\n if (isDownloadingEvent(event)) return\n if (isOpeningInNewTab(event)) return\n if (isContextMenuEvent(event)) return\n if (itemState.disabled) return\n send({ type: \"ITEM.CLICK\", src: \"pointerup\", value })\n },\n onTouchEnd(event) {\n // prevent clicking elements behind content\n event.preventDefault()\n event.stopPropagation()\n },\n })\n },\n\n getItemTextProps(props) {\n const itemState = getItemState(props)\n return normalize.element({\n ...parts.itemText.attrs,\n dir: state.context.dir,\n \"data-disabled\": dataAttr(itemState.disabled),\n \"data-highlighted\": dataAttr(itemState.highlighted),\n })\n },\n getItemIndicatorProps(props) {\n const itemState = getItemState(props)\n return normalize.element({\n \"aria-hidden\": true,\n ...parts.itemIndicator.attrs,\n dir: state.context.dir,\n \"data-state\": itemState.selected ? \"checked\" : \"unchecked\",\n hidden: !itemState.selected,\n })\n },\n\n getItemGroupProps(props) {\n const { id } = props\n return normalize.element({\n ...parts.itemGroup.attrs,\n dir: state.context.dir,\n id: dom.getItemGroupId(state.context, id),\n \"aria-labelledby\": dom.getItemGroupLabelId(state.context, id),\n })\n },\n\n getItemGroupLabelProps(props) {\n const { htmlFor } = props\n return normalize.element({\n ...parts.itemGroupLabel.attrs,\n dir: state.context.dir,\n id: dom.getItemGroupLabelId(state.context, htmlFor),\n role: \"group\",\n })\n },\n }\n}\n","import { createScope, query } from \"@zag-js/dom-query\"\nimport type { MachineContext as Ctx } from \"./combobox.types\"\n\nexport const dom = createScope({\n getRootId: (ctx: Ctx) => ctx.ids?.root ?? `combobox:${ctx.id}`,\n getLabelId: (ctx: Ctx) => ctx.ids?.label ?? `combobox:${ctx.id}:label`,\n getControlId: (ctx: Ctx) => ctx.ids?.control ?? `combobox:${ctx.id}:control`,\n getInputId: (ctx: Ctx) => ctx.ids?.input ?? `combobox:${ctx.id}:input`,\n getContentId: (ctx: Ctx) => ctx.ids?.content ?? `combobox:${ctx.id}:content`,\n getPositionerId: (ctx: Ctx) => ctx.ids?.positioner ?? `combobox:${ctx.id}:popper`,\n getTriggerId: (ctx: Ctx) => ctx.ids?.trigger ?? `combobox:${ctx.id}:toggle-btn`,\n getClearTriggerId: (ctx: Ctx) => ctx.ids?.clearTrigger ?? `combobox:${ctx.id}:clear-btn`,\n getItemGroupId: (ctx: Ctx, id: string | number) => ctx.ids?.itemGroup?.(id) ?? `combobox:${ctx.id}:optgroup:${id}`,\n getItemGroupLabelId: (ctx: Ctx, id: string | number) =>\n ctx.ids?.itemGroupLabel?.(id) ?? `combobox:${ctx.id}:optgroup-label:${id}`,\n getItemId: (ctx: Ctx, id: string) => `combobox:${ctx.id}:option:${id}`,\n\n getContentEl: (ctx: Ctx) => dom.getById(ctx, dom.getContentId(ctx)),\n getInputEl: (ctx: Ctx) => dom.getById<HTMLInputElement>(ctx, dom.getInputId(ctx)),\n getPositionerEl: (ctx: Ctx) => dom.getById(ctx, dom.getPositionerId(ctx)),\n getControlEl: (ctx: Ctx) => dom.getById(ctx, dom.getControlId(ctx)),\n getTriggerEl: (ctx: Ctx) => dom.getById(ctx, dom.getTriggerId(ctx)),\n getClearTriggerEl: (ctx: Ctx) => dom.getById(ctx, dom.getClearTriggerId(ctx)),\n getHighlightedItemEl: (ctx: Ctx) => {\n const value = ctx.highlightedValue\n if (value == null) return\n return query(dom.getContentEl(ctx), `[role=option][data-value=\"${CSS.escape(value)}\"`)\n },\n\n focusInputEl: (ctx: Ctx) => {\n const inputEl = dom.getInputEl(ctx)\n if (dom.getActiveElement(ctx) === inputEl) return\n inputEl?.focus({ preventScroll: true })\n },\n focusTriggerEl: (ctx: Ctx) => {\n const triggerEl = dom.getTriggerEl(ctx)\n if (dom.getActiveElement(ctx) === triggerEl) return\n triggerEl?.focus({ preventScroll: true })\n },\n})\n","import { ariaHidden } from \"@zag-js/aria-hidden\"\nimport { createMachine, guards } from \"@zag-js/core\"\nimport { trackDismissableElement } from \"@zag-js/dismissable\"\nimport { observeAttributes, observeChildren, raf, scrollIntoView } from \"@zag-js/dom-query\"\nimport { getPlacement } from \"@zag-js/popper\"\nimport { addOrRemove, compact, isArray, isBoolean, isEqual, match } from \"@zag-js/utils\"\nimport { collection } from \"./combobox.collection\"\nimport { dom } from \"./combobox.dom\"\nimport type { CollectionItem, MachineContext, MachineState, UserDefinedContext } from \"./combobox.types\"\n\nconst { and, not } = guards\n\nexport function machine<T extends CollectionItem>(userContext: UserDefinedContext<T>) {\n const ctx = compact(userContext)\n return createMachine<MachineContext, MachineState>(\n {\n id: \"combobox\",\n initial: ctx.open ? \"suggesting\" : \"idle\",\n context: {\n loopFocus: true,\n openOnClick: false,\n value: [],\n highlightedValue: null,\n inputValue: \"\",\n allowCustomValue: false,\n closeOnSelect: !ctx.multiple,\n inputBehavior: \"none\",\n selectionBehavior: \"replace\",\n openOnKeyPress: true,\n openOnChange: true,\n composite: true,\n ...ctx,\n highlightedItem: null,\n selectedItems: [],\n valueAsString: \"\",\n collection: ctx.collection ?? collection.empty(),\n positioning: {\n placement: \"bottom\",\n flip: false,\n sameWidth: true,\n ...ctx.positioning,\n },\n translations: {\n triggerLabel: \"Toggle suggestions\",\n clearTriggerLabel: \"Clear value\",\n ...ctx.translations,\n },\n },\n\n created: [\"syncInitialValues\", \"syncSelectionBehavior\"],\n\n computed: {\n isInputValueEmpty: (ctx) => ctx.inputValue.length === 0,\n isInteractive: (ctx) => !(ctx.readOnly || ctx.disabled),\n autoComplete: (ctx) => ctx.inputBehavior === \"autocomplete\",\n autoHighlight: (ctx) => ctx.inputBehavior === \"autohighlight\",\n hasSelectedItems: (ctx) => ctx.value.length > 0,\n },\n\n watch: {\n value: [\"syncSelectedItems\"],\n inputValue: [\"syncInputValue\"],\n highlightedValue: [\"syncHighlightedItem\", \"autofillInputValue\"],\n multiple: [\"syncSelectionBehavior\"],\n open: [\"toggleVisibility\"],\n },\n\n on: {\n \"HIGHLIGHTED_VALUE.SET\": {\n actions: [\"setHighlightedItem\"],\n },\n \"ITEM.SELECT\": {\n actions: [\"selectItem\"],\n },\n \"ITEM.CLEAR\": {\n actions: [\"clearItem\"],\n },\n \"VALUE.SET\": {\n actions: [\"setSelectedItems\"],\n },\n \"INPUT_VALUE.SET\": {\n actions: \"setInputValue\",\n },\n \"COLLECTION.SET\": {\n actions: [\"setCollection\"],\n },\n \"POSITIONING.SET\": {\n actions: [\"reposition\"],\n },\n },\n\n states: {\n idle: {\n tags: [\"idle\", \"closed\"],\n entry: [\"scrollContentToTop\", \"clearHighlightedItem\"],\n on: {\n \"CONTROLLED.OPEN\": {\n target: \"interacting\",\n },\n \"TRIGGER.CLICK\": [\n {\n guard: \"isOpenControlled\",\n actions: [\"setInitialFocus\", \"highlightFirstSelectedItem\", \"invokeOnOpen\"],\n },\n {\n target: \"interacting\",\n actions: [\"setInitialFocus\", \"highlightFirstSelectedItem\", \"invokeOnOpen\"],\n },\n ],\n \"INPUT.CLICK\": [\n {\n guard: \"isOpenControlled\",\n actions: [\"highlightFirstSelectedItem\", \"invokeOnOpen\"],\n },\n {\n target: \"interacting\",\n actions: [\"highlightFirstSelectedItem\", \"invokeOnOpen\"],\n },\n ],\n \"INPUT.FOCUS\": {\n target: \"focused\",\n },\n OPEN: [\n {\n guard: \"isOpenControlled\",\n actions: [\"invokeOnOpen\"],\n },\n {\n target: \"interacting\",\n actions: [\"invokeOnOpen\"],\n },\n ],\n \"VALUE.CLEAR\": {\n target: \"focused\",\n actions: [\"clearInputValue\", \"clearSelectedItems\", \"setInitialFocus\"],\n },\n },\n },\n\n focused: {\n tags: [\"focused\", \"closed\"],\n entry: [\"scrollContentToTop\", \"clearHighlightedItem\"],\n on: {\n \"CONTROLLED.OPEN\": [\n {\n guard: \"isChangeEvent\",\n target: \"suggesting\",\n },\n {\n target: \"interacting\",\n },\n ],\n \"INPUT.CHANGE\": [\n {\n guard: and(\"isOpenControlled\", \"openOnChange\"),\n actions: [\"setInputValue\", \"invokeOnOpen\", \"highlightFirstItemIfNeeded\"],\n },\n {\n guard: \"openOnChange\",\n target: \"suggesting\",\n actions: [\"setInputValue\", \"invokeOnOpen\", \"highlightFirstItemIfNeeded\"],\n },\n {\n actions: \"setInputValue\",\n },\n ],\n \"LAYER.INTERACT_OUTSIDE\": {\n target: \"idle\",\n },\n \"INPUT.ESCAPE\": {\n guard: and(\"isCustomValue\", not(\"allowCustomValue\")),\n actions: \"revertInputValue\",\n },\n \"INPUT.BLUR\": {\n target: \"idle\",\n },\n \"INPUT.CLICK\": [\n {\n guard: \"isOpenControlled\",\n actions: [\"highlightFirstSelectedItem\", \"invokeOnOpen\"],\n },\n {\n target: \"interacting\",\n actions: [\"highlightFirstSelectedItem\", \"invokeOnOpen\"],\n },\n ],\n \"TRIGGER.CLICK\": [\n {\n guard: \"isOpenControlled\",\n actions: [\"setInitialFocus\", \"highlightFirstSelectedItem\", \"invokeOnOpen\"],\n },\n {\n target: \"interacting\",\n actions: [\"setInitialFocus\", \"highlightFirstSelectedItem\", \"invokeOnOpen\"],\n },\n ],\n \"INPUT.ARROW_DOWN\": [\n // == group 1 ==\n {\n guard: and(\"isOpenControlled\", \"autoComplete\"),\n actions: [\"invokeOnOpen\"],\n },\n {\n guard: \"autoComplete\",\n target: \"interacting\",\n actions: [\"invokeOnOpen\"],\n },\n // == group 2 ==\n {\n guard: \"isOpenControlled\",\n actions: [\"highlightFirstOrSelectedItem\", \"invokeOnOpen\"],\n },\n {\n target: \"interacting\",\n actions: [\"highlightFirstOrSelectedItem\", \"invokeOnOpen\"],\n },\n ],\n \"INPUT.ARROW_UP\": [\n // == group 1 ==\n {\n guard: \"autoComplete\",\n target: \"interacting\",\n actions: \"invokeOnOpen\",\n },\n {\n guard: \"autoComplete\",\n target: \"interacting\",\n actions: \"invokeOnOpen\",\n },\n // == group 2 ==\n {\n target: \"interacting\",\n actions: [\"highlightLastOrSelectedItem\", \"invokeOnOpen\"],\n },\n {\n target: \"interacting\",\n actions: [\"highlightLastOrSelectedItem\", \"invokeOnOpen\"],\n },\n ],\n OPEN: [\n {\n guard: \"isOpenControlled\",\n actions: [\"invokeOnOpen\"],\n },\n {\n target: \"interacting\",\n actions: [\"invokeOnOpen\"],\n },\n ],\n \"VALUE.CLEAR\": {\n actions: [\"clearInputValue\", \"clearSelectedItems\"],\n },\n },\n },\n\n interacting: {\n tags: [\"open\", \"focused\"],\n entry: [\"setInitialFocus\"],\n activities: [\"scrollToHighlightedItem\", \"trackDismissableLayer\", \"computePlacement\", \"hideOtherElements\"],\n on: {\n \"CONTROLLED.CLOSE\": [\n {\n guard: \"restoreFocus\",\n target: \"focused\",\n actions: [\"setFinalFocus\"],\n },\n {\n target: \"idle\",\n },\n ],\n \"INPUT.HOME\": {\n actions: [\"highlightFirstItem\"],\n },\n \"INPUT.END\": {\n actions: [\"highlightLastItem\"],\n },\n \"INPUT.ARROW_DOWN\": [\n {\n guard: and(\"autoComplete\", \"isLastItemHighlighted\"),\n actions: [\"clearHighlightedItem\", \"scrollContentToTop\"],\n },\n {\n actions: [\"highlightNextItem\"],\n },\n ],\n \"INPUT.ARROW_UP\": [\n {\n guard: and(\"autoComplete\", \"isFirstItemHighlighted\"),\n actions: \"clearHighlightedItem\",\n },\n {\n actions: \"highlightPrevItem\",\n },\n ],\n \"INPUT.ENTER\": [\n {\n guard: and(\"isOpenControlled\", \"closeOnSelect\"),\n actions: [\"selectHighlightedItem\", \"invokeOnClose\"],\n },\n {\n guard: \"closeOnSelect\",\n target: \"focused\",\n actions: [\"selectHighlightedItem\", \"invokeOnClose\", \"setFinalFocus\"],\n },\n {\n actions: [\"selectHighlightedItem\"],\n },\n ],\n \"INPUT.CHANGE\": [\n {\n guard: \"autoComplete\",\n target: \"suggesting\",\n actions: [\"setInputValue\", \"invokeOnOpen\"],\n },\n {\n target: \"suggesting\",\n actions: [\"clearHighlightedItem\", \"setInputValue\", \"invokeOnOpen\"],\n },\n ],\n \"ITEM.POINTER_MOVE\": {\n actions: [\"setHighlightedItem\"],\n },\n \"ITEM.POINTER_LEAVE\": {\n actions: [\"clearHighlightedItem\"],\n },\n \"ITEM.CLICK\": [\n {\n guard: and(\"isOpenControlled\", \"closeOnSelect\"),\n actions: [\"selectItem\", \"invokeOnClose\"],\n },\n {\n guard: \"closeOnSelect\",\n target: \"focused\",\n actions: [\"selectItem\", \"invokeOnClose\", \"setFinalFocus\"],\n },\n {\n actions: [\"selectItem\"],\n },\n ],\n \"LAYER.ESCAPE\": [\n {\n guard: and(\"isOpenControlled\", \"autoComplete\"),\n actions: [\"syncInputValue\", \"invokeOnClose\"],\n },\n {\n guard: \"autoComplete\",\n target: \"focused\",\n actions: [\"syncInputValue\", \"invokeOnClose\"],\n },\n {\n guard: \"isOpenControlled\",\n actions: \"invokeOnClose\",\n },\n {\n target: \"focused\",\n actions: [\"invokeOnClose\", \"setFinalFocus\"],\n },\n ],\n \"TRIGGER.CLICK\": [\n {\n guard: \"isOpenControlled\",\n actions: \"invokeOnClose\",\n },\n {\n target: \"focused\",\n actions: \"invokeOnClose\",\n },\n ],\n \"LAYER.INTERACT_OUTSIDE\": [\n // == group 1 ==\n {\n guard: and(\"isOpenControlled\", \"isCustomValue\", not(\"allowCustomValue\")),\n actions: [\"revertInputValue\", \"invokeOnClose\"],\n },\n {\n guard: and(\"isCustomValue\", not(\"allowCustomValue\")),\n target: \"idle\",\n actions: [\"revertInputValue\", \"invokeOnClose\"],\n },\n // == group 2 ==\n {\n guard: \"isOpenControlled\",\n actions: \"invokeOnClose\",\n },\n {\n target: \"idle\",\n actions: \"invokeOnClose\",\n },\n ],\n CLOSE: [\n {\n guard: \"isOpenControlled\",\n actions: [\"invokeOnClose\"],\n },\n {\n target: \"focused\",\n actions: [\"invokeOnClose\", \"setFinalFocus\"],\n },\n ],\n \"VALUE.CLEAR\": [\n {\n guard: \"isOpenControlled\",\n actions: [\"clearInputValue\", \"clearSelectedItems\", \"invokeOnClose\"],\n },\n {\n target: \"focused\",\n actions: [\"clearInputValue\", \"clearSelectedItems\", \"invokeOnClose\", \"setFinalFocus\"],\n },\n ],\n },\n },\n\n suggesting: {\n tags: [\"open\", \"focused\"],\n activities: [\n \"trackDismissableLayer\",\n \"scrollToHighlightedItem\",\n \"computePlacement\",\n \"trackChildNodes\",\n \"hideOtherElements\",\n ],\n entry: [\"setInitialFocus\"],\n on: {\n \"CONTROLLED.CLOSE\": [\n {\n guard: \"restoreFocus\",\n target: \"focused\",\n actions: [\"setFinalFocus\"],\n },\n {\n target: \"idle\",\n },\n ],\n CHILDREN_CHANGE: {\n actions: [\"highlightFirstItem\"],\n },\n \"INPUT.ARROW_DOWN\": {\n target: \"interacting\",\n actions: [\"highlightNextItem\"],\n },\n \"INPUT.ARROW_UP\": {\n target: \"interacting\",\n actions: [\"highlightPrevItem\"],\n },\n \"INPUT.HOME\": {\n target: \"interacting\",\n actions: [\"highlightFirstItem\"],\n },\n \"INPUT.END\": {\n target: \"interacting\",\n actions: [\"highlightLastItem\"],\n },\n \"INPUT.ENTER\": [\n {\n guard: and(\"isOpenControlled\", \"closeOnSelect\"),\n actions: [\"selectHighlightedItem\", \"invokeOnClose\"],\n },\n {\n guard: \"closeOnSelect\",\n target: \"focused\",\n actions: [\"selectHighlightedItem\", \"invokeOnClose\", \"setFinalFocus\"],\n },\n {\n actions: [\"selectHighlightedItem\"],\n },\n ],\n \"INPUT.CHANGE\": [\n {\n guard: \"autoHighlight\",\n actions: [\"setInputValue\"],\n },\n {\n actions: [\"setInputValue\"],\n },\n ],\n \"LAYER.ESCAPE\": [\n {\n guard: \"isOpenControlled\",\n actions: [\"invokeOnClose\"],\n },\n {\n target: \"focused\",\n actions: [\"invokeOnClose\"],\n },\n ],\n \"ITEM.POINTER_MOVE\": {\n target: \"interacting\",\n actions: [\"setHighlightedItem\"],\n },\n \"ITEM.POINTER_LEAVE\": {\n actions: [\"clearHighlightedItem\"],\n },\n \"LAYER.INTERACT_OUTSIDE\": [\n // == group 1 ==\n {\n guard: and(\"isOpenControlled\", \"isCustomValue\", not(\"allowCustomValue\")),\n actions: [\"revertInputValue\", \"invokeOnClose\"],\n },\n {\n guard: and(\"isCustomValue\", not(\"allowCustomValue\")),\n target: \"idle\",\n actions: [\"revertInputValue\", \"invokeOnClose\"],\n },\n // == group 2 ==\n {\n guard: \"isOpenControlled\",\n actions: [\"invokeOnClose\"],\n },\n {\n target: \"idle\",\n actions: [\"invokeOnClose\"],\n },\n ],\n \"TRIGGER.CLICK\": [\n {\n guard: \"isOpenControlled\",\n actions: [\"invokeOnClose\"],\n },\n {\n target: \"focused\",\n actions: [\"invokeOnClose\"],\n },\n ],\n \"ITEM.CLICK\": [\n {\n guard: and(\"isOpenControlled\", \"closeOnSelect\"),\n actions: [\"selectItem\", \"invokeOnClose\"],\n },\n {\n guard: \"closeOnSelect\",\n target: \"focused\",\n actions: [\"selectItem\", \"invokeOnClose\", \"setFinalFocus\"],\n },\n {\n actions: [\"selectItem\"],\n },\n ],\n CLOSE: [\n {\n guard: \"isOpenControlled\",\n actions: [\"invokeOnClose\"],\n },\n {\n target: \"focused\",\n actions: [\"invokeOnClose\", \"setFinalFocus\"],\n },\n ],\n \"VALUE.CLEAR\": [\n {\n guard: \"isOpenControlled\",\n actions: [\"clearInputValue\", \"clearSelectedItems\", \"invokeOnClose\"],\n },\n {\n target: \"focused\",\n actions: [\"clearInputValue\", \"clearSelectedItems\", \"invokeOnClose\", \"setFinalFocus\"],\n },\n ],\n },\n },\n },\n },\n\n {\n guards: {\n isInputValueEmpty: (ctx) => ctx.isInputValueEmpty,\n autoComplete: (ctx) => ctx.autoComplete && !ctx.multiple,\n autoHighlight: (ctx) => ctx.autoHighlight,\n isFirstItemHighlighted: (ctx) => ctx.collection.first() === ctx.highlightedValue,\n isLastItemHighlighted: (ctx) => ctx.collection.last() === ctx.highlightedValue,\n isCustomValue: (ctx) => ctx.inputValue !== ctx.valueAsString,\n allowCustomValue: (ctx) => !!ctx.allowCustomValue,\n hasHighlightedItem: (ctx) => ctx.highlightedValue != null,\n closeOnSelect: (ctx) => !!ctx.closeOnSelect,\n isOpenControlled: (ctx) => !!ctx[\"open.controlled\"],\n openOnChange: (ctx, evt) => {\n if (isBoolean(ctx.openOnChange)) return ctx.openOnChange\n return !!ctx.openOnChange?.({ inputValue: evt.value })\n },\n restoreFocus: (_ctx, evt) => (evt.restoreFocus == null ? true : !!evt.restoreFocus),\n isChangeEvent: (_ctx, evt) => evt.previousEvent?.type === \"INPUT.CHANGE\",\n },\n\n activities: {\n trackDismissableLayer(ctx, _evt, { send }) {\n if (ctx.disableLayer) return\n const contentEl = () => dom.getContentEl(ctx)\n return trackDismissableElement(contentEl, {\n defer: true,\n exclude: () => [dom.getInputEl(ctx), dom.getTriggerEl(ctx), dom.getClearTriggerEl(ctx)],\n onFocusOutside: ctx.onFocusOutside,\n onPointerDownOutside: ctx.onPointerDownOutside,\n onInteractOutside: ctx.onInteractOutside,\n onEscapeKeyDown(event) {\n event.preventDefault()\n event.stopPropagation()\n send(\"LAYER.ESCAPE\")\n },\n onDismiss() {\n send({ type: \"LAYER.INTERACT_OUTSIDE\", restoreFocus: false })\n },\n })\n },\n hideOtherElements(ctx) {\n return ariaHidden([dom.getInputEl(ctx), dom.getContentEl(ctx), dom.getTriggerEl(ctx)])\n },\n computePlacement(ctx) {\n const controlEl = () => dom.getControlEl(ctx)\n const positionerEl = () => dom.getPositionerEl(ctx)\n ctx.currentPlacement = ctx.positioning.placement\n return getPlacement(controlEl, positionerEl, {\n ...ctx.positioning,\n defer: true,\n onComplete(data) {\n ctx.currentPlacement = data.placement\n },\n })\n },\n // in event the options are fetched (async), we still want to auto-highlight the first option\n trackChildNodes(ctx, _evt, { send }) {\n if (!ctx.autoHighlight) return\n const exec = () => send(\"CHILDREN_CHANGE\")\n const contentEl = () => dom.getContentEl(ctx)\n return observeChildren(contentEl, {\n callback: exec,\n defer: true,\n })\n },\n scrollToHighlightedItem(ctx, _evt, { getState }) {\n const inputEl = dom.getInputEl(ctx)\n\n let cleanups: VoidFunction[] = []\n\n const exec = (immediate: boolean) => {\n const state = getState()\n\n const pointer = state.event.type.includes(\"POINTER\")\n if (pointer || !ctx.highlightedValue) return\n\n const itemEl = dom.getHighlightedItemEl(ctx)\n const contentEl = dom.getContentEl(ctx)\n\n if (ctx.scrollToIndexFn) {\n const highlightedIndex = ctx.collection.indexOf(ctx.highlightedValue)\n ctx.scrollToIndexFn({ index: highlightedIndex, immediate })\n return\n }\n\n const rafCleanup = raf(() => {\n scrollIntoView(itemEl, { rootEl: contentEl, block: \"nearest\" })\n })\n cleanups.push(rafCleanup)\n }\n\n const rafCleanup = raf(() => exec(true))\n cleanups.push(rafCleanup)\n\n const observerCleanup = observeAttributes(inputEl, {\n attributes: [\"aria-activedescendant\"],\n callback: () => exec(false),\n })\n cleanups.push(observerCleanup)\n\n return () => {\n cleanups.forEach((cleanup) => cleanup())\n }\n },\n },\n\n actions: {\n reposition(ctx, evt) {\n const controlEl = () => dom.getControlEl(ctx)\n const positionerEl = () => dom.getPositionerEl(ctx)\n getPlacement(controlEl, positionerEl, {\n ...ctx.positioning,\n ...evt.options,\n defer: true,\n listeners: false,\n onComplete(data) {\n ctx.currentPlacement = data.placement\n },\n })\n },\n setHighlightedItem(ctx, evt) {\n if (evt.value == null) return\n set.highlightedValue(ctx, evt.value)\n },\n clearHighlightedItem(ctx) {\n set.highlightedValue(ctx, null, true)\n },\n selectHighlightedItem(ctx) {\n set.value(ctx, ctx.highlightedValue)\n },\n selectItem(ctx, evt) {\n if (evt.value == null) return\n set.value(ctx, evt.value)\n },\n clearItem(ctx, evt) {\n if (evt.value == null) return\n const value = ctx.value.filter((v) => v !== evt.value)\n set.value(ctx, value)\n },\n setInitialFocus(ctx) {\n raf(() => {\n dom.focusInputEl(ctx)\n })\n },\n setFinalFocus(ctx) {\n raf(() => {\n const triggerEl = dom.getTriggerEl(ctx)\n if (triggerEl?.dataset.focusable == null) {\n dom.focusInputEl(ctx)\n } else {\n dom.focusTriggerEl(ctx)\n }\n })\n },\n syncInputValue(ctx) {\n const inputEl = dom.getInputEl(ctx)\n if (!inputEl) return\n\n inputEl.value = ctx.inputValue\n\n queueMicrotask(() => {\n const { selectionStart, selectionEnd } = inputEl\n\n if (Math.abs((selectionEnd ?? 0) - (selectionStart ?? 0)) !== 0) return\n if (selectionStart !== 0) return\n\n inputEl.setSelectionRange(inputEl.value.length, inputEl.value.length)\n })\n },\n setInputValue(ctx, evt) {\n set.inputValue(ctx, evt.value)\n },\n clearInputValue(ctx) {\n set.inputValue(ctx, \"\")\n },\n revertInputValue(ctx) {\n const inputValue = match(ctx.selectionBehavior, {\n replace: ctx.hasSelectedItems ? ctx.valueAsString : \"\",\n preserve: ctx.inputValue,\n clear: \"\",\n })\n\n set.inputValue(ctx, inputValue)\n },\n syncInitialValues(ctx) {\n const selectedItems = ctx.collection.items(ctx.value)\n const valueAsString = ctx.collection.itemsToString(selectedItems)\n\n ctx.highlightedItem = ctx.collection.item(ctx.highlightedValue)\n ctx.selectedItems = selectedItems\n ctx.valueAsString = valueAsString\n\n ctx.inputValue = match(ctx.selectionBehavior, {\n preserve: ctx.inputValue || valueAsString,\n replace: valueAsString,\n clear: \"\",\n })\n },\n syncSelectionBehavior(ctx) {\n if (ctx.multiple) {\n ctx.selectionBehavior = \"clear\"\n }\n },\n setSelectedItems(ctx, evt) {\n if (!isArray(evt.value)) return\n set.value(ctx, evt.value)\n },\n clearSelectedItems(ctx) {\n set.value(ctx, [])\n },\n scrollContentToTop(ctx) {\n if (ctx.scrollToIndexFn) {\n ctx.scrollToIndexFn({ index: 0, immediate: true })\n } else {\n const contentEl = dom.getContentEl(ctx)\n if (!contentEl) return\n contentEl.scrollTop = 0\n }\n },\n invokeOnOpen(ctx) {\n ctx.onOpenChange?.({ open: true })\n },\n invokeOnClose(ctx) {\n ctx.onOpenChange?.({ open: false })\n },\n highlightFirstItem(ctx) {\n raf(() => {\n const value = ctx.collection.first()\n set.highlightedValue(ctx, value)\n })\n },\n highlightFirstItemIfNeeded(ctx) {\n if (!ctx.autoHighlight) return\n raf(() => {\n const value = ctx.collection.first()\n set.highlightedValue(ctx, value)\n })\n },\n highlightLastItem(ctx) {\n raf(() => {\n const value = ctx.collection.last()\n set.highlightedValue(ctx, value)\n })\n },\n highlightNextItem(ctx) {\n let value: string | null = null\n if (ctx.highlightedValue) {\n value = ctx.collection.next(ctx.highlightedValue)\n if (!value && ctx.loopFocus) value = ctx.collection.first()\n } else {\n value = ctx.collection.first()\n }\n set.highlightedValue(ctx, value)\n },\n highlightPrevItem(ctx) {\n let value: string | null = null\n if (ctx.highlightedValue) {\n value = ctx.collection.prev(ctx.highlightedValue)\n if (!value && ctx.loopFocus) value = ctx.collection.last()\n } else {\n value = ctx.collection.last()\n }\n set.highlightedValue(ctx, value)\n },\n highlightFirstSelectedItem(ctx) {\n raf(() => {\n const [value] = ctx.collection.sort(ctx.value)\n set.highlightedValue(ctx, value)\n })\n },\n highlightFirstOrSelectedItem(ctx) {\n raf(() => {\n let value: string | null = null\n if (ctx.hasSelectedItems) {\n value = ctx.collection.sort(ctx.value)[0]\n } else {\n value = ctx.collection.first()\n }\n set.highlightedValue(ctx, value)\n })\n },\n highlightLastOrSelectedItem(ctx) {\n raf(() => {\n let value: string | null = null\n if (ctx.hasSelectedItems) {\n value = ctx.collection.sort(ctx.value)[0]\n } else {\n value = ctx.collection.last()\n }\n set.highlightedValue(ctx, value)\n })\n },\n autofillInputValue(ctx, evt) {\n const inputEl = dom.getInputEl(ctx)\n if (!ctx.autoComplete || !inputEl || !evt.keypress) return\n const valueText = ctx.collection.valueToString(ctx.highlightedValue)\n raf(() => {\n inputEl.value = valueText || ctx.inputValue\n })\n },\n setCollection(ctx, evt) {\n ctx.collection = evt.value\n },\n syncSelectedItems(ctx) {\n sync.valueChange(ctx)\n },\n syncHighlightedItem(ctx) {\n sync.highlightChange(ctx)\n },\n toggleVisibility(ctx, evt, { send }) {\n send({ type: ctx.open ? \"CONTROLLED.OPEN\" : \"CONTROLLED.CLOSE\", previousEvent: evt })\n },\n },\n },\n )\n}\n\nconst sync = {\n valueChange: (ctx: MachineContext) => {\n // side effect\n const prevSelectedItems = ctx.selectedItems\n ctx.selectedItems = ctx.value.map((v) => {\n const foundItem = prevSelectedItems.find((item) => ctx.collection.itemToValue(item) === v)\n if (foundItem) return foundItem\n return ctx.collection.item(v)\n })\n\n // set valueAsString\n const valueAsString = ctx.collection.itemsToString(ctx.selectedItems)\n ctx.valueAsString = valueAsString\n\n // set inputValue\n let inputValue: string | undefined\n if (ctx.getSelectionValue) {\n //\n inputValue = ctx.getSelectionValue({\n inputValue: ctx.inputValue,\n selectedItems: Array.from(ctx.selectedItems),\n valueAsString,\n })\n //\n } else {\n //\n inputValue = match(ctx.selectionBehavior, {\n replace: ctx.valueAsString,\n preserve: ctx.inputValue,\n clear: \"\",\n })\n }\n\n set.inputValue(ctx, inputValue)\n },\n highlightChange: (ctx: MachineContext) => {\n ctx.highlightedItem = ctx.collection.item(ctx.highlightedValue)\n },\n}\n\nconst invoke = {\n valueChange: (ctx: MachineContext) => {\n sync.valueChange(ctx)\n ctx.onValueChange?.({\n value: Array.from(ctx.value),\n items: Array.from(ctx.selectedItems),\n })\n },\n highlightChange: (ctx: MachineContext) => {\n sync.highlightChange(ctx)\n ctx.onHighlightChange?.({\n highlightedValue: ctx.highlightedValue,\n highlightedItem: ctx.highlightedItem,\n })\n },\n inputChange: (ctx: MachineContext) => {\n ctx.onInputValueChange?.({ inputValue: ctx.inputValue })\n },\n}\n\nconst set = {\n value: (ctx: MachineContext, value: string | string[] | null | undefined, force = false) => {\n if (isEqual(ctx.value, value)) return\n if (value == null && !force) return\n if (value == null && force) {\n ctx.value = []\n invoke.valueChange(ctx)\n return\n }\n if (isArray(value)) {\n ctx.value = value\n } else if (value != null) {\n ctx.value = ctx.multiple ? addOrRemove(ctx.value, value) : [value]\n }\n invoke.valueChange(ctx)\n },\n highlightedValue: (ctx: MachineContext, value: string | null | undefined, force = false) => {\n if (isEqual(ctx.highlightedValue, value)) return\n if (!value && !force) return\n ctx.highlightedValue = value || null\n invoke.highlightChange(ctx)\n },\n inputValue: (ctx: MachineContext, value: string) => {\n if (isEqual(ctx.inputValue, value)) return\n ctx.inputValue = value\n invoke.inputChange(ctx)\n },\n}\n"],"mappings":"AAAA,OAAS,kBAAqB,kBAEvB,IAAM,QAAU,cAAc,UAAU,EAAE,MAC/C,OACA,QACA,QACA,aACA,UACA,UACA,UACA,eACA,OACA,WACA,gBACA,YACA,gBACF,EACO,IAAM,MAAQ,QAAQ,MAAM,ECjBnC,OAAS,eAA+D,qBACxE,OAAS,QAAW,eAEb,IAAM,WAAwC,SAAiD,CACpG,OAAO,IAAI,IAAI,WAAW,OAAO,CAAC,CACpC,EAEA,WAAW,MAAQ,IAAkC,CACnD,OAAO,IAAI,IAAI,WAA2B,CAAE,MAAO,CAAC,CAAE,CAAC,CAAC,CAC1D,ECTA,OACE,YACA,YACA,eACA,mBACA,gBAEK,oBACP,OAAS,SAAU,SAAU,mBAAoB,sBAAyB,oBAC1E,OAAS,uBAA0B,iBCTnC,OAAS,YAAa,UAAa,oBAG5B,IAAM,IAAM,YAAY,CAC7B,UAAY,KAAa,IAAI,KAAK,MAAQ,YAAY,IAAI,EAAE,GAC5D,WAAa,KAAa,IAAI,KAAK,OAAS,YAAY,IAAI,EAAE,SAC9D,aAAe,KAAa,IAAI,KAAK,SAAW,YAAY,IAAI,EAAE,WAClE,WAAa,KAAa,IAAI,KAAK,OAAS,YAAY,IAAI,EAAE,SAC9D,aAAe,KAAa,IAAI,KAAK,SAAW,YAAY,IAAI,EAAE,WAClE,gBAAkB,KAAa,IAAI,KAAK,YAAc,YAAY,IAAI,EAAE,UACxE,aAAe,KAAa,IAAI,KAAK,SAAW,YAAY,IAAI,EAAE,cAClE,kBAAoB,KAAa,IAAI,KAAK,cAAgB,YAAY,IAAI,EAAE,aAC5E,eAAgB,CAAC,IAAU,KAAwB,IAAI,KAAK,YAAY,EAAE,GAAK,YAAY,IAAI,EAAE,aAAa,EAAE,GAChH,oBAAqB,CAAC,IAAU,KAC9B,IAAI,KAAK,iBAAiB,EAAE,GAAK,YAAY,IAAI,EAAE,mBAAmB,EAAE,GAC1E,UAAW,CAAC,IAAU,KAAe,YAAY,IAAI,EAAE,WAAW,EAAE,GAEpE,aAAe,KAAa,IAAI,QAAQ,IAAK,IAAI,aAAa,GAAG,CAAC,EAClE,WAAa,KAAa,IAAI,QAA0B,IAAK,IAAI,WAAW,GAAG,CAAC,EAChF,gBAAkB,KAAa,IAAI,QAAQ,IAAK,IAAI,gBAAgB,GAAG,CAAC,EACxE,aAAe,KAAa,IAAI,QAAQ,IAAK,IAAI,aAAa,GAAG,CAAC,EAClE,aAAe,KAAa,IAAI,QAAQ,IAAK,IAAI,aAAa,GAAG,CAAC,EAClE,kBAAoB,KAAa,IAAI,QAAQ,IAAK,IAAI,kBAAkB,GAAG,CAAC,EAC5E,qBAAuB,KAAa,CAClC,MAAM,MAAQ,IAAI,iBAClB,GAAI,OAAS,KAAM,OACnB,OAAO,MAAM,IAAI,aAAa,GAAG,EAAG,6BAA6B,IAAI,OAAO,KAAK,CAAC,GAAG,CACvF,EAEA,aAAe,KAAa,CAC1B,MAAM,QAAU,IAAI,WAAW,GAAG,EAClC,GAAI,IAAI,iBAAiB,GAAG,IAAM,QAAS,OAC3C,SAAS,MAAM,CAAE,cAAe,IAAK,CAAC,CACxC,EACA,eAAiB,KAAa,CAC5B,MAAM,UAAY,IAAI,aAAa,GAAG,EACtC,GAAI,IAAI,iBAAiB,GAAG,IAAM,UAAW,OAC7C,WAAW,MAAM,CAAE,cAAe,IAAK,CAAC,CAC1C,CACF,CAAC,EDxBM,SAAS,QACd,MACA,KACA,UACkB,CAClB,MAAM,aAAe,MAAM,QAAQ,aACnC,MAAMA,YAAa,MAAM,QAAQ,WAEjC,MAAM,SAAW,MAAM,QAAQ,SAC/B,MAAM,YAAc,MAAM,QAAQ,cAClC,MAAM,QAAU,MAAM,QAAQ,QAC9B,MAAM,SAAW,MAAM,QAAQ,SAE/B,MAAM,KAAO,MAAM,OAAO,MAAM,EAChC,MAAM,QAAU,MAAM,OAAO,SAAS,EACtC,MAAM,UAAY,MAAM,QAAQ,UAChC,MAAM,iBAAmB,MAAM,QAAQ,iBAEvC,MAAM,aAAe,mBAAmB,CACtC,GAAG,MAAM,QAAQ,YACjB,UAAW,MAAM,QAAQ,gBAC3B,CAAC,EAED,SAAS,aAAa,MAA6B,CACjD,KAAM,CAAE,IAAK,EAAI,MACjB,MAAMC,UAAWD,YAAW,eAAe,IAAI,EAC/C,MAAM,MAAQA,YAAW,YAAY,IAAI,EACzC,MAAO,CACL,MACA,SAAU,QAAQC,WAAYA,SAAQ,EACtC,YAAa,mBAAqB,MAClC,SAAU,MAAM,QAAQ,MAAM,SAAS,KAAK,CAC9C,CACF,CAEA,MAAO,CACL,QACA,KACA,WAAY,MAAM,QAAQ,WAC1B,iBACA,gBAAiB,MAAM,QAAQ,gBAC/B,MAAO,MAAM,QAAQ,MACrB,cAAe,MAAM,QAAQ,cAC7B,iBAAkB,MAAM,QAAQ,iBAChC,cAAe,MAAM,QAAQ,cAC7B,WAAY,MAAM,QAAQ,WAC1B,WAAW,QAAU,CAAC,EAAG,CACvB,KAAK,CAAE,KAAM,kBAAmB,OAAQ,CAAC,CAC3C,EACA,cAAcD,YAAY,CACxB,KAAK,CAAE,KAAM,iBAAkB,MAAOA,WAAW,CAAC,CACpD,EACA,kBAAkB,MAAO,CACvB,KAAK,CAAE,KAAM,wBAAyB,KAAM,CAAC,CAC/C,EACA,YAAY,MAAO,CACjB,KAAK,CAAE,KAAM,cAAe,KAAM,CAAC,CACrC,EACA,SAAS,MAAO,CACd,KAAK,CAAE,KAAM,YAAa,KAAM,CAAC,CACnC,EACA,cAAc,MAAO,CACnB,KAAK,CAAE,KAAM,kBAAmB,KAAM,CAAC,CACzC,EACA,WAAW,MAAO,CAChB,GAAI,OAAS,KAAM,CACjB,KAAK,CAAE,KAAM,aAAc,KAAM,CAAC,CACpC,KAAO,CACL,KAAK,aAAa,CACpB,CACF,EACA,OAAQ,CACN,IAAI,WAAW,MAAM,OAAO,GAAG,MAAM,CACvC,EACA,QAAQ,SAAU,CAChB,GAAI,WAAa,KAAM,OACvB,KAAK,SAAW,OAAS,OAAO,CAClC,EACA,UAAW,UAAU,QAAQ,CAC3B,GAAG,MAAM,KAAK,MACd,IAAK,MAAM,QAAQ,IACnB,GAAI,IAAI,UAAU,MAAM,OAAO,EAC/B,eAAgB,SAAS,OAAO,EAChC,gBAAiB,SAAS,QAAQ,CACpC,CAAC,EAED,WAAY,UAAU,MAAM,CAC1B,GAAG,MAAM,MAAM,MACf,IAAK,MAAM,QAAQ,IACnB,QAAS,IAAI,WAAW,MAAM,OAAO,EACrC,GAAI,IAAI,WAAW,MAAM,OAAO,EAChC,gBAAiB,SAAS,QAAQ,EAClC,gBAAiB,SAAS,QAAQ,EAClC,eAAgB,SAAS,OAAO,EAChC,aAAc,SAAS,OAAO,EAC9B,QAAQ,MAAO,CACb,GAAI,UAAW,OACf,MAAM,eAAe,EACrB,IAAI,aAAa,MAAM,OAAO,GAAG,MAAM,CAAE,cAAe,IAAK,CAAC,CAChE,CACF,CAAC,EAED,aAAc,UAAU,QAAQ,CAC9B,GAAG,MAAM,QAAQ,MACjB,IAAK,MAAM,QAAQ,IACnB,GAAI,IAAI,aAAa,MAAM,OAAO,EAClC,aAAc,KAAO,OAAS,SAC9B,aAAc,SAAS,OAAO,EAC9B,gBAAiB,SAAS,QAAQ,EAClC,eAAgB,SAAS,OAAO,CAClC,CAAC,EAED,gBAAiB,UAAU,QAAQ,CACjC,GAAG,MAAM,WAAW,MACpB,IAAK,MAAM,QAAQ,IACnB,GAAI,IAAI,gBAAgB,MAAM,OAAO,EACrC,MAAO,aAAa,QACtB,CAAC,EAED,WAAY,UAAU,MAAM,CAC1B,GAAG,MAAM,MAAM,MACf,IAAK,MAAM,QAAQ,IACnB,eAAgB,SAAS,OAAO,EAChC,eAAgB,SAAS,OAAO,EAChC,KAAM,MAAM,QAAQ,KACpB,KAAM,MAAM,QAAQ,KACpB,SACA,UAAW,MAAM,QAAQ,UACzB,aAAc,MACd,YAAa,MACb,eAAgB,OAChB,WAAY,QACZ,SACA,YAAa,MAAM,QAAQ,YAC3B,GAAI,IAAI,WAAW,MAAM,OAAO,EAChC,KAAM,OACN,KAAM,WACN,aAAc,MAAM,QAAQ,WAC5B,oBAAqB,MAAM,QAAQ,aAAe,OAAS,OAC3D,gBAAiB,IAAI,aAAa,MAAM,OAAO,EAC/C,gBAAiB,KACjB,aAAc,KAAO,OAAS,SAC9B,wBAAyB,iBAAmB,IAAI,UAAU,MAAM,QAAS,gBAAgB,EAAI,OAC7F,QAAQ,MAAO,CACb,GAAI,MAAM,iBAAkB,OAC5B,GAAI,CAAC,MAAM,QAAQ,YAAa,OAChC,GAAI,CAAC,YAAa,OAClB,KAAK,aAAa,CACpB,EACA,SAAU,CACR,GAAI,SAAU,OACd,KAAK,aAAa,CACpB,EACA,QAAS,CACP,GAAI,SAAU,OACd,KAAK,YAAY,CACnB,EACA,SAAS,MAAO,CACd,KAAK,CAAE,KAAM,eAAgB,MAAO,MAAM,cAAc,KAAM,CAAC,CACjE,EACA,UAAU,MAAO,CACf,GAAI,MAAM,iBAAkB,OAC5B,GAAI,CAAC,YAAa,OAElB,MAAM,IAAM,eAAe,KAAK,EAChC,GAAI,IAAI,SAAW,IAAI,UAAY,IAAI,YAAa,OAEpD,MAAM,eAAiB,MAAM,QAAQ,eACrC,MAAM,cAAgB,MAAM,SAAW,MAAM,SAAW,MAAM,SAC9D,MAAM,SAAW,KAEjB,MAAM,OAAsB,CAC1B,UAAUE,OAAO,CACf,GAAI,CAAC,gBAAkB,CAAC,KAAM,OAC9B,KAAK,CAAE,KAAMA,OAAM,OAAS,OAAS,mBAAoB,QAAS,CAAC,EACnEA,OAAM,eAAe,CACvB,EACA,SAAU,CACR,GAAI,CAAC,gBAAkB,CAAC,KAAM,OAC9B,KAAK,CAAE,KAAM,MAAM,OAAS,QAAU,iBAAkB,QAAS,CAAC,EAClE,MAAM,eAAe,CACvB,EACA,KAAKA,OAAO,CACV,GAAI,cAAe,OACnB,KAAK,CAAE,KAAM,aAAc,QAAS,CAAC,EACrC,GAAI,KAAM,CACRA,OAAM,eAAe,CACvB,CACF,EACA,IAAIA,OAAO,CACT,GAAI,cAAe,OACnB,KAAK,CAAE,KAAM,YAAa,QAAS,CAAC,EACpC,GAAI,KAAM,CACRA,OAAM,eAAe,CACvB,CACF,EACA,MAAMA,OAAO,CACX,GAAI,IAAI,YAAa,OACrB,KAAK,CAAE,KAAM,cAAe,QAAS,CAAC,EACtC,GAAI,KAAM,CACRA,OAAM,eAAe,CACvB,CACA,MAAM,OAAS,IAAI,qBAAqB,MAAM,OAAO,EACrD,YAAY,MAAM,CACpB,EACA,QAAS,CACP,KAAK,CAAE,KAAM,eAAgB,QAAS,CAAC,EACvC,MAAM,eAAe,CACvB,CACF,EAEA,MAAM,IAAM,YAAY,MAAO,MAAM,OAAO,EAC5C,MAAM,KAAO,OAAO,GAAG,EACvB,OAAO,KAAK,CACd,CACF,CAAC,EAED,gBAAgB,MAAQ,CAAC,EAAG,CAC1B,OAAO,UAAU,OAAO,CACtB,GAAG,MAAM,QAAQ,MACjB,IAAK,MAAM,QAAQ,IACnB,GAAI,IAAI,aAAa,MAAM,OAAO,EAClC,gBAAiB,UAAY,UAAY,SACzC,KAAM,SACN,SAAU,MAAM,UAAY,OAAY,GACxC,aAAc,aAAa,aAC3B,gBAAiB,KACjB,aAAc,KAAO,OAAS,SAC9B,gBAAiB,KAAO,IAAI,aAAa,MAAM,OAAO,EAAI,OAC1D,SACA,iBAAkB,SAAS,MAAM,SAAS,EAC1C,gBAAiB,SAAS,QAAQ,EAClC,gBAAiB,SAAS,QAAQ,EAClC,SAAU,CACR,GAAI,CAAC,MAAM,UAAW,OACtB,KAAK,CAAE,KAAM,cAAe,IAAK,SAAU,CAAC,CAC9C,EACA,QAAQ,MAAO,CACb,GAAI,MAAM,iBAAkB,OAC5B,MAAM,IAAM,eAAe,KAAK,EAChC,GAAI,CAAC,YAAa,OAClB,GAAI,CAAC,YAAY,GAAG,EAAG,OACvB,KAAK,eAAe,CACtB,EACA,cAAc,MAAO,CACnB,GAAI,CAAC,YAAa,OAClB,GAAI,MAAM,cAAgB,QAAS,OACnC,MAAM,eAAe,EACrB,eAAe,IAAM,CACnB,IAAI,WAAW,MAAM,OAAO,GAAG,MAAM,CAAE,cAAe,IAAK,CAAC,CAC9D,CAAC,CACH,EACA,UAAU,MAAO,CACf,GAAI,MAAM,iBAAkB,OAC5B,GAAI,UAAW,OAEf,MAAM,OAAsB,CAC1B,WAAY,CACV,KAAK,CAAE,KAAM,mBAAoB,IAAK,SAAU,CAAC,CACnD,EACA,SAAU,CACR,KAAK,CAAE,KAAM,iBAAkB,IAAK,SAAU,CAAC,CACjD,CACF,EAEA,MAAM,IAAM,YAAY,MAAO,MAAM,OAAO,EAC5C,MAAM,KAAO,OAAO,GAAG,EAEvB,GAAI,KAAM,CACR,KAAK,KAAK,EACV,MAAM,eAAe,CACvB,CACF,CACF,CAAC,CACH,EAEA,aAAc,UAAU,QAAQ,CAC9B,GAAG,MAAM,QAAQ,MACjB,IAAK,MAAM,QAAQ,IACnB,GAAI,IAAI,aAAa,MAAM,OAAO,EAClC,KAAM,CAAC,UAAY,SAAW,UAC9B,SAAU,GACV,OAAQ,CAAC,KACT,aAAc,KAAO,OAAS,SAC9B,kBAAmB,IAAI,WAAW,MAAM,OAAO,EAC/C,uBAAwB,MAAM,QAAQ,UAAY,UAAY,KAAO,OACrE,cAAc,MAAO,CAEnB,MAAM,eAAe,CACvB,CACF,CAAC,EAED,UAAW,UAAU,QAAQ,CAC3B,KAAM,CAAC,UAAY,UAAY,OAC/B,kBAAmB,IAAI,WAAW,MAAM,OAAO,EAC/C,uBAAwB,MAAM,QAAQ,UAAY,CAAC,UAAY,KAAO,MACxE,CAAC,EAED,kBAAmB,UAAU,OAAO,CAClC,GAAG,MAAM,aAAa,MACtB,IAAK,MAAM,QAAQ,IACnB,GAAI,IAAI,kBAAkB,MAAM,OAAO,EACvC,KAAM,SACN,SAAU,GACV,SACA,aAAc,aAAa,kBAC3B,gBAAiB,IAAI,WAAW,MAAM,OAAO,EAC7C,OAAQ,CAAC,MAAM,QAAQ,MAAM,OAC7B,cAAc,MAAO,CACnB,MAAM,eAAe,CACvB,EACA,QAAQ,MAAO,CACb,GAAI,MAAM,iBAAkB,OAC5B,GAAI,CAAC,YAAa,OAClB,KAAK,CAAE,KAAM,cAAe,IAAK,eAAgB,CAAC,CACpD,CACF,CAAC,EAED,aAEA,aAAa,MAAO,CAClB,MAAM,UAAY,aAAa,KAAK,EACpC,MAAM,MAAQ,UAAU,MAExB,OAAO,UAAU,QAAQ,CACvB,GAAG,MAAM,KAAK,MACd,IAAK,MAAM,QAAQ,IACnB,GAAI,IAAI,UAAU,MAAM,QAAS,KAAK,EACtC,KAAM,SACN,SAAU,GACV,mBAAoB,SAAS,UAAU,WAAW,EAClD,aAAc,UAAU,SAAW,UAAY,YAC/C,gBAAiB,UAAU,YAC3B,gBAAiB,UAAU,SAC3B,gBAAiB,SAAS,UAAU,QAAQ,EAC5C,aAAc,UAAU,MACxB,eAAgB,CACd,GAAI,UAAU,SAAU,OACxB,GAAI,UAAU,YAAa,OAC3B,KAAK,CAAE,KAAM,oBAAqB,KAAM,CAAC,CAC3C,EACA,gBAAiB,CACf,GAAI,MAAM,aAAc,OACxB,GAAI,UAAU,SAAU,OACxB,MAAM,WAAa,MAAM,cAAc,KAAK,SAAS,SAAS,EAC9D,GAAI,CAAC,WAAY,OACjB,KAAK,CAAE,KAAM,qBAAsB,KAAM,CAAC,CAC5C,EACA,YAAY,MAAO,CACjB,GAAI,mBAAmB,KAAK,EAAG,OAC/B,GAAI,kBAAkB,KAAK,EAAG,OAC9B,GAAI,mBAAmB,KAAK,EAAG,OAC/B,GAAI,UAAU,SAAU,OACxB,KAAK,CAAE,KAAM,aAAc,IAAK,YAAa,KAAM,CAAC,CACtD,EACA,WAAW,MAAO,CAEhB,MAAM,eAAe,EACrB,MAAM,gBAAgB,CACxB,CACF,CAAC,CACH,EAEA,iBAAiB,MAAO,CACtB,MAAM,UAAY,aAAa,KAAK,EACpC,OAAO,UAAU,QAAQ,CACvB,GAAG,MAAM,SAAS,MAClB,IAAK,MAAM,QAAQ,IACnB,gBAAiB,SAAS,UAAU,QAAQ,EAC5C,mBAAoB,SAAS,UAAU,WAAW,CACpD,CAAC,CACH,EACA,sBAAsB,MAAO,CAC3B,MAAM,UAAY,aAAa,KAAK,EACpC,OAAO,UAAU,QAAQ,CACvB,cAAe,KACf,GAAG,MAAM,cAAc,MACvB,IAAK,MAAM,QAAQ,IACnB,aAAc,UAAU,SAAW,UAAY,YAC/C,OAAQ,CAAC,UAAU,QACrB,CAAC,CACH,EAEA,kBAAkB,MAAO,CACvB,KAAM,CAAE,EAAG,EAAI,MACf,OAAO,UAAU,QAAQ,CACvB,GAAG,MAAM,UAAU,MACnB,IAAK,MAAM,QAAQ,IACnB,GAAI,IAAI,eAAe,MAAM,QAAS,EAAE,EACxC,kBAAmB,IAAI,oBAAoB,MAAM,QAAS,EAAE,CAC9D,CAAC,CACH,EAEA,uBAAuB,MAAO,CAC5B,KAAM,CAAE,OAAQ,EAAI,MACpB,OAAO,UAAU,QAAQ,CACvB,GAAG,MAAM,eAAe,MACxB,IAAK,MAAM,QAAQ,IACnB,GAAI,IAAI,oBAAoB,MAAM,QAAS,OAAO,EAClD,KAAM,OACR,CAAC,CACH,CACF,CACF,CElaA,OAAS,eAAkB,sBAC3B,OAAS,cAAe,WAAc,eACtC,OAAS,4BAA+B,sBACxC,OAAS,kBAAmB,gBAAiB,IAAK,mBAAsB,oBACxE,OAAS,iBAAoB,iBAC7B,OAAS,YAAa,QAAS,QAAS,UAAW,QAAS,UAAa,gBAKzE,GAAM,CAAE,IAAK,GAAI,EAAI,OAEd,SAAS,QAAkC,YAAoC,CACpF,MAAM,IAAM,QAAQ,WAAW,EAC/B,OAAO,cACL,CACE,GAAI,WACJ,QAAS,IAAI,KAAO,aAAe,OACnC,QAAS,CACP,UAAW,KACX,YAAa,MACb,MAAO,CAAC,EACR,iBAAkB,KAClB,WAAY,GACZ,iBAAkB,MAClB,cAAe,CAAC,IAAI,SACpB,cAAe,OACf,kBAAmB,UACnB,eAAgB,KAChB,aAAc,KACd,UAAW,KACX,GAAG,IACH,gBAAiB,KACjB,cAAe,CAAC,EAChB,cAAe,GACf,WAAY,IAAI,YAAc,WAAW,MAAM,EAC/C,YAAa,CACX,UAAW,SACX,KAAM,MACN,UAAW,KACX,GAAG,IAAI,WACT,EACA,aAAc,CACZ,aAAc,qBACd,kBAAmB,cACnB,GAAG,IAAI,YACT,CACF,EAEA,QAAS,CAAC,oBAAqB,uBAAuB,EAEtD,SAAU,CACR,kBAAoBC,MAAQA,KAAI,WAAW,SAAW,EACtD,cAAgBA,MAAQ,EAAEA,KAAI,UAAYA,KAAI,UAC9C,aAAeA,MAAQA,KAAI,gBAAkB,eAC7C,cAAgBA,MAAQA,KAAI,gBAAkB,gBAC9C,iBAAmBA,MAAQA,KAAI,MAAM,OAAS,CAChD,EAEA,MAAO,CACL,MAAO,CAAC,mBAAmB,EAC3B,WAAY,CAAC,gBAAgB,EAC7B,iBAAkB,CAAC,sBAAuB,oBAAoB,EAC9D,SAAU,CAAC,uBAAuB,EAClC,KAAM,CAAC,kBAAkB,CAC3B,EAEA,GAAI,CACF,wBAAyB,CACvB,QAAS,CAAC,oBAAoB,CAChC,EACA,cAAe,CACb,QAAS,CAAC,YAAY,CACxB,EACA,aAAc,CACZ,QAAS,CAAC,WAAW,CACvB,EACA,YAAa,CACX,QAAS,CAAC,kBAAkB,CAC9B,EACA,kBAAmB,CACjB,QAAS,eACX,EACA,iBAAkB,CAChB,QAAS,CAAC,eAAe,CAC3B,EACA,kBAAmB,CACjB,QAAS,CAAC,YAAY,CACxB,CACF,EAEA,OAAQ,CACN,KAAM,CACJ,KAAM,CAAC,OAAQ,QAAQ,EACvB,MAAO,CAAC,qBAAsB,sBAAsB,EACpD,GAAI,CACF,kBAAmB,CACjB,OAAQ,aACV,EACA,gBAAiB,CACf,CACE,MAAO,mBACP,QAAS,CAAC,kBAAmB,6BAA8B,cAAc,CAC3E,EACA,CACE,OAAQ,cACR,QAAS,CAAC,kBAAmB,6BAA8B,cAAc,CAC3E,CACF,EACA,cAAe,CACb,CACE,MAAO,mBACP,QAAS,CAAC,6BAA8B,cAAc,CACxD,EACA,CACE,OAAQ,cACR,QAAS,CAAC,6BAA8B,cAAc,CACxD,CACF,EACA,cAAe,CACb,OAAQ,SACV,EACA,KAAM,CACJ,CACE,MAAO,mBACP,QAAS,CAAC,cAAc,CAC1B,EACA,CACE,OAAQ,cACR,QAAS,CAAC,cAAc,CAC1B,CACF,EACA,cAAe,CACb,OAAQ,UACR,QAAS,CAAC,kBAAmB,qBAAsB,iBAAiB,CACtE,CACF,CACF,EAEA,QAAS,CACP,KAAM,CAAC,UAAW,QAAQ,EAC1B,MAAO,CAAC,qBAAsB,sBAAsB,EACpD,GAAI,CACF,kBAAmB,CACjB,CACE,MAAO,gBACP,OAAQ,YACV,EACA,CACE,OAAQ,aACV,CACF,EACA,eAAgB,CACd,CACE,MAAO,IAAI,mBAAoB,cAAc,EAC7C,QAAS,CAAC,gBAAiB,eAAgB,4BAA4B,CACzE,EACA,CACE,MAAO,eACP,OAAQ,aACR,QAAS,CAAC,gBAAiB,eAAgB,4BAA4B,CACzE,EACA,CACE,QAAS,eACX,CACF,EACA,yBAA0B,CACxB,OAAQ,MACV,EACA,eAAgB,CACd,MAAO,IAAI,gBAAiB,IAAI,kBAAkB,CAAC,EACnD,QAAS,kBACX,EACA,aAAc,CACZ,OAAQ,MACV,EACA,cAAe,CACb,CACE,MAAO,mBACP,QAAS,CAAC,6BAA8B,cAAc,CACxD,EACA,CACE,OAAQ,cACR,QAAS,CAAC,6BAA8B,cAAc,CACxD,CACF,EACA,gBAAiB,CACf,CACE,MAAO,mBACP,QAAS,CAAC,kBAAmB,6BAA8B,cAAc,CAC3E,EACA,CACE,OAAQ,cACR,QAAS,CAAC,kBAAmB,6BAA8B,cAAc,CAC3E,CACF,EACA,mBAAoB,CAElB,CACE,MAAO,IAAI,mBAAoB,cAAc,EAC7C,QAAS,CAAC,cAAc,CAC1B,EACA,CACE,MAAO,eACP,OAAQ,cACR,QAAS,CAAC,cAAc,CAC1B,EAEA,CACE,MAAO,mBACP,QAAS,CAAC,+BAAgC,cAAc,CAC1D,EACA,CACE,OAAQ,cACR,QAAS,CAAC,+BAAgC,cAAc,CAC1D,CACF,EACA,iBAAkB,CAEhB,CACE,MAAO,eACP,OAAQ,cACR,QAAS,cACX,EACA,CACE,MAAO,eACP,OAAQ,cACR,QAAS,cACX,EAEA,CACE,OAAQ,cACR,QAAS,CAAC,8BAA+B,cAAc,CACzD,EACA,CACE,OAAQ,cACR,QAAS,CAAC,8BAA+B,cAAc,CACzD,CACF,EACA,KAAM,CACJ,CACE,MAAO,mBACP,QAAS,CAAC,cAAc,CAC1B,EACA,CACE,OAAQ,cACR,QAAS,CAAC,cAAc,CAC1B,CACF,EACA,cAAe,CACb,QAAS,CAAC,kBAAmB,oBAAoB,CACnD,CACF,CACF,EAEA,YAAa,CACX,KAAM,CAAC,OAAQ,SAAS,EACxB,MAAO,CAAC,iBAAiB,EACzB,WAAY,CAAC,0BAA2B,wBAAyB,mBAAoB,mBAAmB,EACxG,GAAI,CACF,mBAAoB,CAClB,CACE,MAAO,eACP,OAAQ,UACR,QAAS,CAAC,eAAe,CAC3B,EACA,CACE,OAAQ,MACV,CACF,EACA,aAAc,CACZ,QAAS,CAAC,oBAAoB,CAChC,EACA,YAAa,CACX,QAAS,CAAC,mBAAmB,CAC/B,EACA,mBAAoB,CAClB,CACE,MAAO,IAAI,eAAgB,uBAAuB,EAClD,QAAS,CAAC,uBAAwB,oBAAoB,CACxD,EACA,CACE,QAAS,CAAC,mBAAmB,CAC/B,CACF,EACA,iBAAkB,CAChB,CACE,MAAO,IAAI,eAAgB,wBAAwB,EACnD,QAAS,sBACX,EACA,CACE,QAAS,mBACX,CACF,EACA,cAAe,CACb,CACE,MAAO,IAAI,mBAAoB,eAAe,EAC9C,QAAS,CAAC,wBAAyB,eAAe,CACpD,EACA,CACE,MAAO,gBACP,OAAQ,UACR,QAAS,CAAC,wBAAyB,gBAAiB,eAAe,CACrE,EACA,CACE,QAAS,CAAC,uBAAuB,CACnC,CACF,EACA,eAAgB,CACd,CACE,MAAO,eACP,OAAQ,aACR,QAAS,CAAC,gBAAiB,cAAc,CAC3C,EACA,CACE,OAAQ,aACR,QAAS,CAAC,uBAAwB,gBAAiB,cAAc,CACnE,CACF,EACA,oBAAqB,CACnB,QAAS,CAAC,oBAAoB,CAChC,EACA,qBAAsB,CACpB,QAAS,CAAC,sBAAsB,CAClC,EACA,aAAc,CACZ,CACE,MAAO,IAAI,mBAAoB,eAAe,EAC9C,QAAS,CAAC,aAAc,eAAe,CACzC,EACA,CACE,MAAO,gBACP,OAAQ,UACR,QAAS,CAAC,aAAc,gBAAiB,eAAe,CAC1D,EACA,CACE,QAAS,CAAC,YAAY,CACxB,CACF,EACA,eAAgB,CACd,CACE,MAAO,IAAI,mBAAoB,cAAc,EAC7C,QAAS,CAAC,iBAAkB,eAAe,CAC7C,EACA,CACE,MAAO,eACP,OAAQ,UACR,QAAS,CAAC,iBAAkB,eAAe,CAC7C,EACA,CACE,MAAO,mBACP,QAAS,eACX,EACA,CACE,OAAQ,UACR,QAAS,CAAC,gBAAiB,eAAe,CAC5C,CACF,EACA,gBAAiB,CACf,CACE,MAAO,mBACP,QAAS,eACX,EACA,CACE,OAAQ,UACR,QAAS,eACX,CACF,EACA,yBAA0B,CAExB,CACE,MAAO,IAAI,mBAAoB,gBAAiB,IAAI,kBAAkB,CAAC,EACvE,QAAS,CAAC,mBAAoB,eAAe,CAC/C,EACA,CACE,MAAO,IAAI,gBAAiB,IAAI,kBAAkB,CAAC,EACnD,OAAQ,OACR,QAAS,CAAC,mBAAoB,eAAe,CAC/C,EAEA,CACE,MAAO,mBACP,QAAS,eACX,EACA,CACE,OAAQ,OACR,QAAS,eACX,CACF,EACA,MAAO,CACL,CACE,MAAO,mBACP,QAAS,CAAC,eAAe,CAC3B,EACA,CACE,OAAQ,UACR,QAAS,CAAC,gBAAiB,eAAe,CAC5C,CACF,EACA,cAAe,CACb,CACE,MAAO,mBACP,QAAS,CAAC,kBAAmB,qBAAsB,eAAe,CACpE,EACA,CACE,OAAQ,UACR,QAAS,CAAC,kBAAmB,qBAAsB,gBAAiB,eAAe,CACrF,CACF,CACF,CACF,EAEA,WAAY,CACV,KAAM,CAAC,OAAQ,SAAS,EACxB,WAAY,CACV,wBACA,0BACA,mBACA,kBACA,mBACF,EACA,MAAO,CAAC,iBAAiB,EACzB,GAAI,CACF,mBAAoB,CAClB,CACE,MAAO,eACP,OAAQ,UACR,QAAS,CAAC,eAAe,CAC3B,EACA,CACE,OAAQ,MACV,CACF,EACA,gBAAiB,CACf,QAAS,CAAC,oBAAoB,CAChC,EACA,mBAAoB,CAClB,OAAQ,cACR,QAAS,CAAC,mBAAmB,CAC/B,EACA,iBAAkB,CAChB,OAAQ,cACR,QAAS,CAAC,mBAAmB,CAC/B,EACA,aAAc,CACZ,OAAQ,cACR,QAAS,CAAC,oBAAoB,CAChC,EACA,YAAa,CACX,OAAQ,cACR,QAAS,CAAC,mBAAmB,CAC/B,EACA,cAAe,CACb,CACE,MAAO,IAAI,mBAAoB,eAAe,EAC9C,QAAS,CAAC,wBAAyB,eAAe,CACpD,EACA,CACE,MAAO,gBACP,OAAQ,UACR,QAAS,CAAC,wBAAyB,gBAAiB,eAAe,CACrE,EACA,CACE,QAAS,CAAC,uBAAuB,CACnC,CACF,EACA,eAAgB,CACd,CACE,MAAO,gBACP,QAAS,CAAC,eAAe,CAC3B,EACA,CACE,QAAS,CAAC,eAAe,CAC3B,CACF,EACA,eAAgB,CACd,CACE,MAAO,mBACP,QAAS,CAAC,eAAe,CAC3B,EACA,CACE,OAAQ,UACR,QAAS,CAAC,eAAe,CAC3B,CACF,EACA,oBAAqB,CACnB,OAAQ,cACR,QAAS,CAAC,oBAAoB,CAChC,EACA,qBAAsB,CACpB,QAAS,CAAC,sBAAsB,CAClC,EACA,yBAA0B,CAExB,CACE,MAAO,IAAI,mBAAoB,gBAAiB,IAAI,kBAAkB,CAAC,EACvE,QAAS,CAAC,mBAAoB,eAAe,CAC/C,EACA,CACE,MAAO,IAAI,gBAAiB,IAAI,kBAAkB,CAAC,EACnD,OAAQ,OACR,QAAS,CAAC,mBAAoB,eAAe,CAC/C,EAEA,CACE,MAAO,mBACP,QAAS,CAAC,eAAe,CAC3B,EACA,CACE,OAAQ,OACR,QAAS,CAAC,eAAe,CAC3B,CACF,EACA,gBAAiB,CACf,CACE,MAAO,mBACP,QAAS,CAAC,eAAe,CAC3B,EACA,CACE,OAAQ,UACR,QAAS,CAAC,eAAe,CAC3B,CACF,EACA,aAAc,CACZ,CACE,MAAO,IAAI,mBAAoB,eAAe,EAC9C,QAAS,CAAC,aAAc,eAAe,CACzC,EACA,CACE,MAAO,gBACP,OAAQ,UACR,QAAS,CAAC,aAAc,gBAAiB,eAAe,CAC1D,EACA,CACE,QAAS,CAAC,YAAY,CACxB,CACF,EACA,MAAO,CACL,CACE,MAAO,mBACP,QAAS,CAAC,eAAe,CAC3B,EACA,CACE,OAAQ,UACR,QAAS,CAAC,gBAAiB,eAAe,CAC5C,CACF,EACA,cAAe,CACb,CACE,MAAO,mBACP,QAAS,CAAC,kBAAmB,qBAAsB,eAAe,CACpE,EACA,CACE,OAAQ,UACR,QAAS,CAAC,kBAAmB,qBAAsB,gBAAiB,eAAe,CACrF,CACF,CACF,CACF,CACF,CACF,EAEA,CACE,OAAQ,CACN,kBAAoBA,MAAQA,KAAI,kBAChC,aAAeA,MAAQA,KAAI,cAAgB,CAACA,KAAI,SAChD,cAAgBA,MAAQA,KAAI,cAC5B,uBAAyBA,MAAQA,KAAI,WAAW,MAAM,IAAMA,KAAI,iBAChE,sBAAwBA,MAAQA,KAAI,WAAW,KAAK,IAAMA,KAAI,iBAC9D,cAAgBA,MAAQA,KAAI,aAAeA,KAAI,cAC/C,iBAAmBA,MAAQ,CAAC,CAACA,KAAI,iBACjC,mBAAqBA,MAAQA,KAAI,kBAAoB,KACrD,cAAgBA,MAAQ,CAAC,CAACA,KAAI,cAC9B,iBAAmBA,MAAQ,CAAC,CAACA,KAAI,iBAAiB,EAClD,aAAc,CAACA,KAAK,MAAQ,CAC1B,GAAI,UAAUA,KAAI,YAAY,EAAG,OAAOA,KAAI,aAC5C,MAAO,CAAC,CAACA,KAAI,eAAe,CAAE,WAAY,IAAI,KAAM,CAAC,CACvD,EACA,aAAc,CAAC,KAAM,MAAS,IAAI,cAAgB,KAAO,KAAO,CAAC,CAAC,IAAI,aACtE,cAAe,CAAC,KAAM,MAAQ,IAAI,eAAe,OAAS,cAC5D,EAEA,WAAY,CACV,sBAAsBA,KAAK,KAAM,CAAE,IAAK,EAAG,CACzC,GAAIA,KAAI,aAAc,OACtB,MAAM,UAAY,IAAM,IAAI,aAAaA,IAAG,EAC5C,OAAO,wBAAwB,UAAW,CACxC,MAAO,KACP,QAAS,IAAM,CAAC,IAAI,WAAWA,IAAG,EAAG,IAAI,aAAaA,IAAG,EAAG,IAAI,kBAAkBA,IAAG,CAAC,EACtF,eAAgBA,KAAI,eACpB,qBAAsBA,KAAI,qBAC1B,kBAAmBA,KAAI,kBACvB,gBAAgB,MAAO,CACrB,MAAM,eAAe,EACrB,MAAM,gBAAgB,EACtB,KAAK,cAAc,CACrB,EACA,WAAY,CACV,KAAK,CAAE,KAAM,yBAA0B,aAAc,KAAM,CAAC,CAC9D,CACF,CAAC,CACH,EACA,kBAAkBA,KAAK,CACrB,OAAO,WAAW,CAAC,IAAI,WAAWA,IAAG,EAAG,IAAI,aAAaA,IAAG,EAAG,IAAI,aAAaA,IAAG,CAAC,CAAC,CACvF,EACA,iBAAiBA,KAAK,CACpB,MAAM,UAAY,IAAM,IAAI,aAAaA,IAAG,EAC5C,MAAM,aAAe,IAAM,IAAI,gBAAgBA,IAAG,EAClDA,KAAI,iBAAmBA,KAAI,YAAY,UACvC,OAAO,aAAa,UAAW,aAAc,CAC3C,GAAGA,KAAI,YACP,MAAO,KACP,WAAW,KAAM,CACfA,KAAI,iBAAmB,KAAK,SAC9B,CACF,CAAC,CACH,EAEA,gBAAgBA,KAAK,KAAM,CAAE,IAAK,EAAG,CACnC,GAAI,CAACA,KAAI,cAAe,OACxB,MAAM,KAAO,IAAM,KAAK,iBAAiB,EACzC,MAAM,UAAY,IAAM,IAAI,aAAaA,IAAG,EAC5C,OAAO,gBAAgB,UAAW,CAChC,SAAU,KACV,MAAO,IACT,CAAC,CACH,EACA,wBAAwBA,KAAK,KAAM,CAAE,QAAS,EAAG,CAC/C,MAAM,QAAU,IAAI,WAAWA,IAAG,EAElC,IAAI,SAA2B,CAAC,EAEhC,MAAM,KAAQ,WAAuB,CACnC,MAAM,MAAQ,SAAS,EAEvB,MAAM,QAAU,MAAM,MAAM,KAAK,SAAS,SAAS,EACnD,GAAI,SAAW,CAACA,KAAI,iBAAkB,OAEtC,MAAM,OAAS,IAAI,qBAAqBA,IAAG,EAC3C,MAAM,UAAY,IAAI,aAAaA,IAAG,EAEtC,GAAIA,KAAI,gBAAiB,CACvB,MAAM,iBAAmBA,KAAI,WAAW,QAAQA,KAAI,gBAAgB,EACpEA,KAAI,gBAAgB,CAAE,MAAO,iBAAkB,SAAU,CAAC,EAC1D,MACF,CAEA,MAAMC,YAAa,IAAI,IAAM,CAC3B,eAAe,OAAQ,CAAE,OAAQ,UAAW,MAAO,SAAU,CAAC,CAChE,CAAC,EACD,SAAS,KAAKA,WAAU,CAC1B,EAEA,MAAM,WAAa,IAAI,IAAM,KAAK,IAAI,CAAC,EACvC,SAAS,KAAK,UAAU,EAExB,MAAM,gBAAkB,kBAAkB,QAAS,CACjD,WAAY,CAAC,uBAAuB,EACpC,SAAU,IAAM,KAAK,KAAK,CAC5B,CAAC,EACD,SAAS,KAAK,eAAe,EAE7B,MAAO,IAAM,CACX,SAAS,QAAS,SAAY,QAAQ,CAAC,CACzC,CACF,CACF,EAEA,QAAS,CACP,WAAWD,KAAK,IAAK,CACnB,MAAM,UAAY,IAAM,IAAI,aAAaA,IAAG,EAC5C,MAAM,aAAe,IAAM,IAAI,gBAAgBA,IAAG,EAClD,aAAa,UAAW,aAAc,CACpC,GAAGA,KAAI,YACP,GAAG,IAAI,QACP,MAAO,KACP,UAAW,MACX,WAAW,KAAM,CACfA,KAAI,iBAAmB,KAAK,SAC9B,CACF,CAAC,CACH,EACA,mBAAmBA,KAAK,IAAK,CAC3B,GAAI,IAAI,OAAS,KAAM,OACvB,IAAI,iBAAiBA,KAAK,IAAI,KAAK,CACrC,EACA,qBAAqBA,KAAK,CACxB,IAAI,iBAAiBA,KAAK,KAAM,IAAI,CACtC,EACA,sBAAsBA,KAAK,CACzB,IAAI,MAAMA,KAAKA,KAAI,gBAAgB,CACrC,EACA,WAAWA,KAAK,IAAK,CACnB,GAAI,IAAI,OAAS,KAAM,OACvB,IAAI,MAAMA,KAAK,IAAI,KAAK,CAC1B,EACA,UAAUA,KAAK,IAAK,CAClB,GAAI,IAAI,OAAS,KAAM,OACvB,MAAM,MAAQA,KAAI,MAAM,OAAQ,GAAM,IAAM,IAAI,KAAK,EACrD,IAAI,MAAMA,KAAK,KAAK,CACtB,EACA,gBAAgBA,KAAK,CACnB,IAAI,IAAM,CACR,IAAI,aAAaA,IAAG,CACtB,CAAC,CACH,EACA,cAAcA,KAAK,CACjB,IAAI,IAAM,CACR,MAAM,UAAY,IAAI,aAAaA,IAAG,EACtC,GAAI,WAAW,QAAQ,WAAa,KAAM,CACxC,IAAI,aAAaA,IAAG,CACtB,KAAO,CACL,IAAI,eAAeA,IAAG,CACxB,CACF,CAAC,CACH,EACA,eAAeA,KAAK,CAClB,MAAM,QAAU,IAAI,WAAWA,IAAG,EAClC,GAAI,CAAC,QAAS,OAEd,QAAQ,MAAQA,KAAI,WAEpB,eAAe,IAAM,CACnB,KAAM,CAAE,eAAgB,YAAa,EAAI,QAEzC,GAAI,KAAK,KAAK,cAAgB,IAAM,gBAAkB,EAAE,IAAM,EAAG,OACjE,GAAI,iBAAmB,EAAG,OAE1B,QAAQ,kBAAkB,QAAQ,MAAM,OAAQ,QAAQ,MAAM,MAAM,CACtE,CAAC,CACH,EACA,cAAcA,KAAK,IAAK,CACtB,IAAI,WAAWA,KAAK,IAAI,KAAK,CAC/B,EACA,gBAAgBA,KAAK,CACnB,IAAI,WAAWA,KAAK,EAAE,CACxB,EACA,iBAAiBA,KAAK,CACpB,MAAM,WAAa,MAAMA,KAAI,kBAAmB,CAC9C,QAASA,KAAI,iBAAmBA,KAAI,cAAgB,GACpD,SAAUA,KAAI,WACd,MAAO,EACT,CAAC,EAED,IAAI,WAAWA,KAAK,UAAU,CAChC,EACA,kBAAkBA,KAAK,CACrB,MAAM,cAAgBA,KAAI,WAAW,MAAMA,KAAI,KAAK,EACpD,MAAM,cAAgBA,KAAI,WAAW,cAAc,aAAa,EAEhEA,KAAI,gBAAkBA,KAAI,WAAW,KAAKA,KAAI,gBAAgB,EAC9DA,KAAI,cAAgB,cACpBA,KAAI,cAAgB,cAEpBA,KAAI,WAAa,MAAMA,KAAI,kBAAmB,CAC5C,SAAUA,KAAI,YAAc,cAC5B,QAAS,cACT,MAAO,EACT,CAAC,CACH,EACA,sBAAsBA,KAAK,CACzB,GAAIA,KAAI,SAAU,CAChBA,KAAI,kBAAoB,OAC1B,CACF,EACA,iBAAiBA,KAAK,IAAK,CACzB,GAAI,CAAC,QAAQ,IAAI,KAAK,EAAG,OACzB,IAAI,MAAMA,KAAK,IAAI,KAAK,CAC1B,EACA,mBAAmBA,KAAK,CACtB,IAAI,MAAMA,KAAK,CAAC,CAAC,CACnB,EACA,mBAAmBA,KAAK,CACtB,GAAIA,KAAI,gBAAiB,CACvBA,KAAI,gBAAgB,CAAE,MAAO,EAAG,UAAW,IAAK,CAAC,CACnD,KAAO,CACL,MAAM,UAAY,IAAI,aAAaA,IAAG,EACtC,GAAI,CAAC,UAAW,OAChB,UAAU,UAAY,CACxB,CACF,EACA,aAAaA,KAAK,CAChBA,KAAI,eAAe,CAAE,KAAM,IAAK,CAAC,CACnC,EACA,cAAcA,KAAK,CACjBA,KAAI,eAAe,CAAE,KAAM,KAAM,CAAC,CACpC,EACA,mBAAmBA,KAAK,CACtB,IAAI,IAAM,CACR,MAAM,MAAQA,KAAI,WAAW,MAAM,EACnC,IAAI,iBAAiBA,KAAK,KAAK,CACjC,CAAC,CACH,EACA,2BAA2BA,KAAK,CAC9B,GAAI,CAACA,KAAI,cAAe,OACxB,IAAI,IAAM,CACR,MAAM,MAAQA,KAAI,WAAW,MAAM,EACnC,IAAI,iBAAiBA,KAAK,KAAK,CACjC,CAAC,CACH,EACA,kBAAkBA,KAAK,CACrB,IAAI,IAAM,CACR,MAAM,MAAQA,KAAI,WAAW,KAAK,EAClC,IAAI,iBAAiBA,KAAK,KAAK,CACjC,CAAC,CACH,EACA,kBAAkBA,KAAK,CACrB,IAAI,MAAuB,KAC3B,GAAIA,KAAI,iBAAkB,CACxB,MAAQA,KAAI,WAAW,KAAKA,KAAI,gBAAgB,EAChD,GAAI,CAAC,OAASA,KAAI,UAAW,MAAQA,KAAI,WAAW,MAAM,CAC5D,KAAO,CACL,MAAQA,KAAI,WAAW,MAAM,CAC/B,CACA,IAAI,iBAAiBA,KAAK,KAAK,CACjC,EACA,kBAAkBA,KAAK,CACrB,IAAI,MAAuB,KAC3B,GAAIA,KAAI,iBAAkB,CACxB,MAAQA,KAAI,WAAW,KAAKA,KAAI,gBAAgB,EAChD,GAAI,CAAC,OAASA,KAAI,UAAW,MAAQA,KAAI,WAAW,KAAK,CAC3D,KAAO,CACL,MAAQA,KAAI,WAAW,KAAK,CAC9B,CACA,IAAI,iBAAiBA,KAAK,KAAK,CACjC,EACA,2BAA2BA,KAAK,CAC9B,IAAI,IAAM,CACR,KAAM,CAAC,KAAK,EAAIA,KAAI,WAAW,KAAKA,KAAI,KAAK,EAC7C,IAAI,iBAAiBA,KAAK,KAAK,CACjC,CAAC,CACH,EACA,6BAA6BA,KAAK,CAChC,IAAI,IAAM,CACR,IAAI,MAAuB,KAC3B,GAAIA,KAAI,iBAAkB,CACxB,MAAQA,KAAI,WAAW,KAAKA,KAAI,KAAK,EAAE,CAAC,CAC1C,KAAO,CACL,MAAQA,KAAI,WAAW,MAAM,CAC/B,CACA,IAAI,iBAAiBA,KAAK,KAAK,CACjC,CAAC,CACH,EACA,4BAA4BA,KAAK,CAC/B,IAAI,IAAM,CACR,IAAI,MAAuB,KAC3B,GAAIA,KAAI,iBAAkB,CACxB,MAAQA,KAAI,WAAW,KAAKA,KAAI,KAAK,EAAE,CAAC,CAC1C,KAAO,CACL,MAAQA,KAAI,WAAW,KAAK,CAC9B,CACA,IAAI,iBAAiBA,KAAK,KAAK,CACjC,CAAC,CACH,EACA,mBAAmBA,KAAK,IAAK,CAC3B,MAAM,QAAU,IAAI,WAAWA,IAAG,EAClC,GAAI,CAACA,KAAI,cAAgB,CAAC,SAAW,CAAC,IAAI,SAAU,OACpD,MAAM,UAAYA,KAAI,WAAW,cAAcA,KAAI,gBAAgB,EACnE,IAAI,IAAM,CACR,QAAQ,MAAQ,WAAaA,KAAI,UACnC,CAAC,CACH,EACA,cAAcA,KAAK,IAAK,CACtBA,KAAI,WAAa,IAAI,KACvB,EACA,kBAAkBA,KAAK,CACrB,KAAK,YAAYA,IAAG,CACtB,EACA,oBAAoBA,KAAK,CACvB,KAAK,gBAAgBA,IAAG,CAC1B,EACA,iBAAiBA,KAAK,IAAK,CAAE,IAAK,EAAG,CACnC,KAAK,CAAE,KAAMA,KAAI,KAAO,kBAAoB,mBAAoB,cAAe,GAAI,CAAC,CACtF,CACF,CACF,CACF,CACF,CAEA,IAAM,KAAO,CACX,YAAc,KAAwB,CAEpC,MAAM,kBAAoB,IAAI,cAC9B,IAAI,cAAgB,IAAI,MAAM,IAAK,GAAM,CACvC,MAAM,UAAY,kBAAkB,KAAM,MAAS,IAAI,WAAW,YAAY,IAAI,IAAM,CAAC,EACzF,GAAI,UAAW,OAAO,UACtB,OAAO,IAAI,WAAW,KAAK,CAAC,CAC9B,CAAC,EAGD,MAAM,cAAgB,IAAI,WAAW,cAAc,IAAI,aAAa,EACpE,IAAI,cAAgB,cAGpB,IAAI,WACJ,GAAI,IAAI,kBAAmB,CAEzB,WAAa,IAAI,kBAAkB,CACjC,WAAY,IAAI,WAChB,cAAe,MAAM,KAAK,IAAI,aAAa,EAC3C,aACF,CAAC,CAEH,KAAO,CAEL,WAAa,MAAM,IAAI,kBAAmB,CACxC,QAAS,IAAI,cACb,SAAU,IAAI,WACd,MAAO,EACT,CAAC,CACH,CAEA,IAAI,WAAW,IAAK,UAAU,CAChC,EACA,gBAAkB,KAAwB,CACxC,IAAI,gBAAkB,IAAI,WAAW,KAAK,IAAI,gBAAgB,CAChE,CACF,EAEA,IAAM,OAAS,CACb,YAAc,KAAwB,CACpC,KAAK,YAAY,GAAG,EACpB,IAAI,gBAAgB,CAClB,MAAO,MAAM,KAAK,IAAI,KAAK,EAC3B,MAAO,MAAM,KAAK,IAAI,aAAa,CACrC,CAAC,CACH,EACA,gBAAkB,KAAwB,CACxC,KAAK,gBAAgB,GAAG,EACxB,IAAI,oBAAoB,CACtB,iBAAkB,IAAI,iBACtB,gBAAiB,IAAI,eACvB,CAAC,CACH,EACA,YAAc,KAAwB,CACpC,IAAI,qBAAqB,CAAE,WAAY,IAAI,UAAW,CAAC,CACzD,CACF,EAEA,IAAM,IAAM,CACV,MAAO,CAAC,IAAqB,MAA6C,MAAQ,QAAU,CAC1F,GAAI,QAAQ,IAAI,MAAO,KAAK,EAAG,OAC/B,GAAI,OAAS,MAAQ,CAAC,MAAO,OAC7B,GAAI,OAAS,MAAQ,MAAO,CAC1B,IAAI,MAAQ,CAAC,EACb,OAAO,YAAY,GAAG,EACtB,MACF,CACA,GAAI,QAAQ,KAAK,EAAG,CAClB,IAAI,MAAQ,KACd,SAAW,OAAS,KAAM,CACxB,IAAI,MAAQ,IAAI,SAAW,YAAY,IAAI,MAAO,KAAK,EAAI,CAAC,KAAK,CACnE,CACA,OAAO,YAAY,GAAG,CACxB,EACA,iBAAkB,CAAC,IAAqB,MAAkC,MAAQ,QAAU,CAC1F,GAAI,QAAQ,IAAI,iBAAkB,KAAK,EAAG,OAC1C,GAAI,CAAC,OAAS,CAAC,MAAO,OACtB,IAAI,iBAAmB,OAAS,KAChC,OAAO,gBAAgB,GAAG,CAC5B,EACA,WAAY,CAAC,IAAqB,QAAkB,CAClD,GAAI,QAAQ,IAAI,WAAY,KAAK,EAAG,OACpC,IAAI,WAAa,MACjB,OAAO,YAAY,GAAG,CACxB,CACF","names":["collection","disabled","event","ctx","rafCleanup"]}
|
|
1
|
+
{"version":3,"sources":["../src/combobox.anatomy.ts","../src/combobox.collection.ts","../src/combobox.connect.ts","../src/combobox.dom.ts","../src/combobox.machine.ts"],"sourcesContent":["import { createAnatomy } from \"@zag-js/anatomy\"\n\nexport const anatomy = createAnatomy(\"combobox\").parts(\n \"root\",\n \"label\",\n \"input\",\n \"positioner\",\n \"control\",\n \"trigger\",\n \"content\",\n \"clearTrigger\",\n \"item\",\n \"itemText\",\n \"itemIndicator\",\n \"itemGroup\",\n \"itemGroupLabel\",\n)\nexport const parts = anatomy.build()\n","import { Collection, type CollectionItem, type CollectionOptions } from \"@zag-js/collection\"\nimport { ref } from \"@zag-js/core\"\n\nexport const collection = <T extends CollectionItem>(options: CollectionOptions<T>): Collection<T> => {\n return ref(new Collection(options))\n}\n\ncollection.empty = (): Collection<CollectionItem> => {\n return ref(new Collection<CollectionItem>({ items: [] }))\n}\n","import { clickIfLink, getEventKey, isContextMenuEvent, isLeftClick, type EventKeyMap } from \"@zag-js/dom-event\"\nimport { ariaAttr, dataAttr, isComposingEvent, isDownloadingEvent, isOpeningInNewTab } from \"@zag-js/dom-query\"\nimport { getPlacementStyles } from \"@zag-js/popper\"\nimport type { NormalizeProps, PropTypes } from \"@zag-js/types\"\nimport { parts } from \"./combobox.anatomy\"\nimport { dom } from \"./combobox.dom\"\nimport type { CollectionItem, ItemProps, ItemState, MachineApi, Send, State } from \"./combobox.types\"\n\nexport function connect<T extends PropTypes, V extends CollectionItem>(\n state: State,\n send: Send,\n normalize: NormalizeProps<T>,\n): MachineApi<T, V> {\n const translations = state.context.translations\n const collection = state.context.collection\n\n const disabled = state.context.disabled\n const interactive = state.context.isInteractive\n const invalid = state.context.invalid\n const readOnly = state.context.readOnly\n\n const open = state.hasTag(\"open\")\n const focused = state.hasTag(\"focused\")\n const composite = state.context.composite\n const highlightedValue = state.context.highlightedValue\n\n const popperStyles = getPlacementStyles({\n ...state.context.positioning,\n placement: state.context.currentPlacement,\n })\n\n function getItemState(props: ItemProps): ItemState {\n const { item } = props\n const disabled = collection.isItemDisabled(item)\n const value = collection.itemToValue(item)\n return {\n value,\n disabled: Boolean(disabled || disabled),\n highlighted: highlightedValue === value,\n selected: state.context.value.includes(value),\n }\n }\n\n return {\n focused,\n open,\n inputValue: state.context.inputValue,\n highlightedValue,\n highlightedItem: state.context.highlightedItem,\n value: state.context.value,\n valueAsString: state.context.valueAsString,\n hasSelectedItems: state.context.hasSelectedItems,\n selectedItems: state.context.selectedItems,\n collection: state.context.collection,\n reposition(options = {}) {\n send({ type: \"POSITIONING.SET\", options })\n },\n setCollection(collection) {\n send({ type: \"COLLECTION.SET\", value: collection })\n },\n setHighlightValue(value) {\n send({ type: \"HIGHLIGHTED_VALUE.SET\", value })\n },\n selectValue(value) {\n send({ type: \"ITEM.SELECT\", value })\n },\n setValue(value) {\n send({ type: \"VALUE.SET\", value })\n },\n setInputValue(value) {\n send({ type: \"INPUT_VALUE.SET\", value })\n },\n clearValue(value) {\n if (value != null) {\n send({ type: \"ITEM.CLEAR\", value })\n } else {\n send(\"VALUE.CLEAR\")\n }\n },\n focus() {\n dom.getInputEl(state.context)?.focus()\n },\n setOpen(nextOpen) {\n if (nextOpen === open) return\n send(nextOpen ? \"OPEN\" : \"CLOSE\")\n },\n rootProps: normalize.element({\n ...parts.root.attrs,\n dir: state.context.dir,\n id: dom.getRootId(state.context),\n \"data-invalid\": dataAttr(invalid),\n \"data-readonly\": dataAttr(readOnly),\n }),\n\n labelProps: normalize.label({\n ...parts.label.attrs,\n dir: state.context.dir,\n htmlFor: dom.getInputId(state.context),\n id: dom.getLabelId(state.context),\n \"data-readonly\": dataAttr(readOnly),\n \"data-disabled\": dataAttr(disabled),\n \"data-invalid\": dataAttr(invalid),\n \"data-focus\": dataAttr(focused),\n onClick(event) {\n if (composite) return\n event.preventDefault()\n dom.getTriggerEl(state.context)?.focus({ preventScroll: true })\n },\n }),\n\n controlProps: normalize.element({\n ...parts.control.attrs,\n dir: state.context.dir,\n id: dom.getControlId(state.context),\n \"data-state\": open ? \"open\" : \"closed\",\n \"data-focus\": dataAttr(focused),\n \"data-disabled\": dataAttr(disabled),\n \"data-invalid\": dataAttr(invalid),\n }),\n\n positionerProps: normalize.element({\n ...parts.positioner.attrs,\n dir: state.context.dir,\n id: dom.getPositionerId(state.context),\n style: popperStyles.floating,\n }),\n\n inputProps: normalize.input({\n ...parts.input.attrs,\n dir: state.context.dir,\n \"aria-invalid\": ariaAttr(invalid),\n \"data-invalid\": dataAttr(invalid),\n name: state.context.name,\n form: state.context.form,\n disabled: disabled,\n autoFocus: state.context.autoFocus,\n autoComplete: \"off\",\n autoCorrect: \"off\",\n autoCapitalize: \"none\",\n spellCheck: \"false\",\n readOnly: readOnly,\n placeholder: state.context.placeholder,\n id: dom.getInputId(state.context),\n type: \"text\",\n role: \"combobox\",\n defaultValue: state.context.inputValue,\n \"aria-autocomplete\": state.context.autoComplete ? \"both\" : \"list\",\n \"aria-controls\": dom.getContentId(state.context),\n \"aria-expanded\": open,\n \"data-state\": open ? \"open\" : \"closed\",\n \"aria-activedescendant\": highlightedValue ? dom.getItemId(state.context, highlightedValue) : undefined,\n onClick(event) {\n if (event.defaultPrevented) return\n if (!state.context.openOnClick) return\n if (!interactive) return\n send(\"INPUT.CLICK\")\n },\n onFocus() {\n if (disabled) return\n send(\"INPUT.FOCUS\")\n },\n onBlur() {\n if (disabled) return\n send(\"INPUT.BLUR\")\n },\n onChange(event) {\n send({ type: \"INPUT.CHANGE\", value: event.currentTarget.value })\n },\n onKeyDown(event) {\n if (event.defaultPrevented) return\n if (!interactive) return\n\n if (event.ctrlKey || event.shiftKey || isComposingEvent(event)) return\n\n const openOnKeyPress = state.context.openOnKeyPress\n const isModifierKey = event.ctrlKey || event.metaKey || event.shiftKey\n const keypress = true\n\n const keymap: EventKeyMap = {\n ArrowDown(event) {\n if (!openOnKeyPress && !open) return\n send({ type: event.altKey ? \"OPEN\" : \"INPUT.ARROW_DOWN\", keypress })\n event.preventDefault()\n },\n ArrowUp() {\n if (!openOnKeyPress && !open) return\n send({ type: event.altKey ? \"CLOSE\" : \"INPUT.ARROW_UP\", keypress })\n event.preventDefault()\n },\n Home(event) {\n if (isModifierKey) return\n send({ type: \"INPUT.HOME\", keypress })\n if (open) {\n event.preventDefault()\n }\n },\n End(event) {\n if (isModifierKey) return\n send({ type: \"INPUT.END\", keypress })\n if (open) {\n event.preventDefault()\n }\n },\n Enter(event) {\n send({ type: \"INPUT.ENTER\", keypress })\n if (open) {\n event.preventDefault()\n }\n const itemEl = dom.getHighlightedItemEl(state.context)\n clickIfLink(itemEl)\n },\n Escape() {\n send({ type: \"INPUT.ESCAPE\", keypress })\n event.preventDefault()\n },\n }\n\n const key = getEventKey(event, state.context)\n const exec = keymap[key]\n exec?.(event)\n },\n }),\n\n getTriggerProps(props = {}) {\n return normalize.button({\n ...parts.trigger.attrs,\n dir: state.context.dir,\n id: dom.getTriggerId(state.context),\n \"aria-haspopup\": composite ? \"listbox\" : \"dialog\",\n type: \"button\",\n tabIndex: props.focusable ? undefined : -1,\n \"aria-label\": translations.triggerLabel,\n \"aria-expanded\": open,\n \"data-state\": open ? \"open\" : \"closed\",\n \"aria-controls\": open ? dom.getContentId(state.context) : undefined,\n disabled,\n \"data-focusable\": dataAttr(props.focusable),\n \"data-readonly\": dataAttr(readOnly),\n \"data-disabled\": dataAttr(disabled),\n onFocus() {\n if (!props.focusable) return\n send({ type: \"INPUT.FOCUS\", src: \"trigger\" })\n },\n onClick(event) {\n if (event.defaultPrevented) return\n if (!interactive) return\n if (!isLeftClick(event)) return\n send(\"TRIGGER.CLICK\")\n },\n onPointerDown(event) {\n if (!interactive) return\n if (event.pointerType === \"touch\") return\n event.preventDefault()\n queueMicrotask(() => {\n dom.getInputEl(state.context)?.focus({ preventScroll: true })\n })\n },\n onKeyDown(event) {\n if (event.defaultPrevented) return\n if (composite) return\n\n const keyMap: EventKeyMap = {\n ArrowDown() {\n send({ type: \"INPUT.ARROW_DOWN\", src: \"trigger\" })\n },\n ArrowUp() {\n send({ type: \"INPUT.ARROW_UP\", src: \"trigger\" })\n },\n }\n\n const key = getEventKey(event, state.context)\n const exec = keyMap[key]\n\n if (exec) {\n exec(event)\n event.preventDefault()\n }\n },\n })\n },\n\n contentProps: normalize.element({\n ...parts.content.attrs,\n dir: state.context.dir,\n id: dom.getContentId(state.context),\n role: !composite ? \"dialog\" : \"listbox\",\n tabIndex: -1,\n hidden: !open,\n \"data-state\": open ? \"open\" : \"closed\",\n \"aria-labelledby\": dom.getLabelId(state.context),\n \"aria-multiselectable\": state.context.multiple && composite ? true : undefined,\n onPointerDown(event) {\n // prevent options or elements within listbox from taking focus\n event.preventDefault()\n },\n }),\n\n listProps: normalize.element({\n role: !composite ? \"listbox\" : undefined,\n \"aria-labelledby\": dom.getLabelId(state.context),\n \"aria-multiselectable\": state.context.multiple && !composite ? true : undefined,\n }),\n\n clearTriggerProps: normalize.button({\n ...parts.clearTrigger.attrs,\n dir: state.context.dir,\n id: dom.getClearTriggerId(state.context),\n type: \"button\",\n tabIndex: -1,\n disabled: disabled,\n \"aria-label\": translations.clearTriggerLabel,\n \"aria-controls\": dom.getInputId(state.context),\n hidden: !state.context.value.length,\n onPointerDown(event) {\n event.preventDefault()\n },\n onClick(event) {\n if (event.defaultPrevented) return\n if (!interactive) return\n send({ type: \"VALUE.CLEAR\", src: \"clear-trigger\" })\n },\n }),\n\n getItemState,\n\n getItemProps(props) {\n const itemState = getItemState(props)\n const value = itemState.value\n\n return normalize.element({\n ...parts.item.attrs,\n dir: state.context.dir,\n id: dom.getItemId(state.context, value),\n role: \"option\",\n tabIndex: -1,\n \"data-highlighted\": dataAttr(itemState.highlighted),\n \"data-state\": itemState.selected ? \"checked\" : \"unchecked\",\n \"aria-selected\": itemState.highlighted,\n \"aria-disabled\": itemState.disabled,\n \"data-disabled\": dataAttr(itemState.disabled),\n \"data-value\": itemState.value,\n onPointerMove() {\n if (itemState.disabled) return\n if (itemState.highlighted) return\n send({ type: \"ITEM.POINTER_MOVE\", value })\n },\n onPointerLeave() {\n if (props.persistFocus) return\n if (itemState.disabled) return\n const mouseMoved = state.previousEvent.type.includes(\"POINTER\")\n if (!mouseMoved) return\n send({ type: \"ITEM.POINTER_LEAVE\", value })\n },\n onPointerUp(event) {\n if (isDownloadingEvent(event)) return\n if (isOpeningInNewTab(event)) return\n if (isContextMenuEvent(event)) return\n if (itemState.disabled) return\n send({ type: \"ITEM.CLICK\", src: \"pointerup\", value })\n },\n onTouchEnd(event) {\n // prevent clicking elements behind content\n event.preventDefault()\n event.stopPropagation()\n },\n })\n },\n\n getItemTextProps(props) {\n const itemState = getItemState(props)\n return normalize.element({\n ...parts.itemText.attrs,\n dir: state.context.dir,\n \"data-disabled\": dataAttr(itemState.disabled),\n \"data-highlighted\": dataAttr(itemState.highlighted),\n })\n },\n getItemIndicatorProps(props) {\n const itemState = getItemState(props)\n return normalize.element({\n \"aria-hidden\": true,\n ...parts.itemIndicator.attrs,\n dir: state.context.dir,\n \"data-state\": itemState.selected ? \"checked\" : \"unchecked\",\n hidden: !itemState.selected,\n })\n },\n\n getItemGroupProps(props) {\n const { id } = props\n return normalize.element({\n ...parts.itemGroup.attrs,\n dir: state.context.dir,\n id: dom.getItemGroupId(state.context, id),\n \"aria-labelledby\": dom.getItemGroupLabelId(state.context, id),\n })\n },\n\n getItemGroupLabelProps(props) {\n const { htmlFor } = props\n return normalize.element({\n ...parts.itemGroupLabel.attrs,\n dir: state.context.dir,\n id: dom.getItemGroupLabelId(state.context, htmlFor),\n role: \"group\",\n })\n },\n }\n}\n","import { createScope, query } from \"@zag-js/dom-query\"\nimport type { MachineContext as Ctx } from \"./combobox.types\"\n\nexport const dom = createScope({\n getRootId: (ctx: Ctx) => ctx.ids?.root ?? `combobox:${ctx.id}`,\n getLabelId: (ctx: Ctx) => ctx.ids?.label ?? `combobox:${ctx.id}:label`,\n getControlId: (ctx: Ctx) => ctx.ids?.control ?? `combobox:${ctx.id}:control`,\n getInputId: (ctx: Ctx) => ctx.ids?.input ?? `combobox:${ctx.id}:input`,\n getContentId: (ctx: Ctx) => ctx.ids?.content ?? `combobox:${ctx.id}:content`,\n getPositionerId: (ctx: Ctx) => ctx.ids?.positioner ?? `combobox:${ctx.id}:popper`,\n getTriggerId: (ctx: Ctx) => ctx.ids?.trigger ?? `combobox:${ctx.id}:toggle-btn`,\n getClearTriggerId: (ctx: Ctx) => ctx.ids?.clearTrigger ?? `combobox:${ctx.id}:clear-btn`,\n getItemGroupId: (ctx: Ctx, id: string | number) => ctx.ids?.itemGroup?.(id) ?? `combobox:${ctx.id}:optgroup:${id}`,\n getItemGroupLabelId: (ctx: Ctx, id: string | number) =>\n ctx.ids?.itemGroupLabel?.(id) ?? `combobox:${ctx.id}:optgroup-label:${id}`,\n getItemId: (ctx: Ctx, id: string) => `combobox:${ctx.id}:option:${id}`,\n\n getContentEl: (ctx: Ctx) => dom.getById(ctx, dom.getContentId(ctx)),\n getInputEl: (ctx: Ctx) => dom.getById<HTMLInputElement>(ctx, dom.getInputId(ctx)),\n getPositionerEl: (ctx: Ctx) => dom.getById(ctx, dom.getPositionerId(ctx)),\n getControlEl: (ctx: Ctx) => dom.getById(ctx, dom.getControlId(ctx)),\n getTriggerEl: (ctx: Ctx) => dom.getById(ctx, dom.getTriggerId(ctx)),\n getClearTriggerEl: (ctx: Ctx) => dom.getById(ctx, dom.getClearTriggerId(ctx)),\n getHighlightedItemEl: (ctx: Ctx) => {\n const value = ctx.highlightedValue\n if (value == null) return\n return query(dom.getContentEl(ctx), `[role=option][data-value=\"${CSS.escape(value)}\"`)\n },\n\n focusInputEl: (ctx: Ctx) => {\n const inputEl = dom.getInputEl(ctx)\n if (dom.getActiveElement(ctx) === inputEl) return\n inputEl?.focus({ preventScroll: true })\n },\n focusTriggerEl: (ctx: Ctx) => {\n const triggerEl = dom.getTriggerEl(ctx)\n if (dom.getActiveElement(ctx) === triggerEl) return\n triggerEl?.focus({ preventScroll: true })\n },\n})\n","import { ariaHidden } from \"@zag-js/aria-hidden\"\nimport { createMachine, guards } from \"@zag-js/core\"\nimport { trackDismissableElement } from \"@zag-js/dismissable\"\nimport { observeAttributes, observeChildren, raf, scrollIntoView } from \"@zag-js/dom-query\"\nimport { getPlacement } from \"@zag-js/popper\"\nimport { addOrRemove, compact, isArray, isBoolean, isEqual, match } from \"@zag-js/utils\"\nimport { collection } from \"./combobox.collection\"\nimport { dom } from \"./combobox.dom\"\nimport type { CollectionItem, MachineContext, MachineState, UserDefinedContext } from \"./combobox.types\"\n\nconst { and, not } = guards\n\nexport function machine<T extends CollectionItem>(userContext: UserDefinedContext<T>) {\n const ctx = compact(userContext)\n return createMachine<MachineContext, MachineState>(\n {\n id: \"combobox\",\n initial: ctx.open ? \"suggesting\" : \"idle\",\n context: {\n loopFocus: true,\n openOnClick: false,\n value: [],\n highlightedValue: null,\n inputValue: \"\",\n allowCustomValue: false,\n closeOnSelect: !ctx.multiple,\n inputBehavior: \"none\",\n selectionBehavior: \"replace\",\n openOnKeyPress: true,\n openOnChange: true,\n composite: true,\n ...ctx,\n highlightedItem: null,\n selectedItems: [],\n valueAsString: \"\",\n collection: ctx.collection ?? collection.empty(),\n positioning: {\n placement: \"bottom\",\n flip: false,\n sameWidth: true,\n ...ctx.positioning,\n },\n translations: {\n triggerLabel: \"Toggle suggestions\",\n clearTriggerLabel: \"Clear value\",\n ...ctx.translations,\n },\n },\n\n created: [\"syncInitialValues\", \"syncSelectionBehavior\"],\n\n computed: {\n isInputValueEmpty: (ctx) => ctx.inputValue.length === 0,\n isInteractive: (ctx) => !(ctx.readOnly || ctx.disabled),\n autoComplete: (ctx) => ctx.inputBehavior === \"autocomplete\",\n autoHighlight: (ctx) => ctx.inputBehavior === \"autohighlight\",\n hasSelectedItems: (ctx) => ctx.value.length > 0,\n },\n\n watch: {\n value: [\"syncSelectedItems\"],\n inputValue: [\"syncInputValue\"],\n highlightedValue: [\"syncHighlightedItem\", \"autofillInputValue\"],\n multiple: [\"syncSelectionBehavior\"],\n open: [\"toggleVisibility\"],\n },\n\n on: {\n \"HIGHLIGHTED_VALUE.SET\": {\n actions: [\"setHighlightedItem\"],\n },\n \"ITEM.SELECT\": {\n actions: [\"selectItem\"],\n },\n \"ITEM.CLEAR\": {\n actions: [\"clearItem\"],\n },\n \"VALUE.SET\": {\n actions: [\"setSelectedItems\"],\n },\n \"INPUT_VALUE.SET\": {\n actions: \"setInputValue\",\n },\n \"COLLECTION.SET\": {\n actions: [\"setCollection\"],\n },\n \"POSITIONING.SET\": {\n actions: [\"reposition\"],\n },\n },\n\n states: {\n idle: {\n tags: [\"idle\", \"closed\"],\n entry: [\"scrollContentToTop\", \"clearHighlightedItem\"],\n on: {\n \"CONTROLLED.OPEN\": {\n target: \"interacting\",\n },\n \"TRIGGER.CLICK\": [\n {\n guard: \"isOpenControlled\",\n actions: [\"setInitialFocus\", \"highlightFirstSelectedItem\", \"invokeOnOpen\"],\n },\n {\n target: \"interacting\",\n actions: [\"setInitialFocus\", \"highlightFirstSelectedItem\", \"invokeOnOpen\"],\n },\n ],\n \"INPUT.CLICK\": [\n {\n guard: \"isOpenControlled\",\n actions: [\"highlightFirstSelectedItem\", \"invokeOnOpen\"],\n },\n {\n target: \"interacting\",\n actions: [\"highlightFirstSelectedItem\", \"invokeOnOpen\"],\n },\n ],\n \"INPUT.FOCUS\": {\n target: \"focused\",\n },\n OPEN: [\n {\n guard: \"isOpenControlled\",\n actions: [\"invokeOnOpen\"],\n },\n {\n target: \"interacting\",\n actions: [\"invokeOnOpen\"],\n },\n ],\n \"VALUE.CLEAR\": {\n target: \"focused\",\n actions: [\"clearInputValue\", \"clearSelectedItems\", \"setInitialFocus\"],\n },\n },\n },\n\n focused: {\n tags: [\"focused\", \"closed\"],\n entry: [\"scrollContentToTop\", \"clearHighlightedItem\"],\n on: {\n \"CONTROLLED.OPEN\": [\n {\n guard: \"isChangeEvent\",\n target: \"suggesting\",\n },\n {\n target: \"interacting\",\n },\n ],\n \"INPUT.CHANGE\": [\n {\n guard: and(\"isOpenControlled\", \"openOnChange\"),\n actions: [\"setInputValue\", \"invokeOnOpen\", \"highlightFirstItemIfNeeded\"],\n },\n {\n guard: \"openOnChange\",\n target: \"suggesting\",\n actions: [\"setInputValue\", \"invokeOnOpen\", \"highlightFirstItemIfNeeded\"],\n },\n {\n actions: \"setInputValue\",\n },\n ],\n \"LAYER.INTERACT_OUTSIDE\": {\n target: \"idle\",\n },\n \"INPUT.ESCAPE\": {\n guard: and(\"isCustomValue\", not(\"allowCustomValue\")),\n actions: \"revertInputValue\",\n },\n \"INPUT.BLUR\": {\n target: \"idle\",\n },\n \"INPUT.CLICK\": [\n {\n guard: \"isOpenControlled\",\n actions: [\"highlightFirstSelectedItem\", \"invokeOnOpen\"],\n },\n {\n target: \"interacting\",\n actions: [\"highlightFirstSelectedItem\", \"invokeOnOpen\"],\n },\n ],\n \"TRIGGER.CLICK\": [\n {\n guard: \"isOpenControlled\",\n actions: [\"setInitialFocus\", \"highlightFirstSelectedItem\", \"invokeOnOpen\"],\n },\n {\n target: \"interacting\",\n actions: [\"setInitialFocus\", \"highlightFirstSelectedItem\", \"invokeOnOpen\"],\n },\n ],\n \"INPUT.ARROW_DOWN\": [\n // == group 1 ==\n {\n guard: and(\"isOpenControlled\", \"autoComplete\"),\n actions: [\"invokeOnOpen\"],\n },\n {\n guard: \"autoComplete\",\n target: \"interacting\",\n actions: [\"invokeOnOpen\"],\n },\n // == group 2 ==\n {\n guard: \"isOpenControlled\",\n actions: [\"highlightFirstOrSelectedItem\", \"invokeOnOpen\"],\n },\n {\n target: \"interacting\",\n actions: [\"highlightFirstOrSelectedItem\", \"invokeOnOpen\"],\n },\n ],\n \"INPUT.ARROW_UP\": [\n // == group 1 ==\n {\n guard: \"autoComplete\",\n target: \"interacting\",\n actions: \"invokeOnOpen\",\n },\n {\n guard: \"autoComplete\",\n target: \"interacting\",\n actions: \"invokeOnOpen\",\n },\n // == group 2 ==\n {\n target: \"interacting\",\n actions: [\"highlightLastOrSelectedItem\", \"invokeOnOpen\"],\n },\n {\n target: \"interacting\",\n actions: [\"highlightLastOrSelectedItem\", \"invokeOnOpen\"],\n },\n ],\n OPEN: [\n {\n guard: \"isOpenControlled\",\n actions: [\"invokeOnOpen\"],\n },\n {\n target: \"interacting\",\n actions: [\"invokeOnOpen\"],\n },\n ],\n \"VALUE.CLEAR\": {\n actions: [\"clearInputValue\", \"clearSelectedItems\"],\n },\n },\n },\n\n interacting: {\n tags: [\"open\", \"focused\"],\n entry: [\"setInitialFocus\"],\n activities: [\"scrollToHighlightedItem\", \"trackDismissableLayer\", \"computePlacement\", \"hideOtherElements\"],\n on: {\n \"CONTROLLED.CLOSE\": [\n {\n guard: \"restoreFocus\",\n target: \"focused\",\n actions: [\"setFinalFocus\"],\n },\n {\n target: \"idle\",\n },\n ],\n \"INPUT.HOME\": {\n actions: [\"highlightFirstItem\"],\n },\n \"INPUT.END\": {\n actions: [\"highlightLastItem\"],\n },\n \"INPUT.ARROW_DOWN\": [\n {\n guard: and(\"autoComplete\", \"isLastItemHighlighted\"),\n actions: [\"clearHighlightedItem\", \"scrollContentToTop\"],\n },\n {\n actions: [\"highlightNextItem\"],\n },\n ],\n \"INPUT.ARROW_UP\": [\n {\n guard: and(\"autoComplete\", \"isFirstItemHighlighted\"),\n actions: \"clearHighlightedItem\",\n },\n {\n actions: \"highlightPrevItem\",\n },\n ],\n \"INPUT.ENTER\": [\n {\n guard: and(\"isOpenControlled\", \"closeOnSelect\"),\n actions: [\"selectHighlightedItem\", \"invokeOnClose\"],\n },\n {\n guard: \"closeOnSelect\",\n target: \"focused\",\n actions: [\"selectHighlightedItem\", \"invokeOnClose\", \"setFinalFocus\"],\n },\n {\n actions: [\"selectHighlightedItem\"],\n },\n ],\n \"INPUT.CHANGE\": [\n {\n guard: \"autoComplete\",\n target: \"suggesting\",\n actions: [\"setInputValue\", \"invokeOnOpen\"],\n },\n {\n target: \"suggesting\",\n actions: [\"clearHighlightedItem\", \"setInputValue\", \"invokeOnOpen\"],\n },\n ],\n \"ITEM.POINTER_MOVE\": {\n actions: [\"setHighlightedItem\"],\n },\n \"ITEM.POINTER_LEAVE\": {\n actions: [\"clearHighlightedItem\"],\n },\n \"ITEM.CLICK\": [\n {\n guard: and(\"isOpenControlled\", \"closeOnSelect\"),\n actions: [\"selectItem\", \"invokeOnClose\"],\n },\n {\n guard: \"closeOnSelect\",\n target: \"focused\",\n actions: [\"selectItem\", \"invokeOnClose\", \"setFinalFocus\"],\n },\n {\n actions: [\"selectItem\"],\n },\n ],\n \"LAYER.ESCAPE\": [\n {\n guard: and(\"isOpenControlled\", \"autoComplete\"),\n actions: [\"syncInputValue\", \"invokeOnClose\"],\n },\n {\n guard: \"autoComplete\",\n target: \"focused\",\n actions: [\"syncInputValue\", \"invokeOnClose\"],\n },\n {\n guard: \"isOpenControlled\",\n actions: \"invokeOnClose\",\n },\n {\n target: \"focused\",\n actions: [\"invokeOnClose\", \"setFinalFocus\"],\n },\n ],\n \"TRIGGER.CLICK\": [\n {\n guard: \"isOpenControlled\",\n actions: \"invokeOnClose\",\n },\n {\n target: \"focused\",\n actions: \"invokeOnClose\",\n },\n ],\n \"LAYER.INTERACT_OUTSIDE\": [\n // == group 1 ==\n {\n guard: and(\"isOpenControlled\", \"isCustomValue\", not(\"allowCustomValue\")),\n actions: [\"revertInputValue\", \"invokeOnClose\"],\n },\n {\n guard: and(\"isCustomValue\", not(\"allowCustomValue\")),\n target: \"idle\",\n actions: [\"revertInputValue\", \"invokeOnClose\"],\n },\n // == group 2 ==\n {\n guard: \"isOpenControlled\",\n actions: \"invokeOnClose\",\n },\n {\n target: \"idle\",\n actions: \"invokeOnClose\",\n },\n ],\n CLOSE: [\n {\n guard: \"isOpenControlled\",\n actions: [\"invokeOnClose\"],\n },\n {\n target: \"focused\",\n actions: [\"invokeOnClose\", \"setFinalFocus\"],\n },\n ],\n \"VALUE.CLEAR\": [\n {\n guard: \"isOpenControlled\",\n actions: [\"clearInputValue\", \"clearSelectedItems\", \"invokeOnClose\"],\n },\n {\n target: \"focused\",\n actions: [\"clearInputValue\", \"clearSelectedItems\", \"invokeOnClose\", \"setFinalFocus\"],\n },\n ],\n },\n },\n\n suggesting: {\n tags: [\"open\", \"focused\"],\n activities: [\n \"trackDismissableLayer\",\n \"scrollToHighlightedItem\",\n \"computePlacement\",\n \"trackChildNodes\",\n \"hideOtherElements\",\n ],\n entry: [\"setInitialFocus\"],\n on: {\n \"CONTROLLED.CLOSE\": [\n {\n guard: \"restoreFocus\",\n target: \"focused\",\n actions: [\"setFinalFocus\"],\n },\n {\n target: \"idle\",\n },\n ],\n CHILDREN_CHANGE: {\n actions: [\"highlightFirstItem\"],\n },\n \"INPUT.ARROW_DOWN\": {\n target: \"interacting\",\n actions: [\"highlightNextItem\"],\n },\n \"INPUT.ARROW_UP\": {\n target: \"interacting\",\n actions: [\"highlightPrevItem\"],\n },\n \"INPUT.HOME\": {\n target: \"interacting\",\n actions: [\"highlightFirstItem\"],\n },\n \"INPUT.END\": {\n target: \"interacting\",\n actions: [\"highlightLastItem\"],\n },\n \"INPUT.ENTER\": [\n {\n guard: and(\"isOpenControlled\", \"closeOnSelect\"),\n actions: [\"selectHighlightedItem\", \"invokeOnClose\"],\n },\n {\n guard: \"closeOnSelect\",\n target: \"focused\",\n actions: [\"selectHighlightedItem\", \"invokeOnClose\", \"setFinalFocus\"],\n },\n {\n actions: [\"selectHighlightedItem\"],\n },\n ],\n \"INPUT.CHANGE\": [\n {\n guard: \"autoHighlight\",\n actions: [\"setInputValue\"],\n },\n {\n actions: [\"setInputValue\"],\n },\n ],\n \"LAYER.ESCAPE\": [\n {\n guard: \"isOpenControlled\",\n actions: [\"invokeOnClose\"],\n },\n {\n target: \"focused\",\n actions: [\"invokeOnClose\"],\n },\n ],\n \"ITEM.POINTER_MOVE\": {\n target: \"interacting\",\n actions: [\"setHighlightedItem\"],\n },\n \"ITEM.POINTER_LEAVE\": {\n actions: [\"clearHighlightedItem\"],\n },\n \"LAYER.INTERACT_OUTSIDE\": [\n // == group 1 ==\n {\n guard: and(\"isOpenControlled\", \"isCustomValue\", not(\"allowCustomValue\")),\n actions: [\"revertInputValue\", \"invokeOnClose\"],\n },\n {\n guard: and(\"isCustomValue\", not(\"allowCustomValue\")),\n target: \"idle\",\n actions: [\"revertInputValue\", \"invokeOnClose\"],\n },\n // == group 2 ==\n {\n guard: \"isOpenControlled\",\n actions: [\"invokeOnClose\"],\n },\n {\n target: \"idle\",\n actions: [\"invokeOnClose\"],\n },\n ],\n \"TRIGGER.CLICK\": [\n {\n guard: \"isOpenControlled\",\n actions: [\"invokeOnClose\"],\n },\n {\n target: \"focused\",\n actions: [\"invokeOnClose\"],\n },\n ],\n \"ITEM.CLICK\": [\n {\n guard: and(\"isOpenControlled\", \"closeOnSelect\"),\n actions: [\"selectItem\", \"invokeOnClose\"],\n },\n {\n guard: \"closeOnSelect\",\n target: \"focused\",\n actions: [\"selectItem\", \"invokeOnClose\", \"setFinalFocus\"],\n },\n {\n actions: [\"selectItem\"],\n },\n ],\n CLOSE: [\n {\n guard: \"isOpenControlled\",\n actions: [\"invokeOnClose\"],\n },\n {\n target: \"focused\",\n actions: [\"invokeOnClose\", \"setFinalFocus\"],\n },\n ],\n \"VALUE.CLEAR\": [\n {\n guard: \"isOpenControlled\",\n actions: [\"clearInputValue\", \"clearSelectedItems\", \"invokeOnClose\"],\n },\n {\n target: \"focused\",\n actions: [\"clearInputValue\", \"clearSelectedItems\", \"invokeOnClose\", \"setFinalFocus\"],\n },\n ],\n },\n },\n },\n },\n\n {\n guards: {\n isInputValueEmpty: (ctx) => ctx.isInputValueEmpty,\n autoComplete: (ctx) => ctx.autoComplete && !ctx.multiple,\n autoHighlight: (ctx) => ctx.autoHighlight,\n isFirstItemHighlighted: (ctx) => ctx.collection.first() === ctx.highlightedValue,\n isLastItemHighlighted: (ctx) => ctx.collection.last() === ctx.highlightedValue,\n isCustomValue: (ctx) => ctx.inputValue !== ctx.valueAsString,\n allowCustomValue: (ctx) => !!ctx.allowCustomValue,\n hasHighlightedItem: (ctx) => ctx.highlightedValue != null,\n closeOnSelect: (ctx) => !!ctx.closeOnSelect,\n isOpenControlled: (ctx) => !!ctx[\"open.controlled\"],\n openOnChange: (ctx, evt) => {\n if (isBoolean(ctx.openOnChange)) return ctx.openOnChange\n return !!ctx.openOnChange?.({ inputValue: evt.value })\n },\n restoreFocus: (_ctx, evt) => (evt.restoreFocus == null ? true : !!evt.restoreFocus),\n isChangeEvent: (_ctx, evt) => evt.previousEvent?.type === \"INPUT.CHANGE\",\n },\n\n activities: {\n trackDismissableLayer(ctx, _evt, { send }) {\n if (ctx.disableLayer) return\n const contentEl = () => dom.getContentEl(ctx)\n return trackDismissableElement(contentEl, {\n defer: true,\n exclude: () => [dom.getInputEl(ctx), dom.getTriggerEl(ctx), dom.getClearTriggerEl(ctx)],\n onFocusOutside: ctx.onFocusOutside,\n onPointerDownOutside: ctx.onPointerDownOutside,\n onInteractOutside: ctx.onInteractOutside,\n onEscapeKeyDown(event) {\n event.preventDefault()\n event.stopPropagation()\n send(\"LAYER.ESCAPE\")\n },\n onDismiss() {\n send({ type: \"LAYER.INTERACT_OUTSIDE\", restoreFocus: false })\n },\n })\n },\n hideOtherElements(ctx) {\n return ariaHidden([dom.getInputEl(ctx), dom.getContentEl(ctx), dom.getTriggerEl(ctx)])\n },\n computePlacement(ctx) {\n const controlEl = () => dom.getControlEl(ctx)\n const positionerEl = () => dom.getPositionerEl(ctx)\n ctx.currentPlacement = ctx.positioning.placement\n return getPlacement(controlEl, positionerEl, {\n ...ctx.positioning,\n defer: true,\n onComplete(data) {\n ctx.currentPlacement = data.placement\n },\n })\n },\n // in event the options are fetched (async), we still want to auto-highlight the first option\n trackChildNodes(ctx, _evt, { send }) {\n if (!ctx.autoHighlight) return\n const exec = () => send(\"CHILDREN_CHANGE\")\n const contentEl = () => dom.getContentEl(ctx)\n return observeChildren(contentEl, {\n callback: exec,\n defer: true,\n })\n },\n scrollToHighlightedItem(ctx, _evt, { getState }) {\n const inputEl = dom.getInputEl(ctx)\n\n let cleanups: VoidFunction[] = []\n\n const exec = (immediate: boolean) => {\n const state = getState()\n\n const pointer = state.event.type.includes(\"POINTER\")\n if (pointer || !ctx.highlightedValue) return\n\n const itemEl = dom.getHighlightedItemEl(ctx)\n const contentEl = dom.getContentEl(ctx)\n\n if (ctx.scrollToIndexFn) {\n const highlightedIndex = ctx.collection.indexOf(ctx.highlightedValue)\n ctx.scrollToIndexFn({ index: highlightedIndex, immediate })\n return\n }\n\n const rafCleanup = raf(() => {\n scrollIntoView(itemEl, { rootEl: contentEl, block: \"nearest\" })\n })\n cleanups.push(rafCleanup)\n }\n\n const rafCleanup = raf(() => exec(true))\n cleanups.push(rafCleanup)\n\n const observerCleanup = observeAttributes(inputEl, {\n attributes: [\"aria-activedescendant\"],\n callback: () => exec(false),\n })\n cleanups.push(observerCleanup)\n\n return () => {\n cleanups.forEach((cleanup) => cleanup())\n }\n },\n },\n\n actions: {\n reposition(ctx, evt) {\n const controlEl = () => dom.getControlEl(ctx)\n const positionerEl = () => dom.getPositionerEl(ctx)\n getPlacement(controlEl, positionerEl, {\n ...ctx.positioning,\n ...evt.options,\n defer: true,\n listeners: false,\n onComplete(data) {\n ctx.currentPlacement = data.placement\n },\n })\n },\n setHighlightedItem(ctx, evt) {\n if (evt.value == null) return\n set.highlightedValue(ctx, evt.value)\n },\n clearHighlightedItem(ctx) {\n set.highlightedValue(ctx, null, true)\n },\n selectHighlightedItem(ctx) {\n set.value(ctx, ctx.highlightedValue)\n },\n selectItem(ctx, evt) {\n if (evt.value == null) return\n set.value(ctx, evt.value)\n },\n clearItem(ctx, evt) {\n if (evt.value == null) return\n const value = ctx.value.filter((v) => v !== evt.value)\n set.value(ctx, value)\n },\n setInitialFocus(ctx) {\n raf(() => {\n dom.focusInputEl(ctx)\n })\n },\n setFinalFocus(ctx) {\n raf(() => {\n const triggerEl = dom.getTriggerEl(ctx)\n if (triggerEl?.dataset.focusable == null) {\n dom.focusInputEl(ctx)\n } else {\n dom.focusTriggerEl(ctx)\n }\n })\n },\n syncInputValue(ctx) {\n const inputEl = dom.getInputEl(ctx)\n if (!inputEl) return\n\n inputEl.value = ctx.inputValue\n\n queueMicrotask(() => {\n const { selectionStart, selectionEnd } = inputEl\n\n if (Math.abs((selectionEnd ?? 0) - (selectionStart ?? 0)) !== 0) return\n if (selectionStart !== 0) return\n\n inputEl.setSelectionRange(inputEl.value.length, inputEl.value.length)\n })\n },\n setInputValue(ctx, evt) {\n set.inputValue(ctx, evt.value)\n },\n clearInputValue(ctx) {\n set.inputValue(ctx, \"\")\n },\n revertInputValue(ctx) {\n const inputValue = match(ctx.selectionBehavior, {\n replace: ctx.hasSelectedItems ? ctx.valueAsString : \"\",\n preserve: ctx.inputValue,\n clear: \"\",\n })\n\n set.inputValue(ctx, inputValue)\n },\n syncInitialValues(ctx) {\n const selectedItems = ctx.collection.items(ctx.value)\n const valueAsString = ctx.collection.itemsToString(selectedItems)\n\n ctx.highlightedItem = ctx.collection.item(ctx.highlightedValue)\n ctx.selectedItems = selectedItems\n ctx.valueAsString = valueAsString\n\n ctx.inputValue = match(ctx.selectionBehavior, {\n preserve: ctx.inputValue || valueAsString,\n replace: valueAsString,\n clear: \"\",\n })\n },\n syncSelectionBehavior(ctx) {\n if (ctx.multiple) {\n ctx.selectionBehavior = \"clear\"\n }\n },\n setSelectedItems(ctx, evt) {\n if (!isArray(evt.value)) return\n set.value(ctx, evt.value)\n },\n clearSelectedItems(ctx) {\n set.value(ctx, [])\n },\n scrollContentToTop(ctx) {\n if (ctx.scrollToIndexFn) {\n ctx.scrollToIndexFn({ index: 0, immediate: true })\n } else {\n const contentEl = dom.getContentEl(ctx)\n if (!contentEl) return\n contentEl.scrollTop = 0\n }\n },\n invokeOnOpen(ctx) {\n ctx.onOpenChange?.({ open: true })\n },\n invokeOnClose(ctx) {\n ctx.onOpenChange?.({ open: false })\n },\n highlightFirstItem(ctx) {\n raf(() => {\n const value = ctx.collection.first()\n set.highlightedValue(ctx, value)\n })\n },\n highlightFirstItemIfNeeded(ctx) {\n if (!ctx.autoHighlight) return\n raf(() => {\n const value = ctx.collection.first()\n set.highlightedValue(ctx, value)\n })\n },\n highlightLastItem(ctx) {\n raf(() => {\n const value = ctx.collection.last()\n set.highlightedValue(ctx, value)\n })\n },\n highlightNextItem(ctx) {\n let value: string | null = null\n if (ctx.highlightedValue) {\n value = ctx.collection.next(ctx.highlightedValue)\n if (!value && ctx.loopFocus) value = ctx.collection.first()\n } else {\n value = ctx.collection.first()\n }\n set.highlightedValue(ctx, value)\n },\n highlightPrevItem(ctx) {\n let value: string | null = null\n if (ctx.highlightedValue) {\n value = ctx.collection.prev(ctx.highlightedValue)\n if (!value && ctx.loopFocus) value = ctx.collection.last()\n } else {\n value = ctx.collection.last()\n }\n set.highlightedValue(ctx, value)\n },\n highlightFirstSelectedItem(ctx) {\n raf(() => {\n const [value] = ctx.collection.sort(ctx.value)\n set.highlightedValue(ctx, value)\n })\n },\n highlightFirstOrSelectedItem(ctx) {\n raf(() => {\n let value: string | null = null\n if (ctx.hasSelectedItems) {\n value = ctx.collection.sort(ctx.value)[0]\n } else {\n value = ctx.collection.first()\n }\n set.highlightedValue(ctx, value)\n })\n },\n highlightLastOrSelectedItem(ctx) {\n raf(() => {\n let value: string | null = null\n if (ctx.hasSelectedItems) {\n value = ctx.collection.sort(ctx.value)[0]\n } else {\n value = ctx.collection.last()\n }\n set.highlightedValue(ctx, value)\n })\n },\n autofillInputValue(ctx, evt) {\n const inputEl = dom.getInputEl(ctx)\n if (!ctx.autoComplete || !inputEl || !evt.keypress) return\n const valueText = ctx.collection.valueToString(ctx.highlightedValue)\n raf(() => {\n inputEl.value = valueText || ctx.inputValue\n })\n },\n setCollection(ctx, evt) {\n ctx.collection = evt.value\n },\n syncSelectedItems(ctx) {\n sync.valueChange(ctx)\n },\n syncHighlightedItem(ctx) {\n sync.highlightChange(ctx)\n },\n toggleVisibility(ctx, evt, { send }) {\n send({ type: ctx.open ? \"CONTROLLED.OPEN\" : \"CONTROLLED.CLOSE\", previousEvent: evt })\n },\n },\n },\n )\n}\n\nconst sync = {\n valueChange: (ctx: MachineContext) => {\n // side effect\n const prevSelectedItems = ctx.selectedItems\n ctx.selectedItems = ctx.value.map((v) => {\n const foundItem = prevSelectedItems.find((item) => ctx.collection.itemToValue(item) === v)\n if (foundItem) return foundItem\n return ctx.collection.item(v)\n })\n\n // set valueAsString\n const valueAsString = ctx.collection.itemsToString(ctx.selectedItems)\n ctx.valueAsString = valueAsString\n\n // set inputValue\n let inputValue: string | undefined\n if (ctx.getSelectionValue) {\n //\n inputValue = ctx.getSelectionValue({\n inputValue: ctx.inputValue,\n selectedItems: Array.from(ctx.selectedItems),\n valueAsString,\n })\n //\n } else {\n //\n inputValue = match(ctx.selectionBehavior, {\n replace: ctx.valueAsString,\n preserve: ctx.inputValue,\n clear: \"\",\n })\n }\n\n set.inputValue(ctx, inputValue)\n },\n highlightChange: (ctx: MachineContext) => {\n ctx.highlightedItem = ctx.collection.item(ctx.highlightedValue)\n },\n}\n\nconst invoke = {\n valueChange: (ctx: MachineContext) => {\n sync.valueChange(ctx)\n ctx.onValueChange?.({\n value: Array.from(ctx.value),\n items: Array.from(ctx.selectedItems),\n })\n },\n highlightChange: (ctx: MachineContext) => {\n sync.highlightChange(ctx)\n ctx.onHighlightChange?.({\n highlightedValue: ctx.highlightedValue,\n highlightedItem: ctx.highlightedItem,\n })\n },\n inputChange: (ctx: MachineContext) => {\n ctx.onInputValueChange?.({ inputValue: ctx.inputValue })\n },\n}\n\nconst set = {\n value: (ctx: MachineContext, value: string | string[] | null | undefined, force = false) => {\n if (isEqual(ctx.value, value)) return\n if (value == null && !force) return\n if (value == null && force) {\n ctx.value = []\n invoke.valueChange(ctx)\n return\n }\n if (isArray(value)) {\n ctx.value = value\n } else if (value != null) {\n ctx.value = ctx.multiple ? addOrRemove(ctx.value, value) : [value]\n }\n invoke.valueChange(ctx)\n },\n highlightedValue: (ctx: MachineContext, value: string | null | undefined, force = false) => {\n if (isEqual(ctx.highlightedValue, value)) return\n if (!value && !force) return\n ctx.highlightedValue = value || null\n invoke.highlightChange(ctx)\n },\n inputValue: (ctx: MachineContext, value: string) => {\n if (isEqual(ctx.inputValue, value)) return\n ctx.inputValue = value\n invoke.inputChange(ctx)\n },\n}\n"],"mappings":"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","names":["collection","disabled","event","ctx","rafCleanup"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zag-js/combobox",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.52.0",
|
|
4
4
|
"description": "Core logic for the combobox widget implemented as a state machine",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"js",
|
|
@@ -27,16 +27,16 @@
|
|
|
27
27
|
"url": "https://github.com/chakra-ui/zag/issues"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@zag-js/anatomy": "0.
|
|
31
|
-
"@zag-js/aria-hidden": "0.
|
|
32
|
-
"@zag-js/collection": "0.
|
|
33
|
-
"@zag-js/core": "0.
|
|
34
|
-
"@zag-js/dismissable": "0.
|
|
35
|
-
"@zag-js/dom-query": "0.
|
|
36
|
-
"@zag-js/dom-event": "0.
|
|
37
|
-
"@zag-js/utils": "0.
|
|
38
|
-
"@zag-js/popper": "0.
|
|
39
|
-
"@zag-js/types": "0.
|
|
30
|
+
"@zag-js/anatomy": "0.52.0",
|
|
31
|
+
"@zag-js/aria-hidden": "0.52.0",
|
|
32
|
+
"@zag-js/collection": "0.52.0",
|
|
33
|
+
"@zag-js/core": "0.52.0",
|
|
34
|
+
"@zag-js/dismissable": "0.52.0",
|
|
35
|
+
"@zag-js/dom-query": "0.52.0",
|
|
36
|
+
"@zag-js/dom-event": "0.52.0",
|
|
37
|
+
"@zag-js/utils": "0.52.0",
|
|
38
|
+
"@zag-js/popper": "0.52.0",
|
|
39
|
+
"@zag-js/types": "0.52.0"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"clean-package": "2.2.0"
|
package/src/combobox.connect.ts
CHANGED
|
@@ -1,12 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
getEventKey,
|
|
4
|
-
getNativeEvent,
|
|
5
|
-
isContextMenuEvent,
|
|
6
|
-
isLeftClick,
|
|
7
|
-
type EventKeyMap,
|
|
8
|
-
} from "@zag-js/dom-event"
|
|
9
|
-
import { ariaAttr, dataAttr, isDownloadingEvent, isOpeningInNewTab } from "@zag-js/dom-query"
|
|
1
|
+
import { clickIfLink, getEventKey, isContextMenuEvent, isLeftClick, type EventKeyMap } from "@zag-js/dom-event"
|
|
2
|
+
import { ariaAttr, dataAttr, isComposingEvent, isDownloadingEvent, isOpeningInNewTab } from "@zag-js/dom-query"
|
|
10
3
|
import { getPlacementStyles } from "@zag-js/popper"
|
|
11
4
|
import type { NormalizeProps, PropTypes } from "@zag-js/types"
|
|
12
5
|
import { parts } from "./combobox.anatomy"
|
|
@@ -177,8 +170,7 @@ export function connect<T extends PropTypes, V extends CollectionItem>(
|
|
|
177
170
|
if (event.defaultPrevented) return
|
|
178
171
|
if (!interactive) return
|
|
179
172
|
|
|
180
|
-
|
|
181
|
-
if (evt.ctrlKey || evt.shiftKey || evt.isComposing) return
|
|
173
|
+
if (event.ctrlKey || event.shiftKey || isComposingEvent(event)) return
|
|
182
174
|
|
|
183
175
|
const openOnKeyPress = state.context.openOnKeyPress
|
|
184
176
|
const isModifierKey = event.ctrlKey || event.metaKey || event.shiftKey
|
|
@@ -210,7 +202,6 @@ export function connect<T extends PropTypes, V extends CollectionItem>(
|
|
|
210
202
|
}
|
|
211
203
|
},
|
|
212
204
|
Enter(event) {
|
|
213
|
-
if (evt.isComposing) return
|
|
214
205
|
send({ type: "INPUT.ENTER", keypress })
|
|
215
206
|
if (open) {
|
|
216
207
|
event.preventDefault()
|
|
@@ -252,9 +243,8 @@ export function connect<T extends PropTypes, V extends CollectionItem>(
|
|
|
252
243
|
},
|
|
253
244
|
onClick(event) {
|
|
254
245
|
if (event.defaultPrevented) return
|
|
255
|
-
const evt = getNativeEvent(event)
|
|
256
246
|
if (!interactive) return
|
|
257
|
-
if (!isLeftClick(
|
|
247
|
+
if (!isLeftClick(event)) return
|
|
258
248
|
send("TRIGGER.CLICK")
|
|
259
249
|
},
|
|
260
250
|
onPointerDown(event) {
|