@aerogel/core 0.0.0-next.980a397d575dcb5ff8c5a0bff769d09f938ea03c → 0.0.0-next.a3194a101ceda87a7033fa5e283e046bad6f4bfc
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/aerogel-core.cjs.js +1 -1
- package/dist/aerogel-core.cjs.js.map +1 -1
- package/dist/aerogel-core.d.ts +598 -117
- package/dist/aerogel-core.esm.js +1 -1
- package/dist/aerogel-core.esm.js.map +1 -1
- package/package.json +2 -2
- package/src/bootstrap/bootstrap.test.ts +3 -3
- package/src/bootstrap/index.ts +16 -5
- package/src/bootstrap/options.ts +3 -0
- package/src/components/AGAppLayout.vue +3 -2
- package/src/components/AGAppOverlays.vue +5 -1
- package/src/components/forms/AGCheckbox.vue +7 -1
- package/src/components/forms/AGInput.vue +10 -6
- package/src/components/forms/AGSelect.story.vue +21 -3
- package/src/components/forms/AGSelect.vue +10 -3
- package/src/components/headless/forms/AGHeadlessButton.vue +8 -8
- package/src/components/headless/forms/AGHeadlessInput.ts +7 -10
- package/src/components/headless/forms/AGHeadlessInput.vue +1 -0
- package/src/components/headless/forms/AGHeadlessInputDescription.vue +28 -0
- package/src/components/headless/forms/AGHeadlessInputInput.vue +5 -1
- package/src/components/headless/forms/AGHeadlessSelect.ts +20 -22
- package/src/components/headless/forms/AGHeadlessSelect.vue +23 -22
- package/src/components/headless/forms/AGHeadlessSelectOption.vue +6 -6
- package/src/components/headless/forms/index.ts +1 -0
- package/src/components/headless/modals/AGHeadlessModal.ts +19 -1
- package/src/components/headless/modals/AGHeadlessModal.vue +3 -5
- package/src/components/headless/snackbars/index.ts +23 -8
- package/src/components/lib/AGErrorMessage.vue +2 -2
- package/src/components/lib/AGMarkdown.vue +7 -2
- package/src/components/lib/AGMeasured.vue +15 -0
- package/src/components/lib/index.ts +1 -0
- package/src/components/modals/AGAlertModal.ts +15 -0
- package/src/components/modals/AGAlertModal.vue +3 -14
- package/src/components/modals/AGConfirmModal.ts +17 -0
- package/src/components/modals/AGConfirmModal.vue +6 -10
- package/src/components/modals/AGErrorReportModal.ts +27 -1
- package/src/components/modals/AGErrorReportModal.vue +7 -15
- package/src/components/modals/AGErrorReportModalButtons.vue +4 -2
- package/src/components/modals/AGLoadingModal.ts +14 -0
- package/src/components/modals/AGLoadingModal.vue +3 -7
- package/src/components/modals/AGModal.vue +14 -12
- package/src/components/modals/AGPromptModal.ts +30 -0
- package/src/components/modals/AGPromptModal.vue +34 -0
- package/src/components/modals/index.ts +11 -19
- package/src/components/snackbars/AGSnackbar.vue +2 -8
- package/src/components/utils.ts +10 -0
- package/src/directives/index.ts +5 -1
- package/src/directives/measure.ts +21 -0
- package/src/errors/Errors.ts +26 -24
- package/src/errors/index.ts +2 -11
- package/src/errors/utils.ts +19 -0
- package/src/forms/Form.ts +1 -0
- package/src/jobs/Job.ts +5 -0
- package/src/jobs/index.ts +7 -0
- package/src/lang/Lang.ts +11 -23
- package/src/main.ts +3 -0
- package/src/services/App.state.ts +1 -2
- package/src/services/App.ts +21 -3
- package/src/services/Events.test.ts +39 -0
- package/src/services/Events.ts +100 -30
- package/src/services/Service.ts +42 -12
- package/src/services/index.ts +2 -1
- package/src/services/store.ts +8 -5
- package/src/testing/index.ts +25 -0
- package/src/ui/UI.ts +98 -15
- package/src/ui/index.ts +8 -3
- package/src/utils/composition/events.ts +1 -0
- package/src/utils/index.ts +1 -0
- package/src/utils/tailwindcss.test.ts +26 -0
- package/src/utils/tailwindcss.ts +7 -0
- package/src/utils/vue.ts +10 -1
package/dist/aerogel-core.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{ref as e,inject as t,reactive as s,markRaw as r,nextTick as o,onUnmounted as n,useAttrs as a,computed as l,onMounted as i,defineComponent as c,toRef as u,openBlock as d,createBlock as p,unref as m,withCtx as f,renderSlot as h,provide as v,resolveDynamicComponent as g,normalizeProps as _,guardReactiveProps as b,createElementBlock as y,Fragment as x,createVNode as A,createCommentVNode as w,createElementVNode as k,mergeProps as S,h as G,normalizeClass as j,createTextVNode as C,toDisplayString as $,renderList as M,readonly as E,useSlots as H,createApp as I,withModifiers as L}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{JSError as R,MagicObject as O,PromisedValue as B,objectOnly as P,isEmpty as T,Storage as V,objectDeepClone as z,facade as D,arr as q,tap as U,updateLocationQueryParameters as F,forever as N,fail as K,after as W,uuid as Q,toString as Z,isObject as Y,objectWithoutEmpty as J,objectWithout as X,noop as ee,stringExcerpt as te}from"@noeldemartin/utils";import se from"@babel/runtime/helpers/esm/defineProperty";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{defineStore as re,createPinia as oe,setActivePinia as ne}from"pinia";import ae from"virtual:aerogel";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.some.js";import"core-js/modules/esnext.iterator.some.js";import"core-js/modules/esnext.async-iterator.for-each.js";import"core-js/modules/esnext.iterator.for-each.js";import{Dialog as le,DialogPanel as ie,Listbox as ce,ListboxButton as ue,ListboxLabel as de,ListboxOption as pe,DialogTitle as me,ListboxOptions as fe}from"@headlessui/vue";export{ListboxOptions as AGHeadlessSelectOptions}from"@headlessui/vue";import he from"dompurify";import{marked as ve,Renderer as ge}from"marked";import"core-js/modules/esnext.weak-map.delete-all.js";import"core-js/modules/esnext.weak-map.emplace.js";class ServiceBootError extends R{constructor(e,t){super(`Service '${e}' failed booting`,{cause:t})}}let _e=null;function be(){return _e||(_e=oe(),ne(_e)),_e}function ye(e){var t;return se(t=class extends xe{usesStore(){return!0}getName(){return e.name??null}getInitialState(){return e.initialState}getComputedStateDefinition(){return e.computed??{}}serializePersistedState(t){return e.serialize?.(t)??t}},"persist",e.persist??[]),t}class xe extends O{constructor(){super(),se(this,"_name",void 0),se(this,"_booted",void 0),se(this,"_computedStateKeys",void 0),se(this,"_store",void 0);const e=this.getComputedStateDefinition();var t,s;this._name=this.getName()??new.target.name,this._booted=new B,this._computedStateKeys=new Set(Object.keys(e)),this._store=this.usesStore()&&(t=this._name,s={state:()=>this.getInitialState(),getters:e},be(),re(t,s)())}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}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=P(e,t);if(T(s))return;const r=V.get(this._name);r&&V.set(this._name,{...r,...this.serializePersistedState(z(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()&&!T(e))if(V.has(this._name)){const e=V.require(this._name);this.setState(e)}else V.set(this._name,P(this.getState(),e))}}se(xe,"persist",[]);class Ae extends xe{constructor(){super(...arguments),se(this,"listeners",{})}async emit(e,t){const s=[...this.listeners[e]??[]];await Promise.all(s.map((e=>e(t)))??[])}on(e,t){return(this.listeners[e]??=q([])).push(t),()=>this.off(e,t)}once(e,t){let s=null;return U((()=>s&&this.off(e,s)),(r=>{(this.listeners[e]??=q([])).push(s=function(){return r(),t(...arguments)})}))}off(e,t){const s=this.listeners[e];s&&(s.remove(t),s.isEmpty()&&delete this.listeners[e])}}var we=D(new Ae),ke=ye({name:"app",initialState:{plugins:{},environment:ae.environment,sourceUrl:ae.sourceUrl,isMounted:!1},computed:{development:e=>"development"===e.environment,testing:e=>"testing"===e.environment}});class Se extends ke{async reload(e){e&&F(e),location.reload(),await N()}plugin(e){return this.plugins[e]??null}async boot(){we.once("application-mounted",(()=>this.setState({isMounted:!0})))}}var Ge=D(new Se);function je(e){return e}async function Ce(e){for(var t=arguments.length,s=new Array(t>1?t-1:0),r=1;r<t;r++)s[r-1]=arguments[r];Ge.setState("plugins",e.reduce(((e,t)=>(t.name&&(e[t.name]=t),e)),{})),await Promise.all(e.map((e=>e.install(...s)))??[])}function $e(e){return{type:Array,default:e??(()=>[])}}function Me(){return{type:Boolean,default:arguments.length>0&&void 0!==arguments[0]&&arguments[0]}}function Ee(){return e()}function He(e){return e}function Ie(e,t){const s=Object.values(e);return{type:String,default:t??s[0]??null,validator:e=>s.includes(e)}}function Le(e){const r=t(e);return r?s(r):void 0}function Re(e,t){return Le(e)??K(t??`Could not resolve '${e}' injection key`)}function Oe(e,s){return t(e)??K(s??`Could not resolve '${e}' injection key`)}function Be(e){return{type:e,default:null}}function Pe(){return{type:Number,default:arguments.length>0&&void 0!==arguments[0]?arguments[0]:null}}function Te(){return{type:Object,default:arguments.length>0&&void 0!==arguments[0]?arguments[0]:null}}function Ve(){return{type:Array,required:!0}}function ze(e){const t=Object.values(e);return{type:String,required:!0,validator:e=>t.includes(e)}}function De(e){return{type:e,required:!0}}function qe(){return{type:Number,required:!0}}function Ue(){return{type:Object,required:!0}}function Fe(){return{type:String,required:!0}}function Ne(){return{type:String,default:arguments.length>0&&void 0!==arguments[0]?arguments[0]:null}}const Ke={"initial-focus":{mounted(e,t){let{value:s}=t;!1!==s&&e.focus()}}};var We={install(e,t){const s={...Ke,...t.directives};for(const[t,r]of Object.entries(s))e.directive(t,r)}};const Qe={$app:Ge,$events:we};async function Ze(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),Ge.development&&Object.assign(window,t)}var Ye={async install(e,t){const s={...Qe,...t.services};e.use(_e??be()),await Ze(e,s)}},Je=ye({name:"ui",initialState:{modals:[],snackbars:[]}});const Xe={AlertModal:"alert-modal",ConfirmModal:"confirm-modal",ErrorReportModal:"error-report-modal",LoadingModal:"loading-modal",Snackbar:"snackbar"};var et=D(new class extends Je{constructor(){super(...arguments),se(this,"modalCallbacks",{}),se(this,"components",{})}requireComponent(e){return this.components[e]??K(`UI Component '${e}' is not defined!`)}alert(e,t){const s="string"==typeof t?{title:e,message:t}:{message:e};this.openModal(this.requireComponent(Xe.AlertModal),s)}async confirm(e,t){const s="string"==typeof t?{title:e,message:t}:{message:e},r=await this.openModal(this.requireComponent(Xe.ConfirmModal),s);return await r.beforeClose??!1}async loading(e,t){t="string"==typeof e?t:e;const s="string"==typeof e?e:void 0,r=await this.openModal(this.requireComponent(Xe.LoadingModal),{message:s});try{const[e]=await Promise.all([t,W({seconds:1})]);return e}finally{await this.closeModal(r.id)}}showSnackbar(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const s={id:Q(),properties:{message:e,...t},component:t.component??r(this.requireComponent(Xe.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=Q(),n={},a={id:s,properties:t??{},component:r(e),beforeClose:new Promise((e=>n.willClose=e)),afterClose:new Promise((e=>n.closed=e))},l=this.modals.at(-1),i=this.modals.concat(a);return this.modalCallbacks[a.id]=n,this.setState({modals:i}),await o(),await(l&&we.emit("hide-modal",{id:l.id})),await Promise.all([l||we.emit("show-overlays-backdrop"),we.emit("show-modal",{id:a.id})]),a}async closeModal(e,t){await we.emit("close-modal",{id:e,result:t})}async boot(){this.watchModalEvents(),this.watchMountedEvent()}watchModalEvents(){we.on("modal-will-close",(e=>{let{modal:t,result:s}=e;this.modalCallbacks[t.id]?.willClose?.(s),1===this.modals.length&&we.emit("hide-overlays-backdrop")})),we.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&&we.emit("show-modal",{id:r.id}))}))}watchMountedEvent(){we.once("application-mounted",(async()=>{const e=document.getElementById("splash");e&&("0"!==window.getComputedStyle(e).opacity&&(e.style.opacity="0",await W({ms:600})),e.remove())}))}});var tt=D(new class extends xe{constructor(){super(),se(this,"provider",void 0),this.provider={translate:e=>(Ge.development&&console.warn("Lang provider is missing"),e)}}setProvider(e){this.provider=e}translate(e,t){return this.provider.translate(e,t)??e}translateWithDefault(e,t,s){s??=t;const r="string"==typeof t?{}:t??{},o=this.provider.translate(e,r)??e;return o===e?Object.entries(r).reduce(((e,t)=>{let[s,r]=t;return e.replace(new RegExp(`\\{\\s*${s}\\s*\\}`,"g"),Z(r))}),s):o}});const st=tt.translate.bind(tt),rt=tt.translateWithDefault.bind(tt);var ot=ye({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 nt={Primary:"primary",Secondary:"secondary",Danger:"danger",Clear:"clear"};var at=D(new class extends ot{constructor(){super(...arguments),se(this,"forceReporting",!1),se(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?et.openModal(et.requireComponent(Xe.ErrorReportModal),{reports:t}):et.alert(rt("errors.inspectEmpty","Nothing to inspect!"))}async report(e,t){if((Ge.development||Ge.testing)&&this.logError(e),!this.enabled)throw e;if(!Ge.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};et.showSnackbar(t??rt("errors.notice","Something went wrong, but it's not your fault. Try again!"),{color:nt.Danger,actions:[{text:rt("errors.viewDetails","View details"),dismiss:!0,handler:()=>et.openModal(et.requireComponent(Xe.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})))})}getErrorMessage(e){return"string"==typeof e?e:e instanceof Error||e instanceof R?e.message:Y(e)?Z(e.message??e.description??"Unknown error object"):rt("errors.unknown","Unknown Error")}logError(e){console.error(e),Y(e)&&e.cause&&this.logError(e.cause)}async createErrorReport(e){return"string"==typeof e?{title:e}:e instanceof Error||e instanceof R?this.createErrorReportFromError(e):Y(e)?J({title:Z(e.name??e.title??rt("errors.unknown","Unknown Error")),description:Z(e.message??e.description??rt("errors.unknownDescription","Unknown error object")),error:e}):{title:rt("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 lt={$errors:at};function it(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:()=>!1;const s=e=>t(e)||(e=>at.instance?(at.report(e),!0):(console.warn("Errors service hasn't been initialized properly!"),console.error(e),!0))(e);e.config.errorHandler=s,globalThis.onerror=(e,t,r,o,n)=>s(n??e),globalThis.onunhandledrejection=e=>s(e.reason)}var ct={async install(e,t){it(e,t.handleError),await Ze(e,lt)}};const ut={$lang:tt};var dt={async install(e){e.config.globalProperties.$t??=st,e.config.globalProperties.$td=rt,await Ze(e,ut)}};function pt(e,t){const s=we.on(e,t);n((()=>s()))}function mt(){const e=a(),t=l((()=>e.class));return[l((()=>X(e,"class"))),t]}function ft(e){let t=ee;i((()=>t=e())),n((()=>t()))}var ht=c({__name:"AGHeadlessModal",props:{cancellable:Me(!0)},setup(t,{expose:s}){const r=t,o=e(null),n=e(!0),a=e(!1),{modal:l}=Re("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&&(n.value=!0)}async function c(e){a.value||(we.emit("modal-will-close",{modal:l,result:e}),await i(),a.value=!0,we.emit("modal-closed",{modal:l,result:e}))}return pt("close-modal",(async({id:e,result:t})=>{e===l.id&&await c(t)})),pt("hide-modal",(async({id:e})=>{e===l.id&&await i()})),pt("show-modal",(async({id:e})=>{e===l.id&&await async function(){o.value?.$el&&(n.value=!1)}()})),s({close:c,cancellable:u(r,"cancellable")}),(e,s)=>(d(),p(m(le),{ref_key:"$root",ref:o,open:!0,onClose:s[0]||(s[0]=e=>t.cancellable&&c())},{default:f((()=>[h(e.$slots,"default",{close:c})])),_:3},512))}});ht.__file="src/components/headless/modals/AGHeadlessModal.vue";var vt=c({__name:"AGModalContext",props:{modal:Ue(),childIndex:qe()},setup(e){const t=e;return v("modal",{modal:u(t,"modal"),childIndex:u(t,"childIndex")}),(t,s)=>(d(),p(g(e.modal.component),_(b(e.modal.properties)),null,16))}});vt.__file="src/components/modals/AGModalContext.vue";const gt=k("div",{class:"pointer-events-none fixed inset-0 z-50 bg-black/30"},null,-1);var _t=c({__name:"AGHeadlessModalPanel",setup(e){const t=Re("modal","could not obtain modal reference from <AGHeadlessModalPanel>, did you render this component manually? Show it using $ui.openModal() instead"),s=l((()=>et.modals[t.childIndex]??null));return(e,r)=>(d(),p(m(ie),null,{default:f((()=>[h(e.$slots,"default"),s.value?(d(),y(x,{key:0},[gt,A(vt,{"child-index":m(t).childIndex+1,modal:s.value},null,8,["child-index","modal"])],64)):w("v-if",!0)])),_:3}))}});_t.__file="src/components/headless/modals/AGHeadlessModalPanel.vue";const bt={class:"fixed inset-0 flex items-center justify-center p-8"};var yt=c({inheritAttrs:!1,__name:"AGModal",props:{cancellable:Me(!0)},setup(t,{expose:s}){const r=e();return s({close:async()=>r.value?.close(),cancellable:l((()=>!!r.value?.cancellable))}),(e,s)=>(d(),p(ht,{ref_key:"$headlessModal",ref:r,cancellable:t.cancellable,class:"relative z-50"},{default:f((({close:t})=>[k("div",bt,[A(_t,{class:"flex max-h-full max-w-full flex-col overflow-hidden bg-white"},{default:f((()=>[k("div",S({class:"flex max-h-full flex-col overflow-auto p-4"},e.$attrs),[h(e.$slots,"default",{close:t})],16)])),_:2},1024)])])),_:3},8,["cancellable"]))}});function xt(e){return t=ve(e,{mangle:!1,headerIds:!1,renderer:U(new ge,(e=>{e.link=function(e,t,s){return ge.prototype.link.apply(this,[e,t,s]).replace("<a",'<a target="_blank"')}}))}),he.sanitize(t,{ADD_ATTR:["target"]});var t}yt.__file="src/components/modals/AGModal.vue";var At=c({__name:"AGMarkdown",props:{as:Ne(),inline:Me(),langKey:Ne(),langParams:Te(),text:Ne()},setup(e){const t=e,s=l((()=>t.text??(t.langKey&&st(t.langKey,t.langParams??{})))),r=l((()=>{if(!s.value)return null;let e=xt(s.value);return t.inline&&(e=e.replace("<p>","<span>").replace("</p>","</span>")),e})),o=()=>G(t.as??(t.inline?"span":"div"),{class:t.inline?"":"prose",innerHTML:r.value});return(e,t)=>(d(),p(o))}});At.__file="src/components/lib/AGMarkdown.vue";var wt=c({__name:"AGAlertModal",props:{title:Ne(),message:Fe()},setup:e=>(t,s)=>(d(),p(yt,null,{default:f((()=>[e.title?(d(),p(At,{key:0,text:e.title,as:"h2",class:"font-semibold",inline:""},null,8,["text"])):w("v-if",!0),A(At,{text:e.message},null,8,["text"])])),_:1}))});wt.__file="src/components/modals/AGAlertModal.vue";var kt=c({__name:"AGHeadlessButton",props:{href:Ne(),url:Ne(),route:Ne(),routeParams:Te((()=>({}))),routeQuery:Te((()=>({}))),submit:Me()},setup(e){const{href:t,url:s,route:r,routeParams:o,routeQuery:n,submit:a}=e,i=l((()=>r?{tag:"router-link",props:{to:J({name:r,params:o,query:n})}}:t||s?{tag:"a",props:{target:"_blank",href:t||s}}:{tag:"button",props:{type:a?"submit":"button"}}));return(e,t)=>(d(),p(g(i.value.tag),_(b(i.value.props)),{default:f((()=>[h(e.$slots,"default")])),_:3},16))}});kt.__file="src/components/headless/forms/AGHeadlessButton.vue";var St=c({__name:"AGButton",props:{color:Ie(nt,nt.Primary)},setup(e){const t=e,s=l((()=>{switch(t.color){case nt.Secondary:return["text-white bg-gray-600","hover:bg-gray-500","focus-visible:outline-offset-2 focus-visible:outline-gray-600"].join(" ");case nt.Clear:return"hover:bg-gray-500/20 focus-visible:outline-gray-500/60";case nt.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)=>(d(),p(kt,{class:j(["px-2.5 py-1.5 focus-visible:outline focus-visible:outline-2",s.value])},{default:f((()=>[h(e.$slots,"default")])),_:3},8,["class"]))}});St.__file="src/components/forms/AGButton.vue";const Gt={class:"mt-2 flex flex-row-reverse gap-2"};var jt=c({__name:"AGConfirmModal",props:{title:Ne(),message:Fe()},setup:e=>(t,s)=>(d(),p(yt,{cancellable:!1},{default:f((({close:s})=>[e.title?(d(),p(At,{key:0,text:e.title,as:"h1"},null,8,["text"])):w("v-if",!0),A(At,{text:e.message},null,8,["text"]),k("div",Gt,[A(St,{onClick:e=>s(!0)},{default:f((()=>[C($(t.$td("ui.ok","OK")),1)])),_:2},1032,["onClick"]),A(St,{color:"secondary",onClick:e=>s()},{default:f((()=>[C($(t.$td("ui.cancel","Cancel")),1)])),_:2},1032,["onClick"])])])),_:1}))});jt.__file="src/components/modals/AGConfirmModal.vue";const Ct={viewBox:"0 0 20 20",width:"1.2em",height:"1.2em"},$t=[k("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 Mt={name:"zondicons-cheveron-right",render:function(e,t){return d(),y("svg",Ct,$t)}};const Et={viewBox:"0 0 20 20",width:"1.2em",height:"1.2em"},Ht=[k("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 It={name:"zondicons-cheveron-left",render:function(e,t){return d(),y("svg",Et,Ht)}};const Lt={reports:Ve()};function Rt(){return Lt}const Ot={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},Bt=[k("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 Pt={name:"mdi-console",render:function(e,t){return d(),y("svg",Ot,Bt)}};const Tt={viewBox:"0 0 20 20",width:"1.2em",height:"1.2em"},Vt=[k("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 zt={name:"zondicons-copy",render:function(e,t){return d(),y("svg",Tt,Vt)}};const Dt={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},qt=[k("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 Ut={name:"mdi-github",render:function(e,t){return d(),y("svg",Dt,qt)}};const Ft={class:"flex"};var Nt=c({__name:"AGErrorReportModalButtons",props:{report:Ue()},setup(e){const t=e,s=l((()=>t.report.description?`${t.report.title}: ${t.report.description}`:t.report.title)),r=l((()=>{if(!Ge.sourceUrl)return!1;const e=encodeURIComponent(s.value),r=encodeURIComponent(["[Please, explain here what you were trying to do when this error appeared]","","Error details:","```",te(t.report.details??"Details missing from report",1800-e.length-Ge.sourceUrl.length).trim(),"```"].join("\n"));return`${Ge.sourceUrl}/issues/new?title=${e}&body=${r}`})),o=l((()=>U([{id:"clipboard",description:"Copy to clipboard",iconComponent:zt,async handler(){await navigator.clipboard.writeText(`${s.value}\n\n${t.report.details}`),et.showSnackbar(rt("errors.copiedToClipboard","Debug information copied to clipboard"))}},{id:"console",description:"Log to console",iconComponent:Pt,handler(){window.error=t.report.error,console.error(t.report.error),et.showSnackbar(rt("errors.addedToConsole","You can now use the **error** variable in the console"))}}],(e=>{r.value&&e.push({id:"github",description:"Report in GitHub",iconComponent:Ut,url:r.value})}))));return(e,t)=>(d(),y("div",Ft,[(d(!0),y(x,null,M(o.value,((t,s)=>h(e.$slots,"default",S(t,{key:s}),(()=>[A(St,{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:f((()=>[(d(),p(g(t.iconComponent),{class:"h-4 w-4","aria-hidden":"true"}))])),_:2},1032,["url","title","aria-label","onClick"])])))),128))]))}});Nt.__file="src/components/modals/AGErrorReportModalButtons.vue";var Kt=c({__name:"AGErrorReportModalTitle",props:{report:Ue(),currentReport:Pe(),totalReports:Pe()},setup(e){const t=e,s=l((()=>!t.totalReports||t.totalReports<=1?t.report.title:`${t.report.title} (${t.currentReport}/${t.totalReports})`));return(e,t)=>(d(),p(At,{text:s.value,inline:""},null,8,["text"]))}});Kt.__file="src/components/modals/AGErrorReportModalTitle.vue";const Wt={class:"flex items-center justify-between text-lg font-medium"},Qt={class:"flex items-center"},Zt=["textContent"];var Yt=c({__name:"AGErrorReportModal",props:Rt(),setup(t){const s=t,r=e(0),o=l((()=>s.reports[r.value]));return(e,t)=>(d(),p(yt,null,{default:f((()=>[k("div",null,[k("h2",Wt,[k("div",Qt,[A(Kt,{report:o.value,"current-report":r.value+1,"total-reports":e.reports.length},null,8,["report","current-report","total-reports"]),e.reports.length>1?(d(),y(x,{key:0},[A(St,{color:"clear",disabled:0===r.value,title:e.$td("errors.previousReport","Show previous report"),"aria-label":e.$td("errors.previousReport","Show previous report"),onClick:t[0]||(t[0]=e=>r.value--)},{default:f((()=>[A(m(It),{"aria-hidden":"true",class:"h-4 w-4"})])),_:1},8,["disabled","title","aria-label"]),A(St,{color:"clear",disabled:r.value===e.reports.length-1,title:e.$td("errors.nextReport","Show next report"),"aria-label":e.$td("errors.nextReport","Show next report"),onClick:t[1]||(t[1]=e=>r.value++)},{default:f((()=>[A(m(Mt),{"aria-hidden":"true",class:"h-4 w-4"})])),_:1},8,["disabled","title","aria-label"])],64)):w("v-if",!0)]),A(Nt,{report:o.value},null,8,["report"])]),o.value.description?(d(),p(At,{key:0,text:o.value.description,class:"mt-2"},null,8,["text"])):w("v-if",!0)]),k("pre",{class:"h-full overflow-auto bg-gray-200 p-4 text-xs text-red-900",textContent:$(o.value.details??e.$td("errors.detailsEmpty","This error is missing a stacktrace."))},null,8,Zt)])),_:1}))}});Yt.__file="src/components/modals/AGErrorReportModal.vue";var Jt=c({__name:"AGLoadingModal",props:{message:Ne()},setup(e){const t=e,s=l((()=>t.message??rt("ui.loading","Loading...")));return(e,t)=>(d(),p(yt,{cancellable:!1},{default:f((()=>[A(At,{text:s.value},null,8,["text"])])),_:1}))}});Jt.__file="src/components/modals/AGLoadingModal.vue";const Xt={name:Ne(),label:Ne()};function es(){return Xt}function ts(e){return Object.keys(Xt).reduce(((t,s)=>{const r=s;return t[r]=e[r],t}),{})}const ss={name:Ne(),label:Ne(),options:Ve(),noSelectionText:Ne()};function rs(){return ss}function os(e){return Object.keys(ss).reduce(((t,s)=>{const r=s;return t[r]=e[r],t}),{})}var ns=c({__name:"AGHeadlessInput",props:{as:Ne("div"),modelValue:Be([String,Number,Boolean]),...es()},emits:["update:modelValue"],setup(e,{expose:s,emit:r}){const o=e,n=l((()=>a&&o.name?a.errors[o.name]??null:null)),a=t("form",null),i={id:`input-${Q()}`,name:l((()=>o.name)),label:l((()=>o.label)),value:l((()=>a&&o.name?a.getFieldValue(o.name):o.modelValue)),errors:E(n),update(e){a&&o.name?a.setFieldValue(o.name,e):r("update:modelValue",e)}};return v("input",i),s(i),(t,s)=>e.as?(d(),p(g(e.as),{key:0},{default:f((()=>[h(t.$slots,"default")])),_:3})):h(t.$slots,"default",{key:1})}});ns.__file="src/components/headless/forms/AGHeadlessInput.vue";const as=["id"];var ls=c({__name:"AGHeadlessInputError",setup(e){const t=Re("input","<AGHeadlessInputError> must be a child of a <AGHeadlessInput>"),s=l((()=>t.errors?rt(`errors.${t.errors[0]}`,`Error: ${t.errors[0]}`):null));return(e,r)=>s.value?(d(),y("p",{key:0,id:`${m(t).id}-error`},$(s.value),9,as)):w("v-if",!0)}});ls.__file="src/components/headless/forms/AGHeadlessInputError.vue";const is=["id","type","value","aria-invalid","aria-describedby","checked"];var cs=c({__name:"AGHeadlessInputInput",props:{type:Ne("text")},setup(t){const s=t,r=e(),o=Re("input","<AGHeadlessInputInput> must be a child of a <AGHeadlessInput>"),n=l((()=>o.value)),a=l((()=>{if("checkbox"===s.type)return!!n.value}));function i(){r.value&&o.update("checkbox"===s.type?r.value.checked:r.value.value)}return(e,s)=>(d(),y("input",{id:m(o).id,ref_key:"$input",ref:r,type:t.type,value:n.value,"aria-invalid":m(o).errors?"true":"false","aria-describedby":m(o).errors?`${m(o).id}-error`:void 0,checked:a.value,onInput:i},null,40,is))}});cs.__file="src/components/headless/forms/AGHeadlessInputInput.vue";const us=["for"];var ds=c({__name:"AGHeadlessInputLabel",setup(e){const t=Re("input","<AGHeadlessInputLabel> must be a child of a <AGHeadlessInput>"),s=H(),r=l((()=>!(!t.label&&!s.default)));return(e,s)=>r.value?(d(),y("label",{key:0,for:m(t).id},[h(e.$slots,"default",{},(()=>[C($(m(t).label),1)]))],8,us)):w("v-if",!0)}});ds.__file="src/components/headless/forms/AGHeadlessInputLabel.vue";var ps=c({__name:"AGHeadlessSelect",props:{modelValue:Be(),...rs()},emits:["update:modelValue"],setup(e,{expose:s,emit:r}){const o=e,n=t("form",null),a=l((()=>o.noSelectionText??rt("select.noSelection","-"))),i=l((()=>o.options.map((e=>({value:e,text:Z(Y(e)&&"text"in e?e.text:e)}))))),c=l((()=>{const e=n&&o.name?n.getFieldValue(o.name):o.modelValue;return i.value.find((t=>t.value===e))})),u=l((()=>n&&o.name?n.errors[o.name]??null:null));function g(e){n&&o.name?n.setFieldValue(o.name,e):r("update:modelValue",e)}const _={id:`select-${Q()}`,options:i,noSelectionText:a,selectedOption:c,errors:u,label:l((()=>o.label)),buttonText:l((()=>c.value?.text??a.value)),update:g};return v("select",_),s(_),(e,t)=>(d(),p(m(ce),{"model-value":c.value?.value,"onUpdate:modelValue":t[0]||(t[0]=e=>g(e))},{default:f((({value:t,open:s,disabled:r})=>[h(e.$slots,"default",{value:t,open:s,disabled:r})])),_:3},8,["model-value"]))}});ps.__file="src/components/headless/forms/AGHeadlessSelect.vue";var ms=c({__name:"AGHeadlessSelectButton",props:{textClass:Ne()},setup(e){const t=Re("select","<AGHeadlessSelectButton> must be a child of a <AGHeadlessSelect>");return(s,r)=>(d(),p(m(ue),null,{default:f((({value:r,open:o,disabled:n})=>[h(s.$slots,"default",{value:r,open:o,disabled:n},(()=>[k("span",{class:j(e.textClass)},$(m(t)?.buttonText),3)])),h(s.$slots,"icon")])),_:3}))}});ms.__file="src/components/headless/forms/AGHeadlessSelectButton.vue";const fs=["id"];var hs=c({__name:"AGHeadlessSelectError",setup(e){const t=Re("select","<AGHeadlessSelectError> must be a child of a <AGHeadlessSelect>"),s=l((()=>t.errors?rt(`errors.${t.errors[0]}`,`Error: ${t.errors[0]}`):null));return(e,r)=>s.value?(d(),y("p",{key:0,id:`${m(t).id}-error`},$(s.value),9,fs)):w("v-if",!0)}});hs.__file="src/components/headless/forms/AGHeadlessSelectError.vue";var vs=c({__name:"AGHeadlessSelectLabel",setup(e){const t=Re("select","<AGHeadlessSelectLabel> must be a child of a <AGHeadlessSelect>"),s=H(),r=l((()=>!(!t.label&&!s.default)));return(e,s)=>r.value?(d(),p(m(de),{key:0},{default:f((({open:s,disabled:r})=>[h(e.$slots,"default",{open:s,disabled:r},(()=>[C($(m(t).label),1)]))])),_:3})):w("v-if",!0)}});vs.__file="src/components/headless/forms/AGHeadlessSelectLabel.vue";var gs=c({__name:"AGHeadlessSelectOption",props:{value:De(),selectedClass:Ne(),unselectedClass:Ne(),activeClass:Ne(),inactiveClass:Ne()},setup(e){const t=e,s=Re("select","<AGHeadlessSelectOption> must be a child of a <AGHeadlessSelect>"),r=l((()=>s.options.find((e=>e.value===t.value))));return(t,s)=>(d(),p(m(pe),{value:e.value,as:"template"},{default:f((({active:s,selected:o,disabled:n})=>[h(t.$slots,"default",{active:s,selected:o,disabled:n},(()=>[k("li",{class:j({[e.activeClass??"active"]:s,[e.inactiveClass??"inactive"]:!s,[e.selectedClass??"selected"]:o,[e.unselectedClass??"unselected"]:!o})},$(r.value?.text),3)]))])),_:3},8,["value"]))}});gs.__file="src/components/headless/forms/AGHeadlessSelectOption.vue";const _s={cancellable:Me(!0)};function bs(){return _s}var ys=c({__name:"AGHeadlessModalTitle",props:{as:Ne("h2")},setup:e=>(t,s)=>(d(),p(m(me),{as:e.as},{default:f((()=>[h(t.$slots,"default")])),_:3},8,["as"]))});ys.__file="src/components/headless/modals/AGHeadlessModalTitle.vue";const xs={class:"pointer-events-auto"};var As=c({__name:"AGHeadlessSnackbar",setup:e=>(e,t)=>(d(),y("div",xs,[h(e.$slots,"default")]))});As.__file="src/components/headless/snackbars/AGHeadlessSnackbar.vue";const ws=X(nt,["Primary","Clear"]),ks={id:Fe(),message:Fe(),actions:$e((()=>[])),color:Ie(ws,nt.Secondary)};function Ss(){return ks}var Gs=c({__name:"AGSnackbar",props:Ss(),setup(e){const t=e,s=l((()=>t.color===nt.Danger?"bg-red-200 text-red-900":"bg-gray-900 text-white"));return(e,r)=>(d(),p(As,{class:j(["flex flex-row items-center justify-center gap-3 p-4",s.value])},{default:f((()=>[A(At,{text:e.message,inline:""},null,8,["text"]),(d(!0),y(x,null,M(e.actions,((s,r)=>(d(),p(St,{key:r,color:e.color,onClick:e=>function(e){e.handler?.(),e.dismiss&&et.hideSnackbar(t.id)}(s)},{default:f((()=>[C($(s.text),1)])),_:2},1032,["color","onClick"])))),128))])),_:1},8,["class"]))}});Gs.__file="src/components/snackbars/AGSnackbar.vue";const js={$ui:et};var Cs={async install(e,t){const s={[Xe.AlertModal]:wt,[Xe.ConfirmModal]:jt,[Xe.ErrorReportModal]:Yt,[Xe.LoadingModal]:Jt,[Xe.Snackbar]:Gs};Object.entries({...s,...t.components}).forEach((e=>{let[t,s]=e;return et.registerComponent(t,s)})),await Ze(e,js)}};async function $s(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const s=[We,ct,dt,Ye,Cs,...t.plugins??[]],r=I(e);await Ce(s,r,t),r.mount("#app"),r._container?.classList.remove("loading"),we.emit("application-mounted")}const Ms={key:0};var Es=c({__name:"AGAppModals",setup(e){const t=l((()=>et.modals[0]??null));return(e,s)=>t.value?(d(),y("aside",Ms,[A(vt,{"child-index":1,modal:t.value},null,8,["modal"])])):w("v-if",!0)}});Es.__file="src/components/AGAppModals.vue";const Hs={"aria-live":"assertive",class:"z-60 pointer-events-none fixed inset-0 flex items-end px-4 py-6 sm:p-6"},Is={class:"flex w-full flex-col items-end space-y-4"};const Ls={render:function(e,t){return d(),y("div",Hs,[k("div",Is,[(d(!0),y(x,null,M(e.$ui.snackbars,(e=>(d(),p(g(e.component),S({id:e.id,key:e.id},e.properties),null,16,["id"])))),128))])])},__file:"src/components/AGAppSnackbars.vue"};var Rs=Ls,Os=c({__name:"AGAppOverlays",setup(t){const s=e(null),r=e(!0);return pt("show-overlays-backdrop",(async()=>{s.value&&r.value&&(r.value=!1,s.value.classList.remove("opacity-0"))})),pt("hide-overlays-backdrop",(async()=>{s.value&&!r.value&&(r.value=!0,s.value.classList.add("opacity-0"))})),(e,t)=>(d(),y(x,null,[k("div",{ref_key:"$backdrop",ref:s,class:"pointer-events-none fixed inset-0 z-50 bg-black/30 opacity-0"},null,512),A(Es),A(Rs)],64))}});Os.__file="src/components/AGAppOverlays.vue";const Bs={class:"grid flex-grow place-items-center"},Ps={class:"flex flex-col items-center space-y-6 p-8"},Ts={class:"mt-2 text-center text-4xl font-medium text-red-600"},Vs={class:"mt-4 flex flex-col space-y-4"};var zs=c({__name:"AGStartupCrash",setup:e=>(e,t)=>(d(),y("div",Bs,[k("div",Ps,[k("h1",Ts,$(e.$td("startupCrash.title","Something went wrong!")),1),A(At,{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"]),k("div",Vs,[A(St,{color:"danger",onClick:t[0]||(t[0]=t=>e.$app.reload())},{default:f((()=>[C($(e.$td("startupCrash.reload","Try again")),1)])),_:1}),A(St,{color:"danger",onClick:t[1]||(t[1]=t=>e.$errors.inspect(e.$errors.startupErrors))},{default:f((()=>[C($(e.$td("startupCrash.inspect","View error details")),1)])),_:1})])])]))});zs.__file="src/components/lib/AGStartupCrash.vue";const Ds={class:"flex min-h-full flex-col text-base font-normal leading-tight text-gray-900 antialiased"};var qs=c({__name:"AGAppLayout",setup:e=>(e,t)=>(d(),y("div",Ds,[e.$errors.hasStartupErrors?h(e.$slots,"startup-crash",{key:0},(()=>[A(zs)])):h(e.$slots,"default",{key:1}),A(Os)]))});qs.__file="src/components/AGAppLayout.vue";const Us={class:"ml-2"};var Fs=c({inheritAttrs:!1,__name:"AGCheckbox",props:{name:Ne()},setup(e){const t=Ee();return(s,r)=>(d(),p(ns,{ref_key:"$input",ref:t,name:e.name,class:"flex"},{default:f((()=>[A(cs,S(s.$attrs,{type:"checkbox",class:{"text-indigo-600 focus:ring-indigo-600":!m(t)?.errors,"border-red-200 text-red-600 focus:ring-red-600":m(t)?.errors}}),null,16,["class"]),k("div",Us,[s.$slots.default?(d(),p(ds,{key:0},{default:f((()=>[h(s.$slots,"default")])),_:3})):w("v-if",!0),A(ls,{class:"text-sm text-red-600"})])])),_:3},8,["name"]))}});Fs.__file="src/components/forms/AGCheckbox.vue";const Ns=["onSubmit"];var Ks=c({__name:"AGForm",props:{form:Te()},emits:["submit"],setup(e,{emit:t}){const s=e;function r(){s.form&&!s.form.submit()||t("submit")}return v("form",s.form),(e,t)=>(d(),y("form",{onSubmit:L(r,["prevent"])},[h(e.$slots,"default")],40,Ns))}});Ks.__file="src/components/forms/AGForm.vue";const Ws={class:"absolute bottom-0 left-0 translate-y-full"};var Qs=c({inheritAttrs:!1,__name:"AGInput",props:{name:Ne()},setup(e){const t=Ee(),[s,r]=mt();return(o,n)=>(d(),p(ns,{ref_key:"$input",ref:t,class:j(["relative flex flex-col items-center",m(r)]),name:e.name},{default:f((()=>[A(cs,S(m(s),{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":m(t)?.errors}]}),null,16,["class"]),k("div",Ws,[A(ls,{class:"mt-1 text-sm text-red-500"})])])),_:1},8,["class","name"]))}});Qs.__file="src/components/forms/AGInput.vue";const Zs={viewBox:"0 0 20 20",width:"1.2em",height:"1.2em"},Ys=[k("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 Js={name:"zondicons-cheveron-down",render:function(e,t){return d(),y("svg",Zs,Ys)}};const Xs={class:"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2"};var er=c({__name:"AGSelect",props:rs(),setup(e){const t=e,s=Ee();return(e,r)=>(d(),p(ps,S(t,{ref_key:"$select",ref:s,as:"div"}),{default:f((()=>[A(vs,{class:"block text-sm font-medium leading-6 text-gray-900"}),k("div",{class:j(["relative",{"mt-2":m(s)?.label}])},[A(ms,{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":m(s)?.errors}]),"text-class":"block truncate"},{icon:f((()=>[k("span",Xs,[A(m(Js),{class:"h-5 w-5 text-gray-400"})])])),_:1},8,["class"]),A(m(fe),{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:f((()=>[(d(!0),y(x,null,M(m(s)?.options??[],((e,t)=>(d(),p(gs,{key:t,value:e.value,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),A(hs,{class:"mt-2 text-sm text-red-600"})])),_:1},16))}});er.__file="src/components/forms/AGSelect.vue";var tr=c({__name:"AGErrorMessage",props:{error:Ue()},setup(e){const t=e,s=l((()=>at.getErrorMessage(t.error)));return(e,t)=>(d(),p(At,{text:s.value,inline:""},null,8,["text"]))}});tr.__file="src/components/lib/AGErrorMessage.vue";var sr=c({__name:"AGLink",setup:e=>(e,t)=>(d(),p(kt,{class:"font-medium hover:underline"},{default:f((()=>[h(e.$slots,"default")])),_:3}))});sr.__file="src/components/lib/AGLink.vue";var rr=c({__name:"AGModalTitle",setup:e=>(e,t)=>(d(),p(ys,{class:"mb-2 font-semibold"},{default:f((()=>[h(e.$slots,"default")])),_:3}))});rr.__file="src/components/modals/AGModalTitle.vue";const or={title:Ne(),message:Fe()};function nr(){return or}const ar={message:Ne()};function lr(){return ar}const ir={String:"string",Number:"number",Boolean:"boolean",Object:"object"},cr=new WeakMap;class ur extends O{constructor(t){super(),se(this,"errors",void 0),se(this,"_fields",void 0),se(this,"_data",void 0),se(this,"_submitted",void 0),se(this,"_errors",void 0),this._fields=t,this._submitted=e(!1),this._data=this.getInitialData(t),this._errors=this.getInitialErrors(t),cr.set(this,l((()=>!Object.values(this._errors).some((e=>null!==e))))),this.errors=E(this._errors)}get valid(){return!!cr.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]}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(){return this._submitted.value=!0,this.validate()}__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 s(t)}getInitialErrors(e){if(this.static().isConjuring())return{};const t=Object.keys(e).reduce(((e,t)=>(e[t]=null,e)),{});return s(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 dr(e){return new ur(e)}function pr(e){return{default:e,type:ir.Boolean}}function mr(e){return{default:e,type:ir.Boolean,rules:"required"}}function fr(e){return{default:e,type:ir.Number,rules:"required"}}function hr(e){return{default:e,type:ir.String,rules:"required"}}function vr(e){return{default:e,type:ir.Number}}function gr(e){return{default:e,type:ir.String}}export{wt as AGAlertModal,qs as AGAppLayout,Os as AGAppOverlays,St as AGButton,Fs as AGCheckbox,jt as AGConfirmModal,tr as AGErrorMessage,Nt as AGErrorReportModalButtons,Kt as AGErrorReportModalTitle,Ks as AGForm,kt as AGHeadlessButton,ns as AGHeadlessInput,ls as AGHeadlessInputError,cs as AGHeadlessInputInput,ds as AGHeadlessInputLabel,ht as AGHeadlessModal,_t as AGHeadlessModalPanel,ys as AGHeadlessModalTitle,ps as AGHeadlessSelect,ms as AGHeadlessSelectButton,hs as AGHeadlessSelectError,vs as AGHeadlessSelectLabel,gs as AGHeadlessSelectOption,As as AGHeadlessSnackbar,Qs as AGInput,sr as AGLink,Jt as AGLoadingModal,At as AGMarkdown,yt as AGModal,vt as AGModalContext,rr as AGModalTitle,er as AGSelect,Gs as AGSnackbar,zs as AGStartupCrash,Ge as App,Se as AppService,nt as Colors,at as Errors,we as Events,Ae as EventsService,ir as FormFieldTypes,tt as Lang,xe as Service,ws as SnackbarColors,et as UI,Xe as UIComponents,$e as arrayProp,pr as booleanInput,Me as booleanProp,Ze as bootServices,$s as bootstrapApplication,Ee as componentRef,or as confirmModalProps,He as defineDirective,je as definePlugin,ye as defineServiceState,Ie as enumProp,Lt as errorReportModalProps,ts as extractInputProps,os as extractSelectProps,Oe as injectOrFail,Le as injectReactive,Re as injectReactiveOrFail,Xt as inputProps,Ce as installPlugins,ar as loadingModalProps,Be as mixedProp,_s as modalProps,vr as numberInput,Pe as numberProp,Te as objectProp,ft as onCleanMounted,Ve as requiredArrayProp,mr as requiredBooleanInput,ze as requiredEnumProp,De as requiredMixedProp,fr as requiredNumberInput,qe as requiredNumberProp,Ue as requiredObjectProp,hr as requiredStringInput,Fe as requiredStringProp,ss as selectProps,ks as snackbarProps,gr as stringInput,Ne as stringProp,st as translate,rt as translateWithDefault,nr as useConfirmModalProps,Rt as useErrorReportModalProps,pt as useEvent,dr as useForm,mt as useInputAttrs,es as useInputProps,lr as useLoadingModalProps,bs as useModalProps,rs as useSelectProps,Ss as useSnackbarProps};
|
|
1
|
+
import{ref as e,computed as t,watch as s,inject as r,reactive as o,markRaw as n,nextTick as a,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 G,createElementVNode as S,h as k,mergeProps as C,normalizeClass as j,createTextVNode as $,toDisplayString as M,renderList as E,withModifiers as H,readonly as T,useSlots as I,createApp as L,resolveDirective as R,withDirectives as P}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 O from"@babel/runtime/helpers/esm/defineProperty";import{JSError as B,tap as V,MagicObject as D,PromisedValue as q,Storage as z,objectOnly as U,isEmpty as F,objectDeepClone as N,facade as K,arrayRemove as W,fail as Q,updateLocationQueryParameters as Z,forever as Y,after as J,uuid as X,isObject as ee,objectWithoutEmpty as te,toString as se,objectWithout as re,noop as oe,stringExcerpt as ne}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 ae,setActivePinia as le,defineStore as ie}from"pinia";import ce from"virtual:aerogel";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.some.js";import"core-js/modules/esnext.iterator.some.js";import{Dialog as ue,DialogPanel as de,DialogTitle as pe,Listbox as me,ListboxButton as fe,ListboxLabel as he,ListboxOption as ve,ListboxOptions as ge}from"@headlessui/vue";export{ListboxOptions as AGHeadlessSelectOptions}from"@headlessui/vue";import _e from"dompurify";import{marked as be,Renderer as ye}from"marked";import"core-js/modules/esnext.weak-map.delete-all.js";import"core-js/modules/esnext.weak-map.emplace.js";class ServiceBootError extends B{constructor(e,t){super(`Service '${e}' failed booting`,{cause:t})}}let xe=null;function Ae(){return xe??we()}function we(){return V(ae(),(e=>{xe=e,le(e)}))}function Ge(){return xe??Ae()}function Se(e,t){return Ae(),ie(e,t)()}function ke(e){var t;return O(t=class extends Ce{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 Ce extends D{constructor(){super(),O(this,"_name",void 0),O(this,"_booted",void 0),O(this,"_computedStateKeys",void 0),O(this,"_store",void 0);const e=this.getComputedStateDefinition();this._name=this.getName()??new.target.name,this._booted=new q,this._computedStateKeys=new Set(Object.keys(e)),this._store=this.usesStore()&&Se(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 z.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=U(e,t);if(F(s))return;const r=z.get(this._name);r&&z.set(this._name,{...r,...this.serializePersistedState(N(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()&&!F(e))if(z.has(this._name)){const e=z.require(this._name);this.setState(e)}else z.set(this._name,U(this.getState(),e))}}O(Ce,"persist",[]);const je={Low:-256,Default:0,High:256};class $e extends Ce{constructor(){super(...arguments),O(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,n="function"==typeof t?t:s;return V((()=>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)W(s.handlers[e]??[],t),0===s.handlers[e]?.length&&(delete s.handlers[e],W(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??Q(`priorities missing for event '${e}'`),n=this.listeners[e]?.handlers??Q(`handlers missing for event '${e}'`);o.includes(r)||(o.push(r),o.sort(((e,t)=>t-e)),n[r]=[]),n[r]?.push(s)}}var Me=K($e),Ee=ke({name:"app",initialState:{plugins:{},environment:ce.environment,sourceUrl:ce.sourceUrl},computed:{development:e=>"development"===e.environment,testing:e=>"test"===e.environment||"testing"===e.environment}});class He extends Ee{constructor(){super(...arguments),O(this,"ready",new q),O(this,"mounted",new q)}isReady(){return this.ready.isResolved()}isMounted(){return this.mounted.isResolved()}async whenReady(e){return await this.ready.then(e)}async reload(e){e&&Z(e),location.reload(),await Y()}plugin(e){return this.plugins[e]??null}async boot(){Me.once("application-ready",(()=>this.ready.resolve())),Me.once("application-mounted",(()=>this.mounted.resolve()))}}var Te=K(He);function Ie(e){return e}async function Le(e){for(var t=arguments.length,s=new Array(t>1?t-1:0),r=1;r<t;r++)s[r-1]=arguments[r];Te.setState("plugins",e.reduce(((e,t)=>(t.name&&(e[t.name]=t),e)),{})),await Promise.all(e.map((e=>e.install(...s)))??[])}function Re(e){return{type:Array,default:e??(()=>[])}}function Pe(){return{type:Boolean,default:arguments.length>0&&void 0!==arguments[0]&&arguments[0]}}function Oe(){return e()}function Be(r){const o=e(),n=t(r);return s(n,(async()=>o.value=await n.value),{immediate:!0}),o}function Ve(e){return e}function De(e,t){const s=Object.values(e);return{type:String,default:t??s[0]??null,validator:e=>s.includes(e)}}function qe(e){const t=r(e);return t?o(t):void 0}function ze(e,t){return qe(e)??Q(t??`Could not resolve '${e}' injection key`)}function Ue(e,t){return r(e)??Q(t??`Could not resolve '${e}' injection key`)}function Fe(e){return{type:e,default:null}}function Ne(){return{type:Number,default:arguments.length>0&&void 0!==arguments[0]?arguments[0]:null}}function Ke(){return{type:Object,default:arguments.length>0&&void 0!==arguments[0]?arguments[0]:null}}function We(){return{type:Array,required:!0}}function Qe(e){const t=Object.values(e);return{type:String,required:!0,validator:e=>t.includes(e)}}function Ze(e){return{type:e,required:!0}}function Ye(){return{type:Number,required:!0}}function Je(){return{type:Object,required:!0}}function Xe(){return{type:String,required:!0}}function et(){return{type:String,default:arguments.length>0&&void 0!==arguments[0]?arguments[0]:null}}const tt={"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 st={install(e,t){const s={...tt,...t.directives};for(const[t,r]of Object.entries(s))e.directive(t,r)}};const rt={$app:Te,$events:Me};async function ot(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),Te.development&&Object.assign(window,t)}var nt={async install(e,t){const s={...rt,...t.services};e.use(Ge()),await ot(e,s)}},at=ke({name:"ui",initialState:{modals:[],snackbars:[]}});const lt={AlertModal:"alert-modal",ConfirmModal:"confirm-modal",ErrorReportModal:"error-report-modal",LoadingModal:"loading-modal",PromptModal:"prompt-modal",Snackbar:"snackbar",StartupCrash:"startup-crash"};class it extends at{constructor(){super(...arguments),O(this,"modalCallbacks",{}),O(this,"components",{})}requireComponent(e){return this.components[e]??Q(`UI Component '${e}' is not defined!`)}alert(e,t){this.openModal(this.requireComponent(lt.AlertModal),"string"!=typeof t?{message:e}:{title:e,message:t})}async confirm(e,t,s){const r=await this.openModal(this.requireComponent(lt.ConfirmModal),"string"!=typeof t?{message:e,...t??{}}:{title:e,message:t,...s??{}});return await r.beforeClose??!1}async prompt(e,t,s){const r=await this.openModal(this.requireComponent(lt.PromptModal),"string"!=typeof t?{message:e,...t??{}}:{title:e,message:t,...s??{}});return await r.beforeClose??null}async loading(e,t){const s=await this.openModal(this.requireComponent(lt.LoadingModal),"string"!=typeof e?{}:{message:e});try{t="string"==typeof e?t:e;const[s]=await Promise.all([t,J({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:X(),properties:{message:e,...t},component:n(t.component??this.requireComponent(lt.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=X(),r={},o={id:s,properties:t??{},component:n(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 a(),await(l&&Me.emit("hide-modal",{id:l.id})),await Promise.all([l||Me.emit("show-overlays-backdrop"),Me.emit("show-modal",{id:o.id})]),o}async closeModal(e,t){await Me.emit("close-modal",{id:e,result:t})}async boot(){this.watchModalEvents(),this.watchMountedEvent()}watchModalEvents(){Me.on("modal-will-close",(e=>{let{modal:t,result:s}=e;this.modalCallbacks[t.id]?.willClose?.(s),1===this.modals.length&&Me.emit("hide-overlays-backdrop")})),Me.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&&Me.emit("show-modal",{id:r.id}))}))}watchMountedEvent(){Me.once("application-mounted",(async()=>{const e=document.getElementById("splash");e&&("0"!==window.getComputedStyle(e).opacity&&(e.style.opacity="0",await J({ms:600})),e.remove())}))}}var ct=K(it);var ut=K(class extends Ce{constructor(){super(),O(this,"provider",void 0),this.provider={translate:e=>(Te.development&&console.warn("Lang provider is missing"),e),translateWithDefault:(e,t)=>(Te.development&&console.warn("Lang provider is missing"),t)}}setProvider(e){this.provider=e}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)}});const dt=ut.translate.bind(ut),pt=ut.translateWithDefault.bind(ut);var mt=ke({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 ft={Primary:"primary",Secondary:"secondary",Danger:"danger",Clear:"clear"};var ht=K(class extends mt{constructor(){super(...arguments),O(this,"forceReporting",!1),O(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?ct.openModal(ct.requireComponent(lt.ErrorReportModal),{reports:t}):ct.alert(pt("errors.inspectEmpty","Nothing to inspect!"))}async report(e,t){if(await Me.emit("error",{error:e,message:t}),Te.testing)throw e;if(Te.development&&this.logError(e),!this.enabled)throw e;if(!Te.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};ct.showSnackbar(t??pt("errors.notice","Something went wrong, but it's not your fault. Try again!"),{color:ft.Danger,actions:[{text:pt("errors.viewDetails","View details"),dismiss:!0,handler:()=>ct.openModal(ct.requireComponent(lt.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),ee(e)&&e.cause&&this.logError(e.cause)}async createErrorReport(e){return"string"==typeof e?{title:e}:e instanceof Error||e instanceof B?this.createErrorReportFromError(e):ee(e)?te({title:se(e.name??e.title??pt("errors.unknown","Unknown Error")),description:se(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}}});function vt(e){return"string"==typeof e?e:e instanceof Error||e instanceof B?e.message:ee(e)?se(e.message??e.description??"Unknown error object"):pt("errors.unknown","Unknown Error")}const gt={$errors:ht};function _t(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:()=>!1;const s=e=>t(e)||(e=>(ht.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 bt={async install(e,t){_t(e,t.handleError),await ot(e,gt)}};const yt={$lang:ut};var xt={async install(e){e.config.globalProperties.$t??=dt,e.config.globalProperties.$td=pt,await ot(e,yt)}},At={async install(){"testing"===import.meta.env.MODE&&(globalThis.testingRuntime={on:function(){return Me.on(...arguments)}})}};function wt(e,t){const s=Me.on(e,t);l((()=>s()))}function Gt(){const e=i(),s=t((()=>e.class));return[t((()=>re(e,"class"))),s]}function St(e){let t=oe;c((()=>t=e())),l((()=>t()))}function kt(e){return e.split(/\s+/).filter((e=>!/^(hover|focus|focus-visible):/.test(e))).join(" ").trim()}function Ct(e,t){return Object.keys(t).reduce(((t,s)=>(t[s]=e[s],t)),{})}const jt={cancellable:Pe(!0),title:et()};function $t(){return jt}function Mt(e){return Ct(e,jt)}function Et(e){return{close:async()=>e.value?.close(),cancellable:t((()=>!!e.value?.cancellable))}}var Ht=u({__name:"AGHeadlessModal",props:$t(),setup(t,{expose:s}){const r=t,o=e(null),n=e(!0),a=e(!1),{modal:l}=ze("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&&(n.value=!0)}async function c(e){a.value||(Me.emit("modal-will-close",{modal:l,result:e}),await i(),a.value=!0,Me.emit("modal-closed",{modal:l,result:e}))}return wt("close-modal",(async({id:e,result:t})=>{e===l.id&&await c(t)})),wt("hide-modal",(async({id:e})=>{e===l.id&&await i()})),wt("show-modal",(async({id:e})=>{e===l.id&&await async function(){o.value?.$el&&(n.value=!1)}()})),s({close:c,cancellable:d(r,"cancellable")}),(e,t)=>(p(),m(f(ue),{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))}});Ht.__file="src/components/headless/modals/AGHeadlessModal.vue";var Tt=u({__name:"AGModalContext",props:{modal:Je(),childIndex:Ye()},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))}});Tt.__file="src/components/modals/AGModalContext.vue";const It=S("div",{class:"pointer-events-none fixed inset-0 z-50 bg-black/30"},null,-1);var Lt=u({__name:"AGHeadlessModalPanel",setup(e){const s=ze("modal","could not obtain modal reference from <AGHeadlessModalPanel>, did you render this component manually? Show it using $ui.openModal() instead"),r=t((()=>ct.modals[s.childIndex]??null));return(e,t)=>(p(),m(f(de),null,{default:h((()=>[v(e.$slots,"default"),r.value?(p(),x(A,{key:0},[It,w(Tt,{"child-index":f(s).childIndex+1,modal:r.value},null,8,["child-index","modal"])],64)):G("v-if",!0)])),_:3}))}});Lt.__file="src/components/headless/modals/AGHeadlessModalPanel.vue";var Rt=u({__name:"AGHeadlessModalTitle",props:{as:et("h2")},setup:e=>(t,s)=>(p(),m(f(pe),{as:e.as},{default:h((()=>[v(t.$slots,"default")])),_:3},8,["as"]))});function Pt(e){return t=be(e,{mangle:!1,headerIds:!1,renderer:V(new ye,(e=>{e.link=function(e,t,s){return ye.prototype.link.apply(this,[e,t,s]).replace("<a",'<a target="_blank"')}}))}),_e.sanitize(t,{ADD_ATTR:["target"]});var t}Rt.__file="src/components/headless/modals/AGHeadlessModalTitle.vue";var Ot=u({__name:"AGMarkdown",props:{as:et(),inline:Pe(),langKey:et(),langParams:Ke(),text:et()},setup(e){const s=e,r=i(),o=t((()=>s.text??(s.langKey&&dt(s.langKey,s.langParams??{})))),n=t((()=>{if(!o.value)return null;let e=Pt(o.value);return s.inline&&(e=e.replace("<p>","<span>").replace("</p>","</span>")),e})),a=()=>k(s.as??(s.inline?"span":"div"),{class:s.inline?"":"prose",innerHTML:n.value,...r});return(e,t)=>(p(),m(a))}});Ot.__file="src/components/lib/AGMarkdown.vue";const Bt={class:"fixed inset-0 flex items-center justify-center p-8"};var Vt=u({inheritAttrs:!1,__name:"AGModal",props:$t(),setup(t,{expose:s}){const r=t,o=e();return s(Et(o)),(e,t)=>(p(),m(Ht,C({ref_key:"$modal",ref:o},r,{class:"relative z-50"}),{default:h((({close:t})=>[S("div",Bt,[w(Lt,{class:"flex max-h-full max-w-full flex-col overflow-hidden bg-white p-4"},{default:h((()=>[e.title?(p(),m(Rt,{key:0,class:"mb-2 text-lg font-semibold"},{default:h((()=>[w(Ot,{text:e.title,inline:""},null,8,["text"])])),_:1})):G("v-if",!0),S("div",C({class:"flex max-h-full flex-col overflow-auto"},e.$attrs),[v(e.$slots,"default",{close:t})],16)])),_:2},1024)])])),_:3},16))}});Vt.__file="src/components/modals/AGModal.vue";const Dt={title:et(),message:Xe()};function qt(){return Dt}var zt=u({__name:"AGAlertModal",props:qt(),setup:e=>(e,t)=>(p(),m(Vt,{title:e.title},{default:h((()=>[w(Ot,{text:e.message},null,8,["text"])])),_:1},8,["title"]))});zt.__file="src/components/modals/AGAlertModal.vue";const Ut={title:et(),message:Xe(),acceptText:et(),cancelText:et()};function Ft(){return Ut}function Nt(e){return{renderedAcceptText:t((()=>e.acceptText??pt("ui.accept","Ok"))),renderedCancelText:t((()=>e.cancelText??pt("ui.cancel","Cancel")))}}var Kt=u({__name:"AGHeadlessButton",props:{href:et(),url:et(),route:et(),routeParams:Ke((()=>({}))),routeQuery:Ke((()=>({}))),submit:Pe()},setup(e){const s=e,r=t((()=>s.route?{tag:"router-link",props:{to:te({name:s.route,params:s.routeParams,query:s.routeQuery})}}:s.href||s.url?{tag:"a",props:{target:"_blank",href:s.href||s.url}}:{tag:"button",props:{type:s.submit?"submit":"button"}}));return(e,t)=>(p(),m(_(r.value.tag),b(y(r.value.props)),{default:h((()=>[v(e.$slots,"default")])),_:3},16))}});Kt.__file="src/components/headless/forms/AGHeadlessButton.vue";var Wt=u({__name:"AGButton",props:{color:De(ft,ft.Primary)},setup(e){const s=e,r=t((()=>{switch(s.color){case ft.Secondary:return["text-white bg-gray-600","hover:bg-gray-500","focus-visible:outline-offset-2 focus-visible:outline-gray-600"].join(" ");case ft.Clear:return"hover:bg-gray-500/20 focus-visible:outline-gray-500/60";case ft.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(Kt,{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"]))}});Wt.__file="src/components/forms/AGButton.vue";const Qt={class:"mt-2 flex flex-row-reverse gap-2"};var Zt=u({__name:"AGConfirmModal",props:Ft(),setup(e){const t=e,{renderedAcceptText:s,renderedCancelText:r}=Nt(t);return(e,t)=>(p(),m(Vt,{cancellable:!1,title:e.title},{default:h((({close:t})=>[w(Ot,{text:e.message},null,8,["text"]),S("div",Qt,[w(Wt,{onClick:e=>t(!0)},{default:h((()=>[$(M(f(s)),1)])),_:2},1032,["onClick"]),w(Wt,{color:"secondary",onClick:e=>t()},{default:h((()=>[$(M(f(r)),1)])),_:2},1032,["onClick"])])])),_:1},8,["title"]))}});Zt.__file="src/components/modals/AGConfirmModal.vue";const Yt={viewBox:"0 0 20 20",width:"1.2em",height:"1.2em"},Jt=[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 Xt={name:"zondicons-cheveron-right",render:function(e,t){return p(),x("svg",Yt,[...Jt])}};const es={viewBox:"0 0 20 20",width:"1.2em",height:"1.2em"},ts=[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 ss={name:"zondicons-cheveron-left",render:function(e,t){return p(),x("svg",es,[...ts])}};const rs={reports:We()};function os(){return rs}function ns(s){const r=e(0),o=t((()=>s.reports[r.value])),n=t((()=>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 as={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},ls=[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 is={name:"mdi-console",render:function(e,t){return p(),x("svg",as,[...ls])}};const cs={viewBox:"0 0 20 20",width:"1.2em",height:"1.2em"},us=[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 ds={name:"zondicons-copy",render:function(e,t){return p(),x("svg",cs,[...us])}};const ps={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},ms=[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 fs={name:"mdi-github",render:function(e,t){return p(),x("svg",ps,[...ms])}};const hs={class:"flex"};var vs=u({__name:"AGErrorReportModalButtons",props:{report:Je()},setup(e){const s=e,r=t((()=>s.report.description?`${s.report.title}: ${s.report.description}`:s.report.title)),o=t((()=>{if(!Te.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:","```",ne(s.report.details??"Details missing from report",1800-e.length-Te.sourceUrl.length).trim(),"```"].join("\n"));return`${Te.sourceUrl}/issues/new?title=${e}&body=${t}`})),n=t((()=>V([{id:"clipboard",description:"Copy to clipboard",iconComponent:ds,async handler(){await navigator.clipboard.writeText(`${r.value}\n\n${s.report.details}`),ct.showSnackbar(pt("errors.copiedToClipboard","Debug information copied to clipboard"))}},{id:"console",description:"Log to console",iconComponent:is,handler(){const e=s.report.error??s.report;window.error=e,console.error(e),ct.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:fs,url:o.value})}))));return(e,t)=>(p(),x("div",hs,[(p(!0),x(A,null,E(n.value,((t,s)=>v(e.$slots,"default",C(t,{key:s}),(()=>[w(Wt,{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))]))}});vs.__file="src/components/modals/AGErrorReportModalButtons.vue";var gs=u({__name:"AGErrorReportModalTitle",props:{report:Je(),currentReport:Ne(),totalReports:Ne()},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(Ot,{text:r.value,inline:""},null,8,["text"]))}});gs.__file="src/components/modals/AGErrorReportModalTitle.vue";const _s={class:"flex items-center justify-between text-lg font-medium"},bs={class:"flex items-center"},ys=["textContent"];var xs=u({__name:"AGErrorReportModal",props:os(),setup(e){const t=e,{activeReportIndex:s,details:r,nextReportText:o,previousReportText:n,report:a}=ns(t);return(e,t)=>(p(),m(Vt,null,{default:h((()=>[S("div",null,[S("h2",_s,[S("div",bs,[w(gs,{report:f(a),"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(Wt,{color:"clear",disabled:0===f(s),title:f(n),"aria-label":f(n),onClick:t[0]||(t[0]=e=>s.value--)},{default:h((()=>[w(f(ss),{"aria-hidden":"true",class:"h-4 w-4"})])),_:1},8,["disabled","title","aria-label"]),w(Wt,{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(Xt),{"aria-hidden":"true",class:"h-4 w-4"})])),_:1},8,["disabled","title","aria-label"])],64)):G("v-if",!0)]),w(vs,{report:f(a)},null,8,["report"])]),f(a).description?(p(),m(Ot,{key:0,text:f(a).description,class:"mt-2"},null,8,["text"])):G("v-if",!0)]),S("pre",{class:"h-full overflow-auto bg-gray-200 p-4 text-xs text-red-900",textContent:M(f(r))},null,8,ys)])),_:1}))}});xs.__file="src/components/modals/AGErrorReportModal.vue";const As={message:et()};function ws(){return As}function Gs(e){return{renderedMessage:t((()=>e.message??pt("ui.loading","Loading...")))}}var Ss=u({__name:"AGLoadingModal",props:ws(),setup(e){const t=e,{renderedMessage:s}=Gs(t);return(e,t)=>(p(),m(Vt,{cancellable:!1},{default:h((()=>[w(Ot,{text:f(s)},null,8,["text"])])),_:1}))}});Ss.__file="src/components/modals/AGLoadingModal.vue";const ks={title:et(),message:Xe(),label:et(),defaultValue:et(),placeholder:et(),acceptText:et(),cancelText:et()};function Cs(){return ks}function js(e){return{renderedAcceptText:t((()=>e.acceptText??pt("ui.accept","Ok"))),renderedCancelText:t((()=>e.cancelText??pt("ui.cancel","Cancel")))}}var $s=u({__name:"AGForm",props:{form:Ke()},emits:["submit"],setup(e,{emit:t}){const s=e,r=t;function o(){s.form&&!s.form.submit()||r("submit")}return g("form",s.form),(e,t)=>(p(),x("form",{onSubmit:H(o,["prevent"])},[v(e.$slots,"default")],32))}});$s.__file="src/components/forms/AGForm.vue";const Ms={name:et(),label:et(),description:et()};function Es(){return Ms}function Hs(e){return Ct(e,Ms)}var Ts=u({__name:"AGHeadlessInput",props:{as:et("div"),modelValue:Fe([String,Number,Boolean]),...Es()},emits:["update:modelValue"],setup(e,{expose:s,emit:o}){const n=o,a=e,l=t((()=>i&&a.name?i.errors[a.name]??null:null)),i=r("form",null),c={id:`input-${X()}`,name:t((()=>a.name)),label:t((()=>a.label)),description:t((()=>a.description)),value:t((()=>i&&a.name?i.getFieldValue(a.name):a.modelValue)),errors:T(l),update(e){i&&a.name?i.setFieldValue(a.name,e):n("update:modelValue",e)}};return g("input",c),s(c),(t,s)=>e.as?(p(),m(_(e.as),{key:0},{default:h((()=>[v(t.$slots,"default")])),_:3})):v(t.$slots,"default",{key:1})}});Ts.__file="src/components/headless/forms/AGHeadlessInput.vue";var Is=u({inheritAttrs:!1,__name:"AGHeadlessInputDescription",setup(e){const s=ze("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(Ot,C({key:0},e.$attrs,{id:`${f(s).id}-description`,text:r.value}),null,16,["id","text"])):G("v-if",!0)]))}});Is.__file="src/components/headless/forms/AGHeadlessInputDescription.vue";const Ls=["id"];var Rs=u({__name:"AGHeadlessInputError",setup(e){const s=ze("input","<AGHeadlessInputError> must be a child of a <AGHeadlessInput>"),r=t((()=>s.errors?pt(`errors.${s.errors[0]}`,`Error: ${s.errors[0]}`):null));return(e,t)=>r.value?(p(),x("p",{key:0,id:`${f(s).id}-error`},M(r.value),9,Ls)):G("v-if",!0)}});Rs.__file="src/components/headless/forms/AGHeadlessInputError.vue";const Ps=["id","name","type","value","aria-invalid","aria-describedby","checked"];var Os=u({__name:"AGHeadlessInputInput",props:{type:et("text")},setup(s){const r=s,o=e(),n=ze("input","<AGHeadlessInputInput> must be a child of a <AGHeadlessInput>"),a=t((()=>n.name??void 0)),l=t((()=>n.value)),i=t((()=>{if("checkbox"===r.type)return!!l.value}));function c(){o.value&&n.update("checkbox"===r.type?o.value.checked:o.value.value)}return(e,t)=>(p(),x("input",{id:f(n).id,ref_key:"$input",ref:o,name:a.value,type:s.type,value:l.value,"aria-invalid":f(n).errors?"true":"false","aria-describedby":f(n).errors?`${f(n).id}-error`:f(n).description?`${f(n).id}-description`:void 0,checked:i.value,onInput:c},null,40,Ps))}});Os.__file="src/components/headless/forms/AGHeadlessInputInput.vue";const Bs=["for"];var Vs=u({__name:"AGHeadlessInputLabel",setup(e){const s=ze("input","<AGHeadlessInputLabel> must be a child of a <AGHeadlessInput>"),r=I(),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(f(s).label),1)]))],8,Bs)):G("v-if",!0)}});Vs.__file="src/components/headless/forms/AGHeadlessInputLabel.vue";const Ds={class:"absolute bottom-0 left-0 translate-y-full"};var qs=u({inheritAttrs:!1,__name:"AGInput",props:Es(),setup(e){const t=e,s=Oe(),[r,o]=Gt();return(e,n)=>(p(),m(Ts,C({ref_key:"$input",ref:s,class:["relative flex flex-col items-center",f(o)]},t),{default:h((()=>[w(Vs,{class:"sr-only"}),w(Os,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(Is),S("div",Ds,[w(Rs,{class:"mt-1 text-sm text-red-500"})])])),_:1},16,["class"]))}});qs.__file="src/components/forms/AGInput.vue";const zs={String:"string",Number:"number",Boolean:"boolean",Object:"object"},Us=new WeakMap;class Fs extends D{constructor(s){super(),O(this,"errors",void 0),O(this,"_fields",void 0),O(this,"_data",void 0),O(this,"_submitted",void 0),O(this,"_errors",void 0),this._fields=s,this._submitted=e(!1),this._data=this.getInitialData(s),this._errors=this.getInitialErrors(s),Us.set(this,t((()=>!Object.values(this._errors).some((e=>null!==e))))),this.errors=T(this._errors)}get valid(){return!!Us.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]}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(){return this._submitted.value=!0,this.validate()}__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 Ns(e){return new Fs(e)}function Ks(e){return{default:e,type:zs.Boolean}}function Ws(e){return{default:e,type:zs.Boolean,rules:"required"}}function Qs(e){return{default:e,type:zs.Number,rules:"required"}}function Zs(e){return{default:e,type:zs.String,rules:"required"}}function Ys(e){return{default:e,type:zs.Number}}function Js(e){return{default:e,type:zs.String}}const Xs={class:"mt-2 flex flex-row-reverse gap-2"};var er=u({__name:"AGPromptModal",props:Cs(),setup(e){const t=e,s=Ns({draft:Zs(t.defaultValue??"")}),{renderedAcceptText:r,renderedCancelText:o}=js(t);return(e,t)=>(p(),m(Vt,{cancellable:!1,title:e.title},{default:h((({close:t})=>[w(Ot,{text:e.message},null,8,["text"]),w($s,{form:f(s),onSubmit:e=>t(f(s).draft)},{default:h((()=>[w(qs,{name:"draft",placeholder:e.placeholder,label:e.label},null,8,["placeholder","label"]),S("div",Xs,[w(Wt,{submit:""},{default:h((()=>[$(M(f(r)),1)])),_:1}),w(Wt,{color:"secondary",onClick:e=>t()},{default:h((()=>[$(M(f(o)),1)])),_:2},1032,["onClick"])])])),_:2},1032,["form","onSubmit"])])),_:1},8,["title"]))}});er.__file="src/components/modals/AGPromptModal.vue";const tr={class:"pointer-events-auto"};var sr=u({__name:"AGHeadlessSnackbar",setup:e=>(e,t)=>(p(),x("div",tr,[v(e.$slots,"default")]))});sr.__file="src/components/headless/snackbars/AGHeadlessSnackbar.vue";const rr=re(ft,["Primary","Clear"]),or={id:Xe(),message:Xe(),actions:Re((()=>[])),color:De(rr,ft.Secondary)};function nr(){return or}function ar(e){return{activate:function(t){t.handler?.(),t.dismiss&&ct.hideSnackbar(e.id)}}}var lr=u({__name:"AGSnackbar",props:nr(),setup(e){const s=e,{activate:r}=ar(s),o=t((()=>s.color===ft.Danger?"bg-red-200 text-red-900":"bg-gray-900 text-white"));return(e,t)=>(p(),m(sr,{class:j(["flex flex-row items-center justify-center gap-3 p-4",o.value])},{default:h((()=>[w(Ot,{text:e.message,inline:""},null,8,["text"]),(p(!0),x(A,null,E(e.actions,((t,s)=>(p(),m(Wt,{key:s,color:e.color,onClick:e=>f(r)(t)},{default:h((()=>[$(M(t.text),1)])),_:2},1032,["color","onClick"])))),128))])),_:1},8,["class"]))}});lr.__file="src/components/snackbars/AGSnackbar.vue";const ir={class:"grid flex-grow place-items-center"},cr={class:"flex flex-col items-center space-y-6 p-8"},ur={class:"mt-2 text-center text-4xl font-medium text-red-600"},dr={class:"mt-4 flex flex-col space-y-4"};var pr=u({__name:"AGStartupCrash",setup:e=>(e,t)=>(p(),x("div",ir,[S("div",cr,[S("h1",ur,M(e.$td("startupCrash.title","Something went wrong!")),1),w(Ot,{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",dr,[w(Wt,{color:"danger",onClick:t[0]||(t[0]=t=>e.$app.reload())},{default:h((()=>[$(M(e.$td("startupCrash.reload","Try again")),1)])),_:1}),w(Wt,{color:"danger",onClick:t[1]||(t[1]=t=>e.$errors.inspect(e.$errors.startupErrors))},{default:h((()=>[$(M(e.$td("startupCrash.inspect","View error details")),1)])),_:1})])])]))});pr.__file="src/components/lib/AGStartupCrash.vue";const mr={$ui:ct};var fr={async install(e,t){const s={[lt.AlertModal]:zt,[lt.ConfirmModal]:Zt,[lt.ErrorReportModal]:xs,[lt.LoadingModal]:Ss,[lt.PromptModal]:er,[lt.Snackbar]:lr,[lt.StartupCrash]:pr};Object.entries({...s,...t.components}).forEach((e=>{let[t,s]=e;return ct.registerComponent(t,s)})),await ot(e,mr)}};async function hr(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const s=[At,st,bt,xt,nt,fr,...t.plugins??[]];await Le(s,e,t),await(t.install?.(e)),await Me.emit("application-ready")}async function vr(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const s=L(e);await hr(s,t),s.mount("#app"),s._container?.classList.remove("loading"),await Me.emit("application-mounted")}const gr={key:0};var _r=u({__name:"AGAppModals",setup(e){const s=t((()=>ct.modals[0]??null));return(e,t)=>s.value?(p(),x("aside",gr,[w(Tt,{"child-index":1,modal:s.value},null,8,["modal"])])):G("v-if",!0)}});_r.__file="src/components/AGAppModals.vue";const br={"aria-live":"assertive",class:"z-60 pointer-events-none fixed inset-0 flex items-end px-4 py-6 sm:p-6"},yr={class:"flex w-full flex-col items-end space-y-4"};const xr={render:function(e,t){return p(),x("div",br,[S("div",yr,[(p(!0),x(A,null,E(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 Ar=xr,wr=u({__name:"AGAppOverlays",setup(t){const s=e(null),r=e(!0);return wt("show-overlays-backdrop",(async()=>{s.value&&r.value&&(r.value=!1,s.value.classList.remove("opacity-0"))})),wt("hide-overlays-backdrop",(async()=>{s.value&&!r.value&&(r.value=!0,s.value.classList.add("opacity-0"))})),(e,t)=>(p(),x(A,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),w(_r),w(Ar)],64))}});wr.__file="src/components/AGAppOverlays.vue";const Gr={class:"flex min-h-full flex-col text-base font-normal leading-tight text-gray-900 antialiased"};var Sr=u({__name:"AGAppLayout",setup:e=>(e,t)=>(p(),x("div",Gr,[e.$errors.hasStartupErrors?v(e.$slots,"startup-crash",{key:0},(()=>[(p(),m(_(e.$ui.requireComponent(f(lt).StartupCrash))))])):v(e.$slots,"default",{key:1}),w(wr)]))});Sr.__file="src/components/AGAppLayout.vue";const kr={class:"ml-2"};var Cr=u({inheritAttrs:!1,__name:"AGCheckbox",props:{name:et()},emits:["update:modelValue"],setup(e){const t=Oe();return(s,r)=>(p(),m(Ts,{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(Os,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"]),S("div",kr,[s.$slots.default?(p(),m(Vs,{key:0},{default:h((()=>[v(s.$slots,"default")])),_:3})):G("v-if",!0),w(Rs,{class:"text-sm text-red-600"})])])),_:3},8,["name"]))}});Cr.__file="src/components/forms/AGCheckbox.vue";const jr={viewBox:"0 0 20 20",width:"1.2em",height:"1.2em"},$r=[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 Mr={name:"zondicons-cheveron-down",render:function(e,t){return p(),x("svg",jr,[...$r])}};const Er={name:et(),label:et(),options:We(),noSelectionText:et(),optionsText:Fe()},Hr=["update:modelValue"];function Tr(){return Er}function Ir(){return[...Hr]}function Lr(e){return Ct(e,Er)}var Rr=u({__name:"AGHeadlessSelect",props:{modelValue:Fe(),...Tr()},emits:Ir(),setup(e,{expose:s,emit:o}){const n=o,a=e,l=t((()=>"function"==typeof a.optionsText?a.optionsText:"string"==typeof a.optionsText?e=>se(e[a.optionsText]):e=>se(e))),i=r("form",null),c=t((()=>a.noSelectionText??pt("select.noSelection","-"))),u=t((()=>i&&a.name?i.getFieldValue(a.name):a.modelValue)),d=t((()=>i&&a.name?i.errors[a.name]??null:null));function _(e){i&&a.name?i.setFieldValue(a.name,e):n("update:modelValue",e)}const b={id:`select-${X()}`,noSelectionText:c,selectedOption:u,errors:d,options:t((()=>a.options)),label:t((()=>a.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(me),{"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"]))}});Rr.__file="src/components/headless/forms/AGHeadlessSelect.vue";var Pr=u({__name:"AGHeadlessSelectButton",props:{textClass:et()},setup(e){const t=ze("select","<AGHeadlessSelectButton> must be a child of a <AGHeadlessSelect>");return(s,r)=>(p(),m(f(fe),null,{default:h((({value:r,open:o,disabled:n})=>[v(s.$slots,"default",{value:r,open:o,disabled:n},(()=>[S("span",{class:j(e.textClass)},M(f(t)?.buttonText),3)])),v(s.$slots,"icon")])),_:3}))}});Pr.__file="src/components/headless/forms/AGHeadlessSelectButton.vue";const Or=["id"];var Br=u({__name:"AGHeadlessSelectError",setup(e){const s=ze("select","<AGHeadlessSelectError> must be a child of a <AGHeadlessSelect>"),r=t((()=>s.errors?pt(`errors.${s.errors[0]}`,`Error: ${s.errors[0]}`):null));return(e,t)=>r.value?(p(),x("p",{key:0,id:`${f(s).id}-error`},M(r.value),9,Or)):G("v-if",!0)}});Br.__file="src/components/headless/forms/AGHeadlessSelectError.vue";var Vr=u({__name:"AGHeadlessSelectLabel",setup(e){const s=ze("select","<AGHeadlessSelectLabel> must be a child of a <AGHeadlessSelect>"),r=I(),o=t((()=>!(!s.label&&!r.default)));return(e,t)=>o.value?(p(),m(f(he),{key:0},{default:h((({open:t,disabled:r})=>[v(e.$slots,"default",{open:t,disabled:r},(()=>[$(M(f(s).label),1)]))])),_:3})):G("v-if",!0)}});Vr.__file="src/components/headless/forms/AGHeadlessSelectLabel.vue";var Dr=u({__name:"AGHeadlessSelectOption",props:{value:Ze(),selectedClass:et(),unselectedClass:et(),activeClass:et(),inactiveClass:et()},setup(e){const t=ze("select","<AGHeadlessSelectOption> must be a child of a <AGHeadlessSelect>");return(s,r)=>(p(),m(f(ve),{value:e.value,as:"template"},{default:h((({active:r,selected:o,disabled:n})=>[v(s.$slots,"default",{active:r,selected:o,disabled:n},(()=>[S("li",{class:j({[e.activeClass??"active"]:r,[e.inactiveClass??"inactive"]:!r,[e.selectedClass??"selected"]:o,[e.unselectedClass??"unselected"]:!o})},M(f(t).renderText(e.value)),3)]))])),_:3},8,["value"]))}});Dr.__file="src/components/headless/forms/AGHeadlessSelectOption.vue";const qr={class:"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2"};var zr=u({__name:"AGSelect",props:Tr(),emits:Ir(),setup(e){const t=e,s=Oe();return(e,r)=>(p(),m(Rr,C(t,{ref_key:"$select",ref:s,as:"div","onUpdate:modelValue":r[0]||(r[0]=t=>e.$emit("update:modelValue",t))}),{default:h((()=>[w(Vr,{class:"block text-sm font-medium leading-6 text-gray-900"}),S("div",{class:j(["relative",{"mt-2":f(s)?.label}])},[w(Pr,{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((()=>[S("span",qr,[w(f(Mr),{class:"h-5 w-5 text-gray-400"})])])),_:1},8,["class"]),w(f(ge),{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,E(f(s)?.options??[],((e,t)=>(p(),m(Dr,{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(Br,{class:"mt-2 text-sm text-red-600"})])),_:1},16))}});zr.__file="src/components/forms/AGSelect.vue";var Ur=u({__name:"AGErrorMessage",props:{error:Je()},setup(e){const s=e,r=t((()=>vt(s.error)));return(e,t)=>(p(),m(Ot,{text:r.value,inline:""},null,8,["text"]))}});Ur.__file="src/components/lib/AGErrorMessage.vue";var Fr=u({__name:"AGLink",setup:e=>(e,t)=>(p(),m(Kt,{class:"font-medium hover:underline"},{default:h((()=>[v(e.$slots,"default")])),_:3}))});Fr.__file="src/components/lib/AGLink.vue";var Nr=u({__name:"AGMeasured",props:{as:et("span")},setup(t){const s=e(!1);return(e,r)=>{const o=R("measure");return P((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]])}}});Nr.__file="src/components/lib/AGMeasured.vue";var Kr=u({__name:"AGModalTitle",setup:e=>(e,t)=>(p(),m(Rt,{class:"mb-2 font-semibold"},{default:h((()=>[v(e.$slots,"default")])),_:3}))});Kr.__file="src/components/modals/AGModalTitle.vue";class Wr{}async function Qr(e){await e.run()}export{zt as AGAlertModal,Sr as AGAppLayout,wr as AGAppOverlays,Wt as AGButton,Cr as AGCheckbox,Zt as AGConfirmModal,Ur as AGErrorMessage,vs as AGErrorReportModalButtons,gs as AGErrorReportModalTitle,$s as AGForm,Kt as AGHeadlessButton,Ts as AGHeadlessInput,Is as AGHeadlessInputDescription,Rs as AGHeadlessInputError,Os as AGHeadlessInputInput,Vs as AGHeadlessInputLabel,Ht as AGHeadlessModal,Lt as AGHeadlessModalPanel,Rt as AGHeadlessModalTitle,Rr as AGHeadlessSelect,Pr as AGHeadlessSelectButton,Br as AGHeadlessSelectError,Vr as AGHeadlessSelectLabel,Dr as AGHeadlessSelectOption,sr as AGHeadlessSnackbar,qs as AGInput,Fr as AGLink,Ss as AGLoadingModal,Ot as AGMarkdown,Nr as AGMeasured,Vt as AGModal,Tt as AGModalContext,Kr as AGModalTitle,er as AGPromptModal,zr as AGSelect,lr as AGSnackbar,pr as AGStartupCrash,Te as App,He as AppService,ft as Colors,ht as Errors,je as EventListenerPriorities,Me as Events,$e as EventsService,zs as FormFieldTypes,Wr as Job,ut as Lang,Ce as Service,rr as SnackbarColors,ct as UI,lt as UIComponents,it as UIService,Dt as alertModalProps,Re as arrayProp,Ks as booleanInput,Pe as booleanProp,ot as bootServices,vr as bootstrap,hr as bootstrapApplication,Oe as componentRef,Be as computedAsync,Ut as confirmModalProps,Ve as defineDirective,Ie as definePlugin,ke as defineServiceState,Se as defineServiceStore,Qr as dispatch,De as enumProp,rs as errorReportModalProps,Hs as extractInputProps,Mt as extractModalProps,Lr as extractSelectProps,vt as getErrorMessage,Ge as getPiniaStore,Ue as injectOrFail,qe as injectReactive,ze as injectReactiveOrFail,Ms as inputProps,Le as installPlugins,As as loadingModalProps,Fe as mixedProp,jt as modalProps,Ys as numberInput,Ne as numberProp,Ke as objectProp,St as onCleanMounted,ks as promptModalProps,kt as removeInteractiveClasses,We as requiredArrayProp,Ws as requiredBooleanInput,Qe as requiredEnumProp,Ze as requiredMixedProp,Qs as requiredNumberInput,Ye as requiredNumberProp,Je as requiredObjectProp,Zs as requiredStringInput,Xe as requiredStringProp,we as resetPiniaStore,Hr as selectEmits,Er as selectProps,or as snackbarProps,Js as stringInput,et as stringProp,dt as translate,pt as translateWithDefault,qt as useAlertModalProps,Nt as useConfirmModal,Ft as useConfirmModalProps,ns as useErrorReportModal,os as useErrorReportModalProps,wt as useEvent,Ns as useForm,Gt as useInputAttrs,Es as useInputProps,Gs as useLoadingModal,ws as useLoadingModalProps,Et as useModalExpose,$t as useModalProps,js as usePromptModal,Cs as usePromptModalProps,Ir as useSelectEmits,Tr as useSelectProps,ar as useSnackbar,nr as useSnackbarProps};
|
|
2
2
|
//# sourceMappingURL=aerogel-core.esm.js.map
|