@aerogel/core 0.0.0-next.d34923f3b144e8f6720e6a9cdadb2cd4fb4ab289 → 0.0.0-next.d7394c3aa6aac799b0971e63819a8713d05a5123
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/aerogel-core.cjs.js +1 -1
- package/dist/aerogel-core.cjs.js.map +1 -1
- package/dist/aerogel-core.d.ts +67 -10
- package/dist/aerogel-core.esm.js +1 -1
- package/dist/aerogel-core.esm.js.map +1 -1
- package/package.json +1 -1
- package/src/bootstrap/bootstrap.test.ts +0 -1
- package/src/components/composition.ts +23 -0
- package/src/components/headless/forms/AGHeadlessButton.ts +3 -0
- package/src/components/headless/forms/AGHeadlessButton.vue +7 -1
- package/src/components/headless/forms/AGHeadlessInput.ts +1 -0
- package/src/components/headless/forms/AGHeadlessInput.vue +10 -4
- package/src/components/headless/forms/AGHeadlessInputInput.vue +3 -2
- package/src/components/headless/forms/AGHeadlessInputTextArea.vue +3 -2
- package/src/components/headless/forms/index.ts +1 -0
- package/src/components/index.ts +1 -0
- package/src/components/interfaces.ts +17 -2
- package/src/components/lib/AGMeasured.vue +1 -0
- package/src/directives/measure.ts +24 -5
- package/src/forms/Form.test.ts +28 -0
- package/src/forms/Form.ts +15 -4
- package/src/lang/DefaultLangProvider.ts +43 -0
- package/src/lang/Lang.state.ts +11 -0
- package/src/lang/Lang.ts +36 -17
- package/src/services/Service.ts +10 -2
- package/src/testing/setup.ts +25 -0
- package/src/ui/UI.state.ts +7 -0
- package/src/ui/UI.ts +16 -4
- package/src/ui/index.ts +1 -0
- package/src/ui/utils.ts +16 -0
- package/src/utils/vue.ts +4 -2
- package/vite.config.ts +4 -1
package/dist/aerogel-core.d.ts
CHANGED
|
@@ -32,7 +32,7 @@ import type { UnwrapNestedRefs } from 'vue';
|
|
|
32
32
|
import { VNode } from 'vue';
|
|
33
33
|
import type { Writable } from '@noeldemartin/utils';
|
|
34
34
|
|
|
35
|
-
export declare interface
|
|
35
|
+
export declare interface __SetsElement {
|
|
36
36
|
__setElement(element?: HTMLElement): void;
|
|
37
37
|
}
|
|
38
38
|
|
|
@@ -1304,7 +1304,7 @@ export declare const alertModalProps: {
|
|
|
1304
1304
|
|
|
1305
1305
|
export declare const App: Facade<AppService, AppService>;
|
|
1306
1306
|
|
|
1307
|
-
export declare class AppService extends
|
|
1307
|
+
export declare class AppService extends _default_3 {
|
|
1308
1308
|
readonly name: string;
|
|
1309
1309
|
readonly ready: PromisedValue<void>;
|
|
1310
1310
|
readonly mounted: PromisedValue<void>;
|
|
@@ -1433,6 +1433,20 @@ startupErrors: ErrorReport[];
|
|
|
1433
1433
|
}>>>>;
|
|
1434
1434
|
|
|
1435
1435
|
declare const _default_2: Constructor<UnrefServiceState< {
|
|
1436
|
+
locale: string | null;
|
|
1437
|
+
locales: string[];
|
|
1438
|
+
fallbackLocale: string;
|
|
1439
|
+
}>> & Constructor< {}> & Constructor<Service<UnrefServiceState< {
|
|
1440
|
+
locale: string | null;
|
|
1441
|
+
locales: string[];
|
|
1442
|
+
fallbackLocale: string;
|
|
1443
|
+
}>, {}, Partial<UnrefServiceState< {
|
|
1444
|
+
locale: string | null;
|
|
1445
|
+
locales: string[];
|
|
1446
|
+
fallbackLocale: string;
|
|
1447
|
+
}>>>>;
|
|
1448
|
+
|
|
1449
|
+
declare const _default_3: Constructor<UnrefServiceState< {
|
|
1436
1450
|
plugins: Record<string, Plugin_2>;
|
|
1437
1451
|
environment: string;
|
|
1438
1452
|
version: string;
|
|
@@ -1459,15 +1473,24 @@ version: string;
|
|
|
1459
1473
|
sourceUrl: string | undefined;
|
|
1460
1474
|
}>>>>;
|
|
1461
1475
|
|
|
1462
|
-
declare const
|
|
1476
|
+
declare const _default_4: Constructor<UnrefServiceState< {
|
|
1463
1477
|
modals: Modal<unknown>[];
|
|
1464
1478
|
snackbars: Snackbar[];
|
|
1465
|
-
|
|
1479
|
+
layout: Layout;
|
|
1480
|
+
}>> & Constructor< {
|
|
1481
|
+
mobile: boolean;
|
|
1482
|
+
desktop: boolean;
|
|
1483
|
+
}> & Constructor<Service<UnrefServiceState< {
|
|
1466
1484
|
modals: Modal<unknown>[];
|
|
1467
1485
|
snackbars: Snackbar[];
|
|
1468
|
-
|
|
1486
|
+
layout: Layout;
|
|
1487
|
+
}>, {
|
|
1488
|
+
mobile: boolean;
|
|
1489
|
+
desktop: boolean;
|
|
1490
|
+
}, Partial<UnrefServiceState< {
|
|
1469
1491
|
modals: Modal<unknown>[];
|
|
1470
1492
|
snackbars: Snackbar[];
|
|
1493
|
+
layout: Layout;
|
|
1471
1494
|
}>>>>;
|
|
1472
1495
|
|
|
1473
1496
|
export declare type DefaultServices = typeof defaultServices;
|
|
@@ -1495,6 +1518,8 @@ export declare function defineServiceStore<Id extends string, S extends StateTre
|
|
|
1495
1518
|
|
|
1496
1519
|
export declare function dispatch(job: Job): Promise<void>;
|
|
1497
1520
|
|
|
1521
|
+
export declare function elementRef(): Ref<HTMLElement | undefined>;
|
|
1522
|
+
|
|
1498
1523
|
export declare interface ElementSize {
|
|
1499
1524
|
width: number;
|
|
1500
1525
|
height: number;
|
|
@@ -1616,6 +1641,7 @@ export declare class Form<Fields extends FormFieldDefinitions = FormFieldDefinit
|
|
|
1616
1641
|
get submitted(): boolean;
|
|
1617
1642
|
setFieldValue<T extends keyof Fields>(field: T, value: FormData_2<Fields>[T]): void;
|
|
1618
1643
|
getFieldValue<T extends keyof Fields>(field: T): GetFormFieldValue<Fields[T]['type']>;
|
|
1644
|
+
getFieldRules<T extends keyof Fields>(field: T): string[];
|
|
1619
1645
|
data(): FormData_2<Fields>;
|
|
1620
1646
|
validate(): boolean;
|
|
1621
1647
|
reset(options?: {
|
|
@@ -1648,6 +1674,7 @@ export declare type FormErrors<T> = {
|
|
|
1648
1674
|
|
|
1649
1675
|
export declare interface FormFieldDefinition<TType extends FormFieldType = FormFieldType, TRules extends string = string> {
|
|
1650
1676
|
type: TType;
|
|
1677
|
+
trim?: boolean;
|
|
1651
1678
|
default?: GetFormFieldValue<TType>;
|
|
1652
1679
|
rules?: TRules;
|
|
1653
1680
|
}
|
|
@@ -1666,6 +1693,10 @@ export declare const FormFieldTypes: {
|
|
|
1666
1693
|
|
|
1667
1694
|
export declare type FormFieldValue = GetFormFieldValue<FormFieldType>;
|
|
1668
1695
|
|
|
1696
|
+
export declare function getCurrentLayout(): Layout;
|
|
1697
|
+
|
|
1698
|
+
export declare function getElement(value: unknown): HTMLElement | undefined;
|
|
1699
|
+
|
|
1669
1700
|
export declare function getErrorMessage(error: ErrorSource): string;
|
|
1670
1701
|
|
|
1671
1702
|
export declare type GetFormFieldValue<TType> = TType extends typeof FormFieldTypes.String ? string : TType extends typeof FormFieldTypes.Number ? number : TType extends typeof FormFieldTypes.Boolean ? boolean : TType extends typeof FormFieldTypes.Object ? object : TType extends typeof FormFieldTypes.Date ? Date : never;
|
|
@@ -1676,6 +1707,8 @@ export declare interface HasElement {
|
|
|
1676
1707
|
$el: Readonly<Ref<HTMLElement | undefined>>;
|
|
1677
1708
|
}
|
|
1678
1709
|
|
|
1710
|
+
export declare function hasElement(value: unknown): value is UnwrapNestedRefs<HasElement>;
|
|
1711
|
+
|
|
1679
1712
|
export declare interface IAGErrorReportModalButtonsDefaultSlotProps {
|
|
1680
1713
|
id: string;
|
|
1681
1714
|
description: string;
|
|
@@ -1684,12 +1717,16 @@ export declare interface IAGErrorReportModalButtonsDefaultSlotProps {
|
|
|
1684
1717
|
handler?(): void;
|
|
1685
1718
|
}
|
|
1686
1719
|
|
|
1720
|
+
export declare interface IAGHeadlessButton extends HasElement {
|
|
1721
|
+
}
|
|
1722
|
+
|
|
1687
1723
|
export declare interface IAGHeadlessInput extends HasElement {
|
|
1688
1724
|
id: string;
|
|
1689
1725
|
name: ComputedRef<string | null>;
|
|
1690
1726
|
label: ComputedRef<string | null>;
|
|
1691
1727
|
description: ComputedRef<string | boolean | null>;
|
|
1692
1728
|
value: ComputedRef<FormFieldValue | null>;
|
|
1729
|
+
required: ComputedRef<boolean | null>;
|
|
1693
1730
|
errors: DeepReadonly<Ref<string[] | null>>;
|
|
1694
1731
|
update(value: FormFieldValue | null): void;
|
|
1695
1732
|
}
|
|
@@ -1774,20 +1811,34 @@ export declare abstract class Job {
|
|
|
1774
1811
|
export declare const Lang: Facade<LangService, LangService>;
|
|
1775
1812
|
|
|
1776
1813
|
export declare interface LangProvider {
|
|
1814
|
+
getLocale(): string;
|
|
1815
|
+
setLocale(locale: string): Promise<void>;
|
|
1816
|
+
getFallbackLocale(): string;
|
|
1817
|
+
setFallbackLocale(fallbackLocale: string): Promise<void>;
|
|
1818
|
+
getLocales(): string[];
|
|
1777
1819
|
translate(key: string, parameters?: Record<string, unknown> | number): string;
|
|
1778
1820
|
translateWithDefault(key: string, defaultMessage: string, parameters?: Record<string, unknown> | number): string;
|
|
1779
1821
|
}
|
|
1780
1822
|
|
|
1781
|
-
declare class LangService extends
|
|
1823
|
+
declare class LangService extends _default_2 {
|
|
1782
1824
|
private provider;
|
|
1783
1825
|
constructor();
|
|
1784
|
-
setProvider(provider: LangProvider): void
|
|
1826
|
+
setProvider(provider: LangProvider): Promise<void>;
|
|
1785
1827
|
translate(key: string, parameters?: Record<string, unknown> | number): string;
|
|
1786
1828
|
translateWithDefault(key: string, defaultMessage: string, parameters?: Record<string, unknown> | number): string;
|
|
1829
|
+
getBrowserLocale(): string;
|
|
1830
|
+
protected boot(): Promise<void>;
|
|
1787
1831
|
}
|
|
1788
1832
|
|
|
1789
1833
|
export declare type LangServices = typeof services_2;
|
|
1790
1834
|
|
|
1835
|
+
export declare type Layout = (typeof Layouts)[keyof typeof Layouts];
|
|
1836
|
+
|
|
1837
|
+
export declare const Layouts: {
|
|
1838
|
+
readonly Mobile: "mobile";
|
|
1839
|
+
readonly Desktop: "desktop";
|
|
1840
|
+
};
|
|
1841
|
+
|
|
1791
1842
|
export declare const loadingModalProps: {
|
|
1792
1843
|
message: {
|
|
1793
1844
|
type?: PropType<string | null> | undefined;
|
|
@@ -1801,6 +1852,10 @@ export declare type MeasureDirectiveListener = (size: ElementSize) => unknown;
|
|
|
1801
1852
|
|
|
1802
1853
|
export declare function mixedProp<T>(type?: PropType<T>): OptionalProp<T | null>;
|
|
1803
1854
|
|
|
1855
|
+
export declare function mixedProp<T>(type: PropType<T>, defaultValue: T): OptionalProp<T>;
|
|
1856
|
+
|
|
1857
|
+
export declare const MOBILE_BREAKPOINT = 768;
|
|
1858
|
+
|
|
1804
1859
|
declare interface Modal<T = unknown> {
|
|
1805
1860
|
id: string;
|
|
1806
1861
|
properties: Record<string, unknown>;
|
|
@@ -2014,6 +2069,7 @@ export declare class Service<State extends ServiceState = DefaultServiceState, C
|
|
|
2014
2069
|
protected frameworkBoot(): Promise<void>;
|
|
2015
2070
|
protected boot(): Promise<void>;
|
|
2016
2071
|
protected initializePersistedState(): void;
|
|
2072
|
+
protected requireStore(): Store<string, State, ComputedState, {}>;
|
|
2017
2073
|
}
|
|
2018
2074
|
|
|
2019
2075
|
export declare type ServiceConstructor<T extends Service = Service> = Constructor<T> & typeof Service;
|
|
@@ -2115,7 +2171,7 @@ export declare const UIComponents: {
|
|
|
2115
2171
|
readonly StartupCrash: "startup-crash";
|
|
2116
2172
|
};
|
|
2117
2173
|
|
|
2118
|
-
export declare class UIService extends
|
|
2174
|
+
export declare class UIService extends _default_4 {
|
|
2119
2175
|
private modalCallbacks;
|
|
2120
2176
|
private components;
|
|
2121
2177
|
requireComponent(name: UIComponent): Component;
|
|
@@ -2125,8 +2181,8 @@ export declare class UIService extends _default_3 {
|
|
|
2125
2181
|
confirm(title: string, message: string, options?: ConfirmOptions): Promise<boolean>;
|
|
2126
2182
|
prompt(message: string, options?: PromptOptions): Promise<string | null>;
|
|
2127
2183
|
prompt(title: string, message: string, options?: PromptOptions): Promise<string | null>;
|
|
2128
|
-
loading<T>(operation: Promise<T>): Promise<T>;
|
|
2129
|
-
loading<T>(message: string, operation: Promise<T>): Promise<T>;
|
|
2184
|
+
loading<T>(operation: Promise<T> | (() => T)): Promise<T>;
|
|
2185
|
+
loading<T>(message: string, operation: Promise<T> | (() => T)): Promise<T>;
|
|
2130
2186
|
showSnackbar(message: string, options?: ShowSnackbarOptions): void;
|
|
2131
2187
|
hideSnackbar(id: string): void;
|
|
2132
2188
|
registerComponent(name: UIComponent, component: Component): void;
|
|
@@ -2135,6 +2191,7 @@ export declare class UIService extends _default_3 {
|
|
|
2135
2191
|
protected boot(): Promise<void>;
|
|
2136
2192
|
private watchModalEvents;
|
|
2137
2193
|
private watchMountedEvent;
|
|
2194
|
+
private watchWindowMedia;
|
|
2138
2195
|
}
|
|
2139
2196
|
|
|
2140
2197
|
export declare type UIServices = typeof services_3;
|
package/dist/aerogel-core.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
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};
|
|
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 b,normalizeProps as _,guardReactiveProps as y,createElementBlock as x,Fragment as w,createVNode as A,createCommentVNode as k,createElementVNode as S,h as G,mergeProps as C,customRef as $,normalizeClass as j,createTextVNode as M,toDisplayString as E,renderList as H,watchEffect as L,withModifiers as T,readonly as I,useSlots as R,createApp as P,resolveDirective as D,withDirectives as B}from"vue";import"core-js/modules/esnext.async-iterator.reduce.js";import"core-js/modules/esnext.iterator.constructor.js";import"core-js/modules/esnext.iterator.reduce.js";import"core-js/modules/esnext.async-iterator.map.js";import"core-js/modules/esnext.iterator.map.js";import O from"@babel/runtime/helpers/esm/defineProperty";import q from"virtual:aerogel";import{JSError as V,tap as z,MagicObject as F,PromisedValue as U,Storage as N,objectOnly as W,isEmpty as K,objectDeepClone as Q,fail as Z,facade as Y,arrayRemove as J,updateLocationQueryParameters as X,forever as ee,after as te,uuid as se,isObject as re,objectWithoutEmpty as oe,toString as ne,objectWithout as ae,noop as le,stringExcerpt as ie}from"@noeldemartin/utils";import"core-js/modules/esnext.async-iterator.for-each.js";import"core-js/modules/esnext.iterator.for-each.js";import"core-js/modules/esnext.set.add-all.js";import"core-js/modules/esnext.set.delete-all.js";import"core-js/modules/esnext.set.difference.js";import"core-js/modules/esnext.set.every.js";import"core-js/modules/esnext.set.filter.js";import"core-js/modules/esnext.set.find.js";import"core-js/modules/esnext.set.intersection.js";import"core-js/modules/esnext.set.is-disjoint-from.js";import"core-js/modules/esnext.set.is-subset-of.js";import"core-js/modules/esnext.set.is-superset-of.js";import"core-js/modules/esnext.set.join.js";import"core-js/modules/esnext.set.map.js";import"core-js/modules/esnext.set.reduce.js";import"core-js/modules/esnext.set.some.js";import"core-js/modules/esnext.set.symmetric-difference.js";import"core-js/modules/esnext.set.union.js";import{createPinia as ce,setActivePinia as ue,defineStore as de}from"pinia";import"core-js/modules/esnext.weak-map.delete-all.js";import"core-js/modules/esnext.weak-map.emplace.js";import"core-js/modules/esnext.async-iterator.filter.js";import"core-js/modules/esnext.iterator.filter.js";import"core-js/modules/esnext.string.at.js";import"core-js/modules/esnext.async-iterator.find.js";import"core-js/modules/esnext.iterator.find.js";import"core-js/modules/esnext.async-iterator.some.js";import"core-js/modules/esnext.iterator.some.js";import{Dialog as pe,DialogPanel as me,DialogTitle as fe,Listbox as he,ListboxButton as ve,ListboxLabel as ge,ListboxOption as be,ListboxOptions as _e}from"@headlessui/vue";export{ListboxOptions as AGHeadlessSelectOptions}from"@headlessui/vue";import ye from"dompurify";import{marked as xe,Renderer as we}from"marked";class ServiceBootError extends V{constructor(e,t){super(`Service '${e}' failed booting`,{cause:t})}}let Ae=null;function ke(){return Ae??Se()}function Se(){return z(ce(),(e=>{Ae=e,ue(e)}))}function Ge(){return Ae??ke()}function Ce(e,t){return ke(),de(e,t)()}function $e(e){var t;return O(t=class extends je{usesStore(){return!0}getName(){return e.name??null}getInitialState(){return"function"==typeof e.initialState?e.initialState():Object.entries(e.initialState).reduce(((e,t)=>{let[s,r]=t;try{r=structuredClone(r)}catch(e){console.warn(`Could not clone '${s}' state from ${this.getName()} service, this may cause problems if you're using multiple instances of the service (for example, in unit tests).\nTo fix this problem, declare your initialState as a function instead.`)}return e[s]=r,e}),{})}getComputedStateDefinition(){return e.computed??{}}serializePersistedState(t){return e.serialize?.(t)??t}},"persist",e.persist??[]),t}class je extends F{constructor(){super(),O(this,"_name",void 0),O(this,"_booted",void 0),O(this,"_computedStateKeys",void 0),O(this,"_store",void 0);const e=this.getComputedStateDefinition();this._name=this.getName()??new.target.name,this._booted=new U,this._computedStateKeys=new Set(Object.keys(e)),this._store=this.usesStore()&&Ce(this._name,{state:()=>this.getInitialState(),getters:e})}get booted(){return this._booted}launch(){const handleError=e=>this._booted.reject(new ServiceBootError(this._name,e));try{this.frameworkBoot().then((()=>this.boot())).then((()=>this._booted.resolve())).catch(handleError)}catch(e){handleError(e)}return this._booted}hasPersistedState(){return N.has(this._name)}hasState(e){return!!this._store&&(e in this._store.$state||this._computedStateKeys.has(e))}getState(e){const t=this._store;return e?t?t[e]:void 0:t||{}}setState(e,t){if(!this._store)return;const s="string"==typeof e?{[e]:t}:e;Object.assign(this._store.$state,s),this.onStateUpdated(s)}__get(e){return this.hasState(e)?this.getState(e):super.__get(e)}__set(e,t){this.setState({[e]:t})}onStateUpdated(e){const t=this.constructor.persist,s=W(e,t);if(K(s))return;const r=N.get(this._name);r&&N.set(this._name,{...r,...this.serializePersistedState(Q(s))})}usesStore(){return!1}getName(){return null}getInitialState(){return{}}getComputedStateDefinition(){return{}}serializePersistedState(e){return e}async frameworkBoot(){this.initializePersistedState()}async boot(){}initializePersistedState(){const e=this.constructor.persist;if(this.usesStore()&&!K(e))if(N.has(this._name)){const e=N.require(this._name);this.setState(e)}else N.set(this._name,W(this.getState(),e))}requireStore(){return this._store?this._store:Z(`Failed getting '${this._name}' store`)}}O(je,"persist",[]);const Me={Low:-256,Default:0,High:256};class Ee extends je{constructor(){super(...arguments),O(this,"listeners",{})}async boot(){Object.entries(globalThis.__aerogelEvents__??{}).forEach((e=>{let[t,s]=e;return this.on(t,s)}))}async emit(e,t){const s=this.listeners[e]??{priorities:[],handlers:{}};for(const e of s.priorities)await Promise.all(s.handlers[e]?.map((e=>e(t)))??[])}on(e,t,s){const r="function"==typeof t?{}:t,o="function"==typeof t?t:s;return this.registerListener(e,r,o),()=>this.off(e,o)}once(e,t,s){let r=null;const o="function"==typeof t?{}:t,n="function"==typeof t?t:s;return z((()=>r&&this.off(e,r)),(t=>{r=function(){return t(),n(...arguments)},this.registerListener(e,o,n)}))}off(e,t){const s=this.listeners[e];if(!s)return;const r=[...s.priorities];for(const e of r)J(s.handlers[e]??[],t),0===s.handlers[e]?.length&&(delete s.handlers[e],J(s.priorities,e));0===s.priorities.length&&delete this.listeners[e]}registerListener(e,t,s){const r=t.priority??0;e in this.listeners||(this.listeners[e]={priorities:[],handlers:{}});const o=this.listeners[e]?.priorities??Z(`priorities missing for event '${e}'`),n=this.listeners[e]?.handlers??Z(`handlers missing for event '${e}'`);o.includes(r)||(o.push(r),o.sort(((e,t)=>t-e)),n[r]=[]),n[r]?.push(s)}}var He=Y(Ee),Le=$e({name:"app",initialState:{plugins:{},environment:q.environment,version:q.version,sourceUrl:q.sourceUrl},computed:{development:e=>"development"===e.environment,testing:e=>"test"===e.environment||"testing"===e.environment,versionName(e){return this.development?"dev."+q.sourceHash.toString().substring(0,7):`v${e.version}`},versionUrl(e){return e.sourceUrl+(this.development?`/tree/${q.sourceHash}`:`/releases/tag/${this.versionName}`)}}});class Te extends Le{constructor(){super(...arguments),O(this,"name",q.name),O(this,"ready",new U),O(this,"mounted",new U)}isReady(){return this.ready.isResolved()}isMounted(){return this.mounted.isResolved()}async whenReady(e){return await this.ready.then(e)}async reload(e){e&&X(e),location.reload(),await ee()}plugin(e){return this.plugins[e]??null}async boot(){He.once("application-ready",(()=>this.ready.resolve())),He.once("application-mounted",(()=>this.mounted.resolve()))}}var Ie=Y(Te);function Re(e){return e}async function Pe(e){for(var t=arguments.length,s=new Array(t>1?t-1:0),r=1;r<t;r++)s[r-1]=arguments[r];Ie.setState("plugins",e.reduce(((e,t)=>(t.name&&(e[t.name]=t),e)),{})),await Promise.all(e.map((e=>e.install(...s)))??[])}function De(e){return{type:Array,default:e??(()=>[])}}function Be(){return{type:Boolean,default:arguments.length>0&&void 0!==arguments[0]&&arguments[0]}}function Oe(){return e()}function qe(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 ze(e,t){const s=Object.values(e);return{type:String,default:t??s[0]??null,validator:e=>s.includes(e)}}function Fe(e){const t=r(e);return t?o(t):void 0}function Ue(e,t){return Fe(e)??Z(t??`Could not resolve '${e}' injection key`)}function Ne(e,t){return r(e)??Z(t??`Could not resolve '${e}' injection key`)}function We(e,t){return{type:e,default:t??null}}function Ke(){return{type:Number,default:arguments.length>0&&void 0!==arguments[0]?arguments[0]:null}}function Qe(){return{type:Object,default:arguments.length>0&&void 0!==arguments[0]?arguments[0]:null}}function Ze(){return{type:Array,required:!0}}function Ye(e){const t=Object.values(e);return{type:String,required:!0,validator:e=>t.includes(e)}}function Je(e){return{type:e,required:!0}}function Xe(){return{type:Number,required:!0}}function et(){return{type:Object,required:!0}}function tt(){return{type:String,required:!0}}function st(){return{type:String,default:arguments.length>0&&void 0!==arguments[0]?arguments[0]:null}}var rt={mounted(e,t){let{value:s}=t;!1!==s&&e.focus()}};const ot=new WeakMap;const nt={"initial-focus":rt,measure:{mounted(e,t){let{value:s}=t;const r="function"==typeof s?s:null,o=()=>{const t=e.getBoundingClientRect();e.style.setProperty("--width",`${t.width}px`),e.style.setProperty("--height",`${t.height}px`),r?.({width:t.width,height:t.height})};ot.set(e,z(new ResizeObserver(o)).observe(e)),o()},unmounted(e){ot.get(e)?.unobserve(e),ot.delete(e)}}};var at={install(e,t){const s={...nt,...t.directives};for(const[t,r]of Object.entries(s))e.directive(t,r)}};class lt extends je{constructor(){super(...arguments),O(this,"cache",void 0)}async get(e){const t=await this.open();return await t.match(e)??null}async store(e,t){const s=await this.open();await s.put(e,t)}async replace(e,t){const s=await this.open();0!==(await s.keys(e)).length&&await s.put(e,t)}async open(){return this.cache=this.cache??z(new U,(e=>{caches.open("app").then((t=>e.resolve(t)))}))}}var it=Y(lt);const ct={$app:Ie,$events:He};async function ut(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 dt={async install(e,t){const s={...ct,...t.services};e.use(Ge()),await ut(e,s)}};const pt=768,mt={Mobile:"mobile",Desktop:"desktop"};function ft(){return window.innerWidth>768?mt.Desktop:mt.Mobile}var ht=$e({name:"ui",initialState:{modals:[],snackbars:[],layout:ft()},computed:{mobile:e=>{let{layout:t}=e;return t===mt.Mobile},desktop:e=>{let{layout:t}=e;return t===mt.Desktop}}});const vt={AlertModal:"alert-modal",ConfirmModal:"confirm-modal",ErrorReportModal:"error-report-modal",LoadingModal:"loading-modal",PromptModal:"prompt-modal",Snackbar:"snackbar",StartupCrash:"startup-crash"};class gt extends ht{constructor(){super(...arguments),O(this,"modalCallbacks",{}),O(this,"components",{})}requireComponent(e){return this.components[e]??Z(`UI Component '${e}' is not defined!`)}alert(e,t){this.openModal(this.requireComponent(vt.AlertModal),"string"!=typeof t?{message:e}:{title:e,message:t})}async confirm(e,t,s){const r=await this.openModal(this.requireComponent(vt.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(vt.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(vt.LoadingModal),"string"!=typeof e?{}:{message:e});try{t="function"==typeof(t="string"==typeof e?t:e)?Promise.resolve(t()):t;const[s]=await Promise.all([t,te({seconds:1})]);return s}finally{await this.closeModal(s.id)}}showSnackbar(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const s={id:se(),properties:{message:e,...t},component:n(t.component??this.requireComponent(vt.Snackbar))};this.setState("snackbars",this.snackbars.concat(s)),setTimeout((()=>this.hideSnackbar(s.id)),5e3)}hideSnackbar(e){this.setState("snackbars",this.snackbars.filter((t=>t.id!==e)))}registerComponent(e,t){this.components[e]=t}async openModal(e,t){const s=se(),r={},o={id:s,properties:t??{},component: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&&He.emit("hide-modal",{id:l.id})),await Promise.all([l||He.emit("show-overlays-backdrop"),He.emit("show-modal",{id:o.id})]),o}async closeModal(e,t){await He.emit("close-modal",{id:e,result:t})}async boot(){this.watchModalEvents(),this.watchMountedEvent(),this.watchWindowMedia()}watchModalEvents(){He.on("modal-will-close",(e=>{let{modal:t,result:s}=e;this.modalCallbacks[t.id]?.willClose?.(s),1===this.modals.length&&He.emit("hide-overlays-backdrop")})),He.on("modal-closed",(async e=>{let{modal:t,result:s}=e;this.setState("modals",this.modals.filter((e=>e.id!==t.id))),this.modalCallbacks[t.id]?.closed?.(s),delete this.modalCallbacks[t.id];const r=this.modals.at(-1);await(r&&He.emit("show-modal",{id:r.id}))}))}watchMountedEvent(){He.once("application-mounted",(async()=>{const e=document.getElementById("splash");e&&("0"!==window.getComputedStyle(e).opacity&&(e.style.opacity="0",await te({ms:600})),e.remove())}))}watchWindowMedia(){window.matchMedia("(min-width: 768px)").addEventListener("change",(()=>this.setState({layout:ft()})))}}var bt=Y(gt);class _t{constructor(e,t){O(this,"locale",void 0),O(this,"fallbackLocale",void 0),this.locale=e,this.fallbackLocale=t}getLocale(){return this.locale}async setLocale(e){this.locale=e}getFallbackLocale(){return this.fallbackLocale}async setFallbackLocale(e){this.fallbackLocale=e}getLocales(){return["en"]}translate(e){return Ie.development&&console.warn("Lang provider is missing"),e}translateWithDefault(e,t){return Ie.development&&console.warn("Lang provider is missing"),t}}var yt=$e({name:"lang",persist:["locale","fallbackLocale"],initialState:{locale:null,locales:["en"],fallbackLocale:"en"}});var xt=Y(class extends yt{constructor(){super(),O(this,"provider",void 0),this.provider=new _t(this.getState("locale")??this.getBrowserLocale(),this.getState("fallbackLocale"))}async setProvider(e){this.provider=e,this.locales=e.getLocales(),await e.setLocale(this.locale??this.getBrowserLocale()),await e.setFallbackLocale(this.fallbackLocale)}translate(e,t){return this.provider.translate(e,t)??e}translateWithDefault(e,t){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.provider.translateWithDefault(e,t,s)}getBrowserLocale(){const e=this.getState("locales");return navigator.languages.find((t=>e.includes(t)))??"en"}async boot(){this.requireStore().$subscribe((async()=>{await this.provider.setLocale(this.locale??this.getBrowserLocale()),await this.provider.setFallbackLocale(this.fallbackLocale),this.locale?document.querySelector("html")?.setAttribute("lang",this.locale):document.querySelector("html")?.removeAttribute("lang")}),{immediate:!0})}});const wt=xt.translate.bind(xt),At=xt.translateWithDefault.bind(xt);var kt=$e({name:"errors",initialState:{logs:[],startupErrors:[]},computed:{hasErrors:e=>{let{logs:t}=e;return t.length>0},hasNewErrors:e=>{let{logs:t}=e;return t.some((e=>!e.seen))},hasStartupErrors:e=>{let{startupErrors:t}=e;return t.length>0}}});const St={Primary:"primary",Secondary:"secondary",Danger:"danger",Clear:"clear"};var Gt=Y(class extends kt{constructor(){super(...arguments),O(this,"forceReporting",!1),O(this,"enabled",!0)}enable(){this.enabled=!0}disable(){this.enabled=!1}async inspect(e){const t=Array.isArray(e)?e:[await this.createErrorReport(e)];0!==t.length?bt.openModal(bt.requireComponent(vt.ErrorReportModal),{reports:t}):bt.alert(At("errors.inspectEmpty","Nothing to inspect!"))}async report(e,t){if(await He.emit("error",{error:e,message:t}),Ie.testing)throw e;if(Ie.development&&this.logError(e),!this.enabled)throw e;if(!Ie.isMounted()){const t=await this.createStartupErrorReport(e);return void(t&&this.setState({startupErrors:this.startupErrors.concat(t)}))}const s=await this.createErrorReport(e),r={report:s,seen:!1,date:new Date};bt.showSnackbar(t??At("errors.notice","Something went wrong, but it's not your fault. Try again!"),{color:St.Danger,actions:[{text:At("errors.viewDetails","View details"),dismiss:!0,handler:()=>bt.openModal(bt.requireComponent(vt.ErrorReportModal),{reports:[s]})}]}),this.setState({logs:[r].concat(this.logs)})}see(e){this.setState({logs:this.logs.map((t=>t.report!==e?t:{...t,seen:!0}))})}seeAll(){this.setState({logs:this.logs.map((e=>({...e,seen:!0})))})}logError(e){console.error(e),re(e)&&e.cause&&this.logError(e.cause)}async createErrorReport(e){return"string"==typeof e?{title:e}:e instanceof Error||e instanceof V?this.createErrorReportFromError(e):re(e)?oe({title:ne(e.name??e.title??At("errors.unknown","Unknown Error")),description:ne(e.message??e.description??At("errors.unknownDescription","Unknown error object")),error:e}):{title:At("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 Ct(e){return"string"==typeof e?e:e instanceof Error||e instanceof V?e.message:re(e)?ne(e.message??e.description??"Unknown error object"):At("errors.unknown","Unknown Error")}const $t={$errors:Gt};function jt(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:()=>!1;const s=e=>t(e)||(e=>(Gt.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 Mt={async install(e,t){jt(e,t.handleError),await ut(e,$t)}};const Et={$lang:xt};var Ht={async install(e){e.config.globalProperties.$t??=wt,e.config.globalProperties.$td=At,await ut(e,Et)}},Lt={async install(){"testing"===import.meta.env.MODE&&(globalThis.testingRuntime={on:function(){return He.on(...arguments)}})}};function Tt(e,t){const s=He.on(e,t);l((()=>s()))}function It(){const e=i(),s=t((()=>e.class));return[t((()=>ae(e,"class"))),s]}function Rt(e){let t=le;c((()=>t=e())),l((()=>t()))}function Pt(e){return e.split(/\s+/).filter((e=>!/^(hover|focus|focus-visible):/.test(e))).join(" ").trim()}function Dt(e,t){return Object.keys(t).reduce(((t,s)=>(t[s]=e[s],t)),{})}const Bt={cancellable:Be(!0),title:st()};function Ot(){return Bt}function qt(e){return Dt(e,Bt)}function Vt(e){return{close:async()=>e.value?.close(),cancellable:t((()=>!!e.value?.cancellable))}}var zt=u({__name:"AGHeadlessModal",props:Ot(),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||(He.emit("modal-will-close",{modal:l,result:e}),await i(),a.value=!0,He.emit("modal-closed",{modal:l,result:e}))}return Tt("close-modal",(async({id:e,result:t})=>{e===l.id&&await c(t)})),Tt("hide-modal",(async({id:e})=>{e===l.id&&await i()})),Tt("show-modal",(async({id:e})=>{e===l.id&&await async function(){o.value?.$el&&(n.value=!1)}()})),s({close:c,cancellable:d(r,"cancellable")}),(e,t)=>(p(),m(f(pe),{ref_key:"$root",ref:o,open:!0,onClose:t[0]||(t[0]=t=>e.cancellable&&c())},{default:h((()=>[v(e.$slots,"default",{close:c})])),_:3},512))}});zt.__file="src/components/headless/modals/AGHeadlessModal.vue";var Ft=u({__name:"AGModalContext",props:{modal:et(),childIndex:Xe()},setup(e){const t=e;return g("modal",{modal:d(t,"modal"),childIndex:d(t,"childIndex")}),(t,s)=>(p(),m(b(e.modal.component),_(y(e.modal.properties)),null,16))}});Ft.__file="src/components/modals/AGModalContext.vue";const Ut=S("div",{class:"pointer-events-none fixed inset-0 z-50 bg-black/30"},null,-1);var Nt=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((()=>bt.modals[s.childIndex]??null));return(e,t)=>(p(),m(f(me),null,{default:h((()=>[v(e.$slots,"default"),r.value?(p(),x(w,{key:0},[Ut,A(Ft,{"child-index":f(s).childIndex+1,modal:r.value},null,8,["child-index","modal"])],64)):k("v-if",!0)])),_:3}))}});Nt.__file="src/components/headless/modals/AGHeadlessModalPanel.vue";var Wt=u({__name:"AGHeadlessModalTitle",props:{as:st("h2")},setup:e=>(t,s)=>(p(),m(f(fe),{as:e.as},{default:h((()=>[v(t.$slots,"default")])),_:3},8,["as"]))});function Kt(e){return t=xe(e,{mangle:!1,headerIds:!1,renderer:z(new we,(e=>{e.link=function(e,t,s){return we.prototype.link.apply(this,[e,t,s]).replace("<a",'<a target="_blank"')}}))}),ye.sanitize(t,{ADD_ATTR:["target"]});var t}Wt.__file="src/components/headless/modals/AGHeadlessModalTitle.vue";var Qt=u({__name:"AGMarkdown",props:{as:st(),inline:Be(),langKey:st(),langParams:We(),text:st()},setup(e){const s=e,r=i(),o=t((()=>s.text??(s.langKey&&wt(s.langKey,s.langParams??{})))),n=t((()=>{if(!o.value)return null;let e=Kt(o.value);return s.inline&&(e=e.replace("<p>","<span>").replace("</p>","</span>")),e})),a=()=>G(s.as??(s.inline?"span":"div"),{innerHTML:n.value,...r,class:`${r.class??""} ${s.inline?"":"prose"}`});return(e,t)=>(p(),m(a))}});Qt.__file="src/components/lib/AGMarkdown.vue";const Zt={class:"fixed inset-0 flex items-center justify-center p-8"};var Yt=u({inheritAttrs:!1,__name:"AGModal",props:Ot(),setup(t,{expose:s}){const r=t,o=e();return s(Vt(o)),(e,t)=>(p(),m(zt,C({ref_key:"$modal",ref:o},r,{class:"relative z-50"}),{default:h((({close:t})=>[S("div",Zt,[A(Nt,{class:"flex max-h-full max-w-full flex-col overflow-hidden bg-white p-4"},{default:h((()=>[e.title?(p(),m(Wt,{key:0,class:"mb-2 text-lg font-semibold"},{default:h((()=>[A(Qt,{text:e.title,inline:""},null,8,["text"])])),_:1})):k("v-if",!0),S("div",C({class:"flex max-h-full flex-col overflow-auto"},e.$attrs),[v(e.$slots,"default",{close:t})],16)])),_:2},1024)])])),_:3},16))}});Yt.__file="src/components/modals/AGModal.vue";const Jt={title:st(),message:tt()};function Xt(){return Jt}var es=u({__name:"AGAlertModal",props:Xt(),setup:e=>(e,t)=>(p(),m(Yt,{title:e.title},{default:h((()=>[A(Qt,{text:e.message},null,8,["text"])])),_:1},8,["title"]))});es.__file="src/components/modals/AGAlertModal.vue";const ts={title:st(),message:tt(),acceptText:st(),acceptColor:ze(St,St.Primary),cancelText:st(),cancelColor:ze(St,St.Clear)};function ss(){return ts}function rs(e){return{renderedAcceptText:t((()=>e.acceptText??At("ui.accept","Ok"))),renderedCancelText:t((()=>e.cancelText??At("ui.cancel","Cancel")))}}function os(e){return e instanceof HTMLElement?e:ns(e)?e.$el:void 0}function ns(e){return re(e)&&"$el"in e}function as(){return $(((e,t)=>{let s;return{get:()=>(e(),s),set(e){s=os(e),t()}}}))}var ls=u({__name:"AGHeadlessButton",props:{as:Qe(),href:st(),url:st(),route:st(),routeParams:Qe((()=>({}))),routeQuery:Qe((()=>({}))),submit:Be()},setup(e,{expose:s}){const r=e,o=as(),n=t((()=>r.as?{as:r.as,props:{}}:r.route?{as:"router-link",props:{to:oe({name:r.route,params:r.routeParams,query:r.routeQuery})}}:r.href||r.url?{as:"a",props:{target:"_blank",href:r.href||r.url}}:{as:"button",props:{type:r.submit?"submit":"button"}}));return s({$el:o}),(e,t)=>(p(),m(b(n.value.as),C({ref_key:"$root",ref:o},n.value.props),{default:h((()=>[v(e.$slots,"default")])),_:3},16))}});ls.__file="src/components/headless/forms/AGHeadlessButton.vue";var is=u({__name:"AGButton",props:{color:ze(St,St.Primary)},setup(e){const s=e,r=t((()=>{switch(s.color){case St.Secondary:return["text-white bg-gray-600","hover:bg-gray-500","focus-visible:outline-offset-2 focus-visible:outline-gray-600"].join(" ");case St.Clear:return"hover:bg-gray-500/20 focus-visible:outline-gray-500/60";case St.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(ls,{class:j(["px-2.5 py-1.5 focus-visible:outline focus-visible:outline-2",r.value])},{default:h((()=>[v(e.$slots,"default")])),_:3},8,["class"]))}});is.__file="src/components/forms/AGButton.vue";const cs={class:"mt-2 flex flex-row-reverse gap-2"};var us=u({__name:"AGConfirmModal",props:ss(),setup(e){const t=e,{renderedAcceptText:s,renderedCancelText:r}=rs(t);return(e,t)=>(p(),m(Yt,{cancellable:!1,title:e.title},{default:h((({close:t})=>[A(Qt,{text:e.message},null,8,["text"]),S("div",cs,[A(is,{color:e.acceptColor,onClick:e=>t(!0)},{default:h((()=>[M(E(f(s)),1)])),_:2},1032,["color","onClick"]),A(is,{color:e.cancelColor,onClick:e=>t()},{default:h((()=>[M(E(f(r)),1)])),_:2},1032,["color","onClick"])])])),_:1},8,["title"]))}});us.__file="src/components/modals/AGConfirmModal.vue";const ds={viewBox:"0 0 20 20",width:"1.2em",height:"1.2em"},ps=[S("path",{fill:"currentColor",d:"m12.95 10.707l.707-.707L8 4.343L6.586 5.757L10.828 10l-4.242 4.243L8 15.657l4.95-4.95z"},null,-1)];var ms={name:"zondicons-cheveron-right",render:function(e,t){return p(),x("svg",ds,[...ps])}};const fs={viewBox:"0 0 20 20",width:"1.2em",height:"1.2em"},hs=[S("path",{fill:"currentColor",d:"M7.05 9.293L6.343 10L12 15.657l1.414-1.414L9.172 10l4.242-4.243L12 4.343z"},null,-1)];var vs={name:"zondicons-cheveron-left",render:function(e,t){return p(),x("svg",fs,[...hs])}};const gs={reports:Ze()};function bs(){return gs}function _s(s){const r=e(0),o=t((()=>s.reports[r.value])),n=t((()=>o.value.details?.trim()||At("errors.detailsEmpty","This error is missing a stacktrace."))),a=At("errors.previousReport","Show previous report"),l=At("errors.nextReport","Show next report");return{activeReportIndex:r,details:n,nextReportText:l,previousReportText:a,report:o}}const ys={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},xs=[S("path",{fill:"currentColor",d:"M20 19V7H4v12h16m0-16a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h16m-7 14v-2h5v2h-5m-3.42-4L5.57 9H8.4l3.3 3.3c.39.39.39 1.03 0 1.42L8.42 17H5.59l3.99-4Z"},null,-1)];var ws={name:"mdi-console",render:function(e,t){return p(),x("svg",ys,[...xs])}};const As={viewBox:"0 0 20 20",width:"1.2em",height:"1.2em"},ks=[S("path",{fill:"currentColor",d:"M6 6V2c0-1.1.9-2 2-2h10a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-4v4a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V8c0-1.1.9-2 2-2h4zm2 0h4a2 2 0 0 1 2 2v4h4V2H8v4zM2 8v10h10V8H2z"},null,-1)];var Ss={name:"zondicons-copy",render:function(e,t){return p(),x("svg",As,[...ks])}};const Gs={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},Cs=[S("path",{fill:"currentColor",d:"M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5c.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34c-.46-1.16-1.11-1.47-1.11-1.47c-.91-.62.07-.6.07-.6c1 .07 1.53 1.03 1.53 1.03c.87 1.52 2.34 1.07 2.91.83c.09-.65.35-1.09.63-1.34c-2.22-.25-4.55-1.11-4.55-4.92c0-1.11.38-2 1.03-2.71c-.1-.25-.45-1.29.1-2.64c0 0 .84-.27 2.75 1.02c.79-.22 1.65-.33 2.5-.33c.85 0 1.71.11 2.5.33c1.91-1.29 2.75-1.02 2.75-1.02c.55 1.35.2 2.39.1 2.64c.65.71 1.03 1.6 1.03 2.71c0 3.82-2.34 4.66-4.57 4.91c.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"},null,-1)];var $s={name:"mdi-github",render:function(e,t){return p(),x("svg",Gs,[...Cs])}};const js={class:"flex"};var Ms=u({__name:"AGErrorReportModalButtons",props:{report:et()},setup(e){const s=e,r=t((()=>s.report.description?`${s.report.title}: ${s.report.description}`:s.report.title)),o=t((()=>{if(!Ie.sourceUrl)return!1;const e=encodeURIComponent(r.value),t=encodeURIComponent(["[Please, explain here what you were trying to do when this error appeared]","","Error details:","```",ie(s.report.details??"Details missing from report",1800-e.length-Ie.sourceUrl.length).trim(),"```"].join("\n"));return`${Ie.sourceUrl}/issues/new?title=${e}&body=${t}`})),n=t((()=>z([{id:"clipboard",description:"Copy to clipboard",iconComponent:Ss,async handler(){await navigator.clipboard.writeText(`${r.value}\n\n${s.report.details}`),bt.showSnackbar(At("errors.copiedToClipboard","Debug information copied to clipboard"))}},{id:"console",description:"Log to console",iconComponent:ws,handler(){const e=s.report.error??s.report;window.error=e,console.error(e),bt.showSnackbar(At("errors.addedToConsole","You can now use the **error** variable in the console"))}}],(e=>{o.value&&e.push({id:"github",description:"Report in GitHub",iconComponent:$s,url:o.value})}))));return(e,t)=>(p(),x("div",js,[(p(!0),x(w,null,H(n.value,((t,s)=>v(e.$slots,"default",C(t,{key:s}),(()=>[A(is,{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(b(t.iconComponent),{class:"h-4 w-4","aria-hidden":"true"}))])),_:2},1032,["url","title","aria-label","onClick"])])))),128))]))}});Ms.__file="src/components/modals/AGErrorReportModalButtons.vue";var Es=u({__name:"AGErrorReportModalTitle",props:{report:et(),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(Qt,{text:r.value,inline:""},null,8,["text"]))}});Es.__file="src/components/modals/AGErrorReportModalTitle.vue";const Hs={class:"flex items-center justify-between text-lg font-medium"},Ls={class:"flex items-center"},Ts=["textContent"];var Is=u({__name:"AGErrorReportModal",props:bs(),setup(e){const t=e,{activeReportIndex:s,details:r,nextReportText:o,previousReportText:n,report:a}=_s(t);return(e,t)=>(p(),m(Yt,null,{default:h((()=>[S("div",null,[S("h2",Hs,[S("div",Ls,[A(Es,{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(w,{key:0},[A(is,{color:"clear",disabled:0===f(s),title:f(n),"aria-label":f(n),onClick:t[0]||(t[0]=e=>s.value--)},{default:h((()=>[A(f(vs),{"aria-hidden":"true",class:"h-4 w-4"})])),_:1},8,["disabled","title","aria-label"]),A(is,{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((()=>[A(f(ms),{"aria-hidden":"true",class:"h-4 w-4"})])),_:1},8,["disabled","title","aria-label"])],64)):k("v-if",!0)]),A(Ms,{report:f(a)},null,8,["report"])]),f(a).description?(p(),m(Qt,{key:0,text:f(a).description,class:"mt-2"},null,8,["text"])):k("v-if",!0)]),S("pre",{class:"h-full overflow-auto bg-gray-200 p-4 text-xs text-red-900",textContent:E(f(r))},null,8,Ts)])),_:1}))}});Is.__file="src/components/modals/AGErrorReportModal.vue";const Rs={message:st()};function Ps(){return Rs}function Ds(e){return{renderedMessage:t((()=>e.message??At("ui.loading","Loading...")))}}var Bs=u({__name:"AGLoadingModal",props:Ps(),setup(e){const t=e,{renderedMessage:s}=Ds(t);return(e,t)=>(p(),m(Yt,{cancellable:!1},{default:h((()=>[A(Qt,{text:f(s)},null,8,["text"])])),_:1}))}});Bs.__file="src/components/modals/AGLoadingModal.vue";const Os={title:st(),message:tt(),label:st(),defaultValue:st(),placeholder:st(),acceptText:st(),acceptColor:ze(St,St.Primary),cancelText:st(),cancelColor:ze(St,St.Clear)};function qs(){return Os}function Vs(e){return{renderedAcceptText:t((()=>e.acceptText??At("ui.accept","Ok"))),renderedCancelText:t((()=>e.cancelText??At("ui.cancel","Cancel")))}}var zs=u({__name:"AGForm",props:{form:Qe()},emits:["submit"],setup(e,{emit:t}){let s;const r=e,o=t;return L((e=>{s?.(),s=r.form?.on("submit",(()=>o("submit"))),e((()=>s?.()))})),g("form",r.form),(t,s)=>(p(),x("form",{onSubmit:s[0]||(s[0]=T((t=>e.form?.submit()),["prevent"]))},[v(t.$slots,"default")],32))}});zs.__file="src/components/forms/AGForm.vue";const Fs={name:st(),label:st(),description:st(),modelValue:We([String,Number,Boolean])};function Us(){return Fs}function Ns(e){return Dt(e,Fs)}var Ws=u({__name:"AGHeadlessInput",props:{as:st("div"),...Us()},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,id:`input-${se()}`,name:t((()=>l.name)),label:t((()=>l.label)),description:t((()=>l.description)),value:t((()=>u&&l.name?u.getFieldValue(l.name):l.modelValue)),errors:I(c),required:t((()=>l.name&&u?u.getFieldRules(l.name).includes("required"):null)),update(e){u&&l.name?u.setFieldValue(l.name,e):a("update:modelValue",e)},__setElement(e){i.value=e}};return g("input",d),o(d),(e,t)=>s.as?(p(),m(b(s.as),{key:0},{default:h((()=>[v(e.$slots,"default")])),_:3})):v(e.$slots,"default",{key:1})}});Ws.__file="src/components/headless/forms/AGHeadlessInput.vue";var Ks=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(Qt,C({key:0},e.$attrs,{id:`${f(s).id}-description`,text:r.value}),null,16,["id","text"])):k("v-if",!0)]))}});Ks.__file="src/components/headless/forms/AGHeadlessInputDescription.vue";const Qs=["id"];var Zs=u({__name:"AGHeadlessInputError",setup(e){const s=Ue("input","<AGHeadlessInputError> must be a child of a <AGHeadlessInput>"),r=t((()=>s.errors?At(`errors.${s.errors[0]}`,`Error: ${s.errors[0]}`):null));return(e,t)=>r.value?(p(),x("p",{key:0,id:`${f(s).id}-error`},E(r.value),9,Qs)):k("v-if",!0)}});function Ys(e,t){const s=r("form",null),o=s?.on("focus",(s=>e.name===s&&t()));l((()=>o?.()))}Zs.__file="src/components/headless/forms/AGHeadlessInputError.vue";const Js=["id","name","type","required","aria-invalid","aria-describedby","checked"];var Xs=u({__name:"AGHeadlessInputInput",props:{type:st("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 Ys(n,(()=>o.value?.focus())),L((()=>n.__setElement(o.value))),L((()=>{o.value&&("date"!==r.type?o.value.value=l.value:o.value.valueAsDate=l.value)})),(e,t)=>(p(),x("input",{id:f(n).id,ref_key:"$input",ref:o,name:a.value,type:s.type,required:f(n).required??void 0,"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,Js))}});Xs.__file="src/components/headless/forms/AGHeadlessInputInput.vue";const er=["for"];var tr=u({__name:"AGHeadlessInputLabel",setup(e){const s=Ue("input","<AGHeadlessInputLabel> must be a child of a <AGHeadlessInput>"),r=R(),o=t((()=>!(!s.label&&!r.default)));return(e,t)=>o.value?(p(),x("label",{key:0,for:f(s).id},[v(e.$slots,"default",{},(()=>[M(E(f(s).label),1)]))],8,er)):k("v-if",!0)}});tr.__file="src/components/headless/forms/AGHeadlessInputLabel.vue";const sr={class:"absolute bottom-0 left-0 translate-y-full"};var rr=u({inheritAttrs:!1,__name:"AGInput",props:Us(),setup(e){const t=e,s=Oe(),[r,o]=It();return(e,n)=>(p(),m(Ws,C({ref_key:"$input",ref:s,class:["relative flex flex-col items-center",f(o)]},t),{default:h((()=>[A(tr,{class:"sr-only"}),A(Xs,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"]),A(Ks),S("div",sr,[A(Zs,{class:"mt-1 text-sm text-red-500"})])])),_:1},16,["class"]))}});rr.__file="src/components/forms/AGInput.vue";const or={String:"string",Number:"number",Boolean:"boolean",Object:"object",Date:"date"},nr=new WeakMap;class ar extends F{constructor(s){super(),O(this,"errors",void 0),O(this,"_fields",void 0),O(this,"_data",void 0),O(this,"_submitted",void 0),O(this,"_errors",void 0),O(this,"_listeners",{}),this._fields=s,this._submitted=e(!1),this._data=this.getInitialData(s),this._errors=this.getInitialErrors(s),nr.set(this,t((()=>!Object.values(this._errors).some((e=>null!==e))))),this.errors=I(this._errors)}get valid(){return!!nr.get(this)?.value}get submitted(){return this._submitted.value}setFieldValue(e,t){const s=this._fields[e]??Z(`Trying to set undefined '${ne(e)}' field`);this._data[e]=s.type===or.String&&(s.trim??1)?ne(t).trim():t,this._submitted.value&&this.validate()}getFieldValue(e){return this._data[e]}getFieldRules(e){return this._fields[e]?.rules?.split("|")??[]}data(){return{...this._data}}validate(){const e=Object.entries(this._fields).reduce(((e,t)=>{let[s,r]=t;return e[s]=this.getFieldErrors(s,r),e}),{});return this.resetErrors(e),this.valid}reset(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this._submitted.value=!1,e.keepData||this.resetData(),e.keepErrors||this.resetErrors()}submit(){this._submitted.value=!0;const e=this.validate();return e&&this._listeners.submit?.forEach((e=>e())),e}on(e,t){return this._listeners[e]??=[],this._listeners[e]?.push(t),()=>this.off(e,t)}off(e,t){J(this._listeners[e]??[],t)}async focus(e){await a(),this._listeners.focus?.forEach((t=>t(e)))}__get(e){return e in this._fields?this.getFieldValue(e):super.__get(e)}__set(e,t){e in this._fields?this.setFieldValue(e,t):super.__set(e,t)}getFieldErrors(e,t){const s=[];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 lr(e){return new ar(e)}function ir(e){return{default:e,type:or.Boolean}}function cr(e){return{default:e,type:or.Date}}function ur(e){return{default:e,type:or.Boolean,rules:"required"}}function dr(e){return{default:e,type:or.Date,rules:"required"}}function pr(e){return{default:e,type:or.Number,rules:"required"}}function mr(e){return{default:e,type:or.String,rules:"required"}}function fr(e){return{default:e,type:or.Number}}function hr(e){return{default:e,type:or.String}}const vr={class:"mt-2 flex flex-row-reverse gap-2"};var gr=u({__name:"AGPromptModal",props:qs(),setup(e){const t=e,s=lr({draft:mr(t.defaultValue??"")}),{renderedAcceptText:r,renderedCancelText:o}=Vs(t);return(e,t)=>(p(),m(Yt,{cancellable:!1,title:e.title},{default:h((({close:t})=>[A(Qt,{text:e.message},null,8,["text"]),A(zs,{form:f(s),onSubmit:e=>t(f(s).draft)},{default:h((()=>[A(rr,{name:"draft",placeholder:e.placeholder,label:e.label},null,8,["placeholder","label"]),S("div",vr,[A(is,{color:e.acceptColor,submit:""},{default:h((()=>[M(E(f(r)),1)])),_:1},8,["color"]),A(is,{color:e.cancelColor,onClick:e=>t()},{default:h((()=>[M(E(f(o)),1)])),_:2},1032,["color","onClick"])])])),_:2},1032,["form","onSubmit"])])),_:1},8,["title"]))}});gr.__file="src/components/modals/AGPromptModal.vue";const br={class:"pointer-events-auto"};var _r=u({__name:"AGHeadlessSnackbar",setup:e=>(e,t)=>(p(),x("div",br,[v(e.$slots,"default")]))});_r.__file="src/components/headless/snackbars/AGHeadlessSnackbar.vue";const yr=ae(St,["Primary","Clear"]),xr={id:tt(),message:tt(),actions:De((()=>[])),color:ze(yr,St.Secondary)};function wr(){return xr}function Ar(e){return{activate:function(t){t.handler?.(),t.dismiss&&bt.hideSnackbar(e.id)}}}var kr=u({__name:"AGSnackbar",props:wr(),setup(e){const s=e,{activate:r}=Ar(s),o=t((()=>s.color===St.Danger?"bg-red-200 text-red-900":"bg-gray-900 text-white"));return(e,t)=>(p(),m(_r,{class:j(["flex flex-row items-center justify-center gap-3 p-4",o.value])},{default:h((()=>[A(Qt,{text:e.message,inline:""},null,8,["text"]),(p(!0),x(w,null,H(e.actions,((t,s)=>(p(),m(is,{key:s,color:e.color,onClick:e=>f(r)(t)},{default:h((()=>[M(E(t.text),1)])),_:2},1032,["color","onClick"])))),128))])),_:1},8,["class"]))}});kr.__file="src/components/snackbars/AGSnackbar.vue";const Sr={class:"grid flex-grow place-items-center"},Gr={class:"flex flex-col items-center space-y-6 p-8"},Cr={class:"mt-2 text-center text-4xl font-medium text-red-600"},$r={class:"mt-4 flex flex-col space-y-4"};var jr=u({__name:"AGStartupCrash",setup:e=>(e,t)=>(p(),x("div",Sr,[S("div",Gr,[S("h1",Cr,E(e.$td("startupCrash.title","Something went wrong!")),1),A(Qt,{text:e.$td("startupCrash.message","Something failed trying to start the application.\n\nHere's some things you can do:"),class:"mt-4 text-center"},null,8,["text"]),S("div",$r,[A(is,{color:"danger",onClick:t[0]||(t[0]=t=>e.$app.reload())},{default:h((()=>[M(E(e.$td("startupCrash.reload","Try again")),1)])),_:1}),A(is,{color:"danger",onClick:t[1]||(t[1]=t=>e.$errors.inspect(e.$errors.startupErrors))},{default:h((()=>[M(E(e.$td("startupCrash.inspect","View error details")),1)])),_:1})])])]))});jr.__file="src/components/lib/AGStartupCrash.vue";const Mr={$ui:bt};var Er={async install(e,t){const s={[vt.AlertModal]:es,[vt.ConfirmModal]:us,[vt.ErrorReportModal]:Is,[vt.LoadingModal]:Bs,[vt.PromptModal]:gr,[vt.Snackbar]:kr,[vt.StartupCrash]:jr};Object.entries({...s,...t.components}).forEach((e=>{let[t,s]=e;return bt.registerComponent(t,s)})),await ut(e,Mr)}};async function Hr(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const s=[Lt,at,Mt,Ht,dt,Er,...t.plugins??[]];await Pe(s,e,t),await(t.install?.(e)),await He.emit("application-ready")}async function Lr(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const s=P(e);await Hr(s,t),s.mount("#app"),s._container?.classList.remove("loading"),await He.emit("application-mounted")}const Tr={key:0};var Ir=u({__name:"AGAppModals",setup(e){const s=t((()=>bt.modals[0]??null));return(e,t)=>s.value?(p(),x("aside",Tr,[A(Ft,{"child-index":1,modal:s.value},null,8,["modal"])])):k("v-if",!0)}});Ir.__file="src/components/AGAppModals.vue";const Rr={"aria-live":"assertive",class:"pointer-events-none fixed inset-0 z-50 flex items-end px-4 py-6 sm:p-6"},Pr={class:"flex w-full flex-col items-end space-y-4"};const Dr={render:function(e,t){return p(),x("div",Rr,[S("div",Pr,[(p(!0),x(w,null,H(e.$ui.snackbars,(e=>(p(),m(b(e.component),C({id:e.id,key:e.id},e.properties),null,16,["id"])))),128))])])},__file:"src/components/AGAppSnackbars.vue"};var Br=Dr,Or=u({__name:"AGAppOverlays",setup(t){const s=e(null),r=e(!0);return Tt("show-overlays-backdrop",(async()=>{s.value&&r.value&&(r.value=!1,s.value.classList.remove("opacity-0"))})),Tt("hide-overlays-backdrop",(async()=>{s.value&&!r.value&&(r.value=!0,s.value.classList.add("opacity-0"))})),(e,t)=>(p(),x(w,null,[S("div",{id:"aerogel-overlays-backdrop",ref_key:"$backdrop",ref:s,class:"pointer-events-none fixed inset-0 z-50 bg-black/30 opacity-0"},null,512),A(Ir),A(Br)],64))}});Or.__file="src/components/AGAppOverlays.vue";const qr={class:"flex min-h-full flex-col text-base font-normal leading-tight text-gray-900 antialiased"};var Vr=u({__name:"AGAppLayout",setup:e=>(e,t)=>(p(),x("div",qr,[e.$errors.hasStartupErrors?v(e.$slots,"startup-crash",{key:0},(()=>[(p(),m(b(e.$ui.requireComponent(f(vt).StartupCrash))))])):v(e.$slots,"default",{key:1}),A(Or)]))});Vr.__file="src/components/AGAppLayout.vue";const zr={class:"ml-2"};var Fr=u({inheritAttrs:!1,__name:"AGCheckbox",props:{name:st()},emits:["update:modelValue"],setup(e){const t=Oe();return(s,r)=>(p(),m(Ws,{ref_key:"$input",ref:t,name:e.name,class:"flex","onUpdate:modelValue":r[0]||(r[0]=e=>s.$emit("update:modelValue",e))},{default:h((()=>[A(Xs,C(s.$attrs,{type:"checkbox",class:{"text-indigo-600 focus:ring-indigo-600":!f(t)?.errors,"border-red-200 text-red-600 focus:ring-red-600":f(t)?.errors}}),null,16,["class"]),S("div",zr,[s.$slots.default?(p(),m(tr,{key:0},{default:h((()=>[v(s.$slots,"default")])),_:3})):k("v-if",!0),A(Zs,{class:"text-sm text-red-600"})])])),_:3},8,["name"]))}});Fr.__file="src/components/forms/AGCheckbox.vue";const Ur={viewBox:"0 0 20 20",width:"1.2em",height:"1.2em"},Nr=[S("path",{fill:"currentColor",d:"m9.293 12.95l.707.707L15.657 8l-1.414-1.414L10 10.828L5.757 6.586L4.343 8z"},null,-1)];var Wr={name:"zondicons-cheveron-down",render:function(e,t){return p(),x("svg",Ur,[...Nr])}};const Kr={name:st(),label:st(),options:Ze(),noSelectionText:st(),optionsText:We()},Qr=["update:modelValue"];function Zr(){return Kr}function Yr(){return[...Qr]}function Jr(e){return Dt(e,Kr)}var Xr=u({__name:"AGHeadlessSelect",props:{modelValue:We(),...Zr()},emits:Yr(),setup(e,{expose:s,emit:o}){const n=o,a=e,l=t((()=>"function"==typeof a.optionsText?a.optionsText:"string"==typeof a.optionsText?e=>ne(e[a.optionsText]):e=>ne(e))),i=r("form",null),c=t((()=>a.noSelectionText??At("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 b(e){i&&a.name?i.setFieldValue(a.name,e):n("update:modelValue",e)}const _={id:`select-${se()}`,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:b};return g("select",_),s(_),(e,t)=>(p(),m(f(he),{"model-value":u.value,"onUpdate:modelValue":t[0]||(t[0]=e=>b(e))},{default:h((({value:t,open:s,disabled:r})=>[v(e.$slots,"default",{value:t,open:s,disabled:r})])),_:3},8,["model-value"]))}});Xr.__file="src/components/headless/forms/AGHeadlessSelect.vue";var eo=u({__name:"AGHeadlessSelectButton",props:{textClass:st()},setup(e){const t=Ue("select","<AGHeadlessSelectButton> must be a child of a <AGHeadlessSelect>");return(s,r)=>(p(),m(f(ve),null,{default:h((({value:r,open:o,disabled:n})=>[v(s.$slots,"default",{value:r,open:o,disabled:n},(()=>[S("span",{class:j(e.textClass)},E(f(t)?.buttonText),3)])),v(s.$slots,"icon")])),_:3}))}});eo.__file="src/components/headless/forms/AGHeadlessSelectButton.vue";const to=["id"];var so=u({__name:"AGHeadlessSelectError",setup(e){const s=Ue("select","<AGHeadlessSelectError> must be a child of a <AGHeadlessSelect>"),r=t((()=>s.errors?At(`errors.${s.errors[0]}`,`Error: ${s.errors[0]}`):null));return(e,t)=>r.value?(p(),x("p",{key:0,id:`${f(s).id}-error`},E(r.value),9,to)):k("v-if",!0)}});so.__file="src/components/headless/forms/AGHeadlessSelectError.vue";var ro=u({__name:"AGHeadlessSelectLabel",setup(e){const s=Ue("select","<AGHeadlessSelectLabel> must be a child of a <AGHeadlessSelect>"),r=R(),o=t((()=>!(!s.label&&!r.default)));return(e,t)=>o.value?(p(),m(f(ge),{key:0},{default:h((({open:t,disabled:r})=>[v(e.$slots,"default",{open:t,disabled:r},(()=>[M(E(f(s).label),1)]))])),_:3})):k("v-if",!0)}});ro.__file="src/components/headless/forms/AGHeadlessSelectLabel.vue";var oo=u({__name:"AGHeadlessSelectOption",props:{value:Je(),selectedClass:st(),unselectedClass:st(),activeClass:st(),inactiveClass:st()},setup(e){const t=Ue("select","<AGHeadlessSelectOption> must be a child of a <AGHeadlessSelect>");return(s,r)=>(p(),m(f(be),{value:e.value,as:"template"},{default:h((({active:r,selected:o,disabled:n})=>[v(s.$slots,"default",{active:r,selected:o,disabled:n},(()=>[S("li",{class:j({[e.activeClass??"active"]:r,[e.inactiveClass??"inactive"]:!r,[e.selectedClass??"selected"]:o,[e.unselectedClass??"unselected"]:!o})},E(f(t).renderText(e.value)),3)]))])),_:3},8,["value"]))}});oo.__file="src/components/headless/forms/AGHeadlessSelectOption.vue";const no={class:"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2"};var ao=u({__name:"AGSelect",props:Zr(),emits:Yr(),setup(e){const t=e,s=Oe();return(e,r)=>(p(),m(Xr,C(t,{ref_key:"$select",ref:s,as:"div","onUpdate:modelValue":r[0]||(r[0]=t=>e.$emit("update:modelValue",t))}),{default:h((()=>[A(ro,{class:"block text-sm font-medium leading-6 text-gray-900"}),S("div",{class:j(["relative",{"mt-2":f(s)?.label}])},[A(eo,{class:j(["relative w-full cursor-default bg-white py-1.5 pl-3 pr-10 text-left text-gray-900 ring-1 ring-inset ring-gray-300 focus:outline-none focus:ring-2 focus:ring-indigo-600",{"ring-1 ring-red-500":f(s)?.errors}]),"text-class":"block truncate"},{icon:h((()=>[S("span",no,[A(f(Wr),{class:"h-5 w-5 text-gray-400"})])])),_:1},8,["class"]),A(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(w,null,H(f(s)?.options??[],((e,t)=>(p(),m(oo,{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),A(so,{class:"mt-2 text-sm text-red-600"})])),_:1},16))}});ao.__file="src/components/forms/AGSelect.vue";const lo=["id","name","required","value","aria-invalid","aria-describedby"];var io=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 L((()=>o.__setElement(r.value))),Ys(o,(()=>r.value?.focus())),(e,t)=>(p(),x("textarea",{id:f(o).id,ref_key:"$textArea",ref:r,name:n.value,required:f(o).required??void 0,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,lo))}});io.__file="src/components/headless/forms/AGHeadlessInputTextArea.vue";var co=u({__name:"AGErrorMessage",props:{error:et()},setup(e){const s=e,r=t((()=>Ct(s.error)));return(e,t)=>(p(),m(Qt,{text:r.value,inline:""},null,8,["text"]))}});co.__file="src/components/lib/AGErrorMessage.vue";var uo=u({__name:"AGLink",setup:e=>(e,t)=>(p(),m(ls,{class:"font-medium hover:underline"},{default:h((()=>[v(e.$slots,"default")])),_:3}))});uo.__file="src/components/lib/AGLink.vue";var po=u({__name:"AGMeasured",props:{as:st("span")},setup(t){const s=e(!1);return(e,r)=>{const o=D("measure");return B((p(),m(b(t.as),{class:j({"!invisible !absolute !w-auto":!s.value})},{default:h((()=>[v(e.$slots,"default")])),_:3},8,["class"])),[[o,()=>s.value=!0]])}}});po.__file="src/components/lib/AGMeasured.vue";var mo=u({__name:"AGModalTitle",setup:e=>(e,t)=>(p(),m(Wt,{class:"mb-2 font-semibold"},{default:h((()=>[v(e.$slots,"default")])),_:3}))});mo.__file="src/components/modals/AGModalTitle.vue";class fo{}async function ho(e){await e.run()}export{es as AGAlertModal,Vr as AGAppLayout,Or as AGAppOverlays,is as AGButton,Fr as AGCheckbox,us as AGConfirmModal,co as AGErrorMessage,Ms as AGErrorReportModalButtons,Es as AGErrorReportModalTitle,zs as AGForm,ls as AGHeadlessButton,Ws as AGHeadlessInput,Ks as AGHeadlessInputDescription,Zs as AGHeadlessInputError,Xs as AGHeadlessInputInput,tr as AGHeadlessInputLabel,io as AGHeadlessInputTextArea,zt as AGHeadlessModal,Nt as AGHeadlessModalPanel,Wt as AGHeadlessModalTitle,Xr as AGHeadlessSelect,eo as AGHeadlessSelectButton,so as AGHeadlessSelectError,ro as AGHeadlessSelectLabel,oo as AGHeadlessSelectOption,_r as AGHeadlessSnackbar,rr as AGInput,uo as AGLink,Bs as AGLoadingModal,Qt as AGMarkdown,po as AGMeasured,Yt as AGModal,Ft as AGModalContext,mo as AGModalTitle,gr as AGPromptModal,ao as AGSelect,kr as AGSnackbar,jr as AGStartupCrash,Ie as App,Te as AppService,it as Cache,lt as CacheService,St as Colors,Gt as Errors,Me as EventListenerPriorities,He as Events,Ee as EventsService,ar as Form,or as FormFieldTypes,fo as Job,xt as Lang,mt as Layouts,pt as MOBILE_BREAKPOINT,je as Service,yr as SnackbarColors,bt as UI,vt as UIComponents,gt as UIService,Jt as alertModalProps,De as arrayProp,ir as booleanInput,Be as booleanProp,ut as bootServices,Lr as bootstrap,Hr as bootstrapApplication,Oe as componentRef,qe as computedAsync,ts as confirmModalProps,cr as dateInput,Ve as defineDirective,Re as definePlugin,$e as defineServiceState,Ce as defineServiceStore,ho as dispatch,as as elementRef,ze as enumProp,gs as errorReportModalProps,Ns as extractInputProps,qt as extractModalProps,Jr as extractSelectProps,ft as getCurrentLayout,os as getElement,Ct as getErrorMessage,Ge as getPiniaStore,ns as hasElement,Ne as injectOrFail,Fe as injectReactive,Ue as injectReactiveOrFail,Fs as inputProps,Pe as installPlugins,Rs as loadingModalProps,We as mixedProp,Bt as modalProps,fr as numberInput,Ke as numberProp,Qe as objectProp,Rt as onCleanMounted,Ys as onFormFocus,Os as promptModalProps,Pt as removeInteractiveClasses,Ze as requiredArrayProp,ur as requiredBooleanInput,dr as requiredDateInput,Ye as requiredEnumProp,Je as requiredMixedProp,pr as requiredNumberInput,Xe as requiredNumberProp,et as requiredObjectProp,mr as requiredStringInput,tt as requiredStringProp,Se as resetPiniaStore,Qr as selectEmits,Kr as selectProps,xr as snackbarProps,hr as stringInput,st as stringProp,wt as translate,At as translateWithDefault,Xt as useAlertModalProps,rs as useConfirmModal,ss as useConfirmModalProps,_s as useErrorReportModal,bs as useErrorReportModalProps,Tt as useEvent,lr as useForm,It as useInputAttrs,Us as useInputProps,Ds as useLoadingModal,Ps as useLoadingModalProps,Vt as useModalExpose,Ot as useModalProps,Vs as usePromptModal,qs as usePromptModalProps,Yr as useSelectEmits,Zr as useSelectProps,Ar as useSnackbar,wr as useSnackbarProps};
|
|
2
2
|
//# sourceMappingURL=aerogel-core.esm.js.map
|