2022-10-29 00:20:35 +02:00
( ( ) => {
2023-05-19 15:05:29 +02:00
// node_modules/.pnpm/@vue+shared@3.1.5/node_modules/@vue/shared/dist/shared.esm-bundler.js
function makeMap ( str , expectsLowerCase ) {
const map = /* @__PURE__ */ Object . create ( null ) ;
const list = str . split ( "," ) ;
for ( let i = 0 ; i < list . length ; i ++ ) {
map [ list [ i ] ] = true ;
}
return expectsLowerCase ? ( val ) => ! ! map [ val . toLowerCase ( ) ] : ( val ) => ! ! map [ val ] ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
var specialBooleanAttrs = ` itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly ` ;
var isBooleanAttr = /* @__PURE__ */ makeMap ( specialBooleanAttrs + ` ,async,autofocus,autoplay,controls,default,defer,disabled,hidden,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected ` ) ;
var EMPTY _OBJ = true ? Object . freeze ( { } ) : { } ;
var EMPTY _ARR = true ? Object . freeze ( [ ] ) : [ ] ;
var hasOwnProperty = Object . prototype . hasOwnProperty ;
var hasOwn = ( val , key ) => hasOwnProperty . call ( val , key ) ;
var isArray = Array . isArray ;
var isMap = ( val ) => toTypeString ( val ) === "[object Map]" ;
var isString = ( val ) => typeof val === "string" ;
var isSymbol = ( val ) => typeof val === "symbol" ;
var isObject = ( val ) => val !== null && typeof val === "object" ;
var objectToString = Object . prototype . toString ;
var toTypeString = ( value ) => objectToString . call ( value ) ;
var toRawType = ( value ) => {
return toTypeString ( value ) . slice ( 8 , - 1 ) ;
} ;
var isIntegerKey = ( key ) => isString ( key ) && key !== "NaN" && key [ 0 ] !== "-" && "" + parseInt ( key , 10 ) === key ;
var cacheStringFunction = ( fn ) => {
const cache = /* @__PURE__ */ Object . create ( null ) ;
return ( str ) => {
const hit = cache [ str ] ;
return hit || ( cache [ str ] = fn ( str ) ) ;
} ;
} ;
var camelizeRE = /-(\w)/g ;
var camelize = cacheStringFunction ( ( str ) => {
return str . replace ( camelizeRE , ( _ , c ) => c ? c . toUpperCase ( ) : "" ) ;
} ) ;
var hyphenateRE = /\B([A-Z])/g ;
var hyphenate = cacheStringFunction ( ( str ) => str . replace ( hyphenateRE , "-$1" ) . toLowerCase ( ) ) ;
var capitalize = cacheStringFunction ( ( str ) => str . charAt ( 0 ) . toUpperCase ( ) + str . slice ( 1 ) ) ;
var toHandlerKey = cacheStringFunction ( ( str ) => str ? ` on ${ capitalize ( str ) } ` : ` ` ) ;
var hasChanged = ( value , oldValue ) => value !== oldValue && ( value === value || oldValue === oldValue ) ;
// node_modules/.pnpm/@vue+reactivity@3.1.5/node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js
var targetMap = /* @__PURE__ */ new WeakMap ( ) ;
var effectStack = [ ] ;
var activeEffect ;
var ITERATE _KEY = Symbol ( true ? "iterate" : "" ) ;
var MAP _KEY _ITERATE _KEY = Symbol ( true ? "Map key iterate" : "" ) ;
function isEffect ( fn ) {
return fn && fn . _isEffect === true ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function effect ( fn , options = EMPTY _OBJ ) {
if ( isEffect ( fn ) ) {
fn = fn . raw ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
const effect3 = createReactiveEffect ( fn , options ) ;
if ( ! options . lazy ) {
effect3 ( ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
return effect3 ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function stop ( effect3 ) {
if ( effect3 . active ) {
cleanup ( effect3 ) ;
if ( effect3 . options . onStop ) {
effect3 . options . onStop ( ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
effect3 . active = false ;
}
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
var uid = 0 ;
function createReactiveEffect ( fn , options ) {
const effect3 = function reactiveEffect ( ) {
if ( ! effect3 . active ) {
return fn ( ) ;
}
if ( ! effectStack . includes ( effect3 ) ) {
cleanup ( effect3 ) ;
try {
enableTracking ( ) ;
effectStack . push ( effect3 ) ;
activeEffect = effect3 ;
return fn ( ) ;
} finally {
effectStack . pop ( ) ;
resetTracking ( ) ;
activeEffect = effectStack [ effectStack . length - 1 ] ;
}
2022-10-29 00:20:35 +02:00
}
} ;
2023-05-19 15:05:29 +02:00
effect3 . id = uid ++ ;
effect3 . allowRecurse = ! ! options . allowRecurse ;
effect3 . _isEffect = true ;
effect3 . active = true ;
effect3 . raw = fn ;
effect3 . deps = [ ] ;
effect3 . options = options ;
return effect3 ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function cleanup ( effect3 ) {
const { deps } = effect3 ;
if ( deps . length ) {
for ( let i = 0 ; i < deps . length ; i ++ ) {
deps [ i ] . delete ( effect3 ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
deps . length = 0 ;
2022-10-29 00:20:35 +02:00
}
}
2023-05-19 15:05:29 +02:00
var shouldTrack = true ;
var trackStack = [ ] ;
function pauseTracking ( ) {
trackStack . push ( shouldTrack ) ;
shouldTrack = false ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function enableTracking ( ) {
trackStack . push ( shouldTrack ) ;
shouldTrack = true ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function resetTracking ( ) {
const last = trackStack . pop ( ) ;
shouldTrack = last === void 0 ? true : last ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function track ( target , type , key ) {
if ( ! shouldTrack || activeEffect === void 0 ) {
2022-10-29 00:20:35 +02:00
return ;
}
2023-05-19 15:05:29 +02:00
let depsMap = targetMap . get ( target ) ;
if ( ! depsMap ) {
targetMap . set ( target , depsMap = /* @__PURE__ */ new Map ( ) ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
let dep = depsMap . get ( key ) ;
if ( ! dep ) {
depsMap . set ( key , dep = /* @__PURE__ */ new Set ( ) ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
if ( ! dep . has ( activeEffect ) ) {
dep . add ( activeEffect ) ;
activeEffect . deps . push ( dep ) ;
if ( activeEffect . options . onTrack ) {
activeEffect . options . onTrack ( {
effect : activeEffect ,
target ,
type ,
key
} ) ;
}
2022-10-29 00:20:35 +02:00
}
}
2023-05-19 15:05:29 +02:00
function trigger ( target , type , key , newValue , oldValue , oldTarget ) {
const depsMap = targetMap . get ( target ) ;
if ( ! depsMap ) {
return ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
const effects = /* @__PURE__ */ new Set ( ) ;
const add2 = ( effectsToAdd ) => {
if ( effectsToAdd ) {
effectsToAdd . forEach ( ( effect3 ) => {
if ( effect3 !== activeEffect || effect3 . allowRecurse ) {
effects . add ( effect3 ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
} ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
} ;
if ( type === "clear" ) {
depsMap . forEach ( add2 ) ;
} else if ( key === "length" && isArray ( target ) ) {
depsMap . forEach ( ( dep , key2 ) => {
if ( key2 === "length" || key2 >= newValue ) {
add2 ( dep ) ;
2022-10-29 00:20:35 +02:00
}
} ) ;
2023-05-19 15:05:29 +02:00
} else {
if ( key !== void 0 ) {
add2 ( depsMap . get ( key ) ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
switch ( type ) {
case "add" :
if ( ! isArray ( target ) ) {
add2 ( depsMap . get ( ITERATE _KEY ) ) ;
if ( isMap ( target ) ) {
add2 ( depsMap . get ( MAP _KEY _ITERATE _KEY ) ) ;
}
} else if ( isIntegerKey ( key ) ) {
add2 ( depsMap . get ( "length" ) ) ;
}
break ;
case "delete" :
if ( ! isArray ( target ) ) {
add2 ( depsMap . get ( ITERATE _KEY ) ) ;
if ( isMap ( target ) ) {
add2 ( depsMap . get ( MAP _KEY _ITERATE _KEY ) ) ;
}
}
break ;
case "set" :
if ( isMap ( target ) ) {
add2 ( depsMap . get ( ITERATE _KEY ) ) ;
}
break ;
}
}
const run = ( effect3 ) => {
if ( effect3 . options . onTrigger ) {
effect3 . options . onTrigger ( {
effect : effect3 ,
target ,
key ,
type ,
newValue ,
oldValue ,
oldTarget
} ) ;
}
if ( effect3 . options . scheduler ) {
effect3 . options . scheduler ( effect3 ) ;
2022-10-29 00:20:35 +02:00
} else {
2023-05-19 15:05:29 +02:00
effect3 ( ) ;
2022-10-29 00:20:35 +02:00
}
} ;
2023-05-19 15:05:29 +02:00
effects . forEach ( run ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
var isNonTrackableKeys = /* @__PURE__ */ makeMap ( ` __proto__,__v_isRef,__isVue ` ) ;
var builtInSymbols = new Set ( Object . getOwnPropertyNames ( Symbol ) . map ( ( key ) => Symbol [ key ] ) . filter ( isSymbol ) ) ;
var get = /* @__PURE__ */ createGetter ( ) ;
var readonlyGet = /* @__PURE__ */ createGetter ( true ) ;
var arrayInstrumentations = /* @__PURE__ */ createArrayInstrumentations ( ) ;
function createArrayInstrumentations ( ) {
const instrumentations = { } ;
[ "includes" , "indexOf" , "lastIndexOf" ] . forEach ( ( key ) => {
instrumentations [ key ] = function ( ... args ) {
const arr = toRaw ( this ) ;
for ( let i = 0 , l = this . length ; i < l ; i ++ ) {
track ( arr , "get" , i + "" ) ;
}
const res = arr [ key ] ( ... args ) ;
if ( res === - 1 || res === false ) {
return arr [ key ] ( ... args . map ( toRaw ) ) ;
} else {
return res ;
}
} ;
2022-10-29 00:20:35 +02:00
} ) ;
2023-05-19 15:05:29 +02:00
[ "push" , "pop" , "shift" , "unshift" , "splice" ] . forEach ( ( key ) => {
instrumentations [ key ] = function ( ... args ) {
pauseTracking ( ) ;
const res = toRaw ( this ) [ key ] . apply ( this , args ) ;
resetTracking ( ) ;
return res ;
} ;
} ) ;
return instrumentations ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function createGetter ( isReadonly = false , shallow = false ) {
return function get3 ( target , key , receiver ) {
if ( key === "__v_isReactive" ) {
return ! isReadonly ;
} else if ( key === "__v_isReadonly" ) {
return isReadonly ;
} else if ( key === "__v_raw" && receiver === ( isReadonly ? shallow ? shallowReadonlyMap : readonlyMap : shallow ? shallowReactiveMap : reactiveMap ) . get ( target ) ) {
return target ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
const targetIsArray = isArray ( target ) ;
if ( ! isReadonly && targetIsArray && hasOwn ( arrayInstrumentations , key ) ) {
return Reflect . get ( arrayInstrumentations , key , receiver ) ;
}
const res = Reflect . get ( target , key , receiver ) ;
if ( isSymbol ( key ) ? builtInSymbols . has ( key ) : isNonTrackableKeys ( key ) ) {
return res ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
if ( ! isReadonly ) {
track ( target , "get" , key ) ;
}
if ( shallow ) {
return res ;
}
if ( isRef ( res ) ) {
const shouldUnwrap = ! targetIsArray || ! isIntegerKey ( key ) ;
return shouldUnwrap ? res . value : res ;
}
if ( isObject ( res ) ) {
return isReadonly ? readonly ( res ) : reactive ( res ) ;
}
return res ;
2022-10-29 00:20:35 +02:00
} ;
}
2023-05-19 15:05:29 +02:00
var set = /* @__PURE__ */ createSetter ( ) ;
function createSetter ( shallow = false ) {
return function set3 ( target , key , value , receiver ) {
let oldValue = target [ key ] ;
if ( ! shallow ) {
value = toRaw ( value ) ;
oldValue = toRaw ( oldValue ) ;
if ( ! isArray ( target ) && isRef ( oldValue ) && ! isRef ( value ) ) {
oldValue . value = value ;
return true ;
}
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
const hadKey = isArray ( target ) && isIntegerKey ( key ) ? Number ( key ) < target . length : hasOwn ( target , key ) ;
const result = Reflect . set ( target , key , value , receiver ) ;
if ( target === toRaw ( receiver ) ) {
if ( ! hadKey ) {
trigger ( target , "add" , key , value ) ;
} else if ( hasChanged ( value , oldValue ) ) {
trigger ( target , "set" , key , value , oldValue ) ;
2023-01-20 16:43:19 +01:00
}
}
2023-05-19 15:05:29 +02:00
return result ;
2023-01-20 16:43:19 +01:00
} ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function deleteProperty ( target , key ) {
const hadKey = hasOwn ( target , key ) ;
const oldValue = target [ key ] ;
const result = Reflect . deleteProperty ( target , key ) ;
if ( result && hadKey ) {
trigger ( target , "delete" , key , void 0 , oldValue ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
return result ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function has ( target , key ) {
const result = Reflect . has ( target , key ) ;
if ( ! isSymbol ( key ) || ! builtInSymbols . has ( key ) ) {
track ( target , "has" , key ) ;
}
return result ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function ownKeys ( target ) {
track ( target , "iterate" , isArray ( target ) ? "length" : ITERATE _KEY ) ;
return Reflect . ownKeys ( target ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
var mutableHandlers = {
get ,
set ,
deleteProperty ,
has ,
ownKeys
} ;
var readonlyHandlers = {
get : readonlyGet ,
set ( target , key ) {
if ( true ) {
console . warn ( ` Set operation on key " ${ String ( key ) } " failed: target is readonly. ` , target ) ;
}
return true ;
} ,
deleteProperty ( target , key ) {
if ( true ) {
console . warn ( ` Delete operation on key " ${ String ( key ) } " failed: target is readonly. ` , target ) ;
}
return true ;
}
} ;
var toReactive = ( value ) => isObject ( value ) ? reactive ( value ) : value ;
var toReadonly = ( value ) => isObject ( value ) ? readonly ( value ) : value ;
var toShallow = ( value ) => value ;
var getProto = ( v ) => Reflect . getPrototypeOf ( v ) ;
function get$1 ( target , key , isReadonly = false , isShallow = false ) {
target = target [
"__v_raw"
/* RAW */
] ;
const rawTarget = toRaw ( target ) ;
const rawKey = toRaw ( key ) ;
if ( key !== rawKey ) {
! isReadonly && track ( rawTarget , "get" , key ) ;
}
! isReadonly && track ( rawTarget , "get" , rawKey ) ;
const { has : has2 } = getProto ( rawTarget ) ;
const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive ;
if ( has2 . call ( rawTarget , key ) ) {
return wrap ( target . get ( key ) ) ;
} else if ( has2 . call ( rawTarget , rawKey ) ) {
return wrap ( target . get ( rawKey ) ) ;
} else if ( target !== rawTarget ) {
target . get ( key ) ;
}
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function has$1 ( key , isReadonly = false ) {
const target = this [
"__v_raw"
/* RAW */
] ;
const rawTarget = toRaw ( target ) ;
const rawKey = toRaw ( key ) ;
if ( key !== rawKey ) {
! isReadonly && track ( rawTarget , "has" , key ) ;
}
! isReadonly && track ( rawTarget , "has" , rawKey ) ;
return key === rawKey ? target . has ( key ) : target . has ( key ) || target . has ( rawKey ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function size ( target , isReadonly = false ) {
target = target [
"__v_raw"
/* RAW */
] ;
! isReadonly && track ( toRaw ( target ) , "iterate" , ITERATE _KEY ) ;
return Reflect . get ( target , "size" , target ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function add ( value ) {
value = toRaw ( value ) ;
const target = toRaw ( this ) ;
const proto = getProto ( target ) ;
const hadKey = proto . has . call ( target , value ) ;
if ( ! hadKey ) {
target . add ( value ) ;
trigger ( target , "add" , value , value ) ;
}
return this ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function set$1 ( key , value ) {
value = toRaw ( value ) ;
const target = toRaw ( this ) ;
const { has : has2 , get : get3 } = getProto ( target ) ;
let hadKey = has2 . call ( target , key ) ;
if ( ! hadKey ) {
key = toRaw ( key ) ;
hadKey = has2 . call ( target , key ) ;
} else if ( true ) {
checkIdentityKeys ( target , has2 , key ) ;
}
const oldValue = get3 . call ( target , key ) ;
target . set ( key , value ) ;
if ( ! hadKey ) {
trigger ( target , "add" , key , value ) ;
} else if ( hasChanged ( value , oldValue ) ) {
trigger ( target , "set" , key , value , oldValue ) ;
}
return this ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function deleteEntry ( key ) {
const target = toRaw ( this ) ;
const { has : has2 , get : get3 } = getProto ( target ) ;
let hadKey = has2 . call ( target , key ) ;
if ( ! hadKey ) {
key = toRaw ( key ) ;
hadKey = has2 . call ( target , key ) ;
} else if ( true ) {
checkIdentityKeys ( target , has2 , key ) ;
}
const oldValue = get3 ? get3 . call ( target , key ) : void 0 ;
const result = target . delete ( key ) ;
if ( hadKey ) {
trigger ( target , "delete" , key , void 0 , oldValue ) ;
}
return result ;
}
function clear ( ) {
const target = toRaw ( this ) ;
const hadItems = target . size !== 0 ;
const oldTarget = true ? isMap ( target ) ? new Map ( target ) : new Set ( target ) : void 0 ;
const result = target . clear ( ) ;
if ( hadItems ) {
trigger ( target , "clear" , void 0 , void 0 , oldTarget ) ;
}
return result ;
}
function createForEach ( isReadonly , isShallow ) {
return function forEach ( callback , thisArg ) {
const observed = this ;
const target = observed [
"__v_raw"
/* RAW */
] ;
const rawTarget = toRaw ( target ) ;
const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive ;
! isReadonly && track ( rawTarget , "iterate" , ITERATE _KEY ) ;
return target . forEach ( ( value , key ) => {
return callback . call ( thisArg , wrap ( value ) , wrap ( key ) , observed ) ;
} ) ;
} ;
}
function createIterableMethod ( method , isReadonly , isShallow ) {
return function ( ... args ) {
const target = this [
"__v_raw"
/* RAW */
] ;
const rawTarget = toRaw ( target ) ;
const targetIsMap = isMap ( rawTarget ) ;
const isPair = method === "entries" || method === Symbol . iterator && targetIsMap ;
const isKeyOnly = method === "keys" && targetIsMap ;
const innerIterator = target [ method ] ( ... args ) ;
const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive ;
! isReadonly && track ( rawTarget , "iterate" , isKeyOnly ? MAP _KEY _ITERATE _KEY : ITERATE _KEY ) ;
2022-10-29 00:20:35 +02:00
return {
2023-05-19 15:05:29 +02:00
// iterator protocol
next ( ) {
const { value , done } = innerIterator . next ( ) ;
return done ? { value , done } : {
value : isPair ? [ wrap ( value [ 0 ] ) , wrap ( value [ 1 ] ) ] : wrap ( value ) ,
done
} ;
} ,
// iterable protocol
[ Symbol . iterator ] ( ) {
return this ;
}
2022-10-29 00:20:35 +02:00
} ;
} ;
}
2023-05-19 15:05:29 +02:00
function createReadonlyMethod ( type ) {
return function ( ... args ) {
if ( true ) {
const key = args [ 0 ] ? ` on key " ${ args [ 0 ] } " ` : ` ` ;
console . warn ( ` ${ capitalize ( type ) } operation ${ key } failed: target is readonly. ` , toRaw ( this ) ) ;
}
return type === "delete" ? false : this ;
} ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function createInstrumentations ( ) {
const mutableInstrumentations2 = {
get ( key ) {
return get$1 ( this , key ) ;
} ,
get size ( ) {
return size ( this ) ;
} ,
has : has$1 ,
add ,
set : set$1 ,
delete : deleteEntry ,
clear ,
forEach : createForEach ( false , false )
} ;
const shallowInstrumentations2 = {
get ( key ) {
return get$1 ( this , key , false , true ) ;
} ,
get size ( ) {
return size ( this ) ;
} ,
has : has$1 ,
add ,
set : set$1 ,
delete : deleteEntry ,
clear ,
forEach : createForEach ( false , true )
} ;
const readonlyInstrumentations2 = {
get ( key ) {
return get$1 ( this , key , true ) ;
} ,
get size ( ) {
return size ( this , true ) ;
} ,
has ( key ) {
return has$1 . call ( this , key , true ) ;
} ,
add : createReadonlyMethod (
"add"
/* ADD */
) ,
set : createReadonlyMethod (
"set"
/* SET */
) ,
delete : createReadonlyMethod (
"delete"
/* DELETE */
) ,
clear : createReadonlyMethod (
"clear"
/* CLEAR */
) ,
forEach : createForEach ( true , false )
} ;
const shallowReadonlyInstrumentations2 = {
get ( key ) {
return get$1 ( this , key , true , true ) ;
} ,
get size ( ) {
return size ( this , true ) ;
} ,
has ( key ) {
return has$1 . call ( this , key , true ) ;
} ,
add : createReadonlyMethod (
"add"
/* ADD */
) ,
set : createReadonlyMethod (
"set"
/* SET */
) ,
delete : createReadonlyMethod (
"delete"
/* DELETE */
) ,
clear : createReadonlyMethod (
"clear"
/* CLEAR */
) ,
forEach : createForEach ( true , true )
} ;
const iteratorMethods = [ "keys" , "values" , "entries" , Symbol . iterator ] ;
iteratorMethods . forEach ( ( method ) => {
mutableInstrumentations2 [ method ] = createIterableMethod ( method , false , false ) ;
readonlyInstrumentations2 [ method ] = createIterableMethod ( method , true , false ) ;
shallowInstrumentations2 [ method ] = createIterableMethod ( method , false , true ) ;
shallowReadonlyInstrumentations2 [ method ] = createIterableMethod ( method , true , true ) ;
} ) ;
return [
mutableInstrumentations2 ,
readonlyInstrumentations2 ,
shallowInstrumentations2 ,
shallowReadonlyInstrumentations2
] ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
var [ mutableInstrumentations , readonlyInstrumentations , shallowInstrumentations , shallowReadonlyInstrumentations ] = /* @__PURE__ */ createInstrumentations ( ) ;
function createInstrumentationGetter ( isReadonly , shallow ) {
const instrumentations = shallow ? isReadonly ? shallowReadonlyInstrumentations : shallowInstrumentations : isReadonly ? readonlyInstrumentations : mutableInstrumentations ;
return ( target , key , receiver ) => {
if ( key === "__v_isReactive" ) {
return ! isReadonly ;
} else if ( key === "__v_isReadonly" ) {
return isReadonly ;
} else if ( key === "__v_raw" ) {
return target ;
}
return Reflect . get ( hasOwn ( instrumentations , key ) && key in target ? instrumentations : target , key , receiver ) ;
} ;
}
var mutableCollectionHandlers = {
get : /* @__PURE__ */ createInstrumentationGetter ( false , false )
} ;
var readonlyCollectionHandlers = {
get : /* @__PURE__ */ createInstrumentationGetter ( true , false )
} ;
function checkIdentityKeys ( target , has2 , key ) {
const rawKey = toRaw ( key ) ;
if ( rawKey !== key && has2 . call ( target , rawKey ) ) {
const type = toRawType ( target ) ;
console . warn ( ` Reactive ${ type } contains both the raw and reactive versions of the same object ${ type === ` Map ` ? ` as keys ` : ` ` } , which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible. ` ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
}
var reactiveMap = /* @__PURE__ */ new WeakMap ( ) ;
var shallowReactiveMap = /* @__PURE__ */ new WeakMap ( ) ;
var readonlyMap = /* @__PURE__ */ new WeakMap ( ) ;
var shallowReadonlyMap = /* @__PURE__ */ new WeakMap ( ) ;
function targetTypeMap ( rawType ) {
switch ( rawType ) {
case "Object" :
case "Array" :
return 1 ;
case "Map" :
case "Set" :
case "WeakMap" :
case "WeakSet" :
return 2 ;
default :
return 0 ;
2022-10-29 00:20:35 +02:00
}
}
2023-05-19 15:05:29 +02:00
function getTargetType ( value ) {
return value [
"__v_skip"
/* SKIP */
] || ! Object . isExtensible ( value ) ? 0 : targetTypeMap ( toRawType ( value ) ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function reactive ( target ) {
if ( target && target [
"__v_isReadonly"
/* IS_READONLY */
] ) {
return target ;
}
return createReactiveObject ( target , false , mutableHandlers , mutableCollectionHandlers , reactiveMap ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function readonly ( target ) {
return createReactiveObject ( target , true , readonlyHandlers , readonlyCollectionHandlers , readonlyMap ) ;
}
function createReactiveObject ( target , isReadonly , baseHandlers , collectionHandlers , proxyMap ) {
if ( ! isObject ( target ) ) {
if ( true ) {
console . warn ( ` value cannot be made reactive: ${ String ( target ) } ` ) ;
}
return target ;
}
if ( target [
"__v_raw"
/* RAW */
] && ! ( isReadonly && target [
"__v_isReactive"
/* IS_REACTIVE */
] ) ) {
return target ;
}
const existingProxy = proxyMap . get ( target ) ;
if ( existingProxy ) {
return existingProxy ;
}
const targetType = getTargetType ( target ) ;
if ( targetType === 0 ) {
return target ;
}
const proxy = new Proxy ( target , targetType === 2 ? collectionHandlers : baseHandlers ) ;
proxyMap . set ( target , proxy ) ;
return proxy ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function toRaw ( observed ) {
return observed && toRaw ( observed [
"__v_raw"
/* RAW */
] ) || observed ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function isRef ( r ) {
return Boolean ( r && r . _ _v _isRef === true ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
// node_modules/.pnpm/alpinejs@3.12.1/node_modules/alpinejs/dist/module.esm.js
var flushPending = false ;
var flushing = false ;
var queue = [ ] ;
var lastFlushedIndex = - 1 ;
function scheduler ( callback ) {
queueJob ( callback ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function queueJob ( job ) {
if ( ! queue . includes ( job ) )
queue . push ( job ) ;
queueFlush ( ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function dequeueJob ( job ) {
let index = queue . indexOf ( job ) ;
if ( index !== - 1 && index > lastFlushedIndex )
queue . splice ( index , 1 ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function queueFlush ( ) {
if ( ! flushing && ! flushPending ) {
flushPending = true ;
queueMicrotask ( flushJobs ) ;
}
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function flushJobs ( ) {
flushPending = false ;
flushing = true ;
for ( let i = 0 ; i < queue . length ; i ++ ) {
queue [ i ] ( ) ;
lastFlushedIndex = i ;
}
queue . length = 0 ;
lastFlushedIndex = - 1 ;
flushing = false ;
2023-01-20 16:43:19 +01:00
}
2023-05-19 15:05:29 +02:00
var reactive2 ;
var effect2 ;
var release ;
var raw ;
var shouldSchedule = true ;
function disableEffectScheduling ( callback ) {
shouldSchedule = false ;
callback ( ) ;
shouldSchedule = true ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function setReactivityEngine ( engine ) {
reactive2 = engine . reactive ;
release = engine . release ;
effect2 = ( callback ) => engine . effect ( callback , { scheduler : ( task ) => {
if ( shouldSchedule ) {
scheduler ( task ) ;
} else {
task ( ) ;
}
} } ) ;
raw = engine . raw ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function overrideEffect ( override ) {
effect2 = override ;
2023-01-20 16:43:19 +01:00
}
2023-05-19 15:05:29 +02:00
function elementBoundEffect ( el ) {
let cleanup2 = ( ) => {
} ;
let wrappedEffect = ( callback ) => {
let effectReference = effect2 ( callback ) ;
if ( ! el . _x _effects ) {
el . _x _effects = /* @__PURE__ */ new Set ( ) ;
el . _x _runEffects = ( ) => {
el . _x _effects . forEach ( ( i ) => i ( ) ) ;
} ;
}
el . _x _effects . add ( effectReference ) ;
cleanup2 = ( ) => {
if ( effectReference === void 0 )
return ;
el . _x _effects . delete ( effectReference ) ;
release ( effectReference ) ;
} ;
return effectReference ;
} ;
return [ wrappedEffect , ( ) => {
cleanup2 ( ) ;
} ] ;
2023-01-20 16:43:19 +01:00
}
2023-05-19 15:05:29 +02:00
var onAttributeAddeds = [ ] ;
var onElRemoveds = [ ] ;
var onElAddeds = [ ] ;
function onElAdded ( callback ) {
onElAddeds . push ( callback ) ;
2023-01-20 16:43:19 +01:00
}
2023-05-19 15:05:29 +02:00
function onElRemoved ( el , callback ) {
if ( typeof callback === "function" ) {
if ( ! el . _x _cleanups )
el . _x _cleanups = [ ] ;
el . _x _cleanups . push ( callback ) ;
} else {
callback = el ;
onElRemoveds . push ( callback ) ;
2022-10-29 00:20:35 +02:00
}
}
2023-05-19 15:05:29 +02:00
function onAttributesAdded ( callback ) {
onAttributeAddeds . push ( callback ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function onAttributeRemoved ( el , name , callback ) {
if ( ! el . _x _attributeCleanups )
el . _x _attributeCleanups = { } ;
if ( ! el . _x _attributeCleanups [ name ] )
el . _x _attributeCleanups [ name ] = [ ] ;
el . _x _attributeCleanups [ name ] . push ( callback ) ;
}
function cleanupAttributes ( el , names ) {
if ( ! el . _x _attributeCleanups )
return ;
Object . entries ( el . _x _attributeCleanups ) . forEach ( ( [ name , value ] ) => {
if ( names === void 0 || names . includes ( name ) ) {
value . forEach ( ( i ) => i ( ) ) ;
delete el . _x _attributeCleanups [ name ] ;
2022-10-29 00:20:35 +02:00
}
} ) ;
}
2023-05-19 15:05:29 +02:00
var observer = new MutationObserver ( onMutate ) ;
var currentlyObserving = false ;
function startObservingMutations ( ) {
observer . observe ( document , { subtree : true , childList : true , attributes : true , attributeOldValue : true } ) ;
currentlyObserving = true ;
}
function stopObservingMutations ( ) {
flushObserver ( ) ;
observer . disconnect ( ) ;
currentlyObserving = false ;
}
var recordQueue = [ ] ;
var willProcessRecordQueue = false ;
function flushObserver ( ) {
recordQueue = recordQueue . concat ( observer . takeRecords ( ) ) ;
if ( recordQueue . length && ! willProcessRecordQueue ) {
willProcessRecordQueue = true ;
queueMicrotask ( ( ) => {
processRecordQueue ( ) ;
willProcessRecordQueue = false ;
} ) ;
2022-10-29 00:20:35 +02:00
}
}
2023-05-19 15:05:29 +02:00
function processRecordQueue ( ) {
onMutate ( recordQueue ) ;
recordQueue . length = 0 ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function mutateDom ( callback ) {
if ( ! currentlyObserving )
return callback ( ) ;
stopObservingMutations ( ) ;
let result = callback ( ) ;
startObservingMutations ( ) ;
return result ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
var isCollecting = false ;
var deferredMutations = [ ] ;
function deferMutations ( ) {
isCollecting = true ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function flushAndStopDeferringMutations ( ) {
isCollecting = false ;
onMutate ( deferredMutations ) ;
deferredMutations = [ ] ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function onMutate ( mutations ) {
if ( isCollecting ) {
deferredMutations = deferredMutations . concat ( mutations ) ;
return ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
let addedNodes = [ ] ;
let removedNodes = [ ] ;
let addedAttributes = /* @__PURE__ */ new Map ( ) ;
let removedAttributes = /* @__PURE__ */ new Map ( ) ;
for ( let i = 0 ; i < mutations . length ; i ++ ) {
if ( mutations [ i ] . target . _x _ignoreMutationObserver )
continue ;
if ( mutations [ i ] . type === "childList" ) {
mutations [ i ] . addedNodes . forEach ( ( node ) => node . nodeType === 1 && addedNodes . push ( node ) ) ;
mutations [ i ] . removedNodes . forEach ( ( node ) => node . nodeType === 1 && removedNodes . push ( node ) ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
if ( mutations [ i ] . type === "attributes" ) {
let el = mutations [ i ] . target ;
let name = mutations [ i ] . attributeName ;
let oldValue = mutations [ i ] . oldValue ;
let add2 = ( ) => {
if ( ! addedAttributes . has ( el ) )
addedAttributes . set ( el , [ ] ) ;
addedAttributes . get ( el ) . push ( { name , value : el . getAttribute ( name ) } ) ;
} ;
let remove = ( ) => {
if ( ! removedAttributes . has ( el ) )
removedAttributes . set ( el , [ ] ) ;
removedAttributes . get ( el ) . push ( name ) ;
} ;
if ( el . hasAttribute ( name ) && oldValue === null ) {
add2 ( ) ;
} else if ( el . hasAttribute ( name ) ) {
remove ( ) ;
add2 ( ) ;
} else {
remove ( ) ;
2022-10-29 00:20:35 +02:00
}
}
}
2023-05-19 15:05:29 +02:00
removedAttributes . forEach ( ( attrs , el ) => {
cleanupAttributes ( el , attrs ) ;
} ) ;
addedAttributes . forEach ( ( attrs , el ) => {
onAttributeAddeds . forEach ( ( i ) => i ( el , attrs ) ) ;
} ) ;
for ( let node of removedNodes ) {
if ( addedNodes . includes ( node ) )
continue ;
onElRemoveds . forEach ( ( i ) => i ( node ) ) ;
if ( node . _x _cleanups ) {
while ( node . _x _cleanups . length )
node . _x _cleanups . pop ( ) ( ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
}
addedNodes . forEach ( ( node ) => {
node . _x _ignoreSelf = true ;
node . _x _ignore = true ;
2022-10-29 00:20:35 +02:00
} ) ;
2023-05-19 15:05:29 +02:00
for ( let node of addedNodes ) {
if ( removedNodes . includes ( node ) )
continue ;
if ( ! node . isConnected )
continue ;
delete node . _x _ignoreSelf ;
delete node . _x _ignore ;
onElAddeds . forEach ( ( i ) => i ( node ) ) ;
node . _x _ignore = true ;
node . _x _ignoreSelf = true ;
}
addedNodes . forEach ( ( node ) => {
delete node . _x _ignoreSelf ;
delete node . _x _ignore ;
} ) ;
addedNodes = null ;
removedNodes = null ;
addedAttributes = null ;
removedAttributes = null ;
}
function scope ( node ) {
return mergeProxies ( closestDataStack ( node ) ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function addScopeToNode ( node , data2 , referenceNode ) {
node . _x _dataStack = [ data2 , ... closestDataStack ( referenceNode || node ) ] ;
return ( ) => {
node . _x _dataStack = node . _x _dataStack . filter ( ( i ) => i !== data2 ) ;
} ;
}
function closestDataStack ( node ) {
if ( node . _x _dataStack )
return node . _x _dataStack ;
if ( typeof ShadowRoot === "function" && node instanceof ShadowRoot ) {
return closestDataStack ( node . host ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
if ( ! node . parentNode ) {
return [ ] ;
}
return closestDataStack ( node . parentNode ) ;
}
function mergeProxies ( objects ) {
let thisProxy = new Proxy ( { } , {
ownKeys : ( ) => {
return Array . from ( new Set ( objects . flatMap ( ( i ) => Object . keys ( i ) ) ) ) ;
2022-10-29 00:20:35 +02:00
} ,
2023-05-19 15:05:29 +02:00
has : ( target , name ) => {
return objects . some ( ( obj ) => obj . hasOwnProperty ( name ) ) ;
2022-10-29 00:20:35 +02:00
} ,
2023-05-19 15:05:29 +02:00
get : ( target , name ) => {
return ( objects . find ( ( obj ) => {
if ( obj . hasOwnProperty ( name ) ) {
let descriptor = Object . getOwnPropertyDescriptor ( obj , name ) ;
if ( descriptor . get && descriptor . get . _x _alreadyBound || descriptor . set && descriptor . set . _x _alreadyBound ) {
return true ;
}
if ( ( descriptor . get || descriptor . set ) && descriptor . enumerable ) {
let getter = descriptor . get ;
let setter = descriptor . set ;
let property = descriptor ;
getter = getter && getter . bind ( thisProxy ) ;
setter = setter && setter . bind ( thisProxy ) ;
if ( getter )
getter . _x _alreadyBound = true ;
if ( setter )
setter . _x _alreadyBound = true ;
Object . defineProperty ( obj , name , {
... property ,
get : getter ,
set : setter
} ) ;
}
return true ;
}
return false ;
} ) || { } ) [ name ] ;
2022-10-29 00:20:35 +02:00
} ,
2023-05-19 15:05:29 +02:00
set : ( target , name , value ) => {
let closestObjectWithKey = objects . find ( ( obj ) => obj . hasOwnProperty ( name ) ) ;
if ( closestObjectWithKey ) {
closestObjectWithKey [ name ] = value ;
} else {
objects [ objects . length - 1 ] [ name ] = value ;
}
return true ;
2022-10-29 00:20:35 +02:00
}
} ) ;
2023-05-19 15:05:29 +02:00
return thisProxy ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function initInterceptors ( data2 ) {
let isObject2 = ( val ) => typeof val === "object" && ! Array . isArray ( val ) && val !== null ;
let recurse = ( obj , basePath = "" ) => {
Object . entries ( Object . getOwnPropertyDescriptors ( obj ) ) . forEach ( ( [ key , { value , enumerable } ] ) => {
if ( enumerable === false || value === void 0 )
return ;
let path = basePath === "" ? key : ` ${ basePath } . ${ key } ` ;
if ( typeof value === "object" && value !== null && value . _x _interceptor ) {
obj [ key ] = value . initialize ( data2 , path , key ) ;
} else {
if ( isObject2 ( value ) && value !== obj && ! ( value instanceof Element ) ) {
recurse ( value , path ) ;
}
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
} ) ;
} ;
return recurse ( data2 ) ;
}
function interceptor ( callback , mutateObj = ( ) => {
} ) {
let obj = {
initialValue : void 0 ,
_x _interceptor : true ,
initialize ( data2 , path , key ) {
return callback ( this . initialValue , ( ) => get2 ( data2 , path ) , ( value ) => set2 ( data2 , path , value ) , path , key ) ;
}
} ;
mutateObj ( obj ) ;
return ( initialValue ) => {
if ( typeof initialValue === "object" && initialValue !== null && initialValue . _x _interceptor ) {
let initialize = obj . initialize . bind ( obj ) ;
obj . initialize = ( data2 , path , key ) => {
let innerValue = initialValue . initialize ( data2 , path , key ) ;
obj . initialValue = innerValue ;
return initialize ( data2 , path , key ) ;
} ;
} else {
obj . initialValue = initialValue ;
}
return obj ;
} ;
}
function get2 ( obj , path ) {
return path . split ( "." ) . reduce ( ( carry , segment ) => carry [ segment ] , obj ) ;
}
function set2 ( obj , path , value ) {
if ( typeof path === "string" )
path = path . split ( "." ) ;
if ( path . length === 1 )
obj [ path [ 0 ] ] = value ;
else if ( path . length === 0 )
throw error ;
else {
if ( obj [ path [ 0 ] ] )
return set2 ( obj [ path [ 0 ] ] , path . slice ( 1 ) , value ) ;
else {
obj [ path [ 0 ] ] = { } ;
return set2 ( obj [ path [ 0 ] ] , path . slice ( 1 ) , value ) ;
}
}
}
var magics = { } ;
function magic ( name , callback ) {
magics [ name ] = callback ;
}
function injectMagics ( obj , el ) {
Object . entries ( magics ) . forEach ( ( [ name , callback ] ) => {
let memoizedUtilities = null ;
function getUtilities ( ) {
if ( memoizedUtilities ) {
return memoizedUtilities ;
} else {
let [ utilities , cleanup2 ] = getElementBoundUtilities ( el ) ;
memoizedUtilities = { interceptor , ... utilities } ;
onElRemoved ( el , cleanup2 ) ;
return memoizedUtilities ;
}
}
Object . defineProperty ( obj , ` $ ${ name } ` , {
get ( ) {
return callback ( el , getUtilities ( ) ) ;
} ,
enumerable : false
2022-10-29 00:20:35 +02:00
} ) ;
} ) ;
2023-05-19 15:05:29 +02:00
return obj ;
}
function tryCatch ( el , expression , callback , ... args ) {
try {
return callback ( ... args ) ;
} catch ( e ) {
handleError ( e , el , expression ) ;
}
}
function handleError ( error2 , el , expression = void 0 ) {
Object . assign ( error2 , { el , expression } ) ;
console . warn ( ` Alpine Expression Error: ${ error2 . message }
$ { expression ? 'Expression: "' + expression + '"\n\n' : "" } ` , el);
setTimeout ( ( ) => {
throw error2 ;
} , 0 ) ;
}
var shouldAutoEvaluateFunctions = true ;
function dontAutoEvaluateFunctions ( callback ) {
let cache = shouldAutoEvaluateFunctions ;
shouldAutoEvaluateFunctions = false ;
callback ( ) ;
shouldAutoEvaluateFunctions = cache ;
}
function evaluate ( el , expression , extras = { } ) {
let result ;
evaluateLater ( el , expression ) ( ( value ) => result = value , extras ) ;
return result ;
}
function evaluateLater ( ... args ) {
return theEvaluatorFunction ( ... args ) ;
}
var theEvaluatorFunction = normalEvaluator ;
function setEvaluator ( newEvaluator ) {
theEvaluatorFunction = newEvaluator ;
}
function normalEvaluator ( el , expression ) {
let overriddenMagics = { } ;
injectMagics ( overriddenMagics , el ) ;
let dataStack = [ overriddenMagics , ... closestDataStack ( el ) ] ;
let evaluator = typeof expression === "function" ? generateEvaluatorFromFunction ( dataStack , expression ) : generateEvaluatorFromString ( dataStack , expression , el ) ;
return tryCatch . bind ( null , el , expression , evaluator ) ;
}
function generateEvaluatorFromFunction ( dataStack , func ) {
return ( receiver = ( ) => {
} , { scope : scope2 = { } , params = [ ] } = { } ) => {
let result = func . apply ( mergeProxies ( [ scope2 , ... dataStack ] ) , params ) ;
runIfTypeOfFunction ( receiver , result ) ;
} ;
}
var evaluatorMemo = { } ;
function generateFunctionFromString ( expression , el ) {
if ( evaluatorMemo [ expression ] ) {
return evaluatorMemo [ expression ] ;
}
let AsyncFunction = Object . getPrototypeOf ( async function ( ) {
} ) . constructor ;
let rightSideSafeExpression = /^[\n\s]*if.*\(.*\)/ . test ( expression ) || /^(let|const)\s/ . test ( expression ) ? ` (async()=>{ ${ expression } })() ` : expression ;
const safeAsyncFunction = ( ) => {
try {
return new AsyncFunction ( [ "__self" , "scope" ] , ` with (scope) { __self.result = ${ rightSideSafeExpression } }; __self.finished = true; return __self.result; ` ) ;
} catch ( error2 ) {
handleError ( error2 , el , expression ) ;
return Promise . resolve ( ) ;
}
} ;
let func = safeAsyncFunction ( ) ;
evaluatorMemo [ expression ] = func ;
return func ;
}
function generateEvaluatorFromString ( dataStack , expression , el ) {
let func = generateFunctionFromString ( expression , el ) ;
return ( receiver = ( ) => {
} , { scope : scope2 = { } , params = [ ] } = { } ) => {
func . result = void 0 ;
func . finished = false ;
let completeScope = mergeProxies ( [ scope2 , ... dataStack ] ) ;
if ( typeof func === "function" ) {
let promise = func ( func , completeScope ) . catch ( ( error2 ) => handleError ( error2 , el , expression ) ) ;
if ( func . finished ) {
runIfTypeOfFunction ( receiver , func . result , completeScope , params , el ) ;
func . result = void 0 ;
} else {
promise . then ( ( result ) => {
runIfTypeOfFunction ( receiver , result , completeScope , params , el ) ;
} ) . catch ( ( error2 ) => handleError ( error2 , el , expression ) ) . finally ( ( ) => func . result = void 0 ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
}
2022-10-29 00:20:35 +02:00
} ;
}
2023-05-19 15:05:29 +02:00
function runIfTypeOfFunction ( receiver , value , scope2 , params , el ) {
if ( shouldAutoEvaluateFunctions && typeof value === "function" ) {
let result = value . apply ( scope2 , params ) ;
if ( result instanceof Promise ) {
result . then ( ( i ) => runIfTypeOfFunction ( receiver , i , scope2 , params ) ) . catch ( ( error2 ) => handleError ( error2 , el , value ) ) ;
} else {
receiver ( result ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
} else if ( typeof value === "object" && value instanceof Promise ) {
value . then ( ( i ) => receiver ( i ) ) ;
} else {
receiver ( value ) ;
2022-10-29 00:20:35 +02:00
}
}
2023-05-19 15:05:29 +02:00
var prefixAsString = "x-" ;
function prefix ( subject = "" ) {
return prefixAsString + subject ;
2023-01-20 16:43:19 +01:00
}
2023-05-19 15:05:29 +02:00
function setPrefix ( newPrefix ) {
prefixAsString = newPrefix ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
var directiveHandlers = { } ;
function directive ( name , callback ) {
directiveHandlers [ name ] = callback ;
return {
before ( directive2 ) {
if ( ! directiveHandlers [ directive2 ] ) {
console . warn (
"Cannot find directive `${directive}`. `${name}` will use the default order of execution"
) ;
return ;
}
const pos = directiveOrder . indexOf ( directive2 ) ;
directiveOrder . splice ( pos >= 0 ? pos : directiveOrder . indexOf ( "DEFAULT" ) , 0 , name ) ;
}
2022-10-29 00:20:35 +02:00
} ;
}
2023-05-19 15:05:29 +02:00
function directives ( el , attributes , originalAttributeOverride ) {
attributes = Array . from ( attributes ) ;
if ( el . _x _virtualDirectives ) {
let vAttributes = Object . entries ( el . _x _virtualDirectives ) . map ( ( [ name , value ] ) => ( { name , value } ) ) ;
let staticAttributes = attributesOnly ( vAttributes ) ;
vAttributes = vAttributes . map ( ( attribute ) => {
if ( staticAttributes . find ( ( attr ) => attr . name === attribute . name ) ) {
return {
name : ` x-bind: ${ attribute . name } ` ,
value : ` " ${ attribute . value } " `
} ;
}
return attribute ;
} ) ;
attributes = attributes . concat ( vAttributes ) ;
}
let transformedAttributeMap = { } ;
let directives2 = attributes . map ( toTransformedAttributes ( ( newName , oldName ) => transformedAttributeMap [ newName ] = oldName ) ) . filter ( outNonAlpineAttributes ) . map ( toParsedDirectives ( transformedAttributeMap , originalAttributeOverride ) ) . sort ( byPriority ) ;
return directives2 . map ( ( directive2 ) => {
return getDirectiveHandler ( el , directive2 ) ;
2022-10-29 00:20:35 +02:00
} ) ;
}
2023-05-19 15:05:29 +02:00
function attributesOnly ( attributes ) {
return Array . from ( attributes ) . map ( toTransformedAttributes ( ) ) . filter ( ( attr ) => ! outNonAlpineAttributes ( attr ) ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
var isDeferringHandlers = false ;
var directiveHandlerStacks = /* @__PURE__ */ new Map ( ) ;
var currentHandlerStackKey = Symbol ( ) ;
function deferHandlingDirectives ( callback ) {
isDeferringHandlers = true ;
let key = Symbol ( ) ;
currentHandlerStackKey = key ;
directiveHandlerStacks . set ( key , [ ] ) ;
let flushHandlers = ( ) => {
while ( directiveHandlerStacks . get ( key ) . length )
directiveHandlerStacks . get ( key ) . shift ( ) ( ) ;
directiveHandlerStacks . delete ( key ) ;
} ;
let stopDeferring = ( ) => {
isDeferringHandlers = false ;
flushHandlers ( ) ;
} ;
callback ( flushHandlers ) ;
stopDeferring ( ) ;
}
function getElementBoundUtilities ( el ) {
let cleanups = [ ] ;
let cleanup2 = ( callback ) => cleanups . push ( callback ) ;
let [ effect3 , cleanupEffect ] = elementBoundEffect ( el ) ;
cleanups . push ( cleanupEffect ) ;
let utilities = {
Alpine : alpine _default ,
effect : effect3 ,
cleanup : cleanup2 ,
evaluateLater : evaluateLater . bind ( evaluateLater , el ) ,
evaluate : evaluate . bind ( evaluate , el )
} ;
let doCleanup = ( ) => cleanups . forEach ( ( i ) => i ( ) ) ;
return [ utilities , doCleanup ] ;
}
function getDirectiveHandler ( el , directive2 ) {
let noop = ( ) => {
} ;
let handler3 = directiveHandlers [ directive2 . type ] || noop ;
let [ utilities , cleanup2 ] = getElementBoundUtilities ( el ) ;
onAttributeRemoved ( el , directive2 . original , cleanup2 ) ;
let fullHandler = ( ) => {
if ( el . _x _ignore || el . _x _ignoreSelf )
2022-10-29 00:20:35 +02:00
return ;
2023-05-19 15:05:29 +02:00
handler3 . inline && handler3 . inline ( el , directive2 , utilities ) ;
handler3 = handler3 . bind ( handler3 , el , directive2 , utilities ) ;
isDeferringHandlers ? directiveHandlerStacks . get ( currentHandlerStackKey ) . push ( handler3 ) : handler3 ( ) ;
} ;
fullHandler . runCleanups = cleanup2 ;
return fullHandler ;
}
var startingWith = ( subject , replacement ) => ( { name , value } ) => {
if ( name . startsWith ( subject ) )
name = name . replace ( subject , replacement ) ;
return { name , value } ;
} ;
var into = ( i ) => i ;
function toTransformedAttributes ( callback = ( ) => {
} ) {
return ( { name , value } ) => {
let { name : newName , value : newValue } = attributeTransformers . reduce ( ( carry , transform ) => {
return transform ( carry ) ;
} , { name , value } ) ;
if ( newName !== name )
callback ( newName , name ) ;
return { name : newName , value : newValue } ;
} ;
}
var attributeTransformers = [ ] ;
function mapAttributes ( callback ) {
attributeTransformers . push ( callback ) ;
}
function outNonAlpineAttributes ( { name } ) {
return alpineAttributeRegex ( ) . test ( name ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
var alpineAttributeRegex = ( ) => new RegExp ( ` ^ ${ prefixAsString } ([^:^.]+) \\ b ` ) ;
function toParsedDirectives ( transformedAttributeMap , originalAttributeOverride ) {
return ( { name , value } ) => {
let typeMatch = name . match ( alpineAttributeRegex ( ) ) ;
let valueMatch = name . match ( /:([a-zA-Z0-9\-:]+)/ ) ;
let modifiers = name . match ( /\.[^.\]]+(?=[^\]]*$)/g ) || [ ] ;
let original = originalAttributeOverride || transformedAttributeMap [ name ] || name ;
return {
type : typeMatch ? typeMatch [ 1 ] : null ,
value : valueMatch ? valueMatch [ 1 ] : null ,
modifiers : modifiers . map ( ( i ) => i . replace ( "." , "" ) ) ,
expression : value ,
original
} ;
} ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
var DEFAULT = "DEFAULT" ;
var directiveOrder = [
"ignore" ,
"ref" ,
"data" ,
"id" ,
"bind" ,
"init" ,
"for" ,
"model" ,
"modelable" ,
"transition" ,
"show" ,
"if" ,
DEFAULT ,
"teleport"
] ;
function byPriority ( a , b ) {
let typeA = directiveOrder . indexOf ( a . type ) === - 1 ? DEFAULT : a . type ;
let typeB = directiveOrder . indexOf ( b . type ) === - 1 ? DEFAULT : b . type ;
return directiveOrder . indexOf ( typeA ) - directiveOrder . indexOf ( typeB ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function dispatch ( el , name , detail = { } ) {
el . dispatchEvent (
new CustomEvent ( name , {
detail ,
bubbles : true ,
// Allows events to pass the shadow DOM barrier.
composed : true ,
cancelable : true
} )
) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function walk ( el , callback ) {
if ( typeof ShadowRoot === "function" && el instanceof ShadowRoot ) {
Array . from ( el . children ) . forEach ( ( el2 ) => walk ( el2 , callback ) ) ;
return ;
}
let skip = false ;
callback ( el , ( ) => skip = true ) ;
if ( skip )
return ;
let node = el . firstElementChild ;
while ( node ) {
walk ( node , callback , false ) ;
node = node . nextElementSibling ;
2022-10-29 00:20:35 +02:00
}
}
2023-05-19 15:05:29 +02:00
function warn ( message , ... args ) {
console . warn ( ` Alpine Warning: ${ message } ` , ... args ) ;
}
var started = false ;
function start ( ) {
if ( started )
warn ( "Alpine has already been initialized on this page. Calling Alpine.start() more than once can cause problems." ) ;
started = true ;
if ( ! document . body )
warn ( "Unable to initialize. Trying to load Alpine before `<body>` is available. Did you forget to add `defer` in Alpine's `<script>` tag?" ) ;
dispatch ( document , "alpine:init" ) ;
dispatch ( document , "alpine:initializing" ) ;
startObservingMutations ( ) ;
onElAdded ( ( el ) => initTree ( el , walk ) ) ;
onElRemoved ( ( el ) => destroyTree ( el ) ) ;
onAttributesAdded ( ( el , attrs ) => {
directives ( el , attrs ) . forEach ( ( handle ) => handle ( ) ) ;
2022-10-29 00:20:35 +02:00
} ) ;
2023-05-19 15:05:29 +02:00
let outNestedComponents = ( el ) => ! closestRoot ( el . parentElement , true ) ;
Array . from ( document . querySelectorAll ( allSelectors ( ) ) ) . filter ( outNestedComponents ) . forEach ( ( el ) => {
initTree ( el ) ;
2022-10-29 00:20:35 +02:00
} ) ;
2023-05-19 15:05:29 +02:00
dispatch ( document , "alpine:initialized" ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
var rootSelectorCallbacks = [ ] ;
var initSelectorCallbacks = [ ] ;
function rootSelectors ( ) {
return rootSelectorCallbacks . map ( ( fn ) => fn ( ) ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function allSelectors ( ) {
return rootSelectorCallbacks . concat ( initSelectorCallbacks ) . map ( ( fn ) => fn ( ) ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function addRootSelector ( selectorCallback ) {
rootSelectorCallbacks . push ( selectorCallback ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function addInitSelector ( selectorCallback ) {
initSelectorCallbacks . push ( selectorCallback ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function closestRoot ( el , includeInitSelectors = false ) {
return findClosest ( el , ( element ) => {
const selectors = includeInitSelectors ? allSelectors ( ) : rootSelectors ( ) ;
if ( selectors . some ( ( selector ) => element . matches ( selector ) ) )
return true ;
} ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function findClosest ( el , callback ) {
if ( ! el )
return ;
if ( callback ( el ) )
return el ;
if ( el . _x _teleportBack )
el = el . _x _teleportBack ;
if ( ! el . parentElement )
return ;
return findClosest ( el . parentElement , callback ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function isRoot ( el ) {
return rootSelectors ( ) . some ( ( selector ) => el . matches ( selector ) ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
var initInterceptors2 = [ ] ;
function interceptInit ( callback ) {
initInterceptors2 . push ( callback ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function initTree ( el , walker = walk , intercept = ( ) => {
} ) {
deferHandlingDirectives ( ( ) => {
walker ( el , ( el2 , skip ) => {
intercept ( el2 , skip ) ;
initInterceptors2 . forEach ( ( i ) => i ( el2 , skip ) ) ;
directives ( el2 , el2 . attributes ) . forEach ( ( handle ) => handle ( ) ) ;
el2 . _x _ignore && skip ( ) ;
} ) ;
} ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function destroyTree ( root ) {
walk ( root , ( el ) => cleanupAttributes ( el ) ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
var tickStack = [ ] ;
var isHolding = false ;
function nextTick ( callback = ( ) => {
} ) {
queueMicrotask ( ( ) => {
isHolding || setTimeout ( ( ) => {
releaseNextTicks ( ) ;
} ) ;
} ) ;
return new Promise ( ( res ) => {
tickStack . push ( ( ) => {
callback ( ) ;
res ( ) ;
2022-10-29 00:20:35 +02:00
} ) ;
} ) ;
}
2023-05-19 15:05:29 +02:00
function releaseNextTicks ( ) {
isHolding = false ;
while ( tickStack . length )
tickStack . shift ( ) ( ) ;
}
function holdNextTicks ( ) {
isHolding = true ;
}
function setClasses ( el , value ) {
if ( Array . isArray ( value ) ) {
return setClassesFromString ( el , value . join ( " " ) ) ;
} else if ( typeof value === "object" && value !== null ) {
return setClassesFromObject ( el , value ) ;
} else if ( typeof value === "function" ) {
return setClasses ( el , value ( ) ) ;
}
return setClassesFromString ( el , value ) ;
}
function setClassesFromString ( el , classString ) {
let split = ( classString2 ) => classString2 . split ( " " ) . filter ( Boolean ) ;
let missingClasses = ( classString2 ) => classString2 . split ( " " ) . filter ( ( i ) => ! el . classList . contains ( i ) ) . filter ( Boolean ) ;
let addClassesAndReturnUndo = ( classes ) => {
el . classList . add ( ... classes ) ;
return ( ) => {
el . classList . remove ( ... classes ) ;
} ;
} ;
classString = classString === true ? classString = "" : classString || "" ;
return addClassesAndReturnUndo ( missingClasses ( classString ) ) ;
}
function setClassesFromObject ( el , classObject ) {
let split = ( classString ) => classString . split ( " " ) . filter ( Boolean ) ;
let forAdd = Object . entries ( classObject ) . flatMap ( ( [ classString , bool ] ) => bool ? split ( classString ) : false ) . filter ( Boolean ) ;
let forRemove = Object . entries ( classObject ) . flatMap ( ( [ classString , bool ] ) => ! bool ? split ( classString ) : false ) . filter ( Boolean ) ;
let added = [ ] ;
let removed = [ ] ;
forRemove . forEach ( ( i ) => {
if ( el . classList . contains ( i ) ) {
el . classList . remove ( i ) ;
removed . push ( i ) ;
2022-10-29 00:20:35 +02:00
}
} ) ;
2023-05-19 15:05:29 +02:00
forAdd . forEach ( ( i ) => {
if ( ! el . classList . contains ( i ) ) {
el . classList . add ( i ) ;
added . push ( i ) ;
}
2022-10-29 00:20:35 +02:00
} ) ;
2023-05-19 15:05:29 +02:00
return ( ) => {
removed . forEach ( ( i ) => el . classList . add ( i ) ) ;
added . forEach ( ( i ) => el . classList . remove ( i ) ) ;
} ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function setStyles ( el , value ) {
if ( typeof value === "object" && value !== null ) {
return setStylesFromObject ( el , value ) ;
}
return setStylesFromString ( el , value ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function setStylesFromObject ( el , value ) {
let previousStyles = { } ;
Object . entries ( value ) . forEach ( ( [ key , value2 ] ) => {
previousStyles [ key ] = el . style [ key ] ;
if ( ! key . startsWith ( "--" ) ) {
key = kebabCase ( key ) ;
}
el . style . setProperty ( key , value2 ) ;
2022-10-29 00:20:35 +02:00
} ) ;
2023-05-19 15:05:29 +02:00
setTimeout ( ( ) => {
if ( el . style . length === 0 ) {
el . removeAttribute ( "style" ) ;
}
} ) ;
return ( ) => {
setStyles ( el , previousStyles ) ;
} ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function setStylesFromString ( el , value ) {
let cache = el . getAttribute ( "style" , value ) ;
el . setAttribute ( "style" , value ) ;
return ( ) => {
el . setAttribute ( "style" , cache || "" ) ;
} ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function kebabCase ( subject ) {
return subject . replace ( /([a-z])([A-Z])/g , "$1-$2" ) . toLowerCase ( ) ;
}
function once ( callback , fallback = ( ) => {
} ) {
let called = false ;
return function ( ) {
if ( ! called ) {
called = true ;
callback . apply ( this , arguments ) ;
} else {
fallback . apply ( this , arguments ) ;
}
2022-10-29 00:20:35 +02:00
} ;
2023-05-19 15:05:29 +02:00
}
directive ( "transition" , ( el , { value , modifiers , expression } , { evaluate : evaluate2 } ) => {
if ( typeof expression === "function" )
expression = evaluate2 ( expression ) ;
if ( expression === false )
return ;
if ( ! expression || typeof expression === "boolean" ) {
registerTransitionsFromHelper ( el , modifiers , value ) ;
} else {
registerTransitionsFromClassString ( el , expression , value ) ;
}
2022-10-29 00:20:35 +02:00
} ) ;
2023-05-19 15:05:29 +02:00
function registerTransitionsFromClassString ( el , classString , stage ) {
registerTransitionObject ( el , setClasses , "" ) ;
let directiveStorageMap = {
"enter" : ( classes ) => {
el . _x _transition . enter . during = classes ;
} ,
"enter-start" : ( classes ) => {
el . _x _transition . enter . start = classes ;
} ,
"enter-end" : ( classes ) => {
el . _x _transition . enter . end = classes ;
} ,
"leave" : ( classes ) => {
el . _x _transition . leave . during = classes ;
} ,
"leave-start" : ( classes ) => {
el . _x _transition . leave . start = classes ;
} ,
"leave-end" : ( classes ) => {
el . _x _transition . leave . end = classes ;
}
} ;
directiveStorageMap [ stage ] ( classString ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function registerTransitionsFromHelper ( el , modifiers , stage ) {
registerTransitionObject ( el , setStyles ) ;
let doesntSpecify = ! modifiers . includes ( "in" ) && ! modifiers . includes ( "out" ) && ! stage ;
let transitioningIn = doesntSpecify || modifiers . includes ( "in" ) || [ "enter" ] . includes ( stage ) ;
let transitioningOut = doesntSpecify || modifiers . includes ( "out" ) || [ "leave" ] . includes ( stage ) ;
if ( modifiers . includes ( "in" ) && ! doesntSpecify ) {
modifiers = modifiers . filter ( ( i , index ) => index < modifiers . indexOf ( "out" ) ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
if ( modifiers . includes ( "out" ) && ! doesntSpecify ) {
modifiers = modifiers . filter ( ( i , index ) => index > modifiers . indexOf ( "out" ) ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
let wantsAll = ! modifiers . includes ( "opacity" ) && ! modifiers . includes ( "scale" ) ;
let wantsOpacity = wantsAll || modifiers . includes ( "opacity" ) ;
let wantsScale = wantsAll || modifiers . includes ( "scale" ) ;
let opacityValue = wantsOpacity ? 0 : 1 ;
let scaleValue = wantsScale ? modifierValue ( modifiers , "scale" , 95 ) / 100 : 1 ;
let delay = modifierValue ( modifiers , "delay" , 0 ) / 1e3 ;
let origin = modifierValue ( modifiers , "origin" , "center" ) ;
let property = "opacity, transform" ;
let durationIn = modifierValue ( modifiers , "duration" , 150 ) / 1e3 ;
let durationOut = modifierValue ( modifiers , "duration" , 75 ) / 1e3 ;
let easing = ` cubic-bezier(0.4, 0.0, 0.2, 1) ` ;
if ( transitioningIn ) {
el . _x _transition . enter . during = {
transformOrigin : origin ,
transitionDelay : ` ${ delay } s ` ,
transitionProperty : property ,
transitionDuration : ` ${ durationIn } s ` ,
transitionTimingFunction : easing
} ;
el . _x _transition . enter . start = {
opacity : opacityValue ,
transform : ` scale( ${ scaleValue } ) `
} ;
el . _x _transition . enter . end = {
opacity : 1 ,
transform : ` scale(1) `
} ;
}
if ( transitioningOut ) {
el . _x _transition . leave . during = {
transformOrigin : origin ,
transitionDelay : ` ${ delay } s ` ,
transitionProperty : property ,
transitionDuration : ` ${ durationOut } s ` ,
transitionTimingFunction : easing
} ;
el . _x _transition . leave . start = {
opacity : 1 ,
transform : ` scale(1) `
} ;
el . _x _transition . leave . end = {
opacity : opacityValue ,
transform : ` scale( ${ scaleValue } ) `
} ;
2022-10-29 00:20:35 +02:00
}
}
2023-05-19 15:05:29 +02:00
function registerTransitionObject ( el , setFunction , defaultValue = { } ) {
if ( ! el . _x _transition )
el . _x _transition = {
enter : { during : defaultValue , start : defaultValue , end : defaultValue } ,
leave : { during : defaultValue , start : defaultValue , end : defaultValue } ,
in ( before = ( ) => {
} , after = ( ) => {
} ) {
transition ( el , setFunction , {
during : this . enter . during ,
start : this . enter . start ,
end : this . enter . end
} , before , after ) ;
} ,
out ( before = ( ) => {
} , after = ( ) => {
} ) {
transition ( el , setFunction , {
during : this . leave . during ,
start : this . leave . start ,
end : this . leave . end
} , before , after ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
} ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
window . Element . prototype . _x _toggleAndCascadeWithTransitions = function ( el , value , show , hide ) {
const nextTick2 = document . visibilityState === "visible" ? requestAnimationFrame : setTimeout ;
let clickAwayCompatibleShow = ( ) => nextTick2 ( show ) ;
if ( value ) {
if ( el . _x _transition && ( el . _x _transition . enter || el . _x _transition . leave ) ) {
el . _x _transition . enter && ( Object . entries ( el . _x _transition . enter . during ) . length || Object . entries ( el . _x _transition . enter . start ) . length || Object . entries ( el . _x _transition . enter . end ) . length ) ? el . _x _transition . in ( show ) : clickAwayCompatibleShow ( ) ;
} else {
el . _x _transition ? el . _x _transition . in ( show ) : clickAwayCompatibleShow ( ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
return ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
el . _x _hidePromise = el . _x _transition ? new Promise ( ( resolve , reject ) => {
el . _x _transition . out ( ( ) => {
} , ( ) => resolve ( hide ) ) ;
el . _x _transitioning . beforeCancel ( ( ) => reject ( { isFromCancelledTransition : true } ) ) ;
} ) : Promise . resolve ( hide ) ;
queueMicrotask ( ( ) => {
let closest = closestHide ( el ) ;
if ( closest ) {
if ( ! closest . _x _hideChildren )
closest . _x _hideChildren = [ ] ;
closest . _x _hideChildren . push ( el ) ;
} else {
nextTick2 ( ( ) => {
let hideAfterChildren = ( el2 ) => {
let carry = Promise . all ( [
el2 . _x _hidePromise ,
... ( el2 . _x _hideChildren || [ ] ) . map ( hideAfterChildren )
] ) . then ( ( [ i ] ) => i ( ) ) ;
delete el2 . _x _hidePromise ;
delete el2 . _x _hideChildren ;
return carry ;
} ;
hideAfterChildren ( el ) . catch ( ( e ) => {
if ( ! e . isFromCancelledTransition )
throw e ;
} ) ;
} ) ;
}
} ) ;
} ;
function closestHide ( el ) {
let parent = el . parentNode ;
if ( ! parent )
return ;
return parent . _x _hidePromise ? parent : closestHide ( parent ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function transition ( el , setFunction , { during , start : start2 , end } = { } , before = ( ) => {
} , after = ( ) => {
} ) {
if ( el . _x _transitioning )
el . _x _transitioning . cancel ( ) ;
if ( Object . keys ( during ) . length === 0 && Object . keys ( start2 ) . length === 0 && Object . keys ( end ) . length === 0 ) {
before ( ) ;
after ( ) ;
return ;
}
let undoStart , undoDuring , undoEnd ;
performTransition ( el , {
start ( ) {
undoStart = setFunction ( el , start2 ) ;
} ,
during ( ) {
undoDuring = setFunction ( el , during ) ;
} ,
before ,
end ( ) {
undoStart ( ) ;
undoEnd = setFunction ( el , end ) ;
} ,
after ,
cleanup ( ) {
undoDuring ( ) ;
undoEnd ( ) ;
}
} ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function performTransition ( el , stages ) {
let interrupted , reachedBefore , reachedEnd ;
let finish = once ( ( ) => {
mutateDom ( ( ) => {
interrupted = true ;
if ( ! reachedBefore )
stages . before ( ) ;
if ( ! reachedEnd ) {
stages . end ( ) ;
releaseNextTicks ( ) ;
}
stages . after ( ) ;
if ( el . isConnected )
stages . cleanup ( ) ;
delete el . _x _transitioning ;
} ) ;
} ) ;
el . _x _transitioning = {
beforeCancels : [ ] ,
beforeCancel ( callback ) {
this . beforeCancels . push ( callback ) ;
} ,
cancel : once ( function ( ) {
while ( this . beforeCancels . length ) {
this . beforeCancels . shift ( ) ( ) ;
}
;
finish ( ) ;
} ) ,
finish
} ;
mutateDom ( ( ) => {
stages . start ( ) ;
stages . during ( ) ;
} ) ;
holdNextTicks ( ) ;
requestAnimationFrame ( ( ) => {
if ( interrupted )
return ;
let duration = Number ( getComputedStyle ( el ) . transitionDuration . replace ( /,.*/ , "" ) . replace ( "s" , "" ) ) * 1e3 ;
let delay = Number ( getComputedStyle ( el ) . transitionDelay . replace ( /,.*/ , "" ) . replace ( "s" , "" ) ) * 1e3 ;
if ( duration === 0 )
duration = Number ( getComputedStyle ( el ) . animationDuration . replace ( "s" , "" ) ) * 1e3 ;
mutateDom ( ( ) => {
stages . before ( ) ;
} ) ;
reachedBefore = true ;
requestAnimationFrame ( ( ) => {
if ( interrupted )
return ;
mutateDom ( ( ) => {
stages . end ( ) ;
} ) ;
releaseNextTicks ( ) ;
setTimeout ( el . _x _transitioning . finish , duration + delay ) ;
reachedEnd = true ;
} ) ;
} ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function modifierValue ( modifiers , key , fallback ) {
if ( modifiers . indexOf ( key ) === - 1 )
return fallback ;
const rawValue = modifiers [ modifiers . indexOf ( key ) + 1 ] ;
if ( ! rawValue )
return fallback ;
if ( key === "scale" ) {
if ( isNaN ( rawValue ) )
return fallback ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
if ( key === "duration" || key === "delay" ) {
let match = rawValue . match ( /([0-9]+)ms/ ) ;
if ( match )
return match [ 1 ] ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
if ( key === "origin" ) {
if ( [ "top" , "right" , "left" , "center" , "bottom" ] . includes ( modifiers [ modifiers . indexOf ( key ) + 2 ] ) ) {
return [ rawValue , modifiers [ modifiers . indexOf ( key ) + 2 ] ] . join ( " " ) ;
2022-10-29 00:20:35 +02:00
}
}
2023-05-19 15:05:29 +02:00
return rawValue ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
var isCloning = false ;
function skipDuringClone ( callback , fallback = ( ) => {
} ) {
return ( ... args ) => isCloning ? fallback ( ... args ) : callback ( ... args ) ;
}
function onlyDuringClone ( callback ) {
return ( ... args ) => isCloning && callback ( ... args ) ;
}
function clone ( oldEl , newEl ) {
if ( ! newEl . _x _dataStack )
newEl . _x _dataStack = oldEl . _x _dataStack ;
isCloning = true ;
dontRegisterReactiveSideEffects ( ( ) => {
cloneTree ( newEl ) ;
} ) ;
isCloning = false ;
}
function cloneTree ( el ) {
let hasRunThroughFirstEl = false ;
let shallowWalker = ( el2 , callback ) => {
walk ( el2 , ( el3 , skip ) => {
if ( hasRunThroughFirstEl && isRoot ( el3 ) )
return skip ( ) ;
hasRunThroughFirstEl = true ;
callback ( el3 , skip ) ;
2022-10-29 00:20:35 +02:00
} ) ;
} ;
2023-05-19 15:05:29 +02:00
initTree ( el , shallowWalker ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function dontRegisterReactiveSideEffects ( callback ) {
let cache = effect2 ;
overrideEffect ( ( callback2 , el ) => {
let storedEffect = cache ( callback2 ) ;
release ( storedEffect ) ;
return ( ) => {
} ;
} ) ;
callback ( ) ;
overrideEffect ( cache ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function bind ( el , name , value , modifiers = [ ] ) {
if ( ! el . _x _bindings )
el . _x _bindings = reactive2 ( { } ) ;
el . _x _bindings [ name ] = value ;
name = modifiers . includes ( "camel" ) ? camelCase ( name ) : name ;
switch ( name ) {
case "value" :
bindInputValue ( el , value ) ;
break ;
case "style" :
bindStyles ( el , value ) ;
break ;
case "class" :
bindClasses ( el , value ) ;
break ;
case "selected" :
case "checked" :
bindAttributeAndProperty ( el , name , value ) ;
break ;
default :
bindAttribute ( el , name , value ) ;
break ;
}
}
function bindInputValue ( el , value ) {
if ( el . type === "radio" ) {
if ( el . attributes . value === void 0 ) {
el . value = value ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
if ( window . fromModel ) {
el . checked = checkedAttrLooseCompare ( el . value , value ) ;
}
} else if ( el . type === "checkbox" ) {
if ( Number . isInteger ( value ) ) {
el . value = value ;
} else if ( ! Number . isInteger ( value ) && ! Array . isArray ( value ) && typeof value !== "boolean" && ! [ null , void 0 ] . includes ( value ) ) {
el . value = String ( value ) ;
} else {
if ( Array . isArray ( value ) ) {
el . checked = value . some ( ( val ) => checkedAttrLooseCompare ( val , el . value ) ) ;
} else {
el . checked = ! ! value ;
2022-10-29 00:20:35 +02:00
}
}
2023-05-19 15:05:29 +02:00
} else if ( el . tagName === "SELECT" ) {
updateSelect ( el , value ) ;
} else {
if ( el . value === value )
return ;
el . value = value ;
2022-10-29 00:20:35 +02:00
}
}
2023-05-19 15:05:29 +02:00
function bindClasses ( el , value ) {
if ( el . _x _undoAddedClasses )
el . _x _undoAddedClasses ( ) ;
el . _x _undoAddedClasses = setClasses ( el , value ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function bindStyles ( el , value ) {
if ( el . _x _undoAddedStyles )
el . _x _undoAddedStyles ( ) ;
el . _x _undoAddedStyles = setStyles ( el , value ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function bindAttributeAndProperty ( el , name , value ) {
bindAttribute ( el , name , value ) ;
setPropertyIfChanged ( el , name , value ) ;
}
function bindAttribute ( el , name , value ) {
if ( [ null , void 0 , false ] . includes ( value ) && attributeShouldntBePreservedIfFalsy ( name ) ) {
el . removeAttribute ( name ) ;
} else {
if ( isBooleanAttr2 ( name ) )
value = name ;
setIfChanged ( el , name , value ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
}
function setIfChanged ( el , attrName , value ) {
if ( el . getAttribute ( attrName ) != value ) {
el . setAttribute ( attrName , value ) ;
2022-10-29 00:20:35 +02:00
}
}
2023-05-19 15:05:29 +02:00
function setPropertyIfChanged ( el , propName , value ) {
if ( el [ propName ] !== value ) {
el [ propName ] = value ;
2022-10-29 00:20:35 +02:00
}
}
2023-05-19 15:05:29 +02:00
function updateSelect ( el , value ) {
const arrayWrappedValue = [ ] . concat ( value ) . map ( ( value2 ) => {
return value2 + "" ;
} ) ;
Array . from ( el . options ) . forEach ( ( option ) => {
option . selected = arrayWrappedValue . includes ( option . value ) ;
} ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function camelCase ( subject ) {
return subject . toLowerCase ( ) . replace ( /-(\w)/g , ( match , char ) => char . toUpperCase ( ) ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function checkedAttrLooseCompare ( valueA , valueB ) {
return valueA == valueB ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function isBooleanAttr2 ( attrName ) {
const booleanAttributes = [
"disabled" ,
"checked" ,
"required" ,
"readonly" ,
"hidden" ,
"open" ,
"selected" ,
"autofocus" ,
"itemscope" ,
"multiple" ,
"novalidate" ,
"allowfullscreen" ,
"allowpaymentrequest" ,
"formnovalidate" ,
"autoplay" ,
"controls" ,
"loop" ,
"muted" ,
"playsinline" ,
"default" ,
"ismap" ,
"reversed" ,
"async" ,
"defer" ,
"nomodule"
] ;
return booleanAttributes . includes ( attrName ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function attributeShouldntBePreservedIfFalsy ( name ) {
return ! [ "aria-pressed" , "aria-checked" , "aria-expanded" , "aria-selected" ] . includes ( name ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function getBinding ( el , name , fallback ) {
if ( el . _x _bindings && el . _x _bindings [ name ] !== void 0 )
return el . _x _bindings [ name ] ;
let attr = el . getAttribute ( name ) ;
if ( attr === null )
return typeof fallback === "function" ? fallback ( ) : fallback ;
if ( attr === "" )
return true ;
if ( isBooleanAttr2 ( name ) ) {
return ! ! [ name , "true" ] . includes ( attr ) ;
}
return attr ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function debounce ( func , wait ) {
var timeout ;
return function ( ) {
var context = this , args = arguments ;
var later = function ( ) {
timeout = null ;
func . apply ( context , args ) ;
2022-10-29 00:20:35 +02:00
} ;
2023-05-19 15:05:29 +02:00
clearTimeout ( timeout ) ;
timeout = setTimeout ( later , wait ) ;
2022-10-29 00:20:35 +02:00
} ;
}
2023-05-19 15:05:29 +02:00
function throttle ( func , limit ) {
let inThrottle ;
return function ( ) {
let context = this , args = arguments ;
if ( ! inThrottle ) {
func . apply ( context , args ) ;
inThrottle = true ;
setTimeout ( ( ) => inThrottle = false , limit ) ;
2022-10-29 00:20:35 +02:00
}
} ;
}
2023-05-19 15:05:29 +02:00
function plugin ( callback ) {
let callbacks = Array . isArray ( callback ) ? callback : [ callback ] ;
callbacks . forEach ( ( i ) => i ( alpine _default ) ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
var stores = { } ;
var isReactive = false ;
function store ( name , value ) {
if ( ! isReactive ) {
stores = reactive2 ( stores ) ;
isReactive = true ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
if ( value === void 0 ) {
return stores [ name ] ;
}
stores [ name ] = value ;
if ( typeof value === "object" && value !== null && value . hasOwnProperty ( "init" ) && typeof value . init === "function" ) {
stores [ name ] . init ( ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
initInterceptors ( stores [ name ] ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function getStores ( ) {
return stores ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
var binds = { } ;
function bind2 ( name , bindings ) {
let getBindings = typeof bindings !== "function" ? ( ) => bindings : bindings ;
if ( name instanceof Element ) {
applyBindingsObject ( name , getBindings ( ) ) ;
} else {
binds [ name ] = getBindings ;
2022-10-29 00:20:35 +02:00
}
}
2023-05-19 15:05:29 +02:00
function injectBindingProviders ( obj ) {
Object . entries ( binds ) . forEach ( ( [ name , callback ] ) => {
Object . defineProperty ( obj , name , {
get ( ) {
return ( ... args ) => {
return callback ( ... args ) ;
} ;
}
} ) ;
} ) ;
return obj ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function applyBindingsObject ( el , obj , original ) {
let cleanupRunners = [ ] ;
while ( cleanupRunners . length )
cleanupRunners . pop ( ) ( ) ;
let attributes = Object . entries ( obj ) . map ( ( [ name , value ] ) => ( { name , value } ) ) ;
let staticAttributes = attributesOnly ( attributes ) ;
attributes = attributes . map ( ( attribute ) => {
if ( staticAttributes . find ( ( attr ) => attr . name === attribute . name ) ) {
return {
name : ` x-bind: ${ attribute . name } ` ,
value : ` " ${ attribute . value } " `
} ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
return attribute ;
} ) ;
directives ( el , attributes , original ) . map ( ( handle ) => {
cleanupRunners . push ( handle . runCleanups ) ;
handle ( ) ;
} ) ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
var datas = { } ;
function data ( name , callback ) {
datas [ name ] = callback ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
function injectDataProviders ( obj , context ) {
Object . entries ( datas ) . forEach ( ( [ name , callback ] ) => {
Object . defineProperty ( obj , name , {
get ( ) {
return ( ... args ) => {
return callback . bind ( context ) ( ... args ) ;
} ;
} ,
enumerable : false
} ) ;
} ) ;
return obj ;
2022-10-29 00:20:35 +02:00
}
2023-05-19 15:05:29 +02:00
var Alpine = {
get reactive ( ) {
return reactive2 ;
} ,
get release ( ) {
return release ;
} ,
get effect ( ) {
return effect2 ;
} ,
get raw ( ) {
return raw ;
} ,
version : "3.12.1" ,
flushAndStopDeferringMutations ,
dontAutoEvaluateFunctions ,
disableEffectScheduling ,
startObservingMutations ,
stopObservingMutations ,
setReactivityEngine ,
closestDataStack ,
skipDuringClone ,
onlyDuringClone ,
addRootSelector ,
addInitSelector ,
addScopeToNode ,
deferMutations ,
mapAttributes ,
evaluateLater ,
interceptInit ,
setEvaluator ,
mergeProxies ,
findClosest ,
closestRoot ,
destroyTree ,
interceptor ,
// INTERNAL: not public API and is subject to change without major release.
transition ,
// INTERNAL
setStyles ,
// INTERNAL
mutateDom ,
directive ,
throttle ,
debounce ,
evaluate ,
initTree ,
nextTick ,
prefixed : prefix ,
prefix : setPrefix ,
plugin ,
magic ,
store ,
start ,
clone ,
bound : getBinding ,
$data : scope ,
walk ,
data ,
bind : bind2
} ;
var alpine _default = Alpine ;
2022-10-29 00:20:35 +02:00
magic ( "nextTick" , ( ) => nextTick ) ;
magic ( "dispatch" , ( el ) => dispatch . bind ( dispatch , el ) ) ;
magic ( "watch" , ( el , { evaluateLater : evaluateLater2 , effect : effect3 } ) => ( key , callback ) => {
let evaluate2 = evaluateLater2 ( key ) ;
let firstTime = true ;
let oldValue ;
let effectReference = effect3 ( ( ) => evaluate2 ( ( value ) => {
JSON . stringify ( value ) ;
if ( ! firstTime ) {
queueMicrotask ( ( ) => {
callback ( value , oldValue ) ;
oldValue = value ;
} ) ;
} else {
oldValue = value ;
}
firstTime = false ;
} ) ) ;
el . _x _effects . delete ( effectReference ) ;
} ) ;
magic ( "store" , getStores ) ;
magic ( "data" , ( el ) => scope ( el ) ) ;
magic ( "root" , ( el ) => closestRoot ( el ) ) ;
magic ( "refs" , ( el ) => {
if ( el . _x _refs _proxy )
return el . _x _refs _proxy ;
el . _x _refs _proxy = mergeProxies ( getArrayOfRefObject ( el ) ) ;
return el . _x _refs _proxy ;
} ) ;
function getArrayOfRefObject ( el ) {
let refObjects = [ ] ;
let currentEl = el ;
while ( currentEl ) {
if ( currentEl . _x _refs )
refObjects . push ( currentEl . _x _refs ) ;
currentEl = currentEl . parentNode ;
}
return refObjects ;
}
var globalIdMemo = { } ;
function findAndIncrementId ( name ) {
if ( ! globalIdMemo [ name ] )
globalIdMemo [ name ] = 0 ;
return ++ globalIdMemo [ name ] ;
}
function closestIdRoot ( el , name ) {
return findClosest ( el , ( element ) => {
if ( element . _x _ids && element . _x _ids [ name ] )
return true ;
} ) ;
}
function setIdRoot ( el , name ) {
if ( ! el . _x _ids )
el . _x _ids = { } ;
if ( ! el . _x _ids [ name ] )
el . _x _ids [ name ] = findAndIncrementId ( name ) ;
}
magic ( "id" , ( el ) => ( name , key = null ) => {
let root = closestIdRoot ( el , name ) ;
let id = root ? root . _x _ids [ name ] : findAndIncrementId ( name ) ;
return key ? ` ${ name } - ${ id } - ${ key } ` : ` ${ name } - ${ id } ` ;
} ) ;
magic ( "el" , ( el ) => el ) ;
warnMissingPluginMagic ( "Focus" , "focus" , "focus" ) ;
warnMissingPluginMagic ( "Persist" , "persist" , "persist" ) ;
function warnMissingPluginMagic ( name , magicName , slug ) {
magic ( magicName , ( el ) => warn ( ` You can't use [ $ ${ directiveName } ] without first installing the " ${ name } " plugin here: https://alpinejs.dev/plugins/ ${ slug } ` , el ) ) ;
}
2023-01-20 16:43:19 +01:00
function entangle ( { get : outerGet , set : outerSet } , { get : innerGet , set : innerSet } ) {
let firstRun = true ;
let outerHash , innerHash , outerHashLatest , innerHashLatest ;
2023-05-19 15:05:29 +02:00
let reference = effect2 ( ( ) => {
2023-01-20 16:43:19 +01:00
let outer , inner ;
if ( firstRun ) {
outer = outerGet ( ) ;
innerSet ( outer ) ;
inner = innerGet ( ) ;
firstRun = false ;
} else {
outer = outerGet ( ) ;
inner = innerGet ( ) ;
outerHashLatest = JSON . stringify ( outer ) ;
innerHashLatest = JSON . stringify ( inner ) ;
if ( outerHashLatest !== outerHash ) {
inner = innerGet ( ) ;
innerSet ( outer ) ;
inner = outer ;
} else {
outerSet ( inner ) ;
outer = inner ;
}
}
outerHash = JSON . stringify ( outer ) ;
innerHash = JSON . stringify ( inner ) ;
} ) ;
return ( ) => {
release ( reference ) ;
} ;
}
directive ( "modelable" , ( el , { expression } , { effect : effect3 , evaluateLater : evaluateLater2 , cleanup : cleanup2 } ) => {
2022-10-29 00:20:35 +02:00
let func = evaluateLater2 ( expression ) ;
let innerGet = ( ) => {
let result ;
func ( ( i ) => result = i ) ;
return result ;
} ;
let evaluateInnerSet = evaluateLater2 ( ` ${ expression } = __placeholder ` ) ;
let innerSet = ( val ) => evaluateInnerSet ( ( ) => {
2023-03-23 16:28:28 +01:00
} , { scope : { "__placeholder" : val } } ) ;
2022-10-29 00:20:35 +02:00
let initialValue = innerGet ( ) ;
innerSet ( initialValue ) ;
queueMicrotask ( ( ) => {
if ( ! el . _x _model )
return ;
el . _x _removeModelListeners [ "default" ] ( ) ;
let outerGet = el . _x _model . get ;
let outerSet = el . _x _model . set ;
2023-03-23 16:28:28 +01:00
let releaseEntanglement = entangle (
{
get ( ) {
return outerGet ( ) ;
} ,
set ( value ) {
outerSet ( value ) ;
}
2023-01-20 16:43:19 +01:00
} ,
2023-03-23 16:28:28 +01:00
{
get ( ) {
return innerGet ( ) ;
} ,
set ( value ) {
innerSet ( value ) ;
}
2023-01-20 16:43:19 +01:00
}
2023-03-23 16:28:28 +01:00
) ;
2023-01-20 16:43:19 +01:00
cleanup2 ( releaseEntanglement ) ;
2022-10-29 00:20:35 +02:00
} ) ;
} ) ;
2023-01-20 16:43:19 +01:00
var teleportContainerDuringClone = document . createElement ( "div" ) ;
directive ( "teleport" , ( el , { modifiers , expression } , { cleanup : cleanup2 } ) => {
2022-10-29 00:20:35 +02:00
if ( el . tagName . toLowerCase ( ) !== "template" )
warn ( "x-teleport can only be used on a <template> tag" , el ) ;
2023-01-20 16:43:19 +01:00
let target = skipDuringClone ( ( ) => {
return document . querySelector ( expression ) ;
} , ( ) => {
return teleportContainerDuringClone ;
} ) ( ) ;
2022-10-29 00:20:35 +02:00
if ( ! target )
warn ( ` Cannot find x-teleport element for selector: " ${ expression } " ` ) ;
let clone2 = el . content . cloneNode ( true ) . firstElementChild ;
el . _x _teleport = clone2 ;
clone2 . _x _teleportBack = el ;
if ( el . _x _forwardEvents ) {
el . _x _forwardEvents . forEach ( ( eventName ) => {
clone2 . addEventListener ( eventName , ( e ) => {
e . stopPropagation ( ) ;
el . dispatchEvent ( new e . constructor ( e . type , e ) ) ;
} ) ;
} ) ;
}
addScopeToNode ( clone2 , { } , el ) ;
mutateDom ( ( ) => {
2023-01-20 16:43:19 +01:00
if ( modifiers . includes ( "prepend" ) ) {
target . parentNode . insertBefore ( clone2 , target ) ;
} else if ( modifiers . includes ( "append" ) ) {
target . parentNode . insertBefore ( clone2 , target . nextSibling ) ;
} else {
target . appendChild ( clone2 ) ;
}
2022-10-29 00:20:35 +02:00
initTree ( clone2 ) ;
clone2 . _x _ignore = true ;
} ) ;
cleanup2 ( ( ) => clone2 . remove ( ) ) ;
} ) ;
var handler = ( ) => {
} ;
handler . inline = ( el , { modifiers } , { cleanup : cleanup2 } ) => {
modifiers . includes ( "self" ) ? el . _x _ignoreSelf = true : el . _x _ignore = true ;
cleanup2 ( ( ) => {
modifiers . includes ( "self" ) ? delete el . _x _ignoreSelf : delete el . _x _ignore ;
} ) ;
} ;
directive ( "ignore" , handler ) ;
directive ( "effect" , ( el , { expression } , { effect : effect3 } ) => effect3 ( evaluateLater ( el , expression ) ) ) ;
function on ( el , event , modifiers , callback ) {
let listenerTarget = el ;
let handler3 = ( e ) => callback ( e ) ;
let options = { } ;
let wrapHandler = ( callback2 , wrapper ) => ( e ) => wrapper ( callback2 , e ) ;
if ( modifiers . includes ( "dot" ) )
event = dotSyntax ( event ) ;
if ( modifiers . includes ( "camel" ) )
event = camelCase2 ( event ) ;
if ( modifiers . includes ( "passive" ) )
options . passive = true ;
if ( modifiers . includes ( "capture" ) )
options . capture = true ;
if ( modifiers . includes ( "window" ) )
listenerTarget = window ;
if ( modifiers . includes ( "document" ) )
listenerTarget = document ;
2023-05-19 15:05:29 +02:00
if ( modifiers . includes ( "debounce" ) ) {
let nextModifier = modifiers [ modifiers . indexOf ( "debounce" ) + 1 ] || "invalid-wait" ;
let wait = isNumeric ( nextModifier . split ( "ms" ) [ 0 ] ) ? Number ( nextModifier . split ( "ms" ) [ 0 ] ) : 250 ;
handler3 = debounce ( handler3 , wait ) ;
}
if ( modifiers . includes ( "throttle" ) ) {
let nextModifier = modifiers [ modifiers . indexOf ( "throttle" ) + 1 ] || "invalid-wait" ;
let wait = isNumeric ( nextModifier . split ( "ms" ) [ 0 ] ) ? Number ( nextModifier . split ( "ms" ) [ 0 ] ) : 250 ;
handler3 = throttle ( handler3 , wait ) ;
}
2022-10-29 00:20:35 +02:00
if ( modifiers . includes ( "prevent" ) )
handler3 = wrapHandler ( handler3 , ( next , e ) => {
e . preventDefault ( ) ;
next ( e ) ;
} ) ;
if ( modifiers . includes ( "stop" ) )
handler3 = wrapHandler ( handler3 , ( next , e ) => {
e . stopPropagation ( ) ;
next ( e ) ;
} ) ;
if ( modifiers . includes ( "self" ) )
handler3 = wrapHandler ( handler3 , ( next , e ) => {
e . target === el && next ( e ) ;
} ) ;
if ( modifiers . includes ( "away" ) || modifiers . includes ( "outside" ) ) {
listenerTarget = document ;
handler3 = wrapHandler ( handler3 , ( next , e ) => {
if ( el . contains ( e . target ) )
return ;
if ( e . target . isConnected === false )
return ;
if ( el . offsetWidth < 1 && el . offsetHeight < 1 )
return ;
if ( el . _x _isShown === false )
return ;
next ( e ) ;
} ) ;
}
if ( modifiers . includes ( "once" ) ) {
handler3 = wrapHandler ( handler3 , ( next , e ) => {
next ( e ) ;
listenerTarget . removeEventListener ( event , handler3 , options ) ;
} ) ;
}
handler3 = wrapHandler ( handler3 , ( next , e ) => {
if ( isKeyEvent ( event ) ) {
if ( isListeningForASpecificKeyThatHasntBeenPressed ( e , modifiers ) ) {
return ;
}
}
next ( e ) ;
} ) ;
listenerTarget . addEventListener ( event , handler3 , options ) ;
return ( ) => {
listenerTarget . removeEventListener ( event , handler3 , options ) ;
} ;
}
function dotSyntax ( subject ) {
return subject . replace ( /-/g , "." ) ;
}
function camelCase2 ( subject ) {
return subject . toLowerCase ( ) . replace ( /-(\w)/g , ( match , char ) => char . toUpperCase ( ) ) ;
}
function isNumeric ( subject ) {
return ! Array . isArray ( subject ) && ! isNaN ( subject ) ;
}
function kebabCase2 ( subject ) {
2023-03-23 16:28:28 +01:00
if ( [ " " , "_" ] . includes (
subject
) )
2023-01-20 16:43:19 +01:00
return subject ;
2022-10-29 00:20:35 +02:00
return subject . replace ( /([a-z])([A-Z])/g , "$1-$2" ) . replace ( /[_\s]/ , "-" ) . toLowerCase ( ) ;
}
function isKeyEvent ( event ) {
return [ "keydown" , "keyup" ] . includes ( event ) ;
}
function isListeningForASpecificKeyThatHasntBeenPressed ( e , modifiers ) {
let keyModifiers = modifiers . filter ( ( i ) => {
2023-03-23 16:28:28 +01:00
return ! [ "window" , "document" , "prevent" , "stop" , "once" , "capture" ] . includes ( i ) ;
2022-10-29 00:20:35 +02:00
} ) ;
if ( keyModifiers . includes ( "debounce" ) ) {
let debounceIndex = keyModifiers . indexOf ( "debounce" ) ;
keyModifiers . splice ( debounceIndex , isNumeric ( ( keyModifiers [ debounceIndex + 1 ] || "invalid-wait" ) . split ( "ms" ) [ 0 ] ) ? 2 : 1 ) ;
}
2023-01-20 16:43:19 +01:00
if ( keyModifiers . includes ( "throttle" ) ) {
let debounceIndex = keyModifiers . indexOf ( "throttle" ) ;
keyModifiers . splice ( debounceIndex , isNumeric ( ( keyModifiers [ debounceIndex + 1 ] || "invalid-wait" ) . split ( "ms" ) [ 0 ] ) ? 2 : 1 ) ;
}
2022-10-29 00:20:35 +02:00
if ( keyModifiers . length === 0 )
return false ;
if ( keyModifiers . length === 1 && keyToModifiers ( e . key ) . includes ( keyModifiers [ 0 ] ) )
return false ;
const systemKeyModifiers = [ "ctrl" , "shift" , "alt" , "meta" , "cmd" , "super" ] ;
const selectedSystemKeyModifiers = systemKeyModifiers . filter ( ( modifier ) => keyModifiers . includes ( modifier ) ) ;
keyModifiers = keyModifiers . filter ( ( i ) => ! selectedSystemKeyModifiers . includes ( i ) ) ;
if ( selectedSystemKeyModifiers . length > 0 ) {
const activelyPressedKeyModifiers = selectedSystemKeyModifiers . filter ( ( modifier ) => {
if ( modifier === "cmd" || modifier === "super" )
modifier = "meta" ;
return e [ ` ${ modifier } Key ` ] ;
} ) ;
if ( activelyPressedKeyModifiers . length === selectedSystemKeyModifiers . length ) {
if ( keyToModifiers ( e . key ) . includes ( keyModifiers [ 0 ] ) )
return false ;
}
}
return true ;
}
function keyToModifiers ( key ) {
if ( ! key )
return [ ] ;
key = kebabCase2 ( key ) ;
let modifierToKeyMap = {
2023-03-23 16:28:28 +01:00
"ctrl" : "control" ,
"slash" : "/" ,
"space" : " " ,
"spacebar" : " " ,
"cmd" : "meta" ,
"esc" : "escape" ,
"up" : "arrow-up" ,
"down" : "arrow-down" ,
"left" : "arrow-left" ,
"right" : "arrow-right" ,
"period" : "." ,
"equal" : "=" ,
"minus" : "-" ,
"underscore" : "_"
2022-10-29 00:20:35 +02:00
} ;
modifierToKeyMap [ key ] = key ;
return Object . keys ( modifierToKeyMap ) . map ( ( modifier ) => {
if ( modifierToKeyMap [ modifier ] === key )
return modifier ;
} ) . filter ( ( modifier ) => modifier ) ;
}
directive ( "model" , ( el , { modifiers , expression } , { effect : effect3 , cleanup : cleanup2 } ) => {
2023-01-20 16:43:19 +01:00
let scopeTarget = el ;
if ( modifiers . includes ( "parent" ) ) {
scopeTarget = el . parentNode ;
}
let evaluateGet = evaluateLater ( scopeTarget , expression ) ;
let evaluateSet ;
if ( typeof expression === "string" ) {
evaluateSet = evaluateLater ( scopeTarget , ` ${ expression } = __placeholder ` ) ;
} else if ( typeof expression === "function" && typeof expression ( ) === "string" ) {
evaluateSet = evaluateLater ( scopeTarget , ` ${ expression ( ) } = __placeholder ` ) ;
} else {
evaluateSet = ( ) => {
} ;
}
let getValue = ( ) => {
let result ;
evaluateGet ( ( value ) => result = value ) ;
return isGetterSetter ( result ) ? result . get ( ) : result ;
} ;
let setValue = ( value ) => {
let result ;
evaluateGet ( ( value2 ) => result = value2 ) ;
if ( isGetterSetter ( result ) ) {
result . set ( value ) ;
} else {
evaluateSet ( ( ) => {
} , {
2023-03-23 16:28:28 +01:00
scope : { "__placeholder" : value }
2023-01-20 16:43:19 +01:00
} ) ;
}
} ;
if ( typeof expression === "string" && el . type === "radio" ) {
mutateDom ( ( ) => {
if ( ! el . hasAttribute ( "name" ) )
el . setAttribute ( "name" , expression ) ;
} ) ;
}
2022-10-29 00:20:35 +02:00
var event = el . tagName . toLowerCase ( ) === "select" || [ "checkbox" , "radio" ] . includes ( el . type ) || modifiers . includes ( "lazy" ) ? "change" : "input" ;
2023-03-23 16:28:28 +01:00
let removeListener = isCloning ? ( ) => {
} : on ( el , event , modifiers , ( e ) => {
2023-01-20 16:43:19 +01:00
setValue ( getInputValue ( el , modifiers , e , getValue ( ) ) ) ;
2022-10-29 00:20:35 +02:00
} ) ;
2023-05-19 15:05:29 +02:00
if ( modifiers . includes ( "fill" ) && [ null , "" ] . includes ( getValue ( ) ) ) {
el . dispatchEvent ( new Event ( event , { } ) ) ;
}
2022-10-29 00:20:35 +02:00
if ( ! el . _x _removeModelListeners )
el . _x _removeModelListeners = { } ;
el . _x _removeModelListeners [ "default" ] = removeListener ;
cleanup2 ( ( ) => el . _x _removeModelListeners [ "default" ] ( ) ) ;
2023-01-20 16:43:19 +01:00
if ( el . form ) {
let removeResetListener = on ( el . form , "reset" , [ ] , ( e ) => {
nextTick ( ( ) => el . _x _model && el . _x _model . set ( el . value ) ) ;
} ) ;
cleanup2 ( ( ) => removeResetListener ( ) ) ;
}
2022-10-29 00:20:35 +02:00
el . _x _model = {
get ( ) {
2023-01-20 16:43:19 +01:00
return getValue ( ) ;
2022-10-29 00:20:35 +02:00
} ,
set ( value ) {
2023-01-20 16:43:19 +01:00
setValue ( value ) ;
2022-10-29 00:20:35 +02:00
}
} ;
2023-01-20 16:43:19 +01:00
el . _x _forceModelUpdate = ( value ) => {
value = value === void 0 ? getValue ( ) : value ;
if ( value === void 0 && typeof expression === "string" && expression . match ( /\./ ) )
value = "" ;
window . fromModel = true ;
mutateDom ( ( ) => bind ( el , "value" , value ) ) ;
delete window . fromModel ;
2022-10-29 00:20:35 +02:00
} ;
effect3 ( ( ) => {
2023-01-20 16:43:19 +01:00
let value = getValue ( ) ;
2022-10-29 00:20:35 +02:00
if ( modifiers . includes ( "unintrusive" ) && document . activeElement . isSameNode ( el ) )
return ;
2023-01-20 16:43:19 +01:00
el . _x _forceModelUpdate ( value ) ;
2022-10-29 00:20:35 +02:00
} ) ;
} ) ;
2023-01-20 16:43:19 +01:00
function getInputValue ( el , modifiers , event , currentValue ) {
return mutateDom ( ( ) => {
2023-05-19 15:05:29 +02:00
if ( event instanceof CustomEvent && event . detail !== void 0 )
return event . detail ? ? event . target . value ;
else if ( el . type === "checkbox" ) {
2023-01-20 16:43:19 +01:00
if ( Array . isArray ( currentValue ) ) {
let newValue = modifiers . includes ( "number" ) ? safeParseNumber ( event . target . value ) : event . target . value ;
return event . target . checked ? currentValue . concat ( [ newValue ] ) : currentValue . filter ( ( el2 ) => ! checkedAttrLooseCompare2 ( el2 , newValue ) ) ;
2022-10-29 00:20:35 +02:00
} else {
2023-01-20 16:43:19 +01:00
return event . target . checked ;
2022-10-29 00:20:35 +02:00
}
2023-01-20 16:43:19 +01:00
} else if ( el . tagName . toLowerCase ( ) === "select" && el . multiple ) {
return modifiers . includes ( "number" ) ? Array . from ( event . target . selectedOptions ) . map ( ( option ) => {
let rawValue = option . value || option . text ;
return safeParseNumber ( rawValue ) ;
} ) : Array . from ( event . target . selectedOptions ) . map ( ( option ) => {
return option . value || option . text ;
} ) ;
} else {
let rawValue = event . target . value ;
return modifiers . includes ( "number" ) ? safeParseNumber ( rawValue ) : modifiers . includes ( "trim" ) ? rawValue . trim ( ) : rawValue ;
}
} ) ;
2022-10-29 00:20:35 +02:00
}
function safeParseNumber ( rawValue ) {
let number = rawValue ? parseFloat ( rawValue ) : null ;
return isNumeric2 ( number ) ? number : rawValue ;
}
function checkedAttrLooseCompare2 ( valueA , valueB ) {
return valueA == valueB ;
}
function isNumeric2 ( subject ) {
return ! Array . isArray ( subject ) && ! isNaN ( subject ) ;
}
2023-01-20 16:43:19 +01:00
function isGetterSetter ( value ) {
return value !== null && typeof value === "object" && typeof value . get === "function" && typeof value . set === "function" ;
}
2022-10-29 00:20:35 +02:00
directive ( "cloak" , ( el ) => queueMicrotask ( ( ) => mutateDom ( ( ) => el . removeAttribute ( prefix ( "cloak" ) ) ) ) ) ;
addInitSelector ( ( ) => ` [ ${ prefix ( "init" ) } ] ` ) ;
directive ( "init" , skipDuringClone ( ( el , { expression } , { evaluate : evaluate2 } ) => {
if ( typeof expression === "string" ) {
return ! ! expression . trim ( ) && evaluate2 ( expression , { } , false ) ;
}
return evaluate2 ( expression , { } , false ) ;
} ) ) ;
directive ( "text" , ( el , { expression } , { effect : effect3 , evaluateLater : evaluateLater2 } ) => {
let evaluate2 = evaluateLater2 ( expression ) ;
effect3 ( ( ) => {
evaluate2 ( ( value ) => {
mutateDom ( ( ) => {
el . textContent = value ;
} ) ;
} ) ;
} ) ;
} ) ;
directive ( "html" , ( el , { expression } , { effect : effect3 , evaluateLater : evaluateLater2 } ) => {
let evaluate2 = evaluateLater2 ( expression ) ;
effect3 ( ( ) => {
evaluate2 ( ( value ) => {
mutateDom ( ( ) => {
el . innerHTML = value ;
el . _x _ignoreSelf = true ;
initTree ( el ) ;
delete el . _x _ignoreSelf ;
} ) ;
} ) ;
} ) ;
} ) ;
mapAttributes ( startingWith ( ":" , into ( prefix ( "bind:" ) ) ) ) ;
directive ( "bind" , ( el , { value , modifiers , expression , original } , { effect : effect3 } ) => {
if ( ! value ) {
let bindingProviders = { } ;
injectBindingProviders ( bindingProviders ) ;
let getBindings = evaluateLater ( el , expression ) ;
getBindings ( ( bindings ) => {
applyBindingsObject ( el , bindings , original ) ;
} , { scope : bindingProviders } ) ;
return ;
}
if ( value === "key" )
return storeKeyForXFor ( el , expression ) ;
let evaluate2 = evaluateLater ( el , expression ) ;
effect3 ( ( ) => evaluate2 ( ( result ) => {
if ( result === void 0 && typeof expression === "string" && expression . match ( /\./ ) ) {
result = "" ;
}
mutateDom ( ( ) => bind ( el , value , result , modifiers ) ) ;
} ) ) ;
} ) ;
function storeKeyForXFor ( el , expression ) {
el . _x _keyExpression = expression ;
}
addRootSelector ( ( ) => ` [ ${ prefix ( "data" ) } ] ` ) ;
directive ( "data" , skipDuringClone ( ( el , { expression } , { cleanup : cleanup2 } ) => {
expression = expression === "" ? "{}" : expression ;
let magicContext = { } ;
injectMagics ( magicContext , el ) ;
let dataProviderContext = { } ;
injectDataProviders ( dataProviderContext , magicContext ) ;
let data2 = evaluate ( el , expression , { scope : dataProviderContext } ) ;
2023-03-23 16:28:28 +01:00
if ( data2 === void 0 || data2 === true )
2022-10-29 00:20:35 +02:00
data2 = { } ;
injectMagics ( data2 , el ) ;
2023-05-19 15:05:29 +02:00
let reactiveData = reactive2 ( data2 ) ;
2022-10-29 00:20:35 +02:00
initInterceptors ( reactiveData ) ;
let undo = addScopeToNode ( el , reactiveData ) ;
reactiveData [ "init" ] && evaluate ( el , reactiveData [ "init" ] ) ;
cleanup2 ( ( ) => {
reactiveData [ "destroy" ] && evaluate ( el , reactiveData [ "destroy" ] ) ;
undo ( ) ;
} ) ;
} ) ) ;
directive ( "show" , ( el , { modifiers , expression } , { effect : effect3 } ) => {
let evaluate2 = evaluateLater ( el , expression ) ;
if ( ! el . _x _doHide )
el . _x _doHide = ( ) => {
mutateDom ( ( ) => {
el . style . setProperty ( "display" , "none" , modifiers . includes ( "important" ) ? "important" : void 0 ) ;
} ) ;
} ;
if ( ! el . _x _doShow )
el . _x _doShow = ( ) => {
mutateDom ( ( ) => {
if ( el . style . length === 1 && el . style . display === "none" ) {
el . removeAttribute ( "style" ) ;
} else {
el . style . removeProperty ( "display" ) ;
}
} ) ;
} ;
let hide = ( ) => {
el . _x _doHide ( ) ;
el . _x _isShown = false ;
} ;
let show = ( ) => {
el . _x _doShow ( ) ;
el . _x _isShown = true ;
} ;
let clickAwayCompatibleShow = ( ) => setTimeout ( show ) ;
2023-03-23 16:28:28 +01:00
let toggle = once (
( value ) => value ? show ( ) : hide ( ) ,
( value ) => {
if ( typeof el . _x _toggleAndCascadeWithTransitions === "function" ) {
el . _x _toggleAndCascadeWithTransitions ( el , value , show , hide ) ;
} else {
value ? clickAwayCompatibleShow ( ) : hide ( ) ;
}
2022-10-29 00:20:35 +02:00
}
2023-03-23 16:28:28 +01:00
) ;
2022-10-29 00:20:35 +02:00
let oldValue ;
let firstTime = true ;
effect3 ( ( ) => evaluate2 ( ( value ) => {
if ( ! firstTime && value === oldValue )
return ;
if ( modifiers . includes ( "immediate" ) )
value ? clickAwayCompatibleShow ( ) : hide ( ) ;
toggle ( value ) ;
oldValue = value ;
firstTime = false ;
} ) ) ;
} ) ;
directive ( "for" , ( el , { expression } , { effect : effect3 , cleanup : cleanup2 } ) => {
let iteratorNames = parseForExpression ( expression ) ;
let evaluateItems = evaluateLater ( el , iteratorNames . items ) ;
2023-03-23 16:28:28 +01:00
let evaluateKey = evaluateLater (
el ,
// the x-bind:key expression is stored for our use instead of evaluated.
el . _x _keyExpression || "index"
) ;
2022-10-29 00:20:35 +02:00
el . _x _prevKeys = [ ] ;
el . _x _lookup = { } ;
effect3 ( ( ) => loop ( el , iteratorNames , evaluateItems , evaluateKey ) ) ;
cleanup2 ( ( ) => {
Object . values ( el . _x _lookup ) . forEach ( ( el2 ) => el2 . remove ( ) ) ;
delete el . _x _prevKeys ;
delete el . _x _lookup ;
} ) ;
} ) ;
function loop ( el , iteratorNames , evaluateItems , evaluateKey ) {
let isObject2 = ( i ) => typeof i === "object" && ! Array . isArray ( i ) ;
let templateEl = el ;
evaluateItems ( ( items ) => {
if ( isNumeric3 ( items ) && items >= 0 ) {
items = Array . from ( Array ( items ) . keys ( ) , ( i ) => i + 1 ) ;
}
if ( items === void 0 )
items = [ ] ;
let lookup = el . _x _lookup ;
let prevKeys = el . _x _prevKeys ;
let scopes = [ ] ;
let keys = [ ] ;
if ( isObject2 ( items ) ) {
items = Object . entries ( items ) . map ( ( [ key , value ] ) => {
let scope2 = getIterationScopeVariables ( iteratorNames , value , key , items ) ;
evaluateKey ( ( value2 ) => keys . push ( value2 ) , { scope : { index : key , ... scope2 } } ) ;
scopes . push ( scope2 ) ;
} ) ;
} else {
for ( let i = 0 ; i < items . length ; i ++ ) {
let scope2 = getIterationScopeVariables ( iteratorNames , items [ i ] , i , items ) ;
evaluateKey ( ( value ) => keys . push ( value ) , { scope : { index : i , ... scope2 } } ) ;
scopes . push ( scope2 ) ;
}
}
let adds = [ ] ;
let moves = [ ] ;
let removes = [ ] ;
let sames = [ ] ;
for ( let i = 0 ; i < prevKeys . length ; i ++ ) {
let key = prevKeys [ i ] ;
if ( keys . indexOf ( key ) === - 1 )
removes . push ( key ) ;
}
prevKeys = prevKeys . filter ( ( key ) => ! removes . includes ( key ) ) ;
let lastKey = "template" ;
for ( let i = 0 ; i < keys . length ; i ++ ) {
let key = keys [ i ] ;
let prevIndex = prevKeys . indexOf ( key ) ;
if ( prevIndex === - 1 ) {
prevKeys . splice ( i , 0 , key ) ;
adds . push ( [ lastKey , i ] ) ;
} else if ( prevIndex !== i ) {
let keyInSpot = prevKeys . splice ( i , 1 ) [ 0 ] ;
let keyForSpot = prevKeys . splice ( prevIndex - 1 , 1 ) [ 0 ] ;
prevKeys . splice ( i , 0 , keyForSpot ) ;
prevKeys . splice ( prevIndex , 0 , keyInSpot ) ;
moves . push ( [ keyInSpot , keyForSpot ] ) ;
} else {
sames . push ( key ) ;
}
lastKey = key ;
}
for ( let i = 0 ; i < removes . length ; i ++ ) {
let key = removes [ i ] ;
if ( ! ! lookup [ key ] . _x _effects ) {
lookup [ key ] . _x _effects . forEach ( dequeueJob ) ;
}
lookup [ key ] . remove ( ) ;
lookup [ key ] = null ;
delete lookup [ key ] ;
}
for ( let i = 0 ; i < moves . length ; i ++ ) {
let [ keyInSpot , keyForSpot ] = moves [ i ] ;
let elInSpot = lookup [ keyInSpot ] ;
let elForSpot = lookup [ keyForSpot ] ;
let marker = document . createElement ( "div" ) ;
mutateDom ( ( ) => {
2023-05-19 15:05:29 +02:00
if ( ! elForSpot )
warn ( ` x-for ":key" is undefined or invalid ` , templateEl ) ;
2022-10-29 00:20:35 +02:00
elForSpot . after ( marker ) ;
elInSpot . after ( elForSpot ) ;
elForSpot . _x _currentIfEl && elForSpot . after ( elForSpot . _x _currentIfEl ) ;
marker . before ( elInSpot ) ;
elInSpot . _x _currentIfEl && elInSpot . after ( elInSpot . _x _currentIfEl ) ;
marker . remove ( ) ;
} ) ;
2023-05-19 15:05:29 +02:00
elForSpot . _x _refreshXForScope ( scopes [ keys . indexOf ( keyForSpot ) ] ) ;
2022-10-29 00:20:35 +02:00
}
for ( let i = 0 ; i < adds . length ; i ++ ) {
let [ lastKey2 , index ] = adds [ i ] ;
let lastEl = lastKey2 === "template" ? templateEl : lookup [ lastKey2 ] ;
if ( lastEl . _x _currentIfEl )
lastEl = lastEl . _x _currentIfEl ;
let scope2 = scopes [ index ] ;
let key = keys [ index ] ;
let clone2 = document . importNode ( templateEl . content , true ) . firstElementChild ;
2023-05-19 15:05:29 +02:00
let reactiveScope = reactive2 ( scope2 ) ;
addScopeToNode ( clone2 , reactiveScope , templateEl ) ;
clone2 . _x _refreshXForScope = ( newScope ) => {
Object . entries ( newScope ) . forEach ( ( [ key2 , value ] ) => {
reactiveScope [ key2 ] = value ;
} ) ;
} ;
2022-10-29 00:20:35 +02:00
mutateDom ( ( ) => {
lastEl . after ( clone2 ) ;
initTree ( clone2 ) ;
} ) ;
if ( typeof key === "object" ) {
warn ( "x-for key cannot be an object, it must be a string or an integer" , templateEl ) ;
}
lookup [ key ] = clone2 ;
}
for ( let i = 0 ; i < sames . length ; i ++ ) {
2023-05-19 15:05:29 +02:00
lookup [ sames [ i ] ] . _x _refreshXForScope ( scopes [ keys . indexOf ( sames [ i ] ) ] ) ;
2022-10-29 00:20:35 +02:00
}
templateEl . _x _prevKeys = keys ;
} ) ;
}
function parseForExpression ( expression ) {
let forIteratorRE = /,([^,\}\]]*)(?:,([^,\}\]]*))?$/ ;
let stripParensRE = /^\s*\(|\)\s*$/g ;
let forAliasRE = /([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/ ;
let inMatch = expression . match ( forAliasRE ) ;
if ( ! inMatch )
return ;
let res = { } ;
res . items = inMatch [ 2 ] . trim ( ) ;
let item = inMatch [ 1 ] . replace ( stripParensRE , "" ) . trim ( ) ;
let iteratorMatch = item . match ( forIteratorRE ) ;
if ( iteratorMatch ) {
res . item = item . replace ( forIteratorRE , "" ) . trim ( ) ;
res . index = iteratorMatch [ 1 ] . trim ( ) ;
if ( iteratorMatch [ 2 ] ) {
res . collection = iteratorMatch [ 2 ] . trim ( ) ;
}
} else {
res . item = item ;
}
return res ;
}
function getIterationScopeVariables ( iteratorNames , item , index , items ) {
let scopeVariables = { } ;
if ( /^\[.*\]$/ . test ( iteratorNames . item ) && Array . isArray ( item ) ) {
let names = iteratorNames . item . replace ( "[" , "" ) . replace ( "]" , "" ) . split ( "," ) . map ( ( i ) => i . trim ( ) ) ;
names . forEach ( ( name , i ) => {
scopeVariables [ name ] = item [ i ] ;
} ) ;
} else if ( /^\{.*\}$/ . test ( iteratorNames . item ) && ! Array . isArray ( item ) && typeof item === "object" ) {
let names = iteratorNames . item . replace ( "{" , "" ) . replace ( "}" , "" ) . split ( "," ) . map ( ( i ) => i . trim ( ) ) ;
names . forEach ( ( name ) => {
scopeVariables [ name ] = item [ name ] ;
} ) ;
} else {
scopeVariables [ iteratorNames . item ] = item ;
}
if ( iteratorNames . index )
scopeVariables [ iteratorNames . index ] = index ;
if ( iteratorNames . collection )
scopeVariables [ iteratorNames . collection ] = items ;
return scopeVariables ;
}
function isNumeric3 ( subject ) {
return ! Array . isArray ( subject ) && ! isNaN ( subject ) ;
}
function handler2 ( ) {
}
handler2 . inline = ( el , { expression } , { cleanup : cleanup2 } ) => {
let root = closestRoot ( el ) ;
if ( ! root . _x _refs )
root . _x _refs = { } ;
root . _x _refs [ expression ] = el ;
cleanup2 ( ( ) => delete root . _x _refs [ expression ] ) ;
} ;
directive ( "ref" , handler2 ) ;
directive ( "if" , ( el , { expression } , { effect : effect3 , cleanup : cleanup2 } ) => {
let evaluate2 = evaluateLater ( el , expression ) ;
let show = ( ) => {
if ( el . _x _currentIfEl )
return el . _x _currentIfEl ;
let clone2 = el . content . cloneNode ( true ) . firstElementChild ;
addScopeToNode ( clone2 , { } , el ) ;
mutateDom ( ( ) => {
el . after ( clone2 ) ;
initTree ( clone2 ) ;
} ) ;
el . _x _currentIfEl = clone2 ;
el . _x _undoIf = ( ) => {
walk ( clone2 , ( node ) => {
if ( ! ! node . _x _effects ) {
node . _x _effects . forEach ( dequeueJob ) ;
}
} ) ;
clone2 . remove ( ) ;
delete el . _x _currentIfEl ;
} ;
return clone2 ;
} ;
let hide = ( ) => {
if ( ! el . _x _undoIf )
return ;
el . _x _undoIf ( ) ;
delete el . _x _undoIf ;
} ;
effect3 ( ( ) => evaluate2 ( ( value ) => {
value ? show ( ) : hide ( ) ;
} ) ) ;
cleanup2 ( ( ) => el . _x _undoIf && el . _x _undoIf ( ) ) ;
} ) ;
directive ( "id" , ( el , { expression } , { evaluate : evaluate2 } ) => {
let names = evaluate2 ( expression ) ;
names . forEach ( ( name ) => setIdRoot ( el , name ) ) ;
} ) ;
mapAttributes ( startingWith ( "@" , into ( prefix ( "on:" ) ) ) ) ;
directive ( "on" , skipDuringClone ( ( el , { value , modifiers , expression } , { cleanup : cleanup2 } ) => {
let evaluate2 = expression ? evaluateLater ( el , expression ) : ( ) => {
} ;
if ( el . tagName . toLowerCase ( ) === "template" ) {
if ( ! el . _x _forwardEvents )
el . _x _forwardEvents = [ ] ;
if ( ! el . _x _forwardEvents . includes ( value ) )
el . _x _forwardEvents . push ( value ) ;
}
let removeListener = on ( el , value , modifiers , ( e ) => {
evaluate2 ( ( ) => {
2023-03-23 16:28:28 +01:00
} , { scope : { "$event" : e } , params : [ e ] } ) ;
2022-10-29 00:20:35 +02:00
} ) ;
cleanup2 ( ( ) => removeListener ( ) ) ;
} ) ) ;
warnMissingPluginDirective ( "Collapse" , "collapse" , "collapse" ) ;
warnMissingPluginDirective ( "Intersect" , "intersect" , "intersect" ) ;
warnMissingPluginDirective ( "Focus" , "trap" , "focus" ) ;
warnMissingPluginDirective ( "Mask" , "mask" , "mask" ) ;
function warnMissingPluginDirective ( name , directiveName2 , slug ) {
directive ( directiveName2 , ( el ) => warn ( ` You can't use [x- ${ directiveName2 } ] without first installing the " ${ name } " plugin here: https://alpinejs.dev/plugins/ ${ slug } ` , el ) ) ;
}
alpine _default . setEvaluator ( normalEvaluator ) ;
2023-05-19 15:05:29 +02:00
alpine _default . setReactivityEngine ( { reactive , effect , release : stop , raw : toRaw } ) ;
2022-10-29 00:20:35 +02:00
var src _default = alpine _default ;
var module _default = src _default ;
// <stdin>
window . Alpine = module _default ;
module _default . start ( ) ;
} ) ( ) ;