@aerogel/core 0.0.0-next.7f6ed5a1f91688a86bf5ede2adc465e4fd6cfdea → 0.0.0-next.926bde19326fe7b6b24b277666936862b64d8295

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 (48) hide show
  1. package/dist/aerogel-core.cjs.js +1 -1
  2. package/dist/aerogel-core.d.ts +231 -47
  3. package/dist/aerogel-core.esm.js +1 -1
  4. package/package.json +5 -8
  5. package/src/bootstrap/bootstrap.test.ts +0 -56
  6. package/src/bootstrap/index.ts +6 -25
  7. package/src/bootstrap/options.ts +5 -1
  8. package/src/components/basic/AGMarkdown.vue +20 -5
  9. package/src/components/forms/AGButton.vue +11 -1
  10. package/src/components/headless/forms/AGHeadlessInput.vue +2 -2
  11. package/src/components/headless/forms/AGHeadlessInputError.vue +9 -5
  12. package/src/components/headless/forms/AGHeadlessInputInput.vue +5 -1
  13. package/src/components/headless/forms/AGHeadlessInputLabel.vue +16 -0
  14. package/src/components/headless/forms/index.ts +6 -4
  15. package/src/components/headless/modals/AGHeadlessModal.vue +5 -1
  16. package/src/components/headless/modals/AGHeadlessModalPanel.vue +5 -1
  17. package/src/components/index.ts +2 -1
  18. package/src/components/modals/AGAlertModal.vue +13 -2
  19. package/src/components/modals/AGConfirmModal.vue +30 -0
  20. package/src/components/modals/AGModal.ts +4 -0
  21. package/src/components/modals/index.ts +3 -1
  22. package/src/directives/index.ts +5 -3
  23. package/src/forms/Form.test.ts +21 -0
  24. package/src/forms/Form.ts +26 -7
  25. package/src/globals.ts +6 -0
  26. package/src/lang/Lang.ts +38 -7
  27. package/src/lang/index.ts +18 -75
  28. package/src/main.ts +3 -0
  29. package/src/plugins/Plugin.ts +7 -0
  30. package/src/plugins/index.ts +7 -0
  31. package/src/services/App.state.ts +10 -0
  32. package/src/services/App.ts +7 -0
  33. package/src/services/Service.ts +50 -9
  34. package/src/services/index.ts +13 -5
  35. package/src/types/vite.d.ts +0 -2
  36. package/src/ui/UI.state.ts +2 -6
  37. package/src/ui/UI.ts +20 -2
  38. package/src/ui/index.ts +15 -11
  39. package/src/utils/composition/hooks.ts +9 -0
  40. package/src/utils/index.ts +2 -0
  41. package/tsconfig.json +1 -10
  42. package/vite.config.ts +2 -6
  43. package/src/bootstrap/hooks.ts +0 -19
  44. package/src/lang/helpers.ts +0 -5
  45. package/src/models/index.ts +0 -18
  46. package/src/routing/index.ts +0 -33
  47. package/src/testing/stubs/lang/en.yaml +0 -1
  48. package/src/testing/stubs/models/User.ts +0 -3
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),require("core-js/modules/esnext.async-iterator.map.js"),require("core-js/modules/esnext.iterator.map.js");var e=require("vue");require("core-js/modules/esnext.async-iterator.for-each.js"),require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.for-each.js");var t=require("@noeldemartin/utils");require("core-js/modules/esnext.async-iterator.reduce.js"),require("core-js/modules/esnext.iterator.reduce.js");var r=require("vue-i18n"),o=require("@babel/runtime/helpers/defineProperty"),s=require("soukai"),n=require("vue-router");require("core-js/modules/esnext.string.at.js"),require("core-js/modules/esnext.async-iterator.filter.js"),require("core-js/modules/esnext.iterator.filter.js");var a=require("@headlessui/vue"),l=require("dompurify"),i=require("marked");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}require("core-js/modules/esnext.async-iterator.some.js"),require("core-js/modules/esnext.iterator.some.js");var d=u(o),c=u(l);const p=[];function m(){return{type:Boolean,default:arguments.length>0&&void 0!==arguments[0]&&arguments[0]}}function f(){return e.ref()}function v(e){return e}function h(t){const r=e.inject(t);return r?e.reactive(r):void 0}function _(e,r){return h(e)??t.fail(r??`Could not resolve '${e}' injection key`)}function x(){return{type:Object,default:arguments.length>0&&void 0!==arguments[0]?arguments[0]:null}}function g(){return{type:Number,required:!0}}function y(){return{type:Object,required:!0}}function b(){return{type:String,required:!0}}function k(){return{type:String,default:arguments.length>0&&void 0!==arguments[0]?arguments[0]:null}}const A={"initial-focus":{mounted(e,t){let{value:r}=t;!1!==r&&e.focus()}}};var w=async e=>{Object.entries(A).forEach((t=>{let[r,o]=t;return e.directive(r,o)}))};class ServiceBootError extends t.JSError{constructor(e,t){super(`Service '${e}' failed booting`,{cause:t})}}function j(e){return class extends C{getInitialState(){return e.initialState}}}class C extends t.MagicObject{constructor(){super(),d.default(this,"_namespace",void 0),d.default(this,"_booted",void 0),d.default(this,"_state",void 0),this._namespace=new.target.name,this._booted=new t.PromisedValue,this._state=e.reactive(this.getInitialState())}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):super.__get(e)}__set(e,t){this.setState({[e]:t})}hasState(e){return e in this._state}getState(e){return e?this._state[e]:this._state}setState(e){Object.assign(this._state,e)}getInitialState(){return{}}async boot(){}}class B extends C{constructor(){super(...arguments),d.default(this,"listeners",{})}async emit(e,t){const r=[...this.listeners[e]??[]];await Promise.all(r.map((e=>e(t)))??[])}on(e,r){return(this.listeners[e]??=t.arr([])).push(r),()=>this.off(e,r)}once(e,r){let o=null;return t.tap((()=>o&&this.off(e,o)),(s=>{(this.listeners[e]??=t.arr([])).push(o=function(){return s(),r(...arguments)})}))}off(e,t){const r=this.listeners[e];r&&(r.remove(t),r.isEmpty()&&delete this.listeners[e])}}var G=t.facade(new B);const S={$events:G};async function q(e,t){await Promise.all(Object.entries(t).map((async e=>{let[t,r]=e;await r.launch(t.slice(1)).catch((e=>console.error(e)))}))),Object.assign(e.config.globalProperties,t)}var M=e=>q(e,S);var P=t.facade(new class extends C{constructor(){super(...arguments),d.default(this,"i18n",void 0)}setup(){this.i18n=r.useI18n()}translate(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.i18n?.t(e,t)??e}});function I(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return P.translate(e,t)}const E={$lang:P};async function $(e){const o=e.defaultLocale??"en",s=e.fallbackLocale??"en",n=function(e){return Object.entries(e).reduce(((e,r)=>{let[o,s]=r;const n=t.stringMatch(o,/.*\/lang\/(.+)\.yaml/)?.[1];return n&&(e[n]=()=>s().then((e=>{let{default:t}=e;return t}))),e}),{})}(e.messages),a=n[o]??t.fail(`Missing messages for '${o}' locale`),l={[o]:await a()};return r.createI18n({locale:o,fallbackLocale:s,messages:l})}var O=async(e,t)=>{const r=function(e){return e.lang?e.lang:e.langMessages?{messages:e.langMessages}:null}(t);if(!r)return;var o;o=()=>P.setup(),p.push(o);const s=await $(r);e.use(s),await q(e,E)},H=async(e,t)=>{t.models&&(s.setEngine(new s.IndexedDBEngine),s.bootModelsFromViteGlob(t.models))};var V=async(e,t)=>{if(!t.routes)return;const r=function(e){return n.createRouter({history:n.createWebHistory(e.basePath),routes:e.routes})}({routes:t.routes,basePath:t.basePath??__AG_BASE_PATH});e.use(r)},N=j({initialState:{modals:[]}});const F={AlertModal:"alert-modal"};var D=t.facade(new class extends N{constructor(){super(...arguments),d.default(this,"modalCallbacks",{}),d.default(this,"components",{})}alert(e){this.openModal(this.requireComponent(F.AlertModal),{message:e})}registerComponent(e,t){this.components[e]=t}async openModal(r,o){const s=t.uuid(),n={},a={id:s,properties:o??{},component:e.markRaw(r),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 e.nextTick(),await(l&&G.emit("hide-modal",{id:l.id})),await Promise.all([l||G.emit("show-overlays-backdrop"),G.emit("show-modal",{id:a.id})]),a}async closeModal(e,t){await G.emit("close-modal",{id:e,result:t})}async boot(){await super.boot(),this.watchModalEvents()}requireComponent(e){return this.components[e]??t.fail(`UI Component '${e}' is not defined!`)}watchModalEvents(){G.on("modal-will-close",(e=>{let{modal:t,result:r}=e;this.modalCallbacks[t.id]?.willClose?.(r),1===this.modals.length&&G.emit("hide-overlays-backdrop")})),G.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 o=this.modals.at(-1);await(o&&G.emit("show-modal",{id:o.id}))}))}});function R(t,r){const o=G.on(t,r);e.onUnmounted((()=>o()))}var L=e.defineComponent({__name:"AGHeadlessModal",props:{cancellable:m(!0)},setup(t,{expose:r}){const o=t,s=e.ref(null),n=e.ref(!0),l=e.ref(!1),{modal:i}=_("modal");async function u(){s.value?.$el&&(n.value=!0)}async function d(e){l.value||(G.emit("modal-will-close",{modal:i,result:e}),await u(),l.value=!0,G.emit("modal-closed",{modal:i,result:e}))}return R("close-modal",(async({id:e,result:t})=>{e===i.id&&await d(t)})),R("hide-modal",(async({id:e})=>{e===i.id&&await u()})),R("show-modal",(async({id:e})=>{e===i.id&&await async function(){s.value?.$el&&(n.value=!1)}()})),r({close:d,cancellable:e.toRef(o,"cancellable")}),(r,o)=>(e.openBlock(),e.createBlock(e.unref(a.Dialog),{ref_key:"$root",ref:s,open:!0,onClose:o[0]||(o[0]=e=>t.cancellable&&d())},{default:e.withCtx((()=>[e.renderSlot(r.$slots,"default",{close:d})])),_:3},512))}});L.__file="src/components/headless/modals/AGHeadlessModal.vue";var T=e.defineComponent({__name:"AGModalContext",props:{modal:y(),childIndex:g()},setup(t){const r=t;return e.provide("modal",{modal:e.toRef(r,"modal"),childIndex:e.toRef(r,"childIndex")}),(r,o)=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(t.modal.component),e.normalizeProps(e.guardReactiveProps(t.modal.properties)),null,16))}});T.__file="src/components/modals/AGModalContext.vue";var z=e.defineComponent({__name:"AGHeadlessModalPanel",setup(t){const r=_("modal"),o=e.computed((()=>D.modals[r.childIndex]??null));return(t,s)=>(e.openBlock(),e.createBlock(e.unref(a.DialogPanel),null,{default:e.withCtx((()=>[e.renderSlot(t.$slots,"default"),o.value?(e.openBlock(),e.createBlock(T,{key:0,"child-index":e.unref(r).childIndex+1,modal:o.value},null,8,["child-index","modal"])):e.createCommentVNode("v-if",!0)])),_:3}))}});z.__file="src/components/headless/modals/AGHeadlessModalPanel.vue";const U={class:"fixed inset-0 flex items-center justify-center"},K={class:"flex max-h-full flex-col overflow-auto p-4"};var Q=e.defineComponent({__name:"AGModal",setup:t=>(t,r)=>(e.openBlock(),e.createBlock(L,{class:"relative z-50"},{default:e.withCtx((({close:r})=>[e.createElementVNode("div",U,[e.createVNode(z,{class:"flex max-h-full max-w-full flex-col overflow-hidden bg-white"},{default:e.withCtx((()=>[e.createElementVNode("div",K,[e.renderSlot(t.$slots,"default",{close:r})])])),_:2},1024)])])),_:3}))});function W(e){return t=i.marked(e,{mangle:!1,headerIds:!1}),c.default.sanitize(t,{ADD_ATTR:["target"]});var t}Q.__file="src/components/modals/AGModal.vue";var J=e.defineComponent({__name:"AGMarkdown",props:{langKey:k(),text:k()},setup(t){const r=t,o=e.computed((()=>r.text??(r.langKey&&I(r.langKey)))),s=e.computed((()=>o.value&&W(o.value))),n=()=>e.h("div",{class:"prose",innerHTML:s.value});return(t,r)=>(e.openBlock(),e.createBlock(n))}});J.__file="src/components/basic/AGMarkdown.vue";var X=e.defineComponent({__name:"AGAlertModal",props:{message:b()},setup:t=>(r,o)=>(e.openBlock(),e.createBlock(Q,null,{default:e.withCtx((()=>[e.createVNode(J,{text:t.message},null,8,["text"])])),_:1}))});X.__file="src/components/modals/AGAlertModal.vue";const Y={$ui:D};var Z=async(e,t)=>{const r={[F.AlertModal]:X};Object.entries({...r,...t.components}).forEach((e=>{let[t,r]=e;return D.registerComponent(t,r)})),await q(e,Y)};const ee={key:0};var te=e.defineComponent({__name:"AGAppOverlays",setup(t){const r=e.ref(null),o=e.ref(!0),s=e.computed((()=>D.modals[0]??null));return R("show-overlays-backdrop",(async()=>{r.value&&o.value&&(o.value=!1,r.value.classList.remove("opacity-0"))})),R("hide-overlays-backdrop",(async()=>{r.value&&!o.value&&(o.value=!0,r.value.classList.add("opacity-0"))})),(t,o)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("div",{ref_key:"$backdrop",ref:r,class:"pointer-events-none fixed inset-0 z-50 bg-black/30 opacity-0"},null,512),s.value?(e.openBlock(),e.createElementBlock("aside",ee,[e.createVNode(T,{"child-index":1,modal:s.value},null,8,["modal"])])):e.createCommentVNode("v-if",!0)],64))}});te.__file="src/components/AGAppOverlays.vue";const re={class:"flex h-full flex-col text-base font-normal leading-tight text-gray-900 antialiased"};var oe=e.defineComponent({__name:"AGAppLayout",setup:t=>(t,r)=>(e.openBlock(),e.createElementBlock("div",re,[e.renderSlot(t.$slots,"default"),e.createVNode(te)]))});oe.__file="src/components/AGAppLayout.vue";var se=e.defineComponent({__name:"AGHeadlessButton",props:{url:k(),route:k(),routeParams:x((()=>({}))),routeQuery:x((()=>({}))),submit:m()},setup(r){const{url:o,route:s,routeParams:n,routeQuery:a,submit:l}=r,i=e.computed((()=>s?{tag:"router-link",props:{to:t.objectWithoutEmpty({name:s,params:n,query:a})}}:o?{tag:"a",props:{target:"_blank",href:o}}:{tag:"button",props:{type:l?"submit":"button"}}));return(t,r)=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(i.value.tag),e.normalizeProps(e.guardReactiveProps(i.value.props)),{default:e.withCtx((()=>[e.renderSlot(t.$slots,"default")])),_:3},16))}});se.__file="src/components/headless/forms/AGHeadlessButton.vue";var ne=e.defineComponent({__name:"AGButton",setup:t=>(t,r)=>(e.openBlock(),e.createBlock(se,{class:"bg-indigo-600 px-2.5 py-1.5 text-white hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600"},{default:e.withCtx((()=>[e.renderSlot(t.$slots,"default")])),_:3}))});ne.__file="src/components/forms/AGButton.vue";const ae=["onSubmit"];var le=e.defineComponent({__name:"AGForm",props:{form:x()},emits:["submit"],setup(t,{emit:r}){const o=t;function s(){o.form&&!o.form.submit()||r("submit")}return e.provide("form",o.form),(t,r)=>(e.openBlock(),e.createElementBlock("form",{onSubmit:e.withModifiers(s,["prevent"])},[e.renderSlot(t.$slots,"default")],40,ae))}});le.__file="src/components/forms/AGForm.vue";var ie=e.defineComponent({__name:"AGHeadlessInput",props:{as:k(),name:k(),modelValue:k()},emits:["update:modelValue"],setup(r,{expose:o,emit:s}){const n=r,a=e.computed((()=>l&&n.name?l.errors[n.name]??null:null)),l=e.inject("form"),i={id:t.uuid(),value:e.computed((()=>l&&n.name?l.getFieldValue(n.name):n.modelValue)),errors:e.readonly(a),update(e){l&&n.name?l.setFieldValue(n.name,e):s("update:modelValue",e)}};return e.provide("input",i),o(i),(t,o)=>r.as?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(r.as),{key:0},{default:e.withCtx((()=>[e.renderSlot(t.$slots,"default")])),_:3})):e.renderSlot(t.$slots,"default",{key:1})}});ie.__file="src/components/headless/forms/AGHeadlessInput.vue";const ue=["value","aria-invalid","aria-describedby"];var de=e.defineComponent({__name:"AGHeadlessInputInput",setup(t){const r=e.ref(),o=_("input"),s=e.computed((()=>o.value));function n(){r.value&&o.update(r.value.value)}return(t,a)=>(e.openBlock(),e.createElementBlock("input",{ref_key:"$input",ref:r,type:"text",value:s.value,"aria-invalid":e.unref(o).errors?"true":"false","aria-describedby":e.unref(o).errors?`${e.unref(o).id}-error`:void 0,onInput:n},null,40,ue))}});de.__file="src/components/headless/forms/AGHeadlessInputInput.vue";const ce=["id"];var pe=e.defineComponent({__name:"AGHeadlessInputError",setup(t){const r=_("input"),o=e.computed((()=>r.errors?I(`errors.${r.errors[0]}`):null));return(t,s)=>o.value?(e.openBlock(),e.createElementBlock("p",{key:0,id:`${e.unref(r).id}-error`},e.toDisplayString(o.value),9,ce)):e.createCommentVNode("v-if",!0)}});pe.__file="src/components/headless/forms/AGHeadlessInputError.vue";var me=e.defineComponent({inheritAttrs:!1,__name:"AGInput",props:{name:k()},setup(t){const r=f();return(o,s)=>(e.openBlock(),e.createBlock(ie,{ref_key:"$input",ref:r,as:"div",class:"flex flex-col items-center",name:t.name},{default:e.withCtx((()=>[e.createVNode(de,e.mergeProps(o.$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":e.unref(r)?.errors}]}),null,16,["class"]),e.createVNode(pe,{class:"mt-1 text-sm text-red-500"})])),_:1},8,["name"]))}});me.__file="src/components/forms/AGInput.vue";var fe=e.defineComponent({__name:"AGHeadlessModalTitle",props:{as:k("h2")},setup:t=>(r,o)=>(e.openBlock(),e.createBlock(e.unref(a.DialogTitle),{as:t.as},{default:e.withCtx((()=>[e.renderSlot(r.$slots,"default")])),_:3},8,["as"]))});fe.__file="src/components/headless/modals/AGHeadlessModalTitle.vue";const ve={String:"string",Number:"number"};class he extends t.MagicObject{constructor(t){super(),d.default(this,"errors",void 0),d.default(this,"_fields",void 0),d.default(this,"_data",void 0),d.default(this,"_valid",void 0),d.default(this,"_submitted",void 0),d.default(this,"_errors",void 0),this._fields=t,this._submitted=e.ref(!1),this._valid=e.ref(!0),this._data=this.getInitialData(t),this._errors=this.getInitialErrors(t),this.errors=e.readonly(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,o]=t;return e[r]=this.getFieldErrors(r,o),e}),{});return Object.assign(this._errors,e),this._valid.value=!Object.values(e).some((e=>null!==e))}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(t){if(this.static().isConjuring())return{};const r=Object.entries(t).reduce(((e,t)=>{let[r,o]=t;return e[r]=o.default??null,e}),{});return e.reactive(r)}getInitialErrors(t){if(this.static().isConjuring())return{};const r=Object.keys(t).reduce(((e,t)=>(e[t]=null,e)),{});return e.reactive(r)}}exports.AGAppLayout=oe,exports.AGButton=ne,exports.AGForm=le,exports.AGHeadlessButton=se,exports.AGHeadlessInput=ie,exports.AGHeadlessModal=L,exports.AGHeadlessModalPanel=z,exports.AGHeadlessModalTitle=fe,exports.AGInput=me,exports.AGMarkdown=J,exports.AGModal=Q,exports.AGModalContext=T,exports.Events=G,exports.EventsService=B,exports.FormFieldTypes=ve,exports.Lang=P,exports.Service=C,exports.UI=D,exports.UIComponents=F,exports.arrayProp=function(e){return{type:Array,default:e??(()=>[])}},exports.booleanProp=m,exports.bootServices=q,exports.bootstrapApplication=async function(t){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const o=[w,O,H,V,M,Z],s=e.createApp({data:()=>({ready:!1}),mounted(){p.forEach((e=>e())),this.ready=!0},render(){return this.ready?e.h(t):null}});await Promise.all(o.map((e=>e(s,r)))),s.mount("#app")},exports.componentRef=f,exports.defineDirective=v,exports.defineServiceState=j,exports.enumProp=function(e,t){const r=Object.values(e);return{type:String,default:t??r[0]??null,validator:e=>r.includes(e)}},exports.injectOrFail=function(r,o){return e.inject(r)??t.fail(o??`Could not resolve '${r}' injection key`)},exports.injectReactive=h,exports.injectReactiveOrFail=_,exports.lang=I,exports.mixedProp=function(e){return{type:e,default:null}},exports.numberInput=function(e){return{default:e,type:ve.Number}},exports.numberProp=function(){return{type:Number,default:arguments.length>0&&void 0!==arguments[0]?arguments[0]:null}},exports.objectProp=x,exports.requiredArrayProp=function(){return{type:Array,required:!0}},exports.requiredEnumProp=function(e){const t=Object.values(e);return{type:String,required:!0,validator:e=>t.includes(e)}},exports.requiredMixedProp=function(e){return{type:e,required:!0}},exports.requiredNumberInput=function(e){return{default:e,type:ve.Number,rules:"required"}},exports.requiredNumberProp=g,exports.requiredObjectProp=y,exports.requiredStringInput=function(e){return{default:e,type:ve.String,rules:"required"}},exports.requiredStringProp=b,exports.stringInput=function(e){return{default:e,type:ve.String}},exports.stringProp=k,exports.useForm=function(e){return new he(e)};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),require("core-js/modules/esnext.async-iterator.map.js"),require("core-js/modules/esnext.iterator.map.js");var e=require("vue");require("core-js/modules/esnext.async-iterator.for-each.js"),require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.for-each.js");var t=require("@noeldemartin/utils"),r=require("@babel/runtime/helpers/defineProperty");require("core-js/modules/esnext.async-iterator.reduce.js"),require("core-js/modules/esnext.iterator.reduce.js"),require("core-js/modules/esnext.string.at.js"),require("core-js/modules/esnext.async-iterator.filter.js"),require("core-js/modules/esnext.iterator.filter.js");var o=require("@headlessui/vue"),s=require("dompurify"),n=require("marked");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}require("core-js/modules/esnext.async-iterator.some.js"),require("core-js/modules/esnext.iterator.some.js");var l=a(r),i=a(s);function u(e){return e}function d(){return{type:Boolean,default:arguments.length>0&&void 0!==arguments[0]&&arguments[0]}}function c(){return e.ref()}function p(e){return e}function m(t){const r=e.inject(t);return r?e.reactive(r):void 0}function f(e,r){return m(e)??t.fail(r??`Could not resolve '${e}' injection key`)}function v(){return{type:Object,default:arguments.length>0&&void 0!==arguments[0]?arguments[0]:null}}function h(){return{type:Number,required:!0}}function _(){return{type:Object,required:!0}}function x(){return{type:String,required:!0}}function g(){return{type:String,default:arguments.length>0&&void 0!==arguments[0]?arguments[0]:null}}const b={"initial-focus":{mounted(e,t){let{value:r}=t;!1!==r&&e.focus()}}};var y={install(e){Object.entries(b).forEach((t=>{let[r,o]=t;return e.directive(r,o)}))}};class ServiceBootError extends t.JSError{constructor(e,t){super(`Service '${e}' failed booting`,{cause:t})}}function k(e){return class extends A{getInitialState(){return e.initialState}getComputedStateDefinition(){return e.computed??{}}}}class A extends t.MagicObject{constructor(){super(),l.default(this,"_namespace",void 0),l.default(this,"_booted",void 0),l.default(this,"_state",void 0),l.default(this,"_computedState",void 0),this._namespace=new.target.name,this._booted=new t.PromisedValue,this._state=e.reactive(this.getInitialState()),this._computedState=Object.entries(this.getComputedStateDefinition()).reduce(((t,r)=>{let[o,s]=r;return t[o]=e.computed((()=>s(this._state))),t}),{})}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 C=k({initialState:{environment:__AG_ENV},computed:{isDevelopment:e=>"development"===e.environment}});class w extends C{}var G=t.facade(new w);class S extends A{constructor(){super(...arguments),l.default(this,"listeners",{})}async emit(e,t){const r=[...this.listeners[e]??[]];await Promise.all(r.map((e=>e(t)))??[])}on(e,r){return(this.listeners[e]??=t.arr([])).push(r),()=>this.off(e,r)}once(e,r){let o=null;return t.tap((()=>o&&this.off(e,o)),(s=>{(this.listeners[e]??=t.arr([])).push(o=function(){return s(),r(...arguments)})}))}off(e,t){const r=this.listeners[e];r&&(r.remove(t),r.isEmpty()&&delete this.listeners[e])}}var j=t.facade(new S);const B={$app:G,$events:j};async function M(e,t){await Promise.all(Object.entries(t).map((async e=>{let[t,r]=e;await r.launch(t.slice(1)).catch((e=>console.error(e)))}))),Object.assign(e.config.globalProperties,t)}var I={async install(e){await M(e,B)}};var q=t.facade(new class extends A{constructor(){super(),l.default(this,"provider",void 0),this.provider={translate:e=>(G.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 o="string"==typeof t?{}:t,s=this.provider.translate(e,o)??e;return s===e?r:s}});const P={$lang:q},E=q.translate.bind(q),$=q.translateWithDefault.bind(q);var H={async install(e){e.config.globalProperties.$t??=E,e.config.globalProperties.$td=$,await M(e,P)}},V=k({initialState:{modals:[]}});const N={AlertModal:"alert-modal",ConfirmModal:"confirm-modal"};var O=t.facade(new class extends V{constructor(){super(...arguments),l.default(this,"modalCallbacks",{}),l.default(this,"components",{})}alert(e,t){const r="string"==typeof t?{title:e,message:t}:{message:e};this.openModal(this.requireComponent(N.AlertModal),r)}async confirm(e,t){const r="string"==typeof t?{title:e,message:t}:{message:e},o=await this.openModal(this.requireComponent(N.ConfirmModal),r);return await o.beforeClose??!1}registerComponent(e,t){this.components[e]=t}async openModal(r,o){const s=t.uuid(),n={},a={id:s,properties:o??{},component:e.markRaw(r),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 e.nextTick(),await(l&&j.emit("hide-modal",{id:l.id})),await Promise.all([l||j.emit("show-overlays-backdrop"),j.emit("show-modal",{id:a.id})]),a}async closeModal(e,t){await j.emit("close-modal",{id:e,result:t})}async boot(){await super.boot(),this.watchModalEvents()}requireComponent(e){return this.components[e]??t.fail(`UI Component '${e}' is not defined!`)}watchModalEvents(){j.on("modal-will-close",(e=>{let{modal:t,result:r}=e;this.modalCallbacks[t.id]?.willClose?.(r),1===this.modals.length&&j.emit("hide-overlays-backdrop")})),j.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 o=this.modals.at(-1);await(o&&j.emit("show-modal",{id:o.id}))}))}});function D(t,r){const o=j.on(t,r);e.onUnmounted((()=>o()))}var F=e.defineComponent({__name:"AGHeadlessModal",props:{cancellable:d(!0)},setup(t,{expose:r}){const s=t,n=e.ref(null),a=e.ref(!0),l=e.ref(!1),{modal:i}=f("modal","could not obtain modal reference from <AGHeadlessModal>, did you render this component manually? Show it using $ui.openModal() instead");async function u(){n.value?.$el&&(a.value=!0)}async function d(e){l.value||(j.emit("modal-will-close",{modal:i,result:e}),await u(),l.value=!0,j.emit("modal-closed",{modal:i,result:e}))}return D("close-modal",(async({id:e,result:t})=>{e===i.id&&await d(t)})),D("hide-modal",(async({id:e})=>{e===i.id&&await u()})),D("show-modal",(async({id:e})=>{e===i.id&&await async function(){n.value?.$el&&(a.value=!1)}()})),r({close:d,cancellable:e.toRef(s,"cancellable")}),(r,s)=>(e.openBlock(),e.createBlock(e.unref(o.Dialog),{ref_key:"$root",ref:n,open:!0,onClose:s[0]||(s[0]=e=>t.cancellable&&d())},{default:e.withCtx((()=>[e.renderSlot(r.$slots,"default",{close:d})])),_:3},512))}});F.__file="src/components/headless/modals/AGHeadlessModal.vue";var L=e.defineComponent({__name:"AGModalContext",props:{modal:_(),childIndex:h()},setup(t){const r=t;return e.provide("modal",{modal:e.toRef(r,"modal"),childIndex:e.toRef(r,"childIndex")}),(r,o)=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(t.modal.component),e.normalizeProps(e.guardReactiveProps(t.modal.properties)),null,16))}});L.__file="src/components/modals/AGModalContext.vue";var T=e.defineComponent({__name:"AGHeadlessModalPanel",setup(t){const r=f("modal","could not obtain modal reference from <AGHeadlessModalPanel>, did you render this component manually? Show it using $ui.openModal() instead"),s=e.computed((()=>O.modals[r.childIndex]??null));return(t,n)=>(e.openBlock(),e.createBlock(e.unref(o.DialogPanel),null,{default:e.withCtx((()=>[e.renderSlot(t.$slots,"default"),s.value?(e.openBlock(),e.createBlock(L,{key:0,"child-index":e.unref(r).childIndex+1,modal:s.value},null,8,["child-index","modal"])):e.createCommentVNode("v-if",!0)])),_:3}))}});T.__file="src/components/headless/modals/AGHeadlessModalPanel.vue";const R={class:"fixed inset-0 flex items-center justify-center"},z={class:"flex max-h-full flex-col overflow-auto p-4"};var U=e.defineComponent({__name:"AGModal",setup:t=>(t,r)=>(e.openBlock(),e.createBlock(F,{class:"relative z-50"},{default:e.withCtx((({close:r})=>[e.createElementVNode("div",R,[e.createVNode(T,{class:"flex max-h-full max-w-full flex-col overflow-hidden bg-white"},{default:e.withCtx((()=>[e.createElementVNode("div",z,[e.renderSlot(t.$slots,"default",{close:r})])])),_:2},1024)])])),_:3}))});function K(e){return t=n.marked(e,{mangle:!1,headerIds:!1}),i.default.sanitize(t,{ADD_ATTR:["target"]});var t}U.__file="src/components/modals/AGModal.vue";var W=e.defineComponent({__name:"AGMarkdown",props:{as:g("div"),langKey:g(),text:g(),inline:d(),raw:d()},setup(t){const r=t,o=e.computed((()=>r.text??(r.langKey&&E(r.langKey)))),s=e.computed((()=>{if(!o.value)return null;let e=K(o.value);return r.inline&&(e=e.replace("<p>","<span>").replace("</p>","</span>")),e})),n=()=>e.h(r.as,{class:r.raw?"":"prose",innerHTML:s.value});return(t,r)=>(e.openBlock(),e.createBlock(n))}});W.__file="src/components/basic/AGMarkdown.vue";var Q=e.defineComponent({__name:"AGAlertModal",props:{title:g(),message:x()},setup:t=>(r,o)=>(e.openBlock(),e.createBlock(U,null,{default:e.withCtx((()=>[t.title?(e.openBlock(),e.createBlock(W,{key:0,text:t.title,as:"h2",class:"font-semibold",raw:"",inline:""},null,8,["text"])):e.createCommentVNode("v-if",!0),e.createVNode(W,{text:t.message},null,8,["text"])])),_:1}))});Q.__file="src/components/modals/AGAlertModal.vue";var J=e.defineComponent({__name:"AGHeadlessButton",props:{url:g(),route:g(),routeParams:v((()=>({}))),routeQuery:v((()=>({}))),submit:d()},setup(r){const{url:o,route:s,routeParams:n,routeQuery:a,submit:l}=r,i=e.computed((()=>s?{tag:"router-link",props:{to:t.objectWithoutEmpty({name:s,params:n,query:a})}}:o?{tag:"a",props:{target:"_blank",href:o}}:{tag:"button",props:{type:l?"submit":"button"}}));return(t,r)=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(i.value.tag),e.normalizeProps(e.guardReactiveProps(i.value.props)),{default:e.withCtx((()=>[e.renderSlot(t.$slots,"default")])),_:3},16))}});J.__file="src/components/headless/forms/AGHeadlessButton.vue";var X=e.defineComponent({__name:"AGButton",props:{secondary:d()},setup:t=>(r,o)=>(e.openBlock(),e.createBlock(J,{class:e.normalizeClass(["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":!t.secondary,"bg-gray-600 hover:bg-gray-500 focus-visible:outline-gray-600":t.secondary}])},{default:e.withCtx((()=>[e.renderSlot(r.$slots,"default")])),_:3},8,["class"]))});X.__file="src/components/forms/AGButton.vue";const Y={class:"mt-2 flex flex-row-reverse gap-2"};var Z=e.defineComponent({__name:"AGConfirmModal",props:{title:g(),message:x()},setup:t=>(r,o)=>(e.openBlock(),e.createBlock(U,{cancellable:!1},{default:e.withCtx((({close:o})=>[t.title?(e.openBlock(),e.createBlock(W,{key:0,text:t.title,as:"h1"},null,8,["text"])):e.createCommentVNode("v-if",!0),e.createVNode(W,{text:t.message},null,8,["text"]),e.createElementVNode("div",Y,[e.createVNode(X,{onClick:e=>o(!0)},{default:e.withCtx((()=>[e.createTextVNode(e.toDisplayString(r.$td("ui.ok","OK")),1)])),_:2},1032,["onClick"]),e.createVNode(X,{secondary:"",onClick:e=>o()},{default:e.withCtx((()=>[e.createTextVNode(e.toDisplayString(r.$td("ui.cancel","Cancel")),1)])),_:2},1032,["onClick"])])])),_:1}))});Z.__file="src/components/modals/AGConfirmModal.vue";const ee={$ui:O};var te={async install(e,t){const r={[N.AlertModal]:Q,[N.ConfirmModal]:Z};Object.entries({...r,...t.components}).forEach((e=>{let[t,r]=e;return O.registerComponent(t,r)})),await M(e,ee)}};const re={key:0};var oe=e.defineComponent({__name:"AGAppOverlays",setup(t){const r=e.ref(null),o=e.ref(!0),s=e.computed((()=>O.modals[0]??null));return D("show-overlays-backdrop",(async()=>{r.value&&o.value&&(o.value=!1,r.value.classList.remove("opacity-0"))})),D("hide-overlays-backdrop",(async()=>{r.value&&!o.value&&(o.value=!0,r.value.classList.add("opacity-0"))})),(t,o)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("div",{ref_key:"$backdrop",ref:r,class:"pointer-events-none fixed inset-0 z-50 bg-black/30 opacity-0"},null,512),s.value?(e.openBlock(),e.createElementBlock("aside",re,[e.createVNode(L,{"child-index":1,modal:s.value},null,8,["modal"])])):e.createCommentVNode("v-if",!0)],64))}});oe.__file="src/components/AGAppOverlays.vue";const se={class:"flex h-full flex-col text-base font-normal leading-tight text-gray-900 antialiased"};var ne=e.defineComponent({__name:"AGAppLayout",setup:t=>(t,r)=>(e.openBlock(),e.createElementBlock("div",se,[e.renderSlot(t.$slots,"default"),e.createVNode(oe)]))});ne.__file="src/components/AGAppLayout.vue";const ae=["onSubmit"];var le=e.defineComponent({__name:"AGForm",props:{form:v()},emits:["submit"],setup(t,{emit:r}){const o=t;function s(){o.form&&!o.form.submit()||r("submit")}return e.provide("form",o.form),(t,r)=>(e.openBlock(),e.createElementBlock("form",{onSubmit:e.withModifiers(s,["prevent"])},[e.renderSlot(t.$slots,"default")],40,ae))}});le.__file="src/components/forms/AGForm.vue";var ie=e.defineComponent({__name:"AGHeadlessInput",props:{as:g(),name:g(),modelValue:g()},emits:["update:modelValue"],setup(r,{expose:o,emit:s}){const n=r,a=e.computed((()=>l&&n.name?l.errors[n.name]??null:null)),l=e.inject("form",null),i={id:`input-${t.uuid()}`,value:e.computed((()=>l&&n.name?l.getFieldValue(n.name):n.modelValue)),errors:e.readonly(a),update(e){l&&n.name?l.setFieldValue(n.name,e):s("update:modelValue",e)}};return e.provide("input",i),o(i),(t,o)=>r.as?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(r.as),{key:0},{default:e.withCtx((()=>[e.renderSlot(t.$slots,"default")])),_:3})):e.renderSlot(t.$slots,"default",{key:1})}});ie.__file="src/components/headless/forms/AGHeadlessInput.vue";const ue=["id","value","aria-invalid","aria-describedby"];var de=e.defineComponent({__name:"AGHeadlessInputInput",setup(t){const r=e.ref(),o=f("input","<AGHeadlessInputInput> must be a child of a <AGHeadlessInput>"),s=e.computed((()=>o.value));function n(){r.value&&o.update(r.value.value)}return(t,a)=>(e.openBlock(),e.createElementBlock("input",{id:e.unref(o).id,ref_key:"$input",ref:r,type:"text",value:s.value,"aria-invalid":e.unref(o).errors?"true":"false","aria-describedby":e.unref(o).errors?`${e.unref(o).id}-error`:void 0,onInput:n},null,40,ue))}});de.__file="src/components/headless/forms/AGHeadlessInputInput.vue";const ce=["id"];var pe=e.defineComponent({__name:"AGHeadlessInputError",setup(t){const r=f("input","<AGHeadlessInputError> must be a child of a <AGHeadlessInput>"),o=e.computed((()=>r.errors?$(`errors.${r.errors[0]}`,`Error: ${r.errors[0]}`):null));return(t,s)=>o.value?(e.openBlock(),e.createElementBlock("p",{key:0,id:`${e.unref(r).id}-error`},e.toDisplayString(o.value),9,ce)):e.createCommentVNode("v-if",!0)}});pe.__file="src/components/headless/forms/AGHeadlessInputError.vue";var me=e.defineComponent({inheritAttrs:!1,__name:"AGInput",props:{name:g()},setup(t){const r=c();return(o,s)=>(e.openBlock(),e.createBlock(ie,{ref_key:"$input",ref:r,as:"div",class:"flex flex-col items-center",name:t.name},{default:e.withCtx((()=>[e.createVNode(de,e.mergeProps(o.$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":e.unref(r)?.errors}]}),null,16,["class"]),e.createVNode(pe,{class:"mt-1 text-sm text-red-500"})])),_:1},8,["name"]))}});me.__file="src/components/forms/AGInput.vue";const fe=["for"];var ve=e.defineComponent({__name:"AGHeadlessInputLabel",setup(t){const r=f("input","<AGHeadlessInputLabel> must be a child of a <AGHeadlessInput>");return(t,o)=>(e.openBlock(),e.createElementBlock("label",{for:e.unref(r).id},[e.renderSlot(t.$slots,"default")],8,fe))}});ve.__file="src/components/headless/forms/AGHeadlessInputLabel.vue";var he=e.defineComponent({__name:"AGHeadlessModalTitle",props:{as:g("h2")},setup:t=>(r,s)=>(e.openBlock(),e.createBlock(e.unref(o.DialogTitle),{as:t.as},{default:e.withCtx((()=>[e.renderSlot(r.$slots,"default")])),_:3},8,["as"]))});he.__file="src/components/headless/modals/AGHeadlessModalTitle.vue";const _e={String:"string",Number:"number"};class xe extends t.MagicObject{constructor(t){super(),l.default(this,"errors",void 0),l.default(this,"_fields",void 0),l.default(this,"_data",void 0),l.default(this,"_valid",void 0),l.default(this,"_submitted",void 0),l.default(this,"_errors",void 0),this._fields=t,this._submitted=e.ref(!1),this._data=this.getInitialData(t),this._errors=this.getInitialErrors(t),this._valid=e.computed((()=>!Object.values(this._errors).some((e=>null!==e)))),this.errors=e.readonly(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,o]=t;return e[r]=this.getFieldErrors(r,o),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(t){if(this.static().isConjuring())return{};const r=Object.entries(t).reduce(((e,t)=>{let[r,o]=t;return e[r]=o.default??null,e}),{});return e.reactive(r)}getInitialErrors(t){if(this.static().isConjuring())return{};const r=Object.keys(t).reduce(((e,t)=>(e[t]=null,e)),{});return e.reactive(r)}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)}}exports.AGAlertModal=Q,exports.AGAppLayout=ne,exports.AGAppOverlays=oe,exports.AGButton=X,exports.AGConfirmModal=Z,exports.AGForm=le,exports.AGHeadlessButton=J,exports.AGHeadlessInput=ie,exports.AGHeadlessInputError=pe,exports.AGHeadlessInputInput=de,exports.AGHeadlessInputLabel=ve,exports.AGHeadlessModal=F,exports.AGHeadlessModalPanel=T,exports.AGHeadlessModalTitle=he,exports.AGInput=me,exports.AGMarkdown=W,exports.AGModal=U,exports.AGModalContext=L,exports.App=G,exports.AppService=w,exports.Events=j,exports.EventsService=S,exports.FormFieldTypes=_e,exports.Lang=q,exports.Service=A,exports.UI=O,exports.UIComponents=N,exports.arrayProp=function(e){return{type:Array,default:e??(()=>[])}},exports.booleanProp=d,exports.bootServices=M,exports.bootstrapApplication=async function(t){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const o=[y,H,I,te,...r.plugins??[]],s=e.createApp(t);await Promise.all(o.map((e=>e.install(s,r)))??[]),s.mount("#app")},exports.componentRef=c,exports.defineDirective=p,exports.definePlugin=u,exports.defineServiceState=k,exports.enumProp=function(e,t){const r=Object.values(e);return{type:String,default:t??r[0]??null,validator:e=>r.includes(e)}},exports.injectOrFail=function(r,o){return e.inject(r)??t.fail(o??`Could not resolve '${r}' injection key`)},exports.injectReactive=m,exports.injectReactiveOrFail=f,exports.mixedProp=function(e){return{type:e,default:null}},exports.numberInput=function(e){return{default:e,type:_e.Number}},exports.numberProp=function(){return{type:Number,default:arguments.length>0&&void 0!==arguments[0]?arguments[0]:null}},exports.objectProp=v,exports.onCleanMounted=function(r){let o=t.noop;e.onMounted((()=>o=r())),e.onUnmounted((()=>o()))},exports.requiredArrayProp=function(){return{type:Array,required:!0}},exports.requiredEnumProp=function(e){const t=Object.values(e);return{type:String,required:!0,validator:e=>t.includes(e)}},exports.requiredMixedProp=function(e){return{type:e,required:!0}},exports.requiredNumberInput=function(e){return{default:e,type:_e.Number,rules:"required"}},exports.requiredNumberProp=h,exports.requiredObjectProp=_,exports.requiredStringInput=function(e){return{default:e,type:_e.String,rules:"required"}},exports.requiredStringProp=x,exports.stringInput=function(e){return{default:e,type:_e.String}},exports.stringProp=g,exports.translate=E,exports.translateWithDefault=$,exports.useEvent=D,exports.useForm=function(e){return new xe(e)};
2
2
  //# sourceMappingURL=aerogel-core.cjs.js.map
