@aerogel/core 0.0.0-next.c4825c5cbe0fe3257e478c2a7ec8df27d5a72305 → 0.0.0-next.d197d66a9d339318d752a1d8a96b2919faba3003

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. package/dist/aerogel-core.d.ts +1873 -1949
  2. package/dist/aerogel-core.js +3268 -0
  3. package/dist/aerogel-core.js.map +1 -0
  4. package/package.json +31 -37
  5. package/src/bootstrap/bootstrap.test.ts +4 -7
  6. package/src/bootstrap/index.ts +14 -15
  7. package/src/bootstrap/options.ts +1 -1
  8. package/src/components/AppLayout.vue +14 -0
  9. package/src/components/{AGAppModals.vue → AppModals.vue} +3 -4
  10. package/src/components/AppOverlays.vue +9 -0
  11. package/src/components/AppToasts.vue +16 -0
  12. package/src/components/contracts/AlertModal.ts +8 -0
  13. package/src/components/contracts/Button.ts +16 -0
  14. package/src/components/contracts/ConfirmModal.ts +46 -0
  15. package/src/components/contracts/DropdownMenu.ts +20 -0
  16. package/src/components/contracts/ErrorReportModal.ts +32 -0
  17. package/src/components/contracts/Input.ts +26 -0
  18. package/src/components/contracts/LoadingModal.ts +26 -0
  19. package/src/components/contracts/Modal.ts +21 -0
  20. package/src/components/contracts/PromptModal.ts +34 -0
  21. package/src/components/contracts/Select.ts +45 -0
  22. package/src/components/contracts/Toast.ts +15 -0
  23. package/src/components/contracts/index.ts +11 -0
  24. package/src/components/headless/HeadlessButton.vue +51 -0
  25. package/src/components/headless/HeadlessInput.vue +59 -0
  26. package/src/components/headless/{forms/AGHeadlessInputDescription.vue → HeadlessInputDescription.vue} +7 -8
  27. package/src/components/headless/{forms/AGHeadlessInputError.vue → HeadlessInputError.vue} +4 -8
  28. package/src/components/headless/{forms/AGHeadlessInputInput.vue → HeadlessInputInput.vue} +16 -25
  29. package/src/components/headless/{forms/AGHeadlessInputLabel.vue → HeadlessInputLabel.vue} +3 -7
  30. package/src/components/headless/{forms/AGHeadlessInputTextArea.vue → HeadlessInputTextArea.vue} +10 -13
  31. package/src/components/headless/HeadlessModal.vue +57 -0
  32. package/src/components/headless/HeadlessModalContent.vue +30 -0
  33. package/src/components/headless/HeadlessModalDescription.vue +12 -0
  34. package/src/components/headless/HeadlessModalOverlay.vue +12 -0
  35. package/src/components/headless/HeadlessModalTitle.vue +12 -0
  36. package/src/components/headless/HeadlessSelect.vue +120 -0
  37. package/src/components/headless/{forms/AGHeadlessSelectError.vue → HeadlessSelectError.vue} +5 -6
  38. package/src/components/headless/HeadlessSelectLabel.vue +25 -0
  39. package/src/components/headless/HeadlessSelectOption.vue +34 -0
  40. package/src/components/headless/HeadlessSelectOptions.vue +42 -0
  41. package/src/components/headless/HeadlessSelectTrigger.vue +22 -0
  42. package/src/components/headless/HeadlessSelectValue.vue +18 -0
  43. package/src/components/headless/HeadlessToast.vue +18 -0
  44. package/src/components/headless/HeadlessToastAction.vue +13 -0
  45. package/src/components/headless/index.ts +19 -3
  46. package/src/components/index.ts +6 -11
  47. package/src/components/ui/AdvancedOptions.vue +18 -0
  48. package/src/components/ui/AlertModal.vue +14 -0
  49. package/src/components/ui/Button.vue +98 -0
  50. package/src/components/ui/Checkbox.vue +56 -0
  51. package/src/components/ui/ConfirmModal.vue +45 -0
  52. package/src/components/ui/DropdownMenu.vue +32 -0
  53. package/src/components/ui/DropdownMenuOption.vue +14 -0
  54. package/src/components/ui/DropdownMenuOptions.vue +27 -0
  55. package/src/components/ui/EditableContent.vue +82 -0
  56. package/src/components/ui/ErrorMessage.vue +15 -0
  57. package/src/components/ui/ErrorReportModal.vue +67 -0
  58. package/src/components/{modals/AGErrorReportModalButtons.vue → ui/ErrorReportModalButtons.vue} +34 -27
  59. package/src/components/ui/ErrorReportModalTitle.vue +24 -0
  60. package/src/components/{forms/AGForm.vue → ui/Form.vue} +4 -5
  61. package/src/components/ui/Input.vue +56 -0
  62. package/src/components/ui/Link.vue +12 -0
  63. package/src/components/ui/LoadingModal.vue +34 -0
  64. package/src/components/ui/Markdown.vue +69 -0
  65. package/src/components/ui/Modal.vue +122 -0
  66. package/src/components/{modals/AGModalContext.vue → ui/ModalContext.vue} +8 -9
  67. package/src/components/ui/ProgressBar.vue +51 -0
  68. package/src/components/ui/PromptModal.vue +38 -0
  69. package/src/components/ui/Select.vue +27 -0
  70. package/src/components/ui/SelectLabel.vue +17 -0
  71. package/src/components/ui/SelectOption.vue +29 -0
  72. package/src/components/ui/SelectOptions.vue +35 -0
  73. package/src/components/ui/SelectTrigger.vue +29 -0
  74. package/src/components/ui/SettingsModal.vue +15 -0
  75. package/src/components/{lib/AGStartupCrash.vue → ui/StartupCrash.vue} +8 -8
  76. package/src/components/ui/Toast.vue +44 -0
  77. package/src/components/ui/index.ts +30 -0
  78. package/src/directives/index.ts +9 -5
  79. package/src/directives/measure.ts +1 -1
  80. package/src/errors/Errors.state.ts +1 -1
  81. package/src/errors/Errors.ts +14 -23
  82. package/src/errors/index.ts +9 -6
  83. package/src/errors/utils.ts +1 -1
  84. package/src/forms/{Form.test.ts → FormController.test.ts} +32 -8
  85. package/src/forms/{Form.ts → FormController.ts} +42 -38
  86. package/src/forms/index.ts +2 -3
  87. package/src/forms/utils.ts +35 -35
  88. package/src/index.css +72 -0
  89. package/src/jobs/Job.ts +2 -2
  90. package/src/jobs/listeners.ts +1 -1
  91. package/src/lang/DefaultLangProvider.ts +7 -4
  92. package/src/lang/Lang.state.ts +1 -1
  93. package/src/lang/Lang.ts +1 -1
  94. package/src/lang/index.ts +12 -6
  95. package/src/lang/settings/Language.vue +48 -0
  96. package/src/lang/settings/index.ts +10 -0
  97. package/src/plugins/Plugin.ts +1 -1
  98. package/src/plugins/index.ts +10 -7
  99. package/src/services/App.state.ts +15 -4
  100. package/src/services/App.ts +12 -4
  101. package/src/services/Cache.ts +1 -1
  102. package/src/services/Events.test.ts +8 -8
  103. package/src/services/Events.ts +4 -10
  104. package/src/services/Service.ts +21 -21
  105. package/src/services/Storage.ts +3 -3
  106. package/src/services/index.ts +8 -4
  107. package/src/services/utils.ts +2 -2
  108. package/src/testing/index.ts +4 -3
  109. package/src/testing/setup.ts +3 -19
  110. package/src/ui/UI.state.ts +8 -13
  111. package/src/ui/UI.ts +124 -111
  112. package/src/ui/index.ts +27 -28
  113. package/src/utils/classes.ts +49 -0
  114. package/src/utils/composition/events.ts +4 -6
  115. package/src/utils/composition/forms.ts +20 -4
  116. package/src/utils/composition/state.ts +11 -2
  117. package/src/utils/index.ts +4 -1
  118. package/src/utils/markdown.ts +3 -5
  119. package/src/utils/types.ts +3 -0
  120. package/src/utils/vue.ts +25 -136
  121. package/dist/aerogel-core.cjs.js +0 -2
  122. package/dist/aerogel-core.cjs.js.map +0 -1
  123. package/dist/aerogel-core.esm.js +0 -2
  124. package/dist/aerogel-core.esm.js.map +0 -1
  125. package/histoire.config.ts +0 -7
  126. package/noeldemartin.config.js +0 -5
  127. package/postcss.config.js +0 -6
  128. package/src/assets/histoire.css +0 -3
  129. package/src/components/AGAppLayout.vue +0 -16
  130. package/src/components/AGAppOverlays.vue +0 -41
  131. package/src/components/AGAppSnackbars.vue +0 -13
  132. package/src/components/composition.ts +0 -23
  133. package/src/components/constants.ts +0 -8
  134. package/src/components/forms/AGButton.vue +0 -44
  135. package/src/components/forms/AGCheckbox.vue +0 -41
  136. package/src/components/forms/AGInput.vue +0 -40
  137. package/src/components/forms/AGSelect.story.vue +0 -46
  138. package/src/components/forms/AGSelect.vue +0 -60
  139. package/src/components/forms/index.ts +0 -5
  140. package/src/components/headless/forms/AGHeadlessButton.ts +0 -3
  141. package/src/components/headless/forms/AGHeadlessButton.vue +0 -62
  142. package/src/components/headless/forms/AGHeadlessInput.ts +0 -34
  143. package/src/components/headless/forms/AGHeadlessInput.vue +0 -70
  144. package/src/components/headless/forms/AGHeadlessSelect.ts +0 -42
  145. package/src/components/headless/forms/AGHeadlessSelect.vue +0 -77
  146. package/src/components/headless/forms/AGHeadlessSelectButton.vue +0 -24
  147. package/src/components/headless/forms/AGHeadlessSelectLabel.vue +0 -24
  148. package/src/components/headless/forms/AGHeadlessSelectOption.ts +0 -4
  149. package/src/components/headless/forms/AGHeadlessSelectOption.vue +0 -39
  150. package/src/components/headless/forms/AGHeadlessSelectOptions.ts +0 -3
  151. package/src/components/headless/forms/composition.ts +0 -10
  152. package/src/components/headless/forms/index.ts +0 -18
  153. package/src/components/headless/modals/AGHeadlessModal.ts +0 -36
  154. package/src/components/headless/modals/AGHeadlessModal.vue +0 -92
  155. package/src/components/headless/modals/AGHeadlessModalPanel.vue +0 -32
  156. package/src/components/headless/modals/AGHeadlessModalTitle.vue +0 -23
  157. package/src/components/headless/modals/index.ts +0 -4
  158. package/src/components/headless/snackbars/AGHeadlessSnackbar.vue +0 -10
  159. package/src/components/headless/snackbars/index.ts +0 -40
  160. package/src/components/interfaces.ts +0 -24
  161. package/src/components/lib/AGErrorMessage.vue +0 -16
  162. package/src/components/lib/AGLink.vue +0 -9
  163. package/src/components/lib/AGMarkdown.vue +0 -54
  164. package/src/components/lib/AGMeasured.vue +0 -16
  165. package/src/components/lib/AGProgressBar.vue +0 -30
  166. package/src/components/lib/index.ts +0 -6
  167. package/src/components/modals/AGAlertModal.ts +0 -18
  168. package/src/components/modals/AGAlertModal.vue +0 -14
  169. package/src/components/modals/AGConfirmModal.ts +0 -42
  170. package/src/components/modals/AGConfirmModal.vue +0 -26
  171. package/src/components/modals/AGErrorReportModal.ts +0 -49
  172. package/src/components/modals/AGErrorReportModal.vue +0 -54
  173. package/src/components/modals/AGErrorReportModalTitle.vue +0 -25
  174. package/src/components/modals/AGLoadingModal.ts +0 -29
  175. package/src/components/modals/AGLoadingModal.vue +0 -15
  176. package/src/components/modals/AGModal.ts +0 -11
  177. package/src/components/modals/AGModal.vue +0 -39
  178. package/src/components/modals/AGModalContext.ts +0 -8
  179. package/src/components/modals/AGModalTitle.vue +0 -9
  180. package/src/components/modals/AGPromptModal.ts +0 -41
  181. package/src/components/modals/AGPromptModal.vue +0 -34
  182. package/src/components/modals/index.ts +0 -17
  183. package/src/components/snackbars/AGSnackbar.vue +0 -36
  184. package/src/components/snackbars/index.ts +0 -3
  185. package/src/components/utils.ts +0 -10
  186. package/src/directives/initial-focus.ts +0 -11
  187. package/src/forms/composition.ts +0 -6
  188. package/src/main.histoire.ts +0 -1
  189. package/src/utils/tailwindcss.test.ts +0 -26
  190. package/src/utils/tailwindcss.ts +0 -7
  191. package/tailwind.config.js +0 -4
  192. package/tsconfig.json +0 -11
  193. package/vite.config.ts +0 -17
  194. /package/src/{main.ts → index.ts} +0 -0
@@ -1,12 +1,21 @@
1
1
  import { debounce } from '@noeldemartin/utils';
2
- import { ref, watchEffect } from 'vue';
3
- import type { ComputedGetter, ComputedRef } from '@vue/runtime-core';
2
+ import { computed, ref, watch, watchEffect } from 'vue';
3
+ import type { ComputedGetter, ComputedRef, Ref } from 'vue';
4
4
 
5
5
  export interface ComputedDebounceOptions<T> {
6
6
  initial?: T;
7
7
  delay?: number;
8
8
  }
9
9
 
10
+ export function computedAsync<T>(getter: () => Promise<T>): Ref<T | undefined> {
11
+ const result = ref<T>();
12
+ const asyncValue = computed(getter);
13
+
14
+ watch(asyncValue, async () => (result.value = await asyncValue.value), { immediate: true });
15
+
16
+ return result;
17
+ }
18
+
10
19
  export function computedDebounce<T>(options: ComputedDebounceOptions<T>, getter: ComputedGetter<T>): ComputedRef<T>;
11
20
  export function computedDebounce<T>(getter: ComputedGetter<T>): ComputedRef<T | null>;
12
21
  export function computedDebounce<T>(
@@ -1,6 +1,9 @@
1
+ export * from './classes';
1
2
  export * from './composition/events';
2
3
  export * from './composition/forms';
3
4
  export * from './composition/hooks';
4
5
  export * from './composition/persistent';
5
- export * from './tailwindcss';
6
+ export * from './composition/state';
7
+ export * from './markdown';
8
+ export * from './types';
6
9
  export * from './vue';
@@ -4,8 +4,8 @@ import { Renderer, marked } from 'marked';
4
4
 
5
5
  function makeRenderer(): Renderer {
6
6
  return tap(new Renderer(), (renderer) => {
7
- renderer.link = function(href, title, text) {
8
- return Renderer.prototype.link.apply(this, [href, title, text]).replace('<a', '<a target="_blank"');
7
+ renderer.link = function(link) {
8
+ return Renderer.prototype.link.apply(this, [link]).replace('<a', '<a target="_blank"');
9
9
  };
10
10
  });
11
11
  }
@@ -21,7 +21,7 @@ function renderActionLinks(html: string): string {
21
21
  }
22
22
 
23
23
  export function renderMarkdown(markdown: string): string {
24
- let html = marked(markdown, { mangle: false, headerIds: false, renderer: makeRenderer() });
24
+ let html = marked(markdown, { renderer: makeRenderer(), async: false });
25
25
 
26
26
  html = safeHtml(html);
27
27
  html = renderActionLinks(html);
@@ -30,7 +30,5 @@ export function renderMarkdown(markdown: string): string {
30
30
  }
31
31
 
32
32
  export function safeHtml(html: string): string {
33
- // TODO improve target="_blank" exception
34
- // See https://github.com/cure53/DOMPurify/issues/317
35
33
  return DOMPurify.sanitize(html, { ADD_ATTR: ['target'] });
36
34
  }
@@ -0,0 +1,3 @@
1
+ import type { Nullable } from '@noeldemartin/utils';
2
+
3
+ export type Falsifiable<T> = Nullable<T> | false;
package/src/utils/vue.ts CHANGED
@@ -1,64 +1,21 @@
1
- import { fail } from '@noeldemartin/utils';
2
- import { computed, inject, reactive, ref, watch } from 'vue';
3
- import type { Directive, InjectionKey, MaybeRef, PropType, Ref, UnwrapNestedRefs } from 'vue';
4
-
5
- type BaseProp<T> = {
6
- type?: PropType<T>;
7
- validator?(value: unknown): boolean;
8
- };
9
-
10
- type RequiredProp<T> = BaseProp<T> & { required: true };
11
- type OptionalProp<T> = BaseProp<T> & { default: T | (() => T) | null };
1
+ import { fail, toString } from '@noeldemartin/utils';
2
+ import { Comment, Static, Text, inject, reactive } from 'vue';
3
+ import type { Directive, InjectionKey, MaybeRef, Ref, UnwrapNestedRefs, VNode } from 'vue';
12
4
 
13
5
  export type AcceptRefs<T> = { [K in keyof T]: T[K] | RefUnion<T[K]> };
14
- export type ComponentProps = Record<string, unknown>;
15
6
  export type RefUnion<T> = T extends infer R ? Ref<R> : never;
16
7
  export type Unref<T> = { [K in keyof T]: T[K] extends MaybeRef<infer Value> ? Value : T[K] };
17
8
 
18
- export function arrayProp<T>(defaultValue?: () => T[]): OptionalProp<T[]> {
19
- return {
20
- type: Array as PropType<T[]>,
21
- default: defaultValue ?? (() => []),
22
- };
23
- }
24
-
25
- export function booleanProp(defaultValue: boolean = false): OptionalProp<boolean> {
26
- return {
27
- type: Boolean,
28
- default: defaultValue,
29
- };
30
- }
31
-
32
- export function componentRef<T>(): Ref<UnwrapNestedRefs<T> | undefined> {
33
- return ref<UnwrapNestedRefs<T>>();
34
- }
35
-
36
- export function computedAsync<T>(getter: () => Promise<T>): Ref<T | undefined> {
37
- const result = ref<T>();
38
- const asyncValue = computed(getter);
39
-
40
- watch(asyncValue, async () => (result.value = await asyncValue.value), { immediate: true });
41
-
42
- return result;
9
+ function renderVNodeAttrs(node: VNode): string {
10
+ return Object.entries(node.props ?? {}).reduce((attrs, [name, value]) => {
11
+ return attrs + `${name}="${toString(value)}"`;
12
+ }, '');
43
13
  }
44
14
 
45
15
  export function defineDirective(directive: Directive): Directive {
46
16
  return directive;
47
17
  }
48
18
 
49
- export function enumProp<Enum extends Record<string, unknown>>(
50
- enumeration: Enum,
51
- defaultValue?: Enum[keyof Enum],
52
- ): OptionalProp<Enum[keyof Enum]> {
53
- const values = Object.values(enumeration) as Enum[keyof Enum][];
54
-
55
- return {
56
- type: String as unknown as PropType<Enum[keyof Enum]>,
57
- default: defaultValue ?? values[0] ?? null,
58
- validator: (value) => values.includes(value as Enum[keyof Enum]),
59
- };
60
- }
61
-
62
19
  export function injectReactive<T extends object>(key: InjectionKey<T> | string): UnwrapNestedRefs<T> | undefined {
63
20
  const value = inject(key);
64
21
 
@@ -69,99 +26,31 @@ export function injectReactiveOrFail<T extends object>(
69
26
  key: InjectionKey<T> | string,
70
27
  errorMessage?: string,
71
28
  ): UnwrapNestedRefs<T> {
72
- return injectReactive(key) ?? fail(errorMessage ?? `Could not resolve '${key}' injection key`);
29
+ return injectReactive(key) ?? fail(errorMessage ?? `Could not resolve '${toString(key)}' injection key`);
73
30
  }
74
31
 
75
32
  export function injectOrFail<T>(key: InjectionKey<T> | string, errorMessage?: string): T {
76
- return inject(key) ?? fail(errorMessage ?? `Could not resolve '${key}' injection key`);
77
- }
78
-
79
- export function listenerProp<T extends Function = Function>(): OptionalProp<T | null> {
80
- return {
81
- type: Function as PropType<T>,
82
- default: null,
83
- };
33
+ return inject(key) ?? fail(errorMessage ?? `Could not resolve '${toString(key)}' injection key`);
84
34
  }
85
35
 
86
- export function mixedProp<T>(type?: PropType<T>): OptionalProp<T | null>;
87
- export function mixedProp<T>(type: PropType<T>, defaultValue: T): OptionalProp<T>;
88
- export function mixedProp<T>(type?: PropType<T>, defaultValue?: T): OptionalProp<T | null> {
89
- return {
90
- type,
91
- default: defaultValue ?? null,
92
- };
93
- }
94
-
95
- export function numberProp(): OptionalProp<number | null>;
96
- export function numberProp(defaultValue: number): OptionalProp<number>;
97
- export function numberProp(defaultValue: number | null = null): OptionalProp<number | null> {
98
- return {
99
- type: Number,
100
- default: defaultValue,
101
- };
102
- }
103
-
104
- export function objectProp<T = Object>(): OptionalProp<T | null>;
105
- export function objectProp<T>(defaultValue: () => T): OptionalProp<T>;
106
- export function objectProp<T = Object>(defaultValue: (() => T) | null = null): OptionalProp<T | null> {
107
- return {
108
- type: Object,
109
- default: defaultValue,
110
- };
111
- }
112
-
113
- export function requiredArrayProp<T>(): RequiredProp<T[]> {
114
- return {
115
- type: Array as PropType<T[]>,
116
- required: true,
117
- };
118
- }
36
+ export function renderVNode(node: VNode | string): string {
37
+ if (typeof node === 'string') {
38
+ return node;
39
+ }
119
40
 
120
- export function requiredEnumProp<Enum extends Record<string, unknown>>(
121
- enumeration: Enum,
122
- ): RequiredProp<Enum[keyof Enum]> {
123
- const values = Object.values(enumeration);
41
+ if (node.type === Comment) {
42
+ return '';
43
+ }
124
44
 
125
- return {
126
- type: String as unknown as PropType<Enum[keyof Enum]>,
127
- required: true,
128
- validator: (value) => values.includes(value),
129
- };
130
- }
45
+ if (node.type === Text || node.type === Static) {
46
+ return node.children as string;
47
+ }
131
48
 
132
- export function requiredMixedProp<T>(type?: PropType<T>): RequiredProp<T> {
133
- return {
134
- type,
135
- required: true,
136
- };
137
- }
138
-
139
- export function requiredNumberProp(): RequiredProp<number> {
140
- return {
141
- type: Number,
142
- required: true,
143
- };
144
- }
145
-
146
- export function requiredObjectProp<T = Object>(): RequiredProp<T> {
147
- return {
148
- type: Object,
149
- required: true,
150
- };
151
- }
152
-
153
- export function requiredStringProp(): RequiredProp<string> {
154
- return {
155
- type: String,
156
- required: true,
157
- };
158
- }
49
+ if (node.type === 'br') {
50
+ return '\n\n';
51
+ }
159
52
 
160
- export function stringProp(): OptionalProp<string | null>;
161
- export function stringProp(defaultValue: string): OptionalProp<string>;
162
- export function stringProp(defaultValue: string | null = null): OptionalProp<string | null> {
163
- return {
164
- type: String,
165
- default: defaultValue,
166
- };
53
+ return `<${node.type} ${renderVNodeAttrs(node)}>${Array.from(node.children as Array<VNode | string>)
54
+ .map(renderVNode)
55
+ .join('')}</${node.type}>`;
167
56
  }
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("virtual:aerogel"),t=require("vue"),r=require("@babel/runtime/helpers/defineProperty"),o=require("@noeldemartin/utils");require("core-js/modules/esnext.async-iterator.for-each.js"),require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.for-each.js"),require("core-js/modules/esnext.async-iterator.reduce.js"),require("core-js/modules/esnext.iterator.reduce.js"),require("core-js/modules/esnext.set.add-all.js"),require("core-js/modules/esnext.set.delete-all.js"),require("core-js/modules/esnext.set.difference.js"),require("core-js/modules/esnext.set.every.js"),require("core-js/modules/esnext.set.filter.js"),require("core-js/modules/esnext.set.find.js"),require("core-js/modules/esnext.set.intersection.js"),require("core-js/modules/esnext.set.is-disjoint-from.js"),require("core-js/modules/esnext.set.is-subset-of.js"),require("core-js/modules/esnext.set.is-superset-of.js"),require("core-js/modules/esnext.set.join.js"),require("core-js/modules/esnext.set.map.js"),require("core-js/modules/esnext.set.reduce.js"),require("core-js/modules/esnext.set.some.js"),require("core-js/modules/esnext.set.symmetric-difference.js"),require("core-js/modules/esnext.set.union.js");var s=require("pinia");require("core-js/modules/esnext.async-iterator.map.js"),require("core-js/modules/esnext.iterator.map.js"),require("core-js/modules/esnext.weak-map.delete-all.js"),require("core-js/modules/esnext.weak-map.emplace.js"),require("core-js/modules/esnext.async-iterator.filter.js"),require("core-js/modules/esnext.iterator.filter.js"),require("core-js/modules/esnext.string.at.js"),require("core-js/modules/esnext.async-iterator.find.js"),require("core-js/modules/esnext.iterator.find.js"),require("core-js/modules/esnext.async-iterator.some.js"),require("core-js/modules/esnext.iterator.some.js");var n=require("@headlessui/vue"),a=require("dompurify"),l=require("marked");function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var c=i(e),u=i(r),d=i(a);class ServiceBootError extends o.JSError{constructor(e,t){super(`Service '${e}' failed booting`,{cause:t})}}let p=null;function m(){return p??f()}function f(){return o.tap(s.createPinia(),(e=>{p=e,s.setActivePinia(e)}))}function h(){return p??m()}function v(e,t){return m(),s.defineStore(e,t)()}function g(e){var t;return t=class extends x{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,o]=t;try{o=structuredClone(o)}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]=o,e}),{})}getComputedStateDefinition(){return e.computed??{}}getStateWatchers(){return e.watch??{}}serializePersistedState(t){return e.serialize?.(t)??t}deserializePersistedState(t){return e.restore?.(t)??t}},u.default(t,"persist",e.persist??[]),t}class x extends o.MagicObject{constructor(){super(),u.default(this,"_name",void 0),u.default(this,"_booted",void 0),u.default(this,"_computedStateKeys",void 0),u.default(this,"_watchers",void 0),u.default(this,"_store",void 0);const e=this.getComputedStateDefinition();this._name=this.getName()??new.target.name,this._booted=new o.PromisedValue,this._computedStateKeys=new Set(Object.keys(e)),this._watchers=this.getStateWatchers(),this._store=this.usesStore()&&v(this._name,{state:()=>this.getInitialState(),getters:e})}get booted(){return this._booted}static(e){return super.static(e)}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 o.Storage.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,s=o.objectOnly(this._store.$state,Object.keys(r));Object.assign(this._store.$state,r),this.onStateUpdated(r,s)}updatePersistedState(e){if(!this._store)return;const t=o.arrayFrom(e),r=o.objectOnly(this._store.$state,t);o.isEmpty(r)||this.onPersistentStateUpdated(r)}__get(e){return this.hasState(e)?this.getState(e):super.__get(e)}__set(e,t){this.setState({[e]:t})}onStateUpdated(e,t){const r=o.objectOnly(e,this.static("persist"));o.isEmpty(r)||this.onPersistentStateUpdated(r);for(const r in e){const o=this._watchers[r];o&&e[r]!==t[r]&&o.call(this,e[r],t[r])}}onPersistentStateUpdated(e){const t=o.Storage.get(this._name);t&&o.Storage.set(this._name,{...t,...this.serializePersistedState(o.objectDeepClone(e))})}usesStore(){return!1}getName(){return null}getInitialState(){return{}}getComputedStateDefinition(){return{}}getStateWatchers(){return{}}serializePersistedState(e){return e}deserializePersistedState(e){return e}async frameworkBoot(){this.restorePersistedState()}async boot(){}restorePersistedState(){if(this.usesStore()&&!o.isEmpty(this.static("persist")))if(o.Storage.has(this._name)){const e=o.Storage.require(this._name);this.setState(this.deserializePersistedState(e))}else o.Storage.set(this._name,o.objectOnly(this.getState(),this.static("persist")))}requireStore(){return this._store?this._store:o.fail(`Failed getting '${this._name}' store`)}}u.default(x,"persist",[]);class b extends x{constructor(){super(...arguments),u.default(this,"listeners",{})}async boot(){Object.entries(globalThis.__aerogelEvents__??{}).forEach((e=>{let[t,r]=e;return this.on(t,r)}))}async emit(e,t){const r=this.listeners[e]??{priorities:[],handlers:{}};for(const e of r.priorities)await Promise.all(r.handlers[e]?.map((e=>e(t)))??[])}on(e,t,r){const o="function"==typeof t?{}:"number"==typeof t?{priority:t}:t,s="function"==typeof t?t:r;return this.registerListener(e,o,s),()=>this.off(e,s)}once(e,t,r){let s=null;const n="function"==typeof t?{}:t,a="function"==typeof t?t:r;return o.tap((()=>s&&this.off(e,s)),(t=>{s=function(){return t(),a(...arguments)},this.registerListener(e,n,a)}))}off(e,t){const r=this.listeners[e];if(!r)return;const s=[...r.priorities];for(const e of s)o.arrayRemove(r.handlers[e]??[],t),0===r.handlers[e]?.length&&(delete r.handlers[e],o.arrayRemove(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 n=this.listeners[e]?.priorities??o.fail(`priorities missing for event '${e}'`),a=this.listeners[e]?.handlers??o.fail(`handlers missing for event '${e}'`);n.includes(s)||(n.push(s),n.sort(((e,t)=>t-e)),a[s]=[]),a[s]?.push(r)}}var y=o.facade(b),_=g({name:"app",initialState:{plugins:{},instance:null,environment:c.default.environment,version:c.default.version,sourceUrl:c.default.sourceUrl},computed:{development:e=>"development"===e.environment,staging:e=>"staging"===e.environment,testing:e=>"test"===e.environment||"testing"===e.environment,versionName(e){return this.development?"dev."+c.default.sourceHash.toString().substring(0,7):this.staging?"staging."+c.default.sourceHash.toString().substring(0,7):`v${e.version}`},versionUrl(e){return e.sourceUrl+(this.development||this.staging?`/tree/${c.default.sourceHash}`:`/releases/tag/${this.versionName}`)}}});class k extends _{constructor(){super(...arguments),u.default(this,"name",c.default.name),u.default(this,"ready",new o.PromisedValue),u.default(this,"mounted",new o.PromisedValue)}isReady(){return this.ready.isResolved()}isMounted(){return this.mounted.isResolved()}async whenReady(e){return await this.ready.then(e)}async reload(e){e&&o.updateLocationQueryParameters(e),location.reload(),await o.forever()}plugin(e){return this.plugins[e]??null}service(e){return this.instance?.config.globalProperties[e]??null}async boot(){y.once("application-ready",(()=>this.ready.resolve())),y.once("application-mounted",(()=>this.mounted.resolve()))}}var w=o.facade(k);function C(e){return e}async function S(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),o=1;o<t;o++)r[o-1]=arguments[o];w.setState("plugins",e.reduce(((e,t)=>(t.name&&(e[t.name]=t),e)),{})),await Promise.all(e.map((e=>e.install(...r)))??[])}function A(e){return{type:Array,default:e??(()=>[])}}function E(){return{type:Boolean,default:arguments.length>0&&void 0!==arguments[0]&&arguments[0]}}function B(){return t.ref()}function G(e){return e}function j(e,t){const r=Object.values(e);return{type:String,default:t??r[0]??null,validator:e=>r.includes(e)}}function M(e){const r=t.inject(e);return r?t.reactive(r):void 0}function P(e,t){return M(e)??o.fail(t??`Could not resolve '${e}' injection key`)}function V(e,t){return{type:e,default:t??null}}function $(){return{type:Number,default:arguments.length>0&&void 0!==arguments[0]?arguments[0]:null}}function N(){return{type:Object,default:arguments.length>0&&void 0!==arguments[0]?arguments[0]:null}}function q(){return{type:Array,required:!0}}function L(e){return{type:e,required:!0}}function H(){return{type:Number,required:!0}}function T(){return{type:Object,required:!0}}function I(){return{type:String,required:!0}}function R(){return{type:String,default:arguments.length>0&&void 0!==arguments[0]?arguments[0]:null}}var D={mounted(e,t){let{value:r}=t;!1!==r&&e.focus()}};const O=new WeakMap;const F={"initial-focus":D,measure:{mounted(e,t){let{value:r}=t;const s="function"==typeof r?r:null,n=()=>{const t=e.getBoundingClientRect();e.style.setProperty("--width",`${t.width}px`),e.style.setProperty("--height",`${t.height}px`),s?.({width:t.width,height:t.height})};O.set(e,o.tap(new ResizeObserver(n)).observe(e)),n()},unmounted(e){O.get(e)?.unobserve(e),O.delete(e)}}};var z={install(e,t){const r={...F,...t.directives};for(const[t,o]of Object.entries(r))e.directive(t,o)}};class U extends x{constructor(){super(...arguments),u.default(this,"cache",void 0)}async get(e){const t=await this.open();return await t.match(e)??null}async store(e,t){const r=await this.open();await r.put(e,t)}async replace(e,t){const r=await this.open();0!==(await r.keys(e)).length&&await r.put(e,t)}async open(){return this.cache=this.cache??o.tap(new o.PromisedValue,(e=>{caches.open("app").then((t=>e.resolve(t)))}))}}var W=o.facade(U);var J=o.facade(class extends x{async purge(){await y.emit("purge-storage")}});const K={$app:w,$events:y,$storage:J};async function Q(e,t){await Promise.all(Object.entries(t).map((async t=>{let[r,o]=t;await o.launch().catch((t=>e.config.errorHandler?.(t,null,`Failed launching ${r}.`)))}))),Object.assign(e.config.globalProperties,t),(w.development||w.testing)&&Object.assign(globalThis,t)}var Z={async install(e,t){const r={...K,...t.services};e.use(h()),await Q(e,r)}};const X={Mobile:"mobile",Desktop:"desktop"};function Y(){return globalThis.innerWidth>768?X.Desktop:X.Mobile}var ee=g({name:"ui",initialState:{modals:[],snackbars:[],layout:Y()},computed:{mobile:e=>{let{layout:t}=e;return t===X.Mobile},desktop:e=>{let{layout:t}=e;return t===X.Desktop}}});const te={AlertModal:"alert-modal",ConfirmModal:"confirm-modal",ErrorReportModal:"error-report-modal",LoadingModal:"loading-modal",PromptModal:"prompt-modal",Snackbar:"snackbar",StartupCrash:"startup-crash"};class re extends ee{constructor(){super(...arguments),u.default(this,"modalCallbacks",{}),u.default(this,"components",{})}requireComponent(e){return this.components[e]??o.fail(`UI Component '${e}' is not defined!`)}alert(e,t){this.openModal(this.requireComponent(te.AlertModal),"string"!=typeof t?{message:e}:{title:e,message:t})}async confirm(e,t,r){const o="string"!=typeof t?{...t??{},message:e,required:!!t?.required}:{...r??{},title:e,message:t,required:!!r?.required},s=await this.openModal(this.requireComponent(te.ConfirmModal),o),n=await s.beforeClose,a="object"==typeof n?n[0]:n??!1,l="object"==typeof n?n[1]:Object.entries(o.checkboxes??{}).reduce(((e,t)=>{let[r,{default:o}]=t;return{[r]:o??!1,...e}}),{});for(const[e,t]of Object.entries(o.checkboxes??{}))if(t.required&&!l[e])return a&&w.development&&console.warn(`Confirmed confirm modal was suppressed because required '${e}' checkbox was missing`),[!1,l];return"checkboxes"in o?[a,l]:a}async prompt(e,t,r){const o=r?.trim??!0,s=await this.openModal(this.requireComponent(te.PromptModal),"string"!=typeof t?{message:e,...t??{}}:{title:e,message:t,...r??{}}),n=await s.beforeClose;return(o&&"string"==typeof n?n?.trim():n)??null}async loading(e,t){const r=e=>"function"==typeof e?Promise.resolve(e()):e,{operationPromise:s,props:n}="string"==typeof e?{props:{message:e},operationPromise:r(t)}:"function"==typeof e||e instanceof Promise?{operationPromise:r(e)}:{props:e,operationPromise:r(t)},a=await this.openModal(this.requireComponent(te.LoadingModal),n);try{const[e]=await Promise.all([s,o.after({seconds:1})]);return e}finally{await this.closeModal(a.id)}}showSnackbar(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const s={id:o.uuid(),properties:{message:e,...r},component:t.markRaw(r.component??this.requireComponent(te.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,r){const s=o.uuid(),n={},a={id:s,properties:r??{},component:t.markRaw(e),beforeClose:new Promise((e=>n.willClose=e)),afterClose:new Promise((e=>n.closed=e))},l=this.modals.at(-1),i=this.modals.concat(a);return this.modalCallbacks[a.id]=n,this.setState({modals:i}),await t.nextTick(),await(l&&y.emit("hide-modal",{id:l.id})),await Promise.all([l||y.emit("show-overlays-backdrop"),y.emit("show-modal",{id:a.id})]),a}async closeModal(e,t){w.isMounted()?await y.emit("close-modal",{id:e,result:t}):await this.removeModal(e,t)}async closeAllModals(){for(;this.modals.length>0;)await this.closeModal(o.required(this.modals[this.modals.length-1]).id)}async boot(){this.watchModalEvents(),this.watchMountedEvent(),this.watchViewportBreakpoints()}async removeModal(e,t){this.setState("modals",this.modals.filter((t=>t.id!==e))),this.modalCallbacks[e]?.closed?.(t),delete this.modalCallbacks[e];const r=this.modals.at(-1);await(r&&y.emit("show-modal",{id:r.id}))}watchModalEvents(){y.on("modal-will-close",(e=>{let{modal:t,result:r}=e;this.modalCallbacks[t.id]?.willClose?.(r),1===this.modals.length&&y.emit("hide-overlays-backdrop")})),y.on("modal-closed",(async e=>{let{modal:{id:t},result:r}=e;await this.removeModal(t,r)}))}watchMountedEvent(){y.once("application-mounted",(async()=>{if(!globalThis.document||!globalThis.getComputedStyle)return;const e=globalThis.document.getElementById("splash");e&&("0"!==globalThis.getComputedStyle(e).opacity&&(e.style.opacity="0",await o.after({ms:600})),e.remove())}))}watchViewportBreakpoints(){if(!globalThis.matchMedia)return;globalThis.matchMedia("(min-width: 768px)").addEventListener("change",(()=>this.setState({layout:Y()})))}}var oe=o.facade(re);class se{constructor(e,t){u.default(this,"locale",void 0),u.default(this,"fallbackLocale",void 0),this.locale=e,this.fallbackLocale=t}getLocale(){return this.locale}async setLocale(e){this.locale=e}getFallbackLocale(){return this.fallbackLocale}async setFallbackLocale(e){this.fallbackLocale=e}getLocales(){return["en"]}translate(e){return w.development&&console.warn("Lang provider is missing"),e}translateWithDefault(e,t){return w.development&&console.warn("Lang provider is missing"),t}}var ne=g({name:"lang",persist:["locale","fallbackLocale"],initialState:{locale:null,locales:["en"],fallbackLocale:"en"}});var ae=o.facade(class extends ne{constructor(){super(),u.default(this,"provider",void 0),this.provider=new se(this.getState("locale")??this.getBrowserLocale(),this.getState("fallbackLocale"))}async setProvider(e){this.provider=e,this.locales=e.getLocales(),await e.setLocale(this.locale??this.getBrowserLocale()),await e.setFallbackLocale(this.fallbackLocale)}translate(e,t){return this.provider.translate(e,t)??e}translateWithDefault(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.provider.translateWithDefault(e,t,r)}getBrowserLocale(){const e=this.getState("locales");return navigator.languages.find((t=>e.includes(t)))??"en"}async boot(){globalThis.document&&this.requireStore().$subscribe((async()=>{await this.provider.setLocale(this.locale??this.getBrowserLocale()),await this.provider.setFallbackLocale(this.fallbackLocale),this.locale?document.querySelector("html")?.setAttribute("lang",this.locale):document.querySelector("html")?.removeAttribute("lang")}),{immediate:!0})}});const le=ae.translate.bind(ae),ie=ae.translateWithDefault.bind(ae);var ce=g({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 ue={Primary:"primary",Secondary:"secondary",Danger:"danger",Clear:"clear"};var de=o.facade(class extends ce{constructor(){super(...arguments),u.default(this,"forceReporting",!1),u.default(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?oe.openModal(oe.requireComponent(te.ErrorReportModal),{reports:t}):oe.alert(ie("errors.inspectEmpty","Nothing to inspect!"))}async report(e,t){if(await y.emit("error",{error:e,message:t}),w.testing)throw e;if(w.development&&this.logError(e),!this.enabled)throw e;if(!w.isMounted()){const t=await this.createStartupErrorReport(e);return void(t&&this.setState({startupErrors:this.startupErrors.concat(t)}))}const r=await this.createErrorReport(e),o={report:r,seen:!1,date:new Date};oe.showSnackbar(t??ie("errors.notice","Something went wrong, but it's not your fault. Try again!"),{color:ue.Danger,actions:[{text:ie("errors.viewDetails","View details"),dismiss:!0,handler:()=>oe.openModal(oe.requireComponent(te.ErrorReportModal),{reports:[r]})}]}),this.setState({logs:[o].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),o.isObject(e)&&e.cause&&this.logError(e.cause)}async createErrorReport(e){return"string"==typeof e?{title:e}:e instanceof Error||e instanceof o.JSError?this.createErrorReportFromError(e):o.isObject(e)?o.objectWithoutEmpty({title:o.toString(e.name??e.title??ie("errors.unknown","Unknown Error")),description:o.toString(e.message??e.description??ie("errors.unknownDescription","Unknown error object")),error:e}):{title:ie("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 pe=[];function me(e){for(const t of pe){const r=t(e);if(r)return r}return"string"==typeof e?e:e instanceof Error||e instanceof o.JSError?e.message:o.isObject(e)?o.toString(e.message??e.description??"Unknown error object"):ie("errors.unknown","Unknown Error")}const fe={$errors:de};function he(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:()=>!1;const r=e=>t(e)||(e=>(de.report(e),!0))(e);e.config.errorHandler=r,globalThis.onerror=(e,t,o,s,n)=>r(n??e),globalThis.onunhandledrejection=e=>r(e.reason)}var ve={async install(e,t){he(e,t.handleError),await Q(e,fe)}};const ge={$lang:ae};var xe={async install(e){e.config.globalProperties.$t??=le,e.config.globalProperties.$td=ie,await Q(e,ge)}},be={async install(){"testing"===(void 0).MODE&&(globalThis.testingRuntime={on:function(){return y.on(...arguments)}})}};function ye(e,r){const o=y.on(e,r);t.onUnmounted((()=>o()))}function _e(){const e=t.useAttrs(),r=t.computed((()=>e.class));return[t.computed((()=>o.objectWithout(e,"class"))),r]}function ke(e,t){return Object.keys(t).reduce(((t,r)=>(t[r]=e[r],t)),{})}const we={cancellable:E(!0),inline:E(),title:R()};function Ce(){return we}function Se(e){return{inline:t.computed((()=>!!e.value?.inline)),cancellable:t.computed((()=>!!e.value?.cancellable)),close:async()=>e.value?.close()}}var Ae=t.defineComponent({__name:"AGHeadlessModal",props:Ce(),setup(e,{expose:r}){const o=e,s=t.ref(null),a=t.ref(!0),l=t.ref(!1),{modal:i}=P("modal","could not obtain modal reference from <AGHeadlessModal>, did you render this component manually? Show it using $ui.openModal() instead"),c=t.computed((()=>i.properties.inline?"div":n.Dialog));async function u(){s.value?.$el&&(a.value=!0)}async function d(e){l.value||(y.emit("modal-will-close",{modal:i,result:e}),await u(),l.value=!0,y.emit("modal-closed",{modal:i,result:e}))}return ye("close-modal",(async({id:e,result:t})=>{e===i.id&&await d(t)})),ye("hide-modal",(async({id:e})=>{e===i.id&&await u()})),ye("show-modal",(async({id:e})=>{e===i.id&&await async function(){s.value?.$el&&(a.value=!1)}()})),r({close:d,cancellable:t.toRef(o,"cancellable"),inline:t.toRef(o,"inline")}),(e,r)=>(t.openBlock(),t.createBlock(t.resolveDynamicComponent(c.value),{ref_key:"$root",ref:s,open:!0,onClose:r[0]||(r[0]=t=>e.cancellable&&d())},{default:t.withCtx((()=>[t.renderSlot(e.$slots,"default",{close:d})])),_:3},544))}});Ae.__file="src/components/headless/modals/AGHeadlessModal.vue";var Ee=t.defineComponent({__name:"AGModalContext",props:{modal:T(),childIndex:$(0)},setup(e){const r=e,o=t.computed((()=>{const e={};for(const o in r.modal.properties)e[o]=t.unref(r.modal.properties[o]);return e}));return t.provide("modal",{modal:t.toRef(r,"modal"),childIndex:t.toRef(r,"childIndex")}),(r,s)=>(t.openBlock(),t.createBlock(t.resolveDynamicComponent(e.modal.component),t.normalizeProps(t.guardReactiveProps(o.value)),null,16))}});Ee.__file="src/components/modals/AGModalContext.vue";var Be=t.defineComponent({__name:"AGHeadlessModalPanel",setup(e){const{modal:r,childIndex:o}=P("modal","could not obtain modal reference from <AGHeadlessModalPanel>, did you render this component manually? Show it using $ui.openModal() instead"),s=t.computed((()=>r.properties.inline?"div":n.DialogPanel)),a=t.computed((()=>oe.modals[o]??null));return(e,r)=>(t.openBlock(),t.createBlock(t.resolveDynamicComponent(s.value),null,{default:t.withCtx((()=>[t.renderSlot(e.$slots,"default"),a.value?(t.openBlock(),t.createElementBlock(t.Fragment,{key:0},[t.createElementVNode("div",{class:t.normalizeClass(["pointer-events-none inset-0 z-50 bg-black/30",a.value.properties.inline?"absolute":"fixed"])},null,2),t.createVNode(Ee,{"child-index":t.unref(o)+1,modal:a.value},null,8,["child-index","modal"])],64)):t.createCommentVNode("v-if",!0)])),_:3}))}});Be.__file="src/components/headless/modals/AGHeadlessModalPanel.vue";var Ge=t.defineComponent({__name:"AGHeadlessModalTitle",props:{as:R("h2")},setup(e){const r=e,{modal:o}=P("modal","could not obtain modal reference from <AGHeadlessModalPanel>, did you render this component manually? Show it using $ui.openModal() instead"),s=t.computed((()=>o.properties.inline?"div":n.DialogTitle)),a=t.computed((()=>o.properties.inline?{}:{as:r.as}));return(e,r)=>(t.openBlock(),t.createBlock(t.resolveDynamicComponent(s.value),t.normalizeProps(t.guardReactiveProps(a.value)),{default:t.withCtx((()=>[t.renderSlot(e.$slots,"default")])),_:3},16))}});function je(e){let t=l.marked(e,{mangle:!1,headerIds:!1,renderer:o.tap(new l.Renderer,(e=>{e.link=function(e,t,r){return l.Renderer.prototype.link.apply(this,[e,t,r]).replace("<a",'<a target="_blank"')}}))});return t=function(e){return d.default.sanitize(e,{ADD_ATTR:["target"]})}(t),t=function(e){const t=o.stringMatchAll(e,/<a[^>]*href="#action:([^"]+)"[^>]*>([^<]+)<\/a>/g);for(const[r,o,s]of t)e=e.replace(r,`<button type="button" data-markdown-action="${o}">${s}</button>`);return e}(t),t}Ge.__file="src/components/headless/modals/AGHeadlessModalTitle.vue";var Me=t.defineComponent({__name:"AGMarkdown",props:{as:R(),inline:E(),langKey:R(),langParams:V(),text:R(),actions:N()},setup(e){const r=e,s=t.useAttrs(),n=t.computed((()=>r.text??(r.langKey&&le(r.langKey,r.langParams??{})))),a=t.computed((()=>{if(!n.value)return null;let e=je(n.value);return r.inline&&(e=e.replace("<p>","<span>").replace("</p>","</span>")),e})),l=()=>t.h(r.as??(r.inline?"span":"div"),{innerHTML:a.value,onClick:i,...s,class:`${s.class??""} ${r.inline?"":"prose"}`});async function i(e){const{target:t}=e;o.isInstanceOf(t,HTMLElement)&&t.dataset.markdownAction&&r.actions?.[t.dataset.markdownAction]?.()}return(e,r)=>(t.openBlock(),t.createBlock(l))}});Me.__file="src/components/lib/AGMarkdown.vue";const Pe={class:"fixed inset-0 flex items-center justify-center p-8"};var Ve=t.defineComponent({inheritAttrs:!1,__name:"AGModal",props:Ce(),setup(e,{expose:r}){const o=e,s=t.ref();return r(Se(s)),(e,r)=>(t.openBlock(),t.createBlock(Ae,t.mergeProps({ref_key:"$modal",ref:s},o,{class:"relative z-50"}),{default:t.withCtx((({close:r})=>[t.createElementVNode("div",Pe,[t.createVNode(Be,{class:"flex max-h-full max-w-full flex-col overflow-hidden bg-white p-4"},{default:t.withCtx((()=>[e.title?(t.openBlock(),t.createBlock(Ge,{key:0,class:"mb-2 text-lg font-semibold"},{default:t.withCtx((()=>[t.createVNode(Me,{text:e.title,inline:""},null,8,["text"])])),_:1})):t.createCommentVNode("v-if",!0),t.createElementVNode("div",t.mergeProps({class:"flex max-h-full flex-col overflow-auto"},e.$attrs),[t.renderSlot(e.$slots,"default",{close:r})],16)])),_:2},1024)])])),_:3},16))}});Ve.__file="src/components/modals/AGModal.vue";const $e={title:R(),message:I()};function Ne(){return $e}var qe=t.defineComponent({__name:"AGAlertModal",props:Ne(),setup:e=>(e,r)=>(t.openBlock(),t.createBlock(Ve,{title:e.title},{default:t.withCtx((()=>[t.createVNode(Me,{text:e.message},null,8,["text"])])),_:1},8,["title"]))});qe.__file="src/components/modals/AGAlertModal.vue";const Le={title:R(),message:I(),acceptText:R(),acceptColor:j(ue,ue.Primary),cancelText:R(),cancelColor:j(ue,ue.Clear),checkboxes:N(),actions:N(),required:E(!1)};function He(){return Le}function Te(e){return{renderedAcceptText:t.computed((()=>e.acceptText??ie("ui.accept","Ok"))),renderedCancelText:t.computed((()=>e.cancelText??ie("ui.cancel","Cancel")))}}function Ie(e){return e instanceof HTMLElement?e:Re(e)?e.$el:void 0}function Re(e){return o.isObject(e)&&"$el"in e}function De(){return t.customRef(((e,t)=>{let r;return{get:()=>(e(),r),set(e){r=Ie(e),t()}}}))}var Oe=t.defineComponent({__name:"AGHeadlessButton",props:{as:N(),href:R(),url:R(),route:R(),routeParams:N((()=>({}))),routeQuery:N((()=>({}))),submit:E()},setup(e,{expose:r}){const s=e,n=De(),a=t.computed((()=>s.as?{as:s.as,props:{}}:s.route?{as:"router-link",props:{to:o.objectWithoutEmpty({name:s.route,params:s.routeParams,query:s.routeQuery})}}:s.href||s.url?{as:"a",props:{target:"_blank",href:s.href||s.url}}:{as:"button",props:{type:s.submit?"submit":"button"}}));return r({$el:n}),(e,r)=>(t.openBlock(),t.createBlock(t.resolveDynamicComponent(a.value.as),t.mergeProps({ref_key:"$root",ref:n},a.value.props),{default:t.withCtx((()=>[t.renderSlot(e.$slots,"default")])),_:3},16))}});Oe.__file="src/components/headless/forms/AGHeadlessButton.vue";var Fe=t.defineComponent({__name:"AGButton",props:{color:j(ue,ue.Primary)},setup(e){const r=e,o=t.computed((()=>{switch(r.color){case ue.Secondary:return["text-white bg-gray-600","hover:bg-gray-500","focus-visible:outline-offset-2 focus-visible:outline-gray-600"].join(" ");case ue.Clear:return"hover:bg-gray-500/20 focus-visible:outline-gray-500/60";case ue.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,r)=>(t.openBlock(),t.createBlock(Oe,{class:t.normalizeClass(["px-2.5 py-1.5 focus-visible:outline focus-visible:outline-2",o.value])},{default:t.withCtx((()=>[t.renderSlot(e.$slots,"default")])),_:3},8,["class"]))}});Fe.__file="src/components/forms/AGButton.vue";const ze={class:"mt-2 flex flex-row-reverse gap-2"};var Ue=t.defineComponent({__name:"AGConfirmModal",props:He(),setup(e){const r=e,{renderedAcceptText:o,renderedCancelText:s}=Te(r);return(e,r)=>(t.openBlock(),t.createBlock(Ve,{cancellable:!1,title:e.title},{default:t.withCtx((({close:r})=>[t.createVNode(Me,{text:e.message,actions:e.actions},null,8,["text","actions"]),t.createElementVNode("div",ze,[t.createVNode(Fe,{color:e.acceptColor,onClick:e=>r(!0)},{default:t.withCtx((()=>[t.createTextVNode(t.toDisplayString(t.unref(o)),1)])),_:2},1032,["color","onClick"]),e.required?t.createCommentVNode("v-if",!0):(t.openBlock(),t.createBlock(Fe,{key:0,color:e.cancelColor,onClick:e=>r()},{default:t.withCtx((()=>[t.createTextVNode(t.toDisplayString(t.unref(s)),1)])),_:2},1032,["color","onClick"]))])])),_:1},8,["title"]))}});Ue.__file="src/components/modals/AGConfirmModal.vue";const We={viewBox:"0 0 20 20",width:"1.2em",height:"1.2em"},Je=[t.createElementVNode("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 Ke={name:"zondicons-cheveron-right",render:function(e,r){return t.openBlock(),t.createElementBlock("svg",We,[...Je])}};const Qe={viewBox:"0 0 20 20",width:"1.2em",height:"1.2em"},Ze=[t.createElementVNode("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 Xe={name:"zondicons-cheveron-left",render:function(e,r){return t.openBlock(),t.createElementBlock("svg",Qe,[...Ze])}};const Ye={reports:q()};function et(){return Ye}function tt(e){const r=t.ref(0),o=t.computed((()=>e.reports[r.value])),s=t.computed((()=>o.value.details?.trim()||ie("errors.detailsEmpty","This error is missing a stacktrace."))),n=ie("errors.previousReport","Show previous report"),a=ie("errors.nextReport","Show next report");return{activeReportIndex:r,details:s,nextReportText:a,previousReportText:n,report:o}}const rt={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},ot=[t.createElementVNode("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 st={name:"mdi-console",render:function(e,r){return t.openBlock(),t.createElementBlock("svg",rt,[...ot])}};const nt={viewBox:"0 0 20 20",width:"1.2em",height:"1.2em"},at=[t.createElementVNode("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 lt={name:"zondicons-copy",render:function(e,r){return t.openBlock(),t.createElementBlock("svg",nt,[...at])}};const it={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},ct=[t.createElementVNode("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 ut={name:"mdi-github",render:function(e,r){return t.openBlock(),t.createElementBlock("svg",it,[...ct])}};const dt={class:"flex"};var pt=t.defineComponent({__name:"AGErrorReportModalButtons",props:{report:T()},setup(e){const r=e,s=t.computed((()=>r.report.description?`${r.report.title}: ${r.report.description}`:r.report.title)),n=t.computed((()=>{if(!w.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:","```",o.stringExcerpt(r.report.details??"Details missing from report",1800-e.length-w.sourceUrl.length).trim(),"```"].join("\n"));return`${w.sourceUrl}/issues/new?title=${e}&body=${t}`})),a=t.computed((()=>o.tap([{id:"clipboard",description:"Copy to clipboard",iconComponent:lt,async handler(){await navigator.clipboard.writeText(`${s.value}\n\n${r.report.details}`),oe.showSnackbar(ie("errors.copiedToClipboard","Debug information copied to clipboard"))}},{id:"console",description:"Log to console",iconComponent:st,handler(){const e=r.report.error??r.report;window.error=e,console.error(e),oe.showSnackbar(ie("errors.addedToConsole","You can now use the **error** variable in the console"))}}],(e=>{n.value&&e.push({id:"github",description:"Report in GitHub",iconComponent:ut,url:n.value})}))));return(e,r)=>(t.openBlock(),t.createElementBlock("div",dt,[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(a.value,((r,o)=>t.renderSlot(e.$slots,"default",t.mergeProps(r,{key:o}),(()=>[t.createVNode(Fe,{color:"clear",url:r.url,title:e.$td(`errors.report_${r.id}`,r.description),"aria-label":e.$td(`errors.report_${r.id}`,r.description),onClick:r.handler},{default:t.withCtx((()=>[(t.openBlock(),t.createBlock(t.resolveDynamicComponent(r.iconComponent),{class:"h-4 w-4","aria-hidden":"true"}))])),_:2},1032,["url","title","aria-label","onClick"])])))),128))]))}});pt.__file="src/components/modals/AGErrorReportModalButtons.vue";var mt=t.defineComponent({__name:"AGErrorReportModalTitle",props:{report:T(),currentReport:$(),totalReports:$()},setup(e){const r=e,o=t.computed((()=>!r.totalReports||r.totalReports<=1?r.report.title:`${r.report.title} (${r.currentReport}/${r.totalReports})`));return(e,r)=>(t.openBlock(),t.createBlock(Me,{text:o.value,inline:""},null,8,["text"]))}});mt.__file="src/components/modals/AGErrorReportModalTitle.vue";const ft={class:"flex items-center justify-between text-lg font-medium"},ht={class:"flex items-center"},vt=["textContent"];var gt=t.defineComponent({__name:"AGErrorReportModal",props:et(),setup(e){const r=e,{activeReportIndex:o,details:s,nextReportText:n,previousReportText:a,report:l}=tt(r);return(e,r)=>(t.openBlock(),t.createBlock(Ve,null,{default:t.withCtx((()=>[t.createElementVNode("div",null,[t.createElementVNode("h2",ft,[t.createElementVNode("div",ht,[t.createVNode(mt,{report:t.unref(l),"current-report":t.unref(o)+1,"total-reports":e.reports.length},null,8,["report","current-report","total-reports"]),e.reports.length>1?(t.openBlock(),t.createElementBlock(t.Fragment,{key:0},[t.createVNode(Fe,{color:"clear",disabled:0===t.unref(o),title:t.unref(a),"aria-label":t.unref(a),onClick:r[0]||(r[0]=e=>o.value--)},{default:t.withCtx((()=>[t.createVNode(t.unref(Xe),{"aria-hidden":"true",class:"h-4 w-4"})])),_:1},8,["disabled","title","aria-label"]),t.createVNode(Fe,{color:"clear",disabled:t.unref(o)===e.reports.length-1,title:t.unref(n),"aria-label":t.unref(n),onClick:r[1]||(r[1]=e=>o.value++)},{default:t.withCtx((()=>[t.createVNode(t.unref(Ke),{"aria-hidden":"true",class:"h-4 w-4"})])),_:1},8,["disabled","title","aria-label"])],64)):t.createCommentVNode("v-if",!0)]),t.createVNode(pt,{report:t.unref(l)},null,8,["report"])]),t.unref(l).description?(t.openBlock(),t.createBlock(Me,{key:0,text:t.unref(l).description,class:"mt-2"},null,8,["text"])):t.createCommentVNode("v-if",!0)]),t.createElementVNode("pre",{class:"h-full overflow-auto bg-gray-200 p-4 text-xs text-red-900",textContent:t.toDisplayString(t.unref(s))},null,8,vt)])),_:1}))}});gt.__file="src/components/modals/AGErrorReportModal.vue";const xt={title:R(),message:R(),progress:$()};function bt(){return xt}function yt(e){return{renderedMessage:t.computed((()=>e.message??ie("ui.loading","Loading..."))),showProgress:t.computed((()=>"number"==typeof e.progress))}}var _t=t.defineComponent({__name:"AGLoadingModal",props:bt(),setup(e){const r=e,{renderedMessage:o}=yt(r);return(e,r)=>(t.openBlock(),t.createBlock(Ve,{cancellable:!1},{default:t.withCtx((()=>[t.createVNode(Me,{text:t.unref(o)},null,8,["text"])])),_:1}))}});_t.__file="src/components/modals/AGLoadingModal.vue";const kt={title:R(),message:I(),label:R(),defaultValue:R(),placeholder:R(),acceptText:R(),acceptColor:j(ue,ue.Primary),cancelText:R(),cancelColor:j(ue,ue.Clear)};function wt(){return kt}function Ct(e){return{renderedAcceptText:t.computed((()=>e.acceptText??ie("ui.accept","Ok"))),renderedCancelText:t.computed((()=>e.cancelText??ie("ui.cancel","Cancel")))}}var St=t.defineComponent({__name:"AGForm",props:{form:N()},emits:["submit"],setup(e,{emit:r}){let o;const s=e,n=r;return t.watchEffect((e=>{o?.(),o=s.form?.on("submit",(()=>n("submit"))),e((()=>o?.()))})),t.provide("form",s.form),(r,o)=>(t.openBlock(),t.createElementBlock("form",{onSubmit:o[0]||(o[0]=t.withModifiers((t=>e.form?.submit()),["prevent"]))},[t.renderSlot(r.$slots,"default")],32))}});St.__file="src/components/forms/AGForm.vue";const At={name:R(),label:R(),description:R(),modelValue:V([String,Number,Boolean])};function Et(){return At}var Bt=t.defineComponent({__name:"AGHeadlessInput",props:{as:R("div"),...Et()},emits:["update:modelValue"],setup(e,{expose:r,emit:s}){const n=s,a=e,l=t.ref(),i=t.computed((()=>c&&a.name?c.errors[a.name]??null:null)),c=t.inject("form",null),u={$el:l,id:`input-${o.uuid()}`,name:t.computed((()=>a.name)),label:t.computed((()=>a.label)),description:t.computed((()=>a.description)),value:t.computed((()=>c&&a.name?c.getFieldValue(a.name):a.modelValue)),errors:t.readonly(i),required:t.computed((()=>a.name&&c?c.getFieldRules(a.name).includes("required"):null)),update(e){c&&a.name?c.setFieldValue(a.name,e):n("update:modelValue",e)},__setElement(e){l.value=e}};return t.provide("input",u),r(u),(r,o)=>e.as?(t.openBlock(),t.createBlock(t.resolveDynamicComponent(e.as),{key:0},{default:t.withCtx((()=>[t.renderSlot(r.$slots,"default")])),_:3})):t.renderSlot(r.$slots,"default",{key:1})}});Bt.__file="src/components/headless/forms/AGHeadlessInput.vue";var Gt=t.defineComponent({inheritAttrs:!1,__name:"AGHeadlessInputDescription",setup(e){const r=P("input","<AGHeadlessInputDescription> must be a child of a <AGHeadlessInput>"),o=t.computed((()=>"string"==typeof r.description?r.description:"")),s=t.computed((()=>!!r.description));return(e,n)=>t.renderSlot(e.$slots,"default",{id:`${t.unref(r).id}-description`},(()=>[s.value?(t.openBlock(),t.createBlock(Me,t.mergeProps({key:0},e.$attrs,{id:`${t.unref(r).id}-description`,text:o.value}),null,16,["id","text"])):t.createCommentVNode("v-if",!0)]))}});Gt.__file="src/components/headless/forms/AGHeadlessInputDescription.vue";const jt=["id"];var Mt=t.defineComponent({__name:"AGHeadlessInputError",setup(e){const r=P("input","<AGHeadlessInputError> must be a child of a <AGHeadlessInput>"),o=t.computed((()=>r.errors?ie(`errors.${r.errors[0]}`,`Error: ${r.errors[0]}`):null));return(e,s)=>o.value?(t.openBlock(),t.createElementBlock("p",{key:0,id:`${t.unref(r).id}-error`},t.toDisplayString(o.value),9,jt)):t.createCommentVNode("v-if",!0)}});function Pt(e,r){const o=t.inject("form",null),s=o?.on("focus",(t=>e.name===t&&r()));t.onUnmounted((()=>s?.()))}Mt.__file="src/components/headless/forms/AGHeadlessInputError.vue";const Vt=["id","name","type","required","aria-invalid","aria-describedby","checked"];var $t=t.defineComponent({__name:"AGHeadlessInputInput",props:{type:R("text")},setup(e){const r=e,o=t.ref(),s=P("input","<AGHeadlessInputInput> must be a child of a <AGHeadlessInput>"),n=t.computed((()=>s.name??void 0)),a=t.computed((()=>s.value)),l=t.computed((()=>{if("checkbox"===r.type)return!!a.value}));function i(){o.value&&s.update(function(){if(!o.value)return null;switch(r.type){case"checkbox":return o.value.checked;case"date":return o.value.valueAsDate;default:return o.value.value}}())}return Pt(s,(()=>o.value?.focus())),t.watchEffect((()=>s.__setElement(o.value))),t.watchEffect((()=>{o.value&&("date"!==r.type?o.value.value=a.value:o.value.valueAsDate=a.value)})),(r,a)=>(t.openBlock(),t.createElementBlock("input",{id:t.unref(s).id,ref_key:"$input",ref:o,name:n.value,type:e.type,required:t.unref(s).required??void 0,"aria-invalid":t.unref(s).errors?"true":"false","aria-describedby":t.unref(s).errors?`${t.unref(s).id}-error`:t.unref(s).description?`${t.unref(s).id}-description`:void 0,checked:l.value,onInput:i},null,40,Vt))}});$t.__file="src/components/headless/forms/AGHeadlessInputInput.vue";const Nt=["for"];var qt=t.defineComponent({__name:"AGHeadlessInputLabel",setup(e){const r=P("input","<AGHeadlessInputLabel> must be a child of a <AGHeadlessInput>"),o=t.useSlots(),s=t.computed((()=>!(!r.label&&!o.default)));return(e,o)=>s.value?(t.openBlock(),t.createElementBlock("label",{key:0,for:t.unref(r).id},[t.renderSlot(e.$slots,"default",{},(()=>[t.createTextVNode(t.toDisplayString(t.unref(r).label),1)]))],8,Nt)):t.createCommentVNode("v-if",!0)}});qt.__file="src/components/headless/forms/AGHeadlessInputLabel.vue";const Lt={class:"absolute bottom-0 left-0 translate-y-full"};var Ht=t.defineComponent({inheritAttrs:!1,__name:"AGInput",props:Et(),setup(e){const r=e,o=B(),[s,n]=_e();return(e,a)=>(t.openBlock(),t.createBlock(Bt,t.mergeProps({ref_key:"$input",ref:o,class:["relative flex flex-col items-center",t.unref(n)]},r),{default:t.withCtx((()=>[t.createVNode(qt,{class:"sr-only"}),t.createVNode($t,t.mergeProps(t.unref(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":t.unref(o)?.errors}]}),null,16,["class"]),t.createVNode(Gt),t.createElementVNode("div",Lt,[t.createVNode(Mt,{class:"mt-1 text-sm text-red-500"})])])),_:1},16,["class"]))}});Ht.__file="src/components/forms/AGInput.vue";const Tt={...{required:e=>e?void 0:"required"}};function It(e,t){const r=Tt[t]?.(e);return r?o.arrayFrom(r):[]}const Rt={String:"string",Number:"number",Boolean:"boolean",Object:"object",Date:"date"},Dt=new WeakMap;class Ot extends o.MagicObject{constructor(e){super(),u.default(this,"errors",void 0),u.default(this,"_fields",void 0),u.default(this,"_data",void 0),u.default(this,"_submitted",void 0),u.default(this,"_errors",void 0),u.default(this,"_listeners",{}),this._fields=e,this._submitted=t.ref(!1),this._data=this.getInitialData(e),this._errors=this.getInitialErrors(e),Dt.set(this,t.computed((()=>!Object.values(this._errors).some((e=>null!==e))))),this.errors=t.readonly(this._errors)}get valid(){return!!Dt.get(this)?.value}get submitted(){return this._submitted.value}setFieldValue(e,t){const r=this._fields[e]??o.fail(`Trying to set undefined '${o.toString(e)}' field`);this._data[e]=r.type===Rt.String&&(r.trim??1)?o.toString(t).trim():t,this._submitted.value&&this.validate()}getFieldValue(e){return this._data[e]}getFieldRules(e){return this._fields[e]?.rules?.split("|")??[]}data(){return{...this._data}}validate(){const e=Object.entries(this._fields).reduce(((e,t)=>{let[r,o]=t;return e[r]=this.getFieldErrors(r,o),e}),{});return this.resetErrors(e),this.valid}reset(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this._submitted.value=!1,e.keepData||this.resetData(),e.keepErrors||this.resetErrors()}submit(){this._submitted.value=!0;const e=this.validate();return e&&this._listeners.submit?.forEach((e=>e())),e}on(e,t){return this._listeners[e]??=[],this._listeners[e]?.push(t),()=>this.off(e,t)}off(e,t){o.arrayRemove(this._listeners[e]??[],t)}async focus(e){await t.nextTick(),this._listeners.focus?.forEach((t=>t(e)))}__get(e){return e in this._fields?this.getFieldValue(e):super.__get(e)}__set(e,t){e in this._fields?this.setFieldValue(e,t):super.__set(e,t)}getFieldErrors(e,t){const r=[],o=this._data[e],s=t.rules?.split("|")??[];for(const e of s)"required"!==e&&null==o||r.push(...It(o,e));return r.length>0?r:null}getInitialData(e){if(this.static().isConjuring())return{};const r=Object.entries(e).reduce(((e,t)=>{let[r,o]=t;return e[r]=o.default??null,e}),{});return t.reactive(r)}getInitialErrors(e){if(this.static().isConjuring())return{};const r=Object.keys(e).reduce(((e,t)=>(e[t]=null,e)),{});return t.reactive(r)}resetData(){for(const[e,t]of Object.entries(this._fields))this._data[e]=t.default??null}resetErrors(e){Object.keys(this._errors).forEach((e=>delete this._errors[e])),e&&Object.assign(this._errors,e)}}function Ft(e){return new Ot(e)}function zt(e){return{default:e,type:Rt.String,rules:"required"}}const Ut={class:"mt-2 flex flex-row-reverse gap-2"};var Wt=t.defineComponent({__name:"AGPromptModal",props:wt(),setup(e){const r=e,o=Ft({draft:zt(r.defaultValue??"")}),{renderedAcceptText:s,renderedCancelText:n}=Ct(r);return(e,r)=>(t.openBlock(),t.createBlock(Ve,{cancellable:!1,title:e.title},{default:t.withCtx((({close:r})=>[t.createVNode(Me,{text:e.message},null,8,["text"]),t.createVNode(St,{form:t.unref(o),onSubmit:e=>r(t.unref(o).draft)},{default:t.withCtx((()=>[t.createVNode(Ht,{name:"draft",placeholder:e.placeholder,label:e.label},null,8,["placeholder","label"]),t.createElementVNode("div",Ut,[t.createVNode(Fe,{color:e.acceptColor,submit:""},{default:t.withCtx((()=>[t.createTextVNode(t.toDisplayString(t.unref(s)),1)])),_:1},8,["color"]),t.createVNode(Fe,{color:e.cancelColor,onClick:e=>r()},{default:t.withCtx((()=>[t.createTextVNode(t.toDisplayString(t.unref(n)),1)])),_:2},1032,["color","onClick"])])])),_:2},1032,["form","onSubmit"])])),_:1},8,["title"]))}});Wt.__file="src/components/modals/AGPromptModal.vue";const Jt={class:"pointer-events-auto"};var Kt=t.defineComponent({__name:"AGHeadlessSnackbar",setup:e=>(e,r)=>(t.openBlock(),t.createElementBlock("div",Jt,[t.renderSlot(e.$slots,"default")]))});Kt.__file="src/components/headless/snackbars/AGHeadlessSnackbar.vue";const Qt=o.objectWithout(ue,["Primary","Clear"]),Zt={id:I(),message:I(),actions:A((()=>[])),color:j(Qt,ue.Secondary)};function Xt(){return Zt}function Yt(e){return{activate:function(t){t.handler?.(),t.dismiss&&oe.hideSnackbar(e.id)}}}var er=t.defineComponent({__name:"AGSnackbar",props:Xt(),setup(e){const r=e,{activate:o}=Yt(r),s=t.computed((()=>r.color===ue.Danger?"bg-red-200 text-red-900":"bg-gray-900 text-white"));return(e,r)=>(t.openBlock(),t.createBlock(Kt,{class:t.normalizeClass(["flex flex-row items-center justify-center gap-3 p-4",s.value])},{default:t.withCtx((()=>[t.createVNode(Me,{text:e.message,inline:""},null,8,["text"]),(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(e.actions,((r,s)=>(t.openBlock(),t.createBlock(Fe,{key:s,color:e.color,onClick:e=>t.unref(o)(r)},{default:t.withCtx((()=>[t.createTextVNode(t.toDisplayString(r.text),1)])),_:2},1032,["color","onClick"])))),128))])),_:1},8,["class"]))}});er.__file="src/components/snackbars/AGSnackbar.vue";const tr={class:"grid flex-grow place-items-center"},rr={class:"flex flex-col items-center space-y-6 p-8"},or={class:"mt-2 text-center text-4xl font-medium text-red-600"},sr={class:"mt-4 flex flex-col space-y-4"};var nr=t.defineComponent({__name:"AGStartupCrash",setup:e=>(e,r)=>(t.openBlock(),t.createElementBlock("div",tr,[t.createElementVNode("div",rr,[t.createElementVNode("h1",or,t.toDisplayString(e.$td("startupCrash.title","Something went wrong!")),1),t.createVNode(Me,{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"]),t.createElementVNode("div",sr,[t.createVNode(Fe,{color:"danger",onClick:r[0]||(r[0]=t=>e.$app.reload())},{default:t.withCtx((()=>[t.createTextVNode(t.toDisplayString(e.$td("startupCrash.reload","Try again")),1)])),_:1}),t.createVNode(Fe,{color:"danger",onClick:r[1]||(r[1]=t=>e.$errors.inspect(e.$errors.startupErrors))},{default:t.withCtx((()=>[t.createTextVNode(t.toDisplayString(e.$td("startupCrash.inspect","View error details")),1)])),_:1})])])]))});nr.__file="src/components/lib/AGStartupCrash.vue";const ar={$ui:oe};var lr={async install(e,t){const r={[te.AlertModal]:qe,[te.ConfirmModal]:Ue,[te.ErrorReportModal]:gt,[te.LoadingModal]:_t,[te.PromptModal]:Wt,[te.Snackbar]:er,[te.StartupCrash]:nr};Object.entries({...r,...t.components}).forEach((e=>{let[t,r]=e;return oe.registerComponent(t,r)})),await Q(e,ar)}};async function ir(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r=[be,z,ve,xe,Z,lr,...t.plugins??[]];w.instance=e,await S(r,e,t),await(t.install?.(e)),await y.emit("application-ready")}const cr={key:0};var ur=t.defineComponent({__name:"AGAppModals",setup(e){const r=t.computed((()=>oe.modals[0]??null));return(e,o)=>r.value?(t.openBlock(),t.createElementBlock("aside",cr,[t.createVNode(Ee,{"child-index":1,modal:r.value},null,8,["modal"])])):t.createCommentVNode("v-if",!0)}});ur.__file="src/components/AGAppModals.vue";const dr={"aria-live":"assertive",class:"pointer-events-none fixed inset-0 z-50 flex items-end px-4 py-6 sm:p-6"},pr={class:"flex w-full flex-col items-end space-y-4"};const mr={render:function(e,r){return t.openBlock(),t.createElementBlock("div",dr,[t.createElementVNode("div",pr,[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(e.$ui.snackbars,(e=>(t.openBlock(),t.createBlock(t.resolveDynamicComponent(e.component),t.mergeProps({id:e.id,key:e.id},e.properties),null,16,["id"])))),128))])])},__file:"src/components/AGAppSnackbars.vue"};var fr=mr,hr=t.defineComponent({__name:"AGAppOverlays",setup(e){const r=t.ref(null),o=t.ref(!0);return ye("show-overlays-backdrop",(async()=>{r.value&&o.value&&(o.value=!1,r.value.classList.remove("opacity-0"))})),ye("hide-overlays-backdrop",(async()=>{r.value&&!o.value&&(o.value=!0,r.value.classList.add("opacity-0"))})),(e,o)=>(t.openBlock(),t.createElementBlock(t.Fragment,null,[t.createElementVNode("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),t.createVNode(ur),t.createVNode(fr)],64))}});hr.__file="src/components/AGAppOverlays.vue";const vr={class:"flex min-h-full flex-col text-base font-normal leading-tight text-gray-900 antialiased"};var gr=t.defineComponent({__name:"AGAppLayout",setup:e=>(e,r)=>(t.openBlock(),t.createElementBlock("div",vr,[e.$errors.hasStartupErrors?t.renderSlot(e.$slots,"startup-crash",{key:0},(()=>[(t.openBlock(),t.createBlock(t.resolveDynamicComponent(e.$ui.requireComponent(t.unref(te).StartupCrash))))])):t.renderSlot(e.$slots,"default",{key:1}),t.createVNode(hr)]))});gr.__file="src/components/AGAppLayout.vue";const xr={class:"ml-2"};var br=t.defineComponent({inheritAttrs:!1,__name:"AGCheckbox",props:{name:R()},emits:["update:modelValue"],setup(e){const r=B();return(o,s)=>(t.openBlock(),t.createBlock(Bt,{ref_key:"$input",ref:r,name:e.name,class:"flex","onUpdate:modelValue":s[0]||(s[0]=e=>o.$emit("update:modelValue",e))},{default:t.withCtx((()=>[t.createVNode($t,t.mergeProps(o.$attrs,{type:"checkbox",class:{"text-indigo-600 focus:ring-indigo-600":!t.unref(r)?.errors,"border-red-200 text-red-600 focus:ring-red-600":t.unref(r)?.errors}}),null,16,["class"]),t.createElementVNode("div",xr,[o.$slots.default?(t.openBlock(),t.createBlock(qt,{key:0},{default:t.withCtx((()=>[t.renderSlot(o.$slots,"default")])),_:3})):t.createCommentVNode("v-if",!0),t.createVNode(Mt,{class:"text-sm text-red-600"})])])),_:3},8,["name"]))}});br.__file="src/components/forms/AGCheckbox.vue";const yr={viewBox:"0 0 20 20",width:"1.2em",height:"1.2em"},_r=[t.createElementVNode("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 kr={name:"zondicons-cheveron-down",render:function(e,r){return t.openBlock(),t.createElementBlock("svg",yr,[..._r])}};const wr={name:R(),label:R(),options:q(),noSelectionText:R(),optionsText:V()},Cr=["update:modelValue"];function Sr(){return wr}function Ar(){return[...Cr]}var Er=t.defineComponent({__name:"AGHeadlessSelect",props:{modelValue:V(),...Sr()},emits:Ar(),setup(e,{expose:r,emit:s}){const a=s,l=e,i=t.computed((()=>"function"==typeof l.optionsText?l.optionsText:"string"==typeof l.optionsText?e=>o.toString(e[l.optionsText]):e=>o.toString(e))),c=t.inject("form",null),u=t.computed((()=>l.noSelectionText??ie("select.noSelection","-"))),d=t.computed((()=>c&&l.name?c.getFieldValue(l.name):l.modelValue)),p=t.computed((()=>c&&l.name?c.errors[l.name]??null:null));function m(e){c&&l.name?c.setFieldValue(l.name,e):a("update:modelValue",e)}const f={id:`select-${o.uuid()}`,noSelectionText:u,selectedOption:d,errors:p,options:t.computed((()=>l.options)),label:t.computed((()=>l.label)),buttonText:t.computed((()=>null===d.value?u.value:i.value(d.value))),renderText:i,update:m};return t.provide("select",f),r(f),(e,r)=>(t.openBlock(),t.createBlock(t.unref(n.Listbox),{"model-value":d.value,"onUpdate:modelValue":r[0]||(r[0]=e=>m(e))},{default:t.withCtx((({value:r,open:o,disabled:s})=>[t.renderSlot(e.$slots,"default",{value:r,open:o,disabled:s})])),_:3},8,["model-value"]))}});Er.__file="src/components/headless/forms/AGHeadlessSelect.vue";var Br=t.defineComponent({__name:"AGHeadlessSelectButton",props:{textClass:R()},setup(e){const r=P("select","<AGHeadlessSelectButton> must be a child of a <AGHeadlessSelect>");return(o,s)=>(t.openBlock(),t.createBlock(t.unref(n.ListboxButton),null,{default:t.withCtx((({value:s,open:n,disabled:a})=>[t.renderSlot(o.$slots,"default",{value:s,open:n,disabled:a},(()=>[t.createElementVNode("span",{class:t.normalizeClass(e.textClass)},t.toDisplayString(t.unref(r)?.buttonText),3)])),t.renderSlot(o.$slots,"icon")])),_:3}))}});Br.__file="src/components/headless/forms/AGHeadlessSelectButton.vue";const Gr=["id"];var jr=t.defineComponent({__name:"AGHeadlessSelectError",setup(e){const r=P("select","<AGHeadlessSelectError> must be a child of a <AGHeadlessSelect>"),o=t.computed((()=>r.errors?ie(`errors.${r.errors[0]}`,`Error: ${r.errors[0]}`):null));return(e,s)=>o.value?(t.openBlock(),t.createElementBlock("p",{key:0,id:`${t.unref(r).id}-error`},t.toDisplayString(o.value),9,Gr)):t.createCommentVNode("v-if",!0)}});jr.__file="src/components/headless/forms/AGHeadlessSelectError.vue";var Mr=t.defineComponent({__name:"AGHeadlessSelectLabel",setup(e){const r=P("select","<AGHeadlessSelectLabel> must be a child of a <AGHeadlessSelect>"),o=t.useSlots(),s=t.computed((()=>!(!r.label&&!o.default)));return(e,o)=>s.value?(t.openBlock(),t.createBlock(t.unref(n.ListboxLabel),{key:0},{default:t.withCtx((({open:o,disabled:s})=>[t.renderSlot(e.$slots,"default",{open:o,disabled:s},(()=>[t.createTextVNode(t.toDisplayString(t.unref(r).label),1)]))])),_:3})):t.createCommentVNode("v-if",!0)}});Mr.__file="src/components/headless/forms/AGHeadlessSelectLabel.vue";var Pr=t.defineComponent({__name:"AGHeadlessSelectOption",props:{value:L(),selectedClass:R(),unselectedClass:R(),activeClass:R(),inactiveClass:R()},setup(e){const r=P("select","<AGHeadlessSelectOption> must be a child of a <AGHeadlessSelect>");return(o,s)=>(t.openBlock(),t.createBlock(t.unref(n.ListboxOption),{value:e.value,as:"template"},{default:t.withCtx((({active:s,selected:n,disabled:a})=>[t.renderSlot(o.$slots,"default",{active:s,selected:n,disabled:a},(()=>[t.createElementVNode("li",{class:t.normalizeClass({[e.activeClass??"active"]:s,[e.inactiveClass??"inactive"]:!s,[e.selectedClass??"selected"]:n,[e.unselectedClass??"unselected"]:!n})},t.toDisplayString(t.unref(r).renderText(e.value)),3)]))])),_:3},8,["value"]))}});Pr.__file="src/components/headless/forms/AGHeadlessSelectOption.vue";const Vr={class:"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2"};var $r=t.defineComponent({__name:"AGSelect",props:Sr(),emits:Ar(),setup(e){const r=e,o=B();return(e,s)=>(t.openBlock(),t.createBlock(Er,t.mergeProps(r,{ref_key:"$select",ref:o,as:"div","onUpdate:modelValue":s[0]||(s[0]=t=>e.$emit("update:modelValue",t))}),{default:t.withCtx((()=>[t.createVNode(Mr,{class:"block text-sm font-medium leading-6 text-gray-900"}),t.createElementVNode("div",{class:t.normalizeClass(["relative",{"mt-2":t.unref(o)?.label}])},[t.createVNode(Br,{class:t.normalizeClass(["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":t.unref(o)?.errors}]),"text-class":"block truncate"},{icon:t.withCtx((()=>[t.createElementVNode("span",Vr,[t.createVNode(t.unref(kr),{class:"h-5 w-5 text-gray-400"})])])),_:1},8,["class"]),t.createVNode(t.unref(n.ListboxOptions),{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:t.withCtx((()=>[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(t.unref(o)?.options??[],((e,r)=>(t.openBlock(),t.createBlock(Pr,{key:r,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),t.createVNode(jr,{class:"mt-2 text-sm text-red-600"})])),_:1},16))}});$r.__file="src/components/forms/AGSelect.vue";const Nr=["id","name","required","value","aria-invalid","aria-describedby"];var qr=t.defineComponent({__name:"AGHeadlessInputTextArea",setup(e){const r=t.ref(),o=P("input","<AGHeadlessInputTextArea> must be a child of a <AGHeadlessInput>"),s=t.computed((()=>o.name??void 0)),n=t.computed((()=>o.value));function a(){r.value&&o.update(r.value.value)}return t.watchEffect((()=>o.__setElement(r.value))),Pt(o,(()=>r.value?.focus())),(e,l)=>(t.openBlock(),t.createElementBlock("textarea",{id:t.unref(o).id,ref_key:"$textArea",ref:r,name:s.value,required:t.unref(o).required??void 0,value:n.value,"aria-invalid":t.unref(o).errors?"true":"false","aria-describedby":t.unref(o).errors?`${t.unref(o).id}-error`:t.unref(o).description?`${t.unref(o).id}-description`:void 0,onInput:a},null,40,Nr))}});qr.__file="src/components/headless/forms/AGHeadlessInputTextArea.vue";var Lr=t.defineComponent({__name:"AGErrorMessage",props:{error:T()},setup(e){const r=e,o=t.computed((()=>me(r.error)));return(e,r)=>(t.openBlock(),t.createBlock(Me,{text:o.value,inline:""},null,8,["text"]))}});Lr.__file="src/components/lib/AGErrorMessage.vue";var Hr=t.defineComponent({__name:"AGLink",setup:e=>(e,r)=>(t.openBlock(),t.createBlock(Oe,{class:"font-medium hover:underline"},{default:t.withCtx((()=>[t.renderSlot(e.$slots,"default")])),_:3}))});Hr.__file="src/components/lib/AGLink.vue";var Tr=t.defineComponent({__name:"AGMeasured",props:{as:R("span")},setup(e){const r=t.ref(!1);return(o,s)=>{const n=t.resolveDirective("measure");return t.withDirectives((t.openBlock(),t.createBlock(t.resolveDynamicComponent(e.as),{class:t.normalizeClass({"!invisible !absolute !w-auto":!r.value})},{default:t.withCtx((()=>[t.renderSlot(o.$slots,"default")])),_:3},8,["class"])),[[n,()=>r.value=!0]])}}});Tr.__file="src/components/lib/AGMeasured.vue";const Ir={class:"mt-1 h-2 w-full min-w-[min(400px,80vw)] overflow-hidden rounded-full bg-gray-200"},Rr={class:"sr-only"};var Dr=t.defineComponent({__name:"AGProgressBar",props:{progress:H(),barClass:R("")},setup(e){const r=e,o=t.computed((()=>{const e=r.barClass??"";return`h-full w-full transition-transform duration-500 ease-linear ${e.includes("bg-")?e:`${e} bg-gray-700`}`}));return(r,s)=>(t.openBlock(),t.createElementBlock("div",Ir,[t.createElementVNode("div",{class:t.normalizeClass(o.value),style:t.normalizeStyle(`transform:translateX(-${100*(1-e.progress)}%)`)},null,6),t.createElementVNode("span",Rr,t.toDisplayString(r.$td("ui.progress","{progress}% complete",{progress:100*e.progress})),1)]))}});Dr.__file="src/components/lib/AGProgressBar.vue";var Or=t.defineComponent({__name:"AGModalTitle",setup:e=>(e,r)=>(t.openBlock(),t.createBlock(Ge,{class:"mb-2 font-semibold"},{default:t.withCtx((()=>[t.renderSlot(e.$slots,"default")])),_:3}))});Or.__file="src/components/modals/AGModalTitle.vue";class JobCancelledError extends o.JSError{}Object.defineProperty(exports,"AGHeadlessSelectOptions",{enumerable:!0,get:function(){return n.ListboxOptions}}),exports.AGAlertModal=qe,exports.AGAppLayout=gr,exports.AGAppOverlays=hr,exports.AGButton=Fe,exports.AGCheckbox=br,exports.AGConfirmModal=Ue,exports.AGErrorMessage=Lr,exports.AGErrorReportModalButtons=pt,exports.AGErrorReportModalTitle=mt,exports.AGForm=St,exports.AGHeadlessButton=Oe,exports.AGHeadlessInput=Bt,exports.AGHeadlessInputDescription=Gt,exports.AGHeadlessInputError=Mt,exports.AGHeadlessInputInput=$t,exports.AGHeadlessInputLabel=qt,exports.AGHeadlessInputTextArea=qr,exports.AGHeadlessModal=Ae,exports.AGHeadlessModalPanel=Be,exports.AGHeadlessModalTitle=Ge,exports.AGHeadlessSelect=Er,exports.AGHeadlessSelectButton=Br,exports.AGHeadlessSelectError=jr,exports.AGHeadlessSelectLabel=Mr,exports.AGHeadlessSelectOption=Pr,exports.AGHeadlessSnackbar=Kt,exports.AGInput=Ht,exports.AGLink=Hr,exports.AGLoadingModal=_t,exports.AGMarkdown=Me,exports.AGMeasured=Tr,exports.AGModal=Ve,exports.AGModalContext=Ee,exports.AGModalTitle=Or,exports.AGProgressBar=Dr,exports.AGPromptModal=Wt,exports.AGSelect=$r,exports.AGSnackbar=er,exports.AGStartupCrash=nr,exports.App=w,exports.AppService=k,exports.Cache=W,exports.CacheService=U,exports.Colors=ue,exports.Errors=de,exports.EventListenerPriorities={Low:-256,Default:0,High:256},exports.Events=y,exports.EventsService=b,exports.Form=Ot,exports.FormFieldTypes=Rt,exports.Job=class{constructor(){u.default(this,"status",void 0),u.default(this,"_listeners",void 0),u.default(this,"_progress",void 0),u.default(this,"_cancelled",void 0),u.default(this,"_started",void 0),u.default(this,"_completed",void 0),this.status=this.getInitialStatus(),this._listeners=new o.ListenersManager,this._started=new o.PromisedValue,this._completed=new o.PromisedValue}async start(){this.beforeStart(),this._started.resolve();try{await this.updateProgress(),await this.run(),await this.updateProgress(),this._completed.resolve()}catch(e){if(e instanceof JobCancelledError)return;throw o.tap(o.toError(e),(e=>{this._completed.reject(e)}))}}async cancel(){this._cancelled=new o.PromisedValue,await this._cancelled}serialize(){return this.serializeStatus(this.status)}get listeners(){return this._listeners}get progress(){return this._progress??0}get cancelled(){return!!this._cancelled?.isResolved()}get started(){return this._started}get completed(){return this._completed}getInitialStatus(){return{completed:!1}}beforeStart(){if(this._started.isResolved()){if(this._cancelled)return delete this._progress,void delete this._cancelled;throw new Error("Job already started!")}}assertNotCancelled(){if(this._cancelled)throw this._cancelled.resolve(),new JobCancelledError}calculateCurrentProgress(e){return e??=this.status,e.completed?1:e.children?o.round(e.children.reduce(((e,t)=>e+this.calculateCurrentProgress(t)),0)/e.children.length,2):0}async updateProgress(e){await(e?.(this.status));const t=this.calculateCurrentProgress();t!==this._progress&&(this._progress=t,await this._listeners.emit("onUpdated",t))}serializeStatus(e){return{...e}}},exports.Lang=ae,exports.Layouts=X,exports.MOBILE_BREAKPOINT=768,exports.Service=x,exports.SnackbarColors=Qt,exports.Storage=J,exports.UI=oe,exports.UIComponents=te,exports.UIService=re,exports.alertModalProps=$e,exports.arrayProp=A,exports.booleanInput=function(e){return{default:e,type:Rt.Boolean,rules:(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).rules}},exports.booleanProp=E,exports.bootServices=Q,exports.bootstrap=async function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const o=t.createApp(e);"development"===c.default.environment&&(window.$aerogel=o),await ir(o,r),o.mount("#app"),o._container?.classList.remove("loading"),await y.emit("application-mounted")},exports.bootstrapApplication=ir,exports.componentRef=B,exports.computedAsync=function(e){const r=t.ref(),o=t.computed(e);return t.watch(o,(async()=>r.value=await o.value),{immediate:!0}),r},exports.confirmModalProps=Le,exports.dateInput=function(e){return{default:e,type:Rt.Date,rules:(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).rules}},exports.defineDirective=G,exports.defineFormValidationRule=function(e,t){Tt[e]=t},exports.definePlugin=C,exports.defineServiceState=g,exports.defineServiceStore=v,exports.dispatch=async function(e){await e.start()},exports.elementRef=De,exports.enumProp=j,exports.errorReportModalProps=Ye,exports.extractInputProps=function(e){return ke(e,At)},exports.extractModalProps=function(e){return ke(e,we)},exports.extractSelectProps=function(e){return ke(e,wr)},exports.getCurrentLayout=Y,exports.getElement=Ie,exports.getErrorMessage=me,exports.getPiniaStore=h,exports.hasElement=Re,exports.injectOrFail=function(e,r){return t.inject(e)??o.fail(r??`Could not resolve '${e}' injection key`)},exports.injectReactive=M,exports.injectReactiveOrFail=P,exports.inputProps=At,exports.installPlugins=S,exports.listenerProp=function(){return{type:Function,default:null}},exports.loadingModalProps=xt,exports.mixedProp=V,exports.modalProps=we,exports.numberInput=function(e){return{default:e,type:Rt.Number,rules:(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).rules}},exports.numberProp=$,exports.objectProp=N,exports.onCleanMounted=function(e){let r=o.noop;t.onMounted((()=>r=e())),t.onUnmounted((()=>r()))},exports.onFormFocus=Pt,exports.persistent=function(e,r){const s=t.reactive(o.Storage.get(e)??r);return t.watch(s,(()=>o.Storage.set(e,t.toRaw(s)))),s},exports.promptModalProps=kt,exports.registerErrorHandler=function(e){pe.push(e)},exports.removeInteractiveClasses=function(e){return e.split(/\s+/).filter((e=>!/^(hover|focus|focus-visible):/.test(e))).join(" ").trim()},exports.replaceExisting=function(e,t){return{...e,...o.objectOnly(t,Object.keys(e))}},exports.requiredArrayProp=q,exports.requiredBooleanInput=function(e){return{default:e,type:Rt.Boolean,rules:"required"}},exports.requiredDateInput=function(e){return{default:e,type:Rt.Date,rules:"required"}},exports.requiredEnumProp=function(e){const t=Object.values(e);return{type:String,required:!0,validator:e=>t.includes(e)}},exports.requiredMixedProp=L,exports.requiredNumberInput=function(e){return{default:e,type:Rt.Number,rules:"required"}},exports.requiredNumberProp=H,exports.requiredObjectProp=T,exports.requiredStringInput=zt,exports.requiredStringProp=I,exports.resetPiniaStore=f,exports.selectEmits=Cr,exports.selectProps=wr,exports.snackbarProps=Zt,exports.stringInput=function(e){return{default:e,type:Rt.String,rules:(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).rules}},exports.stringProp=R,exports.translate=le,exports.translateWithDefault=ie,exports.useAlertModalProps=Ne,exports.useConfirmModal=Te,exports.useConfirmModalProps=He,exports.useErrorReportModal=tt,exports.useErrorReportModalProps=et,exports.useEvent=ye,exports.useForm=Ft,exports.useInputAttrs=_e,exports.useInputProps=Et,exports.useLoadingModal=yt,exports.useLoadingModalProps=bt,exports.useModalExpose=Se,exports.useModalProps=Ce,exports.usePromptModal=Ct,exports.usePromptModalProps=wt,exports.useSelectEmits=Ar,exports.useSelectProps=Sr,exports.useSnackbar=Yt,exports.useSnackbarProps=Xt,exports.validate=It,exports.validators=Tt;
2
- //# sourceMappingURL=aerogel-core.cjs.js.map