@aerogel/core 0.0.0-next.f86b4b09f066c4aef21796a37dbc8417b7dce3cd → 0.0.0-next.f8c757d83e1e0d001a2836fa45aba318ec17b9b9

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 (196) hide show
  1. package/dist/aerogel-core.d.ts +1973 -1688
  2. package/dist/aerogel-core.js +3234 -0
  3. package/dist/aerogel-core.js.map +1 -0
  4. package/package.json +30 -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/{AGAppLayout.vue → AppLayout.vue} +4 -4
  9. package/src/components/{AGAppModals.vue → AppModals.vue} +3 -4
  10. package/src/components/{AGAppOverlays.vue → AppOverlays.vue} +5 -10
  11. package/src/components/AppToasts.vue +16 -0
  12. package/src/components/contracts/AlertModal.ts +4 -0
  13. package/src/components/contracts/Button.ts +16 -0
  14. package/src/components/contracts/ConfirmModal.ts +41 -0
  15. package/src/components/contracts/DropdownMenu.ts +18 -0
  16. package/src/components/contracts/ErrorReportModal.ts +29 -0
  17. package/src/components/contracts/Input.ts +26 -0
  18. package/src/components/contracts/LoadingModal.ts +18 -0
  19. package/src/components/contracts/Modal.ts +13 -0
  20. package/src/components/contracts/PromptModal.ts +30 -0
  21. package/src/components/contracts/Select.ts +44 -0
  22. package/src/components/contracts/Toast.ts +13 -0
  23. package/src/components/contracts/index.ts +9 -0
  24. package/src/components/contracts/shared.ts +9 -0
  25. package/src/components/headless/HeadlessButton.vue +51 -0
  26. package/src/components/headless/HeadlessInput.vue +59 -0
  27. package/src/components/headless/{forms/AGHeadlessInputDescription.vue → HeadlessInputDescription.vue} +7 -8
  28. package/src/components/headless/{forms/AGHeadlessInputError.vue → HeadlessInputError.vue} +4 -8
  29. package/src/components/headless/{forms/AGHeadlessInputInput.vue → HeadlessInputInput.vue} +16 -25
  30. package/src/components/headless/{forms/AGHeadlessInputLabel.vue → HeadlessInputLabel.vue} +3 -7
  31. package/src/components/headless/{forms/AGHeadlessInputTextArea.vue → HeadlessInputTextArea.vue} +10 -13
  32. package/src/components/headless/{modals/AGHeadlessModal.vue → HeadlessModal.vue} +18 -18
  33. package/src/components/headless/HeadlessModalContent.vue +24 -0
  34. package/src/components/headless/HeadlessModalDescription.vue +12 -0
  35. package/src/components/headless/HeadlessModalOverlay.vue +12 -0
  36. package/src/components/headless/HeadlessModalTitle.vue +12 -0
  37. package/src/components/headless/HeadlessSelect.vue +113 -0
  38. package/src/components/headless/{forms/AGHeadlessSelectError.vue → HeadlessSelectError.vue} +5 -6
  39. package/src/components/headless/HeadlessSelectLabel.vue +25 -0
  40. package/src/components/headless/HeadlessSelectOption.vue +34 -0
  41. package/src/components/headless/HeadlessSelectOptions.vue +37 -0
  42. package/src/components/headless/HeadlessSelectTrigger.vue +22 -0
  43. package/src/components/headless/HeadlessSelectValue.vue +18 -0
  44. package/src/components/headless/HeadlessToast.vue +18 -0
  45. package/src/components/headless/HeadlessToastAction.vue +13 -0
  46. package/src/components/headless/index.ts +19 -3
  47. package/src/components/index.ts +6 -11
  48. package/src/components/ui/AdvancedOptions.vue +18 -0
  49. package/src/components/ui/AlertModal.vue +13 -0
  50. package/src/components/ui/Button.vue +98 -0
  51. package/src/components/ui/Checkbox.vue +56 -0
  52. package/src/components/ui/ConfirmModal.vue +42 -0
  53. package/src/components/ui/DropdownMenu.vue +27 -0
  54. package/src/components/ui/DropdownMenuOption.vue +14 -0
  55. package/src/components/ui/DropdownMenuOptions.vue +27 -0
  56. package/src/components/ui/EditableContent.vue +82 -0
  57. package/src/components/ui/ErrorMessage.vue +15 -0
  58. package/src/components/ui/ErrorReportModal.vue +62 -0
  59. package/src/components/{modals/AGErrorReportModalButtons.vue → ui/ErrorReportModalButtons.vue} +34 -27
  60. package/src/components/ui/ErrorReportModalTitle.vue +24 -0
  61. package/src/components/{forms/AGForm.vue → ui/Form.vue} +4 -5
  62. package/src/components/ui/Input.vue +56 -0
  63. package/src/components/ui/Link.vue +12 -0
  64. package/src/components/ui/LoadingModal.vue +32 -0
  65. package/src/components/ui/Markdown.vue +69 -0
  66. package/src/components/ui/Modal.vue +75 -0
  67. package/src/components/ui/ModalContext.vue +30 -0
  68. package/src/components/ui/ProgressBar.vue +50 -0
  69. package/src/components/ui/PromptModal.vue +35 -0
  70. package/src/components/ui/Select.vue +25 -0
  71. package/src/components/ui/SelectLabel.vue +17 -0
  72. package/src/components/ui/SelectOption.vue +29 -0
  73. package/src/components/ui/SelectOptions.vue +30 -0
  74. package/src/components/ui/SelectTrigger.vue +29 -0
  75. package/src/components/ui/SettingsModal.vue +15 -0
  76. package/src/components/{lib/AGStartupCrash.vue → ui/StartupCrash.vue} +8 -8
  77. package/src/components/ui/Toast.vue +42 -0
  78. package/src/components/ui/index.ts +30 -0
  79. package/src/directives/index.ts +9 -5
  80. package/src/directives/measure.ts +1 -1
  81. package/src/errors/Errors.state.ts +1 -1
  82. package/src/errors/Errors.ts +17 -18
  83. package/src/errors/JobCancelledError.ts +3 -0
  84. package/src/errors/index.ts +9 -6
  85. package/src/errors/utils.ts +1 -1
  86. package/src/forms/{Form.test.ts → FormController.test.ts} +5 -4
  87. package/src/forms/{Form.ts → FormController.ts} +22 -19
  88. package/src/forms/composition.ts +4 -4
  89. package/src/forms/index.ts +2 -2
  90. package/src/forms/utils.ts +2 -2
  91. package/src/index.css +46 -0
  92. package/src/jobs/Job.ts +144 -2
  93. package/src/jobs/index.ts +4 -1
  94. package/src/jobs/listeners.ts +3 -0
  95. package/src/jobs/status.ts +4 -0
  96. package/src/lang/DefaultLangProvider.ts +7 -4
  97. package/src/lang/Lang.state.ts +1 -1
  98. package/src/lang/Lang.ts +1 -1
  99. package/src/lang/index.ts +11 -6
  100. package/src/lang/settings/Language.vue +48 -0
  101. package/src/lang/settings/index.ts +10 -0
  102. package/src/plugins/Plugin.ts +1 -1
  103. package/src/plugins/index.ts +10 -7
  104. package/src/services/App.state.ts +21 -5
  105. package/src/services/App.ts +7 -4
  106. package/src/services/Cache.ts +1 -1
  107. package/src/services/Events.ts +15 -5
  108. package/src/services/Service.ts +116 -53
  109. package/src/services/Storage.ts +20 -0
  110. package/src/services/index.ts +14 -5
  111. package/src/services/utils.ts +18 -0
  112. package/src/testing/index.ts +4 -3
  113. package/src/testing/setup.ts +5 -13
  114. package/src/ui/UI.state.ts +12 -7
  115. package/src/ui/UI.ts +126 -84
  116. package/src/ui/index.ts +18 -18
  117. package/src/utils/classes.ts +49 -0
  118. package/src/utils/composition/events.ts +2 -2
  119. package/src/utils/composition/forms.ts +14 -4
  120. package/src/utils/composition/persistent.test.ts +33 -0
  121. package/src/utils/composition/persistent.ts +11 -0
  122. package/src/utils/composition/state.ts +11 -2
  123. package/src/utils/index.ts +4 -1
  124. package/src/utils/markdown.test.ts +50 -0
  125. package/src/utils/markdown.ts +19 -6
  126. package/src/utils/vue.ts +28 -136
  127. package/dist/aerogel-core.cjs.js +0 -2
  128. package/dist/aerogel-core.cjs.js.map +0 -1
  129. package/dist/aerogel-core.esm.js +0 -2
  130. package/dist/aerogel-core.esm.js.map +0 -1
  131. package/histoire.config.ts +0 -7
  132. package/noeldemartin.config.js +0 -5
  133. package/postcss.config.js +0 -6
  134. package/src/assets/histoire.css +0 -3
  135. package/src/components/AGAppSnackbars.vue +0 -13
  136. package/src/components/composition.ts +0 -23
  137. package/src/components/constants.ts +0 -8
  138. package/src/components/forms/AGButton.vue +0 -44
  139. package/src/components/forms/AGCheckbox.vue +0 -41
  140. package/src/components/forms/AGInput.vue +0 -40
  141. package/src/components/forms/AGSelect.story.vue +0 -46
  142. package/src/components/forms/AGSelect.vue +0 -60
  143. package/src/components/forms/index.ts +0 -5
  144. package/src/components/headless/forms/AGHeadlessButton.ts +0 -3
  145. package/src/components/headless/forms/AGHeadlessButton.vue +0 -62
  146. package/src/components/headless/forms/AGHeadlessInput.ts +0 -34
  147. package/src/components/headless/forms/AGHeadlessInput.vue +0 -70
  148. package/src/components/headless/forms/AGHeadlessSelect.ts +0 -42
  149. package/src/components/headless/forms/AGHeadlessSelect.vue +0 -77
  150. package/src/components/headless/forms/AGHeadlessSelectButton.vue +0 -24
  151. package/src/components/headless/forms/AGHeadlessSelectLabel.vue +0 -24
  152. package/src/components/headless/forms/AGHeadlessSelectOption.ts +0 -4
  153. package/src/components/headless/forms/AGHeadlessSelectOption.vue +0 -39
  154. package/src/components/headless/forms/AGHeadlessSelectOptions.ts +0 -3
  155. package/src/components/headless/forms/composition.ts +0 -10
  156. package/src/components/headless/forms/index.ts +0 -18
  157. package/src/components/headless/modals/AGHeadlessModal.ts +0 -34
  158. package/src/components/headless/modals/AGHeadlessModalPanel.vue +0 -28
  159. package/src/components/headless/modals/AGHeadlessModalTitle.vue +0 -13
  160. package/src/components/headless/modals/index.ts +0 -4
  161. package/src/components/headless/snackbars/AGHeadlessSnackbar.vue +0 -10
  162. package/src/components/headless/snackbars/index.ts +0 -40
  163. package/src/components/interfaces.ts +0 -24
  164. package/src/components/lib/AGErrorMessage.vue +0 -16
  165. package/src/components/lib/AGLink.vue +0 -9
  166. package/src/components/lib/AGMarkdown.vue +0 -41
  167. package/src/components/lib/AGMeasured.vue +0 -16
  168. package/src/components/lib/index.ts +0 -5
  169. package/src/components/modals/AGAlertModal.ts +0 -15
  170. package/src/components/modals/AGAlertModal.vue +0 -14
  171. package/src/components/modals/AGConfirmModal.ts +0 -35
  172. package/src/components/modals/AGConfirmModal.vue +0 -26
  173. package/src/components/modals/AGErrorReportModal.ts +0 -46
  174. package/src/components/modals/AGErrorReportModal.vue +0 -54
  175. package/src/components/modals/AGErrorReportModalTitle.vue +0 -25
  176. package/src/components/modals/AGLoadingModal.ts +0 -23
  177. package/src/components/modals/AGLoadingModal.vue +0 -15
  178. package/src/components/modals/AGModal.ts +0 -10
  179. package/src/components/modals/AGModal.vue +0 -39
  180. package/src/components/modals/AGModalContext.ts +0 -8
  181. package/src/components/modals/AGModalContext.vue +0 -22
  182. package/src/components/modals/AGModalTitle.vue +0 -9
  183. package/src/components/modals/AGPromptModal.ts +0 -36
  184. package/src/components/modals/AGPromptModal.vue +0 -34
  185. package/src/components/modals/index.ts +0 -17
  186. package/src/components/snackbars/AGSnackbar.vue +0 -36
  187. package/src/components/snackbars/index.ts +0 -3
  188. package/src/components/utils.ts +0 -10
  189. package/src/directives/initial-focus.ts +0 -11
  190. package/src/main.histoire.ts +0 -1
  191. package/src/utils/tailwindcss.test.ts +0 -26
  192. package/src/utils/tailwindcss.ts +0 -7
  193. package/tailwind.config.js +0 -4
  194. package/tsconfig.json +0 -11
  195. package/vite.config.ts +0 -17
  196. /package/src/{main.ts → index.ts} +0 -0
@@ -1,5 +1,8 @@
1
+ export * from './classes';
1
2
  export * from './composition/events';
2
3
  export * from './composition/forms';
3
4
  export * from './composition/hooks';
4
- export * from './tailwindcss';
5
+ export * from './composition/persistent';
6
+ export * from './composition/state';
7
+ export * from './markdown';
5
8
  export * from './vue';
@@ -0,0 +1,50 @@
1
+ /* eslint-disable max-len */
2
+ import { describe, expect, it } from 'vitest';
3
+
4
+ import { renderMarkdown } from './markdown';
5
+
6
+ describe('Markdown utils', () => {
7
+
8
+ it('renders basic markdown', () => {
9
+ // Arrange
10
+ const expectedHTML = `
11
+ <h1>Title</h1>
12
+ <p>body with <a target="_blank" href="https://example.com">link</a></p>
13
+ <ul>
14
+ <li>One</li>
15
+ <li>Two</li>
16
+ <li>Three</li>
17
+ </ul>
18
+ `;
19
+
20
+ // Act
21
+ const html = renderMarkdown(
22
+ ['# Title', 'body with [link](https://example.com)', '- One', '- Two', '- Three'].join('\n'),
23
+ );
24
+
25
+ // Assert
26
+ expect(normalizeHTML(html)).toMatch(new RegExp(normalizeHTML(expectedHTML)));
27
+ });
28
+
29
+ it('renders button links', () => {
30
+ // Arrange
31
+ const expectedHTML = `
32
+ <p><button type="button" data-markdown-action="do-something">link</button></p>
33
+ `;
34
+
35
+ // Act
36
+ const html = renderMarkdown('[link](#action:do-something)');
37
+
38
+ // Assert
39
+ expect(normalizeHTML(html)).toMatch(new RegExp(normalizeHTML(expectedHTML)));
40
+ });
41
+
42
+ });
43
+
44
+ function normalizeHTML(html: string): string {
45
+ return html
46
+ .split('\n')
47
+ .map((line) => line.trim())
48
+ .join('\n')
49
+ .trim();
50
+ }
@@ -1,21 +1,34 @@
1
- import { tap } from '@noeldemartin/utils';
2
1
  import DOMPurify from 'dompurify';
2
+ import { stringMatchAll, tap } from '@noeldemartin/utils';
3
3
  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
  }
12
12
 
13
+ function renderActionLinks(html: string): string {
14
+ const matches = stringMatchAll<3>(html, /<a[^>]*href="#action:([^"]+)"[^>]*>([^<]+)<\/a>/g);
15
+
16
+ for (const [link, action, text] of matches) {
17
+ html = html.replace(link, `<button type="button" data-markdown-action="${action}">${text}</button>`);
18
+ }
19
+
20
+ return html;
21
+ }
22
+
13
23
  export function renderMarkdown(markdown: string): string {
14
- return safeHtml(marked(markdown, { mangle: false, headerIds: false, renderer: makeRenderer() }));
24
+ let html = marked(markdown, { renderer: makeRenderer(), async: false });
25
+
26
+ html = safeHtml(html);
27
+ html = renderActionLinks(html);
28
+
29
+ return html;
15
30
  }
16
31
 
17
32
  export function safeHtml(html: string): string {
18
- // TODO improve target="_blank" exception
19
- // See https://github.com/cure53/DOMPurify/issues/317
20
33
  return DOMPurify.sanitize(html, { ADD_ATTR: ['target'] });
21
34
  }
package/src/utils/vue.ts CHANGED
@@ -1,61 +1,21 @@
1
- import { fail } from '@noeldemartin/utils';
2
- import { computed, inject, reactive, ref, watch } from 'vue';
3
- import type { Directive, InjectionKey, PropType, Ref, UnwrapNestedRefs } from 'vue';
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';
4
4
 
5
- type BaseProp<T> = {
6
- type?: PropType<T>;
7
- validator?(value: unknown): boolean;
8
- };
5
+ export type AcceptRefs<T> = { [K in keyof T]: T[K] | RefUnion<T[K]> };
6
+ export type RefUnion<T> = T extends infer R ? Ref<R> : never;
7
+ export type Unref<T> = { [K in keyof T]: T[K] extends MaybeRef<infer Value> ? Value : T[K] };
9
8
 
10
- type RequiredProp<T> = BaseProp<T> & { required: true };
11
- type OptionalProp<T> = BaseProp<T> & { default: T | (() => T) | null };
12
-
13
- export type ComponentProps = Record<string, unknown>;
14
-
15
- export function arrayProp<T>(defaultValue?: () => T[]): OptionalProp<T[]> {
16
- return {
17
- type: Array as PropType<T[]>,
18
- default: defaultValue ?? (() => []),
19
- };
20
- }
21
-
22
- export function booleanProp(defaultValue: boolean = false): OptionalProp<boolean> {
23
- return {
24
- type: Boolean,
25
- default: defaultValue,
26
- };
27
- }
28
-
29
- export function componentRef<T>(): Ref<UnwrapNestedRefs<T> | undefined> {
30
- return ref<UnwrapNestedRefs<T>>();
31
- }
32
-
33
- export function computedAsync<T>(getter: () => Promise<T>): Ref<T | undefined> {
34
- const result = ref<T>();
35
- const asyncValue = computed(getter);
36
-
37
- watch(asyncValue, async () => (result.value = await asyncValue.value), { immediate: true });
38
-
39
- 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
+ }, '');
40
13
  }
41
14
 
42
15
  export function defineDirective(directive: Directive): Directive {
43
16
  return directive;
44
17
  }
45
18
 
46
- export function enumProp<Enum extends Record<string, unknown>>(
47
- enumeration: Enum,
48
- defaultValue?: Enum[keyof Enum],
49
- ): OptionalProp<Enum[keyof Enum]> {
50
- const values = Object.values(enumeration) as Enum[keyof Enum][];
51
-
52
- return {
53
- type: String as unknown as PropType<Enum[keyof Enum]>,
54
- default: defaultValue ?? values[0] ?? null,
55
- validator: (value) => values.includes(value as Enum[keyof Enum]),
56
- };
57
- }
58
-
59
19
  export function injectReactive<T extends object>(key: InjectionKey<T> | string): UnwrapNestedRefs<T> | undefined {
60
20
  const value = inject(key);
61
21
 
@@ -66,99 +26,31 @@ export function injectReactiveOrFail<T extends object>(
66
26
  key: InjectionKey<T> | string,
67
27
  errorMessage?: string,
68
28
  ): UnwrapNestedRefs<T> {
69
- return injectReactive(key) ?? fail(errorMessage ?? `Could not resolve '${key}' injection key`);
29
+ return injectReactive(key) ?? fail(errorMessage ?? `Could not resolve '${toString(key)}' injection key`);
70
30
  }
71
31
 
72
32
  export function injectOrFail<T>(key: InjectionKey<T> | string, errorMessage?: string): T {
73
- return inject(key) ?? fail(errorMessage ?? `Could not resolve '${key}' injection key`);
74
- }
75
-
76
- export function listenerProp<T extends Function = Function>(): OptionalProp<T | null> {
77
- return {
78
- type: Function as PropType<T>,
79
- default: null,
80
- };
33
+ return inject(key) ?? fail(errorMessage ?? `Could not resolve '${toString(key)}' injection key`);
81
34
  }
82
35
 
83
- export function mixedProp<T>(type?: PropType<T>): OptionalProp<T | null>;
84
- export function mixedProp<T>(type: PropType<T>, defaultValue: T): OptionalProp<T>;
85
- export function mixedProp<T>(type?: PropType<T>, defaultValue?: T): OptionalProp<T | null> {
86
- return {
87
- type,
88
- default: defaultValue ?? null,
89
- };
90
- }
91
-
92
- export function numberProp(): OptionalProp<number | null>;
93
- export function numberProp(defaultValue: number): OptionalProp<number>;
94
- export function numberProp(defaultValue: number | null = null): OptionalProp<number | null> {
95
- return {
96
- type: Number,
97
- default: defaultValue,
98
- };
99
- }
100
-
101
- export function objectProp<T = Object>(): OptionalProp<T | null>;
102
- export function objectProp<T>(defaultValue: () => T): OptionalProp<T>;
103
- export function objectProp<T = Object>(defaultValue: (() => T) | null = null): OptionalProp<T | null> {
104
- return {
105
- type: Object,
106
- default: defaultValue,
107
- };
108
- }
109
-
110
- export function requiredArrayProp<T>(): RequiredProp<T[]> {
111
- return {
112
- type: Array as PropType<T[]>,
113
- required: true,
114
- };
115
- }
36
+ export function renderVNode(node: VNode | string): string {
37
+ if (typeof node === 'string') {
38
+ return node;
39
+ }
116
40
 
117
- export function requiredEnumProp<Enum extends Record<string, unknown>>(
118
- enumeration: Enum,
119
- ): RequiredProp<Enum[keyof Enum]> {
120
- const values = Object.values(enumeration);
41
+ if (node.type === Comment) {
42
+ return '';
43
+ }
121
44
 
122
- return {
123
- type: String as unknown as PropType<Enum[keyof Enum]>,
124
- required: true,
125
- validator: (value) => values.includes(value),
126
- };
127
- }
45
+ if (node.type === Text || node.type === Static) {
46
+ return node.children as string;
47
+ }
128
48
 
129
- export function requiredMixedProp<T>(type?: PropType<T>): RequiredProp<T> {
130
- return {
131
- type,
132
- required: true,
133
- };
134
- }
135
-
136
- export function requiredNumberProp(): RequiredProp<number> {
137
- return {
138
- type: Number,
139
- required: true,
140
- };
141
- }
142
-
143
- export function requiredObjectProp<T = Object>(): RequiredProp<T> {
144
- return {
145
- type: Object,
146
- required: true,
147
- };
148
- }
149
-
150
- export function requiredStringProp(): RequiredProp<string> {
151
- return {
152
- type: String,
153
- required: true,
154
- };
155
- }
49
+ if (node.type === 'br') {
50
+ return '\n\n';
51
+ }
156
52
 
157
- export function stringProp(): OptionalProp<string | null>;
158
- export function stringProp(defaultValue: string): OptionalProp<string>;
159
- export function stringProp(defaultValue: string | null = null): OptionalProp<string | null> {
160
- return {
161
- type: String,
162
- default: defaultValue,
163
- };
53
+ return `<${node.type} ${renderVNodeAttrs(node)}>${Array.from(node.children as Array<VNode | string>)
54
+ .map(renderVNode)
55
+ .join('')}</${node.type}>`;
164
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 x(e){var t;return t=class extends g{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??{}}serializePersistedState(t){return e.serialize?.(t)??t}},u.default(t,"persist",e.persist??[]),t}class g 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,"_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._store=this.usesStore()&&v(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 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;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=o.objectOnly(e,t);if(o.isEmpty(r))return;const s=o.Storage.get(this._name);s&&o.Storage.set(this._name,{...s,...this.serializePersistedState(o.objectDeepClone(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()&&!o.isEmpty(e))if(o.Storage.has(this._name)){const e=o.Storage.require(this._name);this.setState(e)}else o.Storage.set(this._name,o.objectOnly(this.getState(),e))}requireStore(){return this._store?this._store:o.fail(`Failed getting '${this._name}' store`)}}u.default(g,"persist",[]);class b extends g{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?{}: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),_=x({name:"app",initialState:{plugins:{},instance:null,environment:c.default.environment,version:c.default.version,sourceUrl:c.default.sourceUrl},computed:{development:e=>"development"===e.environment,testing:e=>"test"===e.environment||"testing"===e.environment,versionName(e){return this.development?"dev."+c.default.sourceHash.toString().substring(0,7):`v${e.version}`},versionUrl(e){return e.sourceUrl+(this.development?`/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 V(e,t){return M(e)??o.fail(t??`Could not resolve '${e}' injection key`)}function $(e,t){return{type:e,default:t??null}}function P(){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 L(){return{type:Array,required:!0}}function q(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 g{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);const K={$app:w,$events:y};async function J(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&&Object.assign(window,t)}var Q={async install(e,t){const r={...K,...t.services};e.use(h()),await J(e,r)}};const Z={Mobile:"mobile",Desktop:"desktop"};function Y(){return globalThis.innerWidth>768?Z.Desktop:Z.Mobile}var X=x({name:"ui",initialState:{modals:[],snackbars:[],layout:Y()},computed:{mobile:e=>{let{layout:t}=e;return t===Z.Mobile},desktop:e=>{let{layout:t}=e;return t===Z.Desktop}}});const ee={AlertModal:"alert-modal",ConfirmModal:"confirm-modal",ErrorReportModal:"error-report-modal",LoadingModal:"loading-modal",PromptModal:"prompt-modal",Snackbar:"snackbar",StartupCrash:"startup-crash"};class te extends X{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(ee.AlertModal),"string"!=typeof t?{message:e}:{title:e,message:t})}async confirm(e,t,r){const o="string"!=typeof t?{message:e,...t??{}}:{title:e,message:t,...r??{}},s=await this.openModal(this.requireComponent(ee.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(ee.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=await this.openModal(this.requireComponent(ee.LoadingModal),"string"!=typeof e?{}:{message:e});try{t="function"==typeof(t="string"==typeof e?t:e)?Promise.resolve(t()):t;const[r]=await Promise.all([t,o.after({seconds:1})]);return r}finally{await this.closeModal(r.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(ee.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){await y.emit("close-modal",{id:e,result:t})}async boot(){this.watchModalEvents(),this.watchMountedEvent(),this.watchViewportBreakpoints()}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: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 o=this.modals.at(-1);await(o&&y.emit("show-modal",{id:o.id}))}))}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 re=o.facade(te);class oe{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 se=x({name:"lang",persist:["locale","fallbackLocale"],initialState:{locale:null,locales:["en"],fallbackLocale:"en"}});var ne=o.facade(class extends se{constructor(){super(),u.default(this,"provider",void 0),this.provider=new oe(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 ae=ne.translate.bind(ne),le=ne.translateWithDefault.bind(ne);var ie=x({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 ce={Primary:"primary",Secondary:"secondary",Danger:"danger",Clear:"clear"};var ue=o.facade(class extends ie{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?re.openModal(re.requireComponent(ee.ErrorReportModal),{reports:t}):re.alert(le("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};re.showSnackbar(t??le("errors.notice","Something went wrong, but it's not your fault. Try again!"),{color:ce.Danger,actions:[{text:le("errors.viewDetails","View details"),dismiss:!0,handler:()=>re.openModal(re.requireComponent(ee.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??le("errors.unknown","Unknown Error")),description:o.toString(e.message??e.description??le("errors.unknownDescription","Unknown error object")),error:e}):{title:le("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 de=[];function pe(e){for(const t of de){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"):le("errors.unknown","Unknown Error")}const me={$errors:ue};function fe(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:()=>!1;const r=e=>t(e)||(e=>(ue.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 he={async install(e,t){fe(e,t.handleError),await J(e,me)}};const ve={$lang:ne};var xe={async install(e){e.config.globalProperties.$t??=ae,e.config.globalProperties.$td=le,await J(e,ve)}},ge={async install(){"testing"===(void 0).MODE&&(globalThis.testingRuntime={on:function(){return y.on(...arguments)}})}};function be(e,r){const o=y.on(e,r);t.onUnmounted((()=>o()))}function ye(){const e=t.useAttrs(),r=t.computed((()=>e.class));return[t.computed((()=>o.objectWithout(e,"class"))),r]}function _e(e,t){return Object.keys(t).reduce(((t,r)=>(t[r]=e[r],t)),{})}const ke={cancellable:E(!0),title:R()};function we(){return ke}function Ce(e){return{close:async()=>e.value?.close(),cancellable:t.computed((()=>!!e.value?.cancellable))}}var Se=t.defineComponent({__name:"AGHeadlessModal",props:we(),setup(e,{expose:r}){const o=e,s=t.ref(null),a=t.ref(!0),l=t.ref(!1),{modal:i}=V("modal","could not obtain modal reference from <AGHeadlessModal>, did you render this component manually? Show it using $ui.openModal() instead");async function c(){s.value?.$el&&(a.value=!0)}async function u(e){l.value||(y.emit("modal-will-close",{modal:i,result:e}),await c(),l.value=!0,y.emit("modal-closed",{modal:i,result:e}))}return be("close-modal",(async({id:e,result:t})=>{e===i.id&&await u(t)})),be("hide-modal",(async({id:e})=>{e===i.id&&await c()})),be("show-modal",(async({id:e})=>{e===i.id&&await async function(){s.value?.$el&&(a.value=!1)}()})),r({close:u,cancellable:t.toRef(o,"cancellable")}),(e,r)=>(t.openBlock(),t.createBlock(t.unref(n.Dialog),{ref_key:"$root",ref:s,open:!0,onClose:r[0]||(r[0]=t=>e.cancellable&&u())},{default:t.withCtx((()=>[t.renderSlot(e.$slots,"default",{close:u})])),_:3},512))}});Se.__file="src/components/headless/modals/AGHeadlessModal.vue";var Ae=t.defineComponent({__name:"AGModalContext",props:{modal:T(),childIndex:H()},setup(e){const r=e;return t.provide("modal",{modal:t.toRef(r,"modal"),childIndex:t.toRef(r,"childIndex")}),(r,o)=>(t.openBlock(),t.createBlock(t.resolveDynamicComponent(e.modal.component),t.normalizeProps(t.guardReactiveProps(e.modal.properties)),null,16))}});Ae.__file="src/components/modals/AGModalContext.vue";const Ee=t.createElementVNode("div",{class:"pointer-events-none fixed inset-0 z-50 bg-black/30"},null,-1);var Be=t.defineComponent({__name:"AGHeadlessModalPanel",setup(e){const r=V("modal","could not obtain modal reference from <AGHeadlessModalPanel>, did you render this component manually? Show it using $ui.openModal() instead"),o=t.computed((()=>re.modals[r.childIndex]??null));return(e,s)=>(t.openBlock(),t.createBlock(t.unref(n.DialogPanel),null,{default:t.withCtx((()=>[t.renderSlot(e.$slots,"default"),o.value?(t.openBlock(),t.createElementBlock(t.Fragment,{key:0},[Ee,t.createVNode(Ae,{"child-index":t.unref(r).childIndex+1,modal:o.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=>(r,o)=>(t.openBlock(),t.createBlock(t.unref(n.DialogTitle),{as:e.as},{default:t.withCtx((()=>[t.renderSlot(r.$slots,"default")])),_:3},8,["as"]))});function je(e){return 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"')}}))}),d.default.sanitize(t,{ADD_ATTR:["target"]});var t}Ge.__file="src/components/headless/modals/AGHeadlessModalTitle.vue";var Me=t.defineComponent({__name:"AGMarkdown",props:{as:R(),inline:E(),langKey:R(),langParams:$(),text:R()},setup(e){const r=e,o=t.useAttrs(),s=t.computed((()=>r.text??(r.langKey&&ae(r.langKey,r.langParams??{})))),n=t.computed((()=>{if(!s.value)return null;let e=je(s.value);return r.inline&&(e=e.replace("<p>","<span>").replace("</p>","</span>")),e})),a=()=>t.h(r.as??(r.inline?"span":"div"),{innerHTML:n.value,...o,class:`${o.class??""} ${r.inline?"":"prose"}`});return(e,r)=>(t.openBlock(),t.createBlock(a))}});Me.__file="src/components/lib/AGMarkdown.vue";const Ve={class:"fixed inset-0 flex items-center justify-center p-8"};var $e=t.defineComponent({inheritAttrs:!1,__name:"AGModal",props:we(),setup(e,{expose:r}){const o=e,s=t.ref();return r(Ce(s)),(e,r)=>(t.openBlock(),t.createBlock(Se,t.mergeProps({ref_key:"$modal",ref:s},o,{class:"relative z-50"}),{default:t.withCtx((({close:r})=>[t.createElementVNode("div",Ve,[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))}});$e.__file="src/components/modals/AGModal.vue";const Pe={title:R(),message:I()};function Ne(){return Pe}var Le=t.defineComponent({__name:"AGAlertModal",props:Ne(),setup:e=>(e,r)=>(t.openBlock(),t.createBlock($e,{title:e.title},{default:t.withCtx((()=>[t.createVNode(Me,{text:e.message},null,8,["text"])])),_:1},8,["title"]))});Le.__file="src/components/modals/AGAlertModal.vue";const qe={title:R(),message:I(),acceptText:R(),acceptColor:j(ce,ce.Primary),cancelText:R(),cancelColor:j(ce,ce.Clear),checkboxes:N()};function He(){return qe}function Te(e){return{renderedAcceptText:t.computed((()=>e.acceptText??le("ui.accept","Ok"))),renderedCancelText:t.computed((()=>e.cancelText??le("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(ce,ce.Primary)},setup(e){const r=e,o=t.computed((()=>{switch(r.color){case ce.Secondary:return["text-white bg-gray-600","hover:bg-gray-500","focus-visible:outline-offset-2 focus-visible:outline-gray-600"].join(" ");case ce.Clear:return"hover:bg-gray-500/20 focus-visible:outline-gray-500/60";case ce.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($e,{cancellable:!1,title:e.title},{default:t.withCtx((({close:r})=>[t.createVNode(Me,{text:e.message},null,8,["text"]),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"]),t.createVNode(Fe,{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"},Ke=[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 Je={name:"zondicons-cheveron-right",render:function(e,r){return t.openBlock(),t.createElementBlock("svg",We,[...Ke])}};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 Ye={name:"zondicons-cheveron-left",render:function(e,r){return t.openBlock(),t.createElementBlock("svg",Qe,[...Ze])}};const Xe={reports:L()};function et(){return Xe}function tt(e){const r=t.ref(0),o=t.computed((()=>e.reports[r.value])),s=t.computed((()=>o.value.details?.trim()||le("errors.detailsEmpty","This error is missing a stacktrace."))),n=le("errors.previousReport","Show previous report"),a=le("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}`),re.showSnackbar(le("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),re.showSnackbar(le("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:P(),totalReports:P()},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 xt=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($e,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(Ye),{"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(Je),{"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}))}});xt.__file="src/components/modals/AGErrorReportModal.vue";const gt={message:R()};function bt(){return gt}function yt(e){return{renderedMessage:t.computed((()=>e.message??le("ui.loading","Loading...")))}}var _t=t.defineComponent({__name:"AGLoadingModal",props:bt(),setup(e){const r=e,{renderedMessage:o}=yt(r);return(e,r)=>(t.openBlock(),t.createBlock($e,{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(ce,ce.Primary),cancelText:R(),cancelColor:j(ce,ce.Clear)};function wt(){return kt}function Ct(e){return{renderedAcceptText:t.computed((()=>e.acceptText??le("ui.accept","Ok"))),renderedCancelText:t.computed((()=>e.cancelText??le("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:$([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=V("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=V("input","<AGHeadlessInputError> must be a child of a <AGHeadlessInput>"),o=t.computed((()=>r.errors?le(`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 Vt(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 $t=["id","name","type","required","aria-invalid","aria-describedby","checked"];var Pt=t.defineComponent({__name:"AGHeadlessInputInput",props:{type:R("text")},setup(e){const r=e,o=t.ref(),s=V("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 Vt(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,$t))}});Pt.__file="src/components/headless/forms/AGHeadlessInputInput.vue";const Nt=["for"];var Lt=t.defineComponent({__name:"AGHeadlessInputLabel",setup(e){const r=V("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)}});Lt.__file="src/components/headless/forms/AGHeadlessInputLabel.vue";const qt={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]=ye();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(Lt,{class:"sr-only"}),t.createVNode(Pt,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",qt,[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($e,{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 Kt={class:"pointer-events-auto"};var Jt=t.defineComponent({__name:"AGHeadlessSnackbar",setup:e=>(e,r)=>(t.openBlock(),t.createElementBlock("div",Kt,[t.renderSlot(e.$slots,"default")]))});Jt.__file="src/components/headless/snackbars/AGHeadlessSnackbar.vue";const Qt=o.objectWithout(ce,["Primary","Clear"]),Zt={id:I(),message:I(),actions:A((()=>[])),color:j(Qt,ce.Secondary)};function Yt(){return Zt}function Xt(e){return{activate:function(t){t.handler?.(),t.dismiss&&re.hideSnackbar(e.id)}}}var er=t.defineComponent({__name:"AGSnackbar",props:Yt(),setup(e){const r=e,{activate:o}=Xt(r),s=t.computed((()=>r.color===ce.Danger?"bg-red-200 text-red-900":"bg-gray-900 text-white"));return(e,r)=>(t.openBlock(),t.createBlock(Jt,{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:re};var lr={async install(e,t){const r={[ee.AlertModal]:Le,[ee.ConfirmModal]:Ue,[ee.ErrorReportModal]:xt,[ee.LoadingModal]:_t,[ee.PromptModal]:Wt,[ee.Snackbar]:er,[ee.StartupCrash]:nr};Object.entries({...r,...t.components}).forEach((e=>{let[t,r]=e;return re.registerComponent(t,r)})),await J(e,ar)}};async function ir(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r=[ge,z,he,xe,Q,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((()=>re.modals[0]??null));return(e,o)=>r.value?(t.openBlock(),t.createElementBlock("aside",cr,[t.createVNode(Ae,{"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 be("show-overlays-backdrop",(async()=>{r.value&&o.value&&(o.value=!1,r.value.classList.remove("opacity-0"))})),be("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 xr=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(ee).StartupCrash))))])):t.renderSlot(e.$slots,"default",{key:1}),t.createVNode(hr)]))});xr.__file="src/components/AGAppLayout.vue";const gr={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(Pt,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",gr,[o.$slots.default?(t.openBlock(),t.createBlock(Lt,{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:L(),noSelectionText:R(),optionsText:$()},Cr=["update:modelValue"];function Sr(){return wr}function Ar(){return[...Cr]}var Er=t.defineComponent({__name:"AGHeadlessSelect",props:{modelValue:$(),...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??le("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=V("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=V("select","<AGHeadlessSelectError> must be a child of a <AGHeadlessSelect>"),o=t.computed((()=>r.errors?le(`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=V("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 Vr=t.defineComponent({__name:"AGHeadlessSelectOption",props:{value:q(),selectedClass:R(),unselectedClass:R(),activeClass:R(),inactiveClass:R()},setup(e){const r=V("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"]))}});Vr.__file="src/components/headless/forms/AGHeadlessSelectOption.vue";const $r={class:"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2"};var Pr=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",$r,[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(Vr,{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))}});Pr.__file="src/components/forms/AGSelect.vue";const Nr=["id","name","required","value","aria-invalid","aria-describedby"];var Lr=t.defineComponent({__name:"AGHeadlessInputTextArea",setup(e){const r=t.ref(),o=V("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))),Vt(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))}});Lr.__file="src/components/headless/forms/AGHeadlessInputTextArea.vue";var qr=t.defineComponent({__name:"AGErrorMessage",props:{error:T()},setup(e){const r=e,o=t.computed((()=>pe(r.error)));return(e,r)=>(t.openBlock(),t.createBlock(Me,{text:o.value,inline:""},null,8,["text"]))}});qr.__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";var Ir=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}))});Ir.__file="src/components/modals/AGModalTitle.vue";Object.defineProperty(exports,"AGHeadlessSelectOptions",{enumerable:!0,get:function(){return n.ListboxOptions}}),exports.AGAlertModal=Le,exports.AGAppLayout=xr,exports.AGAppOverlays=hr,exports.AGButton=Fe,exports.AGCheckbox=br,exports.AGConfirmModal=Ue,exports.AGErrorMessage=qr,exports.AGErrorReportModalButtons=pt,exports.AGErrorReportModalTitle=mt,exports.AGForm=St,exports.AGHeadlessButton=Oe,exports.AGHeadlessInput=Bt,exports.AGHeadlessInputDescription=Gt,exports.AGHeadlessInputError=Mt,exports.AGHeadlessInputInput=Pt,exports.AGHeadlessInputLabel=Lt,exports.AGHeadlessInputTextArea=Lr,exports.AGHeadlessModal=Se,exports.AGHeadlessModalPanel=Be,exports.AGHeadlessModalTitle=Ge,exports.AGHeadlessSelect=Er,exports.AGHeadlessSelectButton=Br,exports.AGHeadlessSelectError=jr,exports.AGHeadlessSelectLabel=Mr,exports.AGHeadlessSelectOption=Vr,exports.AGHeadlessSnackbar=Jt,exports.AGInput=Ht,exports.AGLink=Hr,exports.AGLoadingModal=_t,exports.AGMarkdown=Me,exports.AGMeasured=Tr,exports.AGModal=$e,exports.AGModalContext=Ae,exports.AGModalTitle=Ir,exports.AGPromptModal=Wt,exports.AGSelect=Pr,exports.AGSnackbar=er,exports.AGStartupCrash=nr,exports.App=w,exports.AppService=k,exports.Cache=W,exports.CacheService=U,exports.Colors=ce,exports.Errors=ue,exports.EventListenerPriorities={Low:-256,Default:0,High:256},exports.Events=y,exports.EventsService=b,exports.Form=Ot,exports.FormFieldTypes=Rt,exports.Job=class{},exports.Lang=ne,exports.Layouts=Z,exports.MOBILE_BREAKPOINT=768,exports.Service=g,exports.SnackbarColors=Qt,exports.UI=re,exports.UIComponents=ee,exports.UIService=te,exports.alertModalProps=Pe,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=J,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=qe,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=x,exports.defineServiceStore=v,exports.dispatch=async function(e){await e.run()},exports.elementRef=De,exports.enumProp=j,exports.errorReportModalProps=Xe,exports.extractInputProps=function(e){return _e(e,At)},exports.extractModalProps=function(e){return _e(e,ke)},exports.extractSelectProps=function(e){return _e(e,wr)},exports.getCurrentLayout=Y,exports.getElement=Ie,exports.getErrorMessage=pe,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=V,exports.inputProps=At,exports.installPlugins=S,exports.listenerProp=function(){return{type:Function,default:null}},exports.loadingModalProps=gt,exports.mixedProp=$,exports.modalProps=ke,exports.numberInput=function(e){return{default:e,type:Rt.Number,rules:(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).rules}},exports.numberProp=P,exports.objectProp=N,exports.onCleanMounted=function(e){let r=o.noop;t.onMounted((()=>r=e())),t.onUnmounted((()=>r()))},exports.onFormFocus=Vt,exports.promptModalProps=kt,exports.registerErrorHandler=function(e){de.push(e)},exports.removeInteractiveClasses=function(e){return e.split(/\s+/).filter((e=>!/^(hover|focus|focus-visible):/.test(e))).join(" ").trim()},exports.requiredArrayProp=L,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=q,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=ae,exports.translateWithDefault=le,exports.useAlertModalProps=Ne,exports.useConfirmModal=Te,exports.useConfirmModalProps=He,exports.useErrorReportModal=tt,exports.useErrorReportModalProps=et,exports.useEvent=be,exports.useForm=Ft,exports.useInputAttrs=ye,exports.useInputProps=Et,exports.useLoadingModal=yt,exports.useLoadingModalProps=bt,exports.useModalExpose=Ce,exports.useModalProps=we,exports.usePromptModal=Ct,exports.usePromptModalProps=wt,exports.useSelectEmits=Ar,exports.useSelectProps=Sr,exports.useSnackbar=Xt,exports.useSnackbarProps=Yt,exports.validate=It,exports.validators=Tt;
2
- //# sourceMappingURL=aerogel-core.cjs.js.map