@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.
- package/dist/aerogel-core.cjs.js +1 -1
- package/dist/aerogel-core.cjs.js.map +1 -1
- package/dist/aerogel-core.d.ts +108 -19
- package/dist/aerogel-core.esm.js +1 -1
- package/dist/aerogel-core.esm.js.map +1 -1
- package/package.json +1 -1
- package/src/components/forms/AGInput.vue +2 -0
- package/src/components/headless/forms/AGHeadlessInput.ts +4 -1
- package/src/components/headless/forms/AGHeadlessInput.vue +2 -2
- package/src/components/headless/forms/AGHeadlessInputDescription.vue +28 -0
- package/src/components/headless/forms/AGHeadlessInputInput.vue +9 -1
- package/src/components/headless/forms/AGHeadlessInputTextArea.vue +40 -0
- package/src/components/headless/forms/composition.ts +10 -0
- package/src/components/headless/forms/index.ts +2 -0
- package/src/components/lib/AGErrorMessage.vue +2 -2
- package/src/components/lib/AGMarkdown.vue +7 -2
- package/src/directives/index.ts +2 -0
- package/src/directives/measure.ts +11 -2
- package/src/errors/Errors.ts +9 -16
- package/src/errors/index.ts +1 -0
- package/src/errors/utils.ts +19 -0
- package/src/forms/Form.ts +22 -2
- package/src/lang/Lang.ts +10 -22
- package/src/main.ts +1 -0
- package/src/services/Events.ts +12 -0
- package/src/testing/index.ts +11 -5
- package/src/ui/UI.ts +5 -3
package/dist/aerogel-core.d.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
2028
|
-
|
|
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 {
|
package/dist/aerogel-core.esm.js
CHANGED
|
@@ -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
|