{"version":3,"file":"directive.mjs","names":[],"sources":["../../../../../../packages/components/loading/src/directive.ts"],"sourcesContent":["// @ts-nocheck\nimport { isRef, ref } from 'vue'\nimport { hyphenate, isObject, isString } from '@element-plus/utils'\nimport Loading from './service'\n\nimport type { Directive, DirectiveBinding, UnwrapRef } from 'vue'\nimport type { LoadingOptions } from './types'\nimport type { LoadingInstance } from './loading'\n\nconst INSTANCE_KEY = Symbol('ElLoading')\nconst getAttributeName = (name: string) => {\n  return `element-loading-${hyphenate(name)}`\n}\n\nexport type LoadingBinding = boolean | UnwrapRef<LoadingOptions>\nexport interface ElementLoading extends HTMLElement {\n  [INSTANCE_KEY]?: {\n    instance: LoadingInstance\n    options: LoadingOptions\n  }\n}\n\nconst createInstance = (\n  el: ElementLoading,\n  binding: DirectiveBinding<LoadingBinding>\n) => {\n  const vm = binding.instance\n\n  const getBindingProp = <K extends keyof LoadingOptions>(\n    key: K\n  ): LoadingOptions[K] =>\n    isObject(binding.value) ? binding.value[key] : undefined\n\n  const resolveExpression = (key: any) => {\n    const data = (isString(key) && vm?.[key]) || key\n    return ref(data)\n  }\n\n  const getProp = <K extends keyof LoadingOptions>(name: K) =>\n    resolveExpression(\n      getBindingProp(name) || el.getAttribute(getAttributeName(name))\n    )\n\n  const fullscreen =\n    getBindingProp('fullscreen') ?? binding.modifiers.fullscreen\n\n  const options: LoadingOptions = {\n    text: getProp('text'),\n    svg: getProp('svg'),\n    svgViewBox: getProp('svgViewBox'),\n    spinner: getProp('spinner'),\n    background: getProp('background'),\n    customClass: getProp('customClass'),\n    fullscreen,\n    target: getBindingProp('target') ?? (fullscreen ? undefined : el),\n    body: getBindingProp('body') ?? binding.modifiers.body,\n    lock: getBindingProp('lock') ?? binding.modifiers.lock,\n  }\n  const instance = Loading(options)\n  instance._context = vLoading._context\n  el[INSTANCE_KEY] = {\n    options,\n    instance,\n  }\n}\n\nconst updateOptions = (\n  originalOptions: LoadingOptions,\n  newOptions: UnwrapRef<LoadingOptions>\n) => {\n  for (const key of Object.keys(originalOptions)) {\n    if (isRef(originalOptions[key]))\n      originalOptions[key].value = newOptions[key]\n  }\n}\n\nconst vLoading: Directive<ElementLoading, LoadingBinding> = {\n  mounted(el, binding) {\n    if (binding.value) {\n      createInstance(el, binding)\n    }\n  },\n  updated(el, binding) {\n    const instance = el[INSTANCE_KEY]\n    if (!binding.value) {\n      instance?.instance.close()\n      el[INSTANCE_KEY] = null\n      return\n    }\n\n    if (!instance) createInstance(el, binding)\n    else {\n      updateOptions(\n        instance.options,\n        isObject(binding.value)\n          ? binding.value\n          : {\n              text: el.getAttribute(getAttributeName('text')),\n              svg: el.getAttribute(getAttributeName('svg')),\n              svgViewBox: el.getAttribute(getAttributeName('svgViewBox')),\n              spinner: el.getAttribute(getAttributeName('spinner')),\n              background: el.getAttribute(getAttributeName('background')),\n              customClass: el.getAttribute(getAttributeName('customClass')),\n            }\n      )\n    }\n  },\n  unmounted(el) {\n    el[INSTANCE_KEY]?.instance.close()\n    el[INSTANCE_KEY] = null\n  },\n}\n\nvLoading._context = null\nexport default vLoading\n"],"mappings":";;;;;AASA,MAAM,eAAe,OAAO,WAAW;AACvC,MAAM,oBAAoB,SAAiB;CACzC,OAAO,mBAAmB,UAAU,IAAI;AAC1C;AAUA,MAAM,kBACJ,IACA,YACG;CACH,MAAM,KAAK,QAAQ;CAEnB,MAAM,kBACJ,QAEA,SAAS,QAAQ,KAAK,IAAI,QAAQ,MAAM,OAAO,KAAA;CAEjD,MAAM,qBAAqB,QAAa;EACtC,MAAM,OAAQ,SAAS,GAAG,KAAK,KAAK,QAAS;EAC7C,OAAO,IAAI,IAAI;CACjB;CAEA,MAAM,WAA2C,SAC/C,kBACE,eAAe,IAAI,KAAK,GAAG,aAAa,iBAAiB,IAAI,CAAC,CAChE;CAEF,MAAM,aACJ,eAAe,YAAY,KAAK,QAAQ,UAAU;CAEpD,MAAM,UAA0B;EAC9B,MAAM,QAAQ,MAAM;EACpB,KAAK,QAAQ,KAAK;EAClB,YAAY,QAAQ,YAAY;EAChC,SAAS,QAAQ,SAAS;EAC1B,YAAY,QAAQ,YAAY;EAChC,aAAa,QAAQ,aAAa;EAClC;EACA,QAAQ,eAAe,QAAQ,MAAM,aAAa,KAAA,IAAY;EAC9D,MAAM,eAAe,MAAM,KAAK,QAAQ,UAAU;EAClD,MAAM,eAAe,MAAM,KAAK,QAAQ,UAAU;CACpD;CACA,MAAM,WAAW,QAAQ,OAAO;CAChC,SAAS,WAAW,SAAS;CAC7B,GAAG,gBAAgB;EACjB;EACA;CACF;AACF;AAEA,MAAM,iBACJ,iBACA,eACG;CACH,KAAK,MAAM,OAAO,OAAO,KAAK,eAAe,GAC3C,IAAI,MAAM,gBAAgB,IAAI,GAC5B,gBAAgB,IAAI,CAAC,QAAQ,WAAW;AAE9C;AAEA,MAAM,WAAsD;CAC1D,QAAQ,IAAI,SAAS;EACnB,IAAI,QAAQ,OACV,eAAe,IAAI,OAAO;CAE9B;CACA,QAAQ,IAAI,SAAS;EACnB,MAAM,WAAW,GAAG;EACpB,IAAI,CAAC,QAAQ,OAAO;GAClB,UAAU,SAAS,MAAM;GACzB,GAAG,gBAAgB;GACnB;EACF;EAEA,IAAI,CAAC,UAAU,eAAe,IAAI,OAAO;OAEvC,cACE,SAAS,SACT,SAAS,QAAQ,KAAK,IAClB,QAAQ,QACR;GACE,MAAM,GAAG,aAAa,iBAAiB,MAAM,CAAC;GAC9C,KAAK,GAAG,aAAa,iBAAiB,KAAK,CAAC;GAC5C,YAAY,GAAG,aAAa,iBAAiB,YAAY,CAAC;GAC1D,SAAS,GAAG,aAAa,iBAAiB,SAAS,CAAC;GACpD,YAAY,GAAG,aAAa,iBAAiB,YAAY,CAAC;GAC1D,aAAa,GAAG,aAAa,iBAAiB,aAAa,CAAC;EAC9D,CACN;CAEJ;CACA,UAAU,IAAI;EACZ,GAAG,aAAa,EAAE,SAAS,MAAM;EACjC,GAAG,gBAAgB;CACrB;AACF;AAEA,SAAS,WAAW"}