@aerogel/core 0.0.0-next.669133ce9c5f0eeaff1b63c4e2962e90129cfc1a → 0.0.0-next.71f28064caa2ea968f0e99396b672de218176260

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.
@@ -31,12 +31,19 @@ import type { UnwrapNestedRefs } from 'vue';
31
31
  import { VNode } from 'vue';
32
32
  import type { Writable } from '@noeldemartin/utils';
33
33
 
34
+ export declare type AerogelGlobalEvents = Partial<{
35
+ [Event in EventWithoutPayload]: () => unknown;
36
+ }> & Partial<{
37
+ [Event in EventWithPayload]: EventListener_2<EventsPayload[Event]>;
38
+ }>;
39
+
34
40
  export declare interface AerogelOptions {
35
41
  plugins?: Plugin_2[];
36
42
  install?(app: App_2): void | Promise<void>;
37
43
  }
38
44
 
39
45
  export declare interface AerogelTestingRuntime {
46
+ on: (typeof Events)['on'];
40
47
  }
41
48
 
42
49
  export declare const AGAlertModal: DefineComponent< {
@@ -386,11 +393,11 @@ validator?(value: unknown): boolean;
386
393
  } & {
387
394
  default: string | (() => string | null) | null;
388
395
  };
389
- as: {
390
- type?: PropType<string> | undefined;
396
+ description: {
397
+ type?: PropType<string | null> | undefined;
391
398
  validator?(value: unknown): boolean;
392
399
  } & {
393
- default: string | (() => string) | null;
400
+ default: string | (() => string | null) | null;
394
401
  };
395
402
  modelValue: {
396
403
  type?: PropType<string | number | boolean | null> | undefined;
@@ -398,6 +405,12 @@ validator?(value: unknown): boolean;
398
405
  } & {
399
406
  default: string | number | boolean | (() => string | number | boolean | null) | null;
400
407
  };
408
+ as: {
409
+ type?: PropType<string> | undefined;
410
+ validator?(value: unknown): boolean;
411
+ } & {
412
+ default: string | (() => string) | null;
413
+ };
401
414
  }, (_ctx: any, _cache: any) => VNode<RendererNode, RendererElement, {
402
415
  [key: string]: any;
403
416
  }>, unknown, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, "update:modelValue"[], "update:modelValue", PublicProps, Readonly<ExtractPropTypes< {
@@ -413,11 +426,11 @@ validator?(value: unknown): boolean;
413
426
  } & {
414
427
  default: string | (() => string | null) | null;
415
428
  };
416
- as: {
417
- type?: PropType<string> | undefined;
429
+ description: {
430
+ type?: PropType<string | null> | undefined;
418
431
  validator?(value: unknown): boolean;
419
432
  } & {
420
- default: string | (() => string) | null;
433
+ default: string | (() => string | null) | null;
421
434
  };
422
435
  modelValue: {
423
436
  type?: PropType<string | number | boolean | null> | undefined;
@@ -425,15 +438,26 @@ validator?(value: unknown): boolean;
425
438
  } & {
426
439
  default: string | number | boolean | (() => string | number | boolean | null) | null;
427
440
  };
441
+ as: {
442
+ type?: PropType<string> | undefined;
443
+ validator?(value: unknown): boolean;
444
+ } & {
445
+ default: string | (() => string) | null;
446
+ };
428
447
  }>> & {
429
448
  "onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
430
449
  }, {
431
450
  as: string;
432
- modelValue: string | number | boolean | null;
433
451
  name: string | null;
434
452
  label: string | null;
453
+ description: string | null;
454
+ modelValue: string | number | boolean | null;
435
455
  }, {}>;
436
456
 
457
+ export declare const AGHeadlessInputDescription: DefineComponent< {}, (_ctx: any, _cache: any) => VNode<RendererNode, RendererElement, {
458
+ [key: string]: any;
459
+ }>, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<ExtractPropTypes< {}>>, {}, {}>;
460
+
437
461
  export declare const AGHeadlessInputError: DefineComponent< {}, (_ctx: any, _cache: any) => VNode<RendererNode, RendererElement, {
438
462
  [key: string]: any;
439
463
  }>, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<ExtractPropTypes< {}>>, {}, {}>;
@@ -723,6 +747,18 @@ validator?(value: unknown): boolean;
723
747
  } & {
724
748
  default: string | (() => string | null) | null;
725
749
  };
750
+ description: {
751
+ type?: PropType<string | null> | undefined;
752
+ validator?(value: unknown): boolean;
753
+ } & {
754
+ default: string | (() => string | null) | null;
755
+ };
756
+ modelValue: {
757
+ type?: PropType<string | number | boolean | null> | undefined;
758
+ validator?(value: unknown): boolean;
759
+ } & {
760
+ default: string | number | boolean | (() => string | number | boolean | null) | null;
761
+ };
726
762
  }, (_ctx: any, _cache: any) => VNode<RendererNode, RendererElement, {
727
763
  [key: string]: any;
728
764
  }>, unknown, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<ExtractPropTypes< {
@@ -738,9 +774,23 @@ validator?(value: unknown): boolean;
738
774
  } & {
739
775
  default: string | (() => string | null) | null;
740
776
  };
777
+ description: {
778
+ type?: PropType<string | null> | undefined;
779
+ validator?(value: unknown): boolean;
780
+ } & {
781
+ default: string | (() => string | null) | null;
782
+ };
783
+ modelValue: {
784
+ type?: PropType<string | number | boolean | null> | undefined;
785
+ validator?(value: unknown): boolean;
786
+ } & {
787
+ default: string | number | boolean | (() => string | number | boolean | null) | null;
788
+ };
741
789
  }>>, {
742
790
  name: string | null;
743
791
  label: string | null;
792
+ description: string | null;
793
+ modelValue: string | number | boolean | null;
744
794
  }, {}>;
745
795
 