@@ -1,8 +1,9 @@
1
1
  import { AllowedComponentProps } from 'vue';
2
- import type { App } from 'vue';
2
+ import type { App as App_2 } from 'vue';
3
3
  import type { Component } from 'vue';
4
4
  import { ComponentCustomProps } from 'vue';
5
5
  import { ComponentOptionsMixin } from 'vue';
6
+ import type { ComputedRef } from 'vue';
6
7
  import { Constructor } from '@noeldemartin/utils';
7
8
  import type { DeepReadonly } from 'vue';
8
9
  import { DefineComponent } from 'vue';
@@ -23,14 +24,102 @@ import type { UnwrapNestedRefs } from 'vue';
23
24
  import { VNode } from 'vue';
24
25
  import { VNodeProps } from 'vue';
25
26
 
27
+ declare interface AerogelOptions {
28
+ plugins?: Plugin_2[];
29
+ }
30
+
31
+ export declare const AGAlertModal: DefineComponent< {
32
+ title: {
33
+ type: PropType<string | null>;
34
+ validator?(value: unknown): boolean;
35
+ } & {
36
+ default: string | (() => string | null) | null;
37
+ };
38
+ message: {
39
+ type: PropType<string>;
40
+ validator?(value: unknown): boolean;
41
+ } & {
42
+ required: true;
43
+ };
44
+ }, (_ctx: any, _cache: any) => VNode<RendererNode, RendererElement, {
45
+ [key: string]: any;
46
+ }>, unknown, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, VNodeProps & AllowedComponentProps & ComponentCustomProps, Readonly<ExtractPropTypes< {
47
+ title: {
48
+ type: PropType<string | null>;
49
+ validator?(value: unknown): boolean;
50
+ } & {
51
+ default: string | (() => string | null) | null;
52
+ };
53
+ message: {
54
+ type: PropType<string>;
55
+ validator?(value: unknown): boolean;
56
+ } & {
57
+ required: true;
58
+ };
59
+ }>>, {
60
+ title: string | null;
61
+ }, {}>;
62
+
26
63
  export declare const AGAppLayout: DefineComponent< {}, (_ctx: any, _cache: any) => VNode<RendererNode, RendererElement, {
27
64
  [key: string]: any;
28
65
  }>, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, VNodeProps & AllowedComponentProps & ComponentCustomProps, Readonly<ExtractPropTypes< {}>>, {}, {}>;
