@aerogel/core 0.0.0-next.bde642c4a8096c5fc3d5e676c2115da23f4bf1d8 → 0.0.0-next.c29ffcd25bffdbed37ecce3aac1ba14cde3e9d39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/dist/aerogel-core.cjs.js +1 -1
  2. package/dist/aerogel-core.cjs.js.map +1 -1
  3. package/dist/aerogel-core.d.ts +389 -69
  4. package/dist/aerogel-core.esm.js +1 -1
  5. package/dist/aerogel-core.esm.js.map +1 -1
  6. package/package.json +3 -3
  7. package/src/bootstrap/index.ts +12 -2
  8. package/src/components/headless/forms/AGHeadlessInput.ts +1 -0
  9. package/src/components/headless/forms/AGHeadlessInput.vue +7 -0
  10. package/src/components/headless/forms/AGHeadlessInputInput.vue +1 -0
  11. package/src/components/headless/forms/AGHeadlessInputTextArea.vue +1 -0
  12. package/src/components/headless/modals/AGHeadlessModal.ts +3 -1
  13. package/src/components/headless/modals/AGHeadlessModal.vue +10 -4
  14. package/src/components/headless/modals/AGHeadlessModalPanel.vue +10 -6
  15. package/src/components/headless/modals/AGHeadlessModalTitle.vue +14 -4
  16. package/src/components/lib/AGMarkdown.vue +14 -1
  17. package/src/components/lib/AGMeasured.vue +1 -0
  18. package/src/components/lib/AGProgressBar.vue +45 -0
  19. package/src/components/lib/index.ts +1 -0
  20. package/src/components/modals/AGAlertModal.ts +5 -2
  21. package/src/components/modals/AGConfirmModal.ts +14 -5
  22. package/src/components/modals/AGConfirmModal.vue +2 -2
  23. package/src/components/modals/AGErrorReportModal.ts +5 -2
  24. package/src/components/modals/AGLoadingModal.ts +10 -4
  25. package/src/components/modals/AGModal.ts +1 -0
  26. package/src/components/modals/AGModalContext.vue +14 -4
  27. package/src/components/modals/AGPromptModal.ts +9 -4
  28. package/src/directives/measure.ts +24 -5
  29. package/src/errors/JobCancelledError.ts +3 -0
  30. package/src/errors/utils.ts +16 -0
  31. package/src/forms/Form.test.ts +28 -0
  32. package/src/forms/Form.ts +24 -6
  33. package/src/forms/index.ts +2 -1
  34. package/src/forms/utils.ts +20 -4
  35. package/src/forms/validation.ts +19 -0
  36. package/src/jobs/Job.ts +144 -2
  37. package/src/jobs/index.ts +4 -1
  38. package/src/jobs/listeners.ts +3 -0
  39. package/src/jobs/status.ts +4 -0
  40. package/src/lang/Lang.ts +4 -0
  41. package/src/services/App.state.ts +9 -1
  42. package/src/services/App.ts +5 -0
  43. package/src/services/Events.ts +13 -3
  44. package/src/services/Service.ts +107 -44
  45. package/src/services/Storage.ts +20 -0
  46. package/src/services/index.ts +7 -2
  47. package/src/services/utils.ts +18 -0
  48. package/src/testing/setup.ts +11 -3
  49. package/src/ui/UI.state.ts +7 -0
  50. package/src/ui/UI.ts +136 -43
  51. package/src/ui/index.ts +1 -0
  52. package/src/ui/utils.ts +16 -0
  53. package/src/utils/composition/persistent.test.ts +33 -0
  54. package/src/utils/composition/persistent.ts +11 -0
  55. package/src/utils/composition/state.test.ts +47 -0
  56. package/src/utils/composition/state.ts +24 -0
  57. package/src/utils/index.ts +2 -0
  58. package/src/utils/markdown.test.ts +50 -0
  59. package/src/utils/markdown.ts +17 -2
  60. package/src/utils/vue.ts +11 -1