746
796
  export declare const AGLink: DefineComponent< {}, (_ctx: any, _cache: any) => VNode<RendererNode, RendererElement, {
@@ -1336,6 +1386,11 @@ export declare function defineServiceStore<Id extends string, S extends StateTre
1336
1386
 
1337
1387
  export declare function dispatch(job: Job): Promise<void>;
1338
1388
 
1389
+ export declare interface ElementSize {
1390
+ width: number;
1391
+ height: number;
1392
+ }
1393
+
1339
1394
  export declare function enumProp<Enum extends Record<string, unknown>>(enumeration: Enum, defaultValue?: Enum[keyof Enum]): OptionalProp<Enum[keyof Enum]>;
1340
1395
 
1341
1396
  export declare type ErrorHandler = (error: ErrorSource) => boolean;
@@ -1375,7 +1430,6 @@ declare class ErrorsService extends _default {
1375
1430
  report(error: ErrorSource, message?: string): Promise<void>;
1376
1431
  see(report: ErrorReport): void;
1377
1432
  seeAll(): void;
1378
- getErrorMessage(error: ErrorSource): string;
1379
1433
  private logError;
1380
1434
  private createErrorReport;
1381
1435
  private createStartupErrorReport;
@@ -1405,6 +1459,7 @@ export declare interface EventsPayload {
1405
1459
 
1406
1460
  export declare class EventsService extends Service {
1407
1461
  private listeners;
1462
+ protected boot(): Promise<void>;
1408
1463
  emit<Event extends EventWithoutPayload>(event: Event): Promise<void>;
1409
1464
  emit<Event extends EventWithPayload>(event: Event, payload: EventsPayload[Event]): Promise<void>;
1410
1465
  emit<Event extends string>(event: UnknownEvent<Event>, payload?: unknown): Promise<void>;
@@ -1444,6 +1499,7 @@ declare class Form<Fields extends FormFieldDefinitions = FormFieldDefinitions> e
1444
1499
  private _data;
1445
1500
  private _submitted;
1446
1501
  private _errors;
1502
+ private _listeners;
1447
1503
  constructor(fields: Fields);
1448
1504
  get valid(): boolean;
1449
1505
  get submitted(): boolean;
@@ -1455,6 +1511,9 @@ declare class Form<Fields extends FormFieldDefinitions = FormFieldDefinitions> e
1455
1511
  keepErrors?: boolean;
1456
1512
  }): void;
1457
1513
  submit(): boolean;
1514
+ on(event: string, listener: FormListener): () => void;
1515
+ off(event: string, listener: FormListener): void;
1516
+ focus(input: string): Promise<void>;
1458
1517
  protected __get(property: string): unknown;
1459
1518
  protected __set(property: string, value: unknown): void;
1460
1519
  private getFieldErrors;
@@ -1492,6 +1551,10 @@ export declare const FormFieldTypes: {
1492
1551
 
1493
1552
  export declare type FormFieldValue = GetFormFieldValue<FormFieldType>;
1494
1553
 
1554
+ export declare type FormListener = (input: string) => unknown;
1555
+
1556
+ export declare function getErrorMessage(error: ErrorSource): string;
1557
+
1495
1558
  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;
1496
1559
 
1497
1560
  export declare function getPiniaStore(): Pinia;
@@ -1508,6 +1571,7 @@ export declare interface IAGHeadlessInput {
1508
1571
  id: string;
1509
1572
  name: ComputedRef<string | null>;
1510
1573
  label: ComputedRef<string | null>;
1574
+ description: ComputedRef<string | boolean | null>;
1511
1575
  value: ComputedRef<string | number | boolean | null>;
1512
1576
  errors: DeepReadonly<Ref<string[] | null>>;
1513
1577
  update(value: string | number | boolean | null): void;
@@ -1570,6 +1634,18 @@ export declare const inputProps: {
1570
1634
  } & {
1571
1635
  default: string | (() => string | null) | null;
1572
1636
  };
1637
+ description: {
1638
+ type?: PropType<string | null> | undefined;
1639
+ validator?(value: unknown): boolean;
1640
+ } & {
1641
+ default: string | (() => string | null) | null;
1642
+ };
1643
+ modelValue: {
1644
+ type?: PropType<string | number | boolean | null> | undefined;
1645
+ validator?(value: unknown): boolean;
1646
+ } & {
1647
+ default: string | number | boolean | (() => string | number | boolean | null) | null;
1648
+ };
1573
1649
  };
1574
1650
 
1575
1651
  export declare function installPlugins(plugins: Plugin_2[], ...args: GetClosureArgs<Plugin_2['install']>): Promise<void>;
@@ -1582,6 +1658,7 @@ export declare const Lang: Facade<LangService, LangService>;
1582
1658
 
1583
1659
  export declare interface LangProvider {
1584
1660
  translate(key: string, parameters?: Record<string, unknown>): string;
1661
+ translateWithDefault(key: string, defaultMessage: string, parameters?: Record<string, unknown>): string;
1585
1662
  }
1586
1663
 
1587
1664
  declare class LangService extends Service {
@@ -1589,8 +1666,7 @@ declare class LangService extends Service {
1589
1666
  constructor();
1590
1667
  setProvider(provider: LangProvider): void;
1591
1668
  translate(key: string, parameters?: Record<string, unknown>): string;
1592
- translateWithDefault(key: string, defaultMessage: string): string;
1593
- translateWithDefault(key: string, parameters: Record<string, unknown>, defaultMessage: string): string;
1669
+ translateWithDefault(key: string, defaultMessage: string, parameters?: Record<string, unknown>): string;
1594
1670
  }
1595
1671
 
1596
1672
  export declare type LangServices = typeof services_2;
@@ -1604,6 +1680,8 @@ export declare const loadingModalProps: {
1604
1680
  };
1605
1681
  };
1606
1682
 
1683
+ export declare type MeasureDirectiveListener = (size: ElementSize) => unknown;
1684
+
1607
1685
  export declare function mixedProp<T>(type?: PropType<T>): OptionalProp<T | null>;
1608
1686
 
1609
1687
  declare interface Modal<T = unknown> {
@@ -1648,6 +1726,10 @@ export declare function objectProp<T>(defaultValue: () => T): OptionalProp<T>;
1648
1726
 
1649
1727
  export declare function onCleanMounted(operation: () => Function): void;
1650
1728
 
1729
+ export declare function onFormFocus(input: {
1730
+ name: string | null;
1731
+ }, listener: () => unknown): void;
1732
+
1651
1733
  declare type OptionalProp<T> = BaseProp<T> & {
1652
1734
  default: T | (() => T) | null;
1653
1735
  };
@@ -1881,10 +1963,7 @@ export declare function stringProp(defaultValue: string): OptionalProp<string>;
1881
1963
 
1882
1964
  export declare const translate: (key: string, parameters?: Record<string, unknown> | undefined) => string;
1883
1965
 
1884
- export declare const translateWithDefault: {
1885
- (key: string, defaultMessage: string): string;
1886
- (key: string, parameters: Record<string, unknown>, defaultMessage: string): string;
1887
- };
1966
+ export declare const translateWithDefault: (key: string, defaultMessage: string, parameters?: Record<string, unknown>) => string;
1888
1967
 
1889
1968
  export declare const UI: Facade<UIService, UIService>;
1890
1969
 
@@ -2001,6 +2080,10 @@ export { }
2001
2080
  directives?: Record<string, Directive>;
2002
2081
  }
2003
2082
 
2083
+ export interface EventsPayload {
2084
+ error: { error: ErrorSource; message?: string };
2085
+ }
2086
+
2004
2087
  export interface AerogelOptions {
2005
2088
  handleError?(error: ErrorSource): boolean;
2006
2089
  }
@@ -2015,6 +2098,11 @@ declare module '@vue/runtime-core' {
2015
2098
  }
2016
2099
  }
2017
2100
 
2101
+ declare global {
2102
+ // eslint-disable-next-line no-var
2103
+ var __aerogelEvents__: AerogelGlobalEvents | undefined;
2104
+ }
2105
+
2018
2106
  export interface AerogelOptions {
2019
2107
  services?: Record<string, Service>;
2020
2108
  }
@@ -2024,17 +2112,18 @@ declare module '@vue/runtime-core' {
2024
2112
  }
2025
2113
 
2026
2114
  declare global {
2027
- interface Window {
2028
- testingRuntime?: AerogelTestingRuntime;
2029
- }
2115
+ // eslint-disable-next-line no-var
2116
+ var testingRuntime: AerogelTestingRuntime | undefined;
2030
2117
  }
2031
2118
 
2032
2119
  export interface EventsPayload {
2033
- 'modal-will-close': { modal: Modal; result?: unknown };
2034
- 'modal-closed': { modal: Modal; result?: unknown };
2035
2120
  'close-modal': { id: string; result?: unknown };
2036
2121
  'hide-modal': { id: string };
2122
+ 'hide-overlays-backdrop': void;
2123
+ 'modal-closed': { modal: Modal; result?: unknown };
2124
+ 'modal-will-close': { modal: Modal; result?: unknown };
2037
2125
  'show-modal': { id: string };
2126
+ 'show-overlays-backdrop': void;
2038
2127
  }
2039
2128
 
2040
2129
  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 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 R,createApp as L,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,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{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"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??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 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 Re(e){return e}async function Le(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:t.component??n(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)}}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 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(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})))})}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"):pt("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??pt("errors.unknown","Unknown Error")),description:ee(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}}});const vt={$errors:ht};function gt(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 _t={async install(e,t){gt(e,t.handleError),await ot(e,vt)}};const bt={$lang:ut};var yt={async install(e){e.config.globalProperties.$t??=dt,e.config.globalProperties.$td=pt,await ot(e,bt)}},xt={async install(){"testing"===import.meta.env.MODE&&(window.testingRuntime={})}};function At(e,t){const r=$e.on(e,t);l((()=>r()))}function wt(){const e=i(),r=t((()=>e.class));return[t((()=>se(e,"class"))),r]}function St(e){let t=oe;c((()=>t=e())),l((()=>t()))}function Gt(e){return e.split(/\s+/).filter((e=>!/^(hover|focus|focus-visible):/.test(e))).join(" ").trim()}function kt(e,t){return Object.keys(t).reduce(((t,r)=>(t[r]=e[r],t)),{})}const Ct={cancellable:Pe(!0),title:et()};function jt(){return Ct}function Mt(e){return kt(e,Ct)}function $t(e){return{close:async()=>e.value?.close(),cancellable:t((()=>!!e.value?.cancellable))}}var Et=u({__name:"AGHeadlessModal",props:jt(),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 At("close-modal",(async({id:e,result:t})=>{e===l.id&&await c(t)})),At("hide-modal",(async({id:e})=>{e===l.id&&await i()})),At("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))}});Et.__file="src/components/headless/modals/AGHeadlessModal.vue";var Ht=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))}});Ht.__file="src/components/modals/AGModalContext.vue";const Tt=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},[Tt,w(Ht,{"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 Lt=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 It(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}Lt.__file="src/components/headless/modals/AGHeadlessModalTitle.vue";var Pt=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=It(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))}});Pt.__file="src/components/lib/AGMarkdown.vue";const Ot={class:"fixed inset-0 flex items-center justify-center p-8"};var Bt=u({inheritAttrs:!1,__name:"AGModal",props:jt(),setup(t,{expose:r}){const s=t,o=e();return r($t(o)),(e,t)=>(p(),m(Et,C({ref_key:"$modal",ref:o},s,{class:"relative z-50"}),{default:h((({close:t})=>[G("div",Ot,[w(Rt,{class:"flex max-h-full max-w-full flex-col overflow-hidden bg-white p-4"},{default:h((()=>[e.title?(p(),m(Lt,{key:0,class:"mb-2 text-lg font-semibold"},{default:h((()=>[w(Pt,{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))}});Bt.__file="src/components/modals/AGModal.vue";const Vt={title:et(),message:Xe()};function Dt(){return Vt}var qt=u({__name:"AGAlertModal",props:Dt(),setup:e=>(e,t)=>(p(),m(Bt,{title:e.title},{default:h((()=>[w(Pt,{text:e.message},null,8,["text"])])),_:1},8,["title"]))});qt.__file="src/components/modals/AGAlertModal.vue";const zt={title:et(),message:Xe(),acceptText:et(),cancelText:et()};function Ut(){return zt}function Ft(e){return{renderedAcceptText:t((()=>e.acceptText??pt("ui.accept","Ok"))),renderedCancelText:t((()=>e.cancelText??pt("ui.cancel","Cancel")))}}var Nt=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:re({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))}});Nt.__file="src/components/headless/forms/AGHeadlessButton.vue";var Kt=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(Nt,{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"]))}});Kt.__file="src/components/forms/AGButton.vue";const Wt={class:"mt-2 flex flex-row-reverse gap-2"};var Qt=u({__name:"AGConfirmModal",props:Ut(),setup(e){const t=e,{renderedAcceptText:r,renderedCancelText:s}=Ft(t);return(e,t)=>(p(),m(Bt,{cancellable:!1,title:e.title},{default:h((({close:t})=>[w(Pt,{text:e.message},null,8,["text"]),G("div",Wt,[w(Kt,{onClick:e=>t(!0)},{default:h((()=>[M($(f(r)),1)])),_:2},1032,["onClick"]),w(Kt,{color:"secondary",onClick:e=>t()},{default:h((()=>[M($(f(s)),1)])),_:2},1032,["onClick"])])])),_:1},8,["title"]))}});Qt.__file="src/components/modals/AGConfirmModal.vue";const Zt={viewBox:"0 0 20 20",width:"1.2em",height:"1.2em"},Yt=[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 Jt={name:"zondicons-cheveron-right",render:function(e,t){return p(),x("svg",Zt,[...Yt])}};const Xt={viewBox:"0 0 20 20",width:"1.2em",height:"1.2em"},er=[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 tr={name:"zondicons-cheveron-left",render:function(e,t){return p(),x("svg",Xt,[...er])}};const rr={reports:We()};function sr(){return rr}function or(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 nr={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},ar=[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 lr={name:"mdi-console",render:function(e,t){return p(),x("svg",nr,[...ar])}};const ir={viewBox:"0 0 20 20",width:"1.2em",height:"1.2em"},cr=[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 ur={name:"zondicons-copy",render:function(e,t){return p(),x("svg",ir,[...cr])}};const dr={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},pr=[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 mr={name:"mdi-github",render:function(e,t){return p(),x("svg",dr,[...pr])}};const fr={class:"flex"};var hr=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:ur,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:lr,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:mr,url:o.value})}))));return(e,t)=>(p(),x("div",fr,[(p(!0),x(A,null,E(n.value,((t,r)=>v(e.$slots,"default",C(t,{key:r}),(()=>[w(Kt,{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))]))}});hr.__file="src/components/modals/AGErrorReportModalButtons.vue";var vr=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(Pt,{text:s.value,inline:""},null,8,["text"]))}});vr.__file="src/components/modals/AGErrorReportModalTitle.vue";const gr={class:"flex items-center justify-between text-lg font-medium"},_r={class:"flex items-center"},br=["textContent"];var yr=u({__name:"AGErrorReportModal",props:sr(),setup(e){const t=e,{activeReportIndex:r,details:s,nextReportText:o,previousReportText:n,report:a}=or(t);return(e,t)=>(p(),m(Bt,null,{default:h((()=>[G("div",null,[G("h2",gr,[G("div",_r,[w(vr,{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(Kt,{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(tr),{"aria-hidden":"true",class:"h-4 w-4"})])),_:1},8,["disabled","title","aria-label"]),w(Kt,{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(Jt),{"aria-hidden":"true",class:"h-4 w-4"})])),_:1},8,["disabled","title","aria-label"])],64)):S("v-if",!0)]),w(hr,{report:f(a)},null,8,["report"])]),f(a).description?(p(),m(Pt,{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,br)])),_:1}))}});yr.__file="src/components/modals/AGErrorReportModal.vue";const xr={message:et()};function Ar(){return xr}function wr(e){return{renderedMessage:t((()=>e.message??pt("ui.loading","Loading...")))}}var Sr=u({__name:"AGLoadingModal",props:Ar(),setup(e){const t=e,{renderedMessage:r}=wr(t);return(e,t)=>(p(),m(Bt,{cancellable:!1},{default:h((()=>[w(Pt,{text:f(r)},null,8,["text"])])),_:1}))}});Sr.__file="src/components/modals/AGLoadingModal.vue";const Gr={title:et(),message:Xe(),label:et(),defaultValue:et(),placeholder:et(),acceptText:et(),cancelText:et()};function kr(){return Gr}function Cr(e){return{renderedAcceptText:t((()=>e.acceptText??pt("ui.accept","Ok"))),renderedCancelText:t((()=>e.cancelText??pt("ui.cancel","Cancel")))}}var jr=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))}});jr.__file="src/components/forms/AGForm.vue";const Mr={name:et(),label:et()};function $r(){return Mr}function Er(e){return kt(e,Mr)}var Hr=u({__name:"AGHeadlessInput",props:{as:et("div"),modelValue:Fe([String,Number,Boolean]),...$r()},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})}});Hr.__file="src/components/headless/forms/AGHeadlessInput.vue";const Tr=["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,Tr)):S("v-if",!0)}});Rr.__file="src/components/headless/forms/AGHeadlessInputError.vue";const Lr=["id","type","value","aria-invalid","aria-describedby","checked"];var Ir=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.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,Lr))}});Ir.__file="src/components/headless/forms/AGHeadlessInputInput.vue";const Pr=["for"];var Or=u({__name:"AGHeadlessInputLabel",setup(e){const r=ze("input","<AGHeadlessInputLabel> must be a child of a <AGHeadlessInput>"),s=R(),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,Pr)):S("v-if",!0)}});Or.__file="src/components/headless/forms/AGHeadlessInputLabel.vue";const Br={class:"absolute bottom-0 left-0 translate-y-full"};var Vr=u({inheritAttrs:!1,__name:"AGInput",props:$r(),setup(e){const t=e,r=Oe(),[s,o]=wt();return(e,n)=>(p(),m(Hr,C({ref_key:"$input",ref:r,class:["relative flex flex-col items-center",f(o)]},t),{default:h((()=>[w(Or,{class:"sr-only"}),w(Ir,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",Br,[w(Rr,{class:"mt-1 text-sm text-red-500"})])])),_:1},16,["class"]))}});Vr.__file="src/components/forms/AGInput.vue";const Dr={String:"string",Number:"number",Boolean:"boolean",Object:"object"},qr=new WeakMap;class zr 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),qr.set(this,t((()=>!Object.values(this._errors).some((e=>null!==e))))),this.errors=T(this._errors)}get valid(){return!!qr.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 Ur(e){return new zr(e)}function Fr(e){return{default:e,type:Dr.Boolean}}function Nr(e){return{default:e,type:Dr.Boolean,rules:"required"}}function Kr(e){return{default:e,type:Dr.Number,rules:"required"}}function Wr(e){return{default:e,type:Dr.String,rules:"required"}}function Qr(e){return{default:e,type:Dr.Number}}function Zr(e){return{default:e,type:Dr.String}}const Yr={class:"mt-2 flex flex-row-reverse gap-2"};var Jr=u({__name:"AGPromptModal",props:kr(),setup(e){const t=e,r=Ur({draft:Wr(t.defaultValue??"")}),{renderedAcceptText:s,renderedCancelText:o}=Cr(t);return(e,t)=>(p(),m(Bt,{cancellable:!1,title:e.title},{default:h((({close:t})=>[w(Pt,{text:e.message},null,8,["text"]),w(jr,{form:f(r),onSubmit:e=>t(f(r).draft)},{default:h((()=>[w(Vr,{name:"draft",placeholder:e.placeholder,label:e.label},null,8,["placeholder","label"]),G("div",Yr,[w(Kt,{submit:""},{default:h((()=>[M($(f(s)),1)])),_:1}),w(Kt,{color:"secondary",onClick:e=>t()},{default:h((()=>[M($(f(o)),1)])),_:2},1032,["onClick"])])])),_:2},1032,["form","onSubmit"])])),_:1},8,["title"]))}});Jr.__file="src/components/modals/AGPromptModal.vue";const Xr={class:"pointer-events-auto"};var es=u({__name:"AGHeadlessSnackbar",setup:e=>(e,t)=>(p(),x("div",Xr,[v(e.$slots,"default")]))});es.__file="src/components/headless/snackbars/AGHeadlessSnackbar.vue";const ts=se(ft,["Primary","Clear"]),rs={id:Xe(),message:Xe(),actions:Ie((()=>[])),color:De(ts,ft.Secondary)};function ss(){return rs}function os(e){return{activate:function(t){t.handler?.(),t.dismiss&&ct.hideSnackbar(e.id)}}}var ns=u({__name:"AGSnackbar",props:ss(),setup(e){const r=e,{activate:s}=os(r),o=t((()=>r.color===ft.Danger?"bg-red-200 text-red-900":"bg-gray-900 text-white"));return(e,t)=>(p(),m(es,{class:j(["flex flex-row items-center justify-center gap-3 p-4",o.value])},{default:h((()=>[w(Pt,{text:e.message,inline:""},null,8,["text"]),(p(!0),x(A,null,E(e.actions,((t,r)=>(p(),m(Kt,{key:r,color:e.color,onClick:e=>f(s)(t)},{default:h((()=>[M($(t.text),1)])),_:2},1032,["color","onClick"])))),128))])),_:1},8,["class"]))}});ns.__file="src/components/snackbars/AGSnackbar.vue";const as={class:"grid flex-grow place-items-center"},ls={class:"flex flex-col items-center space-y-6 p-8"},is={class:"mt-2 text-center text-4xl font-medium text-red-600"},cs={class:"mt-4 flex flex-col space-y-4"};var us=u({__name:"AGStartupCrash",setup:e=>(e,t)=>(p(),x("div",as,[G("div",ls,[G("h1",is,$(e.$td("startupCrash.title","Something went wrong!")),1),w(Pt,{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",cs,[w(Kt,{color:"danger",onClick:t[0]||(t[0]=t=>e.$app.reload())},{default:h((()=>[M($(e.$td("startupCrash.reload","Try again")),1)])),_:1}),w(Kt,{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})])])]))});us.__file="src/components/lib/AGStartupCrash.vue";const ds={$ui:ct};var ps={async install(e,t){const r={[lt.AlertModal]:qt,[lt.ConfirmModal]:Qt,[lt.ErrorReportModal]:yr,[lt.LoadingModal]:Sr,[lt.PromptModal]:Jr,[lt.Snackbar]:ns,[lt.StartupCrash]:us};Object.entries({...r,...t.components}).forEach((e=>{let[t,r]=e;return ct.registerComponent(t,r)})),await ot(e,ds)}};async function ms(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r=[xt,rt,_t,yt,nt,ps,...t.plugins??[]];await Le(r,e,t),await(t.install?.(e)),await $e.emit("application-ready")}async function fs(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r=L(e);await ms(r,t),r.mount("#app"),r._container?.classList.remove("loading"),await $e.emit("application-mounted")}const hs={key:0};var vs=u({__name:"AGAppModals",setup(e){const r=t((()=>ct.modals[0]??null));return(e,t)=>r.value?(p(),x("aside",hs,[w(Ht,{"child-index":1,modal:r.value},null,8,["modal"])])):S("v-if",!0)}});vs.__file="src/components/AGAppModals.vue";const gs={"aria-live":"assertive",class:"z-60 pointer-events-none fixed inset-0 flex items-end px-4 py-6 sm:p-6"},_s={class:"flex w-full flex-col items-end space-y-4"};const bs={render:function(e,t){return p(),x("div",gs,[G("div",_s,[(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 ys=bs,xs=u({__name:"AGAppOverlays",setup(t){const r=e(null),s=e(!0);return At("show-overlays-backdrop",(async()=>{r.value&&s.value&&(s.value=!1,r.value.classList.remove("opacity-0"))})),At("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(vs),w(ys)],64))}});xs.__file="src/components/AGAppOverlays.vue";const As={class:"flex min-h-full flex-col text-base font-normal leading-tight text-gray-900 antialiased"};var ws=u({__name:"AGAppLayout",setup:e=>(e,t)=>(p(),x("div",As,[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(xs)]))});ws.__file="src/components/AGAppLayout.vue";const Ss={class:"ml-2"};var Gs=u({inheritAttrs:!1,__name:"AGCheckbox",props:{name:et()},emits:["update:modelValue"],setup(e){const t=Oe();return(r,s)=>(p(),m(Hr,{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(Ir,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",Ss,[r.$slots.default?(p(),m(Or,{key:0},{default:h((()=>[v(r.$slots,"default")])),_:3})):S("v-if",!0),w(Rr,{class:"text-sm text-red-600"})])])),_:3},8,["name"]))}});Gs.__file="src/components/forms/AGCheckbox.vue";const ks={viewBox:"0 0 20 20",width:"1.2em",height:"1.2em"},Cs=[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 js={name:"zondicons-cheveron-down",render:function(e,t){return p(),x("svg",ks,[...Cs])}};const Ms={name:et(),label:et(),options:We(),noSelectionText:et(),optionsText:Fe()},$s=["update:modelValue"];function Es(){return Ms}function Hs(){return[...$s]}function Ts(e){return kt(e,Ms)}var Rs=u({__name:"AGHeadlessSelect",props:{modelValue:Fe(),...Es()},emits:Hs(),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??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 Ls=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}))}});Ls.__file="src/components/headless/forms/AGHeadlessSelectButton.vue";const Is=["id"];var Ps=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,Is)):S("v-if",!0)}});Ps.__file="src/components/headless/forms/AGHeadlessSelectError.vue";var Os=u({__name:"AGHeadlessSelectLabel",setup(e){const r=ze("select","<AGHeadlessSelectLabel> must be a child of a <AGHeadlessSelect>"),s=R(),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)}});Os.__file="src/components/headless/forms/AGHeadlessSelectLabel.vue";var Bs=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"]))}});Bs.__file="src/components/headless/forms/AGHeadlessSelectOption.vue";const Vs={class:"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2"};var Ds=u({__name:"AGSelect",props:Es(),emits:Hs(),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(Os,{class:"block text-sm font-medium leading-6 text-gray-900"}),G("div",{class:j(["relative",{"mt-2":f(r)?.label}])},[w(Ls,{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",Vs,[w(f(js),{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(Bs,{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(Ps,{class:"mt-2 text-sm text-red-600"})])),_:1},16))}});Ds.__file="src/components/forms/AGSelect.vue";var qs=u({__name:"AGErrorMessage",props:{error:Je()},setup(e){const r=e,s=t((()=>ht.getErrorMessage(r.error)));return(e,t)=>(p(),m(Pt,{text:s.value,inline:""},null,8,["text"]))}});qs.__file="src/components/lib/AGErrorMessage.vue";var zs=u({__name:"AGLink",setup:e=>(e,t)=>(p(),m(Nt,{class:"font-medium hover:underline"},{default:h((()=>[v(e.$slots,"default")])),_:3}))});zs.__file="src/components/lib/AGLink.vue";var Us=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]])}}});Us.__file="src/components/lib/AGMeasured.vue";var Fs=u({__name:"AGModalTitle",setup:e=>(e,t)=>(p(),m(Lt,{class:"mb-2 font-semibold"},{default:h((()=>[v(e.$slots,"default")])),_:3}))});Fs.__file="src/components/modals/AGModalTitle.vue";class Ns{}async function Ks(e){await e.run()}export{qt as AGAlertModal,ws as AGAppLayout,xs as AGAppOverlays,Kt as AGButton,Gs as AGCheckbox,Qt as AGConfirmModal,qs as AGErrorMessage,hr as AGErrorReportModalButtons,vr as AGErrorReportModalTitle,jr as AGForm,Nt as AGHeadlessButton,Hr as AGHeadlessInput,Rr as AGHeadlessInputError,Ir as AGHeadlessInputInput,Or as AGHeadlessInputLabel,Et as AGHeadlessModal,Rt as AGHeadlessModalPanel,Lt as AGHeadlessModalTitle,Rs as AGHeadlessSelect,Ls as AGHeadlessSelectButton,Ps as AGHeadlessSelectError,Os as AGHeadlessSelectLabel,Bs as AGHeadlessSelectOption,es as AGHeadlessSnackbar,Vr as AGInput,zs as AGLink,Sr as AGLoadingModal,Pt as AGMarkdown,Us as AGMeasured,Bt as AGModal,Ht as AGModalContext,Fs as AGModalTitle,Jr as AGPromptModal,Ds as AGSelect,ns as AGSnackbar,us as AGStartupCrash,Te as App,He as AppService,ft as Colors,ht as Errors,je as EventListenerPriorities,$e as Events,Me as EventsService,Dr as FormFieldTypes,Ns as Job,ut as Lang,Ce as Service,ts as SnackbarColors,ct as UI,lt as UIComponents,it as UIService,Vt as alertModalProps,Ie as arrayProp,Fr as booleanInput,Pe as booleanProp,ot as bootServices,fs as bootstrap,ms as bootstrapApplication,Oe as componentRef,Be as computedAsync,zt as confirmModalProps,Ve as defineDirective,Re as definePlugin,ke as defineServiceState,Ge as defineServiceStore,Ks as dispatch,De as enumProp,rr as errorReportModalProps,Er as extractInputProps,Mt as extractModalProps,Ts as extractSelectProps,Se as getPiniaStore,Ue as injectOrFail,qe as injectReactive,ze as injectReactiveOrFail,Mr as inputProps,Le as installPlugins,xr as loadingModalProps,Fe as mixedProp,Ct as modalProps,Qr as numberInput,Ne as numberProp,Ke as objectProp,St as onCleanMounted,Gr as promptModalProps,Gt as removeInteractiveClasses,We as requiredArrayProp,Nr as requiredBooleanInput,Qe as requiredEnumProp,Ze as requiredMixedProp,Kr as requiredNumberInput,Ye as requiredNumberProp,Je as requiredObjectProp,Wr as requiredStringInput,Xe as requiredStringProp,we as resetPiniaStore,$s as selectEmits,Ms as selectProps,rs as snackbarProps,Zr as stringInput,et as stringProp,dt as translate,pt as translateWithDefault,Dt as useAlertModalProps,Ft as useConfirmModal,Ut as useConfirmModalProps,or as useErrorReportModal,sr as useErrorReportModalProps,At as useEvent,Ur as useForm,wt as useInputAttrs,$r as useInputProps,wr as useLoadingModal,Ar as useLoadingModalProps,$t as useModalExpose,jt as useModalProps,Cr as usePromptModal,kr as usePromptModalProps,Hs as useSelectEmits,Es as useSelectProps,os as useSnackbar,ss as useSnackbarProps};
1
+ import{ref as e,computed as t,watch as s,inject as r,reactive as o,markRaw as n,nextTick as a,onUnmounted as l,useAttrs as i,onMounted as c,defineComponent as u,toRef as d,openBlock as p,createBlock as m,unref as f,withCtx as h,renderSlot as v,provide as g,resolveDynamicComponent as _,normalizeProps as b,guardReactiveProps as y,createElementBlock as x,Fragment as A,createVNode as w,createCommentVNode as G,createElementVNode as S,h as k,mergeProps as C,normalizeClass as j,createTextVNode as $,toDisplayString as M,renderList as E,withModifiers as H,readonly as T,useSlots as I,createApp as L,resolveDirective as R,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 se,objectWithout as re,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 Ge(){return xe??Ae()}function Se(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[s,r]=t;try{r=structuredClone(r)}catch(e){console.warn(`Could not clone '${s}' state from ${this.getName()} service, this may cause problems if you're using multiple instances of the service (for example, in unit tests).\nTo fix this problem, declare your initialState as a function instead.`)}return e[s]=r,e}),{})}getComputedStateDefinition(){return e.computed??{}}serializePersistedState(t){return e.serialize?.(t)??t}},"persist",e.persist??[]),t}class 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()&&Se(this._name,{state:()=>this.getInitialState(),getters:e})}get booted(){return this._booted}launch(){const handleError=e=>this._booted.reject(new ServiceBootError(this._name,e));try{this.frameworkBoot().then((()=>this.boot())).then((()=>this._booted.resolve())).catch(handleError)}catch(e){handleError(e)}return this._booted}hasPersistedState(){return 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 s="string"==typeof e?{[e]:t}:e;Object.assign(this._store.$state,s),this.onStateUpdated(s)}__get(e){return this.hasState(e)?this.getState(e):super.__get(e)}__set(e,t){this.setState({[e]:t})}onStateUpdated(e){const t=this.constructor.persist,s=U(e,t);if(F(s))return;const r=z.get(this._name);r&&z.set(this._name,{...r,...this.serializePersistedState(N(s))})}usesStore(){return!1}getName(){return null}getInitialState(){return{}}getComputedStateDefinition(){return{}}serializePersistedState(e){return e}async frameworkBoot(){this.initializePersistedState()}async boot(){}initializePersistedState(){const e=this.constructor.persist;if(this.usesStore()&&!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 $e extends Ce{constructor(){super(...arguments),O(this,"listeners",{})}async boot(){Object.entries(globalThis.__aerogelEvents__??{}).forEach((e=>{let[t,s]=e;return this.on(t,s)}))}async emit(e,t){const s=this.listeners[e]??{priorities:[],handlers:{}};for(const e of s.priorities)await Promise.all(s.handlers[e]?.map((e=>e(t)))??[])}on(e,t,s){const r="function"==typeof t?{}:t,o="function"==typeof t?t:s;return this.registerListener(e,r,o),()=>this.off(e,o)}once(e,t,s){let r=null;const o="function"==typeof t?{}:t,n="function"==typeof t?t:s;return V((()=>r&&this.off(e,r)),(t=>{r=function(){return t(),n(...arguments)},this.registerListener(e,o,n)}))}off(e,t){const s=this.listeners[e];if(!s)return;const r=[...s.priorities];for(const e of r)W(s.handlers[e]??[],t),0===s.handlers[e]?.length&&(delete s.handlers[e],W(s.priorities,e));0===s.priorities.length&&delete this.listeners[e]}registerListener(e,t,s){const r=t.priority??0;e in this.listeners||(this.listeners[e]={priorities:[],handlers:{}});const o=this.listeners[e]?.priorities??Q(`priorities missing for event '${e}'`),n=this.listeners[e]?.handlers??Q(`handlers missing for event '${e}'`);o.includes(r)||(o.push(r),o.sort(((e,t)=>t-e)),n[r]=[]),n[r]?.push(s)}}var Me=K($e),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(){Me.once("application-ready",(()=>this.ready.resolve())),Me.once("application-mounted",(()=>this.mounted.resolve()))}}var Te=K(He);function Ie(e){return e}async function Le(e){for(var t=arguments.length,s=new Array(t>1?t-1:0),r=1;r<t;r++)s[r-1]=arguments[r];Te.setState("plugins",e.reduce(((e,t)=>(t.name&&(e[t.name]=t),e)),{})),await Promise.all(e.map((e=>e.install(...s)))??[])}function Re(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(r){const o=e(),n=t(r);return s(n,(async()=>o.value=await n.value),{immediate:!0}),o}function Ve(e){return e}function De(e,t){const s=Object.values(e);return{type:String,default:t??s[0]??null,validator:e=>s.includes(e)}}function qe(e){const t=r(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 r(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:s}=t;!1!==s&&e.focus()}},measure:{mounted(e,t){let{value:s}=t;const r="function"==typeof s?s:null,o=e.getBoundingClientRect();e.style.setProperty("--width",`${o.width}px`),e.style.setProperty("--height",`${o.height}px`),r?.({width:o.width,height:o.height})}}};var st={install(e,t){const s={...tt,...t.directives};for(const[t,r]of Object.entries(s))e.directive(t,r)}};const rt={$app:Te,$events:Me};async function ot(e,t){await Promise.all(Object.entries(t).map((async t=>{let[s,r]=t;await r.launch().catch((t=>e.config.errorHandler?.(t,null,`Failed launching ${s}.`)))}))),Object.assign(e.config.globalProperties,t),Te.development&&Object.assign(window,t)}var nt={async install(e,t){const s={...rt,...t.services};e.use(Ge()),await ot(e,s)}},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,s){const r=await this.openModal(this.requireComponent(lt.ConfirmModal),"string"!=typeof t?{message:e,...t??{}}:{title:e,message:t,...s??{}});return await r.beforeClose??!1}async prompt(e,t,s){const r=await this.openModal(this.requireComponent(lt.PromptModal),"string"!=typeof t?{message:e,...t??{}}:{title:e,message:t,...s??{}});return await r.beforeClose??null}async loading(e,t){const s=await this.openModal(this.requireComponent(lt.LoadingModal),"string"!=typeof e?{}:{message:e});try{t="string"==typeof e?t:e;const[s]=await Promise.all([t,J({seconds:1})]);return s}finally{await this.closeModal(s.id)}}showSnackbar(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const s={id:X(),properties:{message:e,...t},component:n(t.component??this.requireComponent(lt.Snackbar))};this.setState("snackbars",this.snackbars.concat(s)),setTimeout((()=>this.hideSnackbar(s.id)),5e3)}hideSnackbar(e){this.setState("snackbars",this.snackbars.filter((t=>t.id!==e)))}registerComponent(e,t){this.components[e]=t}async openModal(e,t){const s=X(),r={},o={id:s,properties:t??{},component:n(e),beforeClose:new Promise((e=>r.willClose=e)),afterClose:new Promise((e=>r.closed=e))},l=this.modals.at(-1),i=this.modals.concat(o);return this.modalCallbacks[o.id]=r,this.setState({modals:i}),await a(),await(l&&Me.emit("hide-modal",{id:l.id})),await Promise.all([l||Me.emit("show-overlays-backdrop"),Me.emit("show-modal",{id:o.id})]),o}async closeModal(e,t){await Me.emit("close-modal",{id:e,result:t})}async boot(){this.watchModalEvents(),this.watchMountedEvent()}watchModalEvents(){Me.on("modal-will-close",(e=>{let{modal:t,result:s}=e;this.modalCallbacks[t.id]?.willClose?.(s),1===this.modals.length&&Me.emit("hide-overlays-backdrop")})),Me.on("modal-closed",(async e=>{let{modal:t,result:s}=e;this.setState("modals",this.modals.filter((e=>e.id!==t.id))),this.modalCallbacks[t.id]?.closed?.(s),delete this.modalCallbacks[t.id];const r=this.modals.at(-1);await(r&&Me.emit("show-modal",{id:r.id}))}))}watchMountedEvent(){Me.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 s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.provider.translateWithDefault(e,t,s)}});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 Me.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 s=await this.createErrorReport(e),r={report:s,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:[s]})}]}),this.setState({logs:[r].concat(this.logs)})}see(e){this.setState({logs:this.logs.map((t=>t.report!==e?t:{...t,seen:!0}))})}seeAll(){this.setState({logs:this.logs.map((e=>({...e,seen:!0})))})}logError(e){console.error(e),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:se(e.name??e.title??pt("errors.unknown","Unknown Error")),description:se(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)?se(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 s=e=>t(e)||(e=>(ht.report(e),!0))(e);e.config.errorHandler=s,globalThis.onerror=(e,t,r,o,n)=>s(n??e),globalThis.onunhandledrejection=e=>s(e.reason)}var 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 Me.on(...arguments)}})}};function wt(e,t){const s=Me.on(e,t);l((()=>s()))}function Gt(){const e=i(),s=t((()=>e.class));return[t((()=>re(e,"class"))),s]}function St(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,s)=>(t[s]=e[s],t)),{})}const jt={cancellable:Pe(!0),title:et()};function $t(){return jt}function Mt(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:$t(),setup(t,{expose:s}){const r=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||(Me.emit("modal-will-close",{modal:l,result:e}),await i(),a.value=!0,Me.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)}()})),s({close:c,cancellable:d(r,"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,s)=>(p(),m(_(e.modal.component),b(y(e.modal.properties)),null,16))}});Tt.__file="src/components/modals/AGModalContext.vue";const It=S("div",{class:"pointer-events-none fixed inset-0 z-50 bg-black/30"},null,-1);var Lt=u({__name:"AGHeadlessModalPanel",setup(e){const s=ze("modal","could not obtain modal reference from <AGHeadlessModalPanel>, did you render this component manually? Show it using $ui.openModal() instead"),r=t((()=>ct.modals[s.childIndex]??null));return(e,t)=>(p(),m(f(de),null,{default:h((()=>[v(e.$slots,"default"),r.value?(p(),x(A,{key:0},[It,w(Tt,{"child-index":f(s).childIndex+1,modal:r.value},null,8,["child-index","modal"])],64)):G("v-if",!0)])),_:3}))}});Lt.__file="src/components/headless/modals/AGHeadlessModalPanel.vue";var Rt=u({__name:"AGHeadlessModalTitle",props:{as:et("h2")},setup:e=>(t,s)=>(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,s){return ye.prototype.link.apply(this,[e,t,s]).replace("<a",'<a target="_blank"')}}))}),_e.sanitize(t,{ADD_ATTR:["target"]});var t}Rt.__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 s=e,r=i(),o=t((()=>s.text??(s.langKey&&dt(s.langKey,s.langParams??{})))),n=t((()=>{if(!o.value)return null;let e=Pt(o.value);return s.inline&&(e=e.replace("<p>","<span>").replace("</p>","</span>")),e})),a=()=>k(s.as??(s.inline?"span":"div"),{class:s.inline?"":"prose",innerHTML:n.value,...r});return(e,t)=>(p(),m(a))}});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:$t(),setup(t,{expose:s}){const r=t,o=e();return s(Et(o)),(e,t)=>(p(),m(Ht,C({ref_key:"$modal",ref:o},r,{class:"relative z-50"}),{default:h((({close:t})=>[S("div",Bt,[w(Lt,{class:"flex max-h-full max-w-full flex-col overflow-hidden bg-white p-4"},{default:h((()=>[e.title?(p(),m(Rt,{key:0,class:"mb-2 text-lg font-semibold"},{default:h((()=>[w(Ot,{text:e.title,inline:""},null,8,["text"])])),_:1})):G("v-if",!0),S("div",C({class:"flex max-h-full flex-col overflow-auto"},e.$attrs),[v(e.$slots,"default",{close:t})],16)])),_:2},1024)])])),_:3},16))}});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 s=e,r=t((()=>s.route?{tag:"router-link",props:{to:te({name:s.route,params:s.routeParams,query:s.routeQuery})}}:s.href||s.url?{tag:"a",props:{target:"_blank",href:s.href||s.url}}:{tag:"button",props:{type:s.submit?"submit":"button"}}));return(e,t)=>(p(),m(_(r.value.tag),b(y(r.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 s=e,r=t((()=>{switch(s.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",r.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:s,renderedCancelText:r}=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"]),S("div",Qt,[w(Wt,{onClick:e=>t(!0)},{default:h((()=>[$(M(f(s)),1)])),_:2},1032,["onClick"]),w(Wt,{color:"secondary",onClick:e=>t()},{default:h((()=>[$(M(f(r)),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=[S("path",{fill:"currentColor",d:"m12.95 10.707l.707-.707L8 4.343L6.586 5.757L10.828 10l-4.242 4.243L8 15.657l4.95-4.95z"},null,-1)];var Xt={name:"zondicons-cheveron-right",render:function(e,t){return p(),x("svg",Yt,[...Jt])}};const es={viewBox:"0 0 20 20",width:"1.2em",height:"1.2em"},ts=[S("path",{fill:"currentColor",d:"M7.05 9.293L6.343 10L12 15.657l1.414-1.414L9.172 10l4.242-4.243L12 4.343z"},null,-1)];var ss={name:"zondicons-cheveron-left",render:function(e,t){return p(),x("svg",es,[...ts])}};const rs={reports:We()};function os(){return rs}function ns(s){const r=e(0),o=t((()=>s.reports[r.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:r,details:n,nextReportText:l,previousReportText:a,report:o}}const as={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},ls=[S("path",{fill:"currentColor",d:"M20 19V7H4v12h16m0-16a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h16m-7 14v-2h5v2h-5m-3.42-4L5.57 9H8.4l3.3 3.3c.39.39.39 1.03 0 1.42L8.42 17H5.59l3.99-4Z"},null,-1)];var is={name:"mdi-console",render:function(e,t){return p(),x("svg",as,[...ls])}};const cs={viewBox:"0 0 20 20",width:"1.2em",height:"1.2em"},us=[S("path",{fill:"currentColor",d:"M6 6V2c0-1.1.9-2 2-2h10a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-4v4a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V8c0-1.1.9-2 2-2h4zm2 0h4a2 2 0 0 1 2 2v4h4V2H8v4zM2 8v10h10V8H2z"},null,-1)];var ds={name:"zondicons-copy",render:function(e,t){return p(),x("svg",cs,[...us])}};const ps={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},ms=[S("path",{fill:"currentColor",d:"M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5c.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34c-.46-1.16-1.11-1.47-1.11-1.47c-.91-.62.07-.6.07-.6c1 .07 1.53 1.03 1.53 1.03c.87 1.52 2.34 1.07 2.91.83c.09-.65.35-1.09.63-1.34c-2.22-.25-4.55-1.11-4.55-4.92c0-1.11.38-2 1.03-2.71c-.1-.25-.45-1.29.1-2.64c0 0 .84-.27 2.75 1.02c.79-.22 1.65-.33 2.5-.33c.85 0 1.71.11 2.5.33c1.91-1.29 2.75-1.02 2.75-1.02c.55 1.35.2 2.39.1 2.64c.65.71 1.03 1.6 1.03 2.71c0 3.82-2.34 4.66-4.57 4.91c.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"},null,-1)];var fs={name:"mdi-github",render:function(e,t){return p(),x("svg",ps,[...ms])}};const hs={class:"flex"};var vs=u({__name:"AGErrorReportModalButtons",props:{report:Je()},setup(e){const s=e,r=t((()=>s.report.description?`${s.report.title}: ${s.report.description}`:s.report.title)),o=t((()=>{if(!Te.sourceUrl)return!1;const e=encodeURIComponent(r.value),t=encodeURIComponent(["[Please, explain here what you were trying to do when this error appeared]","","Error details:","```",ne(s.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:ds,async handler(){await navigator.clipboard.writeText(`${r.value}\n\n${s.report.details}`),ct.showSnackbar(pt("errors.copiedToClipboard","Debug information copied to clipboard"))}},{id:"console",description:"Log to console",iconComponent:is,handler(){const e=s.report.error??s.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:fs,url:o.value})}))));return(e,t)=>(p(),x("div",hs,[(p(!0),x(A,null,E(n.value,((t,s)=>v(e.$slots,"default",C(t,{key:s}),(()=>[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))]))}});vs.__file="src/components/modals/AGErrorReportModalButtons.vue";var gs=u({__name:"AGErrorReportModalTitle",props:{report:Je(),currentReport:Ne(),totalReports:Ne()},setup(e){const s=e,r=t((()=>!s.totalReports||s.totalReports<=1?s.report.title:`${s.report.title} (${s.currentReport}/${s.totalReports})`));return(e,t)=>(p(),m(Ot,{text:r.value,inline:""},null,8,["text"]))}});gs.__file="src/components/modals/AGErrorReportModalTitle.vue";const _s={class:"flex items-center justify-between text-lg font-medium"},bs={class:"flex items-center"},ys=["textContent"];var xs=u({__name:"AGErrorReportModal",props:os(),setup(e){const t=e,{activeReportIndex:s,details:r,nextReportText:o,previousReportText:n,report:a}=ns(t);return(e,t)=>(p(),m(Vt,null,{default:h((()=>[S("div",null,[S("h2",_s,[S("div",bs,[w(gs,{report:f(a),"current-report":f(s)+1,"total-reports":e.reports.length},null,8,["report","current-report","total-reports"]),e.reports.length>1?(p(),x(A,{key:0},[w(Wt,{color:"clear",disabled:0===f(s),title:f(n),"aria-label":f(n),onClick:t[0]||(t[0]=e=>s.value--)},{default:h((()=>[w(f(ss),{"aria-hidden":"true",class:"h-4 w-4"})])),_:1},8,["disabled","title","aria-label"]),w(Wt,{color:"clear",disabled:f(s)===e.reports.length-1,title:f(o),"aria-label":f(o),onClick:t[1]||(t[1]=e=>s.value++)},{default:h((()=>[w(f(Xt),{"aria-hidden":"true",class:"h-4 w-4"})])),_:1},8,["disabled","title","aria-label"])],64)):G("v-if",!0)]),w(vs,{report:f(a)},null,8,["report"])]),f(a).description?(p(),m(Ot,{key:0,text:f(a).description,class:"mt-2"},null,8,["text"])):G("v-if",!0)]),S("pre",{class:"h-full overflow-auto bg-gray-200 p-4 text-xs text-red-900",textContent:M(f(r))},null,8,ys)])),_:1}))}});xs.__file="src/components/modals/AGErrorReportModal.vue";const As={message:et()};function ws(){return As}function Gs(e){return{renderedMessage:t((()=>e.message??pt("ui.loading","Loading...")))}}var Ss=u({__name:"AGLoadingModal",props:ws(),setup(e){const t=e,{renderedMessage:s}=Gs(t);return(e,t)=>(p(),m(Vt,{cancellable:!1},{default:h((()=>[w(Ot,{text:f(s)},null,8,["text"])])),_:1}))}});Ss.__file="src/components/modals/AGLoadingModal.vue";const ks={title:et(),message:Xe(),label:et(),defaultValue:et(),placeholder:et(),acceptText:et(),cancelText:et()};function Cs(){return ks}function js(e){return{renderedAcceptText:t((()=>e.acceptText??pt("ui.accept","Ok"))),renderedCancelText:t((()=>e.cancelText??pt("ui.cancel","Cancel")))}}var $s=u({__name:"AGForm",props:{form:Ke()},emits:["submit"],setup(e,{emit:t}){const s=e,r=t;function o(){s.form&&!s.form.submit()||r("submit")}return g("form",s.form),(e,t)=>(p(),x("form",{onSubmit:H(o,["prevent"])},[v(e.$slots,"default")],32))}});$s.__file="src/components/forms/AGForm.vue";const Ms={name:et(),label:et(),description:et(),modelValue:Fe([String,Number,Boolean])};function Es(){return Ms}function Hs(e){return Ct(e,Ms)}var Ts=u({__name:"AGHeadlessInput",props:{as:et("div"),...Es()},emits:["update:modelValue"],setup(e,{expose:s,emit:o}){const n=o,a=e,l=t((()=>i&&a.name?i.errors[a.name]??null:null)),i=r("form",null),c={id:`input-${X()}`,name:t((()=>a.name)),label:t((()=>a.label)),description:t((()=>a.description)),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),s(c),(t,s)=>e.as?(p(),m(_(e.as),{key:0},{default:h((()=>[v(t.$slots,"default")])),_:3})):v(t.$slots,"default",{key:1})}});Ts.__file="src/components/headless/forms/AGHeadlessInput.vue";var Is=u({inheritAttrs:!1,__name:"AGHeadlessInputDescription",setup(e){const s=ze("input","<AGHeadlessInputDescription> must be a child of a <AGHeadlessInput>"),r=t((()=>"string"==typeof s.description?s.description:"")),o=t((()=>!!s.description));return(e,t)=>v(e.$slots,"default",{id:`${f(s).id}-description`},(()=>[o.value?(p(),m(Ot,C({key:0},e.$attrs,{id:`${f(s).id}-description`,text:r.value}),null,16,["id","text"])):G("v-if",!0)]))}});Is.__file="src/components/headless/forms/AGHeadlessInputDescription.vue";const Ls=["id"];var Rs=u({__name:"AGHeadlessInputError",setup(e){const s=ze("input","<AGHeadlessInputError> must be a child of a <AGHeadlessInput>"),r=t((()=>s.errors?pt(`errors.${s.errors[0]}`,`Error: ${s.errors[0]}`):null));return(e,t)=>r.value?(p(),x("p",{key:0,id:`${f(s).id}-error`},M(r.value),9,Ls)):G("v-if",!0)}});function Ps(e,t){const s=r("form",null),o=s?.on("focus",(s=>e.name===s&&t()));l((()=>o?.()))}Rs.__file="src/components/headless/forms/AGHeadlessInputError.vue";const Os=["id","name","type","value","aria-invalid","aria-describedby","checked"];var Bs=u({__name:"AGHeadlessInputInput",props:{type:et("text")},setup(s){const r=s,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"===r.type)return!!l.value}));function c(){o.value&&n.update("checkbox"===r.type?o.value.checked:o.value.value)}return Ps(n,(()=>o.value?.focus())),(e,t)=>(p(),x("input",{id:f(n).id,ref_key:"$input",ref:o,name:a.value,type:s.type,value:l.value,"aria-invalid":f(n).errors?"true":"false","aria-describedby":f(n).errors?`${f(n).id}-error`:f(n).description?`${f(n).id}-description`:void 0,checked:i.value,onInput:c},null,40,Os))}});Bs.__file="src/components/headless/forms/AGHeadlessInputInput.vue";const Vs=["for"];var Ds=u({__name:"AGHeadlessInputLabel",setup(e){const s=ze("input","<AGHeadlessInputLabel> must be a child of a <AGHeadlessInput>"),r=I(),o=t((()=>!(!s.label&&!r.default)));return(e,t)=>o.value?(p(),x("label",{key:0,for:f(s).id},[v(e.$slots,"default",{},(()=>[$(M(f(s).label),1)]))],8,Vs)):G("v-if",!0)}});Ds.__file="src/components/headless/forms/AGHeadlessInputLabel.vue";const qs={class:"absolute bottom-0 left-0 translate-y-full"};var zs=u({inheritAttrs:!1,__name:"AGInput",props:Es(),setup(e){const t=e,s=Oe(),[r,o]=Gt();return(e,n)=>(p(),m(Ts,C({ref_key:"$input",ref:s,class:["relative flex flex-col items-center",f(o)]},t),{default:h((()=>[w(Ds,{class:"sr-only"}),w(Bs,C(f(r),{class:["block w-full border-0 py-1.5 text-gray-900 ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600",{"ring-1 ring-red-500":f(s)?.errors}]}),null,16,["class"]),w(Is),S("div",qs,[w(Rs,{class:"mt-1 text-sm text-red-500"})])])),_:1},16,["class"]))}});zs.__file="src/components/forms/AGInput.vue";const Us={String:"string",Number:"number",Boolean:"boolean",Object:"object"},Fs=new WeakMap;class Ns extends D{constructor(s){super(),O(this,"errors",void 0),O(this,"_fields",void 0),O(this,"_data",void 0),O(this,"_submitted",void 0),O(this,"_errors",void 0),O(this,"_listeners",{}),this._fields=s,this._submitted=e(!1),this._data=this.getInitialData(s),this._errors=this.getInitialErrors(s),Fs.set(this,t((()=>!Object.values(this._errors).some((e=>null!==e))))),this.errors=T(this._errors)}get valid(){return!!Fs.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[s,r]=t;return e[s]=this.getFieldErrors(s,r),e}),{});return this.resetErrors(e),this.valid}reset(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this._submitted.value=!1,e.keepData||this.resetData(),e.keepErrors||this.resetErrors()}submit(){return this._submitted.value=!0,this.validate()}on(e,t){return this._listeners[e]??=[],this._listeners[e]?.push(t),()=>this.off(e,t)}off(e,t){W(this._listeners[e]??[],t)}async focus(e){await a(),this._listeners.focus?.forEach((t=>t(e)))}__get(e){return e in this._fields?this._data[e]:super.__get(e)}__set(e,t){e in this._fields?Object.assign(this._data,{[e]:t}):super.__set(e,t)}getFieldErrors(e,t){const s=[];return t.rules?.includes("required")&&!this._data[e]&&s.push("required"),s.length>0?s:null}getInitialData(e){if(this.static().isConjuring())return{};const t=Object.entries(e).reduce(((e,t)=>{let[s,r]=t;return e[s]=r.default??null,e}),{});return o(t)}getInitialErrors(e){if(this.static().isConjuring())return{};const t=Object.keys(e).reduce(((e,t)=>(e[t]=null,e)),{});return o(t)}resetData(){for(const[e,t]of Object.entries(this._fields))this._data[e]=t.default??null}resetErrors(e){Object.keys(this._errors).forEach((e=>delete this._errors[e])),e&&Object.assign(this._errors,e)}}function Ks(e){return new Ns(e)}function Ws(e){return{default:e,type:Us.Boolean}}function Qs(e){return{default:e,type:Us.Boolean,rules:"required"}}function Zs(e){return{default:e,type:Us.Number,rules:"required"}}function Ys(e){return{default:e,type:Us.String,rules:"required"}}function Js(e){return{default:e,type:Us.Number}}function Xs(e){return{default:e,type:Us.String}}const er={class:"mt-2 flex flex-row-reverse gap-2"};var tr=u({__name:"AGPromptModal",props:Cs(),setup(e){const t=e,s=Ks({draft:Ys(t.defaultValue??"")}),{renderedAcceptText:r,renderedCancelText:o}=js(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($s,{form:f(s),onSubmit:e=>t(f(s).draft)},{default:h((()=>[w(zs,{name:"draft",placeholder:e.placeholder,label:e.label},null,8,["placeholder","label"]),S("div",er,[w(Wt,{submit:""},{default:h((()=>[$(M(f(r)),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"]))}});tr.__file="src/components/modals/AGPromptModal.vue";const sr={class:"pointer-events-auto"};var rr=u({__name:"AGHeadlessSnackbar",setup:e=>(e,t)=>(p(),x("div",sr,[v(e.$slots,"default")]))});rr.__file="src/components/headless/snackbars/AGHeadlessSnackbar.vue";const or=re(ft,["Primary","Clear"]),nr={id:Xe(),message:Xe(),actions:Re((()=>[])),color:De(or,ft.Secondary)};function ar(){return nr}function lr(e){return{activate:function(t){t.handler?.(),t.dismiss&&ct.hideSnackbar(e.id)}}}var ir=u({__name:"AGSnackbar",props:ar(),setup(e){const s=e,{activate:r}=lr(s),o=t((()=>s.color===ft.Danger?"bg-red-200 text-red-900":"bg-gray-900 text-white"));return(e,t)=>(p(),m(rr,{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,s)=>(p(),m(Wt,{key:s,color:e.color,onClick:e=>f(r)(t)},{default:h((()=>[$(M(t.text),1)])),_:2},1032,["color","onClick"])))),128))])),_:1},8,["class"]))}});ir.__file="src/components/snackbars/AGSnackbar.vue";const cr={class:"grid flex-grow place-items-center"},ur={class:"flex flex-col items-center space-y-6 p-8"},dr={class:"mt-2 text-center text-4xl font-medium text-red-600"},pr={class:"mt-4 flex flex-col space-y-4"};var mr=u({__name:"AGStartupCrash",setup:e=>(e,t)=>(p(),x("div",cr,[S("div",ur,[S("h1",dr,M(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"]),S("div",pr,[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})])])]))});mr.__file="src/components/lib/AGStartupCrash.vue";const fr={$ui:ct};var hr={async install(e,t){const s={[lt.AlertModal]:zt,[lt.ConfirmModal]:Zt,[lt.ErrorReportModal]:xs,[lt.LoadingModal]:Ss,[lt.PromptModal]:tr,[lt.Snackbar]:ir,[lt.StartupCrash]:mr};Object.entries({...s,...t.components}).forEach((e=>{let[t,s]=e;return ct.registerComponent(t,s)})),await ot(e,fr)}};async function vr(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const s=[At,st,bt,xt,nt,hr,...t.plugins??[]];await Le(s,e,t),await(t.install?.(e)),await Me.emit("application-ready")}async function gr(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const s=L(e);await vr(s,t),s.mount("#app"),s._container?.classList.remove("loading"),await Me.emit("application-mounted")}const _r={key:0};var br=u({__name:"AGAppModals",setup(e){const s=t((()=>ct.modals[0]??null));return(e,t)=>s.value?(p(),x("aside",_r,[w(Tt,{"child-index":1,modal:s.value},null,8,["modal"])])):G("v-if",!0)}});br.__file="src/components/AGAppModals.vue";const yr={"aria-live":"assertive",class:"z-60 pointer-events-none fixed inset-0 flex items-end px-4 py-6 sm:p-6"},xr={class:"flex w-full flex-col items-end space-y-4"};const Ar={render:function(e,t){return p(),x("div",yr,[S("div",xr,[(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 wr=Ar,Gr=u({__name:"AGAppOverlays",setup(t){const s=e(null),r=e(!0);return wt("show-overlays-backdrop",(async()=>{s.value&&r.value&&(r.value=!1,s.value.classList.remove("opacity-0"))})),wt("hide-overlays-backdrop",(async()=>{s.value&&!r.value&&(r.value=!0,s.value.classList.add("opacity-0"))})),(e,t)=>(p(),x(A,null,[S("div",{id:"aerogel-overlays-backdrop",ref_key:"$backdrop",ref:s,class:"pointer-events-none fixed inset-0 z-50 bg-black/30 opacity-0"},null,512),w(br),w(wr)],64))}});Gr.__file="src/components/AGAppOverlays.vue";const Sr={class:"flex min-h-full flex-col text-base font-normal leading-tight text-gray-900 antialiased"};var kr=u({__name:"AGAppLayout",setup:e=>(e,t)=>(p(),x("div",Sr,[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(Gr)]))});kr.__file="src/components/AGAppLayout.vue";const Cr={class:"ml-2"};var jr=u({inheritAttrs:!1,__name:"AGCheckbox",props:{name:et()},emits:["update:modelValue"],setup(e){const t=Oe();return(s,r)=>(p(),m(Ts,{ref_key:"$input",ref:t,name:e.name,class:"flex","onUpdate:modelValue":r[0]||(r[0]=e=>s.$emit("update:modelValue",e))},{default:h((()=>[w(Bs,C(s.$attrs,{type:"checkbox",class:{"text-indigo-600 focus:ring-indigo-600":!f(t)?.errors,"border-red-200 text-red-600 focus:ring-red-600":f(t)?.errors}}),null,16,["class"]),S("div",Cr,[s.$slots.default?(p(),m(Ds,{key:0},{default:h((()=>[v(s.$slots,"default")])),_:3})):G("v-if",!0),w(Rs,{class:"text-sm text-red-600"})])])),_:3},8,["name"]))}});jr.__file="src/components/forms/AGCheckbox.vue";const $r={viewBox:"0 0 20 20",width:"1.2em",height:"1.2em"},Mr=[S("path",{fill:"currentColor",d:"m9.293 12.95l.707.707L15.657 8l-1.414-1.414L10 10.828L5.757 6.586L4.343 8z"},null,-1)];var Er={name:"zondicons-cheveron-down",render:function(e,t){return p(),x("svg",$r,[...Mr])}};const Hr={name:et(),label:et(),options:We(),noSelectionText:et(),optionsText:Fe()},Tr=["update:modelValue"];function Ir(){return Hr}function Lr(){return[...Tr]}function Rr(e){return Ct(e,Hr)}var Pr=u({__name:"AGHeadlessSelect",props:{modelValue:Fe(),...Ir()},emits:Lr(),setup(e,{expose:s,emit:o}){const n=o,a=e,l=t((()=>"function"==typeof a.optionsText?a.optionsText:"string"==typeof a.optionsText?e=>se(e[a.optionsText]):e=>se(e))),i=r("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),s(b),(e,t)=>(p(),m(f(me),{"model-value":u.value,"onUpdate:modelValue":t[0]||(t[0]=e=>_(e))},{default:h((({value:t,open:s,disabled:r})=>[v(e.$slots,"default",{value:t,open:s,disabled:r})])),_:3},8,["model-value"]))}});Pr.__file="src/components/headless/forms/AGHeadlessSelect.vue";var Or=u({__name:"AGHeadlessSelectButton",props:{textClass:et()},setup(e){const t=ze("select","<AGHeadlessSelectButton> must be a child of a <AGHeadlessSelect>");return(s,r)=>(p(),m(f(fe),null,{default:h((({value:r,open:o,disabled:n})=>[v(s.$slots,"default",{value:r,open:o,disabled:n},(()=>[S("span",{class:j(e.textClass)},M(f(t)?.buttonText),3)])),v(s.$slots,"icon")])),_:3}))}});Or.__file="src/components/headless/forms/AGHeadlessSelectButton.vue";const Br=["id"];var Vr=u({__name:"AGHeadlessSelectError",setup(e){const s=ze("select","<AGHeadlessSelectError> must be a child of a <AGHeadlessSelect>"),r=t((()=>s.errors?pt(`errors.${s.errors[0]}`,`Error: ${s.errors[0]}`):null));return(e,t)=>r.value?(p(),x("p",{key:0,id:`${f(s).id}-error`},M(r.value),9,Br)):G("v-if",!0)}});Vr.__file="src/components/headless/forms/AGHeadlessSelectError.vue";var Dr=u({__name:"AGHeadlessSelectLabel",setup(e){const s=ze("select","<AGHeadlessSelectLabel> must be a child of a <AGHeadlessSelect>"),r=I(),o=t((()=>!(!s.label&&!r.default)));return(e,t)=>o.value?(p(),m(f(he),{key:0},{default:h((({open:t,disabled:r})=>[v(e.$slots,"default",{open:t,disabled:r},(()=>[$(M(f(s).label),1)]))])),_:3})):G("v-if",!0)}});Dr.__file="src/components/headless/forms/AGHeadlessSelectLabel.vue";var qr=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(s,r)=>(p(),m(f(ve),{value:e.value,as:"template"},{default:h((({active:r,selected:o,disabled:n})=>[v(s.$slots,"default",{active:r,selected:o,disabled:n},(()=>[S("li",{class:j({[e.activeClass??"active"]:r,[e.inactiveClass??"inactive"]:!r,[e.selectedClass??"selected"]:o,[e.unselectedClass??"unselected"]:!o})},M(f(t).renderText(e.value)),3)]))])),_:3},8,["value"]))}});qr.__file="src/components/headless/forms/AGHeadlessSelectOption.vue";const zr={class:"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2"};var Ur=u({__name:"AGSelect",props:Ir(),emits:Lr(),setup(e){const t=e,s=Oe();return(e,r)=>(p(),m(Pr,C(t,{ref_key:"$select",ref:s,as:"div","onUpdate:modelValue":r[0]||(r[0]=t=>e.$emit("update:modelValue",t))}),{default:h((()=>[w(Dr,{class:"block text-sm font-medium leading-6 text-gray-900"}),S("div",{class:j(["relative",{"mt-2":f(s)?.label}])},[w(Or,{class:j(["relative w-full cursor-default bg-white py-1.5 pl-3 pr-10 text-left text-gray-900 ring-1 ring-inset ring-gray-300 focus:outline-none focus:ring-2 focus:ring-indigo-600",{"ring-1 ring-red-500":f(s)?.errors}]),"text-class":"block truncate"},{icon:h((()=>[S("span",zr,[w(f(Er),{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(s)?.options??[],((e,t)=>(p(),m(qr,{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(Vr,{class:"mt-2 text-sm text-red-600"})])),_:1},16))}});Ur.__file="src/components/forms/AGSelect.vue";var Fr=u({__name:"AGErrorMessage",props:{error:Je()},setup(e){const s=e,r=t((()=>vt(s.error)));return(e,t)=>(p(),m(Ot,{text:r.value,inline:""},null,8,["text"]))}});Fr.__file="src/components/lib/AGErrorMessage.vue";var Nr=u({__name:"AGLink",setup:e=>(e,t)=>(p(),m(Kt,{class:"font-medium hover:underline"},{default:h((()=>[v(e.$slots,"default")])),_:3}))});Nr.__file="src/components/lib/AGLink.vue";var Kr=u({__name:"AGMeasured",props:{as:et("span")},setup(t){const s=e(!1);return(e,r)=>{const o=R("measure");return P((p(),m(_(t.as),{class:j({"!invisible !absolute !w-auto":!s.value})},{default:h((()=>[v(e.$slots,"default")])),_:3},8,["class"])),[[o,()=>s.value=!0]])}}});Kr.__file="src/components/lib/AGMeasured.vue";var Wr=u({__name:"AGModalTitle",setup:e=>(e,t)=>(p(),m(Rt,{class:"mb-2 font-semibold"},{default:h((()=>[v(e.$slots,"default")])),_:3}))});Wr.__file="src/components/modals/AGModalTitle.vue";class Qr{}async function Zr(e){await e.run()}export{zt as AGAlertModal,kr as AGAppLayout,Gr as AGAppOverlays,Wt as AGButton,jr as AGCheckbox,Zt as AGConfirmModal,Fr as AGErrorMessage,vs as AGErrorReportModalButtons,gs as AGErrorReportModalTitle,$s as AGForm,Kt as AGHeadlessButton,Ts as AGHeadlessInput,Is as AGHeadlessInputDescription,Rs as AGHeadlessInputError,Bs as AGHeadlessInputInput,Ds as AGHeadlessInputLabel,Ht as AGHeadlessModal,Lt as AGHeadlessModalPanel,Rt as AGHeadlessModalTitle,Pr as AGHeadlessSelect,Or as AGHeadlessSelectButton,Vr as AGHeadlessSelectError,Dr as AGHeadlessSelectLabel,qr as AGHeadlessSelectOption,rr as AGHeadlessSnackbar,zs as AGInput,Nr as AGLink,Ss as AGLoadingModal,Ot as AGMarkdown,Kr as AGMeasured,Vt as AGModal,Tt as AGModalContext,Wr as AGModalTitle,tr as AGPromptModal,Ur as AGSelect,ir as AGSnackbar,mr as AGStartupCrash,Te as App,He as AppService,ft as Colors,ht as Errors,je as EventListenerPriorities,Me as Events,$e as EventsService,Us as FormFieldTypes,Qr as Job,ut as Lang,Ce as Service,or as SnackbarColors,ct as UI,lt as UIComponents,it as UIService,Dt as alertModalProps,Re as arrayProp,Ws as booleanInput,Pe as booleanProp,ot as bootServices,gr as bootstrap,vr as bootstrapApplication,Oe as componentRef,Be as computedAsync,Ut as confirmModalProps,Ve as defineDirective,Ie as definePlugin,ke as defineServiceState,Se as defineServiceStore,Zr as dispatch,De as enumProp,rs as errorReportModalProps,Hs as extractInputProps,Mt as extractModalProps,Rr as extractSelectProps,vt as getErrorMessage,Ge as getPiniaStore,Ue as injectOrFail,qe as injectReactive,ze as injectReactiveOrFail,Ms as inputProps,Le as installPlugins,As as loadingModalProps,Fe as mixedProp,jt as modalProps,Js as numberInput,Ne as numberProp,Ke as objectProp,St as onCleanMounted,Ps as onFormFocus,ks as promptModalProps,kt as removeInteractiveClasses,We as requiredArrayProp,Qs as requiredBooleanInput,Qe as requiredEnumProp,Ze as requiredMixedProp,Zs as requiredNumberInput,Ye as requiredNumberProp,Je as requiredObjectProp,Ys as requiredStringInput,Xe as requiredStringProp,we as resetPiniaStore,Tr as selectEmits,Hr as selectProps,nr as snackbarProps,Xs as stringInput,et as stringProp,dt as translate,pt as translateWithDefault,qt as useAlertModalProps,Nt as useConfirmModal,Ft as useConfirmModalProps,ns as useErrorReportModal,os as useErrorReportModalProps,wt as useEvent,Ks as useForm,Gt as useInputAttrs,Es as useInputProps,Gs as useLoadingModal,ws as useLoadingModalProps,Et as useModalExpose,$t as useModalProps,js as usePromptModal,Cs as usePromptModalProps,Lr as useSelectEmits,Ir as useSelectProps,lr as useSnackbar,ar as useSnackbarProps};
2
2
  //# sourceMappingURL=aerogel-core.esm.js.map