29
66
 
30
- export declare const AGButton: DefineComponent< {}, (_ctx: any, _cache: any) => VNode<RendererNode, RendererElement, {
67
+ export declare const AGAppOverlays: DefineComponent< {}, (_ctx: any, _cache: any) => VNode<RendererNode, RendererElement, {
31
68
  [key: string]: any;
32
69
  }>, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, VNodeProps & AllowedComponentProps & ComponentCustomProps, Readonly<ExtractPropTypes< {}>>, {}, {}>;
33
70
 
71
+ export declare const AGButton: DefineComponent< {
72
+ secondary: {
73
+ type: PropType<boolean>;
74
+ validator?(value: unknown): boolean;
75
+ } & {
76
+ default: boolean | (() => boolean) | null;
77
+ };
78
+ }, (_ctx: any, _cache: any) => VNode<RendererNode, RendererElement, {
79
+ [key: string]: any;
80
+ }>, unknown, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, VNodeProps & AllowedComponentProps & ComponentCustomProps, Readonly<ExtractPropTypes< {
81
+ secondary: {
82
+ type: PropType<boolean>;
83
+ validator?(value: unknown): boolean;
84
+ } & {
85
+ default: boolean | (() => boolean) | null;
86
+ };
87
+ }>>, {
88
+ secondary: boolean;
89
+ }, {}>;
90
+
91
+ export declare const AGConfirmModal: DefineComponent< {
92
+ title: {
93
+ type: PropType<string | null>;
94
+ validator?(value: unknown): boolean;
95
+ } & {
96
+ default: string | (() => string | null) | null;
97
+ };
98
+ message: {
99
+ type: PropType<string>;
100
+ validator?(value: unknown): boolean;
101
+ } & {
102
+ required: true;
103
+ };
104
+ }, (_ctx: any, _cache: any) => VNode<RendererNode, RendererElement, {
105
+ [key: string]: any;
106
+ }>, unknown, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, VNodeProps & AllowedComponentProps & ComponentCustomProps, Readonly<ExtractPropTypes< {
107
+ title: {
108
+ type: PropType<string | null>;
109
+ validator?(value: unknown): boolean;
110
+ } & {
111
+ default: string | (() => string | null) | null;
112
+ };
113
+ message: {
114
+ type: PropType<string>;
115
+ validator?(value: unknown): boolean;
116
+ } & {
117
+ required: true;
118
+ };
119
+ }>>, {
120
+ title: string | null;
121
+ }, {}>;
122
+
34
123
  export declare const AGForm: DefineComponent< {
35
124
  form: {
36
125
  type: PropType<Form<FormFieldDefinitions> | null>;
@@ -173,6 +262,18 @@ name: string | null;
173
262
  modelValue: string | null;
174
263
  }, {}>;
175
264
 
265
+ export declare const AGHeadlessInputError: DefineComponent< {}, (_ctx: any, _cache: any) => VNode<RendererNode, RendererElement, {
266
+ [key: string]: any;
267
+ }>, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, VNodeProps & AllowedComponentProps & ComponentCustomProps, Readonly<ExtractPropTypes< {}>>, {}, {}>;
268
+
269
+ export declare const AGHeadlessInputInput: DefineComponent< {}, (_ctx: any, _cache: any) => VNode<RendererNode, RendererElement, {
270
+ [key: string]: any;
271
+ }>, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, VNodeProps & AllowedComponentProps & ComponentCustomProps, Readonly<ExtractPropTypes< {}>>, {}, {}>;
272
+
273
+ export declare const AGHeadlessInputLabel: DefineComponent< {}, (_ctx: any, _cache: any) => VNode<RendererNode, RendererElement, {
274
+ [key: string]: any;
275
+ }>, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, VNodeProps & AllowedComponentProps & ComponentCustomProps, Readonly<ExtractPropTypes< {}>>, {}, {}>;
276
+
176
277
  export declare const AGHeadlessModal: DefineComponent< {
177
278
  cancellable: {
178
279
  type: PropType<boolean>;
@@ -238,6 +339,12 @@ name: string | null;
238
339
  }, {}>;
239
340
 
240
341
  export declare const AGMarkdown: DefineComponent< {
342
+ as: {
343
+ type: PropType<string>;
344
+ validator?(value: unknown): boolean;
345
+ } & {
346
+ default: string | (() => string) | null;
347
+ };
241
348
  langKey: {
242
349
  type: PropType<string | null>;
243
350
  validator?(value: unknown): boolean;
@@ -250,9 +357,27 @@ validator?(value: unknown): boolean;
250
357
  } & {
251
358
  default: string | (() => string | null) | null;
252
359
  };
360
+ inline: {
361
+ type: PropType<boolean>;
362
+ validator?(value: unknown): boolean;
363
+ } & {
364
+ default: boolean | (() => boolean) | null;
365
+ };
366
+ raw: {
367
+ type: PropType<boolean>;
368
+ validator?(value: unknown): boolean;
369
+ } & {
370
+ default: boolean | (() => boolean) | null;
371
+ };
253
372
  }, (_ctx: any, _cache: any) => VNode<RendererNode, RendererElement, {
254
373
  [key: string]: any;
255
374
  }>, unknown, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, VNodeProps & AllowedComponentProps & ComponentCustomProps, Readonly<ExtractPropTypes< {
375
+ as: {
376
+ type: PropType<string>;
377
+ validator?(value: unknown): boolean;
378
+ } & {
379
+ default: string | (() => string) | null;
380
+ };
256
381
  langKey: {
257
382
  type: PropType<string | null>;
258
383
  validator?(value: unknown): boolean;
@@ -265,9 +390,24 @@ validator?(value: unknown): boolean;
265
390
  } & {
266
391
  default: string | (() => string | null) | null;
267
392
  };
393
+ inline: {
394
+ type: PropType<boolean>;
395
+ validator?(value: unknown): boolean;
396
+ } & {
397
+ default: boolean | (() => boolean) | null;
398
+ };
399
+ raw: {
400
+ type: PropType<boolean>;
401
+ validator?(value: unknown): boolean;
402
+ } & {
403
+ default: boolean | (() => boolean) | null;
404
+ };
268
405
  }>>, {
406
+ as: string;
269
407
  langKey: string | null;
270
408
  text: string | null;
409
+ inline: boolean;
410
+ raw: boolean;
271
411
  }, {}>;
272
412
 
273
413
  export declare const AGModal: DefineComponent< {}, (_ctx: any, _cache: any) => VNode<RendererNode, RendererElement, {
@@ -304,6 +444,11 @@ required: true;
304
444
  };
305
445
  }>>, {}, {}>;
306
446
 
447
+ export declare const App: Facade<AppService, Constructor<AppService>>;
448
+
449
+ export declare class AppService extends _default {
450
+ }
451
+
307
452
  export declare function arrayProp<T>(defaultValue?: () => T[]): OptionalProp<T[]>;
308
453
 
309
454
  declare type BaseProp<T> = {
@@ -313,37 +458,50 @@ declare type BaseProp<T> = {
313
458
 
314
459
  export declare function booleanProp(defaultValue?: boolean): OptionalProp<boolean>;
315
460
 
316
- export declare function bootServices(app: App, services: Record<string, Service>): Promise<void>;
461
+ export declare function bootServices(app: App_2, services: Record<string, Service>): Promise<void>;
317
462
 
318
- export declare function bootstrapApplication(rootComponent: Component, options?: BootstrapOptions): Promise<void>;
319
-
320
- declare interface BootstrapOptions {
321
- }
463
+ export declare function bootstrapApplication(rootComponent: Component, options?: AerogelOptions): Promise<void>;
322
464
 
323
465
  export declare function componentRef<T>(): Ref<UnwrapNestedRefs<T> | undefined>;
324
466
 
325
- declare const _default: Constructor<State> & Constructor<Service<DefaultServiceState>> & Service;
467
+ export declare type ComputedStateDefinition<TState extends ServiceState, TComputedState extends ServiceState> = {
468
+ [K in keyof TComputedState]: (state: TState) => TComputedState[K];
469
+ };
470
+
471
+ declare const _default: Constructor< {
472
+ environment: "production" | "development" | "testing";
473
+ }> & Constructor< {
474
+ isDevelopment: boolean;
475
+ }> & Constructor<Service<DefaultServiceState, {}>> & Service;
476
+
477
+ declare const _default_2: Constructor< {
478
+ modals: Modal<unknown>[];
479
+ }> & Constructor< {}> & Constructor<Service<DefaultServiceState, {}>> & Service;
326
480
 
327
481
  export declare type DefaultServices = typeof defaultServices;
328
482
 
329
483
  declare const defaultServices: {
330
- $events: Facade<EventsService>;
484
+ $app: Facade<AppService, Constructor<AppService>>;
485
+ $events: Facade<EventsService, Constructor<EventsService>>;
331
486
  };
332
487
 
333
488
  export declare type DefaultServiceState = {};
334
489
 
335
490
  export declare function defineDirective(directive: Directive): Directive;
336
491
 
337
- export declare function defineServiceState<State extends ServiceState>(options: {
492
+ export declare function definePlugin<T extends Plugin_2>(plugin: T): T;
493
+
494
+ export declare function defineServiceState<State extends ServiceState = ServiceState, ComputedState extends ServiceState = {}>(options: {
338
495
  initialState: State;
339
- }): Constructor<State> & ServiceConstructor;
496
+ computed?: ComputedStateDefinition<State, ComputedState>;
497
+ }): Constructor<State> & Constructor<ComputedState> & ServiceConstructor;
340
498
 
341
499
  export declare function enumProp<Enum extends Record<string, unknown>>(enumeration: Enum, defaultValue?: Enum[keyof Enum]): OptionalProp<Enum[keyof Enum]>;
342
500
 
343
501
  declare type EventListener_2<T = unknown> = (payload: T) => unknown;
344
502
  export { EventListener_2 as EventListener }
345
503
 
346
- export declare const Events: Facade<EventsService>;
504
+ export declare const Events: Facade<EventsService, Constructor<EventsService>>;
347
505
 
348
506
  export declare interface EventsPayload {
349
507
  }
@@ -383,16 +541,19 @@ declare class Form<Fields extends FormFieldDefinitions = FormFieldDefinitions> e
383
541
  setFieldValue<T extends keyof Fields>(field: T, value: FormData_2<Fields>[T]): void;
384
542
  getFieldValue<T extends keyof Fields>(field: T): GetFormFieldValue<Fields[T]['type']>;
385
543
  validate(): boolean;
544
+ reset(): void;
386
545
  submit(): boolean;
387
546
  protected __get(property: string): unknown;
388
547
  protected __set(property: string, value: unknown): void;
389
548
  private getFieldErrors;
390
549
  private getInitialData;
391
550
  private getInitialErrors;
551
+ private resetData;
552
+ private resetErrors;
392
553
  }
393
554
 
394
555
  declare type FormData_2<T> = {
395
- [k in keyof T]: T[k] extends FormFieldDefinition<infer TType, infer TRules> ? TRules extends 'required' ? GetFormFieldValue<TType> : GetFormFieldValue<TType> | null : never;
556
+ -readonly [k in keyof T]: T[k] extends FormFieldDefinition<infer TType, infer TRules> ? TRules extends 'required' ? GetFormFieldValue<TType> : GetFormFieldValue<TType> | null : never;
396
557
  };
397
558
  export { FormData_2 as FormData }
398
559
 
@@ -417,6 +578,13 @@ export declare const FormFieldTypes: {
417
578
 
418
579
  export declare type GetFormFieldValue<TType> = TType extends typeof FormFieldTypes.String ? string : TType extends typeof FormFieldTypes.Number ? number : never;
419
580
 
581
+ export declare interface IAGHeadlessInput {
582
+ id: string;
583
+ value: ComputedRef<string | number | null>;
584
+ errors: DeepReadonly<Ref<string[] | null>>;
585
+ update(value: string | number | null): void;
586
+ }
587
+
420
588
  export declare interface IAGHeadlessModal extends IAGModal {
421
589
  }
422
590
 
@@ -431,26 +599,23 @@ export declare function injectReactive<T extends object>(key: InjectionKey<T> |
431
599
 
432
600
  export declare function injectReactiveOrFail<T extends object>(key: InjectionKey<T> | string, errorMessage?: string): UnwrapNestedRefs<T>;
433
601
 
434
- export declare const Lang: Facade<LangService>;
602
+ export declare const Lang: Facade<LangService, Constructor<LangService>>;
435
603
 
436
- export declare function lang(key: string, parameters?: Record<string, unknown>): string;
437
-
438
- export declare interface LangOptions {
439
- messages: Record<string, unknown>;
440
- defaultLocale?: string;
441
- fallbackLocale?: string;
604
+ export declare interface LangProvider {
605
+ translate(key: string, parameters?: Record<string, unknown>): string;
442
606
  }
443
607
 
444
608
  declare class LangService extends Service {
445
- private i18n?;
446
- setup(): void;
609
+ private provider;
610
+ constructor();
611
+ setProvider(provider: LangProvider): void;
447
612
  translate(key: string, parameters?: Record<string, unknown>): string;
613
+ translateWithDefault(key: string, defaultMessage: string): string;
614
+ translateWithDefault(key: string, parameters: Record<string, unknown>, defaultMessage: string): string;
448
615
  }
449
616
 
450
617
  export declare type LangServices = typeof services;
451
618
 
452
- export declare type LazyMessages = () => Promise<Record<string, unknown>>;
453
-
454
619
  export declare function mixedProp<T>(type: PropType<T>): OptionalProp<T | null>;
455
620
 
456
621
  declare interface Modal<T = unknown> {
@@ -478,10 +643,17 @@ export declare function objectProp<T = Object>(): OptionalProp<T | null>;
478
643
 
479
644
  export declare function objectProp<T>(defaultValue: () => T): OptionalProp<T>;
480
645
 
646
+ export declare function onCleanMounted(operation: () => Function): void;
647
+
481
648
  declare type OptionalProp<T> = BaseProp<T> & {
482
649
  default: T | (() => T) | null;
483
650
  };
484
651
 
652
+ declare interface Plugin_2 {
653
+ install(app: App_2, options: AerogelOptions): void | Promise<void>;
654
+ }
655
+ export { Plugin_2 as Plugin }
656
+
485
657
  export declare function requiredArrayProp<T>(): RequiredProp<T[]>;
486
658
 
487
659
  export declare function requiredEnumProp<Enum extends Record<string, unknown>>(enumeration: Enum): RequiredProp<Enum[keyof Enum]>;
@@ -502,20 +674,24 @@ export declare function requiredStringInput(defaultValue?: string): FormFieldDef
502
674
 
503
675
  export declare function requiredStringProp(): RequiredProp<string>;
504
676
 
505
- export declare class Service<State extends ServiceState = DefaultServiceState> extends MagicObject {
677
+ export declare class Service<State extends ServiceState = DefaultServiceState, ComputedState extends ServiceState = {}> extends MagicObject {
506
678
  protected _namespace: string;
507
679
  private _booted;
508
680
  private _state;
681
+ private _computedState;
509
682
  constructor();
510
683
  get booted(): PromisedValue<void>;
511
684
  launch(namespace?: string): Promise<void>;
512
685
  protected __get(property: string): unknown;
513
686
  protected __set(property: string, value: unknown): void;
514
687
  protected hasState<P extends keyof State>(property: P): boolean;
688
+ protected hasComputedState<P extends keyof State>(property: P): boolean;
515
689
  protected getState(): State;
516
690
  protected getState<P extends keyof State>(property: P): State[P];
691
+ protected getComputedState<P extends keyof ComputedState>(property: P): ComputedState[P];
517
692
  protected setState(state: Partial<State>): void;
518
693
  protected getInitialState(): State;
694
+ protected getComputedStateDefinition(): ComputedStateDefinition<State, ComputedState>;
519
695
  protected boot(): Promise<void>;
520
696
  }
521
697
 
@@ -525,37 +701,44 @@ export declare interface Services extends DefaultServices {
525
701
  }
526
702
 
527
703
  declare const services: {
528
- $lang: Facade<LangService>;
704
+ $lang: Facade<LangService, Constructor<LangService>>;
529
705
  };
530
706
 
531
707
  declare const services_2: {
532
- $ui: Facade<UIService>;
708
+ $ui: Facade<UIService, Constructor<UIService>>;
533
709
  };
534
710
 
535
711
  export declare type ServiceState = Record<string, any>;
536
712
 
537
- declare interface State {
538
- modals: Modal[];
539
- }
540
-
541
713
  export declare function stringInput(defaultValue?: string): FormFieldDefinition<typeof FormFieldTypes.String>;
542
714
 
543
715
  export declare function stringProp(): OptionalProp<string | null>;
544
716
 
545
717
  export declare function stringProp(defaultValue: string): OptionalProp<string>;
546
718
 
547
- export declare const UI: Facade<UIService>;
719
+ export declare const translate: (key: string, parameters?: Record<string, unknown> | undefined) => string;
720
+
721
+ export declare const translateWithDefault: {
722
+ (key: string, defaultMessage: string): string;
723
+ (key: string, parameters: Record<string, unknown>, defaultMessage: string): string;
724
+ };
725
+
726
+ export declare const UI: Facade<UIService, Constructor<UIService>>;
548
727
 
549
728
  export declare type UIComponent = ObjectValues<typeof UIComponents>;
550
729
 
551
730
  export declare const UIComponents: {
552
731
  readonly AlertModal: "alert-modal";
732
+ readonly ConfirmModal: "confirm-modal";
553
733
  };
554
734
 
555
- declare class UIService extends _default {
735
+ declare class UIService extends _default_2 {
556
736
  private modalCallbacks;
557
737
  private components;
558
738
  alert(message: string): void;
739
+ alert(title: string, message: string): void;
740
+ confirm(message: string): Promise<boolean>;
741
+ confirm(title: string, message: string): Promise<boolean>;
559
742
  registerComponent(name: UIComponent, component: Component): void;
560
743
  openModal<TModalComponent extends ModalComponent>(component: TModalComponent, properties?: ModalProperties<TModalComponent>): Promise<Modal<ModalResult<TModalComponent>>>;
561
744
  closeModal(id: string, result?: unknown): Promise<void>;
@@ -568,27 +751,28 @@ export declare type UIServices = typeof services_2;
568
751
 
569
752
  export declare type UnknownEvent<T> = T extends keyof EventsPayload ? never : T;
570
753
 
754
+ export declare function useEvent<Event extends EventWithoutPayload>(event: Event, listener: () => unknown): void;
755
+
756
+ export declare function useEvent<Event extends EventWithPayload>(event: Event, listener: EventListener_2<EventsPayload[Event]>): void;
757
+
758
+ export declare function useEvent<Event extends string>(event: UnknownEvent<Event>, listener: EventListener_2): void;
759
+
571
760
  export declare function useForm<const T extends FormFieldDefinitions>(fields: T): Form<T> & FormData_2<T>;
572
761
 
573
762
  export { }
574
763
 
575
- interface BootstrapOptions {
576
- lang?: LangOptions;
577
- langMessages?: Record<string, unknown>;
578
- }
764
+ declare global {
765
+ export const __AG_BASE_PATH: string | undefined;
766
+ export const __AG_ENV: 'production' | 'development' | 'testing';
767
+ }
579
768
 
580
769
  interface Services extends LangServices {}
581
770
 
582
- interface BootstrapOptions {
583
- models?: Record<string, Record<string, unknown>>;
584
- }
585
-
586
- interface BootstrapOptions {
587
- routes?: RouteRecordRaw[];
588
- basePath?: string;
771
+ declare module '@vue/runtime-core' {
772
+ interface ComponentCustomProperties {
773
+ $td: typeof translateWithDefault;
589
774
  }
590
-
591
- import type { RouteRecordRaw } from 'vue-router';
775
+ }
592
776
 
593
777
  declare module '@vue/runtime-core' {
594
778
  interface ComponentCustomProperties extends Services {}
@@ -602,7 +786,7 @@ declare module '@vue/runtime-core' {
602
786
  'show-modal': { id: string };
603
787
  }
604
788
 
605
- interface BootstrapOptions {
789
+ interface AerogelOptions {
606
790
  components?: Partial<Record<UIComponent, Component>>;
607
791
  }
608
792