@aerogel/core 0.0.0-next.c8f032a868370824898e171969aec1bb6827688e → 0.0.0-next.d34923f3b144e8f6720e6a9cdadb2cd4fb4ab289

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