@@ -1,2 +1,2 @@
1
- import{ref as e,computed as t,watch as s,inject as r,reactive as o,markRaw as a,nextTick as n,onUnmounted as l,useAttrs as i,onMounted as c,defineComponent as u,toRef as d,openBlock as p,createBlock as m,unref as f,withCtx as h,renderSlot as v,provide as g,resolveDynamicComponent as _,normalizeProps as b,guardReactiveProps as y,createElementBlock as x,Fragment as A,createVNode as w,createCommentVNode as k,createElementVNode as G,h as S,mergeProps as C,customRef as $,normalizeClass as j,createTextVNode as M,toDisplayString as E,renderList as H,watchEffect as L,withModifiers as T,readonly as I,useSlots as R,createApp as P,resolveDirective as B,withDirectives as O}from"vue";import"core-js/modules/esnext.async-iterator.reduce.js";import"core-js/modules/esnext.iterator.constructor.js";import"core-js/modules/esnext.iterator.reduce.js";import"core-js/modules/esnext.async-iterator.map.js";import"core-js/modules/esnext.iterator.map.js";import D from"@babel/runtime/helpers/esm/defineProperty";import V from"virtual:aerogel";import{JSError as q,tap as z,MagicObject as U,PromisedValue as F,Storage as N,objectOnly as K,isEmpty as W,objectDeepClone as Q,fail as Z,facade as Y,arrayRemove as J,updateLocationQueryParameters as X,forever as ee,after as te,uuid as se,isObject as re,objectWithoutEmpty as oe,toString as ae,objectWithout as ne,noop as le,stringExcerpt as ie}from"@noeldemartin/utils";import"core-js/modules/esnext.async-iterator.for-each.js";import"core-js/modules/esnext.iterator.for-each.js";import"core-js/modules/esnext.set.add-all.js";import"core-js/modules/esnext.set.delete-all.js";import"core-js/modules/esnext.set.difference.js";import"core-js/modules/esnext.set.every.js";import"core-js/modules/esnext.set.filter.js";import"core-js/modules/esnext.set.find.js";import"core-js/modules/esnext.set.intersection.js";import"core-js/modules/esnext.set.is-disjoint-from.js";import"core-js/modules/esnext.set.is-subset-of.js";import"core-js/modules/esnext.set.is-superset-of.js";import"core-js/modules/esnext.set.join.js";import"core-js/modules/esnext.set.map.js";import"core-js/modules/esnext.set.reduce.js";import"core-js/modules/esnext.set.some.js";import"core-js/modules/esnext.set.symmetric-difference.js";import"core-js/modules/esnext.set.union.js";import{createPinia as ce,setActivePinia as ue,defineStore as de}from"pinia";import"core-js/modules/esnext.async-iterator.filter.js";import"core-js/modules/esnext.iterator.filter.js";import"core-js/modules/esnext.string.at.js";import"core-js/modules/esnext.async-iterator.find.js";import"core-js/modules/esnext.iterator.find.js";import"core-js/modules/esnext.async-iterator.some.js";import"core-js/modules/esnext.iterator.some.js";import{Dialog as pe,DialogPanel as me,DialogTitle as fe,Listbox as he,ListboxButton as ve,ListboxLabel as ge,ListboxOption as _e,ListboxOptions as be}from"@headlessui/vue";export{ListboxOptions as AGHeadlessSelectOptions}from"@headlessui/vue";import ye from"dompurify";import{marked as xe,Renderer as Ae}from"marked";import"core-js/modules/esnext.weak-map.delete-all.js";import"core-js/modules/esnext.weak-map.emplace.js";class ServiceBootError extends q{constructor(e,t){super(`Service '${e}' failed booting`,{cause:t})}}let we=null;function ke(){return we??Ge()}function Ge(){return z(ce(),(e=>{we=e,ue(e)}))}function Se(){return we??ke()}function Ce(e,t){return ke(),de(e,t)()}function $e(e){var t;return D(t=class extends je{usesStore(){return!0}getName(){return e.name??null}getInitialState(){return"function"==typeof e.initialState?e.initialState():Object.entries(e.initialState).reduce(((e,t)=>{let[s,r]=t;try{r=structuredClone(r)}catch(e){console.warn(`Could not clone '${s}' state from ${this.getName()} service, this may cause problems if you're using multiple instances of the service (for example, in unit tests).\nTo fix this problem, declare your initialState as a function instead.`)}return e[s]=r,e}),{})}getComputedStateDefinition(){return e.computed??{}}serializePersistedState(t){return e.serialize?.(t)??t}},"persist",e.persist??[]),t}class je extends U{constructor(){super(),D(this,"_name",void 0),D(this,"_booted",void 0),D(this,"_computedStateKeys",void 0),D(this,"_store",void 0);const e=this.getComputedStateDefinition();this._name=this.getName()??new.target.name,this._booted=new F,this._computedStateKeys=new Set(Object.keys(e)),this._store=this.usesStore()&&Ce(this._name,{state:()=>this.getInitialState(),getters:e})}get booted(){return this._booted}launch(){const handleError=e=>this._booted.reject(new ServiceBootError(this._name,e));try{this.frameworkBoot().then((()=>this.boot())).then((()=>this._booted.resolve())).catch(handleError)}catch(e){handleError(e)}return this._booted}hasPersistedState(){return N.has(this._name)}hasState(e){return!!this._store&&(e in this._store.$state||this._computedStateKeys.has(e))}getState(e){const t=this._store;return e?t?t[e]:void 0:t||{}}setState(e,t){if(!this._store)return;const s="string"==typeof e?{[e]:t}:e;Object.assign(this._store.$state,s),this.onStateUpdated(s)}__get(e){return this.hasState(e)?this.getState(e):super.__get(e)}__set(e,t){this.setState({[e]:t})}onStateUpdated(e){const t=this.constructor.persist,s=K(e,t);if(W(s))return;const r=N.get(this._name);r&&N.set(this._name,{...r,...this.serializePersistedState(Q(s))})}usesStore(){return!1}getName(){return null}getInitialState(){return{}}getComputedStateDefinition(){return{}}serializePersistedState(e){return e}async frameworkBoot(){this.initializePersistedState()}async boot(){}initializePersistedState(){const e=this.constructor.persist;if(this.usesStore()&&!W(e))if(N.has(this._name)){const e=N.require(this._name);this.setState(e)}else N.set(this._name,K(this.getState(),e))}requireStore(){return this._store?this._store:Z(`Failed getting '${this._name}' store`)}}D(je,"persist",[]);const Me={Low:-256,Default:0,High:256};class Ee extends je{constructor(){super(...arguments),D(this,"listeners",{})}async boot(){Object.entries(globalThis.__aerogelEvents__??{}).forEach((e=>{let[t,s]=e;return this.on(t,s)}))}async emit(e,t){const s=this.listeners[e]??{priorities:[],handlers:{}};for(const e of s.priorities)await Promise.all(s.handlers[e]?.map((e=>e(t)))??[])}on(e,t,s){const r="function"==typeof t?{}:t,o="function"==typeof t?t:s;return this.registerListener(e,r,o),()=>this.off(e,o)}once(e,t,s){let r=null;const o="function"==typeof t?{}:t,a="function"==typeof t?t:s;return z((()=>r&&this.off(e,r)),(t=>{r=function(){return t(),a(...arguments)},this.registerListener(e,o,a)}))}off(e,t){const s=this.listeners[e];if(!s)return;const r=[...s.priorities];for(const e of r)J(s.handlers[e]??[],t),0===s.handlers[e]?.length&&(delete s.handlers[e],J(s.priorities,e));0===s.priorities.length&&delete this.listeners[e]}registerListener(e,t,s){const r=t.priority??0;e in this.listeners||(this.listeners[e]={priorities:[],handlers:{}});const o=this.listeners[e]?.priorities??Z(`priorities missing for event '${e}'`),a=this.listeners[e]?.handlers??Z(`handlers missing for event '${e}'`);o.includes(r)||(o.push(r),o.sort(((e,t)=>t-e)),a[r]=[]),a[r]?.push(s)}}var He=Y(Ee),Le=$e({name:"app",initialState:{plugins:{},environment:V.environment,version:V.version,sourceUrl:V.sourceUrl},computed:{development:e=>"development"===e.environment,testing:e=>"test"===e.environment||"testing"===e.environment,versionName(e){return this.development?"dev."+V.sourceHash.toString().substring(0,7):`v${e.version}`},versionUrl(e){return e.sourceUrl+(this.development?`/tree/${V.sourceHash}`:`/releases/tag/${this.versionName}`)}}});class Te extends Le{constructor(){super(...arguments),D(this,"name",V.name),D(this,"ready",new F),D(this,"mounted",new F)}isReady(){return this.ready.isResolved()}isMounted(){return this.mounted.isResolved()}async whenReady(e){return await this.ready.then(e)}async reload(e){e&&X(e),location.reload(),await ee()}plugin(e){return this.plugins[e]??null}async boot(){He.once("application-ready",(()=>this.ready.resolve())),He.once("application-mounted",(()=>this.mounted.resolve()))}}var Ie=Y(Te);function Re(e){return e}async function Pe(e){for(var t=arguments.length,s=new Array(t>1?t-1:0),r=1;r<t;r++)s[r-1]=arguments[r];Ie.setState("plugins",e.reduce(((e,t)=>(t.name&&(e[t.name]=t),e)),{})),await Promise.all(e.map((e=>e.install(...s)))??[])}function Be(e){return{type:Array,default:e??(()=>[])}}function Oe(){return{type:Boolean,default:arguments.length>0&&void 0!==arguments[0]&&arguments[0]}}function De(){return e()}function Ve(r){const o=e(),a=t(r);return s(a,(async()=>o.value=await a.value),{immediate:!0}),o}function qe(e){return e}function ze(e,t){const s=Object.values(e);return{type:String,default:t??s[0]??null,validator:e=>s.includes(e)}}function Ue(e){const t=r(e);return t?o(t):void 0}function Fe(e,t){return Ue(e)??Z(t??`Could not resolve '${e}' injection key`)}function Ne(e,t){return r(e)??Z(t??`Could not resolve '${e}' injection key`)}function Ke(e,t){return{type:e,default:t??null}}function We(){return{type:Number,default:arguments.length>0&&void 0!==arguments[0]?arguments[0]:null}}function Qe(){return{type:Object,default:arguments.length>0&&void 0!==arguments[0]?arguments[0]:null}}function Ze(){return{type:Array,required:!0}}function Ye(e){const t=Object.values(e);return{type:String,required:!0,validator:e=>t.includes(e)}}function Je(e){return{type:e,required:!0}}function Xe(){return{type:Number,required:!0}}function et(){return{type:Object,required:!0}}function tt(){return{type:String,required:!0}}function st(){return{type:String,default:arguments.length>0&&void 0!==arguments[0]?arguments[0]:null}}const rt={"initial-focus":{mounted(e,t){let{value:s}=t;!1!==s&&e.focus()}},measure:{mounted(e,t){let{value:s}=t;const r="function"==typeof s?s:null,o=e.getBoundingClientRect();e.style.setProperty("--width",`${o.width}px`),e.style.setProperty("--height",`${o.height}px`),r?.({width:o.width,height:o.height})}}};var ot={install(e,t){const s={...rt,...t.directives};for(const[t,r]of Object.entries(s))e.directive(t,r)}};class at extends je{constructor(){super(...arguments),D(this,"cache",void 0)}async get(e){const t=await this.open();return await t.match(e)??null}async store(e,t){const s=await this.open();await s.put(e,t)}async replace(e,t){const s=await this.open();0!==(await s.keys(e)).length&&await s.put(e,t)}async open(){return this.cache=this.cache??z(new F,(e=>{caches.open("app").then((t=>e.resolve(t)))}))}}var nt=Y(at);const lt={$app:Ie,$events:He};async function it(e,t){await Promise.all(Object.entries(t).map((async t=>{let[s,r]=t;await r.launch().catch((t=>e.config.errorHandler?.(t,null,`Failed launching ${s}.`)))}))),Object.assign(e.config.globalProperties,t),Ie.development&&Object.assign(window,t)}var ct={async install(e,t){const s={...lt,...t.services};e.use(Se()),await it(e,s)}},ut=$e({name:"ui",initialState:{modals:[],snackbars:[]}});const dt={AlertModal:"alert-modal",ConfirmModal:"confirm-modal",ErrorReportModal:"error-report-modal",LoadingModal:"loading-modal",PromptModal:"prompt-modal",Snackbar:"snackbar",StartupCrash:"startup-crash"};class pt extends ut{constructor(){super(...arguments),D(this,"modalCallbacks",{}),D(this,"components",{})}requireComponent(e){return this.components[e]??Z(`UI Component '${e}' is not defined!`)}alert(e,t){this.openModal(this.requireComponent(dt.AlertModal),"string"!=typeof t?{message:e}:{title:e,message:t})}async confirm(e,t,s){const r=await this.openModal(this.requireComponent(dt.ConfirmModal),"string"!=typeof t?{message:e,...t??{}}:{title:e,message:t,...s??{}});return await r.beforeClose??!1}async prompt(e,t,s){const r=s?.trim??!0,o=await this.openModal(this.requireComponent(dt.PromptModal),"string"!=typeof t?{message:e,...t??{}}:{title:e,message:t,...s??{}}),a=await o.beforeClose;return(r&&"string"==typeof a?a?.trim():a)??null}async loading(e,t){const s=await this.openModal(this.requireComponent(dt.LoadingModal),"string"!=typeof e?{}:{message:e});try{t="string"==typeof e?t:e;const[s]=await Promise.all([t,te({seconds:1})]);return s}finally{await this.closeModal(s.id)}}showSnackbar(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const s={id:se(),properties:{message:e,...t},component:a(t.component??this.requireComponent(dt.Snackbar))};this.setState("snackbars",this.snackbars.concat(s)),setTimeout((()=>this.hideSnackbar(s.id)),5e3)}hideSnackbar(e){this.setState("snackbars",this.snackbars.filter((t=>t.id!==e)))}registerComponent(e,t){this.components[e]=t}async openModal(e,t){const s=se(),r={},o={id:s,properties:t??{},component:a(e),beforeClose:new Promise((e=>r.willClose=e)),afterClose:new Promise((e=>r.closed=e))},l=this.modals.at(-1),i=this.modals.concat(o);return this.modalCallbacks[o.id]=r,this.setState({modals:i}),await n(),await(l&&He.emit("hide-modal",{id:l.id})),await Promise.all([l||He.emit("show-overlays-backdrop"),He.emit("show-modal",{id:o.id})]),o}async closeModal(e,t){await He.emit("close-modal",{id:e,result:t})}async boot(){this.watchModalEvents(),this.watchMountedEvent()}watchModalEvents(){He.on("modal-will-close",(e=>{let{modal:t,result:s}=e;this.modalCallbacks[t.id]?.willClose?.(s),1===this.modals.length&&He.emit("hide-overlays-backdrop")})),He.on("modal-closed",(async e=>{let{modal:t,result:s}=e;this.setState("modals",this.modals.filter((e=>e.id!==t.id))),this.modalCallbacks[t.id]?.closed?.(s),delete this.modalCallbacks[t.id];const r=this.modals.at(-1);await(r&&He.emit("show-modal",{id:r.id}))}))}watchMountedEvent(){He.once("application-mounted",(async()=>{const e=document.getElementById("splash");e&&("0"!==window.getComputedStyle(e).opacity&&(e.style.opacity="0",await te({ms:600})),e.remove())}))}}var mt=Y(pt);class ft{constructor(e,t){D(this,"locale",void 0),D(this,"fallbackLocale",void 0),this.locale=e,this.fallbackLocale=t}getLocale(){return this.locale}async setLocale(e){this.locale=e}getFallbackLocale(){return this.fallbackLocale}async setFallbackLocale(e){this.fallbackLocale=e}getLocales(){return["en"]}translate(e){return Ie.development&&console.warn("Lang provider is missing"),e}translateWithDefault(e,t){return Ie.development&&console.warn("Lang provider is missing"),t}}var ht=$e({name:"lang",persist:["locale","fallbackLocale"],initialState:{locale:null,locales:["en"],fallbackLocale:"en"}});var vt=Y(class extends ht{constructor(){super(),D(this,"provider",void 0),this.provider=new ft(this.getState("locale")??this.getBrowserLocale(),this.getState("fallbackLocale"))}async setProvider(e){this.provider=e,this.locales=e.getLocales(),await e.setLocale(this.locale??this.getBrowserLocale()),await e.setFallbackLocale(this.fallbackLocale)}translate(e,t){return this.provider.translate(e,t)??e}translateWithDefault(e,t){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.provider.translateWithDefault(e,t,s)}getBrowserLocale(){const e=this.getState("locales");return navigator.languages.find((t=>e.includes(t)))??"en"}async boot(){this.requireStore().$subscribe((async()=>{await this.provider.setLocale(this.locale??this.getBrowserLocale()),await this.provider.setFallbackLocale(this.fallbackLocale),this.locale?document.querySelector("html")?.setAttribute("lang",this.locale):document.querySelector("html")?.removeAttribute("lang")}),{immediate:!0})}});const gt=vt.translate.bind(vt),_t=vt.translateWithDefault.bind(vt);var bt=$e({name:"errors",initialState:{logs:[],startupErrors:[]},computed:{hasErrors:e=>{let{logs:t}=e;return t.length>0},hasNewErrors:e=>{let{logs:t}=e;return t.some((e=>!e.seen))},hasStartupErrors:e=>{let{startupErrors:t}=e;return t.length>0}}});const yt={Primary:"primary",Secondary:"secondary",Danger:"danger",Clear:"clear"};var xt=Y(class extends bt{constructor(){super(...arguments),D(this,"forceReporting",!1),D(this,"enabled",!0)}enable(){this.enabled=!0}disable(){this.enabled=!1}async inspect(e){const t=Array.isArray(e)?e:[await this.createErrorReport(e)];0!==t.length?mt.openModal(mt.requireComponent(dt.ErrorReportModal),{reports:t}):mt.alert(_t("errors.inspectEmpty","Nothing to inspect!"))}async report(e,t){if(await He.emit("error",{error:e,message:t}),Ie.testing)throw e;if(Ie.development&&this.logError(e),!this.enabled)throw e;if(!Ie.isMounted()){const t=await this.createStartupErrorReport(e);return void(t&&this.setState({startupErrors:this.startupErrors.concat(t)}))}const s=await this.createErrorReport(e),r={report:s,seen:!1,date:new Date};mt.showSnackbar(t??_t("errors.notice","Something went wrong, but it's not your fault. Try again!"),{color:yt.Danger,actions:[{text:_t("errors.viewDetails","View details"),dismiss:!0,handler:()=>mt.openModal(mt.requireComponent(dt.ErrorReportModal),{reports:[s]})}]}),this.setState({logs:[r].concat(this.logs)})}see(e){this.setState({logs:this.logs.map((t=>t.report!==e?t:{...t,seen:!0}))})}seeAll(){this.setState({logs:this.logs.map((e=>({...e,seen:!0})))})}logError(e){console.error(e),re(e)&&e.cause&&this.logError(e.cause)}async createErrorReport(e){return"string"==typeof e?{title:e}:e instanceof Error||e instanceof q?this.createErrorReportFromError(e):re(e)?oe({title:ae(e.name??e.title??_t("errors.unknown","Unknown Error")),description:ae(e.message??e.description??_t("errors.unknownDescription","Unknown error object")),error:e}):{title:_t("errors.unknown","Unknown Error"),error:e}}async createStartupErrorReport(e){return e instanceof ServiceBootError?e.cause instanceof ServiceBootError?null:this.createErrorReport(e.cause):this.createErrorReport(e)}createErrorReportFromError(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return{title:e.name,description:e.message,details:e.stack,error:e,...t}}});function At(e){return"string"==typeof e?e:e instanceof Error||e instanceof q?e.message:re(e)?ae(e.message??e.description??"Unknown error object"):_t("errors.unknown","Unknown Error")}const wt={$errors:xt};function kt(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:()=>!1;const s=e=>t(e)||(e=>(xt.report(e),!0))(e);e.config.errorHandler=s,globalThis.onerror=(e,t,r,o,a)=>s(a??e),globalThis.onunhandledrejection=e=>s(e.reason)}var Gt={async install(e,t){kt(e,t.handleError),await it(e,wt)}};const St={$lang:vt};var Ct={async install(e){e.config.globalProperties.$t??=gt,e.config.globalProperties.$td=_t,await it(e,St)}},$t={async install(){"testing"===import.meta.env.MODE&&(globalThis.testingRuntime={on:function(){return He.on(...arguments)}})}};function jt(e,t){const s=He.on(e,t);l((()=>s()))}function Mt(){const e=i(),s=t((()=>e.class));return[t((()=>ne(e,"class"))),s]}function Et(e){let t=le;c((()=>t=e())),l((()=>t()))}function Ht(e){return e.split(/\s+/).filter((e=>!/^(hover|focus|focus-visible):/.test(e))).join(" ").trim()}function Lt(e,t){return Object.keys(t).reduce(((t,s)=>(t[s]=e[s],t)),{})}const Tt={cancellable:Oe(!0),title:st()};function It(){return Tt}function Rt(e){return Lt(e,Tt)}function Pt(e){return{close:async()=>e.value?.close(),cancellable:t((()=>!!e.value?.cancellable))}}var Bt=u({__name:"AGHeadlessModal",props:It(),setup(t,{expose:s}){const r=t,o=e(null),a=e(!0),n=e(!1),{modal:l}=Fe("modal","could not obtain modal reference from <AGHeadlessModal>, did you render this component manually? Show it using $ui.openModal() instead");async function i(){o.value?.$el&&(a.value=!0)}async function c(e){n.value||(He.emit("modal-will-close",{modal:l,result:e}),await i(),n.value=!0,He.emit("modal-closed",{modal:l,result:e}))}return jt("close-modal",(async({id:e,result:t})=>{e===l.id&&await c(t)})),jt("hide-modal",(async({id:e})=>{e===l.id&&await i()})),jt("show-modal",(async({id:e})=>{e===l.id&&await async function(){o.value?.$el&&(a.value=!1)}()})),s({close:c,cancellable:d(r,"cancellable")}),(e,t)=>(p(),m(f(pe),{ref_key:"$root",ref:o,open:!0,onClose:t[0]||(t[0]=t=>e.cancellable&&c())},{default:h((()=>[v(e.$slots,"default",{close:c})])),_:3},512))}});Bt.__file="src/components/headless/modals/AGHeadlessModal.vue";var Ot=u({__name:"AGModalContext",props:{modal:et(),childIndex:Xe()},setup(e){const t=e;return g("modal",{modal:d(t,"modal"),childIndex:d(t,"childIndex")}),(t,s)=>(p(),m(_(e.modal.component),b(y(e.modal.properties)),null,16))}});Ot.__file="src/components/modals/AGModalContext.vue";const Dt=G("div",{class:"pointer-events-none fixed inset-0 z-50 bg-black/30"},null,-1);var Vt=u({__name:"AGHeadlessModalPanel",setup(e){const s=Fe("modal","could not obtain modal reference from <AGHeadlessModalPanel>, did you render this component manually? Show it using $ui.openModal() instead"),r=t((()=>mt.modals[s.childIndex]??null));return(e,t)=>(p(),m(f(me),null,{default:h((()=>[v(e.$slots,"default"),r.value?(p(),x(A,{key:0},[Dt,w(Ot,{"child-index":f(s).childIndex+1,modal:r.value},null,8,["child-index","modal"])],64)):k("v-if",!0)])),_:3}))}});Vt.__file="src/components/headless/modals/AGHeadlessModalPanel.vue";var qt=u({__name:"AGHeadlessModalTitle",props:{as:st("h2")},setup:e=>(t,s)=>(p(),m(f(fe),{as:e.as},{default:h((()=>[v(t.$slots,"default")])),_:3},8,["as"]))});function zt(e){return t=xe(e,{mangle:!1,headerIds:!1,renderer:z(new Ae,(e=>{e.link=function(e,t,s){return Ae.prototype.link.apply(this,[e,t,s]).replace("<a",'<a target="_blank"')}}))}),ye.sanitize(t,{ADD_ATTR:["target"]});var t}qt.__file="src/components/headless/modals/AGHeadlessModalTitle.vue";var Ut=u({__name:"AGMarkdown",props:{as:st(),inline:Oe(),langKey:st(),langParams:Ke(),text:st()},setup(e){const s=e,r=i(),o=t((()=>s.text??(s.langKey&&gt(s.langKey,s.langParams??{})))),a=t((()=>{if(!o.value)return null;let e=zt(o.value);return s.inline&&(e=e.replace("<p>","<span>").replace("</p>","</span>")),e})),n=()=>S(s.as??(s.inline?"span":"div"),{innerHTML:a.value,...r,class:`${r.class??""} ${s.inline?"":"prose"}`});return(e,t)=>(p(),m(n))}});Ut.__file="src/components/lib/AGMarkdown.vue";const Ft={class:"fixed inset-0 flex items-center justify-center p-8"};var Nt=u({inheritAttrs:!1,__name:"AGModal",props:It(),setup(t,{expose:s}){const r=t,o=e();return s(Pt(o)),(e,t)=>(p(),m(Bt,C({ref_key:"$modal",ref:o},r,{class:"relative z-50"}),{default:h((({close:t})=>[G("div",Ft,[w(Vt,{class:"flex max-h-full max-w-full flex-col overflow-hidden bg-white p-4"},{default:h((()=>[e.title?(p(),m(qt,{key:0,class:"mb-2 text-lg font-semibold"},{default:h((()=>[w(Ut,{text:e.title,inline:""},null,8,["text"])])),_:1})):k("v-if",!0),G("div",C({class:"flex max-h-full flex-col overflow-auto"},e.$attrs),[v(e.$slots,"default",{close:t})],16)])),_:2},1024)])])),_:3},16))}});Nt.__file="src/components/modals/AGModal.vue";const Kt={title:st(),message:tt()};function Wt(){return Kt}var Qt=u({__name:"AGAlertModal",props:Wt(),setup:e=>(e,t)=>(p(),m(Nt,{title:e.title},{default:h((()=>[w(Ut,{text:e.message},null,8,["text"])])),_:1},8,["title"]))});Qt.__file="src/components/modals/AGAlertModal.vue";const Zt={title:st(),message:tt(),acceptText:st(),acceptColor:ze(yt,yt.Primary),cancelText:st(),cancelColor:ze(yt,yt.Clear)};function Yt(){return Zt}function Jt(e){return{renderedAcceptText:t((()=>e.acceptText??_t("ui.accept","Ok"))),renderedCancelText:t((()=>e.cancelText??_t("ui.cancel","Cancel")))}}function Xt(e){return e instanceof HTMLElement?e:es(e)?e.$el:void 0}function es(e){return re(e)&&"$el"in e}function ts(){return $(((e,t)=>{let s;return{get:()=>(e(),s),set(e){s=Xt(e),t()}}}))}var ss=u({__name:"AGHeadlessButton",props:{as:Qe(),href:st(),url:st(),route:st(),routeParams:Qe((()=>({}))),routeQuery:Qe((()=>({}))),submit:Oe()},setup(e,{expose:s}){const r=e,o=ts(),a=t((()=>r.as?{as:r.as,props:{}}:r.route?{as:"router-link",props:{to:oe({name:r.route,params:r.routeParams,query:r.routeQuery})}}:r.href||r.url?{as:"a",props:{target:"_blank",href:r.href||r.url}}:{as:"button",props:{type:r.submit?"submit":"button"}}));return s({$el:o}),(e,t)=>(p(),m(_(a.value.as),C({ref_key:"$root",ref:o},a.value.props),{default:h((()=>[v(e.$slots,"default")])),_:3},16))}});ss.__file="src/components/headless/forms/AGHeadlessButton.vue";var rs=u({__name:"AGButton",props:{color:ze(yt,yt.Primary)},setup(e){const s=e,r=t((()=>{switch(s.color){case yt.Secondary:return["text-white bg-gray-600","hover:bg-gray-500","focus-visible:outline-offset-2 focus-visible:outline-gray-600"].join(" ");case yt.Clear:return"hover:bg-gray-500/20 focus-visible:outline-gray-500/60";case yt.Danger:return["text-white bg-red-600","hover:bg-red-500","focus-visible:outline-offset-2 focus-visible:outline-red-600"].join(" ");default:return["text-white bg-indigo-600","hover:bg-indigo-500","focus-visible:outline-offset-2 focus-visible:outline-indigo-600"].join(" ")}}));return(e,t)=>(p(),m(ss,{class:j(["px-2.5 py-1.5 focus-visible:outline focus-visible:outline-2",r.value])},{default:h((()=>[v(e.$slots,"default")])),_:3},8,["class"]))}});rs.__file="src/components/forms/AGButton.vue";const os={class:"mt-2 flex flex-row-reverse gap-2"};var as=u({__name:"AGConfirmModal",props:Yt(),setup(e){const t=e,{renderedAcceptText:s,renderedCancelText:r}=Jt(t);return(e,t)=>(p(),m(Nt,{cancellable:!1,title:e.title},{default:h((({close:t})=>[w(Ut,{text:e.message},null,8,["text"]),G("div",os,[w(rs,{color:e.acceptColor,onClick:e=>t(!0)},{default:h((()=>[M(E(f(s)),1)])),_:2},1032,["color","onClick"]),w(rs,{color:e.cancelColor,onClick:e=>t()},{default:h((()=>[M(E(f(r)),1)])),_:2},1032,["color","onClick"])])])),_:1},8,["title"]))}});as.__file="src/components/modals/AGConfirmModal.vue";const ns={viewBox:"0 0 20 20",width:"1.2em",height:"1.2em"},ls=[G("path",{fill:"currentColor",d:"m12.95 10.707l.707-.707L8 4.343L6.586 5.757L10.828 10l-4.242 4.243L8 15.657l4.95-4.95z"},null,-1)];var is={name:"zondicons-cheveron-right",render:function(e,t){return p(),x("svg",ns,[...ls])}};const cs={viewBox:"0 0 20 20",width:"1.2em",height:"1.2em"},us=[G("path",{fill:"currentColor",d:"M7.05 9.293L6.343 10L12 15.657l1.414-1.414L9.172 10l4.242-4.243L12 4.343z"},null,-1)];var ds={name:"zondicons-cheveron-left",render:function(e,t){return p(),x("svg",cs,[...us])}};const ps={reports:Ze()};function ms(){return ps}function fs(s){const r=e(0),o=t((()=>s.reports[r.value])),a=t((()=>o.value.details?.trim()||_t("errors.detailsEmpty","This error is missing a stacktrace."))),n=_t("errors.previousReport","Show previous report"),l=_t("errors.nextReport","Show next report");return{activeReportIndex:r,details:a,nextReportText:l,previousReportText:n,report:o}}const hs={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},vs=[G("path",{fill:"currentColor",d:"M20 19V7H4v12h16m0-16a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h16m-7 14v-2h5v2h-5m-3.42-4L5.57 9H8.4l3.3 3.3c.39.39.39 1.03 0 1.42L8.42 17H5.59l3.99-4Z"},null,-1)];var gs={name:"mdi-console",render:function(e,t){return p(),x("svg",hs,[...vs])}};const _s={viewBox:"0 0 20 20",width:"1.2em",height:"1.2em"},bs=[G("path",{fill:"currentColor",d:"M6 6V2c0-1.1.9-2 2-2h10a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-4v4a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V8c0-1.1.9-2 2-2h4zm2 0h4a2 2 0 0 1 2 2v4h4V2H8v4zM2 8v10h10V8H2z"},null,-1)];var ys={name:"zondicons-copy",render:function(e,t){return p(),x("svg",_s,[...bs])}};const xs={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},As=[G("path",{fill:"currentColor",d:"M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5c.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34c-.46-1.16-1.11-1.47-1.11-1.47c-.91-.62.07-.6.07-.6c1 .07 1.53 1.03 1.53 1.03c.87 1.52 2.34 1.07 2.91.83c.09-.65.35-1.09.63-1.34c-2.22-.25-4.55-1.11-4.55-4.92c0-1.11.38-2 1.03-2.71c-.1-.25-.45-1.29.1-2.64c0 0 .84-.27 2.75 1.02c.79-.22 1.65-.33 2.5-.33c.85 0 1.71.11 2.5.33c1.91-1.29 2.75-1.02 2.75-1.02c.55 1.35.2 2.39.1 2.64c.65.71 1.03 1.6 1.03 2.71c0 3.82-2.34 4.66-4.57 4.91c.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"},null,-1)];var ws={name:"mdi-github",render:function(e,t){return p(),x("svg",xs,[...As])}};const ks={class:"flex"};var Gs=u({__name:"AGErrorReportModalButtons",props:{report:et()},setup(e){const s=e,r=t((()=>s.report.description?`${s.report.title}: ${s.report.description}`:s.report.title)),o=t((()=>{if(!Ie.sourceUrl)return!1;const e=encodeURIComponent(r.value),t=encodeURIComponent(["[Please, explain here what you were trying to do when this error appeared]","","Error details:","```",ie(s.report.details??"Details missing from report",1800-e.length-Ie.sourceUrl.length).trim(),"```"].join("\n"));return`${Ie.sourceUrl}/issues/new?title=${e}&body=${t}`})),a=t((()=>z([{id:"clipboard",description:"Copy to clipboard",iconComponent:ys,async handler(){await navigator.clipboard.writeText(`${r.value}\n\n${s.report.details}`),mt.showSnackbar(_t("errors.copiedToClipboard","Debug information copied to clipboard"))}},{id:"console",description:"Log to console",iconComponent:gs,handler(){const e=s.report.error??s.report;window.error=e,console.error(e),mt.showSnackbar(_t("errors.addedToConsole","You can now use the **error** variable in the console"))}}],(e=>{o.value&&e.push({id:"github",description:"Report in GitHub",iconComponent:ws,url:o.value})}))));return(e,t)=>(p(),x("div",ks,[(p(!0),x(A,null,H(a.value,((t,s)=>v(e.$slots,"default",C(t,{key:s}),(()=>[w(rs,{color:"clear",url:t.url,title:e.$td(`errors.report_${t.id}`,t.description),"aria-label":e.$td(`errors.report_${t.id}`,t.description),onClick:t.handler},{default:h((()=>[(p(),m(_(t.iconComponent),{class:"h-4 w-4","aria-hidden":"true"}))])),_:2},1032,["url","title","aria-label","onClick"])])))),128))]))}});Gs.__file="src/components/modals/AGErrorReportModalButtons.vue";var Ss=u({__name:"AGErrorReportModalTitle",props:{report:et(),currentReport:We(),totalReports:We()},setup(e){const s=e,r=t((()=>!s.totalReports||s.totalReports<=1?s.report.title:`${s.report.title} (${s.currentReport}/${s.totalReports})`));return(e,t)=>(p(),m(Ut,{text:r.value,inline:""},null,8,["text"]))}});Ss.__file="src/components/modals/AGErrorReportModalTitle.vue";const Cs={class:"flex items-center justify-between text-lg font-medium"},$s={class:"flex items-center"},js=["textContent"];var Ms=u({__name:"AGErrorReportModal",props:ms(),setup(e){const t=e,{activeReportIndex:s,details:r,nextReportText:o,previousReportText:a,report:n}=fs(t);return(e,t)=>(p(),m(Nt,null,{default:h((()=>[G("div",null,[G("h2",Cs,[G("div",$s,[w(Ss,{report:f(n),"current-report":f(s)+1,"total-reports":e.reports.length},null,8,["report","current-report","total-reports"]),e.reports.length>1?(p(),x(A,{key:0},[w(rs,{color:"clear",disabled:0===f(s),title:f(a),"aria-label":f(a),onClick:t[0]||(t[0]=e=>s.value--)},{default:h((()=>[w(f(ds),{"aria-hidden":"true",class:"h-4 w-4"})])),_:1},8,["disabled","title","aria-label"]),w(rs,{color:"clear",disabled:f(s)===e.reports.length-1,title:f(o),"aria-label":f(o),onClick:t[1]||(t[1]=e=>s.value++)},{default:h((()=>[w(f(is),{"aria-hidden":"true",class:"h-4 w-4"})])),_:1},8,["disabled","title","aria-label"])],64)):k("v-if",!0)]),w(Gs,{report:f(n)},null,8,["report"])]),f(n).description?(p(),m(Ut,{key:0,text:f(n).description,class:"mt-2"},null,8,["text"])):k("v-if",!0)]),G("pre",{class:"h-full overflow-auto bg-gray-200 p-4 text-xs text-red-900",textContent:E(f(r))},null,8,js)])),_:1}))}});Ms.__file="src/components/modals/AGErrorReportModal.vue";const Es={message:st()};function Hs(){return Es}function Ls(e){return{renderedMessage:t((()=>e.message??_t("ui.loading","Loading...")))}}var Ts=u({__name:"AGLoadingModal",props:Hs(),setup(e){const t=e,{renderedMessage:s}=Ls(t);return(e,t)=>(p(),m(Nt,{cancellable:!1},{default:h((()=>[w(Ut,{text:f(s)},null,8,["text"])])),_:1}))}});Ts.__file="src/components/modals/AGLoadingModal.vue";const Is={title:st(),message:tt(),label:st(),defaultValue:st(),placeholder:st(),acceptText:st(),acceptColor:ze(yt,yt.Primary),cancelText:st(),cancelColor:ze(yt,yt.Clear)};function Rs(){return Is}function Ps(e){return{renderedAcceptText:t((()=>e.acceptText??_t("ui.accept","Ok"))),renderedCancelText:t((()=>e.cancelText??_t("ui.cancel","Cancel")))}}var Bs=u({__name:"AGForm",props:{form:Qe()},emits:["submit"],setup(e,{emit:t}){let s;const r=e,o=t;return L((e=>{s?.(),s=r.form?.on("submit",(()=>o("submit"))),e((()=>s?.()))})),g("form",r.form),(t,s)=>(p(),x("form",{onSubmit:s[0]||(s[0]=T((t=>e.form?.submit()),["prevent"]))},[v(t.$slots,"default")],32))}});Bs.__file="src/components/forms/AGForm.vue";const Os={name:st(),label:st(),description:st(),modelValue:Ke([String,Number,Boolean])};function Ds(){return Os}function Vs(e){return Lt(e,Os)}var qs=u({__name:"AGHeadlessInput",props:{as:st("div"),...Ds()},emits:["update:modelValue"],setup(s,{expose:o,emit:a}){const n=a,l=s,i=e(),c=t((()=>u&&l.name?u.errors[l.name]??null:null)),u=r("form",null),d={$el:i,id:`input-${se()}`,name:t((()=>l.name)),label:t((()=>l.label)),description:t((()=>l.description)),value:t((()=>u&&l.name?u.getFieldValue(l.name):l.modelValue)),errors:I(c),update(e){u&&l.name?u.setFieldValue(l.name,e):n("update:modelValue",e)},__setElement(e){i.value=e}};return g("input",d),o(d),(e,t)=>s.as?(p(),m(_(s.as),{key:0},{default:h((()=>[v(e.$slots,"default")])),_:3})):v(e.$slots,"default",{key:1})}});qs.__file="src/components/headless/forms/AGHeadlessInput.vue";var zs=u({inheritAttrs:!1,__name:"AGHeadlessInputDescription",setup(e){const s=Fe("input","<AGHeadlessInputDescription> must be a child of a <AGHeadlessInput>"),r=t((()=>"string"==typeof s.description?s.description:"")),o=t((()=>!!s.description));return(e,t)=>v(e.$slots,"default",{id:`${f(s).id}-description`},(()=>[o.value?(p(),m(Ut,C({key:0},e.$attrs,{id:`${f(s).id}-description`,text:r.value}),null,16,["id","text"])):k("v-if",!0)]))}});zs.__file="src/components/headless/forms/AGHeadlessInputDescription.vue";const Us=["id"];var Fs=u({__name:"AGHeadlessInputError",setup(e){const s=Fe("input","<AGHeadlessInputError> must be a child of a <AGHeadlessInput>"),r=t((()=>s.errors?_t(`errors.${s.errors[0]}`,`Error: ${s.errors[0]}`):null));return(e,t)=>r.value?(p(),x("p",{key:0,id:`${f(s).id}-error`},E(r.value),9,Us)):k("v-if",!0)}});function Ns(e,t){const s=r("form",null),o=s?.on("focus",(s=>e.name===s&&t()));l((()=>o?.()))}Fs.__file="src/components/headless/forms/AGHeadlessInputError.vue";const Ks=["id","name","type","aria-invalid","aria-describedby","checked"];var Ws=u({__name:"AGHeadlessInputInput",props:{type:st("text")},setup(s){const r=s,o=e(),a=Fe("input","<AGHeadlessInputInput> must be a child of a <AGHeadlessInput>"),n=t((()=>a.name??void 0)),l=t((()=>a.value)),i=t((()=>{if("checkbox"===r.type)return!!l.value}));function c(){o.value&&a.update(function(){if(!o.value)return null;switch(r.type){case"checkbox":return o.value.checked;case"date":return o.value.valueAsDate;default:return o.value.value}}())}return Ns(a,(()=>o.value?.focus())),L((()=>a.__setElement(o.value))),L((()=>{o.value&&("date"!==r.type?o.value.value=l.value:o.value.valueAsDate=l.value)})),(e,t)=>(p(),x("input",{id:f(a).id,ref_key:"$input",ref:o,name:n.value,type:s.type,"aria-invalid":f(a).errors?"true":"false","aria-describedby":f(a).errors?`${f(a).id}-error`:f(a).description?`${f(a).id}-description`:void 0,checked:i.value,onInput:c},null,40,Ks))}});Ws.__file="src/components/headless/forms/AGHeadlessInputInput.vue";const Qs=["for"];var Zs=u({__name:"AGHeadlessInputLabel",setup(e){const s=Fe("input","<AGHeadlessInputLabel> must be a child of a <AGHeadlessInput>"),r=R(),o=t((()=>!(!s.label&&!r.default)));return(e,t)=>o.value?(p(),x("label",{key:0,for:f(s).id},[v(e.$slots,"default",{},(()=>[M(E(f(s).label),1)]))],8,Qs)):k("v-if",!0)}});Zs.__file="src/components/headless/forms/AGHeadlessInputLabel.vue";const Ys={class:"absolute bottom-0 left-0 translate-y-full"};var Js=u({inheritAttrs:!1,__name:"AGInput",props:Ds(),setup(e){const t=e,s=De(),[r,o]=Mt();return(e,a)=>(p(),m(qs,C({ref_key:"$input",ref:s,class:["relative flex flex-col items-center",f(o)]},t),{default:h((()=>[w(Zs,{class:"sr-only"}),w(Ws,C(f(r),{class:["block w-full border-0 py-1.5 text-gray-900 ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600",{"ring-1 ring-red-500":f(s)?.errors}]}),null,16,["class"]),w(zs),G("div",Ys,[w(Fs,{class:"mt-1 text-sm text-red-500"})])])),_:1},16,["class"]))}});Js.__file="src/components/forms/AGInput.vue";const Xs={String:"string",Number:"number",Boolean:"boolean",Object:"object",Date:"date"},er=new WeakMap;class tr extends U{constructor(s){super(),D(this,"errors",void 0),D(this,"_fields",void 0),D(this,"_data",void 0),D(this,"_submitted",void 0),D(this,"_errors",void 0),D(this,"_listeners",{}),this._fields=s,this._submitted=e(!1),this._data=this.getInitialData(s),this._errors=this.getInitialErrors(s),er.set(this,t((()=>!Object.values(this._errors).some((e=>null!==e))))),this.errors=I(this._errors)}get valid(){return!!er.get(this)?.value}get submitted(){return this._submitted.value}setFieldValue(e,t){this._data[e]=t,this._submitted.value&&this.validate()}getFieldValue(e){return this._data[e]}data(){return{...this._data}}validate(){const e=Object.entries(this._fields).reduce(((e,t)=>{let[s,r]=t;return e[s]=this.getFieldErrors(s,r),e}),{});return this.resetErrors(e),this.valid}reset(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this._submitted.value=!1,e.keepData||this.resetData(),e.keepErrors||this.resetErrors()}submit(){this._submitted.value=!0;const e=this.validate();return e&&this._listeners.submit?.forEach((e=>e())),e}on(e,t){return this._listeners[e]??=[],this._listeners[e]?.push(t),()=>this.off(e,t)}off(e,t){J(this._listeners[e]??[],t)}async focus(e){await n(),this._listeners.focus?.forEach((t=>t(e)))}__get(e){return e in this._fields?this._data[e]:super.__get(e)}__set(e,t){e in this._fields?Object.assign(this._data,{[e]:t}):super.__set(e,t)}getFieldErrors(e,t){const s=[];return t.rules?.includes("required")&&!this._data[e]&&s.push("required"),s.length>0?s:null}getInitialData(e){if(this.static().isConjuring())return{};const t=Object.entries(e).reduce(((e,t)=>{let[s,r]=t;return e[s]=r.default??null,e}),{});return o(t)}getInitialErrors(e){if(this.static().isConjuring())return{};const t=Object.keys(e).reduce(((e,t)=>(e[t]=null,e)),{});return o(t)}resetData(){for(const[e,t]of Object.entries(this._fields))this._data[e]=t.default??null}resetErrors(e){Object.keys(this._errors).forEach((e=>delete this._errors[e])),e&&Object.assign(this._errors,e)}}function sr(e){return new tr(e)}function rr(e){return{default:e,type:Xs.Boolean}}function or(e){return{default:e,type:Xs.Date}}function ar(e){return{default:e,type:Xs.Boolean,rules:"required"}}function nr(e){return{default:e,type:Xs.Date,rules:"required"}}function lr(e){return{default:e,type:Xs.Number,rules:"required"}}function ir(e){return{default:e,type:Xs.String,rules:"required"}}function cr(e){return{default:e,type:Xs.Number}}function ur(e){return{default:e,type:Xs.String}}const dr={class:"mt-2 flex flex-row-reverse gap-2"};var pr=u({__name:"AGPromptModal",props:Rs(),setup(e){const t=e,s=sr({draft:ir(t.defaultValue??"")}),{renderedAcceptText:r,renderedCancelText:o}=Ps(t);return(e,t)=>(p(),m(Nt,{cancellable:!1,title:e.title},{default:h((({close:t})=>[w(Ut,{text:e.message},null,8,["text"]),w(Bs,{form:f(s),onSubmit:e=>t(f(s).draft)},{default:h((()=>[w(Js,{name:"draft",placeholder:e.placeholder,label:e.label},null,8,["placeholder","label"]),G("div",dr,[w(rs,{color:e.acceptColor,submit:""},{default:h((()=>[M(E(f(r)),1)])),_:1},8,["color"]),w(rs,{color:e.cancelColor,onClick:e=>t()},{default:h((()=>[M(E(f(o)),1)])),_:2},1032,["color","onClick"])])])),_:2},1032,["form","onSubmit"])])),_:1},8,["title"]))}});pr.__file="src/components/modals/AGPromptModal.vue";const mr={class:"pointer-events-auto"};var fr=u({__name:"AGHeadlessSnackbar",setup:e=>(e,t)=>(p(),x("div",mr,[v(e.$slots,"default")]))});fr.__file="src/components/headless/snackbars/AGHeadlessSnackbar.vue";const hr=ne(yt,["Primary","Clear"]),vr={id:tt(),message:tt(),actions:Be((()=>[])),color:ze(hr,yt.Secondary)};function gr(){return vr}function _r(e){return{activate:function(t){t.handler?.(),t.dismiss&&mt.hideSnackbar(e.id)}}}var br=u({__name:"AGSnackbar",props:gr(),setup(e){const s=e,{activate:r}=_r(s),o=t((()=>s.color===yt.Danger?"bg-red-200 text-red-900":"bg-gray-900 text-white"));return(e,t)=>(p(),m(fr,{class:j(["flex flex-row items-center justify-center gap-3 p-4",o.value])},{default:h((()=>[w(Ut,{text:e.message,inline:""},null,8,["text"]),(p(!0),x(A,null,H(e.actions,((t,s)=>(p(),m(rs,{key:s,color:e.color,onClick:e=>f(r)(t)},{default:h((()=>[M(E(t.text),1)])),_:2},1032,["color","onClick"])))),128))])),_:1},8,["class"]))}});br.__file="src/components/snackbars/AGSnackbar.vue";const yr={class:"grid flex-grow place-items-center"},xr={class:"flex flex-col items-center space-y-6 p-8"},Ar={class:"mt-2 text-center text-4xl font-medium text-red-600"},wr={class:"mt-4 flex flex-col space-y-4"};var kr=u({__name:"AGStartupCrash",setup:e=>(e,t)=>(p(),x("div",yr,[G("div",xr,[G("h1",Ar,E(e.$td("startupCrash.title","Something went wrong!")),1),w(Ut,{text:e.$td("startupCrash.message","Something failed trying to start the application.\n\nHere's some things you can do:"),class:"mt-4 text-center"},null,8,["text"]),G("div",wr,[w(rs,{color:"danger",onClick:t[0]||(t[0]=t=>e.$app.reload())},{default:h((()=>[M(E(e.$td("startupCrash.reload","Try again")),1)])),_:1}),w(rs,{color:"danger",onClick:t[1]||(t[1]=t=>e.$errors.inspect(e.$errors.startupErrors))},{default:h((()=>[M(E(e.$td("startupCrash.inspect","View error details")),1)])),_:1})])])]))});kr.__file="src/components/lib/AGStartupCrash.vue";const Gr={$ui:mt};var Sr={async install(e,t){const s={[dt.AlertModal]:Qt,[dt.ConfirmModal]:as,[dt.ErrorReportModal]:Ms,[dt.LoadingModal]:Ts,[dt.PromptModal]:pr,[dt.Snackbar]:br,[dt.StartupCrash]:kr};Object.entries({...s,...t.components}).forEach((e=>{let[t,s]=e;return mt.registerComponent(t,s)})),await it(e,Gr)}};async function Cr(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const s=[$t,ot,Gt,Ct,ct,Sr,...t.plugins??[]];await Pe(s,e,t),await(t.install?.(e)),await He.emit("application-ready")}async function $r(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const s=P(e);await Cr(s,t),s.mount("#app"),s._container?.classList.remove("loading"),await He.emit("application-mounted")}const jr={key:0};var Mr=u({__name:"AGAppModals",setup(e){const s=t((()=>mt.modals[0]??null));return(e,t)=>s.value?(p(),x("aside",jr,[w(Ot,{"child-index":1,modal:s.value},null,8,["modal"])])):k("v-if",!0)}});Mr.__file="src/components/AGAppModals.vue";const Er={"aria-live":"assertive",class:"pointer-events-none fixed inset-0 z-50 flex items-end px-4 py-6 sm:p-6"},Hr={class:"flex w-full flex-col items-end space-y-4"};const Lr={render:function(e,t){return p(),x("div",Er,[G("div",Hr,[(p(!0),x(A,null,H(e.$ui.snackbars,(e=>(p(),m(_(e.component),C({id:e.id,key:e.id},e.properties),null,16,["id"])))),128))])])},__file:"src/components/AGAppSnackbars.vue"};var Tr=Lr,Ir=u({__name:"AGAppOverlays",setup(t){const s=e(null),r=e(!0);return jt("show-overlays-backdrop",(async()=>{s.value&&r.value&&(r.value=!1,s.value.classList.remove("opacity-0"))})),jt("hide-overlays-backdrop",(async()=>{s.value&&!r.value&&(r.value=!0,s.value.classList.add("opacity-0"))})),(e,t)=>(p(),x(A,null,[G("div",{id:"aerogel-overlays-backdrop",ref_key:"$backdrop",ref:s,class:"pointer-events-none fixed inset-0 z-50 bg-black/30 opacity-0"},null,512),w(Mr),w(Tr)],64))}});Ir.__file="src/components/AGAppOverlays.vue";const Rr={class:"flex min-h-full flex-col text-base font-normal leading-tight text-gray-900 antialiased"};var Pr=u({__name:"AGAppLayout",setup:e=>(e,t)=>(p(),x("div",Rr,[e.$errors.hasStartupErrors?v(e.$slots,"startup-crash",{key:0},(()=>[(p(),m(_(e.$ui.requireComponent(f(dt).StartupCrash))))])):v(e.$slots,"default",{key:1}),w(Ir)]))});Pr.__file="src/components/AGAppLayout.vue";const Br={class:"ml-2"};var Or=u({inheritAttrs:!1,__name:"AGCheckbox",props:{name:st()},emits:["update:modelValue"],setup(e){const t=De();return(s,r)=>(p(),m(qs,{ref_key:"$input",ref:t,name:e.name,class:"flex","onUpdate:modelValue":r[0]||(r[0]=e=>s.$emit("update:modelValue",e))},{default:h((()=>[w(Ws,C(s.$attrs,{type:"checkbox",class:{"text-indigo-600 focus:ring-indigo-600":!f(t)?.errors,"border-red-200 text-red-600 focus:ring-red-600":f(t)?.errors}}),null,16,["class"]),G("div",Br,[s.$slots.default?(p(),m(Zs,{key:0},{default:h((()=>[v(s.$slots,"default")])),_:3})):k("v-if",!0),w(Fs,{class:"text-sm text-red-600"})])])),_:3},8,["name"]))}});Or.__file="src/components/forms/AGCheckbox.vue";const Dr={viewBox:"0 0 20 20",width:"1.2em",height:"1.2em"},Vr=[G("path",{fill:"currentColor",d:"m9.293 12.95l.707.707L15.657 8l-1.414-1.414L10 10.828L5.757 6.586L4.343 8z"},null,-1)];var qr={name:"zondicons-cheveron-down",render:function(e,t){return p(),x("svg",Dr,[...Vr])}};const zr={name:st(),label:st(),options:Ze(),noSelectionText:st(),optionsText:Ke()},Ur=["update:modelValue"];function Fr(){return zr}function Nr(){return[...Ur]}function Kr(e){return Lt(e,zr)}var Wr=u({__name:"AGHeadlessSelect",props:{modelValue:Ke(),...Fr()},emits:Nr(),setup(e,{expose:s,emit:o}){const a=o,n=e,l=t((()=>"function"==typeof n.optionsText?n.optionsText:"string"==typeof n.optionsText?e=>ae(e[n.optionsText]):e=>ae(e))),i=r("form",null),c=t((()=>n.noSelectionText??_t("select.noSelection","-"))),u=t((()=>i&&n.name?i.getFieldValue(n.name):n.modelValue)),d=t((()=>i&&n.name?i.errors[n.name]??null:null));function _(e){i&&n.name?i.setFieldValue(n.name,e):a("update:modelValue",e)}const b={id:`select-${se()}`,noSelectionText:c,selectedOption:u,errors:d,options:t((()=>n.options)),label:t((()=>n.label)),buttonText:t((()=>null===u.value?c.value:l.value(u.value))),renderText:l,update:_};return g("select",b),s(b),(e,t)=>(p(),m(f(he),{"model-value":u.value,"onUpdate:modelValue":t[0]||(t[0]=e=>_(e))},{default:h((({value:t,open:s,disabled:r})=>[v(e.$slots,"default",{value:t,open:s,disabled:r})])),_:3},8,["model-value"]))}});Wr.__file="src/components/headless/forms/AGHeadlessSelect.vue";var Qr=u({__name:"AGHeadlessSelectButton",props:{textClass:st()},setup(e){const t=Fe("select","<AGHeadlessSelectButton> must be a child of a <AGHeadlessSelect>");return(s,r)=>(p(),m(f(ve),null,{default:h((({value:r,open:o,disabled:a})=>[v(s.$slots,"default",{value:r,open:o,disabled:a},(()=>[G("span",{class:j(e.textClass)},E(f(t)?.buttonText),3)])),v(s.$slots,"icon")])),_:3}))}});Qr.__file="src/components/headless/forms/AGHeadlessSelectButton.vue";const Zr=["id"];var Yr=u({__name:"AGHeadlessSelectError",setup(e){const s=Fe("select","<AGHeadlessSelectError> must be a child of a <AGHeadlessSelect>"),r=t((()=>s.errors?_t(`errors.${s.errors[0]}`,`Error: ${s.errors[0]}`):null));return(e,t)=>r.value?(p(),x("p",{key:0,id:`${f(s).id}-error`},E(r.value),9,Zr)):k("v-if",!0)}});Yr.__file="src/components/headless/forms/AGHeadlessSelectError.vue";var Jr=u({__name:"AGHeadlessSelectLabel",setup(e){const s=Fe("select","<AGHeadlessSelectLabel> must be a child of a <AGHeadlessSelect>"),r=R(),o=t((()=>!(!s.label&&!r.default)));return(e,t)=>o.value?(p(),m(f(ge),{key:0},{default:h((({open:t,disabled:r})=>[v(e.$slots,"default",{open:t,disabled:r},(()=>[M(E(f(s).label),1)]))])),_:3})):k("v-if",!0)}});Jr.__file="src/components/headless/forms/AGHeadlessSelectLabel.vue";var Xr=u({__name:"AGHeadlessSelectOption",props:{value:Je(),selectedClass:st(),unselectedClass:st(),activeClass:st(),inactiveClass:st()},setup(e){const t=Fe("select","<AGHeadlessSelectOption> must be a child of a <AGHeadlessSelect>");return(s,r)=>(p(),m(f(_e),{value:e.value,as:"template"},{default:h((({active:r,selected:o,disabled:a})=>[v(s.$slots,"default",{active:r,selected:o,disabled:a},(()=>[G("li",{class:j({[e.activeClass??"active"]:r,[e.inactiveClass??"inactive"]:!r,[e.selectedClass??"selected"]:o,[e.unselectedClass??"unselected"]:!o})},E(f(t).renderText(e.value)),3)]))])),_:3},8,["value"]))}});Xr.__file="src/components/headless/forms/AGHeadlessSelectOption.vue";const eo={class:"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2"};var to=u({__name:"AGSelect",props:Fr(),emits:Nr(),setup(e){const t=e,s=De();return(e,r)=>(p(),m(Wr,C(t,{ref_key:"$select",ref:s,as:"div","onUpdate:modelValue":r[0]||(r[0]=t=>e.$emit("update:modelValue",t))}),{default:h((()=>[w(Jr,{class:"block text-sm font-medium leading-6 text-gray-900"}),G("div",{class:j(["relative",{"mt-2":f(s)?.label}])},[w(Qr,{class:j(["relative w-full cursor-default bg-white py-1.5 pl-3 pr-10 text-left text-gray-900 ring-1 ring-inset ring-gray-300 focus:outline-none focus:ring-2 focus:ring-indigo-600",{"ring-1 ring-red-500":f(s)?.errors}]),"text-class":"block truncate"},{icon:h((()=>[G("span",eo,[w(f(qr),{class:"h-5 w-5 text-gray-400"})])])),_:1},8,["class"]),w(f(be),{class:"absolute z-10 mt-1 max-h-60 w-full overflow-auto border bg-white py-1 text-base ring-1 ring-black ring-opacity-5 focus:outline-none"},{default:h((()=>[(p(!0),x(A,null,H(f(s)?.options??[],((e,t)=>(p(),m(Xr,{key:t,value:e,class:"relative block cursor-default select-none truncate py-2 pl-3 pr-9","selected-class":"font-semibold","unselected-class":"font-normal","active-class":"bg-indigo-600 text-white","inactive-class":"text-gray-900"},null,8,["value"])))),128))])),_:1})],2),w(Yr,{class:"mt-2 text-sm text-red-600"})])),_:1},16))}});to.__file="src/components/forms/AGSelect.vue";const so=["id","name","value","aria-invalid","aria-describedby"];var ro=u({__name:"AGHeadlessInputTextArea",setup(s){const r=e(),o=Fe("input","<AGHeadlessInputTextArea> must be a child of a <AGHeadlessInput>"),a=t((()=>o.name??void 0)),n=t((()=>o.value));function l(){r.value&&o.update(r.value.value)}return L((()=>o.__setElement(r.value))),Ns(o,(()=>r.value?.focus())),(e,t)=>(p(),x("textarea",{id:f(o).id,ref_key:"$textArea",ref:r,name:a.value,value:n.value,"aria-invalid":f(o).errors?"true":"false","aria-describedby":f(o).errors?`${f(o).id}-error`:f(o).description?`${f(o).id}-description`:void 0,onInput:l},null,40,so))}});ro.__file="src/components/headless/forms/AGHeadlessInputTextArea.vue";var oo=u({__name:"AGErrorMessage",props:{error:et()},setup(e){const s=e,r=t((()=>At(s.error)));return(e,t)=>(p(),m(Ut,{text:r.value,inline:""},null,8,["text"]))}});oo.__file="src/components/lib/AGErrorMessage.vue";var ao=u({__name:"AGLink",setup:e=>(e,t)=>(p(),m(ss,{class:"font-medium hover:underline"},{default:h((()=>[v(e.$slots,"default")])),_:3}))});ao.__file="src/components/lib/AGLink.vue";var no=u({__name:"AGMeasured",props:{as:st("span")},setup(t){const s=e(!1);return(e,r)=>{const o=B("measure");return O((p(),m(_(t.as),{class:j({"!invisible !absolute !w-auto":!s.value})},{default:h((()=>[v(e.$slots,"default")])),_:3},8,["class"])),[[o,()=>s.value=!0]])}}});no.__file="src/components/lib/AGMeasured.vue";var lo=u({__name:"AGModalTitle",setup:e=>(e,t)=>(p(),m(qt,{class:"mb-2 font-semibold"},{default:h((()=>[v(e.$slots,"default")])),_:3}))});lo.__file="src/components/modals/AGModalTitle.vue";class io{}async function co(e){await e.run()}export{Qt as AGAlertModal,Pr as AGAppLayout,Ir as AGAppOverlays,rs as AGButton,Or as AGCheckbox,as as AGConfirmModal,oo as AGErrorMessage,Gs as AGErrorReportModalButtons,Ss as AGErrorReportModalTitle,Bs as AGForm,ss as AGHeadlessButton,qs as AGHeadlessInput,zs as AGHeadlessInputDescription,Fs as AGHeadlessInputError,Ws as AGHeadlessInputInput,Zs as AGHeadlessInputLabel,ro as AGHeadlessInputTextArea,Bt as AGHeadlessModal,Vt as AGHeadlessModalPanel,qt as AGHeadlessModalTitle,Wr as AGHeadlessSelect,Qr as AGHeadlessSelectButton,Yr as AGHeadlessSelectError,Jr as AGHeadlessSelectLabel,Xr as AGHeadlessSelectOption,fr as AGHeadlessSnackbar,Js as AGInput,ao as AGLink,Ts as AGLoadingModal,Ut as AGMarkdown,no as AGMeasured,Nt as AGModal,Ot as AGModalContext,lo as AGModalTitle,pr as AGPromptModal,to as AGSelect,br as AGSnackbar,kr as AGStartupCrash,Ie as App,Te as AppService,nt as Cache,at as CacheService,yt as Colors,xt as Errors,Me as EventListenerPriorities,He as Events,Ee as EventsService,tr as Form,Xs as FormFieldTypes,io as Job,vt as Lang,je as Service,hr as SnackbarColors,mt as UI,dt as UIComponents,pt as UIService,Kt as alertModalProps,Be as arrayProp,rr as booleanInput,Oe as booleanProp,it as bootServices,$r as bootstrap,Cr as bootstrapApplication,De as componentRef,Ve as computedAsync,Zt as confirmModalProps,or as dateInput,qe as defineDirective,Re as definePlugin,$e as defineServiceState,Ce as defineServiceStore,co as dispatch,ts as elementRef,ze as enumProp,ps as errorReportModalProps,Vs as extractInputProps,Rt as extractModalProps,Kr as extractSelectProps,Xt as getElement,At as getErrorMessage,Se as getPiniaStore,es as hasElement,Ne as injectOrFail,Ue as injectReactive,Fe as injectReactiveOrFail,Os as inputProps,Pe as installPlugins,Es as loadingModalProps,Ke as mixedProp,Tt as modalProps,cr as numberInput,We as numberProp,Qe as objectProp,Et as onCleanMounted,Ns as onFormFocus,Is as promptModalProps,Ht as removeInteractiveClasses,Ze as requiredArrayProp,ar as requiredBooleanInput,nr as requiredDateInput,Ye as requiredEnumProp,Je as requiredMixedProp,lr as requiredNumberInput,Xe as requiredNumberProp,et as requiredObjectProp,ir as requiredStringInput,tt as requiredStringProp,Ge as resetPiniaStore,Ur as selectEmits,zr as selectProps,vr as snackbarProps,ur as stringInput,st as stringProp,gt as translate,_t as translateWithDefault,Wt as useAlertModalProps,Jt as useConfirmModal,Yt as useConfirmModalProps,fs as useErrorReportModal,ms as useErrorReportModalProps,jt as useEvent,sr as useForm,Mt as useInputAttrs,Ds as useInputProps,Ls as useLoadingModal,Hs as useLoadingModalProps,Pt as useModalExpose,It as useModalProps,Ps as usePromptModal,Rs as usePromptModalProps,Nr as useSelectEmits,Fr as useSelectProps,_r as useSnackbar,gr as useSnackbarProps};
1
+ import e from"virtual:aerogel";import{ref as t,computed as s,watch as r,inject as o,reactive as n,markRaw as a,nextTick as l,onUnmounted as i,useAttrs as c,onMounted as u,toRaw as d,defineComponent as p,toRef as m,openBlock as h,createBlock as f,resolveDynamicComponent as v,withCtx as g,renderSlot as b,unref as _,provide as y,normalizeProps as x,guardReactiveProps as w,createElementBlock as A,Fragment as k,createElementVNode as S,normalizeClass as G,createVNode as C,createCommentVNode as $,h as j,mergeProps as M,customRef as E,createTextVNode as H,toDisplayString as L,renderList as T,watchEffect as P,withModifiers as I,readonly as R,useSlots as q,createApp as B,resolveDirective as O,withDirectives as D,normalizeStyle as V}from"vue";import z from"@babel/runtime/helpers/esm/defineProperty";import{JSError as U,tap as F,MagicObject as N,PromisedValue as W,Storage as K,objectOnly as J,arrayFrom as Q,isEmpty as Z,objectDeepClone as X,fail as Y,facade as ee,arrayRemove as te,updateLocationQueryParameters as se,forever as re,after as oe,uuid as ne,required as ae,isObject as le,objectWithoutEmpty as ie,toString as ce,objectWithout as ue,noop as de,stringMatchAll as pe,isInstanceOf as me,stringExcerpt as he,ListenersManager as fe,toError as ve,round as ge}from"@noeldemartin/utils";import"core-js/modules/esnext.async-iterator.for-each.js";import"core-js/modules/esnext.iterator.constructor.js";import"core-js/modules/esnext.iterator.for-each.js";import"core-js/modules/esnext.async-iterator.reduce.js";import"core-js/modules/esnext.iterator.reduce.js";import"core-js/modules/esnext.set.add-all.js";import"core-js/modules/esnext.set.delete-all.js";import"core-js/modules/esnext.set.difference.js";import"core-js/modules/esnext.set.every.js";import"core-js/modules/esnext.set.filter.js";import"core-js/modules/esnext.set.find.js";import"core-js/modules/esnext.set.intersection.js";import"core-js/modules/esnext.set.is-disjoint-from.js";import"core-js/modules/esnext.set.is-subset-of.js";import"core-js/modules/esnext.set.is-superset-of.js";import"core-js/modules/esnext.set.join.js";import"core-js/modules/esnext.set.map.js";import"core-js/modules/esnext.set.reduce.js";import"core-js/modules/esnext.set.some.js";import"core-js/modules/esnext.set.symmetric-difference.js";import"core-js/modules/esnext.set.union.js";import{createPinia as be,setActivePinia as _e,defineStore as ye}from"pinia";import"core-js/modules/esnext.async-iterator.map.js";import"core-js/modules/esnext.iterator.map.js";import"core-js/modules/esnext.weak-map.delete-all.js";import"core-js/modules/esnext.weak-map.emplace.js";import"core-js/modules/esnext.async-iterator.filter.js";import"core-js/modules/esnext.iterator.filter.js";import"core-js/modules/esnext.string.at.js";import"core-js/modules/esnext.async-iterator.find.js";import"core-js/modules/esnext.iterator.find.js";import"core-js/modules/esnext.async-iterator.some.js";import"core-js/modules/esnext.iterator.some.js";import xe from"dompurify";import{marked as we,Renderer as Ae}from"marked";import{Dialog as ke,DialogPanel as Se,DialogTitle as Ge,Listbox as Ce,ListboxButton as $e,ListboxLabel as je,ListboxOption as Me,ListboxOptions as Ee}from"@headlessui/vue";export{ListboxOptions as AGHeadlessSelectOptions}from"@headlessui/vue";class ServiceBootError extends U{constructor(e,t){super(`Service '${e}' failed booting`,{cause:t})}}let He=null;function Le(){return He??Te()}function Te(){return F(be(),(e=>{He=e,_e(e)}))}function Pe(){return He??Le()}function Ie(e,t){return Le(),ye(e,t)()}function Re(e){var t;return z(t=class extends qe{usesStore(){return!0}getName(){return e.name??null}getInitialState(){return"function"==typeof e.initialState?e.initialState():Object.entries(e.initialState).reduce(((e,t)=>{let[s,r]=t;try{r=structuredClone(r)}catch(e){console.warn(`Could not clone '${s}' state from ${this.getName()} service, this may cause problems if you're using multiple instances of the service (for example, in unit tests).\nTo fix this problem, declare your initialState as a function instead.`)}return e[s]=r,e}),{})}getComputedStateDefinition(){return e.computed??{}}getStateWatchers(){return e.watch??{}}serializePersistedState(t){return e.serialize?.(t)??t}deserializePersistedState(t){return e.restore?.(t)??t}},"persist",e.persist??[]),t}class qe extends N{constructor(){super(),z(this,"_name",void 0),z(this,"_booted",void 0),z(this,"_computedStateKeys",void 0),z(this,"_watchers",void 0),z(this,"_store",void 0);const e=this.getComputedStateDefinition();this._name=this.getName()??new.target.name,this._booted=new W,this._computedStateKeys=new Set(Object.keys(e)),this._watchers=this.getStateWatchers(),this._store=this.usesStore()&&Ie(this._name,{state:()=>this.getInitialState(),getters:e})}get booted(){return this._booted}static(e){return super.static(e)}launch(){const handleError=e=>this._booted.reject(new ServiceBootError(this._name,e));try{this.frameworkBoot().then((()=>this.boot())).then((()=>this._booted.resolve())).catch(handleError)}catch(e){handleError(e)}return this._booted}hasPersistedState(){return K.has(this._name)}hasState(e){return!!this._store&&(e in this._store.$state||this._computedStateKeys.has(e))}getState(e){const t=this._store;return e?t?t[e]:void 0:t||{}}setState(e,t){if(!this._store)return;const s="string"==typeof e?{[e]:t}:e,r=J(this._store.$state,Object.keys(s));Object.assign(this._store.$state,s),this.onStateUpdated(s,r)}updatePersistedState(e){if(!this._store)return;const t=Q(e),s=J(this._store.$state,t);Z(s)||this.onPersistentStateUpdated(s)}__get(e){return this.hasState(e)?this.getState(e):super.__get(e)}__set(e,t){this.setState({[e]:t})}onStateUpdated(e,t){const s=J(e,this.static("persist"));Z(s)||this.onPersistentStateUpdated(s);for(const s in e){const r=this._watchers[s];r&&e[s]!==t[s]&&r.call(this,e[s],t[s])}}onPersistentStateUpdated(e){const t=K.get(this._name);t&&K.set(this._name,{...t,...this.serializePersistedState(X(e))})}usesStore(){return!1}getName(){return null}getInitialState(){return{}}getComputedStateDefinition(){return{}}getStateWatchers(){return{}}serializePersistedState(e){return e}deserializePersistedState(e){return e}async frameworkBoot(){this.restorePersistedState()}async boot(){}restorePersistedState(){if(this.usesStore()&&!Z(this.static("persist")))if(K.has(this._name)){const e=K.require(this._name);this.setState(this.deserializePersistedState(e))}else K.set(this._name,J(this.getState(),this.static("persist")))}requireStore(){return this._store?this._store:Y(`Failed getting '${this._name}' store`)}}z(qe,"persist",[]);const Be={Low:-256,Default:0,High:256};class Oe extends qe{constructor(){super(...arguments),z(this,"listeners",{})}async boot(){Object.entries(globalThis.__aerogelEvents__??{}).forEach((e=>{let[t,s]=e;return this.on(t,s)}))}async emit(e,t){const s=this.listeners[e]??{priorities:[],handlers:{}};for(const e of s.priorities)await Promise.all(s.handlers[e]?.map((e=>e(t)))??[])}on(e,t,s){const r="function"==typeof t?{}:"number"==typeof t?{priority:t}:t,o="function"==typeof t?t:s;return this.registerListener(e,r,o),()=>this.off(e,o)}once(e,t,s){let r=null;const o="function"==typeof t?{}:t,n="function"==typeof t?t:s;return F((()=>r&&this.off(e,r)),(t=>{r=function(){return t(),n(...arguments)},this.registerListener(e,o,n)}))}off(e,t){const s=this.listeners[e];if(!s)return;const r=[...s.priorities];for(const e of r)te(s.handlers[e]??[],t),0===s.handlers[e]?.length&&(delete s.handlers[e],te(s.priorities,e));0===s.priorities.length&&delete this.listeners[e]}registerListener(e,t,s){const r=t.priority??0;e in this.listeners||(this.listeners[e]={priorities:[],handlers:{}});const o=this.listeners[e]?.priorities??Y(`priorities missing for event '${e}'`),n=this.listeners[e]?.handlers??Y(`handlers missing for event '${e}'`);o.includes(r)||(o.push(r),o.sort(((e,t)=>t-e)),n[r]=[]),n[r]?.push(s)}}var De=ee(Oe),Ve=Re({name:"app",initialState:{plugins:{},instance:null,environment:e.environment,version:e.version,sourceUrl:e.sourceUrl},computed:{development:e=>"development"===e.environment,staging:e=>"staging"===e.environment,testing:e=>"test"===e.environment||"testing"===e.environment,versionName(t){return this.development?"dev."+e.sourceHash.toString().substring(0,7):this.staging?"staging."+e.sourceHash.toString().substring(0,7):`v${t.version}`},versionUrl(t){return t.sourceUrl+(this.development||this.staging?`/tree/${e.sourceHash}`:`/releases/tag/${this.versionName}`)}}});class ze extends Ve{constructor(){super(...arguments),z(this,"name",e.name),z(this,"ready",new W),z(this,"mounted",new W)}isReady(){return this.ready.isResolved()}isMounted(){return this.mounted.isResolved()}async whenReady(e){return await this.ready.then(e)}async reload(e){e&&se(e),location.reload(),await re()}plugin(e){return this.plugins[e]??null}service(e){return this.instance?.config.globalProperties[e]??null}async boot(){De.once("application-ready",(()=>this.ready.resolve())),De.once("application-mounted",(()=>this.mounted.resolve()))}}var Ue=ee(ze);function Fe(e){return e}async function Ne(e){for(var t=arguments.length,s=new Array(t>1?t-1:0),r=1;r<t;r++)s[r-1]=arguments[r];Ue.setState("plugins",e.reduce(((e,t)=>(t.name&&(e[t.name]=t),e)),{})),await Promise.all(e.map((e=>e.install(...s)))??[])}function We(e){return{type:Array,default:e??(()=>[])}}function Ke(){return{type:Boolean,default:arguments.length>0&&void 0!==arguments[0]&&arguments[0]}}function Je(){return t()}function Qe(e){const o=t(),n=s(e);return r(n,(async()=>o.value=await n.value),{immediate:!0}),o}function Ze(e){return e}function Xe(e,t){const s=Object.values(e);return{type:String,default:t??s[0]??null,validator:e=>s.includes(e)}}function Ye(e){const t=o(e);return t?n(t):void 0}function et(e,t){return Ye(e)??Y(t??`Could not resolve '${e}' injection key`)}function tt(e,t){return o(e)??Y(t??`Could not resolve '${e}' injection key`)}function st(){return{type:Function,default:null}}function rt(e,t){return{type:e,default:t??null}}function ot(){return{type:Number,default:arguments.length>0&&void 0!==arguments[0]?arguments[0]:null}}function nt(){return{type:Object,default:arguments.length>0&&void 0!==arguments[0]?arguments[0]:null}}function at(){return{type:Array,required:!0}}function lt(e){const t=Object.values(e);return{type:String,required:!0,validator:e=>t.includes(e)}}function it(e){return{type:e,required:!0}}function ct(){return{type:Number,required:!0}}function ut(){return{type:Object,required:!0}}function dt(){return{type:String,required:!0}}function pt(){return{type:String,default:arguments.length>0&&void 0!==arguments[0]?arguments[0]:null}}var mt={mounted(e,t){let{value:s}=t;!1!==s&&e.focus()}};const ht=new WeakMap;const ft={"initial-focus":mt,measure:{mounted(e,t){let{value:s}=t;const r="function"==typeof s?s:null,o=()=>{const t=e.getBoundingClientRect();e.style.setProperty("--width",`${t.width}px`),e.style.setProperty("--height",`${t.height}px`),r?.({width:t.width,height:t.height})};ht.set(e,F(new ResizeObserver(o)).observe(e)),o()},unmounted(e){ht.get(e)?.unobserve(e),ht.delete(e)}}};var vt={install(e,t){const s={...ft,...t.directives};for(const[t,r]of Object.entries(s))e.directive(t,r)}};class gt extends qe{constructor(){super(...arguments),z(this,"cache",void 0)}async get(e){const t=await this.open();return await t.match(e)??null}async store(e,t){const s=await this.open();await s.put(e,t)}async replace(e,t){const s=await this.open();0!==(await s.keys(e)).length&&await s.put(e,t)}async open(){return this.cache=this.cache??F(new W,(e=>{caches.open("app").then((t=>e.resolve(t)))}))}}var bt=ee(gt);var _t=ee(class extends qe{async purge(){await De.emit("purge-storage")}});function yt(e,t){return{...e,...J(t,Object.keys(e))}}const xt={$app:Ue,$events:De,$storage:_t};async function wt(e,t){await Promise.all(Object.entries(t).map((async t=>{let[s,r]=t;await r.launch().catch((t=>e.config.errorHandler?.(t,null,`Failed launching ${s}.`)))}))),Object.assign(e.config.globalProperties,t),(Ue.development||Ue.testing)&&Object.assign(globalThis,t)}var At={async install(e,t){const s={...xt,...t.services};e.use(Pe()),await wt(e,s)}};const kt=768,St={Mobile:"mobile",Desktop:"desktop"};function Gt(){return globalThis.innerWidth>768?St.Desktop:St.Mobile}var Ct=Re({name:"ui",initialState:{modals:[],snackbars:[],layout:Gt()},computed:{mobile:e=>{let{layout:t}=e;return t===St.Mobile},desktop:e=>{let{layout:t}=e;return t===St.Desktop}}});const $t={AlertModal:"alert-modal",ConfirmModal:"confirm-modal",ErrorReportModal:"error-report-modal",LoadingModal:"loading-modal",PromptModal:"prompt-modal",Snackbar:"snackbar",StartupCrash:"startup-crash"};class jt extends Ct{constructor(){super(...arguments),z(this,"modalCallbacks",{}),z(this,"components",{})}requireComponent(e){return this.components[e]??Y(`UI Component '${e}' is not defined!`)}alert(e,t){this.openModal(this.requireComponent($t.AlertModal),"string"!=typeof t?{message:e}:{title:e,message:t})}async confirm(e,t,s){const r="string"!=typeof t?{...t??{},message:e,required:!!t?.required}:{...s??{},title:e,message:t,required:!!s?.required},o=await this.openModal(this.requireComponent($t.ConfirmModal),r),n=await o.beforeClose,a="object"==typeof n?n[0]:n??!1,l="object"==typeof n?n[1]:Object.entries(r.checkboxes??{}).reduce(((e,t)=>{let[s,{default:r}]=t;return{[s]:r??!1,...e}}),{});for(const[e,t]of Object.entries(r.checkboxes??{}))if(t.required&&!l[e])return a&&Ue.development&&console.warn(`Confirmed confirm modal was suppressed because required '${e}' checkbox was missing`),[!1,l];return"checkboxes"in r?[a,l]:a}async prompt(e,t,s){const r=s?.trim??!0,o=await this.openModal(this.requireComponent($t.PromptModal),"string"!=typeof t?{message:e,...t??{}}:{title:e,message:t,...s??{}}),n=await o.beforeClose;return(r&&"string"==typeof n?n?.trim():n)??null}async loading(e,t){const s=e=>"function"==typeof e?Promise.resolve(e()):e,{operationPromise:r,props:o}="string"==typeof e?{props:{message:e},operationPromise:s(t)}:"function"==typeof e||e instanceof Promise?{operationPromise:s(e)}:{props:e,operationPromise:s(t)},n=await this.openModal(this.requireComponent($t.LoadingModal),o);try{const[e]=await Promise.all([r,oe({seconds:1})]);return e}finally{await this.closeModal(n.id)}}showSnackbar(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const s={id:ne(),properties:{message:e,...t},component:a(t.component??this.requireComponent($t.Snackbar))};this.setState("snackbars",this.snackbars.concat(s)),setTimeout((()=>this.hideSnackbar(s.id)),5e3)}hideSnackbar(e){this.setState("snackbars",this.snackbars.filter((t=>t.id!==e)))}registerComponent(e,t){this.components[e]=t}async openModal(e,t){const s=ne(),r={},o={id:s,properties:t??{},component:a(e),beforeClose:new Promise((e=>r.willClose=e)),afterClose:new Promise((e=>r.closed=e))},n=this.modals.at(-1),i=this.modals.concat(o);return this.modalCallbacks[o.id]=r,this.setState({modals:i}),await l(),await(n&&De.emit("hide-modal",{id:n.id})),await Promise.all([n||De.emit("show-overlays-backdrop"),De.emit("show-modal",{id:o.id})]),o}async closeModal(e,t){Ue.isMounted()?await De.emit("close-modal",{id:e,result:t}):await this.removeModal(e,t)}async closeAllModals(){for(;this.modals.length>0;)await this.closeModal(ae(this.modals[this.modals.length-1]).id)}async boot(){this.watchModalEvents(),this.watchMountedEvent(),this.watchViewportBreakpoints()}async removeModal(e,t){this.setState("modals",this.modals.filter((t=>t.id!==e))),this.modalCallbacks[e]?.closed?.(t),delete this.modalCallbacks[e];const s=this.modals.at(-1);await(s&&De.emit("show-modal",{id:s.id}))}watchModalEvents(){De.on("modal-will-close",(e=>{let{modal:t,result:s}=e;this.modalCallbacks[t.id]?.willClose?.(s),1===this.modals.length&&De.emit("hide-overlays-backdrop")})),De.on("modal-closed",(async e=>{let{modal:{id:t},result:s}=e;await this.removeModal(t,s)}))}watchMountedEvent(){De.once("application-mounted",(async()=>{if(!globalThis.document||!globalThis.getComputedStyle)return;const e=globalThis.document.getElementById("splash");e&&("0"!==globalThis.getComputedStyle(e).opacity&&(e.style.opacity="0",await oe({ms:600})),e.remove())}))}watchViewportBreakpoints(){if(!globalThis.matchMedia)return;globalThis.matchMedia("(min-width: 768px)").addEventListener("change",(()=>this.setState({layout:Gt()})))}}var Mt=ee(jt);class Et{constructor(e,t){z(this,"locale",void 0),z(this,"fallbackLocale",void 0),this.locale=e,this.fallbackLocale=t}getLocale(){return this.locale}async setLocale(e){this.locale=e}getFallbackLocale(){return this.fallbackLocale}async setFallbackLocale(e){this.fallbackLocale=e}getLocales(){return["en"]}translate(e){return Ue.development&&console.warn("Lang provider is missing"),e}translateWithDefault(e,t){return Ue.development&&console.warn("Lang provider is missing"),t}}var Ht=Re({name:"lang",persist:["locale","fallbackLocale"],initialState:{locale:null,locales:["en"],fallbackLocale:"en"}});var Lt=ee(class extends Ht{constructor(){super(),z(this,"provider",void 0),this.provider=new Et(this.getState("locale")??this.getBrowserLocale(),this.getState("fallbackLocale"))}async setProvider(e){this.provider=e,this.locales=e.getLocales(),await e.setLocale(this.locale??this.getBrowserLocale()),await e.setFallbackLocale(this.fallbackLocale)}translate(e,t){return this.provider.translate(e,t)??e}translateWithDefault(e,t){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.provider.translateWithDefault(e,t,s)}getBrowserLocale(){const e=this.getState("locales");return navigator.languages.find((t=>e.includes(t)))??"en"}async boot(){globalThis.document&&this.requireStore().$subscribe((async()=>{await this.provider.setLocale(this.locale??this.getBrowserLocale()),await this.provider.setFallbackLocale(this.fallbackLocale),this.locale?document.querySelector("html")?.setAttribute("lang",this.locale):document.querySelector("html")?.removeAttribute("lang")}),{immediate:!0})}});const Tt=Lt.translate.bind(Lt),Pt=Lt.translateWithDefault.bind(Lt);var It=Re({name:"errors",initialState:{logs:[],startupErrors:[]},computed:{hasErrors:e=>{let{logs:t}=e;return t.length>0},hasNewErrors:e=>{let{logs:t}=e;return t.some((e=>!e.seen))},hasStartupErrors:e=>{let{startupErrors:t}=e;return t.length>0}}});const Rt={Primary:"primary",Secondary:"secondary",Danger:"danger",Clear:"clear"};var qt=ee(class extends It{constructor(){super(...arguments),z(this,"forceReporting",!1),z(this,"enabled",!0)}enable(){this.enabled=!0}disable(){this.enabled=!1}async inspect(e){const t=Array.isArray(e)?e:[await this.createErrorReport(e)];0!==t.length?Mt.openModal(Mt.requireComponent($t.ErrorReportModal),{reports:t}):Mt.alert(Pt("errors.inspectEmpty","Nothing to inspect!"))}async report(e,t){if(await De.emit("error",{error:e,message:t}),Ue.testing)throw e;if(Ue.development&&this.logError(e),!this.enabled)throw e;if(!Ue.isMounted()){const t=await this.createStartupErrorReport(e);return void(t&&this.setState({startupErrors:this.startupErrors.concat(t)}))}const s=await this.createErrorReport(e),r={report:s,seen:!1,date:new Date};Mt.showSnackbar(t??Pt("errors.notice","Something went wrong, but it's not your fault. Try again!"),{color:Rt.Danger,actions:[{text:Pt("errors.viewDetails","View details"),dismiss:!0,handler:()=>Mt.openModal(Mt.requireComponent($t.ErrorReportModal),{reports:[s]})}]}),this.setState({logs:[r].concat(this.logs)})}see(e){this.setState({logs:this.logs.map((t=>t.report!==e?t:{...t,seen:!0}))})}seeAll(){this.setState({logs:this.logs.map((e=>({...e,seen:!0})))})}logError(e){console.error(e),le(e)&&e.cause&&this.logError(e.cause)}async createErrorReport(e){return"string"==typeof e?{title:e}:e instanceof Error||e instanceof U?this.createErrorReportFromError(e):le(e)?ie({title:ce(e.name??e.title??Pt("errors.unknown","Unknown Error")),description:ce(e.message??e.description??Pt("errors.unknownDescription","Unknown error object")),error:e}):{title:Pt("errors.unknown","Unknown Error"),error:e}}async createStartupErrorReport(e){return e instanceof ServiceBootError?e.cause instanceof ServiceBootError?null:this.createErrorReport(e.cause):this.createErrorReport(e)}createErrorReportFromError(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return{title:e.name,description:e.message,details:e.stack,error:e,...t}}});const Bt=[];function Ot(e){Bt.push(e)}function Dt(e){for(const t of Bt){const s=t(e);if(s)return s}return"string"==typeof e?e:e instanceof Error||e instanceof U?e.message:le(e)?ce(e.message??e.description??"Unknown error object"):Pt("errors.unknown","Unknown Error")}const Vt={$errors:qt};function zt(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:()=>!1;const s=e=>t(e)||(e=>(qt.report(e),!0))(e);e.config.errorHandler=s,globalThis.onerror=(e,t,r,o,n)=>s(n??e),globalThis.onunhandledrejection=e=>s(e.reason)}var Ut={async install(e,t){zt(e,t.handleError),await wt(e,Vt)}};const Ft={$lang:Lt};var Nt={async install(e){e.config.globalProperties.$t??=Tt,e.config.globalProperties.$td=Pt,await wt(e,Ft)}},Wt={async install(){"testing"===import.meta.env.MODE&&(globalThis.testingRuntime={on:function(){return De.on(...arguments)}})}};function Kt(e,t){const s=De.on(e,t);i((()=>s()))}function Jt(){const e=c(),t=s((()=>e.class));return[s((()=>ue(e,"class"))),t]}function Qt(e){let t=de;u((()=>t=e())),i((()=>t()))}function Zt(e,t){const s=n(K.get(e)??t);return r(s,(()=>K.set(e,d(s)))),s}function Xt(e){let t=we(e,{mangle:!1,headerIds:!1,renderer:F(new Ae,(e=>{e.link=function(e,t,s){return Ae.prototype.link.apply(this,[e,t,s]).replace("<a",'<a target="_blank"')}}))});return t=Yt(t),t=function(e){const t=pe(e,/<a[^>]*href="#action:([^"]+)"[^>]*>([^<]+)<\/a>/g);for(const[s,r,o]of t)e=e.replace(s,`<button type="button" data-markdown-action="${r}">${o}</button>`);return e}(t),t}function Yt(e){return xe.sanitize(e,{ADD_ATTR:["target"]})}function es(e){return e.split(/\s+/).filter((e=>!/^(hover|focus|focus-visible):/.test(e))).join(" ").trim()}function ts(e,t){return Object.keys(t).reduce(((t,s)=>(t[s]=e[s],t)),{})}const ss={cancellable:Ke(!0),inline:Ke(),title:pt()};function rs(){return ss}function os(e){return ts(e,ss)}function ns(e){return{inline:s((()=>!!e.value?.inline)),cancellable:s((()=>!!e.value?.cancellable)),close:async()=>e.value?.close()}}var as=p({__name:"AGHeadlessModal",props:rs(),setup(e,{expose:r}){const o=e,n=t(null),a=t(!0),l=t(!1),{modal:i}=et("modal","could not obtain modal reference from <AGHeadlessModal>, did you render this component manually? Show it using $ui.openModal() instead"),c=s((()=>i.properties.inline?"div":ke));async function u(){n.value?.$el&&(a.value=!0)}async function d(e){l.value||(De.emit("modal-will-close",{modal:i,result:e}),await u(),l.value=!0,De.emit("modal-closed",{modal:i,result:e}))}return Kt("close-modal",(async({id:e,result:t})=>{e===i.id&&await d(t)})),Kt("hide-modal",(async({id:e})=>{e===i.id&&await u()})),Kt("show-modal",(async({id:e})=>{e===i.id&&await async function(){n.value?.$el&&(a.value=!1)}()})),r({close:d,cancellable:m(o,"cancellable"),inline:m(o,"inline")}),(e,t)=>(h(),f(v(c.value),{ref_key:"$root",ref:n,open:!0,onClose:t[0]||(t[0]=t=>e.cancellable&&d())},{default:g((()=>[b(e.$slots,"default",{close:d})])),_:3},544))}});as.__file="src/components/headless/modals/AGHeadlessModal.vue";var ls=p({__name:"AGModalContext",props:{modal:ut(),childIndex:ot(0)},setup(e){const t=e,r=s((()=>{const e={};for(const s in t.modal.properties)e[s]=_(t.modal.properties[s]);return e}));return y("modal",{modal:m(t,"modal"),childIndex:m(t,"childIndex")}),(t,s)=>(h(),f(v(e.modal.component),x(w(r.value)),null,16))}});ls.__file="src/components/modals/AGModalContext.vue";var is=p({__name:"AGHeadlessModalPanel",setup(e){const{modal:t,childIndex:r}=et("modal","could not obtain modal reference from <AGHeadlessModalPanel>, did you render this component manually? Show it using $ui.openModal() instead"),o=s((()=>t.properties.inline?"div":Se)),n=s((()=>Mt.modals[r]??null));return(e,t)=>(h(),f(v(o.value),null,{default:g((()=>[b(e.$slots,"default"),n.value?(h(),A(k,{key:0},[S("div",{class:G(["pointer-events-none inset-0 z-50 bg-black/30",n.value.properties.inline?"absolute":"fixed"])},null,2),C(ls,{"child-index":_(r)+1,modal:n.value},null,8,["child-index","modal"])],64)):$("v-if",!0)])),_:3}))}});is.__file="src/components/headless/modals/AGHeadlessModalPanel.vue";var cs=p({__name:"AGHeadlessModalTitle",props:{as:pt("h2")},setup(e){const t=e,{modal:r}=et("modal","could not obtain modal reference from <AGHeadlessModalPanel>, did you render this component manually? Show it using $ui.openModal() instead"),o=s((()=>r.properties.inline?"div":Ge)),n=s((()=>r.properties.inline?{}:{as:t.as}));return(e,t)=>(h(),f(v(o.value),x(w(n.value)),{default:g((()=>[b(e.$slots,"default")])),_:3},16))}});cs.__file="src/components/headless/modals/AGHeadlessModalTitle.vue";var us=p({__name:"AGMarkdown",props:{as:pt(),inline:Ke(),langKey:pt(),langParams:rt(),text:pt(),actions:nt()},setup(e){const t=e,r=c(),o=s((()=>t.text??(t.langKey&&Tt(t.langKey,t.langParams??{})))),n=s((()=>{if(!o.value)return null;let e=Xt(o.value);return t.inline&&(e=e.replace("<p>","<span>").replace("</p>","</span>")),e})),a=()=>j(t.as??(t.inline?"span":"div"),{innerHTML:n.value,onClick:l,...r,class:`${r.class??""} ${t.inline?"":"prose"}`});async function l(e){const{target:s}=e;me(s,HTMLElement)&&s.dataset.markdownAction&&t.actions?.[s.dataset.markdownAction]?.()}return(e,t)=>(h(),f(a))}});us.__file="src/components/lib/AGMarkdown.vue";const ds={class:"fixed inset-0 flex items-center justify-center p-8"};var ps=p({inheritAttrs:!1,__name:"AGModal",props:rs(),setup(e,{expose:s}){const r=e,o=t();return s(ns(o)),(e,t)=>(h(),f(as,M({ref_key:"$modal",ref:o},r,{class:"relative z-50"}),{default:g((({close:t})=>[S("div",ds,[C(is,{class:"flex max-h-full max-w-full flex-col overflow-hidden bg-white p-4"},{default:g((()=>[e.title?(h(),f(cs,{key:0,class:"mb-2 text-lg font-semibold"},{default:g((()=>[C(us,{text:e.title,inline:""},null,8,["text"])])),_:1})):$("v-if",!0),S("div",M({class:"flex max-h-full flex-col overflow-auto"},e.$attrs),[b(e.$slots,"default",{close:t})],16)])),_:2},1024)])])),_:3},16))}});ps.__file="src/components/modals/AGModal.vue";const ms={title:pt(),message:dt()};function hs(){return ms}var fs=p({__name:"AGAlertModal",props:hs(),setup:e=>(e,t)=>(h(),f(ps,{title:e.title},{default:g((()=>[C(us,{text:e.message},null,8,["text"])])),_:1},8,["title"]))});fs.__file="src/components/modals/AGAlertModal.vue";const vs={title:pt(),message:dt(),acceptText:pt(),acceptColor:Xe(Rt,Rt.Primary),cancelText:pt(),cancelColor:Xe(Rt,Rt.Clear),checkboxes:nt(),actions:nt(),required:Ke(!1)};function gs(){return vs}function bs(e){return{renderedAcceptText:s((()=>e.acceptText??Pt("ui.accept","Ok"))),renderedCancelText:s((()=>e.cancelText??Pt("ui.cancel","Cancel")))}}function _s(e){return e instanceof HTMLElement?e:ys(e)?e.$el:void 0}function ys(e){return le(e)&&"$el"in e}function xs(){return E(((e,t)=>{let s;return{get:()=>(e(),s),set(e){s=_s(e),t()}}}))}var ws=p({__name:"AGHeadlessButton",props:{as:nt(),href:pt(),url:pt(),route:pt(),routeParams:nt((()=>({}))),routeQuery:nt((()=>({}))),submit:Ke()},setup(e,{expose:t}){const r=e,o=xs(),n=s((()=>r.as?{as:r.as,props:{}}:r.route?{as:"router-link",props:{to:ie({name:r.route,params:r.routeParams,query:r.routeQuery})}}:r.href||r.url?{as:"a",props:{target:"_blank",href:r.href||r.url}}:{as:"button",props:{type:r.submit?"submit":"button"}}));return t({$el:o}),(e,t)=>(h(),f(v(n.value.as),M({ref_key:"$root",ref:o},n.value.props),{default:g((()=>[b(e.$slots,"default")])),_:3},16))}});ws.__file="src/components/headless/forms/AGHeadlessButton.vue";var As=p({__name:"AGButton",props:{color:Xe(Rt,Rt.Primary)},setup(e){const t=e,r=s((()=>{switch(t.color){case Rt.Secondary:return["text-white bg-gray-600","hover:bg-gray-500","focus-visible:outline-offset-2 focus-visible:outline-gray-600"].join(" ");case Rt.Clear:return"hover:bg-gray-500/20 focus-visible:outline-gray-500/60";case Rt.Danger:return["text-white bg-red-600","hover:bg-red-500","focus-visible:outline-offset-2 focus-visible:outline-red-600"].join(" ");default:return["text-white bg-indigo-600","hover:bg-indigo-500","focus-visible:outline-offset-2 focus-visible:outline-indigo-600"].join(" ")}}));return(e,t)=>(h(),f(ws,{class:G(["px-2.5 py-1.5 focus-visible:outline focus-visible:outline-2",r.value])},{default:g((()=>[b(e.$slots,"default")])),_:3},8,["class"]))}});As.__file="src/components/forms/AGButton.vue";const ks={class:"mt-2 flex flex-row-reverse gap-2"};var Ss=p({__name:"AGConfirmModal",props:gs(),setup(e){const t=e,{renderedAcceptText:s,renderedCancelText:r}=bs(t);return(e,t)=>(h(),f(ps,{cancellable:!1,title:e.title},{default:g((({close:t})=>[C(us,{text:e.message,actions:e.actions},null,8,["text","actions"]),S("div",ks,[C(As,{color:e.acceptColor,onClick:e=>t(!0)},{default:g((()=>[H(L(_(s)),1)])),_:2},1032,["color","onClick"]),e.required?$("v-if",!0):(h(),f(As,{key:0,color:e.cancelColor,onClick:e=>t()},{default:g((()=>[H(L(_(r)),1)])),_:2},1032,["color","onClick"]))])])),_:1},8,["title"]))}});Ss.__file="src/components/modals/AGConfirmModal.vue";const Gs={viewBox:"0 0 20 20",width:"1.2em",height:"1.2em"},Cs=[S("path",{fill:"currentColor",d:"m12.95 10.707l.707-.707L8 4.343L6.586 5.757L10.828 10l-4.242 4.243L8 15.657l4.95-4.95z"},null,-1)];var $s={name:"zondicons-cheveron-right",render:function(e,t){return h(),A("svg",Gs,[...Cs])}};const js={viewBox:"0 0 20 20",width:"1.2em",height:"1.2em"},Ms=[S("path",{fill:"currentColor",d:"M7.05 9.293L6.343 10L12 15.657l1.414-1.414L9.172 10l4.242-4.243L12 4.343z"},null,-1)];var Es={name:"zondicons-cheveron-left",render:function(e,t){return h(),A("svg",js,[...Ms])}};const Hs={reports:at()};function Ls(){return Hs}function Ts(e){const r=t(0),o=s((()=>e.reports[r.value])),n=s((()=>o.value.details?.trim()||Pt("errors.detailsEmpty","This error is missing a stacktrace."))),a=Pt("errors.previousReport","Show previous report"),l=Pt("errors.nextReport","Show next report");return{activeReportIndex:r,details:n,nextReportText:l,previousReportText:a,report:o}}const Ps={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},Is=[S("path",{fill:"currentColor",d:"M20 19V7H4v12h16m0-16a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h16m-7 14v-2h5v2h-5m-3.42-4L5.57 9H8.4l3.3 3.3c.39.39.39 1.03 0 1.42L8.42 17H5.59l3.99-4Z"},null,-1)];var Rs={name:"mdi-console",render:function(e,t){return h(),A("svg",Ps,[...Is])}};const qs={viewBox:"0 0 20 20",width:"1.2em",height:"1.2em"},Bs=[S("path",{fill:"currentColor",d:"M6 6V2c0-1.1.9-2 2-2h10a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-4v4a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V8c0-1.1.9-2 2-2h4zm2 0h4a2 2 0 0 1 2 2v4h4V2H8v4zM2 8v10h10V8H2z"},null,-1)];var Os={name:"zondicons-copy",render:function(e,t){return h(),A("svg",qs,[...Bs])}};const Ds={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},Vs=[S("path",{fill:"currentColor",d:"M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5c.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34c-.46-1.16-1.11-1.47-1.11-1.47c-.91-.62.07-.6.07-.6c1 .07 1.53 1.03 1.53 1.03c.87 1.52 2.34 1.07 2.91.83c.09-.65.35-1.09.63-1.34c-2.22-.25-4.55-1.11-4.55-4.92c0-1.11.38-2 1.03-2.71c-.1-.25-.45-1.29.1-2.64c0 0 .84-.27 2.75 1.02c.79-.22 1.65-.33 2.5-.33c.85 0 1.71.11 2.5.33c1.91-1.29 2.75-1.02 2.75-1.02c.55 1.35.2 2.39.1 2.64c.65.71 1.03 1.6 1.03 2.71c0 3.82-2.34 4.66-4.57 4.91c.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"},null,-1)];var zs={name:"mdi-github",render:function(e,t){return h(),A("svg",Ds,[...Vs])}};const Us={class:"flex"};var Fs=p({__name:"AGErrorReportModalButtons",props:{report:ut()},setup(e){const t=e,r=s((()=>t.report.description?`${t.report.title}: ${t.report.description}`:t.report.title)),o=s((()=>{if(!Ue.sourceUrl)return!1;const e=encodeURIComponent(r.value),s=encodeURIComponent(["[Please, explain here what you were trying to do when this error appeared]","","Error details:","```",he(t.report.details??"Details missing from report",1800-e.length-Ue.sourceUrl.length).trim(),"```"].join("\n"));return`${Ue.sourceUrl}/issues/new?title=${e}&body=${s}`})),n=s((()=>F([{id:"clipboard",description:"Copy to clipboard",iconComponent:Os,async handler(){await navigator.clipboard.writeText(`${r.value}\n\n${t.report.details}`),Mt.showSnackbar(Pt("errors.copiedToClipboard","Debug information copied to clipboard"))}},{id:"console",description:"Log to console",iconComponent:Rs,handler(){const e=t.report.error??t.report;window.error=e,console.error(e),Mt.showSnackbar(Pt("errors.addedToConsole","You can now use the **error** variable in the console"))}}],(e=>{o.value&&e.push({id:"github",description:"Report in GitHub",iconComponent:zs,url:o.value})}))));return(e,t)=>(h(),A("div",Us,[(h(!0),A(k,null,T(n.value,((t,s)=>b(e.$slots,"default",M(t,{key:s}),(()=>[C(As,{color:"clear",url:t.url,title:e.$td(`errors.report_${t.id}`,t.description),"aria-label":e.$td(`errors.report_${t.id}`,t.description),onClick:t.handler},{default:g((()=>[(h(),f(v(t.iconComponent),{class:"h-4 w-4","aria-hidden":"true"}))])),_:2},1032,["url","title","aria-label","onClick"])])))),128))]))}});Fs.__file="src/components/modals/AGErrorReportModalButtons.vue";var Ns=p({__name:"AGErrorReportModalTitle",props:{report:ut(),currentReport:ot(),totalReports:ot()},setup(e){const t=e,r=s((()=>!t.totalReports||t.totalReports<=1?t.report.title:`${t.report.title} (${t.currentReport}/${t.totalReports})`));return(e,t)=>(h(),f(us,{text:r.value,inline:""},null,8,["text"]))}});Ns.__file="src/components/modals/AGErrorReportModalTitle.vue";const Ws={class:"flex items-center justify-between text-lg font-medium"},Ks={class:"flex items-center"},Js=["textContent"];var Qs=p({__name:"AGErrorReportModal",props:Ls(),setup(e){const t=e,{activeReportIndex:s,details:r,nextReportText:o,previousReportText:n,report:a}=Ts(t);return(e,t)=>(h(),f(ps,null,{default:g((()=>[S("div",null,[S("h2",Ws,[S("div",Ks,[C(Ns,{report:_(a),"current-report":_(s)+1,"total-reports":e.reports.length},null,8,["report","current-report","total-reports"]),e.reports.length>1?(h(),A(k,{key:0},[C(As,{color:"clear",disabled:0===_(s),title:_(n),"aria-label":_(n),onClick:t[0]||(t[0]=e=>s.value--)},{default:g((()=>[C(_(Es),{"aria-hidden":"true",class:"h-4 w-4"})])),_:1},8,["disabled","title","aria-label"]),C(As,{color:"clear",disabled:_(s)===e.reports.length-1,title:_(o),"aria-label":_(o),onClick:t[1]||(t[1]=e=>s.value++)},{default:g((()=>[C(_($s),{"aria-hidden":"true",class:"h-4 w-4"})])),_:1},8,["disabled","title","aria-label"])],64)):$("v-if",!0)]),C(Fs,{report:_(a)},null,8,["report"])]),_(a).description?(h(),f(us,{key:0,text:_(a).description,class:"mt-2"},null,8,["text"])):$("v-if",!0)]),S("pre",{class:"h-full overflow-auto bg-gray-200 p-4 text-xs text-red-900",textContent:L(_(r))},null,8,Js)])),_:1}))}});Qs.__file="src/components/modals/AGErrorReportModal.vue";const Zs={title:pt(),message:pt(),progress:ot()};function Xs(){return Zs}function Ys(e){return{renderedMessage:s((()=>e.message??Pt("ui.loading","Loading..."))),showProgress:s((()=>"number"==typeof e.progress))}}var er=p({__name:"AGLoadingModal",props:Xs(),setup(e){const t=e,{renderedMessage:s}=Ys(t);return(e,t)=>(h(),f(ps,{cancellable:!1},{default:g((()=>[C(us,{text:_(s)},null,8,["text"])])),_:1}))}});er.__file="src/components/modals/AGLoadingModal.vue";const tr={title:pt(),message:dt(),label:pt(),defaultValue:pt(),placeholder:pt(),acceptText:pt(),acceptColor:Xe(Rt,Rt.Primary),cancelText:pt(),cancelColor:Xe(Rt,Rt.Clear)};function sr(){return tr}function rr(e){return{renderedAcceptText:s((()=>e.acceptText??Pt("ui.accept","Ok"))),renderedCancelText:s((()=>e.cancelText??Pt("ui.cancel","Cancel")))}}var or=p({__name:"AGForm",props:{form:nt()},emits:["submit"],setup(e,{emit:t}){let s;const r=e,o=t;return P((e=>{s?.(),s=r.form?.on("submit",(()=>o("submit"))),e((()=>s?.()))})),y("form",r.form),(t,s)=>(h(),A("form",{onSubmit:s[0]||(s[0]=I((t=>e.form?.submit()),["prevent"]))},[b(t.$slots,"default")],32))}});or.__file="src/components/forms/AGForm.vue";const nr={name:pt(),label:pt(),description:pt(),modelValue:rt([String,Number,Boolean])};function ar(){return nr}function lr(e){return ts(e,nr)}var ir=p({__name:"AGHeadlessInput",props:{as:pt("div"),...ar()},emits:["update:modelValue"],setup(e,{expose:r,emit:n}){const a=n,l=e,i=t(),c=s((()=>u&&l.name?u.errors[l.name]??null:null)),u=o("form",null),d={$el:i,id:`input-${ne()}`,name:s((()=>l.name)),label:s((()=>l.label)),description:s((()=>l.description)),value:s((()=>u&&l.name?u.getFieldValue(l.name):l.modelValue)),errors:R(c),required:s((()=>l.name&&u?u.getFieldRules(l.name).includes("required"):null)),update(e){u&&l.name?u.setFieldValue(l.name,e):a("update:modelValue",e)},__setElement(e){i.value=e}};return y("input",d),r(d),(t,s)=>e.as?(h(),f(v(e.as),{key:0},{default:g((()=>[b(t.$slots,"default")])),_:3})):b(t.$slots,"default",{key:1})}});ir.__file="src/components/headless/forms/AGHeadlessInput.vue";var cr=p({inheritAttrs:!1,__name:"AGHeadlessInputDescription",setup(e){const t=et("input","<AGHeadlessInputDescription> must be a child of a <AGHeadlessInput>"),r=s((()=>"string"==typeof t.description?t.description:"")),o=s((()=>!!t.description));return(e,s)=>b(e.$slots,"default",{id:`${_(t).id}-description`},(()=>[o.value?(h(),f(us,M({key:0},e.$attrs,{id:`${_(t).id}-description`,text:r.value}),null,16,["id","text"])):$("v-if",!0)]))}});cr.__file="src/components/headless/forms/AGHeadlessInputDescription.vue";const ur=["id"];var dr=p({__name:"AGHeadlessInputError",setup(e){const t=et("input","<AGHeadlessInputError> must be a child of a <AGHeadlessInput>"),r=s((()=>t.errors?Pt(`errors.${t.errors[0]}`,`Error: ${t.errors[0]}`):null));return(e,s)=>r.value?(h(),A("p",{key:0,id:`${_(t).id}-error`},L(r.value),9,ur)):$("v-if",!0)}});function pr(e,t){const s=o("form",null),r=s?.on("focus",(s=>e.name===s&&t()));i((()=>r?.()))}dr.__file="src/components/headless/forms/AGHeadlessInputError.vue";const mr=["id","name","type","required","aria-invalid","aria-describedby","checked"];var hr=p({__name:"AGHeadlessInputInput",props:{type:pt("text")},setup(e){const r=e,o=t(),n=et("input","<AGHeadlessInputInput> must be a child of a <AGHeadlessInput>"),a=s((()=>n.name??void 0)),l=s((()=>n.value)),i=s((()=>{if("checkbox"===r.type)return!!l.value}));function c(){o.value&&n.update(function(){if(!o.value)return null;switch(r.type){case"checkbox":return o.value.checked;case"date":return o.value.valueAsDate;default:return o.value.value}}())}return pr(n,(()=>o.value?.focus())),P((()=>n.__setElement(o.value))),P((()=>{o.value&&("date"!==r.type?o.value.value=l.value:o.value.valueAsDate=l.value)})),(t,s)=>(h(),A("input",{id:_(n).id,ref_key:"$input",ref:o,name:a.value,type:e.type,required:_(n).required??void 0,"aria-invalid":_(n).errors?"true":"false","aria-describedby":_(n).errors?`${_(n).id}-error`:_(n).description?`${_(n).id}-description`:void 0,checked:i.value,onInput:c},null,40,mr))}});hr.__file="src/components/headless/forms/AGHeadlessInputInput.vue";const fr=["for"];var vr=p({__name:"AGHeadlessInputLabel",setup(e){const t=et("input","<AGHeadlessInputLabel> must be a child of a <AGHeadlessInput>"),r=q(),o=s((()=>!(!t.label&&!r.default)));return(e,s)=>o.value?(h(),A("label",{key:0,for:_(t).id},[b(e.$slots,"default",{},(()=>[H(L(_(t).label),1)]))],8,fr)):$("v-if",!0)}});vr.__file="src/components/headless/forms/AGHeadlessInputLabel.vue";const gr={class:"absolute bottom-0 left-0 translate-y-full"};var br=p({inheritAttrs:!1,__name:"AGInput",props:ar(),setup(e){const t=e,s=Je(),[r,o]=Jt();return(e,n)=>(h(),f(ir,M({ref_key:"$input",ref:s,class:["relative flex flex-col items-center",_(o)]},t),{default:g((()=>[C(vr,{class:"sr-only"}),C(hr,M(_(r),{class:["block w-full border-0 py-1.5 text-gray-900 ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600",{"ring-1 ring-red-500":_(s)?.errors}]}),null,16,["class"]),C(cr),S("div",gr,[C(dr,{class:"mt-1 text-sm text-red-500"})])])),_:1},16,["class"]))}});br.__file="src/components/forms/AGInput.vue";const _r={...{required:e=>e?void 0:"required"}};function yr(e,t){_r[e]=t}function xr(e,t){const s=_r[t]?.(e);return s?Q(s):[]}const wr={String:"string",Number:"number",Boolean:"boolean",Object:"object",Date:"date"},Ar=new WeakMap;class kr extends N{constructor(e){super(),z(this,"errors",void 0),z(this,"_fields",void 0),z(this,"_data",void 0),z(this,"_submitted",void 0),z(this,"_errors",void 0),z(this,"_listeners",{}),this._fields=e,this._submitted=t(!1),this._data=this.getInitialData(e),this._errors=this.getInitialErrors(e),Ar.set(this,s((()=>!Object.values(this._errors).some((e=>null!==e))))),this.errors=R(this._errors)}get valid(){return!!Ar.get(this)?.value}get submitted(){return this._submitted.value}setFieldValue(e,t){const s=this._fields[e]??Y(`Trying to set undefined '${ce(e)}' field`);this._data[e]=s.type===wr.String&&(s.trim??1)?ce(t).trim():t,this._submitted.value&&this.validate()}getFieldValue(e){return this._data[e]}getFieldRules(e){return this._fields[e]?.rules?.split("|")??[]}data(){return{...this._data}}validate(){const e=Object.entries(this._fields).reduce(((e,t)=>{let[s,r]=t;return e[s]=this.getFieldErrors(s,r),e}),{});return this.resetErrors(e),this.valid}reset(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this._submitted.value=!1,e.keepData||this.resetData(),e.keepErrors||this.resetErrors()}submit(){this._submitted.value=!0;const e=this.validate();return e&&this._listeners.submit?.forEach((e=>e())),e}on(e,t){return this._listeners[e]??=[],this._listeners[e]?.push(t),()=>this.off(e,t)}off(e,t){te(this._listeners[e]??[],t)}async focus(e){await l(),this._listeners.focus?.forEach((t=>t(e)))}__get(e){return e in this._fields?this.getFieldValue(e):super.__get(e)}__set(e,t){e in this._fields?this.setFieldValue(e,t):super.__set(e,t)}getFieldErrors(e,t){const s=[],r=this._data[e],o=t.rules?.split("|")??[];for(const e of o)"required"!==e&&null==r||s.push(...xr(r,e));return s.length>0?s:null}getInitialData(e){if(this.static().isConjuring())return{};const t=Object.entries(e).reduce(((e,t)=>{let[s,r]=t;return e[s]=r.default??null,e}),{});return n(t)}getInitialErrors(e){if(this.static().isConjuring())return{};const t=Object.keys(e).reduce(((e,t)=>(e[t]=null,e)),{});return n(t)}resetData(){for(const[e,t]of Object.entries(this._fields))this._data[e]=t.default??null}resetErrors(e){Object.keys(this._errors).forEach((e=>delete this._errors[e])),e&&Object.assign(this._errors,e)}}function Sr(e){return new kr(e)}function Gr(e){return{default:e,type:wr.Boolean,rules:(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).rules}}function Cr(e){return{default:e,type:wr.Date,rules:(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).rules}}function $r(e){return{default:e,type:wr.Boolean,rules:"required"}}function jr(e){return{default:e,type:wr.Date,rules:"required"}}function Mr(e){return{default:e,type:wr.Number,rules:"required"}}function Er(e){return{default:e,type:wr.String,rules:"required"}}function Hr(e){return{default:e,type:wr.Number,rules:(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).rules}}function Lr(e){return{default:e,type:wr.String,rules:(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).rules}}const Tr={class:"mt-2 flex flex-row-reverse gap-2"};var Pr=p({__name:"AGPromptModal",props:sr(),setup(e){const t=e,s=Sr({draft:Er(t.defaultValue??"")}),{renderedAcceptText:r,renderedCancelText:o}=rr(t);return(e,t)=>(h(),f(ps,{cancellable:!1,title:e.title},{default:g((({close:t})=>[C(us,{text:e.message},null,8,["text"]),C(or,{form:_(s),onSubmit:e=>t(_(s).draft)},{default:g((()=>[C(br,{name:"draft",placeholder:e.placeholder,label:e.label},null,8,["placeholder","label"]),S("div",Tr,[C(As,{color:e.acceptColor,submit:""},{default:g((()=>[H(L(_(r)),1)])),_:1},8,["color"]),C(As,{color:e.cancelColor,onClick:e=>t()},{default:g((()=>[H(L(_(o)),1)])),_:2},1032,["color","onClick"])])])),_:2},1032,["form","onSubmit"])])),_:1},8,["title"]))}});Pr.__file="src/components/modals/AGPromptModal.vue";const Ir={class:"pointer-events-auto"};var Rr=p({__name:"AGHeadlessSnackbar",setup:e=>(e,t)=>(h(),A("div",Ir,[b(e.$slots,"default")]))});Rr.__file="src/components/headless/snackbars/AGHeadlessSnackbar.vue";const qr=ue(Rt,["Primary","Clear"]),Br={id:dt(),message:dt(),actions:We((()=>[])),color:Xe(qr,Rt.Secondary)};function Or(){return Br}function Dr(e){return{activate:function(t){t.handler?.(),t.dismiss&&Mt.hideSnackbar(e.id)}}}var Vr=p({__name:"AGSnackbar",props:Or(),setup(e){const t=e,{activate:r}=Dr(t),o=s((()=>t.color===Rt.Danger?"bg-red-200 text-red-900":"bg-gray-900 text-white"));return(e,t)=>(h(),f(Rr,{class:G(["flex flex-row items-center justify-center gap-3 p-4",o.value])},{default:g((()=>[C(us,{text:e.message,inline:""},null,8,["text"]),(h(!0),A(k,null,T(e.actions,((t,s)=>(h(),f(As,{key:s,color:e.color,onClick:e=>_(r)(t)},{default:g((()=>[H(L(t.text),1)])),_:2},1032,["color","onClick"])))),128))])),_:1},8,["class"]))}});Vr.__file="src/components/snackbars/AGSnackbar.vue";const zr={class:"grid flex-grow place-items-center"},Ur={class:"flex flex-col items-center space-y-6 p-8"},Fr={class:"mt-2 text-center text-4xl font-medium text-red-600"},Nr={class:"mt-4 flex flex-col space-y-4"};var Wr=p({__name:"AGStartupCrash",setup:e=>(e,t)=>(h(),A("div",zr,[S("div",Ur,[S("h1",Fr,L(e.$td("startupCrash.title","Something went wrong!")),1),C(us,{text:e.$td("startupCrash.message","Something failed trying to start the application.\n\nHere's some things you can do:"),class:"mt-4 text-center"},null,8,["text"]),S("div",Nr,[C(As,{color:"danger",onClick:t[0]||(t[0]=t=>e.$app.reload())},{default:g((()=>[H(L(e.$td("startupCrash.reload","Try again")),1)])),_:1}),C(As,{color:"danger",onClick:t[1]||(t[1]=t=>e.$errors.inspect(e.$errors.startupErrors))},{default:g((()=>[H(L(e.$td("startupCrash.inspect","View error details")),1)])),_:1})])])]))});Wr.__file="src/components/lib/AGStartupCrash.vue";const Kr={$ui:Mt};var Jr={async install(e,t){const s={[$t.AlertModal]:fs,[$t.ConfirmModal]:Ss,[$t.ErrorReportModal]:Qs,[$t.LoadingModal]:er,[$t.PromptModal]:Pr,[$t.Snackbar]:Vr,[$t.StartupCrash]:Wr};Object.entries({...s,...t.components}).forEach((e=>{let[t,s]=e;return Mt.registerComponent(t,s)})),await wt(e,Kr)}};async function Qr(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const s=[Wt,vt,Ut,Nt,At,Jr,...t.plugins??[]];Ue.instance=e,await Ne(s,e,t),await(t.install?.(e)),await De.emit("application-ready")}async function Zr(t){let s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r=B(t);"development"===e.environment&&(window.$aerogel=r),await Qr(r,s),r.mount("#app"),r._container?.classList.remove("loading"),await De.emit("application-mounted")}const Xr={key:0};var Yr=p({__name:"AGAppModals",setup(e){const t=s((()=>Mt.modals[0]??null));return(e,s)=>t.value?(h(),A("aside",Xr,[C(ls,{"child-index":1,modal:t.value},null,8,["modal"])])):$("v-if",!0)}});Yr.__file="src/components/AGAppModals.vue";const eo={"aria-live":"assertive",class:"pointer-events-none fixed inset-0 z-50 flex items-end px-4 py-6 sm:p-6"},to={class:"flex w-full flex-col items-end space-y-4"};const so={render:function(e,t){return h(),A("div",eo,[S("div",to,[(h(!0),A(k,null,T(e.$ui.snackbars,(e=>(h(),f(v(e.component),M({id:e.id,key:e.id},e.properties),null,16,["id"])))),128))])])},__file:"src/components/AGAppSnackbars.vue"};var ro=so,oo=p({__name:"AGAppOverlays",setup(e){const s=t(null),r=t(!0);return Kt("show-overlays-backdrop",(async()=>{s.value&&r.value&&(r.value=!1,s.value.classList.remove("opacity-0"))})),Kt("hide-overlays-backdrop",(async()=>{s.value&&!r.value&&(r.value=!0,s.value.classList.add("opacity-0"))})),(e,t)=>(h(),A(k,null,[S("div",{id:"aerogel-overlays-backdrop",ref_key:"$backdrop",ref:s,class:"pointer-events-none fixed inset-0 z-50 bg-black/30 opacity-0"},null,512),C(Yr),C(ro)],64))}});oo.__file="src/components/AGAppOverlays.vue";const no={class:"flex min-h-full flex-col text-base font-normal leading-tight text-gray-900 antialiased"};var ao=p({__name:"AGAppLayout",setup:e=>(e,t)=>(h(),A("div",no,[e.$errors.hasStartupErrors?b(e.$slots,"startup-crash",{key:0},(()=>[(h(),f(v(e.$ui.requireComponent(_($t).StartupCrash))))])):b(e.$slots,"default",{key:1}),C(oo)]))});ao.__file="src/components/AGAppLayout.vue";const lo={class:"ml-2"};var io=p({inheritAttrs:!1,__name:"AGCheckbox",props:{name:pt()},emits:["update:modelValue"],setup(e){const t=Je();return(s,r)=>(h(),f(ir,{ref_key:"$input",ref:t,name:e.name,class:"flex","onUpdate:modelValue":r[0]||(r[0]=e=>s.$emit("update:modelValue",e))},{default:g((()=>[C(hr,M(s.$attrs,{type:"checkbox",class:{"text-indigo-600 focus:ring-indigo-600":!_(t)?.errors,"border-red-200 text-red-600 focus:ring-red-600":_(t)?.errors}}),null,16,["class"]),S("div",lo,[s.$slots.default?(h(),f(vr,{key:0},{default:g((()=>[b(s.$slots,"default")])),_:3})):$("v-if",!0),C(dr,{class:"text-sm text-red-600"})])])),_:3},8,["name"]))}});io.__file="src/components/forms/AGCheckbox.vue";const co={viewBox:"0 0 20 20",width:"1.2em",height:"1.2em"},uo=[S("path",{fill:"currentColor",d:"m9.293 12.95l.707.707L15.657 8l-1.414-1.414L10 10.828L5.757 6.586L4.343 8z"},null,-1)];var po={name:"zondicons-cheveron-down",render:function(e,t){return h(),A("svg",co,[...uo])}};const mo={name:pt(),label:pt(),options:at(),noSelectionText:pt(),optionsText:rt()},ho=["update:modelValue"];function fo(){return mo}function vo(){return[...ho]}function go(e){return ts(e,mo)}var bo=p({__name:"AGHeadlessSelect",props:{modelValue:rt(),...fo()},emits:vo(),setup(e,{expose:t,emit:r}){const n=r,a=e,l=s((()=>"function"==typeof a.optionsText?a.optionsText:"string"==typeof a.optionsText?e=>ce(e[a.optionsText]):e=>ce(e))),i=o("form",null),c=s((()=>a.noSelectionText??Pt("select.noSelection","-"))),u=s((()=>i&&a.name?i.getFieldValue(a.name):a.modelValue)),d=s((()=>i&&a.name?i.errors[a.name]??null:null));function p(e){i&&a.name?i.setFieldValue(a.name,e):n("update:modelValue",e)}const m={id:`select-${ne()}`,noSelectionText:c,selectedOption:u,errors:d,options:s((()=>a.options)),label:s((()=>a.label)),buttonText:s((()=>null===u.value?c.value:l.value(u.value))),renderText:l,update:p};return y("select",m),t(m),(e,t)=>(h(),f(_(Ce),{"model-value":u.value,"onUpdate:modelValue":t[0]||(t[0]=e=>p(e))},{default:g((({value:t,open:s,disabled:r})=>[b(e.$slots,"default",{value:t,open:s,disabled:r})])),_:3},8,["model-value"]))}});bo.__file="src/components/headless/forms/AGHeadlessSelect.vue";var _o=p({__name:"AGHeadlessSelectButton",props:{textClass:pt()},setup(e){const t=et("select","<AGHeadlessSelectButton> must be a child of a <AGHeadlessSelect>");return(s,r)=>(h(),f(_($e),null,{default:g((({value:r,open:o,disabled:n})=>[b(s.$slots,"default",{value:r,open:o,disabled:n},(()=>[S("span",{class:G(e.textClass)},L(_(t)?.buttonText),3)])),b(s.$slots,"icon")])),_:3}))}});_o.__file="src/components/headless/forms/AGHeadlessSelectButton.vue";const yo=["id"];var xo=p({__name:"AGHeadlessSelectError",setup(e){const t=et("select","<AGHeadlessSelectError> must be a child of a <AGHeadlessSelect>"),r=s((()=>t.errors?Pt(`errors.${t.errors[0]}`,`Error: ${t.errors[0]}`):null));return(e,s)=>r.value?(h(),A("p",{key:0,id:`${_(t).id}-error`},L(r.value),9,yo)):$("v-if",!0)}});xo.__file="src/components/headless/forms/AGHeadlessSelectError.vue";var wo=p({__name:"AGHeadlessSelectLabel",setup(e){const t=et("select","<AGHeadlessSelectLabel> must be a child of a <AGHeadlessSelect>"),r=q(),o=s((()=>!(!t.label&&!r.default)));return(e,s)=>o.value?(h(),f(_(je),{key:0},{default:g((({open:s,disabled:r})=>[b(e.$slots,"default",{open:s,disabled:r},(()=>[H(L(_(t).label),1)]))])),_:3})):$("v-if",!0)}});wo.__file="src/components/headless/forms/AGHeadlessSelectLabel.vue";var Ao=p({__name:"AGHeadlessSelectOption",props:{value:it(),selectedClass:pt(),unselectedClass:pt(),activeClass:pt(),inactiveClass:pt()},setup(e){const t=et("select","<AGHeadlessSelectOption> must be a child of a <AGHeadlessSelect>");return(s,r)=>(h(),f(_(Me),{value:e.value,as:"template"},{default:g((({active:r,selected:o,disabled:n})=>[b(s.$slots,"default",{active:r,selected:o,disabled:n},(()=>[S("li",{class:G({[e.activeClass??"active"]:r,[e.inactiveClass??"inactive"]:!r,[e.selectedClass??"selected"]:o,[e.unselectedClass??"unselected"]:!o})},L(_(t).renderText(e.value)),3)]))])),_:3},8,["value"]))}});Ao.__file="src/components/headless/forms/AGHeadlessSelectOption.vue";const ko={class:"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2"};var So=p({__name:"AGSelect",props:fo(),emits:vo(),setup(e){const t=e,s=Je();return(e,r)=>(h(),f(bo,M(t,{ref_key:"$select",ref:s,as:"div","onUpdate:modelValue":r[0]||(r[0]=t=>e.$emit("update:modelValue",t))}),{default:g((()=>[C(wo,{class:"block text-sm font-medium leading-6 text-gray-900"}),S("div",{class:G(["relative",{"mt-2":_(s)?.label}])},[C(_o,{class:G(["relative w-full cursor-default bg-white py-1.5 pl-3 pr-10 text-left text-gray-900 ring-1 ring-inset ring-gray-300 focus:outline-none focus:ring-2 focus:ring-indigo-600",{"ring-1 ring-red-500":_(s)?.errors}]),"text-class":"block truncate"},{icon:g((()=>[S("span",ko,[C(_(po),{class:"h-5 w-5 text-gray-400"})])])),_:1},8,["class"]),C(_(Ee),{class:"absolute z-10 mt-1 max-h-60 w-full overflow-auto border bg-white py-1 text-base ring-1 ring-black ring-opacity-5 focus:outline-none"},{default:g((()=>[(h(!0),A(k,null,T(_(s)?.options??[],((e,t)=>(h(),f(Ao,{key:t,value:e,class:"relative block cursor-default select-none truncate py-2 pl-3 pr-9","selected-class":"font-semibold","unselected-class":"font-normal","active-class":"bg-indigo-600 text-white","inactive-class":"text-gray-900"},null,8,["value"])))),128))])),_:1})],2),C(xo,{class:"mt-2 text-sm text-red-600"})])),_:1},16))}});So.__file="src/components/forms/AGSelect.vue";const Go=["id","name","required","value","aria-invalid","aria-describedby"];var Co=p({__name:"AGHeadlessInputTextArea",setup(e){const r=t(),o=et("input","<AGHeadlessInputTextArea> must be a child of a <AGHeadlessInput>"),n=s((()=>o.name??void 0)),a=s((()=>o.value));function l(){r.value&&o.update(r.value.value)}return P((()=>o.__setElement(r.value))),pr(o,(()=>r.value?.focus())),(e,t)=>(h(),A("textarea",{id:_(o).id,ref_key:"$textArea",ref:r,name:n.value,required:_(o).required??void 0,value:a.value,"aria-invalid":_(o).errors?"true":"false","aria-describedby":_(o).errors?`${_(o).id}-error`:_(o).description?`${_(o).id}-description`:void 0,onInput:l},null,40,Go))}});Co.__file="src/components/headless/forms/AGHeadlessInputTextArea.vue";var $o=p({__name:"AGErrorMessage",props:{error:ut()},setup(e){const t=e,r=s((()=>Dt(t.error)));return(e,t)=>(h(),f(us,{text:r.value,inline:""},null,8,["text"]))}});$o.__file="src/components/lib/AGErrorMessage.vue";var jo=p({__name:"AGLink",setup:e=>(e,t)=>(h(),f(ws,{class:"font-medium hover:underline"},{default:g((()=>[b(e.$slots,"default")])),_:3}))});jo.__file="src/components/lib/AGLink.vue";var Mo=p({__name:"AGMeasured",props:{as:pt("span")},setup(e){const s=t(!1);return(t,r)=>{const o=O("measure");return D((h(),f(v(e.as),{class:G({"!invisible !absolute !w-auto":!s.value})},{default:g((()=>[b(t.$slots,"default")])),_:3},8,["class"])),[[o,()=>s.value=!0]])}}});Mo.__file="src/components/lib/AGMeasured.vue";const Eo={class:"mt-1 h-2 w-full min-w-[min(400px,80vw)] overflow-hidden rounded-full bg-gray-200"},Ho={class:"sr-only"};var Lo=p({__name:"AGProgressBar",props:{progress:ot(),barClass:pt(""),job:nt()},setup(e){const r=e;let o;const n=t(0),a=s((()=>{const e=r.barClass??"";return`h-full w-full transition-transform duration-500 ease-linear ${e.includes("bg-")?e:`${e} bg-gray-700`}`})),l=s((()=>"number"==typeof r.progress?r.progress:n.value));return u((()=>o=r.job?.listeners.add({onUpdated:e=>n.value=e}))),i((()=>o?.())),(e,t)=>(h(),A("div",Eo,[S("div",{class:G(a.value),style:V(`transform:translateX(-${100*(1-l.value)}%)`)},null,6),S("span",Ho,L(e.$td("ui.progress","{progress}% complete",{progress:100*l.value})),1)]))}});Lo.__file="src/components/lib/AGProgressBar.vue";var To=p({__name:"AGModalTitle",setup:e=>(e,t)=>(h(),f(cs,{class:"mb-2 font-semibold"},{default:g((()=>[b(e.$slots,"default")])),_:3}))});To.__file="src/components/modals/AGModalTitle.vue";class JobCancelledError extends U{}class Po{constructor(){z(this,"status",void 0),z(this,"_listeners",void 0),z(this,"_progress",void 0),z(this,"_cancelled",void 0),z(this,"_started",void 0),z(this,"_completed",void 0),this.status=this.getInitialStatus(),this._listeners=new fe,this._started=new W,this._completed=new W}async start(){this.beforeStart(),this._started.resolve();try{await this.updateProgress(),await this.run(),await this.updateProgress(),this._completed.resolve()}catch(e){if(e instanceof JobCancelledError)return;throw F(ve(e),(e=>{this._completed.reject(e)}))}}async cancel(){this._cancelled=new W,await this._cancelled}serialize(){return this.serializeStatus(this.status)}get listeners(){return this._listeners}get progress(){return this._progress??0}get cancelled(){return!!this._cancelled?.isResolved()}get started(){return this._started}get completed(){return this._completed}getInitialStatus(){return{completed:!1}}beforeStart(){if(this._started.isResolved()){if(this._cancelled)return delete this._progress,void delete this._cancelled;throw new Error("Job already started!")}}assertNotCancelled(){if(this._cancelled)throw this._cancelled.resolve(),new JobCancelledError}calculateCurrentProgress(e){return e??=this.status,e.completed?1:e.children?ge(e.children.reduce(((e,t)=>e+this.calculateCurrentProgress(t)),0)/e.children.length,2):0}async updateProgress(e){await(e?.(this.status));const t=this.calculateCurrentProgress();t!==this._progress&&(this._progress=t,await this._listeners.emit("onUpdated",t))}serializeStatus(e){return{...e}}}async function Io(e){await e.start()}export{fs as AGAlertModal,ao as AGAppLayout,oo as AGAppOverlays,As as AGButton,io as AGCheckbox,Ss as AGConfirmModal,$o as AGErrorMessage,Fs as AGErrorReportModalButtons,Ns as AGErrorReportModalTitle,or as AGForm,ws as AGHeadlessButton,ir as AGHeadlessInput,cr as AGHeadlessInputDescription,dr as AGHeadlessInputError,hr as AGHeadlessInputInput,vr as AGHeadlessInputLabel,Co as AGHeadlessInputTextArea,as as AGHeadlessModal,is as AGHeadlessModalPanel,cs as AGHeadlessModalTitle,bo as AGHeadlessSelect,_o as AGHeadlessSelectButton,xo as AGHeadlessSelectError,wo as AGHeadlessSelectLabel,Ao as AGHeadlessSelectOption,Rr as AGHeadlessSnackbar,br as AGInput,jo as AGLink,er as AGLoadingModal,us as AGMarkdown,Mo as AGMeasured,ps as AGModal,ls as AGModalContext,To as AGModalTitle,Lo as AGProgressBar,Pr as AGPromptModal,So as AGSelect,Vr as AGSnackbar,Wr as AGStartupCrash,Ue as App,ze as AppService,bt as Cache,gt as CacheService,Rt as Colors,qt as Errors,Be as EventListenerPriorities,De as Events,Oe as EventsService,kr as Form,wr as FormFieldTypes,Po as Job,Lt as Lang,St as Layouts,kt as MOBILE_BREAKPOINT,qe as Service,qr as SnackbarColors,_t as Storage,Mt as UI,$t as UIComponents,jt as UIService,ms as alertModalProps,We as arrayProp,Gr as booleanInput,Ke as booleanProp,wt as bootServices,Zr as bootstrap,Qr as bootstrapApplication,Je as componentRef,Qe as computedAsync,vs as confirmModalProps,Cr as dateInput,Ze as defineDirective,yr as defineFormValidationRule,Fe as definePlugin,Re as defineServiceState,Ie as defineServiceStore,Io as dispatch,xs as elementRef,Xe as enumProp,Hs as errorReportModalProps,lr as extractInputProps,os as extractModalProps,go as extractSelectProps,Gt as getCurrentLayout,_s as getElement,Dt as getErrorMessage,Pe as getPiniaStore,ys as hasElement,tt as injectOrFail,Ye as injectReactive,et as injectReactiveOrFail,nr as inputProps,Ne as installPlugins,st as listenerProp,Zs as loadingModalProps,rt as mixedProp,ss as modalProps,Hr as numberInput,ot as numberProp,nt as objectProp,Qt as onCleanMounted,pr as onFormFocus,Zt as persistent,tr as promptModalProps,Ot as registerErrorHandler,es as removeInteractiveClasses,Xt as renderMarkdown,yt as replaceExisting,at as requiredArrayProp,$r as requiredBooleanInput,jr as requiredDateInput,lt as requiredEnumProp,it as requiredMixedProp,Mr as requiredNumberInput,ct as requiredNumberProp,ut as requiredObjectProp,Er as requiredStringInput,dt as requiredStringProp,Te as resetPiniaStore,Yt as safeHtml,ho as selectEmits,mo as selectProps,Br as snackbarProps,Lr as stringInput,pt as stringProp,Tt as translate,Pt as translateWithDefault,hs as useAlertModalProps,bs as useConfirmModal,gs as useConfirmModalProps,Ts as useErrorReportModal,Ls as useErrorReportModalProps,Kt as useEvent,Sr as useForm,Jt as useInputAttrs,ar as useInputProps,Ys as useLoadingModal,Xs as useLoadingModalProps,ns as useModalExpose,rs as useModalProps,rr as usePromptModal,sr as usePromptModalProps,vo as useSelectEmits,fo as useSelectProps,Dr as useSnackbar,Or as useSnackbarProps,xr as validate,_r as validators};
2
2
  //# sourceMappingURL=aerogel-core.esm.js.map