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