@aerogel/core 0.0.0-next.97312fd206b83ac5ae520da32b1bb3f12fb55969 → 0.0.0-next.9a02fcd3bcf698211dd7a71d4c48257c96dd7832

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.
@@ -6,31 +6,46 @@ import { ComputedRef } from 'vue';
6
6
  import { Constructor } from '@noeldemartin/utils';
7
7
  import type { DeepReadonly } from 'vue';
8
8
  import { DefineComponent } from 'vue';
9
+ import type { DefineStoreOptions } from 'pinia';
9
10
  import type { Directive } from 'vue';
10
11
  import { ExtractPropTypes } from 'vue';
11
12
  import { Facade } from '@noeldemartin/utils';
12
13
  import type { GetClosureArgs } from '@noeldemartin/utils';
14
+ import type { _GettersTree } from 'pinia';
13
15
  import type { InjectionKey } from 'vue';
14
16
  import type { JSError } from '@noeldemartin/utils';
15
17
  import { MagicObject } from '@noeldemartin/utils';
16
18
  import type { MaybeRef } from 'vue';
17
19
  import type { ObjectValues } from '@noeldemartin/utils';
18
20
  import type { ObjectWithoutEmpty } from '@noeldemartin/utils';
21
+ import type { Pinia } from 'pinia';
19
22
  import { PromisedValue } from '@noeldemartin/utils';
20
23
  import { PropType } from 'vue';
21
24
  import { PublicProps } from 'vue';
22
25
  import { Ref } from 'vue';
23
26
  import { RendererElement } from 'vue';
24
27
  import { RendererNode } from 'vue';
28
+ import type { StateTree } from 'pinia';
29
+ import type { Store } from 'pinia';
25
30
  import type { UnwrapNestedRefs } from 'vue';
26
31
  import { VNode } from 'vue';
27
32
  import type { Writable } from '@noeldemartin/utils';
28
33
 
34
+ export declare type AerogelGlobalEvents = Partial<{
35
+ [Event in EventWithoutPayload]: () => unknown;
36
+ }> & Partial<{
37
+ [Event in EventWithPayload]: EventListener_2<EventsPayload[Event]>;
38
+ }>;
39
+
29
40
  export declare interface AerogelOptions {
30
41
  plugins?: Plugin_2[];
31
42
  install?(app: App_2): void | Promise<void>;
32
43
  }
33
44
 
45
+ export declare interface AerogelTestingRuntime {
46
+ on: (typeof Events)['on'];
47
+ }
48
+
34
49
  export declare const AGAlertModal: DefineComponent< {
35
50
  title: {
36
51
  type?: PropType<string | null> | undefined;
@@ -1170,13 +1185,14 @@ export declare const alertModalProps: {
1170
1185
  };
1171
1186
  };
1172
1187
 
1173
- export declare const App: Facade<AppService, Constructor<AppService>>;
1188
+ export declare const App: Facade<AppService, AppService>;
1174
1189
 
1175
1190
  export declare class AppService extends _default_2 {
1176
1191
  readonly ready: PromisedValue<void>;
1177
1192
  readonly mounted: PromisedValue<void>;
1178
1193
  isReady(): boolean;
1179
1194
  isMounted(): boolean;
1195
+ whenReady<T>(callback: () => T): Promise<T>;
1180
1196
  reload(queryParameters?: Record<string, string | undefined>): Promise<void>;
1181
1197
  plugin<T extends Plugin_2 = Plugin_2>(name: string): T | null;
1182
1198
  protected boot(): Promise<void>;
@@ -1215,7 +1231,7 @@ export declare function componentRef<T>(): Ref<UnwrapNestedRefs<T> | undefined>;
1215
1231
  export declare function computedAsync<T>(getter: () => Promise<T>): Ref<T | undefined>;
1216
1232
 
1217
1233
  export declare type ComputedStateDefinition<TState extends ServiceState, TComputedState extends ServiceState> = {
1218
- [K in keyof TComputedState]: (state: TState) => TComputedState[K];
1234
+ [K in keyof TComputedState]: (state: UnrefServiceState<TState>) => TComputedState[K];
1219
1235
  } & ThisType<{
1220
1236
  readonly [K in keyof TComputedState]: TComputedState[K];
1221
1237
  }>;
@@ -1305,8 +1321,8 @@ snackbars: Snackbar[];
1305
1321
  export declare type DefaultServices = typeof defaultServices;
1306
1322
 
1307
1323
  declare const defaultServices: {
1308
- $app: Facade<AppService, Constructor<AppService>>;
1309
- $events: Facade<EventsService, Constructor<EventsService>>;
1324
+ $app: Facade<AppService, AppService>;
1325
+ $events: Facade<EventsService, EventsService>;
1310
1326
  };
1311
1327
 
1312
1328
  export declare type DefaultServiceState = any;
@@ -1317,12 +1333,16 @@ export declare function definePlugin<T extends Plugin_2>(plugin: T): T;
1317
1333
 
1318
1334
  export declare function defineServiceState<State extends ServiceState = ServiceState, ComputedState extends ServiceState = {}>(options: {
1319
1335
  name: string;
1320
- initialState: State;
1336
+ initialState: State | (() => State);
1321
1337
  persist?: (keyof State)[];
1322
1338
  computed?: ComputedStateDefinition<State, ComputedState>;
1323
1339
  serialize?: (state: Partial<State>) => Partial<State>;
1324
1340
  }): Constructor<UnrefServiceState<State>> & Constructor<ComputedState> & Constructor<Service<UnrefServiceState<State>, ComputedState, Partial<UnrefServiceState<State>>>>;
1325
1341
 
1342
+ export declare function defineServiceStore<Id extends string, S extends StateTree = {}, G extends _GettersTree<S> = {}, A = {}>(name: Id, options: Omit<DefineStoreOptions<Id, S, G, A>, 'id'>): Store<Id, S, G, A>;
1343
+
1344
+ export declare function dispatch(job: Job): Promise<void>;
1345
+
1326
1346
  export declare function enumProp<Enum extends Record<string, unknown>>(enumeration: Enum, defaultValue?: Enum[keyof Enum]): OptionalProp<Enum[keyof Enum]>;
1327
1347
 
1328
1348
  export declare type ErrorHandler = (error: ErrorSource) => boolean;
@@ -1349,7 +1369,7 @@ export declare const errorReportModalProps: {
1349
1369
  };
1350
1370
  };
1351
1371
 
1352
- export declare const Errors: Facade<ErrorsService, Constructor<ErrorsService>>;
1372
+ export declare const Errors: Facade<ErrorsService, ErrorsService>;
1353
1373
 
1354
1374
  export declare type ErrorSource = string | Error | JSError | unknown;
1355
1375
 
@@ -1362,7 +1382,6 @@ declare class ErrorsService extends _default {
1362
1382
  report(error: ErrorSource, message?: string): Promise<void>;
1363
1383
  see(report: ErrorReport): void;
1364
1384
  seeAll(): void;
1365
- getErrorMessage(error: ErrorSource): string;
1366
1385
  private logError;
1367
1386
  private createErrorReport;
1368
1387
  private createStartupErrorReport;
@@ -1374,23 +1393,42 @@ export declare type ErrorsServices = typeof services;
1374
1393
  declare type EventListener_2<T = unknown> = (payload: T) => unknown;
1375
1394
  export { EventListener_2 as EventListener }
1376
1395
 
1377
- export declare const Events: Facade<EventsService, Constructor<EventsService>>;
1396
+ declare interface EventListenerOptions_2 {
1397
+ priority: number;
1398
+ }
1399
+ export { EventListenerOptions_2 as EventListenerOptions }
1400
+
1401
+ export declare const EventListenerPriorities: {
1402
+ readonly Low: -256;
1403
+ readonly Default: 0;
1404
+ readonly High: 256;
1405
+ };
1406
+
1407
+ export declare const Events: Facade<EventsService, EventsService>;
1378
1408
 
1379
1409
  export declare interface EventsPayload {
1380
1410
  }
1381
1411
 
1382
1412
  export declare class EventsService extends Service {
1383
1413
  private listeners;
1414
+ protected boot(): Promise<void>;
1384
1415
  emit<Event extends EventWithoutPayload>(event: Event): Promise<void>;
1385
1416
  emit<Event extends EventWithPayload>(event: Event, payload: EventsPayload[Event]): Promise<void>;
1386
1417
  emit<Event extends string>(event: UnknownEvent<Event>, payload?: unknown): Promise<void>;
1387
1418
  on<Event extends EventWithoutPayload>(event: Event, listener: () => unknown): () => void;
1419
+ on<Event extends EventWithoutPayload>(event: Event, options: Partial<EventListenerOptions_2>, listener: () => unknown): () => void;
1388
1420
  on<Event extends EventWithPayload>(event: Event, listener: EventListener_2<EventsPayload[Event]>): () => void | void;
1421
+ on<Event extends EventWithPayload>(event: Event, options: Partial<EventListenerOptions_2>, listener: EventListener_2<EventsPayload[Event]>): () => void | void;
1389
1422
  on<Event extends string>(event: UnknownEvent<Event>, listener: EventListener_2): () => void;
1423
+ on<Event extends string>(event: UnknownEvent<Event>, options: Partial<EventListenerOptions_2>, listener: EventListener_2): () => void;
1390
1424
  once<Event extends EventWithoutPayload>(event: Event, listener: () => unknown): () => void;
1425
+ once<Event extends EventWithoutPayload>(event: Event, options: Partial<EventListenerOptions_2>, listener: () => unknown): () => void;
1391
1426
  once<Event extends EventWithPayload>(event: Event, listener: EventListener_2<EventsPayload[Event]>): () => void | void;
1427
+ once<Event extends EventWithPayload>(event: Event, options: Partial<EventListenerOptions_2>, listener: EventListener_2<EventsPayload[Event]>): () => void | void;
1392
1428
  once<Event extends string>(event: UnknownEvent<Event>, listener: EventListener_2): () => void;
1429
+ once<Event extends string>(event: UnknownEvent<Event>, options: Partial<EventListenerOptions_2>, listener: EventListener_2): () => void;
1393
1430
  off(event: string, listener: EventListener_2): void;
1431
+ protected registerListener(event: string, options: Partial<EventListenerOptions_2>, handler: EventListener_2): void;
1394
1432
  }
1395
1433
 
1396
1434
  export declare type EventWithoutPayload = {
@@ -1461,8 +1499,12 @@ export declare const FormFieldTypes: {
1461
1499
 
1462
1500
  export declare type FormFieldValue = GetFormFieldValue<FormFieldType>;
1463
1501
 
1502
+ export declare function getErrorMessage(error: ErrorSource): string;
1503
+
1464
1504
  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 : never;
1465
1505
 
1506
+ export declare function getPiniaStore(): Pinia;
1507
+
1466
1508
  export declare interface IAGErrorReportModalButtonsDefaultSlotProps {
1467
1509
  id: string;
1468
1510
  description: string;
@@ -1541,10 +1583,15 @@ export declare const inputProps: {
1541
1583
 
1542
1584
  export declare function installPlugins(plugins: Plugin_2[], ...args: GetClosureArgs<Plugin_2['install']>): Promise<void>;
1543
1585
 
1544
- export declare const Lang: Facade<LangService, Constructor<LangService>>;
1586
+ export declare abstract class Job {
1587
+ abstract run(): Promise<void>;
1588
+ }
1589
+
1590
+ export declare const Lang: Facade<LangService, LangService>;
1545
1591
 
1546
1592
  export declare interface LangProvider {
1547
1593
  translate(key: string, parameters?: Record<string, unknown>): string;
1594
+ translateWithDefault(key: string, defaultMessage: string, parameters?: Record<string, unknown>): string;
1548
1595
  }
1549
1596
 
1550
1597
  declare class LangService extends Service {
@@ -1552,8 +1599,7 @@ declare class LangService extends Service {
1552
1599
  constructor();
1553
1600
  setProvider(provider: LangProvider): void;
1554
1601
  translate(key: string, parameters?: Record<string, unknown>): string;
1555
- translateWithDefault(key: string, defaultMessage: string): string;
1556
- translateWithDefault(key: string, parameters: Record<string, unknown>, defaultMessage: string): string;
1602
+ translateWithDefault(key: string, defaultMessage: string, parameters?: Record<string, unknown>): string;
1557
1603
  }
1558
1604
 
1559
1605
  export declare type LangServices = typeof services_2;
@@ -1698,6 +1744,8 @@ export declare function requiredStringInput(defaultValue?: string): FormFieldDef
1698
1744
 
1699
1745
  export declare function requiredStringProp(): RequiredProp<string>;
1700
1746
 
1747
+ export declare function resetPiniaStore(): Pinia;
1748
+
1701
1749
  export declare const selectEmits: readonly ["update:modelValue"];
1702
1750
 
1703
1751
  export declare const selectProps: {
@@ -1738,10 +1786,11 @@ export declare class Service<State extends ServiceState = DefaultServiceState, C
1738
1786
  protected _name: string;
1739
1787
  private _booted;
1740
1788
  private _computedStateKeys;
1741
- private _store?;
1789
+ private _store;
1742
1790
  constructor();
1743
1791
  get booted(): PromisedValue<void>;
1744
1792
  launch(): Promise<void>;
1793
+ hasPersistedState(): boolean;
1745
1794
  hasState<P extends keyof State>(property: P): boolean;
1746
1795
  getState(): State;
1747
1796
  getState<P extends keyof State>(property: P): State[P];
@@ -1766,15 +1815,15 @@ export declare interface Services extends DefaultServices {
1766
1815
  }
1767
1816
 
1768
1817
  declare const services: {
1769
- $errors: Facade<ErrorsService, Constructor<ErrorsService>>;
1818
+ $errors: Facade<ErrorsService, ErrorsService>;
1770
1819
  };
1771
1820
 
1772
1821
  declare const services_2: {
1773
- $lang: Facade<LangService, Constructor<LangService>>;
1822
+ $lang: Facade<LangService, LangService>;
1774
1823
  };
1775
1824
 
1776
1825
  declare const services_3: {
1777
- $ui: Facade<UIService, Constructor<UIService>>;
1826
+ $ui: Facade<UIService, UIService>;
1778
1827
  };
1779
1828
 
1780
1829
  export declare type ServiceState = Record<string, any>;
@@ -1846,7 +1895,7 @@ export declare const translateWithDefault: {
1846
1895
  (key: string, parameters: Record<string, unknown>, defaultMessage: string): string;
1847
1896
  };
1848
1897
 
1849
- export declare const UI: Facade<UIService, Constructor<UIService>>;
1898
+ export declare const UI: Facade<UIService, UIService>;
1850
1899
 
1851
1900
  export declare type UIComponent = ObjectValues<typeof UIComponents>;
1852
1901
 
@@ -1953,6 +2002,7 @@ export declare function useSnackbarProps(): typeof snackbarProps;
1953
2002
  export { }
1954
2003
 
1955
2004
  export interface EventsPayload {
2005
+ 'application-ready': void;
1956
2006
  'application-mounted': void;
1957
2007
  }
1958
2008
 
@@ -1960,6 +2010,10 @@ export { }
1960
2010
  directives?: Record<string, Directive>;
1961
2011
  }
1962
2012
 
2013
+ export interface EventsPayload {
2014
+ error: { error: ErrorSource; message?: string };
2015
+ }
2016
+
1963
2017
  export interface AerogelOptions {
1964
2018
  handleError?(error: ErrorSource): boolean;
1965
2019
  }
@@ -1974,6 +2028,11 @@ declare module '@vue/runtime-core' {
1974
2028
  }
1975
2029
  }
1976
2030
 
2031
+ declare global {
2032
+ // eslint-disable-next-line no-var
2033
+ var __aerogelEvents__: AerogelGlobalEvents | undefined;
2034
+ }
2035
+
1977
2036
  export interface AerogelOptions {
1978
2037
  services?: Record<string, Service>;
1979
2038
  }
@@ -1982,12 +2041,19 @@ declare module '@vue/runtime-core' {
1982
2041
  interface ComponentCustomProperties extends Services {}
1983
2042
  }
1984
2043
 
2044
+ declare global {
2045
+ // eslint-disable-next-line no-var
2046
+ var testingRuntime: AerogelTestingRuntime | undefined;
2047
+ }
2048
+
1985
2049
  export interface EventsPayload {
1986
- 'modal-will-close': { modal: Modal; result?: unknown };
1987
- 'modal-closed': { modal: Modal; result?: unknown };
1988
2050
  'close-modal': { id: string; result?: unknown };
1989
2051
  'hide-modal': { id: string };
2052
+ 'hide-overlays-backdrop': void;
2053
+ 'modal-closed': { modal: Modal; result?: unknown };
2054
+ 'modal-will-close': { modal: Modal; result?: unknown };
1990
2055
  'show-modal': { id: string };
2056
+ 'show-overlays-backdrop': void;
1991
2057
  }
1992
2058
 
1993
2059
  export interface AerogelOptions {
@@ -1,2 +1,2 @@
1
- import{ref as e,computed as t,watch as r,inject as s,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 j,createTextVNode as M,toDisplayString as $,renderList as E,withModifiers as H,readonly as T,useSlots as I,createApp as R,resolveDirective as L,withDirectives as P}from"vue";import"core-js/modules/esnext.async-iterator.reduce.js";import"core-js/modules/esnext.iterator.constructor.js";import"core-js/modules/esnext.iterator.reduce.js";import"core-js/modules/esnext.async-iterator.map.js";import"core-js/modules/esnext.iterator.map.js";import O from"@babel/runtime/helpers/esm/defineProperty";import{JSError as B,MagicObject as V,PromisedValue as z,objectOnly as q,isEmpty as D,Storage as U,objectDeepClone as F,facade as N,arr as K,tap as W,updateLocationQueryParameters as Q,forever as Z,fail as Y,after as J,uuid as X,toString as ee,isObject as te,objectWithoutEmpty as re,objectWithout as se,noop as oe,stringExcerpt as ne}from"@noeldemartin/utils";import"core-js/modules/esnext.set.add-all.js";import"core-js/modules/esnext.set.delete-all.js";import"core-js/modules/esnext.set.difference.js";import"core-js/modules/esnext.set.every.js";import"core-js/modules/esnext.set.filter.js";import"core-js/modules/esnext.set.find.js";import"core-js/modules/esnext.set.intersection.js";import"core-js/modules/esnext.set.is-disjoint-from.js";import"core-js/modules/esnext.set.is-subset-of.js";import"core-js/modules/esnext.set.is-superset-of.js";import"core-js/modules/esnext.set.join.js";import"core-js/modules/esnext.set.map.js";import"core-js/modules/esnext.set.reduce.js";import"core-js/modules/esnext.set.some.js";import"core-js/modules/esnext.set.symmetric-difference.js";import"core-js/modules/esnext.set.union.js";import{defineStore as ae,createPinia as le,setActivePinia as ie}from"pinia";import ce from"virtual:aerogel";import"core-js/modules/esnext.async-iterator.filter.js";import"core-js/modules/esnext.iterator.filter.js";import"core-js/modules/esnext.string.at.js";import"core-js/modules/esnext.async-iterator.some.js";import"core-js/modules/esnext.iterator.some.js";import"core-js/modules/esnext.async-iterator.for-each.js";import"core-js/modules/esnext.iterator.for-each.js";import{Dialog as ue,DialogPanel as de,DialogTitle as pe,Listbox as me,ListboxButton as fe,ListboxLabel as he,ListboxOption as ve,ListboxOptions as ge}from"@headlessui/vue";export{ListboxOptions as AGHeadlessSelectOptions}from"@headlessui/vue";import _e from"dompurify";import{marked as be,Renderer as ye}from"marked";import"core-js/modules/esnext.weak-map.delete-all.js";import"core-js/modules/esnext.weak-map.emplace.js";class ServiceBootError extends B{constructor(e,t){super(`Service '${e}' failed booting`,{cause:t})}}let xe=null;function Ae(){return xe||(xe=le(),ie(xe)),xe}function we(e){var t;return O(t=class extends Ge{usesStore(){return!0}getName(){return e.name??null}getInitialState(){return e.initialState}getComputedStateDefinition(){return e.computed??{}}serializePersistedState(t){return e.serialize?.(t)??t}},"persist",e.persist??[]),t}class Ge extends V{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();var t,r;this._name=this.getName()??new.target.name,this._booted=new z,this._computedStateKeys=new Set(Object.keys(e)),this._store=this.usesStore()&&(t=this._name,r={state:()=>this.getInitialState(),getters:e},Ae(),ae(t,r)())}get booted(){return this._booted}launch(){const handleError=e=>this._booted.reject(new ServiceBootError(this._name,e));try{this.frameworkBoot().then((()=>this.boot())).then((()=>this._booted.resolve())).catch(handleError)}catch(e){handleError(e)}return this._booted}hasState(e){return!!this._store&&(e in this._store.$state||this._computedStateKeys.has(e))}getState(e){const t=this._store;return e?t?t[e]:void 0:t||{}}setState(e,t){if(!this._store)return;const r="string"==typeof e?{[e]:t}:e;Object.assign(this._store.$state,r),this.onStateUpdated(r)}__get(e){return this.hasState(e)?this.getState(e):super.__get(e)}__set(e,t){this.setState({[e]:t})}onStateUpdated(e){const t=this.constructor.persist,r=q(e,t);if(D(r))return;const s=U.get(this._name);s&&U.set(this._name,{...s,...this.serializePersistedState(F(r))})}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()&&!D(e))if(U.has(this._name)){const e=U.require(this._name);this.setState(e)}else U.set(this._name,q(this.getState(),e))}}O(Ge,"persist",[]);class ke extends Ge{constructor(){super(...arguments),O(this,"listeners",{})}async emit(e,t){const r=[...this.listeners[e]??[]];await Promise.all(r.map((e=>e(t)))??[])}on(e,t){return(this.listeners[e]??=K([])).push(t),()=>this.off(e,t)}once(e,t){let r=null;return W((()=>r&&this.off(e,r)),(s=>{(this.listeners[e]??=K([])).push(r=function(){return s(),t(...arguments)})}))}off(e,t){const r=this.listeners[e];r&&(r.remove(t),r.isEmpty()&&delete this.listeners[e])}}var Se=N(new ke),Ce=we({name:"app",initialState:{plugins:{},environment:ce.environment,sourceUrl:ce.sourceUrl},computed:{development:e=>"development"===e.environment,testing:e=>"testing"===e.environment}});class je extends Ce{constructor(){super(...arguments),O(this,"ready",new z),O(this,"mounted",new z)}isReady(){return this.ready.isResolved()}isMounted(){return this.mounted.isResolved()}async reload(e){e&&Q(e),location.reload(),await Z()}plugin(e){return this.plugins[e]??null}async boot(){Se.once("application-ready",(()=>this.ready.resolve())),Se.once("application-mounted",(()=>this.mounted.resolve()))}}var Me=N(new je);function $e(e){return e}async function Ee(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),s=1;s<t;s++)r[s-1]=arguments[s];Me.setState("plugins",e.reduce(((e,t)=>(t.name&&(e[t.name]=t),e)),{})),await Promise.all(e.map((e=>e.install(...r)))??[])}function He(e){return{type:Array,default:e??(()=>[])}}function Te(){return{type:Boolean,default:arguments.length>0&&void 0!==arguments[0]&&arguments[0]}}function Ie(){return e()}function Re(s){const o=e(),n=t(s);return r(n,(async()=>o.value=await n.value),{immediate:!0}),o}function Le(e){return e}function Pe(e,t){const r=Object.values(e);return{type:String,default:t??r[0]??null,validator:e=>r.includes(e)}}function Oe(e){const t=s(e);return t?o(t):void 0}function Be(e,t){return Oe(e)??Y(t??`Could not resolve '${e}' injection key`)}function Ve(e,t){return s(e)??Y(t??`Could not resolve '${e}' injection key`)}function ze(e){return{type:e,default:null}}function qe(){return{type:Number,default:arguments.length>0&&void 0!==arguments[0]?arguments[0]:null}}function De(){return{type:Object,default:arguments.length>0&&void 0!==arguments[0]?arguments[0]:null}}function Ue(){return{type:Array,required:!0}}function Fe(e){const t=Object.values(e);return{type:String,required:!0,validator:e=>t.includes(e)}}function Ne(e){return{type:e,required:!0}}function Ke(){return{type:Number,required:!0}}function We(){return{type:Object,required:!0}}function Qe(){return{type:String,required:!0}}function Ze(){return{type:String,default:arguments.length>0&&void 0!==arguments[0]?arguments[0]:null}}const Ye={"initial-focus":{mounted(e,t){let{value:r}=t;!1!==r&&e.focus()}},measure:{mounted(e,t){let{value:r}=t;const s=e.getBoundingClientRect();e.style.setProperty("--width",`${s.width}px`),e.style.setProperty("--height",`${s.height}px`),r?.()}}};var Je={install(e,t){const r={...Ye,...t.directives};for(const[t,s]of Object.entries(r))e.directive(t,s)}};const Xe={$app:Me,$events:Se};async function et(e,t){await Promise.all(Object.entries(t).map((async t=>{let[r,s]=t;await s.launch().catch((t=>e.config.errorHandler?.(t,null,`Failed launching ${r}.`)))}))),Object.assign(e.config.globalProperties,t),Me.development&&Object.assign(window,t)}var tt={async install(e,t){const r={...Xe,...t.services};e.use(xe??Ae()),await et(e,r)}},rt=we({name:"ui",initialState:{modals:[],snackbars:[]}});const st={AlertModal:"alert-modal",ConfirmModal:"confirm-modal",ErrorReportModal:"error-report-modal",LoadingModal:"loading-modal",PromptModal:"prompt-modal",Snackbar:"snackbar",StartupCrash:"startup-crash"};class ot extends rt{constructor(){super(...arguments),O(this,"modalCallbacks",{}),O(this,"components",{})}requireComponent(e){return this.components[e]??Y(`UI Component '${e}' is not defined!`)}alert(e,t){this.openModal(this.requireComponent(st.AlertModal),"string"!=typeof t?{message:e}:{title:e,message:t})}async confirm(e,t,r){const s=await this.openModal(this.requireComponent(st.ConfirmModal),"string"!=typeof t?{message:e,...t??{}}:{title:e,message:t,...r??{}});return await s.beforeClose??!1}async prompt(e,t,r){const s=await this.openModal(this.requireComponent(st.PromptModal),"string"!=typeof t?{message:e,...t??{}}:{title:e,message:t,...r??{}});return await s.beforeClose??null}async loading(e,t){const r=await this.openModal(this.requireComponent(st.LoadingModal),"string"!=typeof e?{}:{message:e});try{t="string"==typeof e?t:e;const[r]=await Promise.all([t,J({seconds:1})]);return r}finally{await this.closeModal(r.id)}}showSnackbar(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r={id:X(),properties:{message:e,...t},component:t.component??n(this.requireComponent(st.Snackbar))};this.setState("snackbars",this.snackbars.concat(r)),setTimeout((()=>this.hideSnackbar(r.id)),5e3)}hideSnackbar(e){this.setState("snackbars",this.snackbars.filter((t=>t.id!==e)))}registerComponent(e,t){this.components[e]=t}async openModal(e,t){const r=X(),s={},o={id:r,properties:t??{},component:n(e),beforeClose:new Promise((e=>s.willClose=e)),afterClose:new Promise((e=>s.closed=e))},l=this.modals.at(-1),i=this.modals.concat(o);return this.modalCallbacks[o.id]=s,this.setState({modals:i}),await a(),await(l&&Se.emit("hide-modal",{id:l.id})),await Promise.all([l||Se.emit("show-overlays-backdrop"),Se.emit("show-modal",{id:o.id})]),o}async closeModal(e,t){await Se.emit("close-modal",{id:e,result:t})}async boot(){this.watchModalEvents(),this.watchMountedEvent()}watchModalEvents(){Se.on("modal-will-close",(e=>{let{modal:t,result:r}=e;this.modalCallbacks[t.id]?.willClose?.(r),1===this.modals.length&&Se.emit("hide-overlays-backdrop")})),Se.on("modal-closed",(async e=>{let{modal:t,result:r}=e;this.setState("modals",this.modals.filter((e=>e.id!==t.id))),this.modalCallbacks[t.id]?.closed?.(r),delete this.modalCallbacks[t.id];const s=this.modals.at(-1);await(s&&Se.emit("show-modal",{id:s.id}))}))}watchMountedEvent(){Se.once("application-mounted",(async()=>{const e=document.getElementById("splash");e&&("0"!==window.getComputedStyle(e).opacity&&(e.style.opacity="0",await J({ms:600})),e.remove())}))}}var nt=N(new ot);var at=N(new class extends Ge{constructor(){super(),O(this,"provider",void 0),this.provider={translate:e=>(Me.development&&console.warn("Lang provider is missing"),e)}}setProvider(e){this.provider=e}translate(e,t){return this.provider.translate(e,t)??e}translateWithDefault(e,t,r){r??=t;const s="string"==typeof t?{}:t??{},o=this.provider.translate(e,s)??e;return o===e?Object.entries(s).reduce(((e,t)=>{let[r,s]=t;return e.replace(new RegExp(`\\{\\s*${r}\\s*\\}`,"g"),ee(s))}),r):o}});const lt=at.translate.bind(at),it=at.translateWithDefault.bind(at);var ct=we({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 ut={Primary:"primary",Secondary:"secondary",Danger:"danger",Clear:"clear"};var dt=N(new class extends ct{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?nt.openModal(nt.requireComponent(st.ErrorReportModal),{reports:t}):nt.alert(it("errors.inspectEmpty","Nothing to inspect!"))}async report(e,t){if((Me.development||Me.testing)&&this.logError(e),!this.enabled)throw e;if(!Me.isMounted()){const t=await this.createStartupErrorReport(e);return void(t&&this.setState({startupErrors:this.startupErrors.concat(t)}))}const r=await this.createErrorReport(e),s={report:r,seen:!1,date:new Date};nt.showSnackbar(t??it("errors.notice","Something went wrong, but it's not your fault. Try again!"),{color:ut.Danger,actions:[{text:it("errors.viewDetails","View details"),dismiss:!0,handler:()=>nt.openModal(nt.requireComponent(st.ErrorReportModal),{reports:[r]})}]}),this.setState({logs:[s].concat(this.logs)})}see(e){this.setState({logs:this.logs.map((t=>t.report!==e?t:{...t,seen:!0}))})}seeAll(){this.setState({logs:this.logs.map((e=>({...e,seen:!0})))})}getErrorMessage(e){return"string"==typeof e?e:e instanceof Error||e instanceof B?e.message:te(e)?ee(e.message??e.description??"Unknown error object"):it("errors.unknown","Unknown Error")}logError(e){console.error(e),te(e)&&e.cause&&this.logError(e.cause)}async createErrorReport(e){return"string"==typeof e?{title:e}:e instanceof Error||e instanceof B?this.createErrorReportFromError(e):te(e)?re({title:ee(e.name??e.title??it("errors.unknown","Unknown Error")),description:ee(e.message??e.description??it("errors.unknownDescription","Unknown error object")),error:e}):{title:it("errors.unknown","Unknown Error"),error:e}}async createStartupErrorReport(e){return e instanceof ServiceBootError?e.cause instanceof ServiceBootError?null:this.createErrorReport(e.cause):this.createErrorReport(e)}createErrorReportFromError(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return{title:e.name,description:e.message,details:e.stack,error:e,...t}}});const pt={$errors:dt};function mt(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:()=>!1;const r=e=>t(e)||(e=>dt.instance?(dt.report(e),!0):(console.warn("Errors service hasn't been initialized properly!"),console.error(e),!0))(e);e.config.errorHandler=r,globalThis.onerror=(e,t,s,o,n)=>r(n??e),globalThis.onunhandledrejection=e=>r(e.reason)}var ft={async install(e,t){mt(e,t.handleError),await et(e,pt)}};const ht={$lang:at};var vt={async install(e){e.config.globalProperties.$t??=lt,e.config.globalProperties.$td=it,await et(e,ht)}};function gt(e,t){const r=Se.on(e,t);l((()=>r()))}function _t(){const e=i(),r=t((()=>e.class));return[t((()=>se(e,"class"))),r]}function bt(e){let t=oe;c((()=>t=e())),l((()=>t()))}function yt(e){return e.split(/\s+/).filter((e=>!/^(hover|focus|focus-visible):/.test(e))).join(" ").trim()}function xt(e,t){return Object.keys(t).reduce(((t,r)=>(t[r]=e[r],t)),{})}const At={cancellable:Te(!0),title:Ze()};function wt(){return At}function Gt(e){return xt(e,At)}function kt(e){return{close:async()=>e.value?.close(),cancellable:t((()=>!!e.value?.cancellable))}}var St=u({__name:"AGHeadlessModal",props:wt(),setup(t,{expose:r}){const s=t,o=e(null),n=e(!0),a=e(!1),{modal:l}=Be("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||(Se.emit("modal-will-close",{modal:l,result:e}),await i(),a.value=!0,Se.emit("modal-closed",{modal:l,result:e}))}return gt("close-modal",(async({id:e,result:t})=>{e===l.id&&await c(t)})),gt("hide-modal",(async({id:e})=>{e===l.id&&await i()})),gt("show-modal",(async({id:e})=>{e===l.id&&await async function(){o.value?.$el&&(n.value=!1)}()})),r({close:c,cancellable:d(s,"cancellable")}),(e,t)=>(p(),m(f(ue),{ref_key:"$root",ref:o,open:!0,onClose:t[0]||(t[0]=t=>e.cancellable&&c())},{default:h((()=>[v(e.$slots,"default",{close:c})])),_:3},512))}});St.__file="src/components/headless/modals/AGHeadlessModal.vue";var Ct=u({__name:"AGModalContext",props:{modal:We(),childIndex:Ke()},setup(e){const t=e;return g("modal",{modal:d(t,"modal"),childIndex:d(t,"childIndex")}),(t,r)=>(p(),m(_(e.modal.component),b(y(e.modal.properties)),null,16))}});Ct.__file="src/components/modals/AGModalContext.vue";const jt=k("div",{class:"pointer-events-none fixed inset-0 z-50 bg-black/30"},null,-1);var Mt=u({__name:"AGHeadlessModalPanel",setup(e){const r=Be("modal","could not obtain modal reference from <AGHeadlessModalPanel>, did you render this component manually? Show it using $ui.openModal() instead"),s=t((()=>nt.modals[r.childIndex]??null));return(e,t)=>(p(),m(f(de),null,{default:h((()=>[v(e.$slots,"default"),s.value?(p(),x(A,{key:0},[jt,w(Ct,{"child-index":f(r).childIndex+1,modal:s.value},null,8,["child-index","modal"])],64)):G("v-if",!0)])),_:3}))}});Mt.__file="src/components/headless/modals/AGHeadlessModalPanel.vue";var $t=u({__name:"AGHeadlessModalTitle",props:{as:Ze("h2")},setup:e=>(t,r)=>(p(),m(f(pe),{as:e.as},{default:h((()=>[v(t.$slots,"default")])),_:3},8,["as"]))});function Et(e){return t=be(e,{mangle:!1,headerIds:!1,renderer:W(new ye,(e=>{e.link=function(e,t,r){return ye.prototype.link.apply(this,[e,t,r]).replace("<a",'<a target="_blank"')}}))}),_e.sanitize(t,{ADD_ATTR:["target"]});var t}$t.__file="src/components/headless/modals/AGHeadlessModalTitle.vue";var Ht=u({__name:"AGMarkdown",props:{as:Ze(),inline:Te(),langKey:Ze(),langParams:De(),text:Ze()},setup(e){const r=e,s=t((()=>r.text??(r.langKey&&lt(r.langKey,r.langParams??{})))),o=t((()=>{if(!s.value)return null;let e=Et(s.value);return r.inline&&(e=e.replace("<p>","<span>").replace("</p>","</span>")),e})),n=()=>S(r.as??(r.inline?"span":"div"),{class:r.inline?"":"prose",innerHTML:o.value});return(e,t)=>(p(),m(n))}});Ht.__file="src/components/lib/AGMarkdown.vue";const Tt={class:"fixed inset-0 flex items-center justify-center p-8"};var It=u({inheritAttrs:!1,__name:"AGModal",props:wt(),setup(t,{expose:r}){const s=t,o=e();return r(kt(o)),(e,t)=>(p(),m(St,C({ref_key:"$modal",ref:o},s,{class:"relative z-50"}),{default:h((({close:t})=>[k("div",Tt,[w(Mt,{class:"flex max-h-full max-w-full flex-col overflow-hidden bg-white p-4"},{default:h((()=>[e.title?(p(),m($t,{key:0,class:"mb-2 text-lg font-semibold"},{default:h((()=>[w(Ht,{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))}});It.__file="src/components/modals/AGModal.vue";const Rt={title:Ze(),message:Qe()};function Lt(){return Rt}var Pt=u({__name:"AGAlertModal",props:Lt(),setup:e=>(e,t)=>(p(),m(It,{title:e.title},{default:h((()=>[w(Ht,{text:e.message},null,8,["text"])])),_:1},8,["title"]))});Pt.__file="src/components/modals/AGAlertModal.vue";const Ot={title:Ze(),message:Qe(),acceptText:Ze(),cancelText:Ze()};function Bt(){return Ot}function Vt(e){return{renderedAcceptText:t((()=>e.acceptText??it("ui.accept","Ok"))),renderedCancelText:t((()=>e.cancelText??it("ui.cancel","Cancel")))}}var zt=u({__name:"AGHeadlessButton",props:{href:Ze(),url:Ze(),route:Ze(),routeParams:De((()=>({}))),routeQuery:De((()=>({}))),submit:Te()},setup(e){const{href:r,url:s,route:o,routeParams:n,routeQuery:a,submit:l}=e,i=t((()=>o?{tag:"router-link",props:{to:re({name:o,params:n,query:a})}}:r||s?{tag:"a",props:{target:"_blank",href:r||s}}:{tag:"button",props:{type:l?"submit":"button"}}));return(e,t)=>(p(),m(_(i.value.tag),b(y(i.value.props)),{default:h((()=>[v(e.$slots,"default")])),_:3},16))}});zt.__file="src/components/headless/forms/AGHeadlessButton.vue";var qt=u({__name:"AGButton",props:{color:Pe(ut,ut.Primary)},setup(e){const r=e,s=t((()=>{switch(r.color){case ut.Secondary:return["text-white bg-gray-600","hover:bg-gray-500","focus-visible:outline-offset-2 focus-visible:outline-gray-600"].join(" ");case ut.Clear:return"hover:bg-gray-500/20 focus-visible:outline-gray-500/60";case ut.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:j(["px-2.5 py-1.5 focus-visible:outline focus-visible:outline-2",s.value])},{default:h((()=>[v(e.$slots,"default")])),_:3},8,["class"]))}});qt.__file="src/components/forms/AGButton.vue";const Dt={class:"mt-2 flex flex-row-reverse gap-2"};var Ut=u({__name:"AGConfirmModal",props:Bt(),setup(e){const t=e,{renderedAcceptText:r,renderedCancelText:s}=Vt(t);return(e,t)=>(p(),m(It,{cancellable:!1,title:e.title},{default:h((({close:t})=>[w(Ht,{text:e.message},null,8,["text"]),k("div",Dt,[w(qt,{onClick:e=>t(!0)},{default:h((()=>[M($(f(r)),1)])),_:2},1032,["onClick"]),w(qt,{color:"secondary",onClick:e=>t()},{default:h((()=>[M($(f(s)),1)])),_:2},1032,["onClick"])])])),_:1},8,["title"]))}});Ut.__file="src/components/modals/AGConfirmModal.vue";const Ft={viewBox:"0 0 20 20",width:"1.2em",height:"1.2em"},Nt=[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 Kt={name:"zondicons-cheveron-right",render:function(e,t){return p(),x("svg",Ft,[...Nt])}};const Wt={viewBox:"0 0 20 20",width:"1.2em",height:"1.2em"},Qt=[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 Zt={name:"zondicons-cheveron-left",render:function(e,t){return p(),x("svg",Wt,[...Qt])}};const Yt={reports:Ue()};function Jt(){return Yt}function Xt(r){const s=e(0),o=t((()=>r.reports[s.value])),n=t((()=>o.value.details?.trim()||it("errors.detailsEmpty","This error is missing a stacktrace."))),a=it("errors.previousReport","Show previous report"),l=it("errors.nextReport","Show next report");return{activeReportIndex:s,details:n,nextReportText:l,previousReportText:a,report:o}}const er={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},tr=[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 rr={name:"mdi-console",render:function(e,t){return p(),x("svg",er,[...tr])}};const sr={viewBox:"0 0 20 20",width:"1.2em",height:"1.2em"},or=[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 nr={name:"zondicons-copy",render:function(e,t){return p(),x("svg",sr,[...or])}};const ar={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},lr=[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 ir={name:"mdi-github",render:function(e,t){return p(),x("svg",ar,[...lr])}};const cr={class:"flex"};var ur=u({__name:"AGErrorReportModalButtons",props:{report:We()},setup(e){const r=e,s=t((()=>r.report.description?`${r.report.title}: ${r.report.description}`:r.report.title)),o=t((()=>{if(!Me.sourceUrl)return!1;const e=encodeURIComponent(s.value),t=encodeURIComponent(["[Please, explain here what you were trying to do when this error appeared]","","Error details:","```",ne(r.report.details??"Details missing from report",1800-e.length-Me.sourceUrl.length).trim(),"```"].join("\n"));return`${Me.sourceUrl}/issues/new?title=${e}&body=${t}`})),n=t((()=>W([{id:"clipboard",description:"Copy to clipboard",iconComponent:nr,async handler(){await navigator.clipboard.writeText(`${s.value}\n\n${r.report.details}`),nt.showSnackbar(it("errors.copiedToClipboard","Debug information copied to clipboard"))}},{id:"console",description:"Log to console",iconComponent:rr,handler(){const e=r.report.error??r.report;window.error=e,console.error(e),nt.showSnackbar(it("errors.addedToConsole","You can now use the **error** variable in the console"))}}],(e=>{o.value&&e.push({id:"github",description:"Report in GitHub",iconComponent:ir,url:o.value})}))));return(e,t)=>(p(),x("div",cr,[(p(!0),x(A,null,E(n.value,((t,r)=>v(e.$slots,"default",C(t,{key:r}),(()=>[w(qt,{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))]))}});ur.__file="src/components/modals/AGErrorReportModalButtons.vue";var dr=u({__name:"AGErrorReportModalTitle",props:{report:We(),currentReport:qe(),totalReports:qe()},setup(e){const r=e,s=t((()=>!r.totalReports||r.totalReports<=1?r.report.title:`${r.report.title} (${r.currentReport}/${r.totalReports})`));return(e,t)=>(p(),m(Ht,{text:s.value,inline:""},null,8,["text"]))}});dr.__file="src/components/modals/AGErrorReportModalTitle.vue";const pr={class:"flex items-center justify-between text-lg font-medium"},mr={class:"flex items-center"},fr=["textContent"];var hr=u({__name:"AGErrorReportModal",props:Jt(),setup(e){const t=e,{activeReportIndex:r,details:s,nextReportText:o,previousReportText:n,report:a}=Xt(t);return(e,t)=>(p(),m(It,null,{default:h((()=>[k("div",null,[k("h2",pr,[k("div",mr,[w(dr,{report:f(a),"current-report":f(r)+1,"total-reports":e.reports.length},null,8,["report","current-report","total-reports"]),e.reports.length>1?(p(),x(A,{key:0},[w(qt,{color:"clear",disabled:0===f(r),title:f(n),"aria-label":f(n),onClick:t[0]||(t[0]=e=>r.value--)},{default:h((()=>[w(f(Zt),{"aria-hidden":"true",class:"h-4 w-4"})])),_:1},8,["disabled","title","aria-label"]),w(qt,{color:"clear",disabled:f(r)===e.reports.length-1,title:f(o),"aria-label":f(o),onClick:t[1]||(t[1]=e=>r.value++)},{default:h((()=>[w(f(Kt),{"aria-hidden":"true",class:"h-4 w-4"})])),_:1},8,["disabled","title","aria-label"])],64)):G("v-if",!0)]),w(ur,{report:f(a)},null,8,["report"])]),f(a).description?(p(),m(Ht,{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:$(f(s))},null,8,fr)])),_:1}))}});hr.__file="src/components/modals/AGErrorReportModal.vue";const vr={message:Ze()};function gr(){return vr}function _r(e){return{renderedMessage:t((()=>e.message??it("ui.loading","Loading...")))}}var br=u({__name:"AGLoadingModal",props:gr(),setup(e){const t=e,{renderedMessage:r}=_r(t);return(e,t)=>(p(),m(It,{cancellable:!1},{default:h((()=>[w(Ht,{text:f(r)},null,8,["text"])])),_:1}))}});br.__file="src/components/modals/AGLoadingModal.vue";const yr={title:Ze(),message:Qe(),label:Ze(),defaultValue:Ze(),placeholder:Ze(),acceptText:Ze(),cancelText:Ze()};function xr(){return yr}function Ar(e){return{renderedAcceptText:t((()=>e.acceptText??it("ui.accept","Ok"))),renderedCancelText:t((()=>e.cancelText??it("ui.cancel","Cancel")))}}var wr=u({__name:"AGForm",props:{form:De()},emits:["submit"],setup(e,{emit:t}){const r=e,s=t;function o(){r.form&&!r.form.submit()||s("submit")}return g("form",r.form),(e,t)=>(p(),x("form",{onSubmit:H(o,["prevent"])},[v(e.$slots,"default")],32))}});wr.__file="src/components/forms/AGForm.vue";const Gr={name:Ze(),label:Ze()};function kr(){return Gr}function Sr(e){return xt(e,Gr)}var Cr=u({__name:"AGHeadlessInput",props:{as:Ze("div"),modelValue:ze([String,Number,Boolean]),...kr()},emits:["update:modelValue"],setup(e,{expose:r,emit:o}){const n=o,a=e,l=t((()=>i&&a.name?i.errors[a.name]??null:null)),i=s("form",null),c={id:`input-${X()}`,name:t((()=>a.name)),label:t((()=>a.label)),value:t((()=>i&&a.name?i.getFieldValue(a.name):a.modelValue)),errors:T(l),update(e){i&&a.name?i.setFieldValue(a.name,e):n("update:modelValue",e)}};return g("input",c),r(c),(t,r)=>e.as?(p(),m(_(e.as),{key:0},{default:h((()=>[v(t.$slots,"default")])),_:3})):v(t.$slots,"default",{key:1})}});Cr.__file="src/components/headless/forms/AGHeadlessInput.vue";const jr=["id"];var Mr=u({__name:"AGHeadlessInputError",setup(e){const r=Be("input","<AGHeadlessInputError> must be a child of a <AGHeadlessInput>"),s=t((()=>r.errors?it(`errors.${r.errors[0]}`,`Error: ${r.errors[0]}`):null));return(e,t)=>s.value?(p(),x("p",{key:0,id:`${f(r).id}-error`},$(s.value),9,jr)):G("v-if",!0)}});Mr.__file="src/components/headless/forms/AGHeadlessInputError.vue";const $r=["id","type","value","aria-invalid","aria-describedby","checked"];var Er=u({__name:"AGHeadlessInputInput",props:{type:Ze("text")},setup(r){const s=r,o=e(),n=Be("input","<AGHeadlessInputInput> must be a child of a <AGHeadlessInput>"),a=t((()=>n.value)),l=t((()=>{if("checkbox"===s.type)return!!a.value}));function i(){o.value&&n.update("checkbox"===s.type?o.value.checked:o.value.value)}return(e,t)=>(p(),x("input",{id:f(n).id,ref_key:"$input",ref:o,type:r.type,value:a.value,"aria-invalid":f(n).errors?"true":"false","aria-describedby":f(n).errors?`${f(n).id}-error`:void 0,checked:l.value,onInput:i},null,40,$r))}});Er.__file="src/components/headless/forms/AGHeadlessInputInput.vue";const Hr=["for"];var Tr=u({__name:"AGHeadlessInputLabel",setup(e){const r=Be("input","<AGHeadlessInputLabel> must be a child of a <AGHeadlessInput>"),s=I(),o=t((()=>!(!r.label&&!s.default)));return(e,t)=>o.value?(p(),x("label",{key:0,for:f(r).id},[v(e.$slots,"default",{},(()=>[M($(f(r).label),1)]))],8,Hr)):G("v-if",!0)}});Tr.__file="src/components/headless/forms/AGHeadlessInputLabel.vue";const Ir={class:"absolute bottom-0 left-0 translate-y-full"};var Rr=u({inheritAttrs:!1,__name:"AGInput",props:kr(),setup(e){const t=e,r=Ie(),[s,o]=_t();return(e,n)=>(p(),m(Cr,C({ref_key:"$input",ref:r,class:["relative flex flex-col items-center",f(o)]},t),{default:h((()=>[w(Tr,{class:"sr-only"}),w(Er,C(f(s),{class:["block w-full border-0 py-1.5 text-gray-900 ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600",{"ring-1 ring-red-500":f(r)?.errors}]}),null,16,["class"]),k("div",Ir,[w(Mr,{class:"mt-1 text-sm text-red-500"})])])),_:1},16,["class"]))}});Rr.__file="src/components/forms/AGInput.vue";const Lr={String:"string",Number:"number",Boolean:"boolean",Object:"object"},Pr=new WeakMap;class Or extends V{constructor(r){super(),O(this,"errors",void 0),O(this,"_fields",void 0),O(this,"_data",void 0),O(this,"_submitted",void 0),O(this,"_errors",void 0),this._fields=r,this._submitted=e(!1),this._data=this.getInitialData(r),this._errors=this.getInitialErrors(r),Pr.set(this,t((()=>!Object.values(this._errors).some((e=>null!==e))))),this.errors=T(this._errors)}get valid(){return!!Pr.get(this)?.value}get submitted(){return this._submitted.value}setFieldValue(e,t){this._data[e]=t,this._submitted.value&&this.validate()}getFieldValue(e){return this._data[e]}validate(){const e=Object.entries(this._fields).reduce(((e,t)=>{let[r,s]=t;return e[r]=this.getFieldErrors(r,s),e}),{});return this.resetErrors(e),this.valid}reset(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this._submitted.value=!1,e.keepData||this.resetData(),e.keepErrors||this.resetErrors()}submit(){return this._submitted.value=!0,this.validate()}__get(e){return e in this._fields?this._data[e]:super.__get(e)}__set(e,t){e in this._fields?Object.assign(this._data,{[e]:t}):super.__set(e,t)}getFieldErrors(e,t){const r=[];return t.rules?.includes("required")&&!this._data[e]&&r.push("required"),r.length>0?r:null}getInitialData(e){if(this.static().isConjuring())return{};const t=Object.entries(e).reduce(((e,t)=>{let[r,s]=t;return e[r]=s.default??null,e}),{});return 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 Br(e){return new Or(e)}function Vr(e){return{default:e,type:Lr.Boolean}}function zr(e){return{default:e,type:Lr.Boolean,rules:"required"}}function qr(e){return{default:e,type:Lr.Number,rules:"required"}}function Dr(e){return{default:e,type:Lr.String,rules:"required"}}function Ur(e){return{default:e,type:Lr.Number}}function Fr(e){return{default:e,type:Lr.String}}const Nr={class:"mt-2 flex flex-row-reverse gap-2"};var Kr=u({__name:"AGPromptModal",props:xr(),setup(e){const t=e,r=Br({draft:Dr(t.defaultValue??"")}),{renderedAcceptText:s,renderedCancelText:o}=Ar(t);return(e,t)=>(p(),m(It,{cancellable:!1,title:e.title},{default:h((({close:t})=>[w(Ht,{text:e.message},null,8,["text"]),w(wr,{form:f(r),onSubmit:e=>t(f(r).draft)},{default:h((()=>[w(Rr,{name:"draft",placeholder:e.placeholder,label:e.label},null,8,["placeholder","label"]),k("div",Nr,[w(qt,{submit:""},{default:h((()=>[M($(f(s)),1)])),_:1}),w(qt,{color:"secondary",onClick:e=>t()},{default:h((()=>[M($(f(o)),1)])),_:2},1032,["onClick"])])])),_:2},1032,["form","onSubmit"])])),_:1},8,["title"]))}});Kr.__file="src/components/modals/AGPromptModal.vue";const Wr={class:"pointer-events-auto"};var Qr=u({__name:"AGHeadlessSnackbar",setup:e=>(e,t)=>(p(),x("div",Wr,[v(e.$slots,"default")]))});Qr.__file="src/components/headless/snackbars/AGHeadlessSnackbar.vue";const Zr=se(ut,["Primary","Clear"]),Yr={id:Qe(),message:Qe(),actions:He((()=>[])),color:Pe(Zr,ut.Secondary)};function Jr(){return Yr}function Xr(e){return{activate:function(t){t.handler?.(),t.dismiss&&nt.hideSnackbar(e.id)}}}var es=u({__name:"AGSnackbar",props:Jr(),setup(e){const r=e,{activate:s}=Xr(r),o=t((()=>r.color===ut.Danger?"bg-red-200 text-red-900":"bg-gray-900 text-white"));return(e,t)=>(p(),m(Qr,{class:j(["flex flex-row items-center justify-center gap-3 p-4",o.value])},{default:h((()=>[w(Ht,{text:e.message,inline:""},null,8,["text"]),(p(!0),x(A,null,E(e.actions,((t,r)=>(p(),m(qt,{key:r,color:e.color,onClick:e=>f(s)(t)},{default:h((()=>[M($(t.text),1)])),_:2},1032,["color","onClick"])))),128))])),_:1},8,["class"]))}});es.__file="src/components/snackbars/AGSnackbar.vue";const ts={class:"grid flex-grow place-items-center"},rs={class:"flex flex-col items-center space-y-6 p-8"},ss={class:"mt-2 text-center text-4xl font-medium text-red-600"},os={class:"mt-4 flex flex-col space-y-4"};var ns=u({__name:"AGStartupCrash",setup:e=>(e,t)=>(p(),x("div",ts,[k("div",rs,[k("h1",ss,$(e.$td("startupCrash.title","Something went wrong!")),1),w(Ht,{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",os,[w(qt,{color:"danger",onClick:t[0]||(t[0]=t=>e.$app.reload())},{default:h((()=>[M($(e.$td("startupCrash.reload","Try again")),1)])),_:1}),w(qt,{color:"danger",onClick:t[1]||(t[1]=t=>e.$errors.inspect(e.$errors.startupErrors))},{default:h((()=>[M($(e.$td("startupCrash.inspect","View error details")),1)])),_:1})])])]))});ns.__file="src/components/lib/AGStartupCrash.vue";const as={$ui:nt};var ls={async install(e,t){const r={[st.AlertModal]:Pt,[st.ConfirmModal]:Ut,[st.ErrorReportModal]:hr,[st.LoadingModal]:br,[st.PromptModal]:Kr,[st.Snackbar]:es,[st.StartupCrash]:ns};Object.entries({...r,...t.components}).forEach((e=>{let[t,r]=e;return nt.registerComponent(t,r)})),await et(e,as)}};async function is(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r=[Je,ft,vt,tt,ls,...t.plugins??[]];await Ee(r,e,t),await(t.install?.(e)),Se.emit("application-ready")}async function cs(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r=R(e);await is(r,t),r.mount("#app"),r._container?.classList.remove("loading"),Se.emit("application-mounted")}const us={key:0};var ds=u({__name:"AGAppModals",setup(e){const r=t((()=>nt.modals[0]??null));return(e,t)=>r.value?(p(),x("aside",us,[w(Ct,{"child-index":1,modal:r.value},null,8,["modal"])])):G("v-if",!0)}});ds.__file="src/components/AGAppModals.vue";const ps={"aria-live":"assertive",class:"z-60 pointer-events-none fixed inset-0 flex items-end px-4 py-6 sm:p-6"},ms={class:"flex w-full flex-col items-end space-y-4"};const fs={render:function(e,t){return p(),x("div",ps,[k("div",ms,[(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 hs=fs,vs=u({__name:"AGAppOverlays",setup(t){const r=e(null),s=e(!0);return gt("show-overlays-backdrop",(async()=>{r.value&&s.value&&(s.value=!1,r.value.classList.remove("opacity-0"))})),gt("hide-overlays-backdrop",(async()=>{r.value&&!s.value&&(s.value=!0,r.value.classList.add("opacity-0"))})),(e,t)=>(p(),x(A,null,[k("div",{id:"aerogel-overlays-backdrop",ref_key:"$backdrop",ref:r,class:"pointer-events-none fixed inset-0 z-50 bg-black/30 opacity-0"},null,512),w(ds),w(hs)],64))}});vs.__file="src/components/AGAppOverlays.vue";const gs={class:"flex min-h-full flex-col text-base font-normal leading-tight text-gray-900 antialiased"};var _s=u({__name:"AGAppLayout",setup:e=>(e,t)=>(p(),x("div",gs,[e.$errors.hasStartupErrors?v(e.$slots,"startup-crash",{key:0},(()=>[(p(),m(_(e.$ui.requireComponent(f(st).StartupCrash))))])):v(e.$slots,"default",{key:1}),w(vs)]))});_s.__file="src/components/AGAppLayout.vue";const bs={class:"ml-2"};var ys=u({inheritAttrs:!1,__name:"AGCheckbox",props:{name:Ze()},emits:["update:modelValue"],setup(e){const t=Ie();return(r,s)=>(p(),m(Cr,{ref_key:"$input",ref:t,name:e.name,class:"flex","onUpdate:modelValue":s[0]||(s[0]=e=>r.$emit("update:modelValue",e))},{default:h((()=>[w(Er,C(r.$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",bs,[r.$slots.default?(p(),m(Tr,{key:0},{default:h((()=>[v(r.$slots,"default")])),_:3})):G("v-if",!0),w(Mr,{class:"text-sm text-red-600"})])])),_:3},8,["name"]))}});ys.__file="src/components/forms/AGCheckbox.vue";const xs={viewBox:"0 0 20 20",width:"1.2em",height:"1.2em"},As=[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 ws={name:"zondicons-cheveron-down",render:function(e,t){return p(),x("svg",xs,[...As])}};const Gs={name:Ze(),label:Ze(),options:Ue(),noSelectionText:Ze(),optionsText:ze()},ks=["update:modelValue"];function Ss(){return Gs}function Cs(){return[...ks]}function js(e){return xt(e,Gs)}var Ms=u({__name:"AGHeadlessSelect",props:{modelValue:ze(),...Ss()},emits:Cs(),setup(e,{expose:r,emit:o}){const n=o,a=e,l=t((()=>"function"==typeof a.optionsText?a.optionsText:"string"==typeof a.optionsText?e=>ee(e[a.optionsText]):e=>ee(e))),i=s("form",null),c=t((()=>a.noSelectionText??it("select.noSelection","-"))),u=t((()=>i&&a.name?i.getFieldValue(a.name):a.modelValue)),d=t((()=>i&&a.name?i.errors[a.name]??null:null));function _(e){i&&a.name?i.setFieldValue(a.name,e):n("update:modelValue",e)}const b={id:`select-${X()}`,noSelectionText:c,selectedOption:u,errors:d,options:t((()=>a.options)),label:t((()=>a.label)),buttonText:t((()=>null===u.value?c.value:l.value(u.value))),renderText:l,update:_};return g("select",b),r(b),(e,t)=>(p(),m(f(me),{"model-value":u.value,"onUpdate:modelValue":t[0]||(t[0]=e=>_(e))},{default:h((({value:t,open:r,disabled:s})=>[v(e.$slots,"default",{value:t,open:r,disabled:s})])),_:3},8,["model-value"]))}});Ms.__file="src/components/headless/forms/AGHeadlessSelect.vue";var $s=u({__name:"AGHeadlessSelectButton",props:{textClass:Ze()},setup(e){const t=Be("select","<AGHeadlessSelectButton> must be a child of a <AGHeadlessSelect>");return(r,s)=>(p(),m(f(fe),null,{default:h((({value:s,open:o,disabled:n})=>[v(r.$slots,"default",{value:s,open:o,disabled:n},(()=>[k("span",{class:j(e.textClass)},$(f(t)?.buttonText),3)])),v(r.$slots,"icon")])),_:3}))}});$s.__file="src/components/headless/forms/AGHeadlessSelectButton.vue";const Es=["id"];var Hs=u({__name:"AGHeadlessSelectError",setup(e){const r=Be("select","<AGHeadlessSelectError> must be a child of a <AGHeadlessSelect>"),s=t((()=>r.errors?it(`errors.${r.errors[0]}`,`Error: ${r.errors[0]}`):null));return(e,t)=>s.value?(p(),x("p",{key:0,id:`${f(r).id}-error`},$(s.value),9,Es)):G("v-if",!0)}});Hs.__file="src/components/headless/forms/AGHeadlessSelectError.vue";var Ts=u({__name:"AGHeadlessSelectLabel",setup(e){const r=Be("select","<AGHeadlessSelectLabel> must be a child of a <AGHeadlessSelect>"),s=I(),o=t((()=>!(!r.label&&!s.default)));return(e,t)=>o.value?(p(),m(f(he),{key:0},{default:h((({open:t,disabled:s})=>[v(e.$slots,"default",{open:t,disabled:s},(()=>[M($(f(r).label),1)]))])),_:3})):G("v-if",!0)}});Ts.__file="src/components/headless/forms/AGHeadlessSelectLabel.vue";var Is=u({__name:"AGHeadlessSelectOption",props:{value:Ne(),selectedClass:Ze(),unselectedClass:Ze(),activeClass:Ze(),inactiveClass:Ze()},setup(e){const t=Be("select","<AGHeadlessSelectOption> must be a child of a <AGHeadlessSelect>");return(r,s)=>(p(),m(f(ve),{value:e.value,as:"template"},{default:h((({active:s,selected:o,disabled:n})=>[v(r.$slots,"default",{active:s,selected:o,disabled:n},(()=>[k("li",{class:j({[e.activeClass??"active"]:s,[e.inactiveClass??"inactive"]:!s,[e.selectedClass??"selected"]:o,[e.unselectedClass??"unselected"]:!o})},$(f(t).renderText(e.value)),3)]))])),_:3},8,["value"]))}});Is.__file="src/components/headless/forms/AGHeadlessSelectOption.vue";const Rs={class:"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2"};var Ls=u({__name:"AGSelect",props:Ss(),emits:Cs(),setup(e){const t=e,r=Ie();return(e,s)=>(p(),m(Ms,C(t,{ref_key:"$select",ref:r,as:"div","onUpdate:modelValue":s[0]||(s[0]=t=>e.$emit("update:modelValue",t))}),{default:h((()=>[w(Ts,{class:"block text-sm font-medium leading-6 text-gray-900"}),k("div",{class:j(["relative",{"mt-2":f(r)?.label}])},[w($s,{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(r)?.errors}]),"text-class":"block truncate"},{icon:h((()=>[k("span",Rs,[w(f(ws),{class:"h-5 w-5 text-gray-400"})])])),_:1},8,["class"]),w(f(ge),{class:"absolute z-10 mt-1 max-h-60 w-full overflow-auto border bg-white py-1 text-base ring-1 ring-black ring-opacity-5 focus:outline-none"},{default:h((()=>[(p(!0),x(A,null,E(f(r)?.options??[],((e,t)=>(p(),m(Is,{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(Hs,{class:"mt-2 text-sm text-red-600"})])),_:1},16))}});Ls.__file="src/components/forms/AGSelect.vue";var Ps=u({__name:"AGErrorMessage",props:{error:We()},setup(e){const r=e,s=t((()=>dt.getErrorMessage(r.error)));return(e,t)=>(p(),m(Ht,{text:s.value,inline:""},null,8,["text"]))}});Ps.__file="src/components/lib/AGErrorMessage.vue";var Os=u({__name:"AGLink",setup:e=>(e,t)=>(p(),m(zt,{class:"font-medium hover:underline"},{default:h((()=>[v(e.$slots,"default")])),_:3}))});Os.__file="src/components/lib/AGLink.vue";var Bs=u({__name:"AGMeasured",props:{as:Ze("span")},setup(t){const r=e(!1);return(e,s)=>{const o=L("measure");return P((p(),m(_(t.as),{class:j({"!invisible !absolute !w-auto":!r.value})},{default:h((()=>[v(e.$slots,"default")])),_:3},8,["class"])),[[o,()=>r.value=!0]])}}});Bs.__file="src/components/lib/AGMeasured.vue";var Vs=u({__name:"AGModalTitle",setup:e=>(e,t)=>(p(),m($t,{class:"mb-2 font-semibold"},{default:h((()=>[v(e.$slots,"default")])),_:3}))});Vs.__file="src/components/modals/AGModalTitle.vue";export{Pt as AGAlertModal,_s as AGAppLayout,vs as AGAppOverlays,qt as AGButton,ys as AGCheckbox,Ut as AGConfirmModal,Ps as AGErrorMessage,ur as AGErrorReportModalButtons,dr as AGErrorReportModalTitle,wr as AGForm,zt as AGHeadlessButton,Cr as AGHeadlessInput,Mr as AGHeadlessInputError,Er as AGHeadlessInputInput,Tr as AGHeadlessInputLabel,St as AGHeadlessModal,Mt as AGHeadlessModalPanel,$t as AGHeadlessModalTitle,Ms as AGHeadlessSelect,$s as AGHeadlessSelectButton,Hs as AGHeadlessSelectError,Ts as AGHeadlessSelectLabel,Is as AGHeadlessSelectOption,Qr as AGHeadlessSnackbar,Rr as AGInput,Os as AGLink,br as AGLoadingModal,Ht as AGMarkdown,Bs as AGMeasured,It as AGModal,Ct as AGModalContext,Vs as AGModalTitle,Kr as AGPromptModal,Ls as AGSelect,es as AGSnackbar,ns as AGStartupCrash,Me as App,je as AppService,ut as Colors,dt as Errors,Se as Events,ke as EventsService,Lr as FormFieldTypes,at as Lang,Ge as Service,Zr as SnackbarColors,nt as UI,st as UIComponents,ot as UIService,Rt as alertModalProps,He as arrayProp,Vr as booleanInput,Te as booleanProp,et as bootServices,cs as bootstrap,is as bootstrapApplication,Ie as componentRef,Re as computedAsync,Ot as confirmModalProps,Le as defineDirective,$e as definePlugin,we as defineServiceState,Pe as enumProp,Yt as errorReportModalProps,Sr as extractInputProps,Gt as extractModalProps,js as extractSelectProps,Ve as injectOrFail,Oe as injectReactive,Be as injectReactiveOrFail,Gr as inputProps,Ee as installPlugins,vr as loadingModalProps,ze as mixedProp,At as modalProps,Ur as numberInput,qe as numberProp,De as objectProp,bt as onCleanMounted,yr as promptModalProps,yt as removeInteractiveClasses,Ue as requiredArrayProp,zr as requiredBooleanInput,Fe as requiredEnumProp,Ne as requiredMixedProp,qr as requiredNumberInput,Ke as requiredNumberProp,We as requiredObjectProp,Dr as requiredStringInput,Qe as requiredStringProp,ks as selectEmits,Gs as selectProps,Yr as snackbarProps,Fr as stringInput,Ze as stringProp,lt as translate,it as translateWithDefault,Lt as useAlertModalProps,Vt as useConfirmModal,Bt as useConfirmModalProps,Xt as useErrorReportModal,Jt as useErrorReportModalProps,gt as useEvent,Br as useForm,_t as useInputAttrs,kr as useInputProps,_r as useLoadingModal,gr as useLoadingModalProps,kt as useModalExpose,wt as useModalProps,Ar as usePromptModal,xr as usePromptModalProps,Cs as useSelectEmits,Ss as useSelectProps,Xr as useSnackbar,Jr as useSnackbarProps};
1
+ import{ref as e,computed as t,watch as r,inject as s,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 S,createElementVNode as G,h as k,mergeProps as C,normalizeClass as j,createTextVNode as M,toDisplayString as $,renderList as E,withModifiers as H,readonly as T,useSlots as L,createApp as R,resolveDirective as I,withDirectives as P}from"vue";import"core-js/modules/esnext.async-iterator.reduce.js";import"core-js/modules/esnext.iterator.constructor.js";import"core-js/modules/esnext.iterator.reduce.js";import"core-js/modules/esnext.async-iterator.map.js";import"core-js/modules/esnext.iterator.map.js";import O from"@babel/runtime/helpers/esm/defineProperty";import{JSError as B,tap as V,MagicObject as D,PromisedValue as q,Storage as z,objectOnly as U,isEmpty as F,objectDeepClone as N,facade as K,arrayRemove as W,fail as Q,updateLocationQueryParameters as Z,forever as Y,after as J,uuid as X,isObject as ee,objectWithoutEmpty as te,toString as re,objectWithout as se,noop as oe,stringExcerpt as ne}from"@noeldemartin/utils";import"core-js/modules/esnext.async-iterator.for-each.js";import"core-js/modules/esnext.iterator.for-each.js";import"core-js/modules/esnext.set.add-all.js";import"core-js/modules/esnext.set.delete-all.js";import"core-js/modules/esnext.set.difference.js";import"core-js/modules/esnext.set.every.js";import"core-js/modules/esnext.set.filter.js";import"core-js/modules/esnext.set.find.js";import"core-js/modules/esnext.set.intersection.js";import"core-js/modules/esnext.set.is-disjoint-from.js";import"core-js/modules/esnext.set.is-subset-of.js";import"core-js/modules/esnext.set.is-superset-of.js";import"core-js/modules/esnext.set.join.js";import"core-js/modules/esnext.set.map.js";import"core-js/modules/esnext.set.reduce.js";import"core-js/modules/esnext.set.some.js";import"core-js/modules/esnext.set.symmetric-difference.js";import"core-js/modules/esnext.set.union.js";import{createPinia as ae,setActivePinia as le,defineStore as ie}from"pinia";import ce from"virtual:aerogel";import"core-js/modules/esnext.async-iterator.filter.js";import"core-js/modules/esnext.iterator.filter.js";import"core-js/modules/esnext.string.at.js";import"core-js/modules/esnext.async-iterator.some.js";import"core-js/modules/esnext.iterator.some.js";import{Dialog as ue,DialogPanel as de,DialogTitle as pe,Listbox as me,ListboxButton as fe,ListboxLabel as he,ListboxOption as ve,ListboxOptions as ge}from"@headlessui/vue";export{ListboxOptions as AGHeadlessSelectOptions}from"@headlessui/vue";import _e from"dompurify";import{marked as be,Renderer as ye}from"marked";import"core-js/modules/esnext.weak-map.delete-all.js";import"core-js/modules/esnext.weak-map.emplace.js";class ServiceBootError extends B{constructor(e,t){super(`Service '${e}' failed booting`,{cause:t})}}let xe=null;function Ae(){return xe??we()}function we(){return V(ae(),(e=>{xe=e,le(e)}))}function Se(){return xe??Ae()}function Ge(e,t){return Ae(),ie(e,t)()}function ke(e){var t;return O(t=class extends Ce{usesStore(){return!0}getName(){return e.name??null}getInitialState(){return"function"==typeof e.initialState?e.initialState():Object.entries(e.initialState).reduce(((e,t)=>{let[r,s]=t;try{s=structuredClone(s)}catch(e){console.warn(`Could not clone '${r}' 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[r]=s,e}),{})}getComputedStateDefinition(){return e.computed??{}}serializePersistedState(t){return e.serialize?.(t)??t}},"persist",e.persist??[]),t}class Ce extends D{constructor(){super(),O(this,"_name",void 0),O(this,"_booted",void 0),O(this,"_computedStateKeys",void 0),O(this,"_store",void 0);const e=this.getComputedStateDefinition();this._name=this.getName()??new.target.name,this._booted=new q,this._computedStateKeys=new Set(Object.keys(e)),this._store=this.usesStore()&&Ge(this._name,{state:()=>this.getInitialState(),getters:e})}get booted(){return this._booted}launch(){const handleError=e=>this._booted.reject(new ServiceBootError(this._name,e));try{this.frameworkBoot().then((()=>this.boot())).then((()=>this._booted.resolve())).catch(handleError)}catch(e){handleError(e)}return this._booted}hasPersistedState(){return z.has(this._name)}hasState(e){return!!this._store&&(e in this._store.$state||this._computedStateKeys.has(e))}getState(e){const t=this._store;return e?t?t[e]:void 0:t||{}}setState(e,t){if(!this._store)return;const r="string"==typeof e?{[e]:t}:e;Object.assign(this._store.$state,r),this.onStateUpdated(r)}__get(e){return this.hasState(e)?this.getState(e):super.__get(e)}__set(e,t){this.setState({[e]:t})}onStateUpdated(e){const t=this.constructor.persist,r=U(e,t);if(F(r))return;const s=z.get(this._name);s&&z.set(this._name,{...s,...this.serializePersistedState(N(r))})}usesStore(){return!1}getName(){return null}getInitialState(){return{}}getComputedStateDefinition(){return{}}serializePersistedState(e){return e}async frameworkBoot(){this.initializePersistedState()}async boot(){}initializePersistedState(){const e=this.constructor.persist;if(this.usesStore()&&!F(e))if(z.has(this._name)){const e=z.require(this._name);this.setState(e)}else z.set(this._name,U(this.getState(),e))}}O(Ce,"persist",[]);const je={Low:-256,Default:0,High:256};class Me extends Ce{constructor(){super(...arguments),O(this,"listeners",{})}async boot(){Object.entries(globalThis.__aerogelEvents__??{}).forEach((e=>{let[t,r]=e;return this.on(t,r)}))}async emit(e,t){const r=this.listeners[e]??{priorities:[],handlers:{}};for(const e of r.priorities)await Promise.all(r.handlers[e]?.map((e=>e(t)))??[])}on(e,t,r){const s="function"==typeof t?{}:t,o="function"==typeof t?t:r;return this.registerListener(e,s,o),()=>this.off(e,o)}once(e,t,r){let s=null;const o="function"==typeof t?{}:t,n="function"==typeof t?t:r;return V((()=>s&&this.off(e,s)),(t=>{s=function(){return t(),n(...arguments)},this.registerListener(e,o,n)}))}off(e,t){const r=this.listeners[e];if(!r)return;const s=[...r.priorities];for(const e of s)W(r.handlers[e]??[],t),0===r.handlers[e]?.length&&(delete r.handlers[e],W(r.priorities,e));0===r.priorities.length&&delete this.listeners[e]}registerListener(e,t,r){const s=t.priority??0;e in this.listeners||(this.listeners[e]={priorities:[],handlers:{}});const o=this.listeners[e]?.priorities??Q(`priorities missing for event '${e}'`),n=this.listeners[e]?.handlers??Q(`handlers missing for event '${e}'`);o.includes(s)||(o.push(s),o.sort(((e,t)=>t-e)),n[s]=[]),n[s]?.push(r)}}var $e=K(Me),Ee=ke({name:"app",initialState:{plugins:{},environment:ce.environment,sourceUrl:ce.sourceUrl},computed:{development:e=>"development"===e.environment,testing:e=>"test"===e.environment||"testing"===e.environment}});class He extends Ee{constructor(){super(...arguments),O(this,"ready",new q),O(this,"mounted",new q)}isReady(){return this.ready.isResolved()}isMounted(){return this.mounted.isResolved()}async whenReady(e){return await this.ready.then(e)}async reload(e){e&&Z(e),location.reload(),await Y()}plugin(e){return this.plugins[e]??null}async boot(){$e.once("application-ready",(()=>this.ready.resolve())),$e.once("application-mounted",(()=>this.mounted.resolve()))}}var Te=K(He);function Le(e){return e}async function Re(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),s=1;s<t;s++)r[s-1]=arguments[s];Te.setState("plugins",e.reduce(((e,t)=>(t.name&&(e[t.name]=t),e)),{})),await Promise.all(e.map((e=>e.install(...r)))??[])}function Ie(e){return{type:Array,default:e??(()=>[])}}function Pe(){return{type:Boolean,default:arguments.length>0&&void 0!==arguments[0]&&arguments[0]}}function Oe(){return e()}function Be(s){const o=e(),n=t(s);return r(n,(async()=>o.value=await n.value),{immediate:!0}),o}function Ve(e){return e}function De(e,t){const r=Object.values(e);return{type:String,default:t??r[0]??null,validator:e=>r.includes(e)}}function qe(e){const t=s(e);return t?o(t):void 0}function ze(e,t){return qe(e)??Q(t??`Could not resolve '${e}' injection key`)}function Ue(e,t){return s(e)??Q(t??`Could not resolve '${e}' injection key`)}function Fe(e){return{type:e,default:null}}function Ne(){return{type:Number,default:arguments.length>0&&void 0!==arguments[0]?arguments[0]:null}}function Ke(){return{type:Object,default:arguments.length>0&&void 0!==arguments[0]?arguments[0]:null}}function We(){return{type:Array,required:!0}}function Qe(e){const t=Object.values(e);return{type:String,required:!0,validator:e=>t.includes(e)}}function Ze(e){return{type:e,required:!0}}function Ye(){return{type:Number,required:!0}}function Je(){return{type:Object,required:!0}}function Xe(){return{type:String,required:!0}}function et(){return{type:String,default:arguments.length>0&&void 0!==arguments[0]?arguments[0]:null}}const tt={"initial-focus":{mounted(e,t){let{value:r}=t;!1!==r&&e.focus()}},measure:{mounted(e,t){let{value:r}=t;const s=e.getBoundingClientRect();e.style.setProperty("--width",`${s.width}px`),e.style.setProperty("--height",`${s.height}px`),r?.()}}};var rt={install(e,t){const r={...tt,...t.directives};for(const[t,s]of Object.entries(r))e.directive(t,s)}};const st={$app:Te,$events:$e};async function ot(e,t){await Promise.all(Object.entries(t).map((async t=>{let[r,s]=t;await s.launch().catch((t=>e.config.errorHandler?.(t,null,`Failed launching ${r}.`)))}))),Object.assign(e.config.globalProperties,t),Te.development&&Object.assign(window,t)}var nt={async install(e,t){const r={...st,...t.services};e.use(Se()),await ot(e,r)}},at=ke({name:"ui",initialState:{modals:[],snackbars:[]}});const lt={AlertModal:"alert-modal",ConfirmModal:"confirm-modal",ErrorReportModal:"error-report-modal",LoadingModal:"loading-modal",PromptModal:"prompt-modal",Snackbar:"snackbar",StartupCrash:"startup-crash"};class it extends at{constructor(){super(...arguments),O(this,"modalCallbacks",{}),O(this,"components",{})}requireComponent(e){return this.components[e]??Q(`UI Component '${e}' is not defined!`)}alert(e,t){this.openModal(this.requireComponent(lt.AlertModal),"string"!=typeof t?{message:e}:{title:e,message:t})}async confirm(e,t,r){const s=await this.openModal(this.requireComponent(lt.ConfirmModal),"string"!=typeof t?{message:e,...t??{}}:{title:e,message:t,...r??{}});return await s.beforeClose??!1}async prompt(e,t,r){const s=await this.openModal(this.requireComponent(lt.PromptModal),"string"!=typeof t?{message:e,...t??{}}:{title:e,message:t,...r??{}});return await s.beforeClose??null}async loading(e,t){const r=await this.openModal(this.requireComponent(lt.LoadingModal),"string"!=typeof e?{}:{message:e});try{t="string"==typeof e?t:e;const[r]=await Promise.all([t,J({seconds:1})]);return r}finally{await this.closeModal(r.id)}}showSnackbar(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r={id:X(),properties:{message:e,...t},component:n(t.component??this.requireComponent(lt.Snackbar))};this.setState("snackbars",this.snackbars.concat(r)),setTimeout((()=>this.hideSnackbar(r.id)),5e3)}hideSnackbar(e){this.setState("snackbars",this.snackbars.filter((t=>t.id!==e)))}registerComponent(e,t){this.components[e]=t}async openModal(e,t){const r=X(),s={},o={id:r,properties:t??{},component:n(e),beforeClose:new Promise((e=>s.willClose=e)),afterClose:new Promise((e=>s.closed=e))},l=this.modals.at(-1),i=this.modals.concat(o);return this.modalCallbacks[o.id]=s,this.setState({modals:i}),await a(),await(l&&$e.emit("hide-modal",{id:l.id})),await Promise.all([l||$e.emit("show-overlays-backdrop"),$e.emit("show-modal",{id:o.id})]),o}async closeModal(e,t){await $e.emit("close-modal",{id:e,result:t})}async boot(){this.watchModalEvents(),this.watchMountedEvent()}watchModalEvents(){$e.on("modal-will-close",(e=>{let{modal:t,result:r}=e;this.modalCallbacks[t.id]?.willClose?.(r),1===this.modals.length&&$e.emit("hide-overlays-backdrop")})),$e.on("modal-closed",(async e=>{let{modal:t,result:r}=e;this.setState("modals",this.modals.filter((e=>e.id!==t.id))),this.modalCallbacks[t.id]?.closed?.(r),delete this.modalCallbacks[t.id];const s=this.modals.at(-1);await(s&&$e.emit("show-modal",{id:s.id}))}))}watchMountedEvent(){$e.once("application-mounted",(async()=>{const e=document.getElementById("splash");e&&("0"!==window.getComputedStyle(e).opacity&&(e.style.opacity="0",await J({ms:600})),e.remove())}))}}var ct=K(it);var ut=K(class extends Ce{constructor(){super(),O(this,"provider",void 0),this.provider={translate:e=>(Te.development&&console.warn("Lang provider is missing"),e),translateWithDefault:(e,t)=>(Te.development&&console.warn("Lang provider is missing"),t)}}setProvider(e){this.provider=e}translate(e,t){return this.provider.translate(e,t)??e}translateWithDefault(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.provider.translateWithDefault(e,t,r)}});const dt=ut.translate.bind(ut),pt=ut.translateWithDefault.bind(ut);var mt=ke({name:"errors",initialState:{logs:[],startupErrors:[]},computed:{hasErrors:e=>{let{logs:t}=e;return t.length>0},hasNewErrors:e=>{let{logs:t}=e;return t.some((e=>!e.seen))},hasStartupErrors:e=>{let{startupErrors:t}=e;return t.length>0}}});const ft={Primary:"primary",Secondary:"secondary",Danger:"danger",Clear:"clear"};var ht=K(class extends mt{constructor(){super(...arguments),O(this,"forceReporting",!1),O(this,"enabled",!0)}enable(){this.enabled=!0}disable(){this.enabled=!1}async inspect(e){const t=Array.isArray(e)?e:[await this.createErrorReport(e)];0!==t.length?ct.openModal(ct.requireComponent(lt.ErrorReportModal),{reports:t}):ct.alert(pt("errors.inspectEmpty","Nothing to inspect!"))}async report(e,t){if(await $e.emit("error",{error:e,message:t}),Te.testing)throw e;if(Te.development&&this.logError(e),!this.enabled)throw e;if(!Te.isMounted()){const t=await this.createStartupErrorReport(e);return void(t&&this.setState({startupErrors:this.startupErrors.concat(t)}))}const r=await this.createErrorReport(e),s={report:r,seen:!1,date:new Date};ct.showSnackbar(t??pt("errors.notice","Something went wrong, but it's not your fault. Try again!"),{color:ft.Danger,actions:[{text:pt("errors.viewDetails","View details"),dismiss:!0,handler:()=>ct.openModal(ct.requireComponent(lt.ErrorReportModal),{reports:[r]})}]}),this.setState({logs:[s].concat(this.logs)})}see(e){this.setState({logs:this.logs.map((t=>t.report!==e?t:{...t,seen:!0}))})}seeAll(){this.setState({logs:this.logs.map((e=>({...e,seen:!0})))})}logError(e){console.error(e),ee(e)&&e.cause&&this.logError(e.cause)}async createErrorReport(e){return"string"==typeof e?{title:e}:e instanceof Error||e instanceof B?this.createErrorReportFromError(e):ee(e)?te({title:re(e.name??e.title??pt("errors.unknown","Unknown Error")),description:re(e.message??e.description??pt("errors.unknownDescription","Unknown error object")),error:e}):{title:pt("errors.unknown","Unknown Error"),error:e}}async createStartupErrorReport(e){return e instanceof ServiceBootError?e.cause instanceof ServiceBootError?null:this.createErrorReport(e.cause):this.createErrorReport(e)}createErrorReportFromError(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return{title:e.name,description:e.message,details:e.stack,error:e,...t}}});function vt(e){return"string"==typeof e?e:e instanceof Error||e instanceof B?e.message:ee(e)?re(e.message??e.description??"Unknown error object"):pt("errors.unknown","Unknown Error")}const gt={$errors:ht};function _t(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:()=>!1;const r=e=>t(e)||(e=>(ht.report(e),!0))(e);e.config.errorHandler=r,globalThis.onerror=(e,t,s,o,n)=>r(n??e),globalThis.onunhandledrejection=e=>r(e.reason)}var bt={async install(e,t){_t(e,t.handleError),await ot(e,gt)}};const yt={$lang:ut};var xt={async install(e){e.config.globalProperties.$t??=dt,e.config.globalProperties.$td=pt,await ot(e,yt)}},At={async install(){"testing"===import.meta.env.MODE&&(globalThis.testingRuntime={on:function(){return $e.on(...arguments)}})}};function wt(e,t){const r=$e.on(e,t);l((()=>r()))}function St(){const e=i(),r=t((()=>e.class));return[t((()=>se(e,"class"))),r]}function Gt(e){let t=oe;c((()=>t=e())),l((()=>t()))}function kt(e){return e.split(/\s+/).filter((e=>!/^(hover|focus|focus-visible):/.test(e))).join(" ").trim()}function Ct(e,t){return Object.keys(t).reduce(((t,r)=>(t[r]=e[r],t)),{})}const jt={cancellable:Pe(!0),title:et()};function Mt(){return jt}function $t(e){return Ct(e,jt)}function Et(e){return{close:async()=>e.value?.close(),cancellable:t((()=>!!e.value?.cancellable))}}var Ht=u({__name:"AGHeadlessModal",props:Mt(),setup(t,{expose:r}){const s=t,o=e(null),n=e(!0),a=e(!1),{modal:l}=ze("modal","could not obtain modal reference from <AGHeadlessModal>, did you render this component manually? Show it using $ui.openModal() instead");async function i(){o.value?.$el&&(n.value=!0)}async function c(e){a.value||($e.emit("modal-will-close",{modal:l,result:e}),await i(),a.value=!0,$e.emit("modal-closed",{modal:l,result:e}))}return wt("close-modal",(async({id:e,result:t})=>{e===l.id&&await c(t)})),wt("hide-modal",(async({id:e})=>{e===l.id&&await i()})),wt("show-modal",(async({id:e})=>{e===l.id&&await async function(){o.value?.$el&&(n.value=!1)}()})),r({close:c,cancellable:d(s,"cancellable")}),(e,t)=>(p(),m(f(ue),{ref_key:"$root",ref:o,open:!0,onClose:t[0]||(t[0]=t=>e.cancellable&&c())},{default:h((()=>[v(e.$slots,"default",{close:c})])),_:3},512))}});Ht.__file="src/components/headless/modals/AGHeadlessModal.vue";var Tt=u({__name:"AGModalContext",props:{modal:Je(),childIndex:Ye()},setup(e){const t=e;return g("modal",{modal:d(t,"modal"),childIndex:d(t,"childIndex")}),(t,r)=>(p(),m(_(e.modal.component),b(y(e.modal.properties)),null,16))}});Tt.__file="src/components/modals/AGModalContext.vue";const Lt=G("div",{class:"pointer-events-none fixed inset-0 z-50 bg-black/30"},null,-1);var Rt=u({__name:"AGHeadlessModalPanel",setup(e){const r=ze("modal","could not obtain modal reference from <AGHeadlessModalPanel>, did you render this component manually? Show it using $ui.openModal() instead"),s=t((()=>ct.modals[r.childIndex]??null));return(e,t)=>(p(),m(f(de),null,{default:h((()=>[v(e.$slots,"default"),s.value?(p(),x(A,{key:0},[Lt,w(Tt,{"child-index":f(r).childIndex+1,modal:s.value},null,8,["child-index","modal"])],64)):S("v-if",!0)])),_:3}))}});Rt.__file="src/components/headless/modals/AGHeadlessModalPanel.vue";var It=u({__name:"AGHeadlessModalTitle",props:{as:et("h2")},setup:e=>(t,r)=>(p(),m(f(pe),{as:e.as},{default:h((()=>[v(t.$slots,"default")])),_:3},8,["as"]))});function Pt(e){return t=be(e,{mangle:!1,headerIds:!1,renderer:V(new ye,(e=>{e.link=function(e,t,r){return ye.prototype.link.apply(this,[e,t,r]).replace("<a",'<a target="_blank"')}}))}),_e.sanitize(t,{ADD_ATTR:["target"]});var t}It.__file="src/components/headless/modals/AGHeadlessModalTitle.vue";var Ot=u({__name:"AGMarkdown",props:{as:et(),inline:Pe(),langKey:et(),langParams:Ke(),text:et()},setup(e){const r=e,s=t((()=>r.text??(r.langKey&&dt(r.langKey,r.langParams??{})))),o=t((()=>{if(!s.value)return null;let e=Pt(s.value);return r.inline&&(e=e.replace("<p>","<span>").replace("</p>","</span>")),e})),n=()=>k(r.as??(r.inline?"span":"div"),{class:r.inline?"":"prose",innerHTML:o.value});return(e,t)=>(p(),m(n))}});Ot.__file="src/components/lib/AGMarkdown.vue";const Bt={class:"fixed inset-0 flex items-center justify-center p-8"};var Vt=u({inheritAttrs:!1,__name:"AGModal",props:Mt(),setup(t,{expose:r}){const s=t,o=e();return r(Et(o)),(e,t)=>(p(),m(Ht,C({ref_key:"$modal",ref:o},s,{class:"relative z-50"}),{default:h((({close:t})=>[G("div",Bt,[w(Rt,{class:"flex max-h-full max-w-full flex-col overflow-hidden bg-white p-4"},{default:h((()=>[e.title?(p(),m(It,{key:0,class:"mb-2 text-lg font-semibold"},{default:h((()=>[w(Ot,{text:e.title,inline:""},null,8,["text"])])),_:1})):S("v-if",!0),G("div",C({class:"flex max-h-full flex-col overflow-auto"},e.$attrs),[v(e.$slots,"default",{close:t})],16)])),_:2},1024)])])),_:3},16))}});Vt.__file="src/components/modals/AGModal.vue";const Dt={title:et(),message:Xe()};function qt(){return Dt}var zt=u({__name:"AGAlertModal",props:qt(),setup:e=>(e,t)=>(p(),m(Vt,{title:e.title},{default:h((()=>[w(Ot,{text:e.message},null,8,["text"])])),_:1},8,["title"]))});zt.__file="src/components/modals/AGAlertModal.vue";const Ut={title:et(),message:Xe(),acceptText:et(),cancelText:et()};function Ft(){return Ut}function Nt(e){return{renderedAcceptText:t((()=>e.acceptText??pt("ui.accept","Ok"))),renderedCancelText:t((()=>e.cancelText??pt("ui.cancel","Cancel")))}}var Kt=u({__name:"AGHeadlessButton",props:{href:et(),url:et(),route:et(),routeParams:Ke((()=>({}))),routeQuery:Ke((()=>({}))),submit:Pe()},setup(e){const r=e,s=t((()=>r.route?{tag:"router-link",props:{to:te({name:r.route,params:r.routeParams,query:r.routeQuery})}}:r.href||r.url?{tag:"a",props:{target:"_blank",href:r.href||r.url}}:{tag:"button",props:{type:r.submit?"submit":"button"}}));return(e,t)=>(p(),m(_(s.value.tag),b(y(s.value.props)),{default:h((()=>[v(e.$slots,"default")])),_:3},16))}});Kt.__file="src/components/headless/forms/AGHeadlessButton.vue";var Wt=u({__name:"AGButton",props:{color:De(ft,ft.Primary)},setup(e){const r=e,s=t((()=>{switch(r.color){case ft.Secondary:return["text-white bg-gray-600","hover:bg-gray-500","focus-visible:outline-offset-2 focus-visible:outline-gray-600"].join(" ");case ft.Clear:return"hover:bg-gray-500/20 focus-visible:outline-gray-500/60";case ft.Danger:return["text-white bg-red-600","hover:bg-red-500","focus-visible:outline-offset-2 focus-visible:outline-red-600"].join(" ");default:return["text-white bg-indigo-600","hover:bg-indigo-500","focus-visible:outline-offset-2 focus-visible:outline-indigo-600"].join(" ")}}));return(e,t)=>(p(),m(Kt,{class:j(["px-2.5 py-1.5 focus-visible:outline focus-visible:outline-2",s.value])},{default:h((()=>[v(e.$slots,"default")])),_:3},8,["class"]))}});Wt.__file="src/components/forms/AGButton.vue";const Qt={class:"mt-2 flex flex-row-reverse gap-2"};var Zt=u({__name:"AGConfirmModal",props:Ft(),setup(e){const t=e,{renderedAcceptText:r,renderedCancelText:s}=Nt(t);return(e,t)=>(p(),m(Vt,{cancellable:!1,title:e.title},{default:h((({close:t})=>[w(Ot,{text:e.message},null,8,["text"]),G("div",Qt,[w(Wt,{onClick:e=>t(!0)},{default:h((()=>[M($(f(r)),1)])),_:2},1032,["onClick"]),w(Wt,{color:"secondary",onClick:e=>t()},{default:h((()=>[M($(f(s)),1)])),_:2},1032,["onClick"])])])),_:1},8,["title"]))}});Zt.__file="src/components/modals/AGConfirmModal.vue";const Yt={viewBox:"0 0 20 20",width:"1.2em",height:"1.2em"},Jt=[G("path",{fill:"currentColor",d:"m12.95 10.707l.707-.707L8 4.343L6.586 5.757L10.828 10l-4.242 4.243L8 15.657l4.95-4.95z"},null,-1)];var Xt={name:"zondicons-cheveron-right",render:function(e,t){return p(),x("svg",Yt,[...Jt])}};const er={viewBox:"0 0 20 20",width:"1.2em",height:"1.2em"},tr=[G("path",{fill:"currentColor",d:"M7.05 9.293L6.343 10L12 15.657l1.414-1.414L9.172 10l4.242-4.243L12 4.343z"},null,-1)];var rr={name:"zondicons-cheveron-left",render:function(e,t){return p(),x("svg",er,[...tr])}};const sr={reports:We()};function or(){return sr}function nr(r){const s=e(0),o=t((()=>r.reports[s.value])),n=t((()=>o.value.details?.trim()||pt("errors.detailsEmpty","This error is missing a stacktrace."))),a=pt("errors.previousReport","Show previous report"),l=pt("errors.nextReport","Show next report");return{activeReportIndex:s,details:n,nextReportText:l,previousReportText:a,report:o}}const ar={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},lr=[G("path",{fill:"currentColor",d:"M20 19V7H4v12h16m0-16a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h16m-7 14v-2h5v2h-5m-3.42-4L5.57 9H8.4l3.3 3.3c.39.39.39 1.03 0 1.42L8.42 17H5.59l3.99-4Z"},null,-1)];var ir={name:"mdi-console",render:function(e,t){return p(),x("svg",ar,[...lr])}};const cr={viewBox:"0 0 20 20",width:"1.2em",height:"1.2em"},ur=[G("path",{fill:"currentColor",d:"M6 6V2c0-1.1.9-2 2-2h10a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-4v4a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V8c0-1.1.9-2 2-2h4zm2 0h4a2 2 0 0 1 2 2v4h4V2H8v4zM2 8v10h10V8H2z"},null,-1)];var dr={name:"zondicons-copy",render:function(e,t){return p(),x("svg",cr,[...ur])}};const pr={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},mr=[G("path",{fill:"currentColor",d:"M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5c.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34c-.46-1.16-1.11-1.47-1.11-1.47c-.91-.62.07-.6.07-.6c1 .07 1.53 1.03 1.53 1.03c.87 1.52 2.34 1.07 2.91.83c.09-.65.35-1.09.63-1.34c-2.22-.25-4.55-1.11-4.55-4.92c0-1.11.38-2 1.03-2.71c-.1-.25-.45-1.29.1-2.64c0 0 .84-.27 2.75 1.02c.79-.22 1.65-.33 2.5-.33c.85 0 1.71.11 2.5.33c1.91-1.29 2.75-1.02 2.75-1.02c.55 1.35.2 2.39.1 2.64c.65.71 1.03 1.6 1.03 2.71c0 3.82-2.34 4.66-4.57 4.91c.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"},null,-1)];var fr={name:"mdi-github",render:function(e,t){return p(),x("svg",pr,[...mr])}};const hr={class:"flex"};var vr=u({__name:"AGErrorReportModalButtons",props:{report:Je()},setup(e){const r=e,s=t((()=>r.report.description?`${r.report.title}: ${r.report.description}`:r.report.title)),o=t((()=>{if(!Te.sourceUrl)return!1;const e=encodeURIComponent(s.value),t=encodeURIComponent(["[Please, explain here what you were trying to do when this error appeared]","","Error details:","```",ne(r.report.details??"Details missing from report",1800-e.length-Te.sourceUrl.length).trim(),"```"].join("\n"));return`${Te.sourceUrl}/issues/new?title=${e}&body=${t}`})),n=t((()=>V([{id:"clipboard",description:"Copy to clipboard",iconComponent:dr,async handler(){await navigator.clipboard.writeText(`${s.value}\n\n${r.report.details}`),ct.showSnackbar(pt("errors.copiedToClipboard","Debug information copied to clipboard"))}},{id:"console",description:"Log to console",iconComponent:ir,handler(){const e=r.report.error??r.report;window.error=e,console.error(e),ct.showSnackbar(pt("errors.addedToConsole","You can now use the **error** variable in the console"))}}],(e=>{o.value&&e.push({id:"github",description:"Report in GitHub",iconComponent:fr,url:o.value})}))));return(e,t)=>(p(),x("div",hr,[(p(!0),x(A,null,E(n.value,((t,r)=>v(e.$slots,"default",C(t,{key:r}),(()=>[w(Wt,{color:"clear",url:t.url,title:e.$td(`errors.report_${t.id}`,t.description),"aria-label":e.$td(`errors.report_${t.id}`,t.description),onClick:t.handler},{default:h((()=>[(p(),m(_(t.iconComponent),{class:"h-4 w-4","aria-hidden":"true"}))])),_:2},1032,["url","title","aria-label","onClick"])])))),128))]))}});vr.__file="src/components/modals/AGErrorReportModalButtons.vue";var gr=u({__name:"AGErrorReportModalTitle",props:{report:Je(),currentReport:Ne(),totalReports:Ne()},setup(e){const r=e,s=t((()=>!r.totalReports||r.totalReports<=1?r.report.title:`${r.report.title} (${r.currentReport}/${r.totalReports})`));return(e,t)=>(p(),m(Ot,{text:s.value,inline:""},null,8,["text"]))}});gr.__file="src/components/modals/AGErrorReportModalTitle.vue";const _r={class:"flex items-center justify-between text-lg font-medium"},br={class:"flex items-center"},yr=["textContent"];var xr=u({__name:"AGErrorReportModal",props:or(),setup(e){const t=e,{activeReportIndex:r,details:s,nextReportText:o,previousReportText:n,report:a}=nr(t);return(e,t)=>(p(),m(Vt,null,{default:h((()=>[G("div",null,[G("h2",_r,[G("div",br,[w(gr,{report:f(a),"current-report":f(r)+1,"total-reports":e.reports.length},null,8,["report","current-report","total-reports"]),e.reports.length>1?(p(),x(A,{key:0},[w(Wt,{color:"clear",disabled:0===f(r),title:f(n),"aria-label":f(n),onClick:t[0]||(t[0]=e=>r.value--)},{default:h((()=>[w(f(rr),{"aria-hidden":"true",class:"h-4 w-4"})])),_:1},8,["disabled","title","aria-label"]),w(Wt,{color:"clear",disabled:f(r)===e.reports.length-1,title:f(o),"aria-label":f(o),onClick:t[1]||(t[1]=e=>r.value++)},{default:h((()=>[w(f(Xt),{"aria-hidden":"true",class:"h-4 w-4"})])),_:1},8,["disabled","title","aria-label"])],64)):S("v-if",!0)]),w(vr,{report:f(a)},null,8,["report"])]),f(a).description?(p(),m(Ot,{key:0,text:f(a).description,class:"mt-2"},null,8,["text"])):S("v-if",!0)]),G("pre",{class:"h-full overflow-auto bg-gray-200 p-4 text-xs text-red-900",textContent:$(f(s))},null,8,yr)])),_:1}))}});xr.__file="src/components/modals/AGErrorReportModal.vue";const Ar={message:et()};function wr(){return Ar}function Sr(e){return{renderedMessage:t((()=>e.message??pt("ui.loading","Loading...")))}}var Gr=u({__name:"AGLoadingModal",props:wr(),setup(e){const t=e,{renderedMessage:r}=Sr(t);return(e,t)=>(p(),m(Vt,{cancellable:!1},{default:h((()=>[w(Ot,{text:f(r)},null,8,["text"])])),_:1}))}});Gr.__file="src/components/modals/AGLoadingModal.vue";const kr={title:et(),message:Xe(),label:et(),defaultValue:et(),placeholder:et(),acceptText:et(),cancelText:et()};function Cr(){return kr}function jr(e){return{renderedAcceptText:t((()=>e.acceptText??pt("ui.accept","Ok"))),renderedCancelText:t((()=>e.cancelText??pt("ui.cancel","Cancel")))}}var Mr=u({__name:"AGForm",props:{form:Ke()},emits:["submit"],setup(e,{emit:t}){const r=e,s=t;function o(){r.form&&!r.form.submit()||s("submit")}return g("form",r.form),(e,t)=>(p(),x("form",{onSubmit:H(o,["prevent"])},[v(e.$slots,"default")],32))}});Mr.__file="src/components/forms/AGForm.vue";const $r={name:et(),label:et()};function Er(){return $r}function Hr(e){return Ct(e,$r)}var Tr=u({__name:"AGHeadlessInput",props:{as:et("div"),modelValue:Fe([String,Number,Boolean]),...Er()},emits:["update:modelValue"],setup(e,{expose:r,emit:o}){const n=o,a=e,l=t((()=>i&&a.name?i.errors[a.name]??null:null)),i=s("form",null),c={id:`input-${X()}`,name:t((()=>a.name)),label:t((()=>a.label)),value:t((()=>i&&a.name?i.getFieldValue(a.name):a.modelValue)),errors:T(l),update(e){i&&a.name?i.setFieldValue(a.name,e):n("update:modelValue",e)}};return g("input",c),r(c),(t,r)=>e.as?(p(),m(_(e.as),{key:0},{default:h((()=>[v(t.$slots,"default")])),_:3})):v(t.$slots,"default",{key:1})}});Tr.__file="src/components/headless/forms/AGHeadlessInput.vue";const Lr=["id"];var Rr=u({__name:"AGHeadlessInputError",setup(e){const r=ze("input","<AGHeadlessInputError> must be a child of a <AGHeadlessInput>"),s=t((()=>r.errors?pt(`errors.${r.errors[0]}`,`Error: ${r.errors[0]}`):null));return(e,t)=>s.value?(p(),x("p",{key:0,id:`${f(r).id}-error`},$(s.value),9,Lr)):S("v-if",!0)}});Rr.__file="src/components/headless/forms/AGHeadlessInputError.vue";const Ir=["id","name","type","value","aria-invalid","aria-describedby","checked"];var Pr=u({__name:"AGHeadlessInputInput",props:{type:et("text")},setup(r){const s=r,o=e(),n=ze("input","<AGHeadlessInputInput> must be a child of a <AGHeadlessInput>"),a=t((()=>n.name??void 0)),l=t((()=>n.value)),i=t((()=>{if("checkbox"===s.type)return!!l.value}));function c(){o.value&&n.update("checkbox"===s.type?o.value.checked:o.value.value)}return(e,t)=>(p(),x("input",{id:f(n).id,ref_key:"$input",ref:o,name:a.value,type:r.type,value:l.value,"aria-invalid":f(n).errors?"true":"false","aria-describedby":f(n).errors?`${f(n).id}-error`:void 0,checked:i.value,onInput:c},null,40,Ir))}});Pr.__file="src/components/headless/forms/AGHeadlessInputInput.vue";const Or=["for"];var Br=u({__name:"AGHeadlessInputLabel",setup(e){const r=ze("input","<AGHeadlessInputLabel> must be a child of a <AGHeadlessInput>"),s=L(),o=t((()=>!(!r.label&&!s.default)));return(e,t)=>o.value?(p(),x("label",{key:0,for:f(r).id},[v(e.$slots,"default",{},(()=>[M($(f(r).label),1)]))],8,Or)):S("v-if",!0)}});Br.__file="src/components/headless/forms/AGHeadlessInputLabel.vue";const Vr={class:"absolute bottom-0 left-0 translate-y-full"};var Dr=u({inheritAttrs:!1,__name:"AGInput",props:Er(),setup(e){const t=e,r=Oe(),[s,o]=St();return(e,n)=>(p(),m(Tr,C({ref_key:"$input",ref:r,class:["relative flex flex-col items-center",f(o)]},t),{default:h((()=>[w(Br,{class:"sr-only"}),w(Pr,C(f(s),{class:["block w-full border-0 py-1.5 text-gray-900 ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600",{"ring-1 ring-red-500":f(r)?.errors}]}),null,16,["class"]),G("div",Vr,[w(Rr,{class:"mt-1 text-sm text-red-500"})])])),_:1},16,["class"]))}});Dr.__file="src/components/forms/AGInput.vue";const qr={String:"string",Number:"number",Boolean:"boolean",Object:"object"},zr=new WeakMap;class Ur extends D{constructor(r){super(),O(this,"errors",void 0),O(this,"_fields",void 0),O(this,"_data",void 0),O(this,"_submitted",void 0),O(this,"_errors",void 0),this._fields=r,this._submitted=e(!1),this._data=this.getInitialData(r),this._errors=this.getInitialErrors(r),zr.set(this,t((()=>!Object.values(this._errors).some((e=>null!==e))))),this.errors=T(this._errors)}get valid(){return!!zr.get(this)?.value}get submitted(){return this._submitted.value}setFieldValue(e,t){this._data[e]=t,this._submitted.value&&this.validate()}getFieldValue(e){return this._data[e]}validate(){const e=Object.entries(this._fields).reduce(((e,t)=>{let[r,s]=t;return e[r]=this.getFieldErrors(r,s),e}),{});return this.resetErrors(e),this.valid}reset(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this._submitted.value=!1,e.keepData||this.resetData(),e.keepErrors||this.resetErrors()}submit(){return this._submitted.value=!0,this.validate()}__get(e){return e in this._fields?this._data[e]:super.__get(e)}__set(e,t){e in this._fields?Object.assign(this._data,{[e]:t}):super.__set(e,t)}getFieldErrors(e,t){const r=[];return t.rules?.includes("required")&&!this._data[e]&&r.push("required"),r.length>0?r:null}getInitialData(e){if(this.static().isConjuring())return{};const t=Object.entries(e).reduce(((e,t)=>{let[r,s]=t;return e[r]=s.default??null,e}),{});return 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 Fr(e){return new Ur(e)}function Nr(e){return{default:e,type:qr.Boolean}}function Kr(e){return{default:e,type:qr.Boolean,rules:"required"}}function Wr(e){return{default:e,type:qr.Number,rules:"required"}}function Qr(e){return{default:e,type:qr.String,rules:"required"}}function Zr(e){return{default:e,type:qr.Number}}function Yr(e){return{default:e,type:qr.String}}const Jr={class:"mt-2 flex flex-row-reverse gap-2"};var Xr=u({__name:"AGPromptModal",props:Cr(),setup(e){const t=e,r=Fr({draft:Qr(t.defaultValue??"")}),{renderedAcceptText:s,renderedCancelText:o}=jr(t);return(e,t)=>(p(),m(Vt,{cancellable:!1,title:e.title},{default:h((({close:t})=>[w(Ot,{text:e.message},null,8,["text"]),w(Mr,{form:f(r),onSubmit:e=>t(f(r).draft)},{default:h((()=>[w(Dr,{name:"draft",placeholder:e.placeholder,label:e.label},null,8,["placeholder","label"]),G("div",Jr,[w(Wt,{submit:""},{default:h((()=>[M($(f(s)),1)])),_:1}),w(Wt,{color:"secondary",onClick:e=>t()},{default:h((()=>[M($(f(o)),1)])),_:2},1032,["onClick"])])])),_:2},1032,["form","onSubmit"])])),_:1},8,["title"]))}});Xr.__file="src/components/modals/AGPromptModal.vue";const es={class:"pointer-events-auto"};var ts=u({__name:"AGHeadlessSnackbar",setup:e=>(e,t)=>(p(),x("div",es,[v(e.$slots,"default")]))});ts.__file="src/components/headless/snackbars/AGHeadlessSnackbar.vue";const rs=se(ft,["Primary","Clear"]),ss={id:Xe(),message:Xe(),actions:Ie((()=>[])),color:De(rs,ft.Secondary)};function os(){return ss}function ns(e){return{activate:function(t){t.handler?.(),t.dismiss&&ct.hideSnackbar(e.id)}}}var as=u({__name:"AGSnackbar",props:os(),setup(e){const r=e,{activate:s}=ns(r),o=t((()=>r.color===ft.Danger?"bg-red-200 text-red-900":"bg-gray-900 text-white"));return(e,t)=>(p(),m(ts,{class:j(["flex flex-row items-center justify-center gap-3 p-4",o.value])},{default:h((()=>[w(Ot,{text:e.message,inline:""},null,8,["text"]),(p(!0),x(A,null,E(e.actions,((t,r)=>(p(),m(Wt,{key:r,color:e.color,onClick:e=>f(s)(t)},{default:h((()=>[M($(t.text),1)])),_:2},1032,["color","onClick"])))),128))])),_:1},8,["class"]))}});as.__file="src/components/snackbars/AGSnackbar.vue";const ls={class:"grid flex-grow place-items-center"},is={class:"flex flex-col items-center space-y-6 p-8"},cs={class:"mt-2 text-center text-4xl font-medium text-red-600"},us={class:"mt-4 flex flex-col space-y-4"};var ds=u({__name:"AGStartupCrash",setup:e=>(e,t)=>(p(),x("div",ls,[G("div",is,[G("h1",cs,$(e.$td("startupCrash.title","Something went wrong!")),1),w(Ot,{text:e.$td("startupCrash.message","Something failed trying to start the application.\n\nHere's some things you can do:"),class:"mt-4 text-center"},null,8,["text"]),G("div",us,[w(Wt,{color:"danger",onClick:t[0]||(t[0]=t=>e.$app.reload())},{default:h((()=>[M($(e.$td("startupCrash.reload","Try again")),1)])),_:1}),w(Wt,{color:"danger",onClick:t[1]||(t[1]=t=>e.$errors.inspect(e.$errors.startupErrors))},{default:h((()=>[M($(e.$td("startupCrash.inspect","View error details")),1)])),_:1})])])]))});ds.__file="src/components/lib/AGStartupCrash.vue";const ps={$ui:ct};var ms={async install(e,t){const r={[lt.AlertModal]:zt,[lt.ConfirmModal]:Zt,[lt.ErrorReportModal]:xr,[lt.LoadingModal]:Gr,[lt.PromptModal]:Xr,[lt.Snackbar]:as,[lt.StartupCrash]:ds};Object.entries({...r,...t.components}).forEach((e=>{let[t,r]=e;return ct.registerComponent(t,r)})),await ot(e,ps)}};async function fs(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r=[At,rt,bt,xt,nt,ms,...t.plugins??[]];await Re(r,e,t),await(t.install?.(e)),await $e.emit("application-ready")}async function hs(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r=R(e);await fs(r,t),r.mount("#app"),r._container?.classList.remove("loading"),await $e.emit("application-mounted")}const vs={key:0};var gs=u({__name:"AGAppModals",setup(e){const r=t((()=>ct.modals[0]??null));return(e,t)=>r.value?(p(),x("aside",vs,[w(Tt,{"child-index":1,modal:r.value},null,8,["modal"])])):S("v-if",!0)}});gs.__file="src/components/AGAppModals.vue";const _s={"aria-live":"assertive",class:"z-60 pointer-events-none fixed inset-0 flex items-end px-4 py-6 sm:p-6"},bs={class:"flex w-full flex-col items-end space-y-4"};const ys={render:function(e,t){return p(),x("div",_s,[G("div",bs,[(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 xs=ys,As=u({__name:"AGAppOverlays",setup(t){const r=e(null),s=e(!0);return wt("show-overlays-backdrop",(async()=>{r.value&&s.value&&(s.value=!1,r.value.classList.remove("opacity-0"))})),wt("hide-overlays-backdrop",(async()=>{r.value&&!s.value&&(s.value=!0,r.value.classList.add("opacity-0"))})),(e,t)=>(p(),x(A,null,[G("div",{id:"aerogel-overlays-backdrop",ref_key:"$backdrop",ref:r,class:"pointer-events-none fixed inset-0 z-50 bg-black/30 opacity-0"},null,512),w(gs),w(xs)],64))}});As.__file="src/components/AGAppOverlays.vue";const ws={class:"flex min-h-full flex-col text-base font-normal leading-tight text-gray-900 antialiased"};var Ss=u({__name:"AGAppLayout",setup:e=>(e,t)=>(p(),x("div",ws,[e.$errors.hasStartupErrors?v(e.$slots,"startup-crash",{key:0},(()=>[(p(),m(_(e.$ui.requireComponent(f(lt).StartupCrash))))])):v(e.$slots,"default",{key:1}),w(As)]))});Ss.__file="src/components/AGAppLayout.vue";const Gs={class:"ml-2"};var ks=u({inheritAttrs:!1,__name:"AGCheckbox",props:{name:et()},emits:["update:modelValue"],setup(e){const t=Oe();return(r,s)=>(p(),m(Tr,{ref_key:"$input",ref:t,name:e.name,class:"flex","onUpdate:modelValue":s[0]||(s[0]=e=>r.$emit("update:modelValue",e))},{default:h((()=>[w(Pr,C(r.$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"]),G("div",Gs,[r.$slots.default?(p(),m(Br,{key:0},{default:h((()=>[v(r.$slots,"default")])),_:3})):S("v-if",!0),w(Rr,{class:"text-sm text-red-600"})])])),_:3},8,["name"]))}});ks.__file="src/components/forms/AGCheckbox.vue";const Cs={viewBox:"0 0 20 20",width:"1.2em",height:"1.2em"},js=[G("path",{fill:"currentColor",d:"m9.293 12.95l.707.707L15.657 8l-1.414-1.414L10 10.828L5.757 6.586L4.343 8z"},null,-1)];var Ms={name:"zondicons-cheveron-down",render:function(e,t){return p(),x("svg",Cs,[...js])}};const $s={name:et(),label:et(),options:We(),noSelectionText:et(),optionsText:Fe()},Es=["update:modelValue"];function Hs(){return $s}function Ts(){return[...Es]}function Ls(e){return Ct(e,$s)}var Rs=u({__name:"AGHeadlessSelect",props:{modelValue:Fe(),...Hs()},emits:Ts(),setup(e,{expose:r,emit:o}){const n=o,a=e,l=t((()=>"function"==typeof a.optionsText?a.optionsText:"string"==typeof a.optionsText?e=>re(e[a.optionsText]):e=>re(e))),i=s("form",null),c=t((()=>a.noSelectionText??pt("select.noSelection","-"))),u=t((()=>i&&a.name?i.getFieldValue(a.name):a.modelValue)),d=t((()=>i&&a.name?i.errors[a.name]??null:null));function _(e){i&&a.name?i.setFieldValue(a.name,e):n("update:modelValue",e)}const b={id:`select-${X()}`,noSelectionText:c,selectedOption:u,errors:d,options:t((()=>a.options)),label:t((()=>a.label)),buttonText:t((()=>null===u.value?c.value:l.value(u.value))),renderText:l,update:_};return g("select",b),r(b),(e,t)=>(p(),m(f(me),{"model-value":u.value,"onUpdate:modelValue":t[0]||(t[0]=e=>_(e))},{default:h((({value:t,open:r,disabled:s})=>[v(e.$slots,"default",{value:t,open:r,disabled:s})])),_:3},8,["model-value"]))}});Rs.__file="src/components/headless/forms/AGHeadlessSelect.vue";var Is=u({__name:"AGHeadlessSelectButton",props:{textClass:et()},setup(e){const t=ze("select","<AGHeadlessSelectButton> must be a child of a <AGHeadlessSelect>");return(r,s)=>(p(),m(f(fe),null,{default:h((({value:s,open:o,disabled:n})=>[v(r.$slots,"default",{value:s,open:o,disabled:n},(()=>[G("span",{class:j(e.textClass)},$(f(t)?.buttonText),3)])),v(r.$slots,"icon")])),_:3}))}});Is.__file="src/components/headless/forms/AGHeadlessSelectButton.vue";const Ps=["id"];var Os=u({__name:"AGHeadlessSelectError",setup(e){const r=ze("select","<AGHeadlessSelectError> must be a child of a <AGHeadlessSelect>"),s=t((()=>r.errors?pt(`errors.${r.errors[0]}`,`Error: ${r.errors[0]}`):null));return(e,t)=>s.value?(p(),x("p",{key:0,id:`${f(r).id}-error`},$(s.value),9,Ps)):S("v-if",!0)}});Os.__file="src/components/headless/forms/AGHeadlessSelectError.vue";var Bs=u({__name:"AGHeadlessSelectLabel",setup(e){const r=ze("select","<AGHeadlessSelectLabel> must be a child of a <AGHeadlessSelect>"),s=L(),o=t((()=>!(!r.label&&!s.default)));return(e,t)=>o.value?(p(),m(f(he),{key:0},{default:h((({open:t,disabled:s})=>[v(e.$slots,"default",{open:t,disabled:s},(()=>[M($(f(r).label),1)]))])),_:3})):S("v-if",!0)}});Bs.__file="src/components/headless/forms/AGHeadlessSelectLabel.vue";var Vs=u({__name:"AGHeadlessSelectOption",props:{value:Ze(),selectedClass:et(),unselectedClass:et(),activeClass:et(),inactiveClass:et()},setup(e){const t=ze("select","<AGHeadlessSelectOption> must be a child of a <AGHeadlessSelect>");return(r,s)=>(p(),m(f(ve),{value:e.value,as:"template"},{default:h((({active:s,selected:o,disabled:n})=>[v(r.$slots,"default",{active:s,selected:o,disabled:n},(()=>[G("li",{class:j({[e.activeClass??"active"]:s,[e.inactiveClass??"inactive"]:!s,[e.selectedClass??"selected"]:o,[e.unselectedClass??"unselected"]:!o})},$(f(t).renderText(e.value)),3)]))])),_:3},8,["value"]))}});Vs.__file="src/components/headless/forms/AGHeadlessSelectOption.vue";const Ds={class:"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2"};var qs=u({__name:"AGSelect",props:Hs(),emits:Ts(),setup(e){const t=e,r=Oe();return(e,s)=>(p(),m(Rs,C(t,{ref_key:"$select",ref:r,as:"div","onUpdate:modelValue":s[0]||(s[0]=t=>e.$emit("update:modelValue",t))}),{default:h((()=>[w(Bs,{class:"block text-sm font-medium leading-6 text-gray-900"}),G("div",{class:j(["relative",{"mt-2":f(r)?.label}])},[w(Is,{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(r)?.errors}]),"text-class":"block truncate"},{icon:h((()=>[G("span",Ds,[w(f(Ms),{class:"h-5 w-5 text-gray-400"})])])),_:1},8,["class"]),w(f(ge),{class:"absolute z-10 mt-1 max-h-60 w-full overflow-auto border bg-white py-1 text-base ring-1 ring-black ring-opacity-5 focus:outline-none"},{default:h((()=>[(p(!0),x(A,null,E(f(r)?.options??[],((e,t)=>(p(),m(Vs,{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(Os,{class:"mt-2 text-sm text-red-600"})])),_:1},16))}});qs.__file="src/components/forms/AGSelect.vue";var zs=u({__name:"AGErrorMessage",props:{error:Je()},setup(e){const r=e,s=t((()=>vt(r.error)));return(e,t)=>(p(),m(Ot,{text:s.value,inline:""},null,8,["text"]))}});zs.__file="src/components/lib/AGErrorMessage.vue";var Us=u({__name:"AGLink",setup:e=>(e,t)=>(p(),m(Kt,{class:"font-medium hover:underline"},{default:h((()=>[v(e.$slots,"default")])),_:3}))});Us.__file="src/components/lib/AGLink.vue";var Fs=u({__name:"AGMeasured",props:{as:et("span")},setup(t){const r=e(!1);return(e,s)=>{const o=I("measure");return P((p(),m(_(t.as),{class:j({"!invisible !absolute !w-auto":!r.value})},{default:h((()=>[v(e.$slots,"default")])),_:3},8,["class"])),[[o,()=>r.value=!0]])}}});Fs.__file="src/components/lib/AGMeasured.vue";var Ns=u({__name:"AGModalTitle",setup:e=>(e,t)=>(p(),m(It,{class:"mb-2 font-semibold"},{default:h((()=>[v(e.$slots,"default")])),_:3}))});Ns.__file="src/components/modals/AGModalTitle.vue";class Ks{}async function Ws(e){await e.run()}export{zt as AGAlertModal,Ss as AGAppLayout,As as AGAppOverlays,Wt as AGButton,ks as AGCheckbox,Zt as AGConfirmModal,zs as AGErrorMessage,vr as AGErrorReportModalButtons,gr as AGErrorReportModalTitle,Mr as AGForm,Kt as AGHeadlessButton,Tr as AGHeadlessInput,Rr as AGHeadlessInputError,Pr as AGHeadlessInputInput,Br as AGHeadlessInputLabel,Ht as AGHeadlessModal,Rt as AGHeadlessModalPanel,It as AGHeadlessModalTitle,Rs as AGHeadlessSelect,Is as AGHeadlessSelectButton,Os as AGHeadlessSelectError,Bs as AGHeadlessSelectLabel,Vs as AGHeadlessSelectOption,ts as AGHeadlessSnackbar,Dr as AGInput,Us as AGLink,Gr as AGLoadingModal,Ot as AGMarkdown,Fs as AGMeasured,Vt as AGModal,Tt as AGModalContext,Ns as AGModalTitle,Xr as AGPromptModal,qs as AGSelect,as as AGSnackbar,ds as AGStartupCrash,Te as App,He as AppService,ft as Colors,ht as Errors,je as EventListenerPriorities,$e as Events,Me as EventsService,qr as FormFieldTypes,Ks as Job,ut as Lang,Ce as Service,rs as SnackbarColors,ct as UI,lt as UIComponents,it as UIService,Dt as alertModalProps,Ie as arrayProp,Nr as booleanInput,Pe as booleanProp,ot as bootServices,hs as bootstrap,fs as bootstrapApplication,Oe as componentRef,Be as computedAsync,Ut as confirmModalProps,Ve as defineDirective,Le as definePlugin,ke as defineServiceState,Ge as defineServiceStore,Ws as dispatch,De as enumProp,sr as errorReportModalProps,Hr as extractInputProps,$t as extractModalProps,Ls as extractSelectProps,vt as getErrorMessage,Se as getPiniaStore,Ue as injectOrFail,qe as injectReactive,ze as injectReactiveOrFail,$r as inputProps,Re as installPlugins,Ar as loadingModalProps,Fe as mixedProp,jt as modalProps,Zr as numberInput,Ne as numberProp,Ke as objectProp,Gt as onCleanMounted,kr as promptModalProps,kt as removeInteractiveClasses,We as requiredArrayProp,Kr as requiredBooleanInput,Qe as requiredEnumProp,Ze as requiredMixedProp,Wr as requiredNumberInput,Ye as requiredNumberProp,Je as requiredObjectProp,Qr as requiredStringInput,Xe as requiredStringProp,we as resetPiniaStore,Es as selectEmits,$s as selectProps,ss as snackbarProps,Yr as stringInput,et as stringProp,dt as translate,pt as translateWithDefault,qt as useAlertModalProps,Nt as useConfirmModal,Ft as useConfirmModalProps,nr as useErrorReportModal,or as useErrorReportModalProps,wt as useEvent,Fr as useForm,St as useInputAttrs,Er as useInputProps,Sr as useLoadingModal,wr as useLoadingModalProps,Et as useModalExpose,Mt as useModalProps,jr as usePromptModal,Cr as usePromptModalProps,Ts as useSelectEmits,Hs as useSelectProps,ns as useSnackbar,os as useSnackbarProps};
2
2
  //# sourceMappingURL=aerogel-core.esm.js.map