@aerogel/core 0.1.1 → 0.1.2-next.0532ffc3845be5e86d770e8e823f5216ef34dfbf
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/aerogel-core.d.ts +539 -317
- package/dist/aerogel-core.js +1938 -1546
- package/dist/aerogel-core.js.map +1 -1
- package/package.json +4 -2
- package/src/bootstrap/index.ts +2 -1
- package/src/components/AppLayout.vue +1 -1
- package/src/components/AppOverlays.vue +3 -2
- package/src/components/contracts/AlertModal.ts +1 -1
- package/src/components/contracts/Button.ts +1 -1
- package/src/components/contracts/Combobox.ts +5 -0
- package/src/components/contracts/ConfirmModal.ts +5 -2
- package/src/components/contracts/Modal.ts +8 -3
- package/src/components/contracts/PromptModal.ts +6 -2
- package/src/components/contracts/Select.ts +98 -4
- package/src/components/contracts/Toast.ts +1 -1
- package/src/components/contracts/index.ts +1 -0
- package/src/components/headless/HeadlessInputInput.vue +27 -5
- package/src/components/headless/HeadlessModal.vue +6 -34
- package/src/components/headless/HeadlessModalContent.vue +5 -12
- package/src/components/headless/HeadlessSelect.vue +10 -91
- package/src/components/headless/HeadlessSelectOption.vue +1 -5
- package/src/components/index.ts +1 -1
- package/src/components/ui/AdvancedOptions.vue +4 -13
- package/src/components/ui/Button.vue +1 -0
- package/src/components/ui/Combobox.vue +94 -0
- package/src/components/ui/ComboboxLabel.vue +29 -0
- package/src/components/ui/ComboboxOption.vue +46 -0
- package/src/components/ui/ComboboxOptions.vue +71 -0
- package/src/components/ui/ComboboxTrigger.vue +67 -0
- package/src/components/ui/ConfirmModal.vue +7 -2
- package/src/components/ui/Details.vue +33 -0
- package/src/components/ui/Form.vue +1 -1
- package/src/components/ui/Input.vue +12 -4
- package/src/components/ui/LoadingModal.vue +1 -2
- package/src/components/ui/Modal.vue +53 -33
- package/src/components/ui/ProgressBar.vue +16 -2
- package/src/components/ui/PromptModal.vue +7 -2
- package/src/components/ui/Select.vue +2 -0
- package/src/components/ui/SelectTrigger.vue +13 -2
- package/src/components/ui/SettingsModal.vue +1 -1
- package/src/components/ui/Toast.vue +1 -0
- package/src/components/ui/index.ts +6 -1
- package/src/components/vue/Provide.vue +11 -0
- package/src/components/vue/index.ts +1 -0
- package/src/directives/index.ts +7 -7
- package/src/errors/Errors.ts +4 -0
- package/src/errors/index.ts +5 -0
- package/src/forms/FormController.test.ts +4 -4
- package/src/forms/FormController.ts +23 -13
- package/src/forms/index.ts +11 -0
- package/src/forms/utils.ts +36 -17
- package/src/forms/validation.ts +5 -1
- package/src/index.css +10 -0
- package/src/jobs/Job.ts +1 -1
- package/src/plugins/index.ts +1 -3
- package/src/services/App.state.ts +1 -0
- package/src/services/App.ts +4 -0
- package/src/services/index.ts +7 -0
- package/src/testing/index.ts +1 -2
- package/src/ui/UI.state.ts +0 -11
- package/src/ui/UI.ts +43 -125
- package/src/ui/index.ts +1 -0
- package/src/ui/modals.ts +36 -0
- package/src/utils/classes.ts +2 -3
- package/src/utils/composition/reactiveSet.test.ts +32 -0
- package/src/utils/composition/reactiveSet.ts +61 -0
- package/src/utils/index.ts +2 -0
- package/src/utils/time.ts +7 -0
- package/src/components/AppModals.vue +0 -14
- package/src/components/ui/ModalContext.vue +0 -31
package/dist/aerogel-core.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aerogel-core.js","sources":["../src/errors/ServiceBootError.ts","../src/utils/app.ts","../src/services/store.ts","../src/services/Service.ts","../src/services/Events.ts","../src/services/App.state.ts","../src/services/App.ts","../src/plugins/index.ts","../src/utils/vue.ts","../src/directives/measure.ts","../src/utils/classes.ts","../src/utils/composition/events.ts","../src/forms/validation.ts","../src/forms/FormController.ts","../src/utils/composition/forms.ts","../src/utils/composition/hooks.ts","../src/utils/composition/persistent.ts","../src/utils/composition/state.ts","../src/utils/markdown.ts","../src/directives/safe-html.ts","../src/directives/index.ts","../src/services/Cache.ts","../src/services/Storage.ts","../src/services/utils.ts","../src/services/index.ts","../src/ui/utils.ts","../src/ui/UI.state.ts","../src/ui/UI.ts","../src/lang/DefaultLangProvider.ts","../src/lang/Lang.state.ts","../src/lang/Lang.ts","../src/lang/utils.ts","../src/errors/Errors.state.ts","../src/errors/Errors.ts","../src/components/headless/HeadlessButton.vue","../src/components/ui/Button.vue","../src/components/contracts/Select.ts","../src/components/headless/HeadlessSelectValue.vue","../src/components/headless/HeadlessSelectTrigger.vue","../src/components/headless/HeadlessSelectOption.vue","../src/components/headless/HeadlessSelectOptions.vue","../src/components/headless/HeadlessSelect.vue","../src/components/headless/HeadlessSelectLabel.vue","../src/components/ui/SelectLabel.vue","../src/components/ui/SelectOption.vue","../src/components/ui/SelectOptions.vue","../src/components/ui/SelectTrigger.vue","../src/components/ui/Select.vue","../src/lang/settings/Language.vue","../src/lang/settings/index.ts","../src/lang/index.ts","../src/components/ui/Markdown.vue","../src/components/ui/Setting.vue","../src/components/headless/HeadlessSwitch.vue","../src/errors/settings/index.ts","../src/errors/utils.ts","../src/errors/JobCancelledError.ts","../src/errors/index.ts","../src/testing/index.ts","../src/components/headless/HeadlessModal.vue","../src/components/ui/ModalContext.vue","../src/components/headless/HeadlessModalContent.vue","../src/components/ui/Modal.vue","../src/components/contracts/AlertModal.ts","../src/components/ui/AlertModal.vue","../src/components/ui/Form.vue","../src/components/contracts/ConfirmModal.ts","../src/components/ui/ConfirmModal.vue","../src/components/ui/ErrorReportModalButtons.vue","../src/components/ui/ErrorReportModalTitle.vue","../src/components/contracts/ErrorReportModal.ts","../src/components/ui/ErrorReportModal.vue","../src/components/ui/ProgressBar.vue","../src/components/contracts/LoadingModal.ts","../src/components/ui/LoadingModal.vue","../src/components/headless/HeadlessInput.vue","../src/components/headless/HeadlessInputLabel.vue","../src/components/headless/HeadlessInputInput.vue","../src/components/headless/HeadlessInputDescription.vue","../src/components/headless/HeadlessInputError.vue","../src/components/ui/Input.vue","../src/forms/utils.ts","../src/components/contracts/PromptModal.ts","../src/components/ui/PromptModal.vue","../src/components/ui/StartupCrash.vue","../src/components/ui/Toast.vue","../src/ui/index.ts","../src/bootstrap/index.ts","../src/components/AppModals.vue","../src/components/headless/HeadlessInputTextArea.vue","../src/components/ui/Checkbox.vue","../src/components/ui/DropdownMenuOption.vue","../src/components/ui/DropdownMenuOptions.vue","../src/components/ui/DropdownMenu.vue","../src/components/ui/EditableContent.vue","../src/components/ui/ErrorMessage.vue","../src/components/ui/SettingsModal.vue","../src/components/ui/TextArea.vue","../src/jobs/Job.ts","../src/jobs/index.ts"],"sourcesContent":["import { JSError } from '@noeldemartin/utils';\n\nexport default class ServiceBootError extends JSError {\n\n constructor(serviceNamespace: string, cause: unknown) {\n super(`Service '${serviceNamespace}' failed booting`, { cause });\n }\n\n}\n","import Aerogel from 'virtual:aerogel';\n\nimport { stringToSlug } from '@noeldemartin/utils';\n\nexport function appNamespace(): string {\n return Aerogel.namespace ?? stringToSlug(Aerogel.name);\n}\n","import { tap } from '@noeldemartin/utils';\nimport { createPinia, defineStore, setActivePinia } from 'pinia';\nimport type { DefineStoreOptions, Pinia, StateTree, Store, _GettersTree } from 'pinia';\n\nlet _store: Pinia | null = null;\n\nfunction initializePiniaStore(): Pinia {\n return _store ?? resetPiniaStore();\n}\n\nexport function resetPiniaStore(): Pinia {\n return tap(createPinia(), (store) => {\n _store = store;\n\n setActivePinia(store);\n });\n}\n\nexport function getPiniaStore(): Pinia {\n return _store ?? initializePiniaStore();\n}\n\nexport function defineServiceStore<Id extends string, S extends StateTree = {}, G extends _GettersTree<S> = {}, A = {}>(\n name: Id,\n options: Omit<DefineStoreOptions<Id, S, G, A>, 'id'>,\n): Store<Id, S, G, A> {\n initializePiniaStore();\n\n return defineStore(name, options)();\n}\n","import {\n MagicObject,\n PromisedValue,\n Storage,\n arrayFrom,\n fail,\n isEmpty,\n objectDeepClone,\n objectOnly,\n} from '@noeldemartin/utils';\nimport type { Constructor, Nullable } from '@noeldemartin/utils';\nimport type { Store } from 'pinia';\n\nimport ServiceBootError from '@aerogel/core/errors/ServiceBootError';\nimport { appNamespace } from '@aerogel/core/utils/app';\nimport { defineServiceStore } from '@aerogel/core/services/store';\nimport type { Unref } from '@aerogel/core/utils/vue';\n\nexport type ServiceState = Record<string, any>; // eslint-disable-line @typescript-eslint/no-explicit-any\nexport type DefaultServiceState = any; // eslint-disable-line @typescript-eslint/no-explicit-any\nexport type ServiceConstructor<T extends Service = Service> = Constructor<T> & typeof Service;\n\nexport type ComputedStateDefinition<TState extends ServiceState, TComputedState extends ServiceState> = {\n [K in keyof TComputedState]: (state: Unref<TState>) => TComputedState[K];\n} & ThisType<{\n readonly [K in keyof TComputedState]: TComputedState[K];\n}>;\n\nexport type StateWatchers<TService extends Service, TState extends ServiceState> = {\n [K in keyof TState]?: (this: TService, value: TState[K], oldValue: TState[K]) => unknown;\n};\n\nexport type ServiceWithState<\n State extends ServiceState = ServiceState,\n ComputedState extends ServiceState = {},\n ServiceStorage = Partial<State>,\n> = Constructor<Unref<State>> &\n Constructor<ComputedState> &\n Constructor<Service<Unref<State>, ComputedState, Unref<ServiceStorage>>>;\n\nexport function defineServiceState<\n State extends ServiceState = ServiceState,\n ComputedState extends ServiceState = {},\n ServiceStorage = Partial<State>,\n>(options: {\n name: string;\n initialState: State | (() => State);\n persist?: (keyof State)[];\n watch?: StateWatchers<Service, State>;\n computed?: ComputedStateDefinition<State, ComputedState>;\n serialize?: (state: Partial<State>) => ServiceStorage;\n restore?: (state: ServiceStorage) => Partial<State>;\n}): ServiceWithState<State, ComputedState, ServiceStorage> {\n return class extends Service<Unref<State>, ComputedState, ServiceStorage> {\n\n public static override persist = (options.persist as string[]) ?? [];\n\n protected override usesStore(): boolean {\n return true;\n }\n\n protected override getName(): string | null {\n return options.name ?? null;\n }\n\n protected override getInitialState(): Unref<State> {\n if (typeof options.initialState === 'function') {\n return options.initialState();\n }\n\n return Object.entries(options.initialState).reduce((state, [key, value]) => {\n try {\n value = structuredClone(value);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.warn(\n `Could not clone '${key}' state from ${this.getName()} service, ` +\n 'this may cause problems if you\\'re using multiple instances of the service ' +\n '(for example, in unit tests).\\n' +\n 'To fix this problem, declare your initialState as a function instead.',\n );\n }\n\n state[key as keyof State] = value;\n\n return state;\n }, {} as Unref<State>);\n }\n\n protected override getComputedStateDefinition(): ComputedStateDefinition<Unref<State>, ComputedState> {\n return (options.computed ?? {}) as ComputedStateDefinition<Unref<State>, ComputedState>;\n }\n\n protected override getStateWatchers(): StateWatchers<Service, Unref<State>> {\n return (options.watch ?? {}) as StateWatchers<Service, Unref<State>>;\n }\n\n protected override serializePersistedState(state: Partial<State>): ServiceStorage {\n return options.serialize?.(state) ?? (state as ServiceStorage);\n }\n\n protected override deserializePersistedState(state: ServiceStorage): Partial<State> {\n return options.restore?.(state) ?? (state as Partial<State>);\n }\n \n } as unknown as ServiceWithState<State, ComputedState, ServiceStorage>;\n}\n\nexport default class Service<\n State extends ServiceState = DefaultServiceState,\n ComputedState extends ServiceState = {},\n ServiceStorage = Partial<State>,\n> extends MagicObject {\n\n public static persist: string[] = [];\n\n protected _name: string;\n private _booted: PromisedValue<void>;\n private _computedStateKeys: Set<keyof State>;\n private _watchers: StateWatchers<Service, State>;\n private _store: Store<string, State, ComputedState, {}> | false;\n\n constructor() {\n super();\n\n const getters = this.getComputedStateDefinition();\n\n this._name = this.getName() ?? new.target.name;\n this._booted = new PromisedValue();\n this._computedStateKeys = new Set(Object.keys(getters));\n this._watchers = this.getStateWatchers();\n this._store =\n this.usesStore() &&\n defineServiceStore(this._name, {\n state: () => this.getInitialState(),\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getters: getters as any,\n });\n }\n\n public get booted(): PromisedValue<void> {\n return this._booted;\n }\n\n public override static<T extends typeof Service>(): T;\n public override static<T extends typeof Service, K extends keyof T>(property: K): T[K];\n public override static<T extends typeof Service, K extends keyof T>(property?: K): T | T[K] {\n return super.static<T, K>(property as K);\n }\n\n public launch(): Promise<void> {\n const handleError = (error: unknown) => this._booted.reject(new ServiceBootError(this._name, error));\n\n try {\n this.frameworkBoot()\n .then(() => this.boot())\n .then(() => this._booted.resolve())\n .catch(handleError);\n } catch (error) {\n handleError(error);\n }\n\n return this._booted;\n }\n\n public hasPersistedState(): boolean {\n return Storage.has(this.storageKey);\n }\n\n public hasState<P extends keyof State>(property: P): boolean {\n if (!this._store) {\n return false;\n }\n\n return property in this._store.$state || this._computedStateKeys.has(property);\n }\n\n public getState(): State;\n public getState<P extends keyof State>(property: P): State[P];\n public getState<P extends keyof State>(property?: P): State | State[P] {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const store = this._store as any;\n\n if (property) {\n return store ? store[property] : (undefined as State[P]);\n }\n\n return store ? store : ({} as State);\n }\n\n public setState<P extends keyof State>(property: P, value: State[P]): void;\n public setState(state: Partial<State>): void;\n public setState<P extends keyof State>(stateOrProperty: P | Partial<State>, value?: State[P]): void {\n if (!this._store) {\n return;\n }\n\n const update = typeof stateOrProperty === 'string' ? { [stateOrProperty]: value } : stateOrProperty;\n const old = objectOnly(this._store.$state as State, Object.keys(update));\n\n Object.assign(this._store.$state, update);\n this.onStateUpdated(update as Partial<State>, old as Partial<State>);\n }\n\n public updatePersistedState<T extends keyof State>(key: T): void;\n public updatePersistedState<T extends keyof State>(keys: T[]): void;\n public updatePersistedState<T extends keyof State>(keyOrKeys: T | T[]): void {\n if (!this._store) {\n return;\n }\n\n const keys = arrayFrom(keyOrKeys) as Array<keyof State>;\n const state = objectOnly(this._store.$state as State, keys);\n\n if (isEmpty(state)) {\n return;\n }\n\n this.onPersistentStateUpdated(state);\n }\n\n protected override __get(property: string): unknown {\n if (this.hasState(property)) {\n return this.getState(property);\n }\n\n return super.__get(property);\n }\n\n protected override __set(property: string, value: unknown): void {\n this.setState({ [property]: value } as Partial<State>);\n }\n\n protected get storageKey(): string {\n return `${appNamespace()}:${this._name}`;\n }\n\n protected onStateUpdated(update: Partial<State>, old: Partial<State>): void {\n const persisted = objectOnly(update, this.static('persist'));\n\n if (!isEmpty(persisted)) {\n this.onPersistentStateUpdated(persisted as Partial<State>);\n }\n\n for (const property in update) {\n const watcher = this._watchers[property] as Nullable<(value: unknown, oldValue: unknown) => unknown>;\n\n if (!watcher || update[property] === old[property]) {\n continue;\n }\n\n watcher.call(this, update[property], old[property]);\n }\n }\n\n protected onPersistentStateUpdated(persisted: Partial<State>): void {\n const storage = Storage.get<ServiceStorage>(this.storageKey);\n\n if (!storage) {\n return;\n }\n\n Storage.set(this.storageKey, {\n ...storage,\n ...this.serializePersistedState(objectDeepClone(persisted) as Partial<State>),\n });\n }\n\n protected usesStore(): boolean {\n return false;\n }\n\n protected getName(): string | null {\n return null;\n }\n\n protected getInitialState(): State {\n return {} as State;\n }\n\n protected getComputedStateDefinition(): ComputedStateDefinition<State, ComputedState> {\n return {} as ComputedStateDefinition<State, ComputedState>;\n }\n\n protected getStateWatchers(): StateWatchers<Service, State> {\n return {};\n }\n\n protected serializePersistedState(state: Partial<State>): ServiceStorage {\n return state as ServiceStorage;\n }\n\n protected deserializePersistedState(state: ServiceStorage): Partial<State> {\n return state as Partial<State>;\n }\n\n protected async frameworkBoot(): Promise<void> {\n this.restorePersistedState();\n }\n\n protected async boot(): Promise<void> {\n // Placeholder for overrides, don't place any functionality here.\n }\n\n protected restorePersistedState(): void {\n if (!this.usesStore() || isEmpty(this.static('persist'))) {\n return;\n }\n\n if (Storage.has(this.storageKey)) {\n const persisted = Storage.require<ServiceStorage>(this.storageKey);\n this.setState(this.deserializePersistedState(persisted));\n\n return;\n }\n\n Storage.set(this.storageKey, objectOnly(this.getState(), this.static('persist')));\n }\n\n protected requireStore(): Store<string, State, ComputedState, {}> {\n if (!this._store) {\n return fail(`Failed getting '${this._name}' store`);\n }\n\n return this._store;\n }\n\n}\n","import { arrayRemove, facade, fail, tap } from '@noeldemartin/utils';\n\nimport Service from '@aerogel/core/services/Service';\n\nexport interface EventsPayload {}\nexport interface EventListenerOptions {\n priority: EventListenerPriority;\n}\nexport type AerogelGlobalEvents = Partial<{ [Event in EventWithoutPayload]: () => unknown }> &\n Partial<{ [Event in EventWithPayload]: EventListener<EventsPayload[Event]> }>;\n\nexport type EventListener<T = unknown> = (payload: T) => unknown;\n\nexport type EventWithoutPayload = {\n [K in keyof EventsPayload]: EventsPayload[K] extends void ? K : never;\n}[keyof EventsPayload];\n\nexport type EventWithPayload = {\n [K in keyof EventsPayload]: EventsPayload[K] extends void ? never : K;\n}[keyof EventsPayload];\n\nexport const EventListenerPriorities = {\n Low: -256,\n Default: 0,\n High: 256,\n} as const;\n\nexport type EventListenerPriority = (typeof EventListenerPriorities)[keyof typeof EventListenerPriorities];\n\nexport class EventsService extends Service {\n\n private listeners: Record<string, { priorities: number[]; handlers: Record<number, EventListener[]> }> = {};\n\n protected override async boot(): Promise<void> {\n Object.entries(globalThis.__aerogelEvents__ ?? {}).forEach(([event, listener]) =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.on(event as any, listener as EventListener));\n }\n\n public emit<Event extends EventWithoutPayload>(event: Event): Promise<void>;\n public emit<Event extends EventWithPayload>(event: Event, payload: EventsPayload[Event]): Promise<void>;\n public async emit(event: string, payload?: unknown): Promise<void> {\n const listeners = this.listeners[event] ?? { priorities: [], handlers: {} };\n\n for (const priority of listeners.priorities) {\n await Promise.all(listeners.handlers[priority]?.map((listener) => listener(payload)) ?? []);\n }\n }\n\n /* eslint-disable max-len */\n public on<Event extends EventWithoutPayload>(event: Event, listener: () => unknown): () => void;\n public on<Event extends EventWithoutPayload>(event: Event, priority: EventListenerPriority, listener: () => unknown): () => void; // prettier-ignore\n public on<Event extends EventWithoutPayload>(event: Event, options: Partial<EventListenerOptions>, listener: () => unknown): () => void; // prettier-ignore\n public on<Event extends EventWithPayload>(event: Event, listener: EventListener<EventsPayload[Event]>): () => void | void; // prettier-ignore\n public on<Event extends EventWithPayload>(event: Event, priority: EventListenerPriority, listener: EventListener<EventsPayload[Event]>): () => void | void; // prettier-ignore\n public on<Event extends EventWithPayload>(event: Event, options: Partial<EventListenerOptions>, listener: EventListener<EventsPayload[Event]>): () => void | void; // prettier-ignore\n /* eslint-enable max-len */\n\n public on(\n event: string,\n optionsOrListener: Partial<EventListenerOptions> | EventListenerPriority | EventListener,\n listener?: EventListener,\n ): () => void {\n const options =\n typeof optionsOrListener === 'function'\n ? {}\n : typeof optionsOrListener === 'number'\n ? { priority: optionsOrListener }\n : optionsOrListener;\n const handler = typeof optionsOrListener === 'function' ? optionsOrListener : (listener as EventListener);\n\n this.registerListener(event, options, handler);\n\n return () => this.off(event, handler);\n }\n\n /* eslint-disable max-len */\n public once<Event extends EventWithoutPayload>(event: Event, listener: () => unknown): () => void;\n public once<Event extends EventWithoutPayload>(event: Event, options: Partial<EventListenerOptions>, listener: () => unknown): () => void; // prettier-ignore\n public once<Event extends EventWithPayload>(event: Event, listener: EventListener<EventsPayload[Event]>): () => void | void; // prettier-ignore\n public once<Event extends EventWithPayload>(event: Event, options: Partial<EventListenerOptions>, listener: EventListener<EventsPayload[Event]>): () => void | void; // prettier-ignore\n /* eslint-enable max-len */\n\n public once(\n event: string,\n optionsOrListener: Partial<EventListenerOptions> | EventListener,\n listener?: EventListener,\n ): () => void {\n let onceListener: EventListener | null = null;\n const options = typeof optionsOrListener === 'function' ? {} : optionsOrListener;\n const handler = typeof optionsOrListener === 'function' ? optionsOrListener : (listener as EventListener);\n\n return tap(\n () => onceListener && this.off(event, onceListener),\n (off) => {\n onceListener = (...args) => {\n off();\n\n return handler(...args);\n };\n\n this.registerListener(event, options, handler);\n },\n );\n }\n\n public off(event: string, listener: EventListener): void {\n const listeners = this.listeners[event];\n\n if (!listeners) {\n return;\n }\n\n const priorities = [...listeners.priorities];\n\n for (const priority of priorities) {\n arrayRemove(listeners.handlers[priority] ?? [], listener);\n\n if (listeners.handlers[priority]?.length === 0) {\n delete listeners.handlers[priority];\n arrayRemove(listeners.priorities, priority);\n }\n }\n\n if (listeners.priorities.length === 0) {\n delete this.listeners[event];\n }\n }\n\n protected registerListener(event: string, options: Partial<EventListenerOptions>, handler: EventListener): void {\n const priority = options.priority ?? 0;\n\n if (!(event in this.listeners)) {\n this.listeners[event] = { priorities: [], handlers: {} };\n }\n\n const priorities =\n this.listeners[event]?.priorities ?? fail<number[]>(`priorities missing for event '${event}'`);\n const handlers =\n this.listeners[event]?.handlers ??\n fail<Record<number, EventListener[]>>(`handlers missing for event '${event}'`);\n\n if (!priorities.includes(priority)) {\n priorities.push(priority);\n priorities.sort((a, b) => b - a);\n handlers[priority] = [];\n }\n\n handlers[priority]?.push(handler);\n }\n\n}\n\nexport default facade(EventsService);\n\ndeclare global {\n // eslint-disable-next-line no-var\n var __aerogelEvents__: AerogelGlobalEvents | undefined;\n}\n","import Aerogel from 'virtual:aerogel';\n\nimport { getEnv } from '@noeldemartin/utils';\nimport type { App, Component } from 'vue';\n\nimport { defineServiceState } from '@aerogel/core/services/Service';\nimport type { Plugin } from '@aerogel/core/plugins/Plugin';\n\nexport interface AppSetting {\n component: Component;\n priority: number;\n}\n\nexport function defineSettings<T extends AppSetting[]>(settings: T): T {\n return settings;\n}\n\nexport default defineServiceState({\n name: 'app',\n initialState: {\n plugins: {} as Record<string, Plugin>,\n instance: null as App | null,\n environment: getEnv() ?? 'development',\n version: Aerogel.version,\n sourceUrl: Aerogel.sourceUrl,\n settings: [] as AppSetting[],\n },\n computed: {\n development: (state) => state.environment === 'development',\n staging: (state) => state.environment === 'staging',\n testing: (state) => state.environment === 'test' || state.environment === 'testing',\n versionName(state): string {\n if (this.development) {\n return 'dev.' + Aerogel.sourceHash.toString().substring(0, 7);\n }\n\n if (this.staging) {\n return 'staging.' + Aerogel.sourceHash.toString().substring(0, 7);\n }\n\n return `v${state.version}`;\n },\n versionUrl(state): string {\n return (\n state.sourceUrl +\n (this.development || this.staging ? `/tree/${Aerogel.sourceHash}` : `/releases/tag/${this.versionName}`)\n );\n },\n },\n});\n","import Aerogel from 'virtual:aerogel';\n\nimport { PromisedValue, facade, forever, updateLocationQueryParameters } from '@noeldemartin/utils';\nimport { markRaw } from 'vue';\n\nimport Events from '@aerogel/core/services/Events';\nimport type { Plugin } from '@aerogel/core/plugins';\nimport type { AppSetting, Services } from '@aerogel/core/services';\n\nimport Service from './App.state';\n\nexport { defineSettings } from './App.state';\nexport type { AppSetting } from './App.state';\n\nexport class AppService extends Service {\n\n public readonly name = Aerogel.name;\n public readonly ready = new PromisedValue<void>();\n public readonly mounted = new PromisedValue<void>();\n\n public isReady(): boolean {\n return this.ready.isResolved();\n }\n\n public isMounted(): boolean {\n return this.mounted.isResolved();\n }\n\n public addSetting(setting: AppSetting): void {\n this.settings.push(markRaw(setting));\n }\n\n public async whenReady<T>(callback: () => T): Promise<T> {\n const result = await this.ready.then(callback);\n\n return result;\n }\n\n public async reload(queryParameters?: Record<string, string | undefined>): Promise<void> {\n queryParameters && updateLocationQueryParameters(queryParameters);\n\n location.reload();\n\n // Stall until the reload happens\n await forever();\n }\n\n public plugin<T extends Plugin = Plugin>(name: string): T | null {\n return (this.plugins[name] as T) ?? null;\n }\n\n public service<T extends keyof Services>(name: T): Services[T] | null {\n return this.instance?.config.globalProperties[name] ?? null;\n }\n\n protected override async boot(): Promise<void> {\n Events.once('application-ready', () => this.ready.resolve());\n Events.once('application-mounted', () => this.mounted.resolve());\n }\n\n}\n\nexport default facade(AppService);\n","import type { GetClosureArgs } from '@noeldemartin/utils';\n\nimport App from '@aerogel/core/services/App';\n\nimport type { Plugin } from './Plugin';\n\nexport * from './Plugin';\n\nexport function definePlugin<T extends Plugin>(plugin: T): T {\n return plugin;\n}\n\nexport async function installPlugins(plugins: Plugin[], ...args: GetClosureArgs<Plugin['install']>): Promise<void> {\n App.setState(\n 'plugins',\n plugins.reduce(\n (pluginsMap, plugin) => {\n if (plugin.name) {\n pluginsMap[plugin.name] = plugin;\n }\n\n return pluginsMap;\n },\n {} as Record<string, Plugin>,\n ),\n );\n\n await Promise.all(plugins.map((plugin) => plugin.install(...args)) ?? []);\n}\n","import { fail, toString } from '@noeldemartin/utils';\nimport { Comment, Static, Text, inject, reactive } from 'vue';\nimport type { Directive, InjectionKey, MaybeRef, Ref, UnwrapNestedRefs, VNode } from 'vue';\n\nexport type AcceptRefs<T> = { [K in keyof T]: T[K] | RefUnion<T[K]> };\nexport type RefUnion<T> = T extends infer R ? Ref<R> : never;\nexport type Unref<T> = { [K in keyof T]: T[K] extends MaybeRef<infer Value> ? Value : T[K] };\n\nfunction renderVNodeAttrs(node: VNode): string {\n return Object.entries(node.props ?? {}).reduce((attrs, [name, value]) => {\n return attrs + `${name}=\"${toString(value)}\"`;\n }, '');\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function defineDirective<TValue = any, TModifiers extends string = string>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n directive: Directive<any, TValue, TModifiers>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): Directive<any, TValue, TModifiers> {\n return directive;\n}\n\nexport function injectReactive<T extends object>(key: InjectionKey<T> | string): UnwrapNestedRefs<T> | undefined {\n const value = inject(key);\n\n return value ? reactive<T>(value) : undefined;\n}\n\nexport function injectReactiveOrFail<T extends object>(\n key: InjectionKey<T> | string,\n errorMessage?: string,\n): UnwrapNestedRefs<T> {\n return injectReactive(key) ?? fail(errorMessage ?? `Could not resolve '${toString(key)}' injection key`);\n}\n\nexport function injectOrFail<T>(key: InjectionKey<T> | string, errorMessage?: string): T {\n return inject(key) ?? fail(errorMessage ?? `Could not resolve '${toString(key)}' injection key`);\n}\n\nexport function renderVNode(node: VNode | string): string {\n if (typeof node === 'string') {\n return node;\n }\n\n if (node.type === Comment) {\n return '';\n }\n\n if (node.type === Text || node.type === Static) {\n return node.children as string;\n }\n\n if (node.type === 'br') {\n return '\\n\\n';\n }\n\n return `<${node.type} ${renderVNodeAttrs(node)}>${Array.from(node.children as Array<VNode | string>)\n .map(renderVNode)\n .join('')}</${node.type}>`;\n}\n","import { defineDirective } from '@aerogel/core/utils/vue';\nimport { tap } from '@noeldemartin/utils';\n\nconst resizeObservers: WeakMap<HTMLElement, ResizeObserver> = new WeakMap();\n\nexport type MeasureDirectiveValue =\n | MeasureDirectiveListener\n | {\n css?: boolean;\n watch?: boolean;\n };\n\nexport type MeasureDirectiveModifiers = 'css' | 'watch';\n\nexport interface ElementSize {\n width: number;\n height: number;\n}\n\nexport type MeasureDirectiveListener = (size: ElementSize) => unknown;\n\nexport default defineDirective<MeasureDirectiveValue, MeasureDirectiveModifiers>({\n mounted(element: HTMLElement, { value, modifiers }) {\n const listener = typeof value === 'function' ? (value as MeasureDirectiveListener) : null;\n const update = () => {\n const sizes = element.getBoundingClientRect();\n\n if (modifiers.css) {\n element.style.setProperty('--width', `${sizes.width}px`);\n element.style.setProperty('--height', `${sizes.height}px`);\n }\n\n listener?.({ width: sizes.width, height: sizes.height });\n };\n\n if (modifiers.watch) {\n resizeObservers.set(element, tap(new ResizeObserver(update)).observe(element));\n }\n\n update();\n },\n unmounted(element) {\n resizeObservers.get(element)?.unobserve(element);\n resizeObservers.delete(element);\n },\n});\n","import clsx from 'clsx';\nimport { unref } from 'vue';\nimport { cva } from 'class-variance-authority';\nimport { twMerge } from 'tailwind-merge';\nimport type { ClassValue } from 'clsx';\nimport type { PropType } from 'vue';\nimport type { GetClosureArgs, GetClosureResult } from '@noeldemartin/utils';\n\nexport type CVAConfig<T> = NonNullable<GetClosureArgs<typeof cva<T>>[1]>;\nexport type CVAProps<T> = NonNullable<GetClosureArgs<GetClosureResult<typeof cva<T>>>[0]>;\nexport type Variants<T extends Record<string, string | boolean>> = Required<{\n [K in keyof T]: Exclude<T[K], undefined> extends string\n ? { [key in Exclude<T[K], undefined>]: string | null }\n : { true: string | null; false: string | null };\n}>;\n\nexport type ComponentPropDefinitions<T> = {\n [K in keyof T]: {\n type?: PropType<T[K]>;\n default: T[K] | (() => T[K]) | null;\n };\n};\n\nexport type PickComponentProps<TValues, TDefinitions> = {\n [K in keyof TValues]: K extends keyof TDefinitions ? TValues[K] : never;\n};\n\nexport function variantClasses<T>(\n value: { baseClasses?: string } & CVAProps<T>,\n config: { baseClasses?: string } & CVAConfig<T>,\n): string {\n const { baseClasses: valueBaseClasses, ...values } = value;\n const { baseClasses: configBaseClasses, ...configs } = config;\n const variants = cva(configBaseClasses, configs as CVAConfig<T>);\n\n return classes(variants(values as CVAProps<T>), unref(valueBaseClasses));\n}\n\nexport function classes(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","import { onUnmounted } from 'vue';\n\nimport Events from '@aerogel/core/services/Events';\nimport type {\n EventListener,\n EventWithPayload,\n EventWithoutPayload,\n EventsPayload,\n} from '@aerogel/core/services/Events';\n\nexport function useEvent<Event extends EventWithoutPayload>(event: Event, listener: () => unknown): void;\nexport function useEvent<Event extends EventWithPayload>(\n event: Event,\n listener: EventListener<EventsPayload[Event]>\n): void;\n\nexport function useEvent(event: string, listener: EventListener): void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const unsubscribe = Events.on(event as any, listener);\n\n onUnmounted(() => unsubscribe());\n}\n","import { arrayFrom } from '@noeldemartin/utils';\n\nimport type { FormFieldDefinition } from '@aerogel/core/forms/FormController';\n\nconst builtInRules: Record<string, FormFieldValidator> = {\n required: (value) => (value ? undefined : 'required'),\n};\n\nfunction isValidType(value: unknown, definition: FormFieldDefinition): boolean {\n if (value === undefined || value === null) {\n return true;\n }\n\n switch (definition.type) {\n case 'string':\n return typeof value === 'string';\n case 'enum':\n return !!definition.values?.includes(value);\n case 'number':\n return typeof value === 'number';\n case 'boolean':\n return typeof value === 'boolean';\n case 'date':\n return value instanceof Date;\n case 'object':\n return typeof value === 'object';\n }\n}\n\nexport type FormFieldValidator<T = unknown> = (value: T) => string | string[] | undefined;\n\nexport const validators: Record<string, FormFieldValidator> = { ...builtInRules };\n\nexport function defineFormValidationRule<T>(rule: string, validator: FormFieldValidator<T>): void {\n validators[rule] = validator as FormFieldValidator;\n}\n\nexport function validateType(value: unknown, definition: FormFieldDefinition): string[] {\n if (isValidType(value, definition)) {\n return [];\n }\n\n return ['invalid_value'];\n}\n\nexport function validate(value: unknown, rule: string): string[] {\n const errors = validators[rule]?.(value);\n\n return errors ? arrayFrom(errors) : [];\n}\n","import { computed, nextTick, reactive, readonly, ref } from 'vue';\nimport { MagicObject, arrayRemove, fail, toString } from '@noeldemartin/utils';\nimport type { ComputedRef, DeepReadonly, Ref, UnwrapNestedRefs } from 'vue';\n\nimport { validate, validateType } from './validation';\n\nexport const __valueType: unique symbol = Symbol();\n\nexport interface FormFieldDefinition<\n TType extends FormFieldType = FormFieldType,\n TRules extends string = string,\n TValueType = unknown,\n> {\n type: TType;\n trim?: boolean;\n default?: GetFormFieldValue<TType>;\n rules?: TRules;\n values?: readonly TValueType[];\n [__valueType]?: TValueType;\n}\n\nexport type FormFieldType = 'string' | 'enum' | 'number' | 'boolean' | 'object' | 'date';\nexport type FormFieldValue = GetFormFieldValue<FormFieldType>;\nexport type FormFieldDefinitions = Record<string, FormFieldDefinition>;\n\nexport type FormData<T> = {\n -readonly [k in keyof T]: T[k] extends FormFieldDefinition<infer TType, infer TRules, infer TValueType>\n ? TRules extends 'required'\n ? GetFormFieldValue<TType, TValueType>\n : GetFormFieldValue<TType, TValueType> | null\n : never;\n};\n\nexport type FormErrors<T> = {\n [k in keyof T]: string[] | null;\n};\n\nexport type GetFormFieldValue<TType, TValueType = unknown> = TType extends 'string'\n ? string\n : TType extends 'number'\n ? number\n : TType extends 'boolean'\n ? boolean\n : TType extends 'enum'\n ? TValueType\n : TType extends 'object'\n ? TValueType extends object\n ? TValueType\n : object\n : TType extends 'date'\n ? Date\n : never;\n\nconst validForms: WeakMap<FormController, ComputedRef<boolean>> = new WeakMap();\n\nexport type SubmitFormListener = () => unknown;\nexport type FocusFormListener = (input: string) => unknown;\n\nexport default class FormController<Fields extends FormFieldDefinitions = FormFieldDefinitions> extends MagicObject {\n\n public errors: DeepReadonly<UnwrapNestedRefs<FormErrors<Fields>>>;\n\n private _fields: Fields;\n private _data: FormData<Fields>;\n private _submitted: Ref<boolean>;\n private _errors: FormErrors<Fields>;\n private _listeners: { focus?: FocusFormListener[]; submit?: SubmitFormListener[] } = {};\n\n constructor(fields: Fields) {\n super();\n\n this._fields = fields;\n this._submitted = ref(false);\n this._data = this.getInitialData(fields);\n this._errors = this.getInitialErrors(fields);\n\n validForms.set(\n this,\n computed(() => !Object.values(this._errors).some((error) => error !== null)),\n );\n\n this.errors = readonly(this._errors);\n }\n\n public get valid(): boolean {\n return !!validForms.get(this)?.value;\n }\n\n public get submitted(): boolean {\n return this._submitted.value;\n }\n\n public setFieldValue<T extends keyof Fields>(field: T, value: FormData<Fields>[T]): void {\n const definition =\n this._fields[field] ?? fail<FormFieldDefinition>(`Trying to set undefined '${toString(field)}' field`);\n\n this._data[field] =\n definition.type === 'string' && (definition.trim ?? true)\n ? (toString(value).trim() as FormData<Fields>[T])\n : value;\n\n if (this._submitted.value) {\n this.validate();\n }\n }\n\n public getFieldValue<T extends keyof Fields>(field: T): GetFormFieldValue<Fields[T]['type']> {\n return this._data[field] as unknown as GetFormFieldValue<Fields[T]['type']>;\n }\n\n public getFieldRules<T extends keyof Fields>(field: T): string[] {\n return this._fields[field]?.rules?.split('|') ?? [];\n }\n\n public getFieldType<T extends keyof Fields>(field: T): FormFieldType | null {\n return this._fields[field]?.type ?? null;\n }\n\n public data(): FormData<Fields> {\n return { ...this._data };\n }\n\n public validate(): boolean {\n const errors = Object.entries(this._fields).reduce(\n (formErrors, [name, definition]) => {\n formErrors[name] = this.getFieldErrors(name, definition);\n\n return formErrors;\n },\n {} as Record<string, string[] | null>,\n );\n\n this.resetErrors(errors);\n\n return this.valid;\n }\n\n public reset(options: { keepData?: boolean; keepErrors?: boolean } = {}): void {\n this._submitted.value = false;\n\n options.keepData || this.resetData();\n options.keepErrors || this.resetErrors();\n }\n\n public submit(): boolean {\n this._submitted.value = true;\n\n const valid = this.validate();\n\n valid && this._listeners['submit']?.forEach((listener) => listener());\n\n return valid;\n }\n\n public on(event: 'focus', listener: FocusFormListener): () => void;\n public on(event: 'submit', listener: SubmitFormListener): () => void;\n public on(event: 'focus' | 'submit', listener: FocusFormListener | SubmitFormListener): () => void {\n this._listeners[event] ??= [];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this._listeners[event]?.push(listener as any);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return () => this.off(event as any, listener);\n }\n\n public off(event: 'focus', listener: FocusFormListener): void;\n public off(event: 'submit', listener: SubmitFormListener): void;\n public off(event: 'focus' | 'submit', listener: FocusFormListener | SubmitFormListener): void {\n arrayRemove(this._listeners[event] ?? [], listener);\n }\n\n public async focus(input: string): Promise<void> {\n await nextTick();\n\n this._listeners['focus']?.forEach((listener) => listener(input));\n }\n\n protected override __get(property: string): unknown {\n if (!(property in this._fields)) {\n return super.__get(property);\n }\n\n return this.getFieldValue(property);\n }\n\n protected override __set(property: string, value: unknown): void {\n if (!(property in this._fields)) {\n super.__set(property, value);\n\n return;\n }\n\n this.setFieldValue(property, value as FormData<Fields>[string]);\n }\n\n private getFieldErrors(name: keyof Fields, definition: FormFieldDefinition): string[] | null {\n const errors = [];\n const value = this._data[name];\n const rules = definition.rules?.split('|') ?? [];\n\n errors.push(...validateType(value, definition));\n\n for (const rule of rules) {\n if (rule !== 'required' && (value === null || value === undefined)) {\n continue;\n }\n\n errors.push(...validate(value, rule));\n }\n\n return errors.length > 0 ? errors : null;\n }\n\n private getInitialData(fields: Fields): FormData<Fields> {\n if (this.static().isConjuring()) {\n return {} as FormData<Fields>;\n }\n\n const data = Object.entries(fields).reduce((initialData, [name, definition]) => {\n initialData[name as keyof Fields] = (definition.default ?? null) as FormData<Fields>[keyof Fields];\n\n return initialData;\n }, {} as FormData<Fields>);\n\n return reactive(data) as FormData<Fields>;\n }\n\n private getInitialErrors(fields: Fields): FormErrors<Fields> {\n if (this.static().isConjuring()) {\n return {} as FormErrors<Fields>;\n }\n\n const errors = Object.keys(fields).reduce((formErrors, name) => {\n formErrors[name as keyof Fields] = null;\n\n return formErrors;\n }, {} as FormErrors<Fields>);\n\n return reactive(errors) as FormErrors<Fields>;\n }\n\n private resetData(): void {\n for (const [name, field] of Object.entries(this._fields)) {\n this._data[name as keyof Fields] = (field.default ?? null) as FormData<Fields>[keyof Fields];\n }\n }\n\n private resetErrors(errors?: Record<string, string[] | null>): void {\n Object.keys(this._errors).forEach((key) => delete this._errors[key as keyof Fields]);\n\n errors && Object.assign(this._errors, errors);\n }\n\n}\n","import { objectWithout } from '@noeldemartin/utils';\nimport { computed, inject, onUnmounted, useAttrs } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport type { ComputedRef } from 'vue';\nimport type { Nullable } from '@noeldemartin/utils';\n\nimport FormController from '@aerogel/core/forms/FormController';\nimport type { FormData, FormFieldDefinitions } from '@aerogel/core/forms/FormController';\n\nexport function onFormFocus(input: { name: Nullable<string> }, listener: () => unknown): void {\n const form = inject<FormController | null>('form', null);\n const stop = form?.on('focus', (name) => input.name === name && listener());\n\n onUnmounted(() => stop?.());\n}\n\nexport function useForm<const T extends FormFieldDefinitions>(fields: T): FormController<T> & FormData<T> {\n return new FormController(fields) as FormController<T> & FormData<T>;\n}\n\nexport function useInputAttrs(): [ComputedRef<{}>, ComputedRef<ClassValue>] {\n const attrs = useAttrs();\n const classes = computed(() => attrs.class);\n const inputAttrs = computed(() => objectWithout(attrs, 'class'));\n\n return [inputAttrs, classes as ComputedRef<ClassValue>];\n}\n","import { noop } from '@noeldemartin/utils';\nimport { onMounted, onUnmounted } from 'vue';\n\nexport function onCleanMounted(operation: () => Function): void {\n let cleanUp: Function = noop;\n\n onMounted(() => (cleanUp = operation()));\n onUnmounted(() => cleanUp());\n}\n","import { reactive, toRaw, watch } from 'vue';\nimport { Storage } from '@noeldemartin/utils';\nimport type { UnwrapNestedRefs } from 'vue';\n\nexport function persistent<T extends object>(name: string, defaults: T): UnwrapNestedRefs<T> {\n const store = reactive<T>(Storage.get<T>(name) ?? defaults);\n\n watch(store, () => Storage.set(name, toRaw(store)));\n\n return store;\n}\n","import { debounce } from '@noeldemartin/utils';\nimport { computed, ref, watch, watchEffect } from 'vue';\nimport type { ComputedGetter, ComputedRef, Ref } from 'vue';\n\nexport interface ComputedDebounceOptions<T> {\n initial?: T;\n delay?: number;\n}\n\nexport function computedAsync<T>(getter: () => Promise<T>): Ref<T | undefined> {\n const result = ref<T>();\n const asyncValue = computed(getter);\n\n watch(asyncValue, async () => (result.value = await asyncValue.value), { immediate: true });\n\n return result;\n}\n\nexport function computedDebounce<T>(options: ComputedDebounceOptions<T>, getter: ComputedGetter<T>): ComputedRef<T>;\nexport function computedDebounce<T>(getter: ComputedGetter<T>): ComputedRef<T | null>;\nexport function computedDebounce<T>(\n optionsOrGetter: ComputedGetter<T> | ComputedDebounceOptions<T>,\n inputGetter?: ComputedGetter<T>,\n): ComputedRef<T> {\n const inputOptions = inputGetter ? (optionsOrGetter as ComputedDebounceOptions<T>) : {};\n const getter = inputGetter ?? (optionsOrGetter as ComputedGetter<T>);\n const state = ref(inputOptions.initial ?? null);\n const update = debounce((value) => (state.value = value), inputOptions.delay ?? 300);\n\n watchEffect(() => update(getter()));\n\n return state as unknown as ComputedRef<T>;\n}\n","import DOMPurify from 'dompurify';\nimport { stringMatchAll, tap } from '@noeldemartin/utils';\nimport { Renderer, marked } from 'marked';\n\nlet router: MarkdownRouter | null = null;\n\nfunction makeRenderer(): Renderer {\n return tap(new Renderer(), (renderer) => {\n renderer.link = function(link) {\n const defaultLink = Renderer.prototype.link.apply(this, [link]);\n\n if (!link.href.startsWith('#')) {\n return defaultLink.replace('<a', '<a target=\"_blank\"');\n }\n\n return defaultLink;\n };\n });\n}\n\nfunction renderActionLinks(html: string): string {\n const matches = stringMatchAll<3>(html, /<a[^>]*href=\"#action:([^\"]+)\"[^>]*>([^<]+)<\\/a>/g);\n\n for (const [link, action, text] of matches) {\n html = html.replace(link, `<button type=\"button\" data-markdown-action=\"${action}\">${text}</button>`);\n }\n\n return html;\n}\n\nfunction renderRouteLinks(html: string): string {\n const matches = stringMatchAll<3>(html, /<a[^>]*href=\"#route:([^\"]+)\"[^>]*>([^<]+)<\\/a>/g);\n\n for (const [link, route, text] of matches) {\n const url = router?.resolve(route) ?? route;\n\n html = html.replace(link, `<a data-markdown-route=\"${route}\" href=\"${url}\">${text}</a>`);\n }\n\n return html;\n}\n\nexport interface MarkdownRouter {\n resolve(route: string): string;\n visit(route: string): Promise<void>;\n}\n\nexport function getMarkdownRouter(): MarkdownRouter | null {\n return router;\n}\n\nexport function setMarkdownRouter(markdownRouter: MarkdownRouter): void {\n router = markdownRouter;\n}\n\nexport function renderMarkdown(markdown: string): string {\n let html = marked(markdown, { renderer: makeRenderer(), async: false });\n\n html = safeHtml(html);\n html = renderActionLinks(html);\n html = renderRouteLinks(html);\n\n return html;\n}\n\nexport function safeHtml(html: string): string {\n return DOMPurify.sanitize(html, { ADD_ATTR: ['target'] });\n}\n","import { safeHtml } from '@aerogel/core/utils';\nimport { defineDirective } from '@aerogel/core/utils/vue';\n\nexport type SafeHTMLDirectiveValue = string;\n\nexport default defineDirective<SafeHTMLDirectiveValue>({\n mounted(element: HTMLElement, { value }) {\n element.innerHTML = safeHtml(value);\n },\n});\n","import type { Directive } from 'vue';\n\nimport { definePlugin } from '@aerogel/core/plugins';\n\nimport measure from './measure';\nimport safeHtml from './safe-html';\n\nconst builtInDirectives: Record<string, Directive> = {\n 'measure': measure,\n 'safe-html': safeHtml,\n};\n\nexport * from './measure';\n\nexport default definePlugin({\n install(app, options) {\n const directives = {\n ...builtInDirectives,\n ...options.directives,\n };\n\n for (const [name, directive] of Object.entries(directives)) {\n app.directive(name, directive);\n }\n },\n});\n\ndeclare module '@aerogel/core/bootstrap/options' {\n export interface AerogelOptions {\n directives?: Record<string, Directive>;\n }\n}\n\ndeclare module 'vue' {\n interface ComponentCustomDirectives {\n measure: Directive<string, string>;\n }\n}\n","import { PromisedValue, facade, tap } from '@noeldemartin/utils';\n\nimport Service from '@aerogel/core/services/Service';\n\nexport class CacheService extends Service {\n\n private cache?: PromisedValue<Cache> = undefined;\n\n public async get(url: string): Promise<Response | null> {\n const cache = await this.open();\n const response = await cache.match(url);\n\n return response ?? null;\n }\n\n public async store(url: string, response: Response): Promise<void> {\n const cache = await this.open();\n\n await cache.put(url, response);\n }\n\n public async replace(url: string, response: Response): Promise<void> {\n const cache = await this.open();\n const keys = await cache.keys(url);\n\n if (keys.length === 0) {\n return;\n }\n\n await cache.put(url, response);\n }\n\n protected async open(): Promise<Cache> {\n return (this.cache =\n this.cache ??\n tap(new PromisedValue<Cache>(), (cache) => {\n caches.open('app').then((instance) => cache.resolve(instance));\n }));\n }\n\n}\n\nexport default facade(CacheService);\n","import { facade } from '@noeldemartin/utils';\n\nimport Events from '@aerogel/core/services/Events';\nimport Service from '@aerogel/core/services/Service';\n\nexport class StorageService extends Service {\n\n public async purge(): Promise<void> {\n await Events.emit('purge-storage');\n }\n\n}\n\nexport default facade(StorageService);\n\ndeclare module '@aerogel/core/services/Events' {\n export interface EventsPayload {\n 'purge-storage': void;\n }\n}\n","import { objectOnly } from '@noeldemartin/utils';\n\nexport type Replace<\n TOriginal extends Record<string, unknown>,\n TReplacements extends Partial<Record<keyof TOriginal, unknown>>,\n> = {\n [K in keyof TOriginal]: TReplacements extends Record<K, infer Replacement> ? Replacement : TOriginal[K];\n};\n\nexport function replaceExisting<\n TOriginal extends Record<string, unknown>,\n TReplacements extends Partial<Record<keyof TOriginal, unknown>>,\n>(original: TOriginal, replacements: TReplacements): Replace<TOriginal, TReplacements> {\n return {\n ...original,\n ...objectOnly(replacements, Object.keys(original)),\n } as Replace<TOriginal, TReplacements>;\n}\n","import type { App as AppInstance } from 'vue';\n\nimport { definePlugin } from '@aerogel/core/plugins';\nimport { isDevelopment, isTesting } from '@noeldemartin/utils';\n\nimport App from './App';\nimport Cache from './Cache';\nimport Events from './Events';\nimport Service from './Service';\nimport Storage from './Storage';\nimport { getPiniaStore } from './store';\nimport type { AppSetting } from './App.state';\n\nexport * from './App';\nexport * from './Cache';\nexport * from './Events';\nexport * from './Service';\nexport * from './store';\nexport * from './utils';\n\nexport { App, Cache, Events, Storage, Service };\n\nconst defaultServices = {\n $app: App,\n $events: Events,\n $storage: Storage,\n};\n\nexport type DefaultServices = typeof defaultServices;\n\nexport interface Services extends DefaultServices {}\n\nexport async function bootServices(app: AppInstance, services: Record<string, Service>): Promise<void> {\n await Promise.all(\n Object.entries(services).map(async ([name, service]) => {\n await service\n .launch()\n .catch((error) => app.config.errorHandler?.(error, null, `Failed launching ${name}.`));\n }),\n );\n\n Object.assign(app.config.globalProperties, services);\n\n if (isDevelopment() || isTesting()) {\n Object.assign(globalThis, services);\n }\n}\n\nexport default definePlugin({\n async install(app, options) {\n const services = {\n ...defaultServices,\n ...options.services,\n };\n\n app.use(getPiniaStore());\n options.settings?.forEach((setting) => App.addSetting(setting));\n\n await bootServices(app, services);\n },\n});\n\ndeclare module '@aerogel/core/bootstrap/options' {\n export interface AerogelOptions {\n services?: Record<string, Service>;\n settings?: AppSetting[];\n }\n}\n\ndeclare module 'vue' {\n interface ComponentCustomProperties extends Services {}\n}\n","export const MOBILE_BREAKPOINT = 768;\n\nexport const Layouts = {\n Mobile: 'mobile',\n Desktop: 'desktop',\n} as const;\n\nexport type Layout = (typeof Layouts)[keyof typeof Layouts];\n\nexport function getCurrentLayout(): Layout {\n if (globalThis.innerWidth > MOBILE_BREAKPOINT) {\n return Layouts.Desktop;\n }\n\n return Layouts.Mobile;\n}\n","import type { Component } from 'vue';\n\nimport { defineServiceState } from '@aerogel/core/services/Service';\n\nimport { Layouts, getCurrentLayout } from './utils';\n\nexport interface UIModal<T = unknown> {\n id: string;\n properties: Record<string, unknown>;\n component: Component;\n closing: boolean;\n beforeClose: Promise<T | undefined>;\n afterClose: Promise<T | undefined>;\n}\n\nexport interface UIToast {\n id: string;\n component: Component;\n properties: Record<string, unknown>;\n}\n\nexport default defineServiceState({\n name: 'ui',\n initialState: {\n modals: [] as UIModal[],\n toasts: [] as UIToast[],\n layout: getCurrentLayout(),\n },\n computed: {\n desktop: ({ layout }) => layout === Layouts.Desktop,\n mobile: ({ layout }) => layout === Layouts.Mobile,\n openModals: ({ modals }) => modals.filter(({ closing }) => !closing),\n },\n});\n","import { after, facade, fail, isDevelopment, required, uuid } from '@noeldemartin/utils';\nimport { markRaw, nextTick, unref } from 'vue';\nimport type { ComponentExposed, ComponentProps } from 'vue-component-type-helpers';\nimport type { Component } from 'vue';\nimport type { ClosureArgs } from '@noeldemartin/utils';\n\nimport App from '@aerogel/core/services/App';\nimport Events from '@aerogel/core/services/Events';\nimport type {\n ConfirmModalCheckboxes,\n ConfirmModalExpose,\n ConfirmModalProps,\n} from '@aerogel/core/components/contracts/ConfirmModal';\nimport type {\n ErrorReportModalExpose,\n ErrorReportModalProps,\n} from '@aerogel/core/components/contracts/ErrorReportModal';\nimport type { AcceptRefs } from '@aerogel/core/utils';\nimport type { AlertModalExpose, AlertModalProps } from '@aerogel/core/components/contracts/AlertModal';\nimport type { ButtonVariant } from '@aerogel/core/components/contracts/Button';\nimport type { LoadingModalExpose, LoadingModalProps } from '@aerogel/core/components/contracts/LoadingModal';\nimport type { PromptModalExpose, PromptModalProps } from '@aerogel/core/components/contracts/PromptModal';\nimport type { ToastAction, ToastExpose, ToastProps, ToastVariant } from '@aerogel/core/components/contracts/Toast';\n\nimport Service from './UI.state';\nimport { MOBILE_BREAKPOINT, getCurrentLayout } from './utils';\nimport type { UIModal, UIToast } from './UI.state';\n\ninterface ModalCallbacks<T = unknown> {\n willClose(result: T | undefined): void;\n hasClosed(result: T | undefined): void;\n}\n\nexport type ModalResult<T> = ModalExposeResult<ComponentExposed<T>>;\nexport type ModalExposeResult<T> = T extends { close(result?: infer Result): Promise<void> } ? Result : unknown;\nexport type UIComponent<Props = {}, Exposed = {}> = { new (...args: ClosureArgs): Exposed & { $props: Props } };\n\nexport interface UIComponents {\n 'alert-modal': UIComponent<AlertModalProps, AlertModalExpose>;\n 'confirm-modal': UIComponent<ConfirmModalProps, ConfirmModalExpose>;\n 'error-report-modal': UIComponent<ErrorReportModalProps, ErrorReportModalExpose>;\n 'loading-modal': UIComponent<LoadingModalProps, LoadingModalExpose>;\n 'prompt-modal': UIComponent<PromptModalProps, PromptModalExpose>;\n 'router-link': UIComponent;\n 'startup-crash': UIComponent;\n toast: UIComponent<ToastProps, ToastExpose>;\n}\n\nexport interface UIModalContext {\n modal: UIModal;\n childIndex?: number;\n}\n\nexport type ConfirmOptions = AcceptRefs<{\n acceptText?: string;\n acceptVariant?: ButtonVariant;\n cancelText?: string;\n cancelVariant?: ButtonVariant;\n actions?: Record<string, () => unknown>;\n required?: boolean;\n}>;\n\nexport type LoadingOptions = AcceptRefs<{\n title?: string;\n message?: string;\n progress?: number;\n delay?: number;\n}>;\n\nexport interface ConfirmOptionsWithCheckboxes<T extends ConfirmModalCheckboxes = ConfirmModalCheckboxes>\n extends ConfirmOptions {\n checkboxes?: T;\n}\n\nexport type PromptOptions = AcceptRefs<{\n label?: string;\n defaultValue?: string;\n placeholder?: string;\n acceptText?: string;\n acceptVariant?: ButtonVariant;\n cancelText?: string;\n cancelVariant?: ButtonVariant;\n trim?: boolean;\n}>;\n\nexport interface ToastOptions {\n component?: Component;\n variant?: ToastVariant;\n actions?: ToastAction[];\n}\n\nexport class UIService extends Service {\n\n private modalCallbacks: Record<string, Partial<ModalCallbacks>> = {};\n private components: Partial<UIComponents> = {};\n\n public registerComponent<T extends keyof UIComponents>(name: T, component: UIComponents[T]): void {\n this.components[name] = component;\n }\n\n public resolveComponent<T extends keyof UIComponents>(name: T): UIComponents[T] | null {\n return this.components[name] ?? null;\n }\n\n public requireComponent<T extends keyof UIComponents>(name: T): UIComponents[T] {\n return this.resolveComponent(name) ?? fail(`UI Component '${name}' is not defined!`);\n }\n\n public alert(message: string): void;\n public alert(title: string, message: string): void;\n public alert(messageOrTitle: string, message?: string): void {\n const getProperties = (): AlertModalProps => {\n if (typeof message !== 'string') {\n return { message: messageOrTitle };\n }\n\n return {\n title: messageOrTitle,\n message,\n };\n };\n\n this.modal(this.requireComponent('alert-modal'), getProperties());\n }\n\n /* eslint-disable max-len */\n public async confirm(message: string, options?: ConfirmOptions): Promise<boolean>;\n public async confirm(title: string, message: string, options?: ConfirmOptions): Promise<boolean>;\n public async confirm<T extends ConfirmModalCheckboxes>(message: string, options?: ConfirmOptionsWithCheckboxes<T>): Promise<[boolean, Record<keyof T, boolean>]>; // prettier-ignore\n public async confirm<T extends ConfirmModalCheckboxes>(title: string, message: string, options?: ConfirmOptionsWithCheckboxes<T>): Promise<[boolean, Record<keyof T, boolean>]>; // prettier-ignore\n /* eslint-enable max-len */\n\n public async confirm(\n messageOrTitle: string,\n messageOrOptions?: string | ConfirmOptions | ConfirmOptionsWithCheckboxes,\n options?: ConfirmOptions | ConfirmOptionsWithCheckboxes,\n ): Promise<boolean | [boolean, Record<string, boolean>]> {\n const getProperties = (): AcceptRefs<ConfirmModalProps> => {\n if (typeof messageOrOptions !== 'string') {\n return {\n ...(messageOrOptions ?? {}),\n message: messageOrTitle,\n required: !!messageOrOptions?.required,\n };\n }\n\n return {\n ...(options ?? {}),\n title: messageOrTitle,\n message: messageOrOptions,\n required: !!options?.required,\n };\n };\n\n const properties = getProperties();\n const result = await this.modalForm(this.requireComponent('confirm-modal'), properties);\n const confirmed = typeof result === 'object' ? result[0] : (result ?? false);\n const checkboxes =\n typeof result === 'object'\n ? result[1]\n : Object.entries(properties.checkboxes ?? {}).reduce(\n (values, [checkbox, { default: defaultValue }]) => ({\n [checkbox]: defaultValue ?? false,\n ...values,\n }),\n {} as Record<string, boolean>,\n );\n\n for (const [name, checkbox] of Object.entries(properties.checkboxes ?? {})) {\n if (!checkbox.required || checkboxes[name]) {\n continue;\n }\n\n if (confirmed && isDevelopment()) {\n // eslint-disable-next-line no-console\n console.warn(`Confirmed confirm modal was suppressed because required '${name}' checkbox was missing`);\n }\n\n return [false, checkboxes];\n }\n\n return 'checkboxes' in properties ? [confirmed, checkboxes] : confirmed;\n }\n\n public async prompt(message: string, options?: PromptOptions): Promise<string | null>;\n public async prompt(title: string, message: string, options?: PromptOptions): Promise<string | null>;\n public async prompt(\n messageOrTitle: string,\n messageOrOptions?: string | PromptOptions,\n options?: PromptOptions,\n ): Promise<string | null> {\n const trim = options?.trim ?? true;\n const getProperties = (): PromptModalProps => {\n if (typeof messageOrOptions !== 'string') {\n return {\n message: messageOrTitle,\n ...(messageOrOptions ?? {}),\n } as PromptModalProps;\n }\n\n return {\n title: messageOrTitle,\n message: messageOrOptions,\n ...(options ?? {}),\n } as PromptModalProps;\n };\n\n const rawResult = await this.modalForm(this.requireComponent('prompt-modal'), getProperties());\n const result = trim && typeof rawResult === 'string' ? rawResult?.trim() : rawResult;\n\n return result ?? null;\n }\n\n public async loading<T>(operation: Promise<T> | (() => T)): Promise<T>;\n public async loading<T>(message: string, operation: Promise<T> | (() => T)): Promise<T>;\n public async loading<T>(options: LoadingOptions, operation: Promise<T> | (() => T)): Promise<T>;\n public async loading<T>(\n operationOrMessageOrOptions: string | LoadingOptions | Promise<T> | (() => T),\n operation?: Promise<T> | (() => T),\n ): Promise<T> {\n const processOperation = (o: Promise<T> | (() => T)) => (typeof o === 'function' ? Promise.resolve(o()) : o);\n const processArgs = (): {\n operationPromise: Promise<T>;\n props?: AcceptRefs<LoadingModalProps>;\n delay?: number;\n } => {\n if (typeof operationOrMessageOrOptions === 'string') {\n return {\n props: { message: operationOrMessageOrOptions },\n operationPromise: processOperation(operation as Promise<T> | (() => T)),\n };\n }\n\n if (typeof operationOrMessageOrOptions === 'function' || operationOrMessageOrOptions instanceof Promise) {\n return { operationPromise: processOperation(operationOrMessageOrOptions) };\n }\n\n const { delay, ...props } = operationOrMessageOrOptions;\n\n return {\n props,\n delay: unref(delay),\n operationPromise: processOperation(operation as Promise<T> | (() => T)),\n };\n };\n\n let delayed = false;\n const { operationPromise, props, delay } = processArgs();\n\n delay && (await Promise.race([after({ ms: delay }).then(() => (delayed = true)), operationPromise]));\n\n if (delay && !delayed) {\n return operationPromise;\n }\n\n const modal = await this.modal(this.requireComponent('loading-modal'), props);\n\n try {\n const result = await operationPromise;\n\n await after({ ms: 500 });\n\n return result;\n } finally {\n await this.closeModal(modal.id);\n }\n }\n\n public toast(message: string, options: ToastOptions = {}): void {\n const { component, ...otherOptions } = options;\n const toast: UIToast = {\n id: uuid(),\n properties: { message, ...otherOptions },\n component: markRaw(component ?? this.requireComponent('toast')),\n };\n\n this.setState('toasts', this.toasts.concat(toast));\n }\n\n public modal<T extends Component>(\n ...args: {} extends ComponentProps<T>\n ? [component: T, props?: AcceptRefs<ComponentProps<T>>]\n : [component: T, props: AcceptRefs<ComponentProps<T>>]\n ): Promise<UIModal<ModalResult<T>>>;\n\n public async modal<T extends Component>(component: T, props?: ComponentProps<T>): Promise<UIModal<ModalResult<T>>> {\n const id = uuid();\n const callbacks: Partial<ModalCallbacks<ModalResult<T>>> = {};\n const modal: UIModal<ModalResult<T>> = {\n id,\n closing: false,\n properties: props ?? {},\n component: markRaw(component),\n beforeClose: new Promise((resolve) => (callbacks.willClose = resolve)),\n afterClose: new Promise((resolve) => (callbacks.hasClosed = resolve)),\n };\n const modals = this.modals.concat(modal);\n\n this.modalCallbacks[modal.id] = callbacks;\n\n this.setState({ modals });\n\n await nextTick();\n\n return modal;\n }\n\n public modalForm<T extends Component>(\n ...args: {} extends ComponentProps<T>\n ? [component: T, props?: AcceptRefs<ComponentProps<T>>]\n : [component: T, props: AcceptRefs<ComponentProps<T>>]\n ): Promise<ModalResult<T> | undefined>;\n\n public async modalForm<T extends Component>(\n component: T,\n props?: ComponentProps<T>,\n ): Promise<ModalResult<T> | undefined> {\n const modal = await this.modal<T>(component, props as ComponentProps<T>);\n const result = await modal.beforeClose;\n\n return result;\n }\n\n public async closeModal(id: string, result?: unknown): Promise<void> {\n if (!App.isMounted()) {\n await this.removeModal(id, result);\n\n return;\n }\n\n await Events.emit('close-modal', { id, result });\n }\n\n public async closeAllModals(): Promise<void> {\n while (this.modals.length > 0) {\n await this.closeModal(required(this.modals[this.modals.length - 1]).id);\n }\n }\n\n protected override async boot(): Promise<void> {\n this.watchModalEvents();\n this.watchMountedEvent();\n this.watchViewportBreakpoints();\n }\n\n private async removeModal(id: string, result?: unknown): Promise<void> {\n this.setState(\n 'modals',\n this.modals.filter((m) => m.id !== id),\n );\n\n this.modalCallbacks[id]?.hasClosed?.(result);\n\n delete this.modalCallbacks[id];\n }\n\n private watchModalEvents(): void {\n Events.on('modal-will-close', ({ modal: { id }, result }) => {\n const modal = this.modals.find((_modal) => id === _modal.id);\n\n if (modal) {\n modal.closing = true;\n }\n\n this.modalCallbacks[id]?.willClose?.(result);\n });\n\n Events.on('modal-has-closed', async ({ modal: { id }, result }) => {\n await this.removeModal(id, result);\n });\n }\n\n private watchMountedEvent(): void {\n Events.once('application-mounted', async () => {\n if (!globalThis.document || !globalThis.getComputedStyle) {\n return;\n }\n\n const splash = globalThis.document.getElementById('splash');\n\n if (!splash) {\n return;\n }\n\n if (globalThis.getComputedStyle(splash).opacity !== '0') {\n splash.style.opacity = '0';\n\n await after({ ms: 600 });\n }\n\n splash.remove();\n });\n }\n\n private watchViewportBreakpoints(): void {\n if (!globalThis.matchMedia) {\n return;\n }\n\n const media = globalThis.matchMedia(`(min-width: ${MOBILE_BREAKPOINT}px)`);\n\n media.addEventListener('change', () => this.setState({ layout: getCurrentLayout() }));\n }\n\n}\n\nexport default facade(UIService);\n\ndeclare module '@aerogel/core/services/Events' {\n export interface EventsPayload {\n 'close-modal': { id: string; result?: unknown };\n 'modal-will-close': { modal: UIModal; result?: unknown };\n 'modal-has-closed': { modal: UIModal; result?: unknown };\n }\n}\n","import { isDevelopment } from '@noeldemartin/utils';\n\nimport type { LangProvider } from './Lang';\n\nexport default class DefaultLangProvider implements LangProvider {\n\n constructor(\n private locale: string,\n private fallbackLocale: string,\n ) {}\n\n public getLocale(): string {\n return this.locale;\n }\n\n public async setLocale(locale: string): Promise<void> {\n this.locale = locale;\n }\n\n public getFallbackLocale(): string {\n return this.fallbackLocale;\n }\n\n public async setFallbackLocale(fallbackLocale: string): Promise<void> {\n this.fallbackLocale = fallbackLocale;\n }\n\n public getLocales(): string[] {\n return ['en'];\n }\n\n public translate(key: string): string {\n // eslint-disable-next-line no-console\n isDevelopment() && console.warn('Lang provider is missing');\n\n return key;\n }\n\n public translateWithDefault(_: string, defaultMessage: string): string {\n // eslint-disable-next-line no-console\n isDevelopment() && console.warn('Lang provider is missing');\n\n return defaultMessage;\n }\n\n}\n","import { defineServiceState } from '@aerogel/core/services/Service';\n\nexport default defineServiceState({\n name: 'lang',\n persist: ['locale', 'fallbackLocale'],\n initialState: {\n locale: null as string | null,\n locales: ['en'],\n fallbackLocale: 'en',\n },\n});\n","import { facade } from '@noeldemartin/utils';\n\nimport DefaultLangProvider from './DefaultLangProvider';\nimport Service from './Lang.state';\n\nexport interface LangProvider {\n getLocale(): string;\n setLocale(locale: string): Promise<void>;\n getFallbackLocale(): string;\n setFallbackLocale(fallbackLocale: string): Promise<void>;\n getLocales(): string[];\n translate(key: string, parameters?: Record<string, unknown> | number): string;\n translateWithDefault(key: string, defaultMessage: string, parameters?: Record<string, unknown> | number): string;\n}\n\nexport class LangService extends Service {\n\n private provider: LangProvider;\n\n constructor() {\n super();\n\n this.provider = new DefaultLangProvider(\n this.getState('locale') ?? this.getBrowserLocale(),\n this.getState('fallbackLocale'),\n );\n }\n\n public async setProvider(provider: LangProvider): Promise<void> {\n this.provider = provider;\n this.locales = provider.getLocales();\n\n await provider.setLocale(this.locale ?? this.getBrowserLocale());\n await provider.setFallbackLocale(this.fallbackLocale);\n }\n\n public translate(key: string, parameters?: Record<string, unknown> | number): string {\n return this.provider.translate(key, parameters) ?? key;\n }\n\n public translateWithDefault(\n key: string,\n defaultMessage: string,\n parameters: Record<string, unknown> | number = {},\n ): string {\n return this.provider.translateWithDefault(key, defaultMessage, parameters);\n }\n\n public getBrowserLocale(): string {\n const locales = this.getState('locales');\n\n return navigator.languages.find((locale) => locales.includes(locale)) ?? 'en';\n }\n\n protected override async boot(): Promise<void> {\n if (!globalThis.document) {\n return;\n }\n\n this.requireStore().$subscribe(\n async () => {\n await this.provider.setLocale(this.locale ?? this.getBrowserLocale());\n await this.provider.setFallbackLocale(this.fallbackLocale);\n\n this.locale\n ? document.querySelector('html')?.setAttribute('lang', this.locale)\n : document.querySelector('html')?.removeAttribute('lang');\n },\n { immediate: true },\n );\n }\n\n}\n\nexport default facade(LangService);\n","import Lang from './Lang';\n\nexport const translate = Lang.translate.bind(Lang);\nexport const translateWithDefault = Lang.translateWithDefault.bind(Lang);\n","import type { JSError } from '@noeldemartin/utils';\n\nimport { defineServiceState } from '@aerogel/core/services';\n\nexport type ErrorSource = string | Error | JSError | unknown;\n\nexport interface ErrorReport {\n title: string;\n description?: string;\n details?: string;\n error?: Error | JSError | unknown;\n}\n\nexport interface ErrorReportLog {\n report: ErrorReport;\n seen: boolean;\n date: Date;\n}\n\nexport default defineServiceState({\n name: 'errors',\n initialState: {\n logs: [] as ErrorReportLog[],\n startupErrors: [] as ErrorReport[],\n debug: false,\n },\n computed: {\n hasErrors: ({ logs }) => logs.length > 0,\n hasNewErrors: ({ logs }) => logs.some((error) => !error.seen),\n hasStartupErrors: ({ startupErrors }) => startupErrors.length > 0,\n },\n});\n","import { JSError, facade, isDevelopment, isObject, isTesting, objectWithoutEmpty, toString } from '@noeldemartin/utils';\nimport { watchEffect } from 'vue';\nimport type Eruda from 'eruda';\n\nimport App from '@aerogel/core/services/App';\nimport ServiceBootError from '@aerogel/core/errors/ServiceBootError';\nimport UI from '@aerogel/core/ui/UI';\nimport { translateWithDefault } from '@aerogel/core/lang/utils';\nimport { Events } from '@aerogel/core/services';\n\nimport Service from './Errors.state';\nimport type { ErrorReport, ErrorReportLog, ErrorSource } from './Errors.state';\n\nexport class ErrorsService extends Service {\n\n public forceReporting: boolean = false;\n private enabled: boolean = true;\n private eruda: typeof Eruda | null = null;\n\n public enable(): void {\n this.enabled = true;\n }\n\n public disable(): void {\n this.enabled = false;\n }\n\n public async inspect(error: ErrorSource | ErrorReport, reports?: ErrorReport[]): Promise<void>;\n public async inspect(reports: ErrorReport[]): Promise<void>;\n public async inspect(errorOrReports: ErrorSource | ErrorReport[], _reports?: ErrorReport[]): Promise<void> {\n if (Array.isArray(errorOrReports) && errorOrReports.length === 0) {\n UI.alert(translateWithDefault('errors.inspectEmpty', 'Nothing to inspect!'));\n\n return;\n }\n\n const report = Array.isArray(errorOrReports)\n ? (errorOrReports[0] as ErrorReport)\n : this.isErrorReport(errorOrReports)\n ? errorOrReports\n : await this.createErrorReport(errorOrReports);\n const reports = Array.isArray(errorOrReports) ? (errorOrReports as ErrorReport[]) : (_reports ?? [report]);\n\n UI.modal(UI.requireComponent('error-report-modal'), { report, reports });\n }\n\n public async report(error: ErrorSource, message?: string): Promise<void> {\n await Events.emit('error', { error, message });\n\n if (isTesting('unit')) {\n throw error;\n }\n\n if (isDevelopment()) {\n this.logError(error);\n }\n\n if (!this.enabled) {\n throw error;\n }\n\n if (!App.isMounted()) {\n const startupError = await this.createStartupErrorReport(error);\n\n if (startupError) {\n this.setState({ startupErrors: this.startupErrors.concat(startupError) });\n }\n\n return;\n }\n\n const report = await this.createErrorReport(error);\n const log: ErrorReportLog = {\n report,\n seen: false,\n date: new Date(),\n };\n\n UI.toast(\n message ??\n translateWithDefault('errors.notice', 'Something went wrong, but it\\'s not your fault. Try again!'),\n {\n variant: 'danger',\n actions: [\n {\n label: translateWithDefault('errors.viewDetails', 'View details'),\n dismiss: true,\n click: () => UI.modal(UI.requireComponent('error-report-modal'), { report, reports: [report] }),\n },\n ],\n },\n );\n\n this.setState({ logs: [log].concat(this.logs) });\n }\n\n public reportDevelopmentError(error: ErrorSource, message?: string): void {\n if (!isDevelopment()) {\n return;\n }\n\n if (message) {\n // eslint-disable-next-line no-console\n console.warn(message);\n }\n\n this.logError(error);\n }\n\n public see(report: ErrorReport): void {\n this.setState({\n logs: this.logs.map((log) => {\n if (log.report !== report) {\n return log;\n }\n\n return {\n ...log,\n seen: true,\n };\n }),\n });\n }\n\n protected override async boot(): Promise<void> {\n watchEffect(async () => {\n if (!this.debug) {\n this.eruda?.destroy();\n\n return;\n }\n\n this.eruda ??= (await import('eruda')).default;\n\n this.eruda.init();\n });\n }\n\n private logError(error: unknown): void {\n // eslint-disable-next-line no-console\n console.error(error);\n\n if (isObject(error) && error.cause) {\n this.logError(error.cause);\n }\n }\n\n private isErrorReport(error: unknown): error is ErrorReport {\n return isObject(error) && 'title' in error;\n }\n\n private async createErrorReport(error: ErrorSource): Promise<ErrorReport> {\n if (typeof error === 'string') {\n return { title: error };\n }\n\n if (error instanceof Error || error instanceof JSError) {\n return this.createErrorReportFromError(error);\n }\n\n if (isObject(error)) {\n return objectWithoutEmpty({\n title: toString(\n error['name'] ?? error['title'] ?? translateWithDefault('errors.unknown', 'Unknown Error'),\n ),\n description: toString(\n error['message'] ??\n error['description'] ??\n translateWithDefault('errors.unknownDescription', 'Unknown error object'),\n ),\n error,\n });\n }\n\n return {\n title: translateWithDefault('errors.unknown', 'Unknown Error'),\n error,\n };\n }\n\n private async createStartupErrorReport(error: ErrorSource): Promise<ErrorReport | null> {\n if (error instanceof ServiceBootError) {\n // Ignore second-order boot errors in order to have a cleaner startup crash screen.\n return error.cause instanceof ServiceBootError ? null : this.createErrorReport(error.cause);\n }\n\n return this.createErrorReport(error);\n }\n\n private createErrorReportFromError(error: Error | JSError, defaults: Partial<ErrorReport> = {}): ErrorReport {\n return {\n title: error.name,\n description: error.message,\n details: error.stack,\n error,\n ...defaults,\n };\n }\n\n}\n\nexport default facade(ErrorsService);\n\ndeclare module '@aerogel/core/services/Events' {\n export interface EventsPayload {\n error: { error: ErrorSource; message?: string };\n }\n}\n","<template>\n <Primitive\n :class=\"classes\"\n :as-child\n :disabled\n v-bind=\"props\"\n >\n <slot />\n </Primitive>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { Primitive } from 'reka-ui';\nimport { objectWithoutEmpty } from '@noeldemartin/utils';\n\nimport UI from '@aerogel/core/ui/UI';\nimport type { ButtonProps } from '@aerogel/core/components/contracts/Button';\n\nconst { as, href, route, routeParams, routeQuery, submit, disabled, class: classes } = defineProps<ButtonProps>();\n\nconst props = computed(() => {\n if (as) {\n return { as };\n }\n\n if (route) {\n return {\n as: UI.resolveComponent('router-link') ?? 'a',\n to: objectWithoutEmpty({\n name: route,\n params: routeParams,\n query: routeQuery,\n }),\n };\n }\n\n if (href) {\n return {\n as: 'a',\n target: '_blank',\n href,\n };\n }\n\n return {\n as: 'button',\n type: submit ? 'submit' : 'button',\n };\n});\n</script>\n","<template>\n <HeadlessButton :class=\"renderedClasses\" :disabled v-bind=\"props\">\n <slot />\n </HeadlessButton>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\nimport HeadlessButton from '@aerogel/core/components/headless/HeadlessButton.vue';\nimport { variantClasses } from '@aerogel/core/utils/classes';\nimport type { ButtonProps } from '@aerogel/core/components/contracts/Button';\nimport type { Variants } from '@aerogel/core/utils/classes';\n\nconst { class: baseClasses, size, variant, disabled, ...props } = defineProps<ButtonProps>();\n\n/* eslint-disable vue/max-len */\n// prettier-ignore\nconst renderedClasses = computed(() => variantClasses<Variants<Pick<ButtonProps, 'size' | 'variant' | 'disabled'>>>(\n { baseClasses, variant, size, disabled },\n {\n baseClasses: 'focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2',\n variants: {\n variant: {\n default: 'bg-primary-600 text-white focus-visible:outline-primary-600',\n secondary: 'bg-background text-gray-900 ring-gray-300',\n danger: 'bg-red-600 text-white focus-visible:outline-red-600',\n ghost: 'bg-transparent',\n outline: 'bg-transparent text-primary-600 ring-primary-600',\n link: 'text-links',\n },\n size: {\n small: 'text-xs min-h-6',\n default: 'text-sm min-h-8',\n large: 'text-base min-h-10',\n icon: 'rounded-full p-2.5',\n },\n disabled: {\n false: null,\n true: 'opacity-50 cursor-not-allowed',\n },\n },\n compoundVariants: [\n {\n variant: ['default', 'secondary', 'danger', 'ghost', 'outline'],\n class: 'flex items-center justify-center gap-1 font-medium',\n },\n {\n variant: ['default', 'danger'],\n class: 'shadow-sm',\n },\n {\n variant: ['secondary', 'outline'],\n class: 'ring-1 ring-inset',\n },\n {\n variant: ['default', 'secondary', 'danger', 'ghost', 'outline'],\n size: 'small',\n class: 'rounded px-2 py-1',\n },\n {\n variant: ['default', 'secondary', 'danger', 'ghost', 'outline'],\n size: 'default',\n class: 'rounded-md px-2.5 py-1.5',\n },\n {\n variant: ['default', 'secondary', 'danger', 'ghost', 'outline'],\n size: 'large',\n class: 'rounded-md px-3 py-2',\n },\n {\n variant: 'default',\n disabled: false,\n class: 'hover:bg-primary-500',\n },\n {\n variant: ['secondary', 'ghost', 'outline'],\n disabled: false,\n class: 'hover:bg-gray-50',\n },\n {\n variant: 'danger',\n disabled: false,\n class: 'hover:bg-red-500',\n },\n {\n variant: 'link',\n disabled: false,\n class: 'hover:underline',\n },\n {\n variant: 'link',\n size: 'small',\n class: 'leading-6',\n },\n {\n variant: 'link',\n size: 'default',\n class: 'leading-8',\n },\n {\n variant: 'link',\n size: 'large',\n class: 'leading-10',\n },\n ],\n defaultVariants: {\n variant: 'default',\n size: 'default',\n disabled: false,\n },\n },\n));\n/* eslint-enable vue/max-len */\n</script>\n","import type { AcceptableValue, AsTag, SelectContentProps } from 'reka-ui';\nimport type { Component, ComputedRef, HTMLAttributes } from 'vue';\nimport type { Nullable } from '@noeldemartin/utils';\n\nimport type { FormFieldValue } from '@aerogel/core/forms';\n\nimport type { InputEmits, InputExpose, InputProps } from './Input';\n\nexport type SelectOptionData = {\n key: string;\n label: string;\n value: AcceptableValue;\n};\n\nexport interface HasSelectOptionLabel {\n label: string | (() => string);\n}\n\nexport interface SelectProps<T extends Nullable<FormFieldValue> = Nullable<FormFieldValue>> extends InputProps<T> {\n as?: AsTag | Component;\n options?: readonly T[];\n placeholder?: string;\n renderOption?: (option: T) => string;\n compareOptions?: (a: T, b: T) => boolean;\n labelClass?: HTMLAttributes['class'];\n optionsClass?: HTMLAttributes['class'];\n align?: SelectContentProps['align'];\n side?: SelectContentProps['side'];\n}\n\nexport interface SelectEmits<T extends Nullable<FormFieldValue> = Nullable<FormFieldValue>> extends InputEmits<T> {}\n\nexport interface SelectExpose<T extends Nullable<FormFieldValue> = Nullable<FormFieldValue>> extends InputExpose<T> {\n options: ComputedRef<Nullable<readonly SelectOptionData[]>>;\n selectedOption: ComputedRef<Nullable<SelectOptionData>>;\n placeholder: ComputedRef<string>;\n labelClass?: HTMLAttributes['class'];\n optionsClass?: HTMLAttributes['class'];\n align?: SelectContentProps['align'];\n side?: SelectContentProps['side'];\n}\n\nexport function hasSelectOptionLabel(option: unknown): option is HasSelectOptionLabel {\n return typeof option === 'object' && option !== null && 'label' in option;\n}\n","<template>\n <SelectValue v-if=\"$slots.default\" :placeholder=\"select.placeholder\">\n <slot />\n </SelectValue>\n <SelectValue v-else :placeholder=\"select.placeholder\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { SelectValue } from 'reka-ui';\n\nimport { injectReactiveOrFail } from '@aerogel/core/utils/vue';\nimport type { SelectExpose } from '@aerogel/core/components/contracts/Select';\n\nconst select = injectReactiveOrFail<SelectExpose>(\n 'select',\n '<HeadlessSelectValue> must be a child of a <HeadlessSelect>',\n);\n</script>\n","<template>\n <SelectTrigger :id=\"select.id\">\n <slot>\n <HeadlessSelectValue :placeholder=\"select.placeholder\" />\n <SelectIcon />\n </slot>\n </SelectTrigger>\n</template>\n\n<script setup lang=\"ts\">\nimport { SelectIcon, SelectTrigger } from 'reka-ui';\n\nimport { injectReactiveOrFail } from '@aerogel/core/utils';\nimport type { SelectExpose } from '@aerogel/core/components/contracts/Select';\n\nimport HeadlessSelectValue from './HeadlessSelectValue.vue';\n\nconst select = injectReactiveOrFail<SelectExpose>(\n 'select',\n '<HeadlessSelectTrigger> must be a child of a <HeadlessSelect>',\n);\n</script>\n","<template>\n <SelectItem v-bind=\"$props\">\n <SelectItemText>\n <slot>\n {{ renderedLabel }}\n </slot>\n </SelectItemText>\n </SelectItem>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { SelectItem, SelectItemText } from 'reka-ui';\nimport { toString } from '@noeldemartin/utils';\nimport type { SelectItemProps } from 'reka-ui';\n\nimport { injectReactiveOrFail } from '@aerogel/core/utils/vue';\nimport type { SelectExpose } from '@aerogel/core/components/contracts/Select';\n\nconst { value } = defineProps<SelectItemProps>();\nconst select = injectReactiveOrFail<SelectExpose>(\n 'select',\n '<HeadlessSelectOption> must be a child of a <HeadlessSelect>',\n);\nconst renderedLabel = computed(() => {\n const itemOption = select.options?.find((option) => option.value === value);\n\n if (itemOption) {\n return itemOption.label;\n }\n\n return toString(value);\n});\n</script>\n","<template>\n <SelectPortal>\n <SelectContent\n position=\"popper\"\n :class=\"renderedClasses\"\n :align=\"select.align\"\n :side=\"select.side\"\n :side-offset=\"4\"\n >\n <SelectViewport :class=\"innerClass\">\n <slot>\n <HeadlessSelectOption\n v-for=\"option in select.options ?? []\"\n :key=\"option.key\"\n :value=\"option.value\"\n />\n </slot>\n </SelectViewport>\n </SelectContent>\n </SelectPortal>\n</template>\n\n<script setup lang=\"ts\">\nimport { SelectContent, SelectPortal, SelectViewport } from 'reka-ui';\nimport { computed } from 'vue';\nimport type { HTMLAttributes } from 'vue';\n\nimport { injectReactiveOrFail } from '@aerogel/core/utils/vue';\nimport { classes } from '@aerogel/core/utils/classes';\nimport type { SelectExpose } from '@aerogel/core/components/contracts/Select';\n\nimport HeadlessSelectOption from './HeadlessSelectOption.vue';\n\nconst { class: rootClass } = defineProps<{ class?: HTMLAttributes['class']; innerClass?: HTMLAttributes['class'] }>();\n\nconst select = injectReactiveOrFail<SelectExpose>(\n 'select',\n '<HeadlessSelectOptions> must be a child of a <HeadlessSelect>',\n);\nconst renderedClasses = computed(() =>\n classes('min-w-(--reka-select-trigger-width) max-h-(--reka-select-content-available-height)', rootClass));\n</script>\n","<template>\n <SelectRoot\n v-slot=\"{ open }\"\n :model-value=\"acceptableValue\"\n :by=\"compareOptions as Closure<[AcceptableValue, AcceptableValue], boolean>\"\n @update:model-value=\"update($event)\"\n >\n <component :is=\"as\" v-bind=\"$attrs\">\n <slot :model-value :open>\n <HeadlessSelectTrigger />\n <HeadlessSelectOptions />\n </slot>\n </component>\n </SelectRoot>\n</template>\n\n<script setup lang=\"ts\" generic=\"T extends Nullable<FormFieldValue>\">\nimport { computed, inject, provide, readonly } from 'vue';\nimport { value as evaluate, toString, uuid } from '@noeldemartin/utils';\nimport { SelectRoot } from 'reka-ui';\nimport type { AcceptableValue } from 'reka-ui';\nimport type { Closure, Nullable } from '@noeldemartin/utils';\n\nimport { translateWithDefault } from '@aerogel/core/lang';\nimport { hasSelectOptionLabel } from '@aerogel/core/components/contracts/Select';\nimport type FormController from '@aerogel/core/forms/FormController';\nimport type { SelectEmits, SelectExpose, SelectProps } from '@aerogel/core/components/contracts/Select';\nimport type { FormFieldValue } from '@aerogel/core/forms/FormController';\n\nimport HeadlessSelectTrigger from './HeadlessSelectTrigger.vue';\nimport HeadlessSelectOptions from './HeadlessSelectOptions.vue';\n\ndefineOptions({ inheritAttrs: false });\n\nconst {\n name,\n as = 'div',\n label,\n options,\n labelClass,\n optionsClass,\n renderOption,\n compareOptions = (a, b) => a === b,\n description,\n placeholder,\n modelValue,\n align,\n side,\n} = defineProps<SelectProps<T>>();\nconst emit = defineEmits<SelectEmits<T>>();\nconst form = inject<FormController | null>('form', null);\nconst computedValue = computed(() => {\n if (form && name) {\n return form.getFieldValue(name) as T;\n }\n\n return modelValue as T;\n});\nconst acceptableValue = computed(() => computedValue.value as AcceptableValue);\nconst errors = computed(() => {\n if (!form || !name) {\n return null;\n }\n\n return form.errors[name] ?? null;\n});\nconst computedOptions = computed(() => {\n if (!options) {\n return null;\n }\n\n return options.map((option) => ({\n key: uuid(),\n label: renderOption\n ? renderOption(option)\n : hasSelectOptionLabel(option)\n ? evaluate(option.label as string)\n : toString(option),\n value: option as AcceptableValue,\n }));\n});\nconst expose = {\n labelClass,\n optionsClass,\n align,\n side,\n value: computedValue,\n id: `select-${uuid()}`,\n name: computed(() => name),\n label: computed(() => label),\n description: computed(() => description),\n placeholder: computed(() => placeholder ?? translateWithDefault('ui.select', 'Select an option')),\n options: computedOptions,\n selectedOption: computed(() => computedOptions.value?.find((option) => option.value === modelValue)),\n errors: readonly(errors),\n required: computed(() => {\n if (!name || !form) {\n return;\n }\n\n return form.getFieldRules(name).includes('required');\n }),\n update(value) {\n if (form && name) {\n form.setFieldValue(name, value as FormFieldValue);\n\n return;\n }\n\n emit('update:modelValue', value);\n },\n} satisfies SelectExpose<T>;\n\nfunction update(value: AcceptableValue) {\n expose.update(value as T);\n}\n\nprovide('select', expose);\ndefineExpose(expose);\n</script>\n","<template>\n <Label v-if=\"show\" :for=\"select.id\" v-bind=\"$props\">\n <slot>\n {{ select.label }}\n </slot>\n </Label>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, useSlots } from 'vue';\nimport { Label } from 'reka-ui';\nimport type { LabelProps } from 'reka-ui';\n\nimport { injectReactiveOrFail } from '@aerogel/core/utils/vue';\nimport type { SelectExpose } from '@aerogel/core/components/contracts/Select';\n\ndefineProps<Omit<LabelProps, 'for'>>();\n\nconst select = injectReactiveOrFail<SelectExpose>(\n 'select',\n '<HeadlessSelectLabel> must be a child of a <HeadlessSelect>',\n);\nconst slots = useSlots();\nconst show = computed(() => !!(select.label || slots.default));\n</script>\n","<template>\n <HeadlessSelectLabel v-if=\"$slots.default\" :class=\"renderedClasses\">\n <slot />\n </HeadlessSelectLabel>\n <HeadlessSelectLabel v-else :class=\"renderedClasses\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { HTMLAttributes } from 'vue';\n\nimport HeadlessSelectLabel from '@aerogel/core/components/headless/HeadlessSelectLabel.vue';\nimport { classes, injectReactiveOrFail } from '@aerogel/core/utils';\nimport type { SelectExpose } from '@aerogel/core/components/contracts/Select';\n\nconst { class: rootClasses } = defineProps<{ class?: HTMLAttributes['class'] }>();\n\nconst select = injectReactiveOrFail<SelectExpose>('select', '<SelectLabel> must be a child of a <Select>');\nconst renderedClasses = computed(() =>\n classes('block text-sm leading-6 font-medium text-gray-900', select.labelClass, rootClasses));\n</script>\n","<template>\n <HeadlessSelectOption :class=\"renderedOuterClasses\" :value>\n <div :class=\"renderedInnerClasses\">\n <slot />\n </div>\n </HeadlessSelectOption>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { AcceptableValue } from 'reka-ui';\nimport type { HTMLAttributes } from 'vue';\n\nimport HeadlessSelectOption from '@aerogel/core/components/headless/HeadlessSelectOption.vue';\nimport { classes } from '@aerogel/core/utils';\n\nconst { class: outerClass, innerClass } = defineProps<{\n value: AcceptableValue;\n class?: HTMLAttributes['class'];\n innerClass?: HTMLAttributes['class'];\n}>();\nconst renderedOuterClasses = computed(() => classes('group p-1 outline-none', outerClass));\nconst renderedInnerClasses = computed(() =>\n classes(\n // eslint-disable-next-line vue/max-len\n 'relative flex max-w-[calc(100vw-2rem)] cursor-pointer items-center truncate rounded-md gap-2 px-2 py-1 text-sm select-none *:truncate group-data-[highlighted]:bg-gray-100 group-data-[state=checked]:font-semibold group-data-[state=unchecked]:opacity-50',\n innerClass,\n ));\n</script>\n","<template>\n <HeadlessSelectOptions :class=\"renderedClasses\">\n <slot v-if=\"select.options?.length\">\n <SelectOption v-for=\"option of select?.options ?? []\" :key=\"option.key\" :value=\"option.value\">\n {{ option.label }}\n </SelectOption>\n </slot>\n <slot v-else>\n <SelectOption disabled :value=\"null\">\n {{ $td('ui.selectEmpty', 'No options available') }}\n </SelectOption>\n </slot>\n </HeadlessSelectOptions>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { HTMLAttributes } from 'vue';\n\nimport HeadlessSelectOptions from '@aerogel/core/components/headless/HeadlessSelectOptions.vue';\nimport { classes, injectReactiveOrFail } from '@aerogel/core/utils';\nimport type { SelectExpose } from '@aerogel/core/components/contracts/Select';\n\nimport SelectOption from './SelectOption.vue';\n\nconst { class: rootClasses } = defineProps<{ class?: HTMLAttributes['class'] }>();\n\nconst select = injectReactiveOrFail<SelectExpose>('select', '<SelectOptions> must be a child of a <Select>');\nconst renderedClasses = computed(() =>\n classes(\n 'z-50 overflow-auto rounded-lg bg-white text-base shadow-lg ring-1 ring-black/5 focus:outline-hidden',\n select.optionsClass,\n rootClasses,\n ));\n</script>\n","<template>\n <HeadlessSelectTrigger :class=\"renderedClasses\">\n <HeadlessSelectValue class=\"col-start-1 row-start-1 truncate pr-6\" />\n <IconCheveronDown class=\"col-start-1 row-start-1 size-5 self-center justify-self-end text-gray-500 sm:size-4\" />\n </HeadlessSelectTrigger>\n</template>\n\n<script setup lang=\"ts\">\nimport IconCheveronDown from '~icons/zondicons/cheveron-down';\n\nimport { computed } from 'vue';\nimport type { HTMLAttributes } from 'vue';\n\nimport HeadlessSelectTrigger from '@aerogel/core/components/headless/HeadlessSelectTrigger.vue';\nimport HeadlessSelectValue from '@aerogel/core/components/headless/HeadlessSelectValue.vue';\nimport { injectReactiveOrFail } from '@aerogel/core/utils';\nimport { classes } from '@aerogel/core/utils/classes';\nimport type { SelectExpose } from '@aerogel/core/components/contracts/Select';\n\nconst { class: rootClasses } = defineProps<{ class?: HTMLAttributes['class'] }>();\nconst select = injectReactiveOrFail<SelectExpose>('select', '<SelectTrigger> must be a child of a <Select>');\nconst renderedClasses = computed(() =>\n classes(\n // eslint-disable-next-line vue/max-len\n 'focus:outline-primary-600 data-[state=open]:outline-primary-600 grid w-full cursor-default grid-cols-1 rounded-md bg-white py-1.5 pr-2 pl-3 text-left text-gray-900 outline-1 -outline-offset-1 outline-gray-300 focus:outline-2 focus:-outline-offset-2 sm:text-sm/6',\n { 'mt-1': select.label },\n rootClasses,\n ));\n</script>\n","<template>\n <HeadlessSelect :ref=\"forwardRef\" v-bind=\"$props\" @update:model-value=\"$emit('update:modelValue', $event)\">\n <SelectLabel />\n <slot>\n <SelectTrigger />\n <SelectOptions />\n </slot>\n </HeadlessSelect>\n</template>\n\n<script setup lang=\"ts\" generic=\"T extends Nullable<FormFieldValue>\">\nimport { useForwardExpose } from 'reka-ui';\nimport type { Nullable } from '@noeldemartin/utils';\n\nimport HeadlessSelect from '@aerogel/core/components/headless/HeadlessSelect.vue';\nimport type { SelectEmits, SelectProps } from '@aerogel/core/components/contracts/Select';\nimport type { FormFieldValue } from '@aerogel/core/forms';\n\nimport SelectLabel from './SelectLabel.vue';\nimport SelectOptions from './SelectOptions.vue';\nimport SelectTrigger from './SelectTrigger.vue';\n\ndefineProps<SelectProps<T>>();\ndefineEmits<SelectEmits<T>>();\n\nconst { forwardRef } = useForwardExpose();\n</script>\n","<template>\n <Select\n v-model=\"$lang.locale\"\n class=\"flex flex-col items-start md:flex-row\"\n as=\"div\"\n :options\n :render-option=\"renderLocale\"\n >\n <div class=\"grow\">\n <SelectLabel class=\"text-base font-semibold\">\n {{ $td('settings.locale', 'Language') }}\n </SelectLabel>\n <Markdown\n lang-key=\"settings.localeDescription\"\n lang-default=\"Choose the application's language.\"\n class=\"mt-1 text-sm text-gray-500\"\n />\n </div>\n <Button variant=\"ghost\" :as=\"SelectTrigger\" class=\"grid w-auto outline-none\" />\n <SelectOptions />\n </Select>\n</template>\n\n<script setup lang=\"ts\">\nimport Aerogel from 'virtual:aerogel';\n\nimport { computed } from 'vue';\n\nimport Markdown from '@aerogel/core/components/ui/Markdown.vue';\nimport Button from '@aerogel/core/components/ui/Button.vue';\nimport Select from '@aerogel/core/components/ui/Select.vue';\nimport SelectLabel from '@aerogel/core/components/ui/SelectLabel.vue';\nimport SelectTrigger from '@aerogel/core/components/ui/SelectTrigger.vue';\nimport SelectOptions from '@aerogel/core/components/ui/SelectOptions.vue';\nimport { Lang, translateWithDefault } from '@aerogel/core/lang';\n\nconst browserLocale = Lang.getBrowserLocale();\nconst options = computed(() => [null, ...Lang.locales]);\n\nfunction renderLocale(locale: string | null): string {\n return (\n (locale && Aerogel.locales[locale]) ??\n translateWithDefault('settings.localeDefault', '{locale} (default)', {\n locale: Aerogel.locales[browserLocale] ?? browserLocale,\n })\n );\n}\n</script>\n","import { defineSettings } from '@aerogel/core/services';\n\nimport Language from './Language.vue';\n\nexport default defineSettings([\n {\n priority: 100,\n component: Language,\n },\n]);\n","import App from '@aerogel/core/services/App';\nimport { bootServices } from '@aerogel/core/services';\nimport { definePlugin } from '@aerogel/core/plugins';\n\nimport Lang from './Lang';\nimport settings from './settings';\nimport { translate, translateWithDefault } from './utils';\nimport type { LangProvider } from './Lang';\n\nexport { Lang, translate, translateWithDefault };\nexport type { LangProvider };\n\nconst services = { $lang: Lang };\n\nexport type LangServices = typeof services;\n\nexport default definePlugin({\n async install(app) {\n app.config.globalProperties.$t ??= translate;\n app.config.globalProperties.$td = translateWithDefault;\n\n settings.forEach((setting) => App.addSetting(setting));\n\n await bootServices(app, services);\n },\n});\n\ndeclare module '@aerogel/core/services' {\n export interface Services extends LangServices {}\n}\n\ndeclare module 'vue' {\n interface ComponentCustomProperties {\n $td: typeof translateWithDefault;\n }\n}\n","<template>\n <root />\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, h, useAttrs } from 'vue';\nimport { isInstanceOf } from '@noeldemartin/utils';\nimport type { VNode } from 'vue';\n\nimport { getMarkdownRouter, renderMarkdown } from '@aerogel/core/utils/markdown';\nimport { translate, translateWithDefault } from '@aerogel/core/lang';\nimport { renderVNode } from '@aerogel/core/utils/vue';\n\nconst { as, inline, langKey, langParams, langDefault, text, actions } = defineProps<{\n as?: string;\n inline?: boolean;\n langKey?: string;\n langParams?: number | Record<string, unknown>;\n langDefault?: string;\n text?: string;\n actions?: Record<string, () => unknown>;\n}>();\n\nconst attrs = useAttrs();\nconst slots = defineSlots<{ default?(): VNode[] }>();\nconst markdown = computed(() => {\n if (slots.default) {\n return slots.default().map(renderVNode).join('');\n }\n\n return (\n text ??\n (langKey &&\n (langDefault\n ? translateWithDefault(langKey, langDefault, langParams ?? {})\n : translate(langKey, langParams ?? {})))\n );\n});\nconst html = computed(() => {\n if (!markdown.value) {\n return null;\n }\n\n let renderedHtml = renderMarkdown(markdown.value);\n\n if (inline) {\n renderedHtml = renderedHtml.replace('<p>', '<span>').replace('</p>', '</span>');\n }\n\n return renderedHtml;\n});\nconst root = () =>\n h(as ?? (inline ? 'span' : 'div'), {\n innerHTML: html.value,\n onClick,\n ...attrs,\n class: `${attrs.class ?? ''} ${inline ? '' : 'prose'}`,\n });\n\nasync function onClick(event: Event) {\n const { target } = event;\n\n if (isInstanceOf(target, HTMLElement) && target.dataset.markdownAction) {\n actions?.[target.dataset.markdownAction]?.();\n\n return;\n }\n\n if (isInstanceOf(target, HTMLAnchorElement) && target.dataset.markdownRoute) {\n const router = getMarkdownRouter();\n\n if (router) {\n event.preventDefault();\n\n router.visit(target.dataset.markdownRoute);\n }\n\n return;\n }\n}\n</script>\n\n<style scoped>\n/* @apply .text-links .font-normal .no-underline .hover:underline; */\n* :deep(a) {\n --tw-font-weight: var(--font-weight-normal);\n text-decoration-line: none;\n color: var(--color-links);\n font-weight: var(--font-weight-normal);\n}\n\n@media (hover: hover) {\n * :deep(a:hover) {\n text-decoration-line: underline;\n }\n}\n</style>\n","<template>\n <div class=\"mt-4 flex\" :class=\"{ 'flex-col': layout === 'vertical' }\">\n <div class=\"flex-grow\">\n <h3 :id=\"titleId\" class=\"text-base font-semibold\">\n {{ title }}\n </h3>\n <Markdown v-if=\"description\" :text=\"description\" class=\"mt-1 text-sm text-gray-500\" />\n </div>\n\n <div :class=\"renderedRootClass\">\n <slot />\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { HTMLAttributes } from 'vue';\n\nimport Markdown from '@aerogel/core/components/ui/Markdown.vue';\nimport { classes } from '@aerogel/core/utils';\n\nconst { layout = 'horizontal', class: rootClass } = defineProps<{\n title: string;\n titleId?: string;\n description?: string;\n class?: HTMLAttributes['class'];\n layout?: 'vertical' | 'horizontal';\n}>();\nconst renderedRootClass = computed(() => classes(rootClass, 'flex flex-col justify-center gap-1'));\n</script>\n","<template>\n <div :class=\"rootClass\">\n <label v-if=\"label\" :for=\"expose.id\" :class=\"labelClass\">\n {{ label }}\n </label>\n <SwitchRoot\n :id=\"expose.id\"\n :name\n :model-value=\"expose.value.value\"\n v-bind=\"$attrs\"\n :class=\"inputClass\"\n @update:model-value=\"$emit('update:modelValue', $event)\"\n >\n <SwitchThumb :class=\"thumbClass\" />\n </SwitchRoot>\n </div>\n</template>\n\n<script setup lang=\"ts\" generic=\"T extends boolean = boolean\">\nimport { SwitchRoot, SwitchThumb } from 'reka-ui';\nimport { computed, inject, readonly, watchEffect } from 'vue';\nimport { uuid } from '@noeldemartin/utils';\nimport type { HTMLAttributes } from 'vue';\n\nimport type FormController from '@aerogel/core/forms/FormController';\nimport type { FormFieldValue } from '@aerogel/core/forms/FormController';\nimport type { InputEmits, InputExpose, InputProps } from '@aerogel/core/components/contracts/Input';\n\ndefineOptions({ inheritAttrs: false });\n\nconst {\n name,\n label,\n description,\n modelValue,\n class: rootClass,\n} = defineProps<\n InputProps<T> & {\n class?: HTMLAttributes['class'];\n labelClass?: HTMLAttributes['class'];\n inputClass?: HTMLAttributes['class'];\n thumbClass?: HTMLAttributes['class'];\n }\n>();\nconst emit = defineEmits<InputEmits>();\nconst form = inject<FormController | null>('form', null);\nconst errors = computed(() => {\n if (!form || !name) {\n return null;\n }\n\n return form.errors[name] ?? null;\n});\n\nconst expose = {\n id: `switch-${uuid()}`,\n name: computed(() => name),\n label: computed(() => label),\n description: computed(() => description),\n value: computed(() => {\n if (form && name) {\n return form.getFieldValue(name) as boolean;\n }\n\n return modelValue;\n }),\n errors: readonly(errors),\n required: computed(() => {\n if (!name || !form) {\n return;\n }\n\n return form.getFieldRules(name).includes('required');\n }),\n update(value) {\n if (form && name) {\n form.setFieldValue(name, value as FormFieldValue);\n\n return;\n }\n\n emit('update:modelValue', value);\n },\n} satisfies InputExpose;\n\ndefineExpose(expose);\n\nwatchEffect(() => {\n if (!description && !errors.value) {\n return;\n }\n\n // eslint-disable-next-line no-console\n console.warn('Errors and description not implemented in <HeadlessSwitch>');\n});\n</script>\n","import { defineSettings } from '@aerogel/core/services';\n\nimport Debug from './Debug.vue';\n\nexport default defineSettings([\n {\n priority: 10,\n component: Debug,\n },\n]);\n","import { JSError, isObject, toString } from '@noeldemartin/utils';\nimport { translateWithDefault } from '@aerogel/core/lang/utils';\nimport type { ErrorSource } from './Errors.state';\n\nconst handlers: ErrorHandler[] = [];\n\nexport type ErrorHandler = (error: ErrorSource) => string | undefined;\n\nexport function registerErrorHandler(handler: ErrorHandler): void {\n handlers.push(handler);\n}\n\nexport function getErrorMessage(error: ErrorSource): string {\n for (const handler of handlers) {\n const result = handler(error);\n\n if (result) {\n return result;\n }\n }\n\n if (typeof error === 'string') {\n return error;\n }\n\n if (error instanceof Error || error instanceof JSError) {\n return error.message;\n }\n\n if (isObject(error)) {\n return toString(error['message'] ?? error['description'] ?? 'Unknown error object');\n }\n\n return translateWithDefault('errors.unknown', 'Unknown Error');\n}\n","import { JSError } from '@noeldemartin/utils';\n\nexport default class JobCancelledError extends JSError {}\n","import type { App as AppInstance } from 'vue';\n\nimport App from '@aerogel/core/services/App';\nimport { bootServices } from '@aerogel/core/services';\nimport { definePlugin } from '@aerogel/core/plugins';\n\nimport Errors from './Errors';\nimport settings from './settings';\nimport type { ErrorReport, ErrorReportLog, ErrorSource } from './Errors.state';\n\nexport * from './utils';\nexport { Errors };\nexport { default as JobCancelledError } from './JobCancelledError';\nexport { default as ServiceBootError } from './ServiceBootError';\nexport type { ErrorSource, ErrorReport, ErrorReportLog };\n\nconst services = { $errors: Errors };\nconst frameworkHandler: ErrorHandler = (error) => {\n Errors.report(error);\n\n return true;\n};\n\nfunction setUpErrorHandler(app: AppInstance, baseHandler: ErrorHandler = () => false): void {\n const errorHandler: ErrorHandler = (error) => baseHandler(error) || frameworkHandler(error);\n\n app.config.errorHandler = errorHandler;\n globalThis.onerror = (event, _, __, ___, error) => errorHandler(error ?? event);\n globalThis.onunhandledrejection = (event) => errorHandler(event.reason);\n}\n\nexport type ErrorHandler = (error: ErrorSource) => boolean;\nexport type ErrorsServices = typeof services;\n\nexport default definePlugin({\n async install(app, options) {\n setUpErrorHandler(app, options.handleError);\n\n settings.forEach((setting) => App.addSetting(setting));\n\n await bootServices(app, services);\n },\n});\n\ndeclare module '@aerogel/core/bootstrap/options' {\n export interface AerogelOptions {\n handleError?(error: ErrorSource): boolean;\n }\n}\n\ndeclare module '@aerogel/core/services' {\n export interface Services extends ErrorsServices {}\n}\n","import { isTesting } from '@noeldemartin/utils';\nimport type { GetClosureArgs } from '@noeldemartin/utils';\n\nimport Events from '@aerogel/core/services/Events';\nimport { App } from '@aerogel/core/services';\nimport { definePlugin } from '@aerogel/core/plugins';\nimport type { Services } from '@aerogel/core/services';\n\nexport interface AerogelTestingRuntime {\n on: (typeof Events)['on'];\n service<T extends keyof Services>(name: T): Services[T] | null;\n}\n\nexport default definePlugin({\n async install() {\n if (!isTesting()) {\n return;\n }\n\n globalThis.testingRuntime = {\n on: ((...args: GetClosureArgs<(typeof Events)['on']>) => Events.on(...args)) as (typeof Events)['on'],\n service: (name) => App.service(name),\n };\n },\n});\n\ndeclare global {\n // eslint-disable-next-line no-var\n var testingRuntime: AerogelTestingRuntime | undefined;\n}\n","<template>\n <DialogRoot :ref=\"forwardRef\" open @update:open=\"persistent || close()\">\n <DialogPortal>\n <slot :close=\"close\" />\n </DialogPortal>\n </DialogRoot>\n</template>\n\n<script setup lang=\"ts\" generic=\"T = void\">\nimport { provide, ref } from 'vue';\nimport { DialogPortal, DialogRoot, useForwardExpose } from 'reka-ui';\nimport type { DialogContent } from 'reka-ui';\nimport type { Nullable } from '@noeldemartin/utils';\n\nimport Events from '@aerogel/core/services/Events';\nimport { useEvent } from '@aerogel/core/utils/composition/events';\nimport { injectReactiveOrFail } from '@aerogel/core/utils/vue';\nimport type { AcceptRefs } from '@aerogel/core/utils/vue';\nimport type { UIModalContext } from '@aerogel/core/ui/UI';\nimport type { ModalExpose, ModalProps, ModalSlots } from '@aerogel/core/components/contracts/Modal';\n\nconst $content = ref<Nullable<InstanceType<typeof DialogContent>>>(null);\nconst { modal } = injectReactiveOrFail<UIModalContext>(\n 'modal',\n 'could not obtain modal reference from <HeadlessModal>, ' +\n 'did you render this component manually? Show it using $ui.modal() instead',\n);\n\ndefineProps<ModalProps>();\ndefineSlots<ModalSlots<T>>();\ndefineExpose<AcceptRefs<ModalExpose<T>>>({ close, $content });\n\nconst { forwardRef } = useForwardExpose();\nconst closed = ref(false);\n\nprovide('$modalContentRef', $content);\n\nuseEvent('close-modal', async ({ id, result }) => {\n if (id !== modal.id) {\n return;\n }\n\n await close(result);\n});\n\nasync function close(result?: unknown) {\n if (closed.value) {\n return;\n }\n\n await Events.emit('modal-will-close', { modal, result });\n\n closed.value = true;\n\n await Events.emit('modal-has-closed', { modal, result });\n}\n</script>\n","<template>\n <component :is=\"modal.component\" v-bind=\"modalProperties\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, provide, toRef, unref } from 'vue';\n\nimport type { UIModal } from '@aerogel/core/ui/UI.state';\nimport type { UIModalContext } from '@aerogel/core/ui/UI';\nimport type { AcceptRefs } from '@aerogel/core/utils/vue';\n\nconst props = defineProps<{\n modal: UIModal;\n childIndex?: number;\n}>();\n\nconst modalProperties = computed(() => {\n const properties = {} as typeof props.modal.properties;\n\n for (const property in props.modal.properties) {\n properties[property] = unref(props.modal.properties[property]);\n }\n\n return properties;\n});\n\nprovide<AcceptRefs<UIModalContext>>('modal', {\n modal: toRef(props, 'modal'),\n childIndex: toRef(props, 'childIndex'),\n});\n</script>\n","<template>\n <DialogContent ref=\"$contentRef\">\n <slot />\n\n <ModalContext v-if=\"childModal\" :child-index=\"childIndex + 1\" :modal=\"childModal\" />\n </DialogContent>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, useTemplateRef, watchEffect } from 'vue';\nimport { DialogContent } from 'reka-ui';\nimport type { Ref } from 'vue';\n\nimport ModalContext from '@aerogel/core/components/ui/ModalContext.vue';\nimport UI from '@aerogel/core/ui/UI';\nimport { injectOrFail, injectReactiveOrFail } from '@aerogel/core/utils/vue';\nimport type { UIModalContext } from '@aerogel/core/ui/UI';\nimport type { ModalContentInstance } from '@aerogel/core/components/contracts/Modal';\n\nconst { childIndex = 0 } = injectReactiveOrFail<UIModalContext>(\n 'modal',\n 'could not obtain modal reference from <HeadlessModalContent>, ' +\n 'did you render this component manually? Show it using $ui.modal() instead',\n);\nconst $modalContentRef = injectOrFail<Ref<ModalContentInstance>>('$modalContentRef');\nconst $content = useTemplateRef('$contentRef');\nconst childModal = computed(() => UI.modals[childIndex] ?? null);\n\nwatchEffect(() => ($modalContentRef.value = $content.value));\n</script>\n","<template>\n <!-- @vue-generic {T} -->\n <HeadlessModal\n v-slot=\"{ close }\"\n v-bind=\"props\"\n :ref=\"($modal) => forwardRef($modal as HeadlessModalInstance)\"\n :persistent\n >\n <HeadlessModalOverlay\n class=\"fixed inset-0 animate-[fade-in_var(--tw-duration)_ease-in-out] transition-opacity duration-300 will-change-[opacity]\"\n :class=\"{\n 'bg-black/30': context.childIndex === 1,\n 'opacity-0': context.childIndex === 1 && context.modal.closing,\n }\"\n />\n <HeadlessModalContent v-bind=\"contentProps\" :class=\"renderedWrapperClass\">\n <div v-if=\"!persistent && !closeHidden\" class=\"absolute top-0 right-0 hidden pt-3.5 pr-2.5 sm:block\">\n <button\n type=\"button\"\n class=\"clickable z-10 rounded-full p-2.5 text-gray-400 hover:text-gray-500\"\n @click=\"close()\"\n >\n <span class=\"sr-only\">{{ $td('ui.close', 'Close') }}</span>\n <IconClose class=\"size-4\" />\n </button>\n </div>\n\n <HeadlessModalTitle\n v-if=\"title\"\n class=\"px-4 pt-5 text-base font-semibold text-gray-900\"\n :class=\"{\n 'sr-only': titleHidden,\n 'pb-0': description && !descriptionHidden,\n 'pb-2': !description || descriptionHidden,\n }\"\n >\n <Markdown :text=\"title\" inline />\n </HeadlessModalTitle>\n\n <HeadlessModalDescription\n v-if=\"description\"\n class=\"px-4 pt-1 pb-2\"\n :class=\"{ 'sr-only': descriptionHidden }\"\n >\n <Markdown :text=\"description\" class=\"text-sm leading-6 text-gray-500\" />\n </HeadlessModalDescription>\n\n <div :class=\"renderedContentClass\">\n <slot :close />\n </div>\n </HeadlessModalContent>\n </HeadlessModal>\n</template>\n\n<script setup lang=\"ts\" generic=\"T = void\">\nimport IconClose from '~icons/zondicons/close';\n\nimport { after } from '@noeldemartin/utils';\nimport { computed } from 'vue';\nimport { useForwardExpose } from 'reka-ui';\nimport type { ComponentPublicInstance, HTMLAttributes, Ref } from 'vue';\nimport type { Nullable } from '@noeldemartin/utils';\n\nimport Markdown from '@aerogel/core/components/ui/Markdown.vue';\nimport HeadlessModal from '@aerogel/core/components/headless/HeadlessModal.vue';\nimport HeadlessModalContent from '@aerogel/core/components/headless/HeadlessModalContent.vue';\nimport HeadlessModalDescription from '@aerogel/core/components/headless/HeadlessModalDescription.vue';\nimport HeadlessModalOverlay from '@aerogel/core/components/headless/HeadlessModalOverlay.vue';\nimport HeadlessModalTitle from '@aerogel/core/components/headless/HeadlessModalTitle.vue';\nimport UI from '@aerogel/core/ui/UI';\nimport { classes } from '@aerogel/core/utils/classes';\nimport { injectReactiveOrFail } from '@aerogel/core/utils/vue';\nimport { useEvent } from '@aerogel/core/utils/composition/events';\nimport type { AcceptRefs } from '@aerogel/core/utils/vue';\nimport type { ModalExpose, ModalProps, ModalSlots } from '@aerogel/core/components/contracts/Modal';\nimport type { UIModalContext } from '@aerogel/core/ui/UI';\n\ntype HeadlessModalInstance = ComponentPublicInstance & ModalExpose<T>;\n\nconst {\n class: contentClass = '',\n wrapperClass = '',\n title,\n titleHidden,\n description,\n persistent,\n closeHidden,\n ...props\n} = defineProps<\n ModalProps & {\n wrapperClass?: HTMLAttributes['class'];\n class?: HTMLAttributes['class'];\n closeHidden?: boolean;\n }\n>();\n\ndefineSlots<ModalSlots<T>>();\ndefineExpose<AcceptRefs<ModalExpose<T>>>({\n close: async (result) => $modal.value?.close(result),\n $content: computed(() => $modal.value?.$content),\n});\n\nconst { forwardRef, currentRef } = useForwardExpose<HeadlessModalInstance>();\nconst $modal = currentRef as Ref<Nullable<HeadlessModalInstance>>;\nconst context = injectReactiveOrFail<UIModalContext>('modal');\nconst inForeground = computed(() => !context.modal.closing && context.childIndex === UI.openModals.length);\nconst contentProps = computed(() => (description ? {} : { 'aria-describedby': undefined }));\nconst renderedContentClass = computed(() =>\n classes('max-h-[90vh] overflow-auto px-4 pb-4', { 'pt-4': !title || titleHidden }, contentClass));\nconst renderedWrapperClass = computed(() =>\n classes(\n 'isolate fixed top-1/2 left-1/2 z-50 w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2',\n 'overflow-hidden rounded-lg bg-white text-left shadow-xl sm:max-w-lg',\n 'animate-[fade-in_var(--tw-duration)_ease-in-out,grow_var(--tw-duration)_ease-in-out]',\n 'transition-[scale,opacity] will-change-[scale,opacity] duration-300',\n {\n 'scale-50 opacity-0': !inForeground.value,\n 'scale-100 opacity-100': inForeground.value,\n },\n wrapperClass,\n ));\n\nuseEvent('modal-will-close', async ({ modal: { id } }) => {\n if (id !== context.modal.id) {\n return;\n }\n\n // Wait for transitions to finish\n await after({ ms: 300 });\n});\n</script>\n","import { computed } from 'vue';\n\nimport { translateWithDefault } from '@aerogel/core/lang/utils';\nimport type { ModalExpose } from '@aerogel/core/components/contracts/Modal';\n\nexport interface AlertModalProps {\n title?: string;\n message: string;\n}\n\nexport interface AlertModalExpose extends ModalExpose<void> {}\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function useAlertModal(props: AlertModalProps) {\n const renderedTitle = computed(() => props.title ?? translateWithDefault('ui.alert', 'Alert'));\n const titleHidden = computed(() => !props.title);\n\n return { renderedTitle, titleHidden };\n}\n","<template>\n <Modal :title=\"renderedTitle\" :title-hidden=\"titleHidden\">\n <Markdown :text=\"message\" />\n </Modal>\n</template>\n\n<script setup lang=\"ts\">\nimport Modal from '@aerogel/core/components/ui/Modal.vue';\nimport Markdown from '@aerogel/core/components/ui/Markdown.vue';\nimport { useAlertModal } from '@aerogel/core/components/contracts/AlertModal';\nimport type { AlertModalExpose, AlertModalProps } from '@aerogel/core/components/contracts/AlertModal';\n\nconst props = defineProps<AlertModalProps>();\nconst { renderedTitle, titleHidden } = useAlertModal(props);\n\ndefineExpose<AlertModalExpose>();\n</script>\n","<template>\n <form @submit.prevent=\"form?.submit()\">\n <slot />\n </form>\n</template>\n\n<script setup lang=\"ts\">\nimport { provide, watchEffect } from 'vue';\n\nimport type FormController from '@aerogel/core/forms/FormController';\n\nlet offSubmit: (() => void) | undefined;\nconst { form } = defineProps<{ form?: FormController }>();\nconst emit = defineEmits<{ submit: [] }>();\n\nwatchEffect((onCleanup) => {\n offSubmit?.();\n offSubmit = form?.on('submit', () => emit('submit'));\n\n onCleanup(() => offSubmit?.());\n});\n\nprovide('form', form);\n</script>\n","import { computed } from 'vue';\n\nimport { translateWithDefault } from '@aerogel/core/lang';\nimport { useForm } from '@aerogel/core/utils/composition/forms';\nimport type { ButtonVariant } from '@aerogel/core/components/contracts/Button';\nimport type { FormFieldDefinition } from '@aerogel/core/forms/FormController';\nimport type { ModalExpose } from '@aerogel/core/components/contracts/Modal';\nimport type { Nullable } from '@noeldemartin/utils';\n\nexport type ConfirmModalCheckboxes = Record<string, { label: string; default?: boolean; required?: boolean }>;\n\nexport interface ConfirmModalProps {\n title?: string;\n message: string;\n acceptText?: string;\n acceptVariant?: ButtonVariant;\n cancelText?: string;\n cancelVariant?: ButtonVariant;\n checkboxes?: ConfirmModalCheckboxes;\n actions?: Record<string, () => unknown>;\n required?: boolean;\n}\n\nexport interface ConfirmModalExpose extends ModalExpose<boolean | [boolean, Record<string, Nullable<boolean>>]> {}\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function useConfirmModal(props: ConfirmModalProps) {\n const form = useForm(\n Object.entries(props.checkboxes ?? {}).reduce(\n (values, [name, checkbox]) => ({\n [name]: {\n type: 'boolean',\n default: checkbox.default,\n required: checkbox.required ? 'required' : undefined,\n },\n ...values,\n }),\n {} as Record<string, FormFieldDefinition<'boolean'>>,\n ),\n );\n\n const renderedTitle = computed(() => props.title ?? translateWithDefault('ui.confirm', 'Confirm'));\n const titleHidden = computed(() => !props.title);\n const renderedAcceptText = computed(() => props.acceptText ?? translateWithDefault('ui.accept', 'Ok'));\n const renderedCancelText = computed(() => props.cancelText ?? translateWithDefault('ui.cancel', 'Cancel'));\n\n return { form, renderedTitle, titleHidden, renderedAcceptText, renderedCancelText };\n}\n","<template>\n <!-- @vue-generic {import('@aerogel/core/ui/UI').ModalExposeResult<ConfirmModalExpose>} -->\n <Modal\n v-slot=\"{ close }\"\n :title=\"renderedTitle\"\n :title-hidden=\"titleHidden\"\n persistent\n >\n <Form :form @submit=\"close([true, form.data()])\">\n <Markdown :text=\"message\" :actions />\n\n <ul v-if=\"checkboxes\" class=\"mt-4 flex flex-col text-sm text-gray-600\">\n <li v-for=\"(checkbox, name) of checkboxes\" :key=\"name\">\n <label class=\"flex items-center\">\n <input\n v-model=\"form[name]\"\n type=\"checkbox\"\n :required=\"checkbox.required\"\n class=\"border-primary-600 text-primary-600 hover:bg-primary-50 hover:checked:bg-primary-500 focus:ring-primary-600 focus-visible:ring-primary-600 rounded border-2\"\n >\n <span class=\"ml-1.5\">{{ checkbox.label }}</span>\n </label>\n </li>\n </ul>\n\n <div class=\"mt-4 flex flex-row-reverse gap-2\">\n <Button :variant=\"acceptVariant\" submit>\n {{ renderedAcceptText }}\n </Button>\n <Button v-if=\"!required\" :variant=\"cancelVariant\" @click=\"close(false)\">\n {{ renderedCancelText }}\n </Button>\n </div>\n </Form>\n </Modal>\n</template>\n\n<script setup lang=\"ts\">\nimport Form from '@aerogel/core/components/ui/Form.vue';\nimport Markdown from '@aerogel/core/components/ui/Markdown.vue';\nimport Button from '@aerogel/core/components/ui/Button.vue';\nimport Modal from '@aerogel/core/components/ui/Modal.vue';\nimport { useConfirmModal } from '@aerogel/core/components/contracts/ConfirmModal';\nimport type { ConfirmModalExpose, ConfirmModalProps } from '@aerogel/core/components/contracts/ConfirmModal';\n\nconst { cancelVariant = 'secondary', ...props } = defineProps<ConfirmModalProps>();\nconst { form, renderedTitle, titleHidden, renderedAcceptText, renderedCancelText } = useConfirmModal(props);\n\ndefineExpose<ConfirmModalExpose>();\n</script>\n","<template>\n <div class=\"flex\">\n <slot v-for=\"button of buttons\" v-bind=\"button\">\n <Button\n size=\"icon\"\n variant=\"ghost\"\n class=\"group whitespace-nowrap\"\n :href=\"button.url\"\n :title=\"$td(`errors.report_${button.id}`, button.description)\"\n @click=\"button.click\"\n >\n <span class=\"sr-only\">{{ $td(`errors.report_${button.id}`, button.description) }}</span>\n <component :is=\"button.iconComponent\" class=\"size-4\" aria-hidden=\"true\" />\n </Button>\n </slot>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport IconConsole from '~icons/mdi/console';\nimport IconCopy from '~icons/zondicons/copy';\nimport IconGitHub from '~icons/mdi/github';\n\nimport { computed } from 'vue';\nimport { stringExcerpt, tap } from '@noeldemartin/utils';\nimport type { Component } from 'vue';\n\nimport App from '@aerogel/core/services/App';\nimport Button from '@aerogel/core/components/ui/Button.vue';\nimport UI from '@aerogel/core/ui/UI';\nimport { translateWithDefault } from '@aerogel/core/lang/utils';\nimport type { ErrorReport } from '@aerogel/core/errors';\n\ninterface ErrorReportModalButtonsDefaultSlotProps {\n id: string;\n description: string;\n iconComponent: Component;\n url?: string;\n click?(): void;\n}\n\ndefineSlots<{\n default(props: ErrorReportModalButtonsDefaultSlotProps): unknown;\n}>();\n\nconst props = defineProps<{ report: ErrorReport }>();\nconst summary = computed(() =>\n props.report.description ? `${props.report.title}: ${props.report.description}` : props.report.title);\nconst githubReportUrl = computed(() => {\n if (!App.sourceUrl) {\n return false;\n }\n\n const issueTitle = encodeURIComponent(summary.value);\n const issueBody = encodeURIComponent(\n [\n '[Please, explain here what you were trying to do when this error appeared]',\n '',\n 'Error details:',\n '```',\n stringExcerpt(\n props.report.details ?? 'Details missing from report',\n 1800 - issueTitle.length - App.sourceUrl.length,\n ).trim(),\n '```',\n ].join('\\n'),\n );\n\n return `${App.sourceUrl}/issues/new?title=${issueTitle}&body=${issueBody}`;\n});\nconst buttons = computed(() =>\n tap(\n [\n {\n id: 'clipboard',\n description: 'Copy to clipboard',\n iconComponent: IconCopy,\n async click() {\n await navigator.clipboard.writeText(`${summary.value}\\n\\n${props.report.details}`);\n\n UI.toast(translateWithDefault('errors.copiedToClipboard', 'Debug information copied to clipboard'));\n },\n },\n {\n id: 'console',\n description: 'Log to console',\n iconComponent: IconConsole,\n click() {\n const error = props.report.error ?? props.report;\n\n (window as { error?: unknown }).error = error;\n\n // eslint-disable-next-line no-console\n console.error(error);\n\n UI.toast(\n translateWithDefault(\n 'errors.addedToConsole',\n 'You can now use the **error** variable in the console',\n ),\n );\n },\n },\n ] as ErrorReportModalButtonsDefaultSlotProps[],\n (reportButtons) => {\n if (!githubReportUrl.value) {\n return;\n }\n\n reportButtons.push({\n id: 'github',\n description: 'Report in GitHub',\n iconComponent: IconGitHub,\n url: githubReportUrl.value,\n });\n },\n ));\n</script>\n","<template>\n <Markdown :text inline />\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\nimport Markdown from '@aerogel/core/components/ui/Markdown.vue';\nimport type { ErrorReport } from '@aerogel/core/errors';\n\nconst { totalReports, currentReport, report } = defineProps<{\n report: ErrorReport;\n currentReport?: number;\n totalReports?: number;\n}>();\n\nconst text = computed(() => {\n if (!totalReports || totalReports <= 1) {\n return report.title;\n }\n\n return `${report.title} (${currentReport}/${totalReports})`;\n});\n</script>\n","import { computed, ref } from 'vue';\n\nimport { translateWithDefault } from '@aerogel/core/lang';\nimport type { ErrorReport } from '@aerogel/core/errors';\nimport type { ModalExpose } from '@aerogel/core/components/contracts/Modal';\n\nexport interface ErrorReportModalProps {\n report: ErrorReport;\n reports: ErrorReport[];\n}\n\nexport interface ErrorReportModalExpose extends ModalExpose {}\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function useErrorReportModal(props: ErrorReportModalProps) {\n const activeReportIndex = ref(props.reports.includes(props.report) ? props.reports.indexOf(props.report) : 0);\n const activeReport = computed(() => props.reports[activeReportIndex.value] as ErrorReport);\n const details = computed(\n () =>\n activeReport.value.details?.trim() ||\n translateWithDefault('errors.detailsEmpty', 'This error is missing a stacktrace.'),\n );\n const previousReportText = translateWithDefault('errors.previousReport', 'Show previous report');\n const nextReportText = translateWithDefault('errors.nextReport', 'Show next report');\n\n return {\n activeReportIndex,\n details,\n nextReportText,\n previousReportText,\n activeReport,\n };\n}\n","<template>\n <Modal\n :title=\"$td('errors.report', 'Error report')\"\n title-hidden\n close-hidden\n class=\"p-0\"\n wrapper-class=\"sm:w-auto sm:min-w-lg sm:max-w-[80vw]\"\n >\n <div class=\"px-4 pt-5 pb-4\">\n <h2 class=\"flex justify-between gap-4\">\n <div class=\"flex items-center gap-2\">\n <IconExclamationSolid class=\"size-5 text-red-600\" />\n <ErrorReportModalTitle\n class=\"text-lg leading-6 font-semibold text-gray-900\"\n :report=\"activeReport\"\n :current-report=\"activeReportIndex + 1\"\n :total-reports=\"reports.length\"\n />\n <span v-if=\"reports.length > 1\" class=\"flex gap-0.5\">\n <Button\n size=\"icon\"\n variant=\"ghost\"\n :disabled=\"activeReportIndex === 0\"\n :aria-label=\"previousReportText\"\n :title=\"previousReportText\"\n @click=\"activeReportIndex--\"\n >\n <IconCheveronLeft class=\"size-4\" />\n </Button>\n <Button\n size=\"icon\"\n variant=\"ghost\"\n :disabled=\"activeReportIndex === reports.length - 1\"\n :aria-label=\"nextReportText\"\n :title=\"nextReportText\"\n @click=\"activeReportIndex++\"\n >\n <IconCheveronRight class=\"size-4\" />\n </Button>\n </span>\n </div>\n <ErrorReportModalButtons :report=\"activeReport\" class=\"gap-0.5\" />\n </h2>\n <Markdown v-if=\"activeReport.description\" :text=\"activeReport.description\" class=\"text-gray-600\" />\n </div>\n <div class=\"-mt-2 max-h-[75vh] overflow-auto bg-red-800/10\">\n <pre class=\"p-4 text-xs text-red-800\" v-text=\"details\" />\n </div>\n </Modal>\n</template>\n\n<script setup lang=\"ts\">\nimport IconCheveronLeft from '~icons/zondicons/cheveron-left';\nimport IconCheveronRight from '~icons/zondicons/cheveron-right';\nimport IconExclamationSolid from '~icons/zondicons/exclamation-solid';\n\nimport Markdown from '@aerogel/core/components/ui/Markdown.vue';\nimport Button from '@aerogel/core/components/ui/Button.vue';\nimport ErrorReportModalButtons from '@aerogel/core/components/ui/ErrorReportModalButtons.vue';\nimport ErrorReportModalTitle from '@aerogel/core/components/ui/ErrorReportModalTitle.vue';\nimport Modal from '@aerogel/core/components/ui/Modal.vue';\nimport { useErrorReportModal } from '@aerogel/core/components/contracts/ErrorReportModal';\nimport type {\n ErrorReportModalExpose,\n ErrorReportModalProps,\n} from '@aerogel/core/components/contracts/ErrorReportModal';\n\nconst props = defineProps<ErrorReportModalProps>();\n\nconst { activeReportIndex, details, nextReportText, previousReportText, activeReport } = useErrorReportModal(props);\n\ndefineExpose<ErrorReportModalExpose>();\n</script>\n","<template>\n <div class=\"mt-1 h-2 w-full overflow-hidden rounded-full bg-gray-200\">\n <div :class=\"filledClasses\" :style=\"`transform:translateX(-${(1 - renderedProgress) * 100}%)`\" />\n <span class=\"sr-only\">\n {{\n $td('ui.progress', '{progress}% complete', {\n progress: renderedProgress * 100,\n })\n }}\n </span>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onUnmounted, ref, watch } from 'vue';\n\nimport { classes } from '@aerogel/core/utils/classes';\nimport type Job from '@aerogel/core/jobs/Job';\nimport type { Falsifiable } from '@aerogel/core/utils';\n\nconst { filledClass, progress, job } = defineProps<{\n filledClass?: string;\n progress?: number;\n job?: Falsifiable<Job>;\n}>();\n\nlet cleanup: Falsifiable<Function>;\nconst jobProgress = ref(0);\nconst filledClasses = computed(() =>\n classes('size-full transition-transform duration-500 rounded-r-full ease-linear bg-primary-600', filledClass));\nconst renderedProgress = computed(() => {\n if (typeof progress === 'number') {\n return progress;\n }\n\n return jobProgress.value;\n});\n\nwatch(\n () => job,\n () => {\n cleanup && cleanup();\n\n jobProgress.value = job ? job.progress : 0;\n cleanup = job && job.listeners.add({ onUpdated: (value) => (jobProgress.value = value) });\n },\n { immediate: true },\n);\n\nonUnmounted(() => cleanup && cleanup());\n</script>\n","import { computed } from 'vue';\n\nimport { translateWithDefault } from '@aerogel/core/lang';\nimport type { Job } from '@aerogel/core/jobs';\nimport type { ModalExpose } from '@aerogel/core/components/contracts/Modal';\n\nexport interface LoadingModalProps {\n title?: string;\n message?: string;\n progress?: number;\n job?: Job;\n}\n\nexport interface LoadingModalExpose extends ModalExpose {}\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function useLoadingModal(props: LoadingModalProps) {\n const renderedTitle = computed(() => props.title ?? translateWithDefault('ui.loading', 'Loading'));\n const renderedMessage = computed(\n () => props.message ?? translateWithDefault('ui.loadingInProgress', 'Loading in progress...'),\n );\n const showProgress = computed(() => typeof props.progress === 'number' || !!props.job);\n const titleHidden = computed(() => !props.title);\n\n return { renderedTitle, renderedMessage, titleHidden, showProgress };\n}\n","<template>\n <Modal\n persistent\n class=\"flex\"\n wrapper-class=\"w-auto\"\n :title=\"renderedTitle\"\n :title-hidden\n :class=\"{ 'flex-col-reverse': showProgress, 'items-center justify-center gap-2': !showProgress }\"\n >\n <ProgressBar\n v-if=\"showProgress\"\n :progress\n :job\n class=\"min-w-[min(400px,80vw)]\"\n />\n <IconSpinner v-else class=\"text-primary-600 mr-1 size-6\" />\n <Markdown :text=\"renderedMessage\" />\n </Modal>\n</template>\n\n<script setup lang=\"ts\">\nimport IconSpinner from '~icons/svg-spinners/90-ring-with-bg';\n\nimport Markdown from '@aerogel/core/components/ui/Markdown.vue';\nimport Modal from '@aerogel/core/components/ui/Modal.vue';\nimport ProgressBar from '@aerogel/core/components/ui/ProgressBar.vue';\nimport { useLoadingModal } from '@aerogel/core/components/contracts/LoadingModal';\nimport type { LoadingModalExpose, LoadingModalProps } from '@aerogel/core/components/contracts/LoadingModal';\n\nconst props = defineProps<LoadingModalProps>();\nconst { renderedTitle, renderedMessage, titleHidden, showProgress } = useLoadingModal(props);\n\ndefineExpose<LoadingModalExpose>();\n</script>\n","<template>\n <component :is=\"as\">\n <slot />\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject, provide, readonly } from 'vue';\nimport { uuid } from '@noeldemartin/utils';\n\nimport type FormController from '@aerogel/core/forms/FormController';\nimport type { FormFieldValue } from '@aerogel/core/forms/FormController';\nimport type { InputEmits, InputExpose, InputProps } from '@aerogel/core/components/contracts/Input';\n\nconst { as = 'div', name, label, description, modelValue } = defineProps<InputProps & { as?: string }>();\nconst emit = defineEmits<InputEmits>();\nconst form = inject<FormController | null>('form', null);\nconst errors = computed(() => {\n if (!form || !name) {\n return null;\n }\n\n return form.errors[name] ?? null;\n});\n\nconst expose = {\n id: `input-${uuid()}`,\n name: computed(() => name),\n label: computed(() => label),\n description: computed(() => description),\n value: computed(() => {\n if (form && name) {\n return form.getFieldValue(name);\n }\n\n return modelValue;\n }),\n errors: readonly(errors),\n required: computed(() => {\n if (!name || !form) {\n return;\n }\n\n return form.getFieldRules(name).includes('required');\n }),\n update(value) {\n if (form && name) {\n form.setFieldValue(name, value as FormFieldValue);\n\n return;\n }\n\n emit('update:modelValue', value);\n },\n} satisfies InputExpose;\n\nprovide('input', expose);\ndefineExpose(expose);\n</script>\n","<template>\n <label v-if=\"show\" :for=\"input.id\">\n <slot>\n {{ input.label }}\n </slot>\n </label>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, useSlots } from 'vue';\n\nimport { injectReactiveOrFail } from '@aerogel/core/utils/vue';\nimport type { InputExpose } from '@aerogel/core/components/contracts/Input';\n\nconst input = injectReactiveOrFail<InputExpose>('input', '<HeadlessInputLabel> must be a child of a <HeadlessInput>');\nconst slots = useSlots();\nconst show = computed(() => !!(input.label || slots.default));\n</script>\n","<template>\n <input\n :id=\"input.id\"\n ref=\"$inputRef\"\n :name\n :checked\n :type=\"renderedType\"\n :required=\"input.required ?? undefined\"\n :aria-invalid=\"input.errors ? 'true' : 'false'\"\n :aria-describedby=\"\n input.errors ? `${input.id}-error` : input.description ? `${input.id}-description` : undefined\n \"\n @input=\"update\"\n >\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject, useTemplateRef, watchEffect } from 'vue';\n\nimport { injectReactiveOrFail } from '@aerogel/core/utils/vue';\nimport { onFormFocus } from '@aerogel/core/utils/composition/forms';\nimport type FormController from '@aerogel/core/forms/FormController';\nimport type { FormFieldValue } from '@aerogel/core/forms/FormController';\nimport type { InputExpose } from '@aerogel/core/components/contracts/Input';\n\nconst { type } = defineProps<{ type?: string }>();\nconst $input = useTemplateRef('$inputRef');\nconst input = injectReactiveOrFail<InputExpose>('input', '<HeadlessInputInput> must be a child of a <HeadlessInput>');\nconst form = inject<FormController | null>('form', null);\nconst name = computed(() => input.name ?? undefined);\nconst value = computed(() => input.value);\nconst renderedType = computed(() => {\n if (type) {\n return type;\n }\n\n const fieldType = (name.value && form?.getFieldType(name.value)) ?? '';\n\n return ['text', 'email', 'number', 'tel', 'url'].includes(fieldType) ? fieldType : 'text';\n});\nconst checked = computed(() => {\n if (type !== 'checkbox') {\n return;\n }\n\n return !!value.value;\n});\n\nfunction update() {\n if (!$input.value) {\n return;\n }\n\n input.update(getValue());\n}\n\nfunction getValue(): FormFieldValue | null {\n if (!$input.value) {\n return null;\n }\n\n switch (type) {\n case 'checkbox':\n return $input.value.checked;\n case 'date':\n return $input.value.valueAsDate;\n default:\n return $input.value.value;\n }\n}\n\nonFormFocus(input, () => $input.value?.focus());\nwatchEffect(() => {\n if (!$input.value) {\n return;\n }\n\n if (type === 'date' && value.value instanceof Date) {\n $input.value.valueAsDate = value.value;\n\n return;\n }\n\n $input.value.value = (value.value as string) ?? null;\n});\n</script>\n","<template>\n <slot :id=\"`${input.id}-description`\">\n <Markdown\n v-if=\"show\"\n v-bind=\"$attrs\"\n :id=\"`${input.id}-description`\"\n :text\n />\n </slot>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\nimport Markdown from '@aerogel/core/components/ui/Markdown.vue';\nimport { injectReactiveOrFail } from '@aerogel/core/utils/vue';\nimport type { InputExpose } from '@aerogel/core/components/contracts/Input';\n\ndefineOptions({ inheritAttrs: false });\n\nconst input = injectReactiveOrFail<InputExpose>(\n 'input',\n '<HeadlessInputDescription> must be a child of a <HeadlessInput>',\n);\nconst text = computed(() => (typeof input.description === 'string' ? input.description : ''));\nconst show = computed(() => !!input.description);\n</script>\n","<template>\n <p v-if=\"errorMessage\" :id=\"`${input.id}-error`\">\n {{ errorMessage }}\n </p>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\nimport { injectReactiveOrFail } from '@aerogel/core/utils/vue';\nimport { translateWithDefault } from '@aerogel/core/lang/utils';\nimport type { InputExpose } from '@aerogel/core/components/contracts/Input';\n\nconst input = injectReactiveOrFail<InputExpose>('input', '<HeadlessInputError> must be a child of a <HeadlessInput>');\nconst errorMessage = computed(() => {\n if (!input.errors) {\n return null;\n }\n\n return translateWithDefault(`errors.${input.errors[0]}`, `Error: ${input.errors[0]}`);\n});\n</script>\n","<template>\n <HeadlessInput\n ref=\"$inputRef\"\n :label=\"label\"\n :class=\"rootClasses\"\n v-bind=\"props\"\n @update:model-value=\"$emit('update:modelValue', $event)\"\n >\n <HeadlessInputLabel class=\"block text-sm leading-6 font-medium text-gray-900\" />\n <div :class=\"renderedWrapperClasses\">\n <HeadlessInputInput v-bind=\"inputAttrs\" :class=\"renderedInputClasses\" />\n <div v-if=\"$input?.errors\" class=\"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3\">\n <IconExclamationSolid class=\"size-5 text-red-500\" />\n </div>\n </div>\n <HeadlessInputDescription class=\"mt-2 text-sm text-gray-600\" />\n <HeadlessInputError class=\"mt-2 text-sm text-red-600\" />\n </HeadlessInput>\n</template>\n\n<script setup lang=\"ts\">\nimport IconExclamationSolid from '~icons/zondicons/exclamation-solid';\n\nimport { computed, useTemplateRef } from 'vue';\nimport type { HTMLAttributes } from 'vue';\n\nimport HeadlessInput from '@aerogel/core/components/headless/HeadlessInput.vue';\nimport HeadlessInputLabel from '@aerogel/core/components/headless/HeadlessInputLabel.vue';\nimport HeadlessInputInput from '@aerogel/core/components/headless/HeadlessInputInput.vue';\nimport HeadlessInputDescription from '@aerogel/core/components/headless/HeadlessInputDescription.vue';\nimport HeadlessInputError from '@aerogel/core/components/headless/HeadlessInputError.vue';\nimport { classes } from '@aerogel/core/utils/classes';\nimport { useInputAttrs } from '@aerogel/core/utils/composition/forms';\nimport type { InputEmits, InputProps } from '@aerogel/core/components/contracts/Input';\n\ndefineOptions({ inheritAttrs: false });\ndefineEmits<InputEmits>();\nconst { label, inputClass, wrapperClass, ...props } = defineProps<\n InputProps & { inputClass?: HTMLAttributes['class']; wrapperClass?: HTMLAttributes['class'] }\n>();\nconst $input = useTemplateRef('$inputRef');\nconst [inputAttrs, rootClasses] = useInputAttrs();\nconst renderedWrapperClasses = computed(() =>\n classes('relative rounded-md shadow-2xs', { 'mt-1': label }, wrapperClass));\nconst renderedInputClasses = computed(() =>\n classes(\n // eslint-disable-next-line vue/max-len\n 'block w-full rounded-md border-0 py-1.5 ring-1 ring-inset focus:ring-2 focus:ring-inset sm:text-sm sm:leading-6',\n {\n 'focus:ring-primary-600': !$input.value?.errors,\n 'text-gray-900 shadow-2xs ring-gray-900/10 placeholder:text-gray-400': !$input.value?.errors,\n 'pr-10 text-red-900 ring-red-900/10 placeholder:text-red-300 focus:ring-red-500': $input.value?.errors,\n },\n inputClass,\n ));\n</script>\n","import type { FormFieldDefinition } from './FormController';\n\nexport function booleanInput(defaultValue?: boolean, options: { rules?: string } = {}): FormFieldDefinition<'boolean'> {\n return {\n default: defaultValue,\n type: 'boolean',\n rules: options.rules,\n };\n}\n\nexport function dateInput(defaultValue?: Date, options: { rules?: string } = {}): FormFieldDefinition<'date'> {\n return {\n default: defaultValue,\n type: 'date',\n rules: options.rules,\n };\n}\n\nexport function enumInput<const T extends string>(\n values: readonly T[],\n defaultValue?: T,\n options: { rules?: string } = {},\n): FormFieldDefinition<'enum', string, T> {\n return {\n default: defaultValue,\n type: 'enum',\n rules: options.rules,\n values,\n };\n}\n\nexport function requiredBooleanInput(defaultValue?: boolean): FormFieldDefinition<'boolean', 'required'> {\n return {\n default: defaultValue,\n type: 'boolean',\n rules: 'required',\n };\n}\n\nexport function requiredDateInput(defaultValue?: Date): FormFieldDefinition<'date', 'required'> {\n return {\n default: defaultValue,\n type: 'date',\n rules: 'required',\n };\n}\n\nexport function requiredEnumInput<const T extends string>(\n values: readonly T[],\n defaultValue?: T,\n): FormFieldDefinition<'enum', 'required', T> {\n return {\n default: defaultValue,\n type: 'enum',\n rules: 'required',\n values,\n };\n}\n\nexport function requiredNumberInput(defaultValue?: number): FormFieldDefinition<'number', 'required'> {\n return {\n default: defaultValue,\n type: 'number',\n rules: 'required',\n };\n}\n\nexport function requiredObjectInput<T extends object>(defaultValue?: T): FormFieldDefinition<'object', 'required', T> {\n return {\n default: defaultValue,\n type: 'object',\n rules: 'required',\n };\n}\n\nexport function requiredStringInput(defaultValue?: string): FormFieldDefinition<'string', 'required'> {\n return {\n default: defaultValue,\n type: 'string',\n rules: 'required',\n };\n}\n\nexport function numberInput(defaultValue?: number, options: { rules?: string } = {}): FormFieldDefinition<'number'> {\n return {\n default: defaultValue,\n type: 'number',\n rules: options.rules,\n };\n}\n\nexport function objectInput<T extends object>(\n defaultValue?: T,\n options: { rules?: string } = {},\n): FormFieldDefinition<'object', string, T> {\n return {\n default: defaultValue,\n type: 'object',\n rules: options.rules,\n };\n}\n\nexport function stringInput(defaultValue?: string, options: { rules?: string } = {}): FormFieldDefinition<'string'> {\n return {\n default: defaultValue,\n type: 'string',\n rules: options.rules,\n };\n}\n","import { computed } from 'vue';\n\nimport { useForm } from '@aerogel/core/utils/composition/forms';\nimport { requiredStringInput } from '@aerogel/core/forms/utils';\nimport { translateWithDefault } from '@aerogel/core/lang';\nimport type { ButtonVariant } from '@aerogel/core/components/contracts/Button';\nimport type { ModalExpose } from '@aerogel/core/components/contracts/Modal';\n\nexport interface PromptModalProps {\n title?: string;\n message: string;\n label?: string;\n defaultValue?: string;\n placeholder?: string;\n acceptText?: string;\n acceptVariant?: ButtonVariant;\n cancelText?: string;\n cancelVariant?: ButtonVariant;\n}\n\nexport interface PromptModalExpose extends ModalExpose<string> {}\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function usePromptModal(props: PromptModalProps) {\n const form = useForm({\n draft: requiredStringInput(props.defaultValue ?? ''),\n });\n const renderedTitle = computed(() => props.title ?? props.message);\n const renderedMessage = computed(() => (props.title ? props.message : null));\n const renderedAcceptText = computed(() => props.acceptText ?? translateWithDefault('ui.accept', 'Ok'));\n const renderedCancelText = computed(() => props.cancelText ?? translateWithDefault('ui.cancel', 'Cancel'));\n\n return { form, renderedTitle, renderedMessage, renderedAcceptText, renderedCancelText };\n}\n","<template>\n <!-- @vue-generic {import('@aerogel/core/ui/UI').ModalExposeResult<PromptModalExpose>} -->\n <Modal v-slot=\"{ close }\" :title=\"renderedTitle\" persistent>\n <Form :form @submit=\"close(form.draft)\">\n <Markdown v-if=\"renderedMessage\" :text=\"renderedMessage\" />\n <Input\n name=\"draft\"\n class=\"mt-2\"\n :placeholder\n :label\n />\n\n <div class=\"mt-4 flex flex-row-reverse gap-2\">\n <Button :variant=\"acceptVariant\" submit>\n {{ renderedAcceptText }}\n </Button>\n <Button :variant=\"cancelVariant\" @click=\"close()\">\n {{ renderedCancelText }}\n </Button>\n </div>\n </Form>\n </Modal>\n</template>\n\n<script setup lang=\"ts\">\nimport Markdown from '@aerogel/core/components/ui/Markdown.vue';\nimport Button from '@aerogel/core/components/ui/Button.vue';\nimport Form from '@aerogel/core/components/ui/Form.vue';\nimport Input from '@aerogel/core/components/ui/Input.vue';\nimport Modal from '@aerogel/core/components/ui/Modal.vue';\nimport { usePromptModal } from '@aerogel/core/components/contracts/PromptModal';\nimport type { PromptModalExpose, PromptModalProps } from '@aerogel/core/components/contracts/PromptModal';\n\nconst { cancelVariant = 'secondary', ...props } = defineProps<PromptModalProps>();\nconst { form, renderedTitle, renderedMessage, renderedAcceptText, renderedCancelText } = usePromptModal(props);\n\ndefineExpose<PromptModalExpose>();\n</script>\n","<template>\n <div class=\"grid grow place-items-center\">\n <div class=\"flex flex-col items-center p-8\">\n <i-majesticons-exclamation class=\"size-20 text-red-600\" />\n <h1 class=\"mt-0 mb-0 text-center text-4xl font-medium text-red-600\">\n {{ $td('startupCrash.title', 'Oops, something went wrong!') }}\n </h1>\n <Markdown\n :text=\"\n $td(\n 'startupCrash.message',\n 'There was a problem starting the application, but here\\'s some things you can do:'\n )\n \"\n class=\"mt-4 text-center\"\n />\n <div\n class=\"mt-4 grid grid-cols-1 gap-2 sm:grid-cols-2 [&_button]:justify-start sm:[&_button]:size-32 sm:[&_button]:flex-col sm:[&_button]:justify-center [&_svg]:size-6 sm:[&_svg]:size-8\"\n >\n <Button variant=\"danger\" @click=\"$app.reload()\">\n <IconRefresh />\n {{ $td('startupCrash.reload', 'Try again') }}\n </Button>\n <Button variant=\"danger\" @click=\"$errors.inspect($errors.startupErrors)\">\n <IconBug />\n {{ $td('startupCrash.inspect', 'View error details') }}\n </Button>\n <Button variant=\"danger\" @click=\"purgeDevice()\">\n <IconDelete />\n {{ $td('startupCrash.purge', 'Purge device') }}\n </Button>\n <Button variant=\"danger\" @click=\"$errors.debug = !$errors.debug\">\n <IconFrameInspect />\n {{ $td('startupCrash.debug', 'Toggle debugging') }}\n </Button>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport IconBug from '~icons/material-symbols/bug-report';\nimport IconDelete from '~icons/material-symbols/delete-forever-rounded';\nimport IconFrameInspect from '~icons/material-symbols/frame-inspect';\nimport IconRefresh from '~icons/material-symbols/refresh-rounded';\n\nimport App from '@aerogel/core/services/App';\nimport Button from '@aerogel/core/components/ui/Button.vue';\nimport Markdown from '@aerogel/core/components/ui/Markdown.vue';\nimport Storage from '@aerogel/core/services/Storage';\nimport UI from '@aerogel/core/ui/UI';\nimport { translateWithDefault } from '@aerogel/core/lang/utils';\n\nasync function purgeDevice() {\n const confirmed = await UI.confirm(\n translateWithDefault('startupCrash.purgeConfirmTitle', 'Delete everything?'),\n translateWithDefault(\n 'startupCrash.purgeConfirmMessage',\n 'If the problem persists, one drastic solution may be to wipe the storage in this device ' +\n 'to start from scratch. However, keep in mind that **all the data that you haven\\'t ' +\n 'synchronized will be deleted forever**.\\n\\nDo you still want to proceed?',\n ),\n {\n acceptVariant: 'danger',\n acceptText: translateWithDefault('startupCrash.purgeConfirmAccept', 'Purge device'),\n },\n );\n\n if (!confirmed) {\n return;\n }\n\n await Storage.purge();\n await App.reload();\n}\n</script>\n","<template>\n <HeadlessToast :class=\"renderedClasses\">\n <Markdown v-if=\"message\" :text=\"message\" inline />\n\n <Button\n v-for=\"(action, key) of actions\"\n :key\n :action\n :variant\n :as=\"HeadlessToastAction\"\n />\n </HeadlessToast>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { HTMLAttributes } from 'vue';\n\nimport Button from '@aerogel/core/components/ui/Button.vue';\nimport Markdown from '@aerogel/core/components/ui/Markdown.vue';\nimport HeadlessToast from '@aerogel/core/components/headless/HeadlessToast.vue';\nimport HeadlessToastAction from '@aerogel/core/components/headless/HeadlessToastAction.vue';\nimport { variantClasses } from '@aerogel/core/utils/classes';\nimport type { ToastExpose, ToastProps } from '@aerogel/core/components/contracts/Toast';\nimport type { Variants } from '@aerogel/core/utils/classes';\n\nconst { class: baseClasses, variant = 'secondary' } = defineProps<ToastProps & { class?: HTMLAttributes['class'] }>();\nconst renderedClasses = computed(() =>\n variantClasses<Variants<Pick<ToastProps, 'variant'>>>(\n { baseClasses, variant },\n {\n baseClasses: 'flex items-center gap-2 rounded-md p-2 ring-1 shadow-lg border-gray-200',\n variants: {\n variant: {\n secondary: 'bg-gray-900 text-white ring-black',\n danger: 'bg-red-50 text-red-900 ring-red-100',\n },\n },\n defaultVariants: {\n variant: 'secondary',\n },\n },\n ));\n\ndefineExpose<ToastExpose>();\n</script>\n","import AlertModal from '@aerogel/core/components/ui/AlertModal.vue';\nimport ConfirmModal from '@aerogel/core/components/ui/ConfirmModal.vue';\nimport ErrorReportModal from '@aerogel/core/components/ui/ErrorReportModal.vue';\nimport LoadingModal from '@aerogel/core/components/ui/LoadingModal.vue';\nimport PromptModal from '@aerogel/core/components/ui/PromptModal.vue';\nimport StartupCrash from '@aerogel/core/components/ui/StartupCrash.vue';\nimport Toast from '@aerogel/core/components/ui/Toast.vue';\nimport { bootServices } from '@aerogel/core/services';\nimport { definePlugin } from '@aerogel/core/plugins';\n\nimport UI from './UI';\nimport type { UIComponents } from './UI';\nimport type { Component } from 'vue';\n\nconst services = { $ui: UI };\n\nexport * from './UI';\nexport * from './utils';\nexport { default as UI } from './UI';\n\nexport type UIServices = typeof services;\n\nexport default definePlugin({\n async install(app, options) {\n const components: Partial<Record<keyof UIComponents, Component>> = {\n 'alert-modal': AlertModal,\n 'confirm-modal': ConfirmModal,\n 'error-report-modal': ErrorReportModal,\n 'loading-modal': LoadingModal,\n 'prompt-modal': PromptModal,\n 'startup-crash': StartupCrash,\n 'toast': Toast,\n ...options.components,\n };\n\n for (const [name, component] of Object.entries(components)) {\n UI.registerComponent(name as keyof UIComponents, component as UIComponents[keyof UIComponents]);\n }\n\n await bootServices(app, services);\n },\n});\n\ndeclare module '@aerogel/core/bootstrap/options' {\n export interface AerogelOptions {\n components?: Partial<Partial<UIComponents>>;\n }\n}\n\ndeclare module '@aerogel/core/services' {\n export interface Services extends UIServices {}\n}\n","import { createApp } from 'vue';\nimport { isDevelopment } from '@noeldemartin/utils';\nimport type { App as AppInstance, Component } from 'vue';\n\nimport App from '@aerogel/core/services/App';\nimport directives from '@aerogel/core/directives';\nimport errors from '@aerogel/core/errors';\nimport Events from '@aerogel/core/services/Events';\nimport lang from '@aerogel/core/lang';\nimport services from '@aerogel/core/services';\nimport testing from '@aerogel/core/testing';\nimport ui from '@aerogel/core/ui';\nimport { installPlugins } from '@aerogel/core/plugins';\nimport type { AerogelOptions } from '@aerogel/core/bootstrap/options';\n\nexport type { AerogelOptions };\n\nexport async function bootstrapApplication(app: AppInstance, options: AerogelOptions = {}): Promise<void> {\n const plugins = [testing, directives, errors, lang, services, ui, ...(options.plugins ?? [])];\n\n App.instance = app;\n\n await installPlugins(plugins, app, options);\n await options.install?.(app);\n await Events.emit('application-ready');\n}\n\nexport async function bootstrap(rootComponent: Component, options: AerogelOptions = {}): Promise<void> {\n const app = createApp(rootComponent);\n\n if (isDevelopment()) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (window as any).$aerogel = app;\n }\n\n await bootstrapApplication(app, options);\n\n app.mount('#app');\n app._container?.classList.remove('loading');\n\n await Events.emit('application-mounted');\n}\n\ndeclare module '@aerogel/core/services/Events' {\n export interface EventsPayload {\n 'application-ready': void;\n 'application-mounted': void;\n }\n}\n","<template>\n <aside v-if=\"modal\">\n <ModalContext :child-index=\"1\" :modal />\n </aside>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\nimport ModalContext from '@aerogel/core/components/ui/ModalContext.vue';\nimport UI from '@aerogel/core/ui/UI';\n\nconst modal = computed(() => UI.modals[0] ?? null);\n</script>\n","<template>\n <textarea\n :id=\"input.id\"\n ref=\"$textAreaRef\"\n :name\n :value\n :required=\"input.required ?? undefined\"\n :aria-invalid=\"input.errors ? 'true' : 'false'\"\n :aria-describedby=\"\n input.errors ? `${input.id}-error` : input.description ? `${input.id}-description` : undefined\n \"\n @input=\"update\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, useTemplateRef } from 'vue';\n\nimport { onFormFocus } from '@aerogel/core/utils/composition/forms';\nimport { injectReactiveOrFail } from '@aerogel/core/utils/vue';\nimport type { InputExpose } from '@aerogel/core/components/contracts/Input';\n\nconst $textArea = useTemplateRef('$textAreaRef');\nconst input = injectReactiveOrFail<InputExpose>(\n 'input',\n '<HeadlessInputTextArea> must be a child of a <HeadlessInput>',\n);\nconst name = computed(() => input.name ?? undefined);\nconst value = computed(() => input.value as string);\n\nfunction update() {\n if (!$textArea.value) {\n return;\n }\n\n input.update($textArea.value.value);\n}\n\nonFormFocus(input, () => $textArea.value?.focus());\n</script>\n","<template>\n <HeadlessInput\n ref=\"$inputRef\"\n :class=\"renderedClasses\"\n v-bind=\"props\"\n @update:model-value=\"$emit('update:modelValue', $event)\"\n >\n <div class=\"flex h-6 items-center\">\n <HeadlessInputInput v-bind=\"inputAttrs\" type=\"checkbox\" :class=\"renderedInputClasses\" />\n </div>\n <div v-if=\"$slots.default\" :class=\"renderedLabelClasses\">\n <HeadlessInputLabel class=\"text-gray-900\">\n <slot />\n </HeadlessInputLabel>\n <HeadlessInputError class=\"text-red-600\" />\n </div>\n <div v-else-if=\"label\" :class=\"renderedLabelClasses\">\n <HeadlessInputLabel class=\"text-gray-900\" />\n <HeadlessInputError class=\"text-red-600\" />\n </div>\n </HeadlessInput>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, useTemplateRef } from 'vue';\nimport type { HTMLAttributes } from 'vue';\n\nimport HeadlessInput from '@aerogel/core/components/headless/HeadlessInput.vue';\nimport HeadlessInputError from '@aerogel/core/components/headless/HeadlessInputError.vue';\nimport HeadlessInputInput from '@aerogel/core/components/headless/HeadlessInputInput.vue';\nimport HeadlessInputLabel from '@aerogel/core/components/headless/HeadlessInputLabel.vue';\nimport { classes } from '@aerogel/core/utils/classes';\nimport { useInputAttrs } from '@aerogel/core/utils/composition/forms';\nimport type { InputEmits, InputProps } from '@aerogel/core/components/contracts/Input';\n\ndefineOptions({ inheritAttrs: false });\ndefineEmits<InputEmits>();\n\nconst { inputClass, labelClass, ...props } = defineProps<\n InputProps & { inputClass?: HTMLAttributes['class']; labelClass?: HTMLAttributes['class'] }\n>();\n\nconst $input = useTemplateRef('$inputRef');\nconst [inputAttrs, rootClasses] = useInputAttrs();\nconst renderedClasses = computed(() => classes('relative flex items-start', rootClasses.value));\nconst renderedInputClasses = computed(() =>\n classes(\n 'size-4 rounded text-primary-600 not-checked:hover:bg-gray-200 checked:hover:text-primary-500 checked:border-0',\n {\n 'border-gray-300 focus:ring-primary-600': !$input.value?.errors,\n 'border-red-400 border-2 focus:ring-red-600': $input.value?.errors,\n },\n inputClass,\n ));\nconst renderedLabelClasses = computed(() => classes('ml-2 text-sm leading-6', labelClass));\n</script>\n","<template>\n <DropdownMenuItem :class=\"renderedClasses\" v-bind=\"props\" @select=\"$emit('select')\">\n <slot />\n </DropdownMenuItem>\n</template>\n\n<script setup lang=\"ts\">\nimport { classes } from '@aerogel/core/utils';\nimport { computed } from 'vue';\nimport { DropdownMenuItem } from 'reka-ui';\nimport type { HTMLAttributes } from 'vue';\nimport type { PrimitiveProps } from 'reka-ui';\n\ndefineEmits<{ select: [] }>();\n\nconst { class: rootClass, ...props } = defineProps<{ class?: HTMLAttributes['class'] } & PrimitiveProps>();\nconst renderedClasses = computed(() =>\n classes(\n 'flex w-full items-center gap-2 rounded-lg px-2 py-2 text-sm text-gray-900 data-[highlighted]:bg-gray-100',\n rootClass,\n ));\n</script>\n","<template>\n <DropdownMenuContent\n class=\"gap-y-0.5 rounded-lg bg-white p-1.5 shadow-lg ring-1 ring-black/5\"\n :align=\"dropdownMenu.align\"\n :side=\"dropdownMenu.side\"\n >\n <slot>\n <DropdownMenuOption\n v-for=\"(option, key) in dropdownMenu.options\"\n :key\n :as=\"option.route || option.href ? HeadlessButton : undefined\"\n :class=\"option.class\"\n v-bind=\"\n option.route || option.href\n ? {\n href: option.href,\n route: option.route,\n routeParams: option.routeParams,\n routeQuery: option.routeQuery,\n }\n : {}\n \"\n @select=\"option.click?.()\"\n >\n {{ option.label }}\n </DropdownMenuOption>\n </slot>\n </DropdownMenuContent>\n</template>\n\n<script setup lang=\"ts\">\nimport { DropdownMenuContent } from 'reka-ui';\n\nimport { injectReactiveOrFail } from '@aerogel/core/utils';\nimport type { DropdownMenuExpose } from '@aerogel/core/components/contracts/DropdownMenu';\n\nimport DropdownMenuOption from './DropdownMenuOption.vue';\nimport HeadlessButton from '../headless/HeadlessButton.vue';\n\nconst dropdownMenu = injectReactiveOrFail<DropdownMenuExpose>(\n 'dropdown-menu',\n '<DropdownMenuOptions> must be a child of a <DropdownMenu>',\n);\n</script>\n","<template>\n <DropdownMenuRoot>\n <DropdownMenuTrigger>\n <slot />\n </DropdownMenuTrigger>\n <DropdownMenuPortal>\n <slot name=\"options\">\n <DropdownMenuOptions />\n </slot>\n </DropdownMenuPortal>\n </DropdownMenuRoot>\n</template>\n\n<script setup lang=\"ts\">\nimport { DropdownMenuPortal, DropdownMenuRoot, DropdownMenuTrigger } from 'reka-ui';\nimport { computed, provide } from 'vue';\nimport type { AcceptRefs } from '@aerogel/core/utils';\n\nimport type { DropdownMenuExpose, DropdownMenuProps } from '@aerogel/core/components/contracts/DropdownMenu';\n\nimport DropdownMenuOptions from './DropdownMenuOptions.vue';\n\nconst { align, side, options } = defineProps<DropdownMenuProps>();\nconst expose = {\n align,\n side,\n options: computed(() => options?.filter(Boolean)),\n} satisfies AcceptRefs<DropdownMenuExpose>;\n\nprovide('dropdown-menu', expose);\ndefineExpose(expose);\n</script>\n","<template>\n <div class=\"relative\" :class=\"{ 'pointer-events-none!': disabled && !editing }\">\n <div v-if=\"!editing\" :class=\"renderedContentClass\">\n <slot />\n </div>\n <span v-else :class=\"renderedFillerClass\">\n {{ draft }}\n </span>\n <span v-if=\"type === 'number'\" class=\"inline-block transition-[width]\" :class=\"editing ? 'w-5' : 'w-0'\" />\n <form class=\"w-full\" :aria-hidden=\"formAriaHidden\" @submit.prevent=\"$input?.blur()\">\n <input\n ref=\"$inputRef\"\n v-model=\"draft\"\n :tabindex=\"tabindex ?? undefined\"\n :aria-label=\"ariaLabel ?? undefined\"\n :type\n :class=\"[\n renderedInputClass,\n { 'opacity-0': !editing, 'appearance-textfield': !editing && type === 'number' },\n ]\"\n @keyup=\"$emit('update', draft)\"\n @focus=\"startEditing()\"\n @blur=\"stopEditing()\"\n >\n </form>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, useTemplateRef, watchEffect } from 'vue';\nimport type { HTMLAttributes } from 'vue';\n\nimport { classes } from '@aerogel/core/utils/classes';\n\nconst emit = defineEmits<{ update: [value: string | number]; save: [] }>();\nconst {\n type = 'text',\n text,\n contentClass,\n ariaLabel,\n formAriaHidden,\n tabindex,\n disabled,\n} = defineProps<{\n type?: string;\n contentClass?: HTMLAttributes['class'];\n ariaLabel?: string;\n formAriaHidden?: boolean;\n tabindex?: string;\n text: string;\n disabled?: boolean;\n}>();\nconst $input = useTemplateRef('$inputRef');\nconst editing = ref<string | null>(null);\nconst draft = ref(text);\nconst renderedContentClass = computed(() => classes('inline whitespace-pre', contentClass));\nconst renderedFillerClass = computed(() => classes('invisible whitespace-pre', contentClass));\nconst renderedInputClass = computed(() =>\n classes('absolute inset-0 h-full w-full resize-none border-0 bg-transparent p-0 focus:ring-0', contentClass));\n\nfunction startEditing() {\n editing.value = text;\n}\n\nfunction stopEditing() {\n if (!editing.value) {\n return;\n }\n\n if (type !== 'number' && draft.value.trim().length === 0) {\n draft.value = editing.value;\n\n emit('update', draft.value);\n }\n\n editing.value = null;\n\n emit('save');\n}\n\nwatchEffect(() => (draft.value = text));\n</script>\n","<template>\n <Markdown :text=\"message\" inline />\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\nimport { getErrorMessage } from '@aerogel/core/errors/utils';\nimport type { ErrorSource } from '@aerogel/core/errors/Errors.state';\n\nimport Markdown from '@aerogel/core/components/ui/Markdown.vue';\n\nconst { error } = defineProps<{ error: ErrorSource }>();\nconst message = computed(() => getErrorMessage(error));\n</script>\n","<template>\n <Modal :title=\"$td('settings.title', 'Settings')\">\n <component :is=\"setting.component\" v-for=\"(setting, key) in settings\" :key />\n </Modal>\n</template>\n\n<script setup lang=\"ts\">\nimport { arraySorted } from '@noeldemartin/utils';\nimport { computed } from 'vue';\n\nimport App from '@aerogel/core/services/App';\nimport Modal from '@aerogel/core/components/ui/Modal.vue';\n\nconst settings = computed(() => arraySorted(App.settings, 'priority', 'desc'));\n</script>\n","<template>\n <HeadlessInput\n ref=\"$inputRef\"\n :label=\"label\"\n :class=\"rootClasses\"\n v-bind=\"props\"\n @update:model-value=\"$emit('update:modelValue', $event)\"\n >\n <HeadlessInputLabel class=\"block text-sm leading-6 font-medium text-gray-900\" />\n <div :class=\"renderedWrapperClasses\">\n <HeadlessInputTextArea v-bind=\"inputAttrs\" :class=\"renderedInputClasses\" />\n <div v-if=\"$input?.errors\" class=\"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3\">\n <IconExclamationSolid class=\"size-5 text-red-500\" />\n </div>\n </div>\n <HeadlessInputDescription class=\"mt-2 text-sm text-gray-600\" />\n <HeadlessInputError class=\"mt-2 text-sm text-red-600\" />\n </HeadlessInput>\n</template>\n\n<script setup lang=\"ts\">\nimport IconExclamationSolid from '~icons/zondicons/exclamation-solid';\n\nimport { computed, useTemplateRef } from 'vue';\nimport type { HTMLAttributes } from 'vue';\n\nimport HeadlessInput from '@aerogel/core/components/headless/HeadlessInput.vue';\nimport HeadlessInputLabel from '@aerogel/core/components/headless/HeadlessInputLabel.vue';\nimport HeadlessInputTextArea from '@aerogel/core/components/headless/HeadlessInputTextArea.vue';\nimport HeadlessInputDescription from '@aerogel/core/components/headless/HeadlessInputDescription.vue';\nimport HeadlessInputError from '@aerogel/core/components/headless/HeadlessInputError.vue';\nimport { classes } from '@aerogel/core/utils/classes';\nimport { useInputAttrs } from '@aerogel/core/utils/composition/forms';\nimport type { InputEmits, InputProps } from '@aerogel/core/components/contracts/Input';\n\ndefineOptions({ inheritAttrs: false });\ndefineEmits<InputEmits>();\nconst { label, inputClass, wrapperClass, ...props } = defineProps<\n InputProps & { inputClass?: HTMLAttributes['class']; wrapperClass?: HTMLAttributes['class'] }\n>();\nconst $input = useTemplateRef('$inputRef');\nconst [inputAttrs, rootClasses] = useInputAttrs();\nconst renderedWrapperClasses = computed(() =>\n classes('relative rounded-md shadow-2xs', { 'mt-1': label }, wrapperClass));\nconst renderedInputClasses = computed(() =>\n classes(\n // eslint-disable-next-line vue/max-len\n 'block w-full rounded-md border-0 py-1.5 ring-1 ring-inset focus:ring-2 focus:ring-inset sm:text-sm sm:leading-6',\n {\n 'focus:ring-primary-600': !$input.value?.errors,\n 'text-gray-900 shadow-2xs ring-gray-900/10 placeholder:text-gray-400': !$input.value?.errors,\n 'pr-10 text-red-900 ring-red-900/10 placeholder:text-red-300 focus:ring-red-500': $input.value?.errors,\n },\n inputClass,\n ));\n</script>\n","import { ListenersManager, PromisedValue, round, tap, toError } from '@noeldemartin/utils';\nimport type { Listeners } from '@noeldemartin/utils';\n\nimport JobCancelledError from '@aerogel/core/errors/JobCancelledError';\n\nimport type { JobListener } from './listeners';\nimport type { JobStatus } from './status';\n\nexport default abstract class Job<\n Listener extends JobListener = JobListener,\n Status extends JobStatus = JobStatus,\n SerializedStatus extends JobStatus = JobStatus,\n> {\n\n protected status: Status;\n protected _listeners: ListenersManager<JobListener>;\n protected _progress?: number;\n protected _cancelled?: PromisedValue<void>;\n protected _started: PromisedValue<void>;\n protected _completed: PromisedValue<void>;\n\n constructor() {\n this.status = this.getInitialStatus();\n this._listeners = new ListenersManager();\n this._started = new PromisedValue();\n this._completed = new PromisedValue();\n }\n\n public async start(): Promise<void> {\n this.beforeStart();\n this._started.resolve();\n\n try {\n await this.updateProgress();\n await this.run();\n await this.updateProgress();\n\n this._completed.resolve();\n } catch (error) {\n if (error instanceof JobCancelledError) {\n return;\n }\n\n throw tap(toError(error), (realError) => {\n this._completed.reject(realError);\n });\n }\n }\n\n public async cancel(): Promise<void> {\n this._cancelled = new PromisedValue();\n\n await this._cancelled;\n }\n\n public serialize(): SerializedStatus {\n return this.serializeStatus(this.status);\n }\n\n public get listeners(): Listeners<Listener> {\n return this._listeners;\n }\n\n public get progress(): number {\n return this._progress ?? 0;\n }\n\n public get cancelled(): boolean {\n return !!this._cancelled?.isResolved();\n }\n\n public get started(): Promise<void> {\n return this._started;\n }\n\n public get completed(): Promise<void> {\n return this._completed;\n }\n\n protected abstract run(): Promise<void>;\n\n protected getInitialStatus(): Status {\n return { completed: false } as Status;\n }\n\n protected beforeStart(): void {\n if (!this._started.isResolved()) {\n return;\n }\n\n if (this._cancelled) {\n delete this._progress;\n delete this._cancelled;\n\n return;\n }\n\n throw new Error('Job already started!');\n }\n\n protected assertNotCancelled(): void {\n if (!this._cancelled) {\n return;\n }\n\n this._cancelled.resolve();\n\n throw new JobCancelledError();\n }\n\n protected calculateCurrentProgress(status?: JobStatus): number {\n status ??= this.status;\n\n if (status.completed) {\n return 1;\n }\n\n if (!status.children) {\n return 0;\n }\n\n return round(\n status.children.reduce((total, child) => total + this.calculateCurrentProgress(child), 0) /\n status.children.length,\n 2,\n );\n }\n\n protected async updateProgress(update?: (status: Status) => unknown): Promise<void> {\n await update?.(this.status);\n\n const progress = this.calculateCurrentProgress();\n\n if (progress === this._progress) {\n return;\n }\n\n this._progress = progress;\n\n await this._listeners.emit('onUpdated', progress);\n }\n\n protected serializeStatus(status: Status): SerializedStatus {\n return { ...status } as unknown as SerializedStatus;\n }\n\n}\n","import Job from './Job';\n\nexport { Job };\nexport * from './Job';\nexport * from './listeners';\nexport * from './status';\n\nexport async function dispatch(job: Job): Promise<void> {\n await job.start();\n}\n"],"names":["ServiceBootError","JSError","serviceNamespace","cause","appNamespace","Aerogel","stringToSlug","_store","initializePiniaStore","resetPiniaStore","tap","createPinia","store","setActivePinia","getPiniaStore","defineServiceStore","name","options","defineStore","defineServiceState","_a","Service","state","key","value","__publicField","MagicObject","getters","PromisedValue","property","handleError","error","Storage","stateOrProperty","update","old","objectOnly","keyOrKeys","keys","arrayFrom","isEmpty","persisted","watcher","storage","objectDeepClone","fail","EventListenerPriorities","EventsService","event","listener","payload","listeners","priority","optionsOrListener","handler","onceListener","off","args","priorities","arrayRemove","handlers","_b","a","b","_c","Events","facade","defineSettings","settings","Service$3","getEnv","AppService","setting","markRaw","callback","queryParameters","updateLocationQueryParameters","forever","App","definePlugin","plugin","installPlugins","plugins","pluginsMap","renderVNodeAttrs","node","attrs","toString","defineDirective","directive","injectReactive","inject","reactive","injectReactiveOrFail","errorMessage","injectOrFail","renderVNode","Comment","Text","Static","resizeObservers","measure","element","modifiers","sizes","variantClasses","config","valueBaseClasses","values","configBaseClasses","configs","variants","cva","classes","unref","inputs","twMerge","clsx","useEvent","unsubscribe","onUnmounted","builtInRules","isValidType","definition","validators","defineFormValidationRule","rule","validator","validateType","validate","errors","__valueType","validForms","FormController","fields","ref","computed","readonly","field","formErrors","valid","input","nextTick","rules","data","initialData","onFormFocus","form","stop","useForm","useInputAttrs","useAttrs","objectWithout","onCleanMounted","operation","cleanUp","noop","onMounted","persistent","defaults","watch","toRaw","computedAsync","getter","result","asyncValue","computedDebounce","optionsOrGetter","inputGetter","inputOptions","debounce","watchEffect","router","makeRenderer","Renderer","renderer","link","defaultLink","renderActionLinks","html","matches","stringMatchAll","action","text","renderRouteLinks","route","url","getMarkdownRouter","setMarkdownRouter","markdownRouter","renderMarkdown","markdown","marked","safeHtml","DOMPurify","builtInDirectives","directives","app","CacheService","response","cache","instance","Cache","StorageService","replaceExisting","original","replacements","defaultServices","bootServices","services","service","isDevelopment","isTesting","services$3","MOBILE_BREAKPOINT","Layouts","getCurrentLayout","Service$2","layout","modals","closing","UIService","component","messageOrTitle","message","getProperties","messageOrOptions","properties","confirmed","checkboxes","checkbox","defaultValue","trim","rawResult","operationOrMessageOrOptions","processOperation","o","processArgs","delay","props","delayed","operationPromise","after","modal","otherOptions","toast","uuid","id","callbacks","resolve","required","m","_modal","splash","UI","DefaultLangProvider","locale","fallbackLocale","_","defaultMessage","Service$1","LangService","provider","parameters","locales","Lang","translate","translateWithDefault","logs","startupErrors","ErrorsService","errorOrReports","_reports","report","reports","startupError","log","isObject","objectWithoutEmpty","Errors","__props","_createPropsRestProxy","renderedClasses","hasSelectOptionLabel","option","select","renderedLabel","itemOption","emit","__emit","computedValue","acceptableValue","computedOptions","evaluate","expose","provide","__expose","slots","useSlots","show","renderedOuterClasses","renderedInnerClasses","forwardRef","useForwardExpose","browserLocale","renderLocale","settings$1","Language","lang","_useSlots","renderedHtml","root","h","onClick","target","isInstanceOf","renderedRootClass","Debug","registerErrorHandler","getErrorMessage","JobCancelledError","frameworkHandler","setUpErrorHandler","baseHandler","errorHandler","__","___","testing","$content","close","closed","modalProperties","toRef","childIndex","$modalContentRef","useTemplateRef","childModal","$modal","currentRef","context","inForeground","contentProps","renderedContentClass","renderedWrapperClass","useAlertModal","renderedTitle","titleHidden","offSubmit","onCleanup","useConfirmModal","renderedAcceptText","renderedCancelText","summary","githubReportUrl","issueTitle","issueBody","stringExcerpt","buttons","IconCopy","IconConsole","reportButtons","IconGitHub","useErrorReportModal","activeReportIndex","activeReport","details","previousReportText","nextReportText","cleanup","jobProgress","filledClasses","renderedProgress","useLoadingModal","renderedMessage","showProgress","$input","renderedType","fieldType","checked","getValue","inputAttrs","rootClasses","renderedWrapperClasses","renderedInputClasses","booleanInput","dateInput","enumInput","requiredBooleanInput","requiredDateInput","requiredEnumInput","requiredNumberInput","requiredObjectInput","requiredStringInput","numberInput","objectInput","stringInput","usePromptModal","purgeDevice","ui","components","AlertModal","ConfirmModal","ErrorReportModal","LoadingModal","PromptModal","StartupCrash","Toast","bootstrapApplication","bootstrap","rootComponent","createApp","$textArea","renderedLabelClasses","dropdownMenu","editing","draft","renderedFillerClass","renderedInputClass","startEditing","stopEditing","arraySorted","Job","ListenersManager","toError","realError","status","round","total","child","progress","dispatch","job"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"aerogel-core.js","sources":["../src/errors/ServiceBootError.ts","../src/utils/app.ts","../src/services/store.ts","../src/services/Service.ts","../src/services/Events.ts","../src/services/App.state.ts","../src/services/App.ts","../src/plugins/index.ts","../src/utils/vue.ts","../src/directives/measure.ts","../src/utils/classes.ts","../src/utils/composition/events.ts","../src/forms/validation.ts","../src/forms/FormController.ts","../src/utils/composition/forms.ts","../src/utils/composition/hooks.ts","../src/utils/composition/persistent.ts","../src/utils/composition/reactiveSet.ts","../src/utils/composition/state.ts","../src/utils/markdown.ts","../src/utils/time.ts","../src/directives/safe-html.ts","../src/directives/index.ts","../src/services/Cache.ts","../src/services/Storage.ts","../src/services/utils.ts","../src/services/index.ts","../src/lang/DefaultLangProvider.ts","../src/lang/Lang.state.ts","../src/lang/Lang.ts","../src/lang/utils.ts","../src/errors/utils.ts","../src/ui/modals.ts","../src/ui/utils.ts","../src/ui/UI.state.ts","../src/ui/UI.ts","../src/errors/Errors.state.ts","../src/errors/Errors.ts","../src/components/headless/HeadlessButton.vue","../src/components/ui/Button.vue","../src/components/contracts/Select.ts","../src/components/headless/HeadlessSelectValue.vue","../src/components/headless/HeadlessSelectTrigger.vue","../src/components/headless/HeadlessSelectOption.vue","../src/components/headless/HeadlessSelectOptions.vue","../src/components/headless/HeadlessSelect.vue","../src/components/headless/HeadlessSelectLabel.vue","../src/components/ui/SelectLabel.vue","../src/components/ui/SelectOption.vue","../src/components/ui/SelectOptions.vue","../src/components/ui/SelectTrigger.vue","../src/components/headless/HeadlessSelectError.vue","../src/components/ui/Select.vue","../src/lang/settings/Language.vue","../src/lang/settings/index.ts","../src/lang/index.ts","../src/components/ui/Markdown.vue","../src/components/ui/Setting.vue","../src/components/headless/HeadlessSwitch.vue","../src/components/ui/Switch.vue","../src/errors/settings/Debug.vue","../src/errors/settings/index.ts","../src/errors/JobCancelledError.ts","../src/errors/index.ts","../src/testing/index.ts","../src/components/headless/HeadlessModal.vue","../src/components/headless/HeadlessModalContent.vue","../src/components/headless/HeadlessModalDescription.vue","../src/components/headless/HeadlessModalOverlay.vue","../src/components/headless/HeadlessModalTitle.vue","../src/components/ui/Modal.vue","../src/components/contracts/AlertModal.ts","../src/components/ui/AlertModal.vue","../src/components/ui/Form.vue","../src/components/contracts/ConfirmModal.ts","../src/components/ui/ConfirmModal.vue","../src/components/ui/ErrorReportModalButtons.vue","../src/components/ui/ErrorReportModalTitle.vue","../src/components/contracts/ErrorReportModal.ts","../src/components/ui/ErrorReportModal.vue","../src/components/ui/ProgressBar.vue","../src/components/contracts/LoadingModal.ts","../src/components/ui/LoadingModal.vue","../src/components/headless/HeadlessInput.vue","../src/components/headless/HeadlessInputLabel.vue","../src/components/headless/HeadlessInputInput.vue","../src/components/headless/HeadlessInputDescription.vue","../src/components/headless/HeadlessInputError.vue","../src/components/ui/Input.vue","../src/forms/utils.ts","../src/components/contracts/PromptModal.ts","../src/components/ui/PromptModal.vue","../src/components/ui/StartupCrash.vue","../src/components/headless/HeadlessToastAction.vue","../src/components/headless/HeadlessToast.vue","../src/components/ui/Toast.vue","../src/ui/index.ts","../src/forms/index.ts","../src/bootstrap/index.ts","../src/components/AppToasts.vue","../src/components/AppOverlays.vue","../src/components/AppLayout.vue","../src/components/headless/HeadlessInputTextArea.vue","../src/components/ui/Details.vue","../src/components/ui/AdvancedOptions.vue","../src/components/ui/Checkbox.vue","../src/components/vue/Provide.vue","../src/components/ui/ComboboxOption.vue","../src/components/ui/ComboboxOptions.vue","../src/components/ui/ComboboxTrigger.vue","../src/components/ui/ComboboxLabel.vue","../src/components/ui/Combobox.vue","../src/components/ui/DropdownMenuOption.vue","../src/components/ui/DropdownMenuOptions.vue","../src/components/ui/DropdownMenu.vue","../src/components/ui/EditableContent.vue","../src/components/ui/ErrorLogsModal.vue","../src/components/ui/ErrorLogs.vue","../src/components/ui/ErrorMessage.vue","../src/components/ui/Link.vue","../src/components/ui/SettingsModal.vue","../src/components/ui/TextArea.vue","../src/jobs/Job.ts","../src/jobs/index.ts"],"sourcesContent":["import { JSError } from '@noeldemartin/utils';\n\nexport default class ServiceBootError extends JSError {\n\n constructor(serviceNamespace: string, cause: unknown) {\n super(`Service '${serviceNamespace}' failed booting`, { cause });\n }\n\n}\n","import Aerogel from 'virtual:aerogel';\n\nimport { stringToSlug } from '@noeldemartin/utils';\n\nexport function appNamespace(): string {\n return Aerogel.namespace ?? stringToSlug(Aerogel.name);\n}\n","import { tap } from '@noeldemartin/utils';\nimport { createPinia, defineStore, setActivePinia } from 'pinia';\nimport type { DefineStoreOptions, Pinia, StateTree, Store, _GettersTree } from 'pinia';\n\nlet _store: Pinia | null = null;\n\nfunction initializePiniaStore(): Pinia {\n return _store ?? resetPiniaStore();\n}\n\nexport function resetPiniaStore(): Pinia {\n return tap(createPinia(), (store) => {\n _store = store;\n\n setActivePinia(store);\n });\n}\n\nexport function getPiniaStore(): Pinia {\n return _store ?? initializePiniaStore();\n}\n\nexport function defineServiceStore<Id extends string, S extends StateTree = {}, G extends _GettersTree<S> = {}, A = {}>(\n name: Id,\n options: Omit<DefineStoreOptions<Id, S, G, A>, 'id'>,\n): Store<Id, S, G, A> {\n initializePiniaStore();\n\n return defineStore(name, options)();\n}\n","import {\n MagicObject,\n PromisedValue,\n Storage,\n arrayFrom,\n fail,\n isEmpty,\n objectDeepClone,\n objectOnly,\n} from '@noeldemartin/utils';\nimport type { Constructor, Nullable } from '@noeldemartin/utils';\nimport type { Store } from 'pinia';\n\nimport ServiceBootError from '@aerogel/core/errors/ServiceBootError';\nimport { appNamespace } from '@aerogel/core/utils/app';\nimport { defineServiceStore } from '@aerogel/core/services/store';\nimport type { Unref } from '@aerogel/core/utils/vue';\n\nexport type ServiceState = Record<string, any>; // eslint-disable-line @typescript-eslint/no-explicit-any\nexport type DefaultServiceState = any; // eslint-disable-line @typescript-eslint/no-explicit-any\nexport type ServiceConstructor<T extends Service = Service> = Constructor<T> & typeof Service;\n\nexport type ComputedStateDefinition<TState extends ServiceState, TComputedState extends ServiceState> = {\n [K in keyof TComputedState]: (state: Unref<TState>) => TComputedState[K];\n} & ThisType<{\n readonly [K in keyof TComputedState]: TComputedState[K];\n}>;\n\nexport type StateWatchers<TService extends Service, TState extends ServiceState> = {\n [K in keyof TState]?: (this: TService, value: TState[K], oldValue: TState[K]) => unknown;\n};\n\nexport type ServiceWithState<\n State extends ServiceState = ServiceState,\n ComputedState extends ServiceState = {},\n ServiceStorage = Partial<State>,\n> = Constructor<Unref<State>> &\n Constructor<ComputedState> &\n Constructor<Service<Unref<State>, ComputedState, Unref<ServiceStorage>>>;\n\nexport function defineServiceState<\n State extends ServiceState = ServiceState,\n ComputedState extends ServiceState = {},\n ServiceStorage = Partial<State>,\n>(options: {\n name: string;\n initialState: State | (() => State);\n persist?: (keyof State)[];\n watch?: StateWatchers<Service, State>;\n computed?: ComputedStateDefinition<State, ComputedState>;\n serialize?: (state: Partial<State>) => ServiceStorage;\n restore?: (state: ServiceStorage) => Partial<State>;\n}): ServiceWithState<State, ComputedState, ServiceStorage> {\n return class extends Service<Unref<State>, ComputedState, ServiceStorage> {\n\n public static override persist = (options.persist as string[]) ?? [];\n\n protected override usesStore(): boolean {\n return true;\n }\n\n protected override getName(): string | null {\n return options.name ?? null;\n }\n\n protected override getInitialState(): Unref<State> {\n if (typeof options.initialState === 'function') {\n return options.initialState();\n }\n\n return Object.entries(options.initialState).reduce((state, [key, value]) => {\n try {\n value = structuredClone(value);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.warn(\n `Could not clone '${key}' state from ${this.getName()} service, ` +\n 'this may cause problems if you\\'re using multiple instances of the service ' +\n '(for example, in unit tests).\\n' +\n 'To fix this problem, declare your initialState as a function instead.',\n );\n }\n\n state[key as keyof State] = value;\n\n return state;\n }, {} as Unref<State>);\n }\n\n protected override getComputedStateDefinition(): ComputedStateDefinition<Unref<State>, ComputedState> {\n return (options.computed ?? {}) as ComputedStateDefinition<Unref<State>, ComputedState>;\n }\n\n protected override getStateWatchers(): StateWatchers<Service, Unref<State>> {\n return (options.watch ?? {}) as StateWatchers<Service, Unref<State>>;\n }\n\n protected override serializePersistedState(state: Partial<State>): ServiceStorage {\n return options.serialize?.(state) ?? (state as ServiceStorage);\n }\n\n protected override deserializePersistedState(state: ServiceStorage): Partial<State> {\n return options.restore?.(state) ?? (state as Partial<State>);\n }\n \n } as unknown as ServiceWithState<State, ComputedState, ServiceStorage>;\n}\n\nexport default class Service<\n State extends ServiceState = DefaultServiceState,\n ComputedState extends ServiceState = {},\n ServiceStorage = Partial<State>,\n> extends MagicObject {\n\n public static persist: string[] = [];\n\n protected _name: string;\n private _booted: PromisedValue<void>;\n private _computedStateKeys: Set<keyof State>;\n private _watchers: StateWatchers<Service, State>;\n private _store: Store<string, State, ComputedState, {}> | false;\n\n constructor() {\n super();\n\n const getters = this.getComputedStateDefinition();\n\n this._name = this.getName() ?? new.target.name;\n this._booted = new PromisedValue();\n this._computedStateKeys = new Set(Object.keys(getters));\n this._watchers = this.getStateWatchers();\n this._store =\n this.usesStore() &&\n defineServiceStore(this._name, {\n state: () => this.getInitialState(),\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getters: getters as any,\n });\n }\n\n public get booted(): PromisedValue<void> {\n return this._booted;\n }\n\n public override static<T extends typeof Service>(): T;\n public override static<T extends typeof Service, K extends keyof T>(property: K): T[K];\n public override static<T extends typeof Service, K extends keyof T>(property?: K): T | T[K] {\n return super.static<T, K>(property as K);\n }\n\n public launch(): Promise<void> {\n const handleError = (error: unknown) => this._booted.reject(new ServiceBootError(this._name, error));\n\n try {\n this.frameworkBoot()\n .then(() => this.boot())\n .then(() => this._booted.resolve())\n .catch(handleError);\n } catch (error) {\n handleError(error);\n }\n\n return this._booted;\n }\n\n public hasPersistedState(): boolean {\n return Storage.has(this.storageKey);\n }\n\n public hasState<P extends keyof State>(property: P): boolean {\n if (!this._store) {\n return false;\n }\n\n return property in this._store.$state || this._computedStateKeys.has(property);\n }\n\n public getState(): State;\n public getState<P extends keyof State>(property: P): State[P];\n public getState<P extends keyof State>(property?: P): State | State[P] {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const store = this._store as any;\n\n if (property) {\n return store ? store[property] : (undefined as State[P]);\n }\n\n return store ? store : ({} as State);\n }\n\n public setState<P extends keyof State>(property: P, value: State[P]): void;\n public setState(state: Partial<State>): void;\n public setState<P extends keyof State>(stateOrProperty: P | Partial<State>, value?: State[P]): void {\n if (!this._store) {\n return;\n }\n\n const update = typeof stateOrProperty === 'string' ? { [stateOrProperty]: value } : stateOrProperty;\n const old = objectOnly(this._store.$state as State, Object.keys(update));\n\n Object.assign(this._store.$state, update);\n this.onStateUpdated(update as Partial<State>, old as Partial<State>);\n }\n\n public updatePersistedState<T extends keyof State>(key: T): void;\n public updatePersistedState<T extends keyof State>(keys: T[]): void;\n public updatePersistedState<T extends keyof State>(keyOrKeys: T | T[]): void {\n if (!this._store) {\n return;\n }\n\n const keys = arrayFrom(keyOrKeys) as Array<keyof State>;\n const state = objectOnly(this._store.$state as State, keys);\n\n if (isEmpty(state)) {\n return;\n }\n\n this.onPersistentStateUpdated(state);\n }\n\n protected override __get(property: string): unknown {\n if (this.hasState(property)) {\n return this.getState(property);\n }\n\n return super.__get(property);\n }\n\n protected override __set(property: string, value: unknown): void {\n this.setState({ [property]: value } as Partial<State>);\n }\n\n protected get storageKey(): string {\n return `${appNamespace()}:${this._name}`;\n }\n\n protected onStateUpdated(update: Partial<State>, old: Partial<State>): void {\n const persisted = objectOnly(update, this.static('persist'));\n\n if (!isEmpty(persisted)) {\n this.onPersistentStateUpdated(persisted as Partial<State>);\n }\n\n for (const property in update) {\n const watcher = this._watchers[property] as Nullable<(value: unknown, oldValue: unknown) => unknown>;\n\n if (!watcher || update[property] === old[property]) {\n continue;\n }\n\n watcher.call(this, update[property], old[property]);\n }\n }\n\n protected onPersistentStateUpdated(persisted: Partial<State>): void {\n const storage = Storage.get<ServiceStorage>(this.storageKey);\n\n if (!storage) {\n return;\n }\n\n Storage.set(this.storageKey, {\n ...storage,\n ...this.serializePersistedState(objectDeepClone(persisted) as Partial<State>),\n });\n }\n\n protected usesStore(): boolean {\n return false;\n }\n\n protected getName(): string | null {\n return null;\n }\n\n protected getInitialState(): State {\n return {} as State;\n }\n\n protected getComputedStateDefinition(): ComputedStateDefinition<State, ComputedState> {\n return {} as ComputedStateDefinition<State, ComputedState>;\n }\n\n protected getStateWatchers(): StateWatchers<Service, State> {\n return {};\n }\n\n protected serializePersistedState(state: Partial<State>): ServiceStorage {\n return state as ServiceStorage;\n }\n\n protected deserializePersistedState(state: ServiceStorage): Partial<State> {\n return state as Partial<State>;\n }\n\n protected async frameworkBoot(): Promise<void> {\n this.restorePersistedState();\n }\n\n protected async boot(): Promise<void> {\n // Placeholder for overrides, don't place any functionality here.\n }\n\n protected restorePersistedState(): void {\n if (!this.usesStore() || isEmpty(this.static('persist'))) {\n return;\n }\n\n if (Storage.has(this.storageKey)) {\n const persisted = Storage.require<ServiceStorage>(this.storageKey);\n this.setState(this.deserializePersistedState(persisted));\n\n return;\n }\n\n Storage.set(this.storageKey, objectOnly(this.getState(), this.static('persist')));\n }\n\n protected requireStore(): Store<string, State, ComputedState, {}> {\n if (!this._store) {\n return fail(`Failed getting '${this._name}' store`);\n }\n\n return this._store;\n }\n\n}\n","import { arrayRemove, facade, fail, tap } from '@noeldemartin/utils';\n\nimport Service from '@aerogel/core/services/Service';\n\nexport interface EventsPayload {}\nexport interface EventListenerOptions {\n priority: EventListenerPriority;\n}\nexport type AerogelGlobalEvents = Partial<{ [Event in EventWithoutPayload]: () => unknown }> &\n Partial<{ [Event in EventWithPayload]: EventListener<EventsPayload[Event]> }>;\n\nexport type EventListener<T = unknown> = (payload: T) => unknown;\n\nexport type EventWithoutPayload = {\n [K in keyof EventsPayload]: EventsPayload[K] extends void ? K : never;\n}[keyof EventsPayload];\n\nexport type EventWithPayload = {\n [K in keyof EventsPayload]: EventsPayload[K] extends void ? never : K;\n}[keyof EventsPayload];\n\nexport const EventListenerPriorities = {\n Low: -256,\n Default: 0,\n High: 256,\n} as const;\n\nexport type EventListenerPriority = (typeof EventListenerPriorities)[keyof typeof EventListenerPriorities];\n\nexport class EventsService extends Service {\n\n private listeners: Record<string, { priorities: number[]; handlers: Record<number, EventListener[]> }> = {};\n\n protected override async boot(): Promise<void> {\n Object.entries(globalThis.__aerogelEvents__ ?? {}).forEach(([event, listener]) =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.on(event as any, listener as EventListener));\n }\n\n public emit<Event extends EventWithoutPayload>(event: Event): Promise<void>;\n public emit<Event extends EventWithPayload>(event: Event, payload: EventsPayload[Event]): Promise<void>;\n public async emit(event: string, payload?: unknown): Promise<void> {\n const listeners = this.listeners[event] ?? { priorities: [], handlers: {} };\n\n for (const priority of listeners.priorities) {\n await Promise.all(listeners.handlers[priority]?.map((listener) => listener(payload)) ?? []);\n }\n }\n\n /* eslint-disable max-len */\n public on<Event extends EventWithoutPayload>(event: Event, listener: () => unknown): () => void;\n public on<Event extends EventWithoutPayload>(event: Event, priority: EventListenerPriority, listener: () => unknown): () => void; // prettier-ignore\n public on<Event extends EventWithoutPayload>(event: Event, options: Partial<EventListenerOptions>, listener: () => unknown): () => void; // prettier-ignore\n public on<Event extends EventWithPayload>(event: Event, listener: EventListener<EventsPayload[Event]>): () => void | void; // prettier-ignore\n public on<Event extends EventWithPayload>(event: Event, priority: EventListenerPriority, listener: EventListener<EventsPayload[Event]>): () => void | void; // prettier-ignore\n public on<Event extends EventWithPayload>(event: Event, options: Partial<EventListenerOptions>, listener: EventListener<EventsPayload[Event]>): () => void | void; // prettier-ignore\n /* eslint-enable max-len */\n\n public on(\n event: string,\n optionsOrListener: Partial<EventListenerOptions> | EventListenerPriority | EventListener,\n listener?: EventListener,\n ): () => void {\n const options =\n typeof optionsOrListener === 'function'\n ? {}\n : typeof optionsOrListener === 'number'\n ? { priority: optionsOrListener }\n : optionsOrListener;\n const handler = typeof optionsOrListener === 'function' ? optionsOrListener : (listener as EventListener);\n\n this.registerListener(event, options, handler);\n\n return () => this.off(event, handler);\n }\n\n /* eslint-disable max-len */\n public once<Event extends EventWithoutPayload>(event: Event, listener: () => unknown): () => void;\n public once<Event extends EventWithoutPayload>(event: Event, options: Partial<EventListenerOptions>, listener: () => unknown): () => void; // prettier-ignore\n public once<Event extends EventWithPayload>(event: Event, listener: EventListener<EventsPayload[Event]>): () => void | void; // prettier-ignore\n public once<Event extends EventWithPayload>(event: Event, options: Partial<EventListenerOptions>, listener: EventListener<EventsPayload[Event]>): () => void | void; // prettier-ignore\n /* eslint-enable max-len */\n\n public once(\n event: string,\n optionsOrListener: Partial<EventListenerOptions> | EventListener,\n listener?: EventListener,\n ): () => void {\n let onceListener: EventListener | null = null;\n const options = typeof optionsOrListener === 'function' ? {} : optionsOrListener;\n const handler = typeof optionsOrListener === 'function' ? optionsOrListener : (listener as EventListener);\n\n return tap(\n () => onceListener && this.off(event, onceListener),\n (off) => {\n onceListener = (...args) => {\n off();\n\n return handler(...args);\n };\n\n this.registerListener(event, options, handler);\n },\n );\n }\n\n public off(event: string, listener: EventListener): void {\n const listeners = this.listeners[event];\n\n if (!listeners) {\n return;\n }\n\n const priorities = [...listeners.priorities];\n\n for (const priority of priorities) {\n arrayRemove(listeners.handlers[priority] ?? [], listener);\n\n if (listeners.handlers[priority]?.length === 0) {\n delete listeners.handlers[priority];\n arrayRemove(listeners.priorities, priority);\n }\n }\n\n if (listeners.priorities.length === 0) {\n delete this.listeners[event];\n }\n }\n\n protected registerListener(event: string, options: Partial<EventListenerOptions>, handler: EventListener): void {\n const priority = options.priority ?? 0;\n\n if (!(event in this.listeners)) {\n this.listeners[event] = { priorities: [], handlers: {} };\n }\n\n const priorities =\n this.listeners[event]?.priorities ?? fail<number[]>(`priorities missing for event '${event}'`);\n const handlers =\n this.listeners[event]?.handlers ??\n fail<Record<number, EventListener[]>>(`handlers missing for event '${event}'`);\n\n if (!priorities.includes(priority)) {\n priorities.push(priority);\n priorities.sort((a, b) => b - a);\n handlers[priority] = [];\n }\n\n handlers[priority]?.push(handler);\n }\n\n}\n\nexport default facade(EventsService);\n\ndeclare global {\n // eslint-disable-next-line no-var\n var __aerogelEvents__: AerogelGlobalEvents | undefined;\n}\n","import Aerogel from 'virtual:aerogel';\n\nimport { getEnv } from '@noeldemartin/utils';\nimport type { App, Component } from 'vue';\n\nimport { defineServiceState } from '@aerogel/core/services/Service';\nimport type { Plugin } from '@aerogel/core/plugins/Plugin';\n\nexport interface AppSetting {\n component: Component;\n priority: number;\n}\n\nexport function defineSettings<T extends AppSetting[]>(settings: T): T {\n return settings;\n}\n\nexport default defineServiceState({\n name: 'app',\n initialState: {\n plugins: {} as Record<string, Plugin>,\n instance: null as App | null,\n environment: getEnv() ?? 'development',\n version: Aerogel.version,\n sourceUrl: Aerogel.sourceUrl,\n settings: [] as AppSetting[],\n settingsFullscreenOnMobile: false,\n },\n computed: {\n development: (state) => state.environment === 'development',\n staging: (state) => state.environment === 'staging',\n testing: (state) => state.environment === 'test' || state.environment === 'testing',\n versionName(state): string {\n if (this.development) {\n return 'dev.' + Aerogel.sourceHash.toString().substring(0, 7);\n }\n\n if (this.staging) {\n return 'staging.' + Aerogel.sourceHash.toString().substring(0, 7);\n }\n\n return `v${state.version}`;\n },\n versionUrl(state): string {\n return (\n state.sourceUrl +\n (this.development || this.staging ? `/tree/${Aerogel.sourceHash}` : `/releases/tag/${this.versionName}`)\n );\n },\n },\n});\n","import Aerogel from 'virtual:aerogel';\n\nimport { PromisedValue, facade, forever, updateLocationQueryParameters } from '@noeldemartin/utils';\nimport { markRaw } from 'vue';\n\nimport Events from '@aerogel/core/services/Events';\nimport type { Plugin } from '@aerogel/core/plugins';\nimport type { AppSetting, Services } from '@aerogel/core/services';\n\nimport Service from './App.state';\n\nexport { defineSettings } from './App.state';\nexport type { AppSetting } from './App.state';\n\nexport class AppService extends Service {\n\n public readonly name = Aerogel.name;\n public readonly ready = new PromisedValue<void>();\n public readonly mounted = new PromisedValue<void>();\n\n public isReady(): boolean {\n return this.ready.isResolved();\n }\n\n public isMounted(): boolean {\n return this.mounted.isResolved();\n }\n\n public addSetting(setting: AppSetting): void {\n this.settings.push(markRaw(setting));\n }\n\n public setSettingsFullscreenOnMobile(fullscreenOnMobile: boolean): void {\n this.settingsFullscreenOnMobile = fullscreenOnMobile;\n }\n\n public async whenReady<T>(callback: () => T): Promise<T> {\n const result = await this.ready.then(callback);\n\n return result;\n }\n\n public async reload(queryParameters?: Record<string, string | undefined>): Promise<void> {\n queryParameters && updateLocationQueryParameters(queryParameters);\n\n location.reload();\n\n // Stall until the reload happens\n await forever();\n }\n\n public plugin<T extends Plugin = Plugin>(name: string): T | null {\n return (this.plugins[name] as T) ?? null;\n }\n\n public service<T extends keyof Services>(name: T): Services[T] | null {\n return this.instance?.config.globalProperties[name] ?? null;\n }\n\n protected override async boot(): Promise<void> {\n Events.once('application-ready', () => this.ready.resolve());\n Events.once('application-mounted', () => this.mounted.resolve());\n }\n\n}\n\nexport default facade(AppService);\n","import App from '@aerogel/core/services/App';\n\nimport type { Plugin } from './Plugin';\n\nexport * from './Plugin';\n\nexport function definePlugin<T extends Plugin>(plugin: T): T {\n return plugin;\n}\n\nexport async function installPlugins(plugins: Plugin[], ...args: Parameters<Plugin['install']>): Promise<void> {\n App.setState(\n 'plugins',\n plugins.reduce(\n (pluginsMap, plugin) => {\n if (plugin.name) {\n pluginsMap[plugin.name] = plugin;\n }\n\n return pluginsMap;\n },\n {} as Record<string, Plugin>,\n ),\n );\n\n await Promise.all(plugins.map((plugin) => plugin.install(...args)) ?? []);\n}\n","import { fail, toString } from '@noeldemartin/utils';\nimport { Comment, Static, Text, inject, reactive } from 'vue';\nimport type { Directive, InjectionKey, MaybeRef, Ref, UnwrapNestedRefs, VNode } from 'vue';\n\nexport type AcceptRefs<T> = { [K in keyof T]: T[K] | RefUnion<T[K]> };\nexport type RefUnion<T> = T extends infer R ? Ref<R> : never;\nexport type Unref<T> = { [K in keyof T]: T[K] extends MaybeRef<infer Value> ? Value : T[K] };\n\nfunction renderVNodeAttrs(node: VNode): string {\n return Object.entries(node.props ?? {}).reduce((attrs, [name, value]) => {\n return attrs + `${name}=\"${toString(value)}\"`;\n }, '');\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function defineDirective<TValue = any, TModifiers extends string = string>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n directive: Directive<any, TValue, TModifiers>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): Directive<any, TValue, TModifiers> {\n return directive;\n}\n\nexport function injectReactive<T extends object>(key: InjectionKey<T> | string): UnwrapNestedRefs<T> | undefined {\n const value = inject(key);\n\n return value ? reactive<T>(value) : undefined;\n}\n\nexport function injectReactiveOrFail<T extends object>(\n key: InjectionKey<T> | string,\n errorMessage?: string,\n): UnwrapNestedRefs<T> {\n return injectReactive(key) ?? fail(errorMessage ?? `Could not resolve '${toString(key)}' injection key`);\n}\n\nexport function injectOrFail<T>(key: InjectionKey<T> | string, errorMessage?: string): T {\n return inject(key) ?? fail(errorMessage ?? `Could not resolve '${toString(key)}' injection key`);\n}\n\nexport function renderVNode(node: VNode | string): string {\n if (typeof node === 'string') {\n return node;\n }\n\n if (node.type === Comment) {\n return '';\n }\n\n if (node.type === Text || node.type === Static) {\n return node.children as string;\n }\n\n if (node.type === 'br') {\n return '\\n\\n';\n }\n\n return `<${node.type} ${renderVNodeAttrs(node)}>${Array.from(node.children as Array<VNode | string>)\n .map(renderVNode)\n .join('')}</${node.type}>`;\n}\n","import { defineDirective } from '@aerogel/core/utils/vue';\nimport { tap } from '@noeldemartin/utils';\n\nconst resizeObservers: WeakMap<HTMLElement, ResizeObserver> = new WeakMap();\n\nexport type MeasureDirectiveValue =\n | MeasureDirectiveListener\n | {\n css?: boolean;\n watch?: boolean;\n };\n\nexport type MeasureDirectiveModifiers = 'css' | 'watch';\n\nexport interface ElementSize {\n width: number;\n height: number;\n}\n\nexport type MeasureDirectiveListener = (size: ElementSize) => unknown;\n\nexport default defineDirective<MeasureDirectiveValue, MeasureDirectiveModifiers>({\n mounted(element: HTMLElement, { value, modifiers }) {\n const listener = typeof value === 'function' ? (value as MeasureDirectiveListener) : null;\n const update = () => {\n const sizes = element.getBoundingClientRect();\n\n if (modifiers.css) {\n element.style.setProperty('--width', `${sizes.width}px`);\n element.style.setProperty('--height', `${sizes.height}px`);\n }\n\n listener?.({ width: sizes.width, height: sizes.height });\n };\n\n if (modifiers.watch) {\n resizeObservers.set(element, tap(new ResizeObserver(update)).observe(element));\n }\n\n update();\n },\n unmounted(element) {\n resizeObservers.get(element)?.unobserve(element);\n resizeObservers.delete(element);\n },\n});\n","import clsx from 'clsx';\nimport { unref } from 'vue';\nimport { cva } from 'class-variance-authority';\nimport { twMerge } from 'tailwind-merge';\nimport type { ClassValue } from 'clsx';\nimport type { PropType } from 'vue';\n\nexport type CVAConfig<T> = NonNullable<Parameters<typeof cva<T>>[1]>;\nexport type CVAProps<T> = NonNullable<Parameters<ReturnType<typeof cva<T>>>[0]>;\nexport type Variants<T extends Record<string, string | boolean>> = Required<{\n [K in keyof T]: Exclude<T[K], undefined> extends string\n ? { [key in Exclude<T[K], undefined>]: string | null }\n : { true: string | null; false: string | null };\n}>;\n\nexport type ComponentPropDefinitions<T> = {\n [K in keyof T]: {\n type?: PropType<T[K]>;\n default: T[K] | (() => T[K]) | null;\n };\n};\n\nexport type PickComponentProps<TValues, TDefinitions> = {\n [K in keyof TValues]: K extends keyof TDefinitions ? TValues[K] : never;\n};\n\nexport function variantClasses<T>(\n value: { baseClasses?: string } & CVAProps<T>,\n config: { baseClasses?: string } & CVAConfig<T>,\n): string {\n const { baseClasses: valueBaseClasses, ...values } = value;\n const { baseClasses: configBaseClasses, ...configs } = config;\n const variants = cva(configBaseClasses, configs as CVAConfig<T>);\n\n return classes(variants(values as CVAProps<T>), unref(valueBaseClasses));\n}\n\nexport function classes(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","import { onUnmounted } from 'vue';\n\nimport Events from '@aerogel/core/services/Events';\nimport type {\n EventListener,\n EventWithPayload,\n EventWithoutPayload,\n EventsPayload,\n} from '@aerogel/core/services/Events';\n\nexport function useEvent<Event extends EventWithoutPayload>(event: Event, listener: () => unknown): void;\nexport function useEvent<Event extends EventWithPayload>(\n event: Event,\n listener: EventListener<EventsPayload[Event]>\n): void;\n\nexport function useEvent(event: string, listener: EventListener): void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const unsubscribe = Events.on(event as any, listener);\n\n onUnmounted(() => unsubscribe());\n}\n","import { arrayFrom } from '@noeldemartin/utils';\n\nimport type { FormFieldDefinition } from '@aerogel/core/forms/FormController';\n\nconst builtInRules: Record<string, FormFieldValidator> = {\n required: (value) => (value ? undefined : 'required'),\n};\n\nfunction isValidType(value: unknown, definition: FormFieldDefinition): boolean {\n if (value === undefined || value === null) {\n return true;\n }\n\n switch (definition.type) {\n case 'string':\n return typeof value === 'string';\n case 'enum':\n return !!definition.values?.includes(value);\n case 'number':\n return typeof value === 'number';\n case 'boolean':\n return typeof value === 'boolean';\n case 'date':\n return value instanceof Date;\n case 'object':\n return typeof value === 'object';\n }\n}\n\nexport type FormFieldValidator<T = unknown> = (value: T) => string | string[] | undefined;\n\nexport const validators: Record<string, FormFieldValidator> = { ...builtInRules };\n\nexport function registerFormValidationRule<T>(rule: string, validator: FormFieldValidator<T>): void {\n validators[rule] = validator as FormFieldValidator;\n}\n\nexport function defineFormValidationRules<T extends Record<string, FormFieldValidator>>(rules: T): T {\n return rules;\n}\n\nexport function validateType(value: unknown, definition: FormFieldDefinition): string[] {\n if (isValidType(value, definition)) {\n return [];\n }\n\n return ['invalid_value'];\n}\n\nexport function validate(value: unknown, rule: string): string[] {\n const errors = validators[rule]?.(value);\n\n return errors ? arrayFrom(errors) : [];\n}\n","import { computed, nextTick, reactive, readonly, ref } from 'vue';\nimport { MagicObject, arrayRemove, fail } from '@noeldemartin/utils';\nimport type { ComputedRef, DeepReadonly, Ref, UnwrapNestedRefs } from 'vue';\n\nimport { validate, validateType } from './validation';\n\nexport const __valueType: unique symbol = Symbol();\n\nexport interface FormFieldDefinition<\n TType extends FormFieldType = FormFieldType,\n TRules extends string = string,\n TValueType = unknown,\n> {\n type: TType;\n trim?: boolean;\n default?: GetFormFieldValue<TType>;\n rules?: TRules[];\n values?: readonly TValueType[];\n [__valueType]?: TValueType;\n}\n\nexport type FormFieldType = 'string' | 'enum' | 'number' | 'boolean' | 'object' | 'date';\nexport type FormFieldValue = GetFormFieldValue<FormFieldType>;\nexport type FormFieldDefinitions = Record<string, FormFieldDefinition>;\n\nexport type FormData<T> = {\n -readonly [k in keyof T]: T[k] extends FormFieldDefinition<infer TType, infer TRules, infer TValueType>\n ? TRules extends 'required'\n ? GetFormFieldValue<TType, TValueType>\n : GetFormFieldValue<TType, TValueType> | null\n : never;\n};\n\nexport type FormErrors<T> = {\n [k in keyof T]: string[] | null;\n};\n\nexport type GetFormFieldValue<TType, TValueType = unknown> = TType extends 'string'\n ? string\n : TType extends 'number'\n ? number\n : TType extends 'boolean'\n ? boolean\n : TType extends 'enum'\n ? TValueType\n : TType extends 'object'\n ? TValueType extends object\n ? TValueType\n : object\n : TType extends 'date'\n ? Date\n : never;\n\nconst validForms: WeakMap<FormController, ComputedRef<boolean>> = new WeakMap();\n\nexport type SubmitFormListener = () => unknown;\nexport type FocusFormListener = (input: string) => unknown;\n\nexport default class FormController<Fields extends FormFieldDefinitions = FormFieldDefinitions> extends MagicObject {\n\n public errors: DeepReadonly<UnwrapNestedRefs<FormErrors<Fields>>>;\n\n private _fields: Fields;\n private _data: FormData<Fields>;\n private _submitted: Ref<boolean>;\n private _errors: FormErrors<Fields>;\n private _listeners: { focus?: FocusFormListener[]; submit?: SubmitFormListener[] } = {};\n\n constructor(fields: Fields) {\n super();\n\n this._fields = fields;\n this._submitted = ref(false);\n this._data = this.getInitialData(fields);\n this._errors = this.getInitialErrors(fields);\n\n validForms.set(\n this,\n computed(() => !Object.values(this._errors).some((error) => error !== null)),\n );\n\n this.errors = readonly(this._errors);\n }\n\n public get valid(): boolean {\n return !!validForms.get(this)?.value;\n }\n\n public get submitted(): boolean {\n return this._submitted.value;\n }\n\n public setFieldValue<T extends keyof Fields>(field: T, value: FormData<Fields>[T]): void {\n this._data[field] = value;\n\n if (!this._submitted.value) {\n return;\n }\n\n this.validate();\n }\n\n public getFieldValue<T extends keyof Fields>(field: T): GetFormFieldValue<Fields[T]['type']> {\n return this._data[field] as unknown as GetFormFieldValue<Fields[T]['type']>;\n }\n\n public getFieldRules<T extends keyof Fields>(field: T): string[] {\n return this._fields[field]?.rules ?? [];\n }\n\n public setFieldErrors<T extends keyof Fields>(field: T, errors: string[] | null): void {\n this._errors[field] = errors;\n }\n\n public getFieldType<T extends keyof Fields>(field: T): FormFieldType | null {\n return this._fields[field]?.type ?? null;\n }\n\n public data(): FormData<Fields> {\n return { ...this._data };\n }\n\n public validate(): boolean {\n const errors = Object.entries(this._fields).reduce(\n (formErrors, [name, definition]) => {\n formErrors[name] = this.getFieldErrors(name, definition);\n\n return formErrors;\n },\n {} as Record<string, string[] | null>,\n );\n\n this.resetErrors(errors);\n\n return this.valid;\n }\n\n public reset(options: { keepData?: boolean; keepErrors?: boolean } = {}): void {\n this._submitted.value = false;\n\n options.keepData || this.resetData();\n options.keepErrors || this.resetErrors();\n }\n\n public submit(): boolean {\n this._submitted.value = true;\n\n for (const [field, value] of Object.entries(this._data)) {\n const definition = this._fields[field] ?? fail<FormFieldDefinition>();\n\n if (typeof value !== 'string' || !(definition.trim ?? true)) {\n continue;\n }\n\n this._data[field as keyof Fields] = value.trim() as FormData<Fields>[string];\n }\n\n const valid = this.validate();\n\n valid && this._listeners['submit']?.forEach((listener) => listener());\n\n return valid;\n }\n\n public on(event: 'focus', listener: FocusFormListener): () => void;\n public on(event: 'submit', listener: SubmitFormListener): () => void;\n public on(event: 'focus' | 'submit', listener: FocusFormListener | SubmitFormListener): () => void {\n this._listeners[event] ??= [];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this._listeners[event]?.push(listener as any);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return () => this.off(event as any, listener);\n }\n\n public off(event: 'focus', listener: FocusFormListener): void;\n public off(event: 'submit', listener: SubmitFormListener): void;\n public off(event: 'focus' | 'submit', listener: FocusFormListener | SubmitFormListener): void {\n arrayRemove(this._listeners[event] ?? [], listener);\n }\n\n public async focus(input: string): Promise<void> {\n await nextTick();\n\n this._listeners['focus']?.forEach((listener) => listener(input));\n }\n\n protected override __get(property: string): unknown {\n if (!(property in this._fields)) {\n return super.__get(property);\n }\n\n return this.getFieldValue(property);\n }\n\n protected override __set(property: string, value: unknown): void {\n if (!(property in this._fields)) {\n super.__set(property, value);\n\n return;\n }\n\n this.setFieldValue(property, value as FormData<Fields>[string]);\n }\n\n private getFieldErrors(name: keyof Fields, definition: FormFieldDefinition): string[] | null {\n const errors = [];\n const value = this._data[name];\n const rules = definition.rules ?? [];\n\n errors.push(...validateType(value, definition));\n\n for (const rule of rules) {\n if (rule !== 'required' && (value === null || value === undefined)) {\n continue;\n }\n\n errors.push(...validate(value, rule));\n }\n\n return errors.length > 0 ? errors : null;\n }\n\n private getInitialData(fields: Fields): FormData<Fields> {\n if (this.static().isConjuring()) {\n return {} as FormData<Fields>;\n }\n\n const data = Object.entries(fields).reduce((initialData, [name, definition]) => {\n initialData[name as keyof Fields] = (definition.default ?? null) as FormData<Fields>[keyof Fields];\n\n return initialData;\n }, {} as FormData<Fields>);\n\n return reactive(data) as FormData<Fields>;\n }\n\n private getInitialErrors(fields: Fields): FormErrors<Fields> {\n if (this.static().isConjuring()) {\n return {} as FormErrors<Fields>;\n }\n\n const errors = Object.keys(fields).reduce((formErrors, name) => {\n formErrors[name as keyof Fields] = null;\n\n return formErrors;\n }, {} as FormErrors<Fields>);\n\n return reactive(errors) as FormErrors<Fields>;\n }\n\n private resetData(): void {\n for (const [name, field] of Object.entries(this._fields)) {\n this._data[name as keyof Fields] = (field.default ?? null) as FormData<Fields>[keyof Fields];\n }\n }\n\n private resetErrors(errors?: Record<string, string[] | null>): void {\n Object.keys(this._errors).forEach((key) => delete this._errors[key as keyof Fields]);\n\n errors && Object.assign(this._errors, errors);\n }\n\n}\n","import { objectWithout } from '@noeldemartin/utils';\nimport { computed, inject, onUnmounted, useAttrs } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport type { ComputedRef } from 'vue';\nimport type { Nullable } from '@noeldemartin/utils';\n\nimport FormController from '@aerogel/core/forms/FormController';\nimport type { FormData, FormFieldDefinitions } from '@aerogel/core/forms/FormController';\n\nexport function onFormFocus(input: { name: Nullable<string> }, listener: () => unknown): void {\n const form = inject<FormController | null>('form', null);\n const stop = form?.on('focus', (name) => input.name === name && listener());\n\n onUnmounted(() => stop?.());\n}\n\nexport function useForm<const T extends FormFieldDefinitions>(fields: T): FormController<T> & FormData<T> {\n return new FormController(fields) as FormController<T> & FormData<T>;\n}\n\nexport function useInputAttrs(): [ComputedRef<{}>, ComputedRef<ClassValue>] {\n const attrs = useAttrs();\n const classes = computed(() => attrs.class);\n const inputAttrs = computed(() => objectWithout(attrs, 'class'));\n\n return [inputAttrs, classes as ComputedRef<ClassValue>];\n}\n","import { noop } from '@noeldemartin/utils';\nimport { onMounted, onUnmounted } from 'vue';\n\nexport function onCleanMounted(operation: () => Function): void {\n let cleanUp: Function = noop;\n\n onMounted(() => (cleanUp = operation()));\n onUnmounted(() => cleanUp());\n}\n","import { reactive, toRaw, watch } from 'vue';\nimport { Storage } from '@noeldemartin/utils';\nimport type { UnwrapNestedRefs } from 'vue';\n\nexport function persistent<T extends object>(name: string, defaults: T): UnwrapNestedRefs<T> {\n const store = reactive<T>(Storage.get<T>(name) ?? defaults);\n\n watch(store, () => Storage.set(name, toRaw(store)));\n\n return store;\n}\n","import { fail } from '@noeldemartin/utils';\nimport { customRef } from 'vue';\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function reactiveSet<T>(initial?: T[] | Set<T>, options: { equals?: (a: T, b: T) => boolean } = {}) {\n let set: Set<T> = new Set(initial);\n let trigger: () => void;\n let track: () => void;\n const equals = options?.equals;\n const hasEqual = equals\n ? (item: T) => ref.value.values().some((existingItem) => equals(item, existingItem))\n : () => false;\n const ref = customRef((_track, _trigger) => {\n track = _track;\n trigger = _trigger;\n\n return {\n get: () => set,\n set: () => fail('Attempted to write read-only reactive set'),\n };\n });\n\n return {\n values() {\n track();\n\n return Array.from(ref.value.values());\n },\n has(item: T) {\n track();\n\n return ref.value.has(item) || hasEqual(item);\n },\n add(item: T) {\n trigger();\n\n if (hasEqual(item)) {\n return;\n }\n\n ref.value.add(item);\n },\n delete(item: T) {\n trigger();\n\n ref.value.delete(item);\n },\n clear() {\n trigger();\n\n ref.value.clear();\n },\n reset(items?: T[] | Set<T>) {\n trigger();\n\n set = new Set(items);\n },\n };\n}\n\nexport type ReactiveSet<T = unknown> = ReturnType<typeof reactiveSet<T>>;\n","import { debounce } from '@noeldemartin/utils';\nimport { computed, ref, watch, watchEffect } from 'vue';\nimport type { ComputedGetter, ComputedRef, Ref } from 'vue';\n\nexport interface ComputedDebounceOptions<T> {\n initial?: T;\n delay?: number;\n}\n\nexport function computedAsync<T>(getter: () => Promise<T>): Ref<T | undefined> {\n const result = ref<T>();\n const asyncValue = computed(getter);\n\n watch(asyncValue, async () => (result.value = await asyncValue.value), { immediate: true });\n\n return result;\n}\n\nexport function computedDebounce<T>(options: ComputedDebounceOptions<T>, getter: ComputedGetter<T>): ComputedRef<T>;\nexport function computedDebounce<T>(getter: ComputedGetter<T>): ComputedRef<T | null>;\nexport function computedDebounce<T>(\n optionsOrGetter: ComputedGetter<T> | ComputedDebounceOptions<T>,\n inputGetter?: ComputedGetter<T>,\n): ComputedRef<T> {\n const inputOptions = inputGetter ? (optionsOrGetter as ComputedDebounceOptions<T>) : {};\n const getter = inputGetter ?? (optionsOrGetter as ComputedGetter<T>);\n const state = ref(inputOptions.initial ?? null);\n const update = debounce((value) => (state.value = value), inputOptions.delay ?? 300);\n\n watchEffect(() => update(getter()));\n\n return state as unknown as ComputedRef<T>;\n}\n","import DOMPurify from 'dompurify';\nimport { stringMatchAll, tap } from '@noeldemartin/utils';\nimport { Renderer, marked } from 'marked';\n\nlet router: MarkdownRouter | null = null;\n\nfunction makeRenderer(): Renderer {\n return tap(new Renderer(), (renderer) => {\n renderer.link = function(link) {\n const defaultLink = Renderer.prototype.link.apply(this, [link]);\n\n if (!link.href.startsWith('#')) {\n return defaultLink.replace('<a', '<a target=\"_blank\"');\n }\n\n return defaultLink;\n };\n });\n}\n\nfunction renderActionLinks(html: string): string {\n const matches = stringMatchAll<3>(html, /<a[^>]*href=\"#action:([^\"]+)\"[^>]*>([^<]+)<\\/a>/g);\n\n for (const [link, action, text] of matches) {\n html = html.replace(link, `<button type=\"button\" data-markdown-action=\"${action}\">${text}</button>`);\n }\n\n return html;\n}\n\nfunction renderRouteLinks(html: string): string {\n const matches = stringMatchAll<3>(html, /<a[^>]*href=\"#route:([^\"]+)\"[^>]*>([^<]+)<\\/a>/g);\n\n for (const [link, route, text] of matches) {\n const url = router?.resolve(route) ?? route;\n\n html = html.replace(link, `<a data-markdown-route=\"${route}\" href=\"${url}\">${text}</a>`);\n }\n\n return html;\n}\n\nexport interface MarkdownRouter {\n resolve(route: string): string;\n visit(route: string): Promise<void>;\n}\n\nexport function getMarkdownRouter(): MarkdownRouter | null {\n return router;\n}\n\nexport function setMarkdownRouter(markdownRouter: MarkdownRouter): void {\n router = markdownRouter;\n}\n\nexport function renderMarkdown(markdown: string): string {\n let html = marked(markdown, { renderer: makeRenderer(), async: false });\n\n html = safeHtml(html);\n html = renderActionLinks(html);\n html = renderRouteLinks(html);\n\n return html;\n}\n\nexport function safeHtml(html: string): string {\n return DOMPurify.sanitize(html, { ADD_ATTR: ['target'] });\n}\n","import type { Nullable } from '@noeldemartin/utils';\n\nexport const MINUTE_MILLISECONDS = 60000;\n\nexport function getLocalTimezoneOffset(date?: Nullable<Date>): number {\n return -(date ?? new Date()).getTimezoneOffset() * -MINUTE_MILLISECONDS;\n}\n","import { safeHtml } from '@aerogel/core/utils';\nimport { defineDirective } from '@aerogel/core/utils/vue';\n\nexport type SafeHTMLDirectiveValue = string;\n\nexport default defineDirective<SafeHTMLDirectiveValue>({\n mounted(element: HTMLElement, { value }) {\n element.innerHTML = safeHtml(value);\n },\n});\n","import type { Directive } from 'vue';\n\nimport { definePlugin } from '@aerogel/core/plugins';\n\nimport measure from './measure';\nimport safeHtml from './safe-html';\n\nexport const aerogelDirectives = {\n 'measure': measure,\n 'safe-html': safeHtml,\n} as const satisfies Record<string, Directive>;\n\nexport type AerogelDirectives = typeof aerogelDirectives;\n\nexport * from './measure';\n\nexport default definePlugin({\n install(app, options) {\n const directives = {\n ...aerogelDirectives,\n ...options.directives,\n };\n\n for (const [name, directive] of Object.entries(directives)) {\n app.directive(name, directive as Directive);\n }\n },\n});\n\ndeclare module '@aerogel/core/bootstrap/options' {\n export interface AerogelOptions {\n directives?: Record<string, Directive>;\n }\n}\n\ndeclare module 'vue' {\n interface ComponentCustomDirectives extends AerogelDirectives {}\n}\n","import { PromisedValue, facade, tap } from '@noeldemartin/utils';\n\nimport Service from '@aerogel/core/services/Service';\n\nexport class CacheService extends Service {\n\n private cache?: PromisedValue<Cache> = undefined;\n\n public async get(url: string): Promise<Response | null> {\n const cache = await this.open();\n const response = await cache.match(url);\n\n return response ?? null;\n }\n\n public async store(url: string, response: Response): Promise<void> {\n const cache = await this.open();\n\n await cache.put(url, response);\n }\n\n public async replace(url: string, response: Response): Promise<void> {\n const cache = await this.open();\n const keys = await cache.keys(url);\n\n if (keys.length === 0) {\n return;\n }\n\n await cache.put(url, response);\n }\n\n protected async open(): Promise<Cache> {\n return (this.cache =\n this.cache ??\n tap(new PromisedValue<Cache>(), (cache) => {\n caches.open('app').then((instance) => cache.resolve(instance));\n }));\n }\n\n}\n\nexport default facade(CacheService);\n","import { facade } from '@noeldemartin/utils';\n\nimport Events from '@aerogel/core/services/Events';\nimport Service from '@aerogel/core/services/Service';\n\nexport class StorageService extends Service {\n\n public async purge(): Promise<void> {\n await Events.emit('purge-storage');\n }\n\n}\n\nexport default facade(StorageService);\n\ndeclare module '@aerogel/core/services/Events' {\n export interface EventsPayload {\n 'purge-storage': void;\n }\n}\n","import { objectOnly } from '@noeldemartin/utils';\n\nexport type Replace<\n TOriginal extends Record<string, unknown>,\n TReplacements extends Partial<Record<keyof TOriginal, unknown>>,\n> = {\n [K in keyof TOriginal]: TReplacements extends Record<K, infer Replacement> ? Replacement : TOriginal[K];\n};\n\nexport function replaceExisting<\n TOriginal extends Record<string, unknown>,\n TReplacements extends Partial<Record<keyof TOriginal, unknown>>,\n>(original: TOriginal, replacements: TReplacements): Replace<TOriginal, TReplacements> {\n return {\n ...original,\n ...objectOnly(replacements, Object.keys(original)),\n } as Replace<TOriginal, TReplacements>;\n}\n","import type { App as AppInstance } from 'vue';\n\nimport { definePlugin } from '@aerogel/core/plugins';\nimport { isDevelopment, isTesting } from '@noeldemartin/utils';\n\nimport App from './App';\nimport Cache from './Cache';\nimport Events from './Events';\nimport Service from './Service';\nimport Storage from './Storage';\nimport { getPiniaStore } from './store';\nimport type { AppSetting } from './App.state';\nimport type { FormFieldValidator } from '@aerogel/core/forms';\n\nexport * from './App';\nexport * from './Cache';\nexport * from './Events';\nexport * from './Service';\nexport * from './store';\nexport * from './utils';\n\nexport { App, Cache, Events, Storage, Service };\n\nconst defaultServices = {\n $app: App,\n $events: Events,\n $storage: Storage,\n};\n\nexport type DefaultServices = typeof defaultServices;\n\nexport interface Services extends DefaultServices {}\n\nexport async function bootServices(app: AppInstance, services: Record<string, Service>): Promise<void> {\n await Promise.all(\n Object.entries(services).map(async ([name, service]) => {\n await service\n .launch()\n .catch((error) => app.config.errorHandler?.(error, null, `Failed launching ${name}.`));\n }),\n );\n\n Object.assign(app.config.globalProperties, services);\n\n if (isDevelopment() || isTesting()) {\n Object.assign(globalThis, services);\n }\n}\n\nexport default definePlugin({\n async install(app, options) {\n const services = {\n ...defaultServices,\n ...options.services,\n };\n\n app.use(getPiniaStore());\n options.settings?.forEach((setting) => App.addSetting(setting));\n\n if (options.settingsFullscreenOnMobile !== undefined) {\n App.setSettingsFullscreenOnMobile(options.settingsFullscreenOnMobile);\n }\n\n await bootServices(app, services);\n },\n});\n\ndeclare module '@aerogel/core/bootstrap/options' {\n export interface AerogelOptions {\n services?: Record<string, Service>;\n settings?: AppSetting[];\n formValidationRules?: Record<string, FormFieldValidator>;\n settingsFullscreenOnMobile?: boolean;\n }\n}\n\ndeclare module 'vue' {\n interface ComponentCustomProperties extends Services {}\n}\n","import { isDevelopment } from '@noeldemartin/utils';\n\nimport type { LangProvider } from './Lang';\n\nexport default class DefaultLangProvider implements LangProvider {\n\n constructor(\n private locale: string,\n private fallbackLocale: string,\n ) {}\n\n public getLocale(): string {\n return this.locale;\n }\n\n public async setLocale(locale: string): Promise<void> {\n this.locale = locale;\n }\n\n public getFallbackLocale(): string {\n return this.fallbackLocale;\n }\n\n public async setFallbackLocale(fallbackLocale: string): Promise<void> {\n this.fallbackLocale = fallbackLocale;\n }\n\n public getLocales(): string[] {\n return ['en'];\n }\n\n public translate(key: string): string {\n // eslint-disable-next-line no-console\n isDevelopment() && console.warn('Lang provider is missing');\n\n return key;\n }\n\n public translateWithDefault(_: string, defaultMessage: string): string {\n // eslint-disable-next-line no-console\n isDevelopment() && console.warn('Lang provider is missing');\n\n return defaultMessage;\n }\n\n}\n","import { defineServiceState } from '@aerogel/core/services/Service';\n\nexport default defineServiceState({\n name: 'lang',\n persist: ['locale', 'fallbackLocale'],\n initialState: {\n locale: null as string | null,\n locales: ['en'],\n fallbackLocale: 'en',\n },\n});\n","import { facade } from '@noeldemartin/utils';\n\nimport DefaultLangProvider from './DefaultLangProvider';\nimport Service from './Lang.state';\n\nexport interface LangProvider {\n getLocale(): string;\n setLocale(locale: string): Promise<void>;\n getFallbackLocale(): string;\n setFallbackLocale(fallbackLocale: string): Promise<void>;\n getLocales(): string[];\n translate(key: string, parameters?: Record<string, unknown> | number): string;\n translateWithDefault(key: string, defaultMessage: string, parameters?: Record<string, unknown> | number): string;\n}\n\nexport class LangService extends Service {\n\n private provider: LangProvider;\n\n constructor() {\n super();\n\n this.provider = new DefaultLangProvider(\n this.getState('locale') ?? this.getBrowserLocale(),\n this.getState('fallbackLocale'),\n );\n }\n\n public async setProvider(provider: LangProvider): Promise<void> {\n this.provider = provider;\n this.locales = provider.getLocales();\n\n await provider.setLocale(this.locale ?? this.getBrowserLocale());\n await provider.setFallbackLocale(this.fallbackLocale);\n }\n\n public translate(key: string, parameters?: Record<string, unknown> | number): string {\n return this.provider.translate(key, parameters) ?? key;\n }\n\n public translateWithDefault(\n key: string,\n defaultMessage: string,\n parameters: Record<string, unknown> | number = {},\n ): string {\n return this.provider.translateWithDefault(key, defaultMessage, parameters);\n }\n\n public getBrowserLocale(): string {\n const locales = this.getState('locales');\n\n return navigator.languages.find((locale) => locales.includes(locale)) ?? 'en';\n }\n\n protected override async boot(): Promise<void> {\n if (!globalThis.document) {\n return;\n }\n\n this.requireStore().$subscribe(\n async () => {\n await this.provider.setLocale(this.locale ?? this.getBrowserLocale());\n await this.provider.setFallbackLocale(this.fallbackLocale);\n\n this.locale\n ? document.querySelector('html')?.setAttribute('lang', this.locale)\n : document.querySelector('html')?.removeAttribute('lang');\n },\n { immediate: true },\n );\n }\n\n}\n\nexport default facade(LangService);\n","import Lang from './Lang';\n\nexport const translate = Lang.translate.bind(Lang);\nexport const translateWithDefault = Lang.translateWithDefault.bind(Lang);\n","import { JSError, isObject, toString } from '@noeldemartin/utils';\nimport { translateWithDefault } from '@aerogel/core/lang/utils';\nimport type { ErrorSource } from './Errors.state';\n\nconst handlers: ErrorHandler[] = [];\n\nexport type ErrorHandler = (error: ErrorSource) => string | undefined;\n\nexport function registerErrorHandler(handler: ErrorHandler): void {\n handlers.push(handler);\n}\n\nexport function getErrorMessage(error: ErrorSource): string {\n for (const handler of handlers) {\n const result = handler(error);\n\n if (result) {\n return result;\n }\n }\n\n if (typeof error === 'string') {\n return error;\n }\n\n if (error instanceof Error || error instanceof JSError) {\n return error.message;\n }\n\n if (isObject(error)) {\n return toString(error['message'] ?? error['description'] ?? 'Unknown error object');\n }\n\n return translateWithDefault('errors.unknown', 'Unknown Error');\n}\n","import { after } from '@noeldemartin/utils';\nimport { injectModal, useModal as useModalBase } from '@noeldemartin/vue-modals';\n\nexport {\n createModal,\n showModal,\n injectModal,\n closeModal,\n modals,\n ModalComponent,\n ModalsPortal,\n type GetModalProps,\n type GetModalResponse,\n type ModalController,\n} from '@noeldemartin/vue-modals';\n\nconst instances = new WeakSet();\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function useModal<T = never>() {\n const instance = injectModal<T>();\n const { close, remove, ...modal } = useModalBase<T>(instances.has(instance) ? {} : { removeOnClose: false });\n\n instances.add(instance);\n\n return {\n ...modal,\n async close(result?: T) {\n close(result);\n\n await after(1000);\n\n remove();\n },\n };\n}\n","export const MOBILE_BREAKPOINT = 768;\n\nexport const Layouts = {\n Mobile: 'mobile',\n Desktop: 'desktop',\n} as const;\n\nexport type Layout = (typeof Layouts)[keyof typeof Layouts];\n\nexport function getCurrentLayout(): Layout {\n if (globalThis.innerWidth > MOBILE_BREAKPOINT) {\n return Layouts.Desktop;\n }\n\n return Layouts.Mobile;\n}\n","import type { Component } from 'vue';\n\nimport { defineServiceState } from '@aerogel/core/services/Service';\n\nimport { Layouts, getCurrentLayout } from './utils';\n\nexport interface UIToast {\n id: string;\n component: Component;\n properties: Record<string, unknown>;\n}\n\nexport default defineServiceState({\n name: 'ui',\n initialState: {\n toasts: [] as UIToast[],\n layout: getCurrentLayout(),\n },\n computed: {\n desktop: ({ layout }) => layout === Layouts.Desktop,\n mobile: ({ layout }) => layout === Layouts.Mobile,\n },\n});\n","import { after, facade, fail, isDevelopment, uuid } from '@noeldemartin/utils';\nimport { markRaw, unref } from 'vue';\nimport type { Constructor } from '@noeldemartin/utils';\nimport type { Component, ComputedOptions, MethodOptions } from 'vue';\n\nimport Events from '@aerogel/core/services/Events';\nimport { closeModal, createModal, modals, showModal } from '@aerogel/core/ui/modals';\nimport type { GetModalProps, GetModalResponse } from '@aerogel/core/ui/modals';\nimport type { AcceptRefs } from '@aerogel/core/utils';\nimport type { AlertModalExpose, AlertModalProps } from '@aerogel/core/components/contracts/AlertModal';\nimport type { ButtonVariant } from '@aerogel/core/components/contracts/Button';\nimport type { LoadingModalExpose, LoadingModalProps } from '@aerogel/core/components/contracts/LoadingModal';\nimport type { ToastAction, ToastExpose, ToastProps, ToastVariant } from '@aerogel/core/components/contracts/Toast';\nimport type {\n ConfirmModalCheckboxes,\n ConfirmModalEmits,\n ConfirmModalExpose,\n ConfirmModalProps,\n} from '@aerogel/core/components/contracts/ConfirmModal';\nimport type {\n ErrorReportModalExpose,\n ErrorReportModalProps,\n} from '@aerogel/core/components/contracts/ErrorReportModal';\nimport type {\n PromptModalEmits,\n PromptModalExpose,\n PromptModalProps,\n} from '@aerogel/core/components/contracts/PromptModal';\n\nimport Service from './UI.state';\nimport { MOBILE_BREAKPOINT, getCurrentLayout } from './utils';\nimport type { UIToast } from './UI.state';\n\nexport type UIComponent<Props = {}, Exposed = {}, Emits = {}> = Constructor<{ $emit?: Emits } & Exposed> &\n Component<Props, {}, {}, ComputedOptions, MethodOptions, {}, {}>;\n\nexport interface UIComponents {\n 'alert-modal': UIComponent<AlertModalProps, AlertModalExpose>;\n 'confirm-modal': UIComponent<ConfirmModalProps, ConfirmModalExpose, ConfirmModalEmits>;\n 'error-report-modal': UIComponent<ErrorReportModalProps, ErrorReportModalExpose>;\n 'loading-modal': UIComponent<LoadingModalProps, LoadingModalExpose>;\n 'prompt-modal': UIComponent<PromptModalProps, PromptModalExpose, PromptModalEmits>;\n 'router-link': UIComponent;\n 'startup-crash': UIComponent;\n toast: UIComponent<ToastProps, ToastExpose>;\n}\n\nexport type ConfirmOptions = AcceptRefs<{\n acceptText?: string;\n acceptVariant?: ButtonVariant;\n cancelText?: string;\n cancelVariant?: ButtonVariant;\n actions?: Record<string, () => unknown>;\n required?: boolean;\n}>;\n\nexport type LoadingOptions = AcceptRefs<{\n title?: string;\n message?: string;\n progress?: number;\n delay?: number;\n}>;\n\nexport interface ConfirmOptionsWithCheckboxes<T extends ConfirmModalCheckboxes = ConfirmModalCheckboxes>\n extends ConfirmOptions {\n checkboxes?: T;\n}\n\nexport type PromptOptions = AcceptRefs<{\n label?: string;\n defaultValue?: string;\n placeholder?: string;\n acceptText?: string;\n acceptVariant?: ButtonVariant;\n cancelText?: string;\n cancelVariant?: ButtonVariant;\n trim?: boolean;\n}>;\n\nexport interface ToastOptions {\n component?: Component;\n variant?: ToastVariant;\n actions?: ToastAction[];\n}\n\nexport class UIService extends Service {\n\n private components: Partial<UIComponents> = {};\n\n public registerComponent<T extends keyof UIComponents>(name: T, component: UIComponents[T]): void {\n this.components[name] = component;\n }\n\n public resolveComponent<T extends keyof UIComponents>(name: T): UIComponents[T] | null {\n return this.components[name] ?? null;\n }\n\n public requireComponent<T extends keyof UIComponents>(name: T): UIComponents[T] {\n return this.resolveComponent(name) ?? fail(`UI Component '${name}' is not defined!`);\n }\n\n public alert(message: string): void;\n public alert(title: string, message: string): void;\n public alert(messageOrTitle: string, message?: string): void {\n const getProperties = (): AlertModalProps => {\n if (typeof message !== 'string') {\n return { message: messageOrTitle };\n }\n\n return {\n title: messageOrTitle,\n message,\n };\n };\n\n this.modal(this.requireComponent('alert-modal'), getProperties());\n }\n\n /* eslint-disable max-len */\n public async confirm(message: string, options?: ConfirmOptions): Promise<boolean>;\n public async confirm(title: string, message: string, options?: ConfirmOptions): Promise<boolean>;\n public async confirm<T extends ConfirmModalCheckboxes>(message: string, options?: ConfirmOptionsWithCheckboxes<T>): Promise<[boolean, Record<keyof T, boolean>]>; // prettier-ignore\n public async confirm<T extends ConfirmModalCheckboxes>(title: string, message: string, options?: ConfirmOptionsWithCheckboxes<T>): Promise<[boolean, Record<keyof T, boolean>]>; // prettier-ignore\n /* eslint-enable max-len */\n\n public async confirm(\n messageOrTitle: string,\n messageOrOptions?: string | ConfirmOptions | ConfirmOptionsWithCheckboxes,\n options?: ConfirmOptions | ConfirmOptionsWithCheckboxes,\n ): Promise<boolean | [boolean, Record<string, boolean>]> {\n const getProperties = (): AcceptRefs<ConfirmModalProps> => {\n if (typeof messageOrOptions !== 'string') {\n return {\n ...(messageOrOptions ?? {}),\n message: messageOrTitle,\n required: !!messageOrOptions?.required,\n };\n }\n\n return {\n ...(options ?? {}),\n title: messageOrTitle,\n message: messageOrOptions,\n required: !!options?.required,\n };\n };\n\n const properties = getProperties();\n const { response } = await this.modal(this.requireComponent('confirm-modal'), properties);\n const confirmed = typeof response === 'object' ? response[0] : (response ?? false);\n const checkboxes =\n typeof response === 'object'\n ? response[1]\n : Object.entries(properties.checkboxes ?? {}).reduce(\n (values, [checkbox, { default: defaultValue }]) => ({\n [checkbox]: defaultValue ?? false,\n ...values,\n }),\n {} as Record<string, boolean>,\n );\n\n for (const [name, checkbox] of Object.entries(properties.checkboxes ?? {})) {\n if (!checkbox.required || checkboxes[name]) {\n continue;\n }\n\n if (confirmed && isDevelopment()) {\n // eslint-disable-next-line no-console\n console.warn(`Confirmed confirm modal was suppressed because required '${name}' checkbox was missing`);\n }\n\n return [false, checkboxes];\n }\n\n return 'checkboxes' in properties ? [confirmed, checkboxes] : confirmed;\n }\n\n public async prompt(message: string, options?: PromptOptions): Promise<string | null>;\n public async prompt(title: string, message: string, options?: PromptOptions): Promise<string | null>;\n public async prompt(\n messageOrTitle: string,\n messageOrOptions?: string | PromptOptions,\n options?: PromptOptions,\n ): Promise<string | null> {\n const trim = options?.trim ?? true;\n const getProperties = (): PromptModalProps => {\n if (typeof messageOrOptions !== 'string') {\n return {\n message: messageOrTitle,\n ...(messageOrOptions ?? {}),\n } as PromptModalProps;\n }\n\n return {\n title: messageOrTitle,\n message: messageOrOptions,\n ...(options ?? {}),\n } as PromptModalProps;\n };\n\n const { response } = await this.modal(this.requireComponent('prompt-modal'), getProperties());\n const result = trim && typeof response === 'string' ? response?.trim() : response;\n\n return result ?? null;\n }\n\n public async loading<T>(operation: Promise<T> | (() => T)): Promise<T>;\n public async loading<T>(message: string, operation: Promise<T> | (() => T)): Promise<T>;\n public async loading<T>(options: LoadingOptions, operation: Promise<T> | (() => T)): Promise<T>;\n public async loading<T>(\n operationOrMessageOrOptions: string | LoadingOptions | Promise<T> | (() => T),\n operation?: Promise<T> | (() => T),\n ): Promise<T> {\n const processOperation = (o: Promise<T> | (() => T)) => (typeof o === 'function' ? Promise.resolve(o()) : o);\n const processArgs = (): {\n operationPromise: Promise<T>;\n props?: AcceptRefs<LoadingModalProps>;\n delay?: number;\n } => {\n if (typeof operationOrMessageOrOptions === 'string') {\n return {\n props: { message: operationOrMessageOrOptions },\n operationPromise: processOperation(operation as Promise<T> | (() => T)),\n };\n }\n\n if (typeof operationOrMessageOrOptions === 'function' || operationOrMessageOrOptions instanceof Promise) {\n return { operationPromise: processOperation(operationOrMessageOrOptions) };\n }\n\n const { delay, ...props } = operationOrMessageOrOptions;\n\n return {\n props,\n delay: unref(delay),\n operationPromise: processOperation(operation as Promise<T> | (() => T)),\n };\n };\n\n let delayed = false;\n const { operationPromise, props, delay } = processArgs();\n\n delay && (await Promise.race([after({ ms: delay }).then(() => (delayed = true)), operationPromise]));\n\n if (delay && !delayed) {\n return operationPromise;\n }\n\n const modal = createModal(this.requireComponent('loading-modal'), props);\n\n showModal(modal);\n\n try {\n const result = await operationPromise;\n\n await after({ ms: 500 });\n\n return result;\n } finally {\n await closeModal(modal.id, { removeAfter: 1000 });\n }\n }\n\n public toast(message: string, options: ToastOptions = {}): void {\n const { component, ...otherOptions } = options;\n const toast: UIToast = {\n id: uuid(),\n properties: { message, ...otherOptions },\n component: markRaw(component ?? this.requireComponent('toast')),\n };\n\n this.setState('toasts', this.toasts.concat(toast));\n }\n\n public modal<T extends Component>(\n component: T & object extends GetModalProps<T> ? T : never,\n props?: GetModalProps<T>\n ): Promise<GetModalResponse<T>>;\n\n public modal<T extends Component>(\n component: T & object extends GetModalProps<T> ? never : T,\n props: GetModalProps<T>\n ): Promise<GetModalResponse<T>>;\n\n public modal<T extends Component>(component: T, componentProps?: GetModalProps<T>): Promise<GetModalResponse<T>> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return showModal(component as any, componentProps ?? {}) as Promise<GetModalResponse<T>>;\n }\n\n public async closeAllModals(): Promise<void> {\n await Promise.all(modals.value.map(({ id }) => closeModal(id, { removeAfter: 1000 })));\n }\n\n protected override async boot(): Promise<void> {\n this.watchMountedEvent();\n this.watchViewportBreakpoints();\n }\n\n private watchMountedEvent(): void {\n Events.once('application-mounted', async () => {\n if (!globalThis.document || !globalThis.getComputedStyle) {\n return;\n }\n\n const splash = globalThis.document.getElementById('splash');\n\n if (!splash) {\n return;\n }\n\n if (globalThis.getComputedStyle(splash).opacity !== '0') {\n splash.style.opacity = '0';\n\n await after({ ms: 600 });\n }\n\n splash.remove();\n });\n }\n\n private watchViewportBreakpoints(): void {\n if (!globalThis.matchMedia) {\n return;\n }\n\n const media = globalThis.matchMedia(`(min-width: ${MOBILE_BREAKPOINT}px)`);\n\n media.addEventListener('change', () => this.setState({ layout: getCurrentLayout() }));\n }\n\n}\n\nexport default facade(UIService);\n","import type { JSError } from '@noeldemartin/utils';\n\nimport { defineServiceState } from '@aerogel/core/services';\n\nexport type ErrorSource = string | Error | JSError | unknown;\n\nexport interface ErrorReport {\n title: string;\n description?: string;\n details?: string;\n error?: Error | JSError | unknown;\n}\n\nexport interface ErrorReportLog {\n report: ErrorReport;\n seen: boolean;\n date: Date;\n}\n\nexport default defineServiceState({\n name: 'errors',\n initialState: {\n logs: [] as ErrorReportLog[],\n startupErrors: [] as ErrorReport[],\n debug: false,\n },\n computed: {\n hasErrors: ({ logs }) => logs.length > 0,\n hasNewErrors: ({ logs }) => logs.some((error) => !error.seen),\n hasStartupErrors: ({ startupErrors }) => startupErrors.length > 0,\n },\n});\n","import { JSError, facade, isDevelopment, isObject, isTesting, objectWithoutEmpty, toString } from '@noeldemartin/utils';\nimport { watchEffect } from 'vue';\nimport type Eruda from 'eruda';\nimport type ErudaIndexedDB from 'eruda-indexeddb';\n\nimport App from '@aerogel/core/services/App';\nimport ServiceBootError from '@aerogel/core/errors/ServiceBootError';\nimport UI from '@aerogel/core/ui/UI';\nimport { translateWithDefault } from '@aerogel/core/lang/utils';\nimport { Events } from '@aerogel/core/services';\n\nimport Service from './Errors.state';\nimport type { ErrorReport, ErrorReportLog, ErrorSource } from './Errors.state';\n\nexport class ErrorsService extends Service {\n\n public forceReporting: boolean = false;\n private enabled: boolean = true;\n private eruda: typeof Eruda | null = null;\n private erudaPlugins: [typeof ErudaIndexedDB] | null = null;\n\n public enable(): void {\n this.enabled = true;\n }\n\n public disable(): void {\n this.enabled = false;\n }\n\n public async inspect(error: ErrorSource | ErrorReport, reports?: ErrorReport[]): Promise<void>;\n public async inspect(reports: ErrorReport[]): Promise<void>;\n public async inspect(errorOrReports: ErrorSource | ErrorReport[], _reports?: ErrorReport[]): Promise<void> {\n if (Array.isArray(errorOrReports) && errorOrReports.length === 0) {\n UI.alert(translateWithDefault('errors.inspectEmpty', 'Nothing to inspect!'));\n\n return;\n }\n\n const report = Array.isArray(errorOrReports)\n ? (errorOrReports[0] as ErrorReport)\n : this.isErrorReport(errorOrReports)\n ? errorOrReports\n : await this.createErrorReport(errorOrReports);\n const reports = Array.isArray(errorOrReports) ? (errorOrReports as ErrorReport[]) : (_reports ?? [report]);\n\n UI.modal(UI.requireComponent('error-report-modal'), { report, reports });\n }\n\n public async report(error: ErrorSource, message?: string): Promise<void> {\n await Events.emit('error', { error, message });\n\n if (isTesting('unit')) {\n throw error;\n }\n\n if (isDevelopment()) {\n this.logError(error);\n }\n\n if (!this.enabled) {\n throw error;\n }\n\n if (!App.isMounted()) {\n const startupError = await this.createStartupErrorReport(error);\n\n if (startupError) {\n this.setState({ startupErrors: this.startupErrors.concat(startupError) });\n }\n\n return;\n }\n\n const report = await this.createErrorReport(error);\n const log: ErrorReportLog = {\n report,\n seen: false,\n date: new Date(),\n };\n\n UI.toast(\n message ??\n translateWithDefault('errors.notice', 'Something went wrong, but it\\'s not your fault. Try again!'),\n {\n variant: 'danger',\n actions: [\n {\n label: translateWithDefault('errors.viewDetails', 'View details'),\n dismiss: true,\n click: () => UI.modal(UI.requireComponent('error-report-modal'), { report, reports: [report] }),\n },\n ],\n },\n );\n\n this.setState({ logs: [log].concat(this.logs) });\n }\n\n public reportDevelopmentError(error: ErrorSource, message?: string): void {\n if (!isDevelopment()) {\n return;\n }\n\n if (message) {\n // eslint-disable-next-line no-console\n console.warn(message);\n }\n\n this.logError(error);\n }\n\n public see(report: ErrorReport): void {\n this.setState({\n logs: this.logs.map((log) => {\n if (log.report !== report) {\n return log;\n }\n\n return {\n ...log,\n seen: true,\n };\n }),\n });\n }\n\n protected override async boot(): Promise<void> {\n watchEffect(async () => {\n if (!this.debug) {\n this.eruda?.destroy();\n\n return;\n }\n\n this.eruda ??= (await import('eruda')).default;\n this.erudaPlugins ??= [(await import('eruda-indexeddb')).default];\n\n this.eruda.init();\n this.erudaPlugins.forEach((plugin) => this.eruda?.add(plugin));\n });\n }\n\n private logError(error: unknown): void {\n // eslint-disable-next-line no-console\n console.error(error);\n\n if (isObject(error) && error.cause) {\n this.logError(error.cause);\n }\n }\n\n private isErrorReport(error: unknown): error is ErrorReport {\n return isObject(error) && 'title' in error;\n }\n\n private async createErrorReport(error: ErrorSource): Promise<ErrorReport> {\n if (typeof error === 'string') {\n return { title: error };\n }\n\n if (error instanceof Error || error instanceof JSError) {\n return this.createErrorReportFromError(error);\n }\n\n if (isObject(error)) {\n return objectWithoutEmpty({\n title: toString(\n error['name'] ?? error['title'] ?? translateWithDefault('errors.unknown', 'Unknown Error'),\n ),\n description: toString(\n error['message'] ??\n error['description'] ??\n translateWithDefault('errors.unknownDescription', 'Unknown error object'),\n ),\n error,\n });\n }\n\n return {\n title: translateWithDefault('errors.unknown', 'Unknown Error'),\n error,\n };\n }\n\n private async createStartupErrorReport(error: ErrorSource): Promise<ErrorReport | null> {\n if (error instanceof ServiceBootError) {\n // Ignore second-order boot errors in order to have a cleaner startup crash screen.\n return error.cause instanceof ServiceBootError ? null : this.createErrorReport(error.cause);\n }\n\n return this.createErrorReport(error);\n }\n\n private createErrorReportFromError(error: Error | JSError, defaults: Partial<ErrorReport> = {}): ErrorReport {\n return {\n title: error.name,\n description: error.message,\n details: error.stack,\n error,\n ...defaults,\n };\n }\n\n}\n\nexport default facade(ErrorsService);\n\ndeclare module '@aerogel/core/services/Events' {\n export interface EventsPayload {\n error: { error: ErrorSource; message?: string };\n }\n}\n","<template>\n <Primitive\n :class=\"classes\"\n :as-child\n :disabled\n v-bind=\"props\"\n >\n <slot />\n </Primitive>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { Primitive } from 'reka-ui';\nimport { objectWithoutEmpty } from '@noeldemartin/utils';\n\nimport UI from '@aerogel/core/ui/UI';\nimport type { ButtonProps } from '@aerogel/core/components/contracts/Button';\n\nconst { as, href, route, routeParams, routeQuery, submit, disabled, class: classes } = defineProps<ButtonProps>();\n\nconst props = computed(() => {\n if (as) {\n return { as };\n }\n\n if (route) {\n return {\n as: UI.resolveComponent('router-link') ?? 'a',\n to: objectWithoutEmpty({\n name: route,\n params: routeParams,\n query: routeQuery,\n }),\n };\n }\n\n if (href) {\n return {\n as: 'a',\n target: '_blank',\n href,\n };\n }\n\n return {\n as: 'button',\n type: submit ? 'submit' : 'button',\n };\n});\n</script>\n","<template>\n <HeadlessButton :class=\"renderedClasses\" :disabled v-bind=\"props\">\n <slot />\n </HeadlessButton>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\nimport HeadlessButton from '@aerogel/core/components/headless/HeadlessButton.vue';\nimport { variantClasses } from '@aerogel/core/utils/classes';\nimport type { ButtonProps } from '@aerogel/core/components/contracts/Button';\nimport type { Variants } from '@aerogel/core/utils/classes';\n\nconst { class: baseClasses, size, variant, disabled, ...props } = defineProps<ButtonProps>();\n\n/* eslint-disable vue/max-len */\n// prettier-ignore\nconst renderedClasses = computed(() => variantClasses<Variants<Pick<ButtonProps, 'size' | 'variant' | 'disabled'>>>(\n { baseClasses, variant, size, disabled },\n {\n baseClasses: 'focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2',\n variants: {\n variant: {\n default: 'bg-primary-600 text-white focus-visible:outline-primary-600',\n secondary: 'bg-background text-gray-900 ring-gray-300',\n danger: 'bg-red-600 text-white focus-visible:outline-red-600',\n warning: 'bg-yellow-600 text-white focus-visible:outline-yellow-600',\n ghost: 'bg-transparent',\n outline: 'bg-transparent text-primary-600 ring-primary-600',\n link: 'text-links',\n },\n size: {\n small: 'text-xs min-h-6',\n default: 'text-sm min-h-8',\n large: 'text-base min-h-10',\n icon: 'rounded-full p-2.5',\n },\n disabled: {\n false: null,\n true: 'opacity-50 cursor-not-allowed',\n },\n },\n compoundVariants: [\n {\n variant: ['default', 'secondary', 'danger', 'ghost', 'outline'],\n class: 'flex items-center justify-center gap-1 font-medium',\n },\n {\n variant: ['default', 'danger'],\n class: 'shadow-sm',\n },\n {\n variant: ['secondary', 'outline'],\n class: 'ring-1 ring-inset',\n },\n {\n variant: ['default', 'secondary', 'danger', 'ghost', 'outline'],\n size: 'small',\n class: 'rounded px-2 py-1',\n },\n {\n variant: ['default', 'secondary', 'danger', 'ghost', 'outline'],\n size: 'default',\n class: 'rounded-md px-2.5 py-1.5',\n },\n {\n variant: ['default', 'secondary', 'danger', 'ghost', 'outline'],\n size: 'large',\n class: 'rounded-md px-3 py-2',\n },\n {\n variant: 'default',\n disabled: false,\n class: 'hover:bg-primary-500',\n },\n {\n variant: ['secondary', 'ghost', 'outline'],\n disabled: false,\n class: 'hover:bg-gray-50',\n },\n {\n variant: 'danger',\n disabled: false,\n class: 'hover:bg-red-500',\n },\n {\n variant: 'link',\n disabled: false,\n class: 'hover:underline',\n },\n {\n variant: 'link',\n size: 'small',\n class: 'leading-6',\n },\n {\n variant: 'link',\n size: 'default',\n class: 'leading-8',\n },\n {\n variant: 'link',\n size: 'large',\n class: 'leading-10',\n },\n ],\n defaultVariants: {\n variant: 'default',\n size: 'default',\n disabled: false,\n },\n },\n));\n/* eslint-enable vue/max-len */\n</script>\n","import { computed, inject, provide, readonly } from 'vue';\nimport { evaluate, toString, uuid } from '@noeldemartin/utils';\nimport type { AcceptRefs } from '@aerogel/core/utils';\nimport type { AcceptableValue, AsTag, SelectContentProps } from 'reka-ui';\nimport type { Component, ComputedRef, EmitFn, HTMLAttributes, Ref } from 'vue';\nimport type { Nullable } from '@noeldemartin/utils';\n\nimport { translateWithDefault } from '@aerogel/core/lang';\nimport type { FormController, FormFieldValue } from '@aerogel/core/forms';\n\nimport type { InputEmits, InputExpose, InputProps } from './Input';\n\nexport type SelectOptionData = {\n key: string;\n label: string;\n value: AcceptableValue;\n};\n\nexport interface HasSelectOptionLabel {\n label: string | (() => string);\n}\n\nexport interface SelectProps<T extends Nullable<FormFieldValue> = Nullable<FormFieldValue>> extends InputProps<T> {\n as?: AsTag | Component;\n options?: readonly T[];\n placeholder?: string;\n renderOption?: (option: T) => string;\n compareOptions?: (a: T, b: T) => boolean;\n labelClass?: HTMLAttributes['class'];\n optionsClass?: HTMLAttributes['class'];\n align?: SelectContentProps['align'];\n side?: SelectContentProps['side'];\n}\n\nexport interface SelectEmits<T extends Nullable<FormFieldValue> = Nullable<FormFieldValue>> extends InputEmits<T> {}\n\nexport interface SelectExpose<T extends Nullable<FormFieldValue> = Nullable<FormFieldValue>> extends InputExpose<T> {\n options: ComputedRef<Nullable<readonly SelectOptionData[]>>;\n selectedOption: ComputedRef<Nullable<SelectOptionData>>;\n placeholder: ComputedRef<string>;\n labelClass: ComputedRef<HTMLAttributes['class']>;\n optionsClass: ComputedRef<HTMLAttributes['class']>;\n align?: SelectContentProps['align'];\n side?: SelectContentProps['side'];\n renderOption: (option: T) => string;\n}\n\nexport function hasSelectOptionLabel(option: unknown): option is HasSelectOptionLabel {\n return typeof option === 'object' && option !== null && 'label' in option;\n}\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function useSelect<T extends Nullable<FormFieldValue>>(\n props: Ref<SelectProps<T>>,\n emit: EmitFn<SelectEmits<T>>,\n) {\n const form = inject<FormController | null>('form', null);\n const renderOption = (option: T): string => {\n if (option === undefined) {\n return '';\n }\n\n return props.value.renderOption\n ? props.value.renderOption(option)\n : hasSelectOptionLabel(option)\n ? evaluate(option.label as string)\n : toString(option);\n };\n const computedValue = computed(() => {\n const { name, modelValue } = props.value;\n\n if (form && name) {\n return form.getFieldValue(name) as T;\n }\n\n return modelValue as T;\n });\n const acceptableValue = computed(() => computedValue.value as AcceptableValue);\n const errors = computed(() => {\n if (!form || !props.value.name) {\n return null;\n }\n\n return form.errors[props.value.name] ?? null;\n });\n const computedOptions = computed(() => {\n if (!props.value.options) {\n return null;\n }\n\n return props.value.options.map((option) => ({\n key: uuid(),\n label: renderOption(option),\n value: option as AcceptableValue,\n }));\n });\n\n const expose = {\n renderOption,\n labelClass: computed(() => props.value.labelClass),\n optionsClass: computed(() => props.value.optionsClass),\n align: computed(() => props.value.align),\n side: computed(() => props.value.side),\n value: computedValue,\n id: `select-${uuid()}`,\n name: computed(() => props.value.name),\n label: computed(() => props.value.label),\n description: computed(() => props.value.description),\n placeholder: computed(() => props.value.placeholder ?? translateWithDefault('ui.select', 'Select an option')),\n options: computedOptions,\n selectedOption: computed(() =>\n computedOptions.value?.find((option) => option.value === props.value.modelValue)),\n errors: readonly(errors),\n required: computed(() => {\n if (!props.value.name || !form) {\n return;\n }\n\n return form.getFieldRules(props.value.name).includes('required');\n }),\n update(value) {\n if (form && props.value.name) {\n form.setFieldValue(props.value.name, value as FormFieldValue);\n\n return;\n }\n\n emit('update:modelValue', value);\n },\n } satisfies AcceptRefs<SelectExpose<T>>;\n\n function update(value: AcceptableValue) {\n expose.update(value as T);\n }\n\n provide('select', expose);\n\n return { expose, acceptableValue, update, renderOption };\n}\n","<template>\n <SelectValue v-if=\"$slots.default\" :placeholder=\"select.placeholder\">\n <slot />\n </SelectValue>\n <SelectValue v-else :placeholder=\"select.placeholder\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { SelectValue } from 'reka-ui';\n\nimport { injectReactiveOrFail } from '@aerogel/core/utils/vue';\nimport type { SelectExpose } from '@aerogel/core/components/contracts/Select';\n\nconst select = injectReactiveOrFail<SelectExpose>(\n 'select',\n '<HeadlessSelectValue> must be a child of a <HeadlessSelect>',\n);\n</script>\n","<template>\n <SelectTrigger :id=\"select.id\">\n <slot>\n <HeadlessSelectValue :placeholder=\"select.placeholder\" />\n <SelectIcon />\n </slot>\n </SelectTrigger>\n</template>\n\n<script setup lang=\"ts\">\nimport { SelectIcon, SelectTrigger } from 'reka-ui';\n\nimport { injectReactiveOrFail } from '@aerogel/core/utils';\nimport type { SelectExpose } from '@aerogel/core/components/contracts/Select';\n\nimport HeadlessSelectValue from './HeadlessSelectValue.vue';\n\nconst select = injectReactiveOrFail<SelectExpose>(\n 'select',\n '<HeadlessSelectTrigger> must be a child of a <HeadlessSelect>',\n);\n</script>\n","<template>\n <SelectItem v-bind=\"$props\">\n <SelectItemText>\n <slot>\n {{ renderedLabel }}\n </slot>\n </SelectItemText>\n </SelectItem>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { SelectItem, SelectItemText } from 'reka-ui';\nimport { toString } from '@noeldemartin/utils';\nimport type { SelectItemProps } from 'reka-ui';\n\nimport { injectReactiveOrFail } from '@aerogel/core/utils/vue';\nimport type { SelectExpose } from '@aerogel/core/components/contracts/Select';\n\nconst { value } = defineProps<SelectItemProps>();\nconst select = injectReactiveOrFail<SelectExpose>(\n 'select',\n '<HeadlessSelectOption> must be a child of a <HeadlessSelect>',\n);\nconst renderedLabel = computed(() => {\n const itemOption = select.options?.find((option) => option.value === value);\n\n return itemOption ? select.renderOption(itemOption.value) : toString(value);\n});\n</script>\n","<template>\n <SelectPortal>\n <SelectContent\n position=\"popper\"\n :class=\"renderedClasses\"\n :align=\"select.align\"\n :side=\"select.side\"\n :side-offset=\"4\"\n >\n <SelectViewport :class=\"innerClass\">\n <slot>\n <HeadlessSelectOption\n v-for=\"option in select.options ?? []\"\n :key=\"option.key\"\n :value=\"option.value\"\n />\n </slot>\n </SelectViewport>\n </SelectContent>\n </SelectPortal>\n</template>\n\n<script setup lang=\"ts\">\nimport { SelectContent, SelectPortal, SelectViewport } from 'reka-ui';\nimport { computed } from 'vue';\nimport type { HTMLAttributes } from 'vue';\n\nimport { injectReactiveOrFail } from '@aerogel/core/utils/vue';\nimport { classes } from '@aerogel/core/utils/classes';\nimport type { SelectExpose } from '@aerogel/core/components/contracts/Select';\n\nimport HeadlessSelectOption from './HeadlessSelectOption.vue';\n\nconst { class: rootClass } = defineProps<{ class?: HTMLAttributes['class']; innerClass?: HTMLAttributes['class'] }>();\n\nconst select = injectReactiveOrFail<SelectExpose>(\n 'select',\n '<HeadlessSelectOptions> must be a child of a <HeadlessSelect>',\n);\nconst renderedClasses = computed(() =>\n classes('min-w-(--reka-select-trigger-width) max-h-(--reka-select-content-available-height)', rootClass));\n</script>\n","<template>\n <SelectRoot\n v-slot=\"{ open }\"\n :model-value=\"acceptableValue\"\n :by=\"compareOptions\"\n @update:model-value=\"update($event)\"\n >\n <component :is=\"as\" v-bind=\"$attrs\">\n <slot :model-value :open>\n <HeadlessSelectTrigger />\n <HeadlessSelectOptions />\n </slot>\n </component>\n </SelectRoot>\n</template>\n\n<script setup lang=\"ts\" generic=\"T extends Nullable<FormFieldValue>\">\nimport { SelectRoot } from 'reka-ui';\nimport { computed } from 'vue';\nimport type { Nullable } from '@noeldemartin/utils';\n\nimport { useSelect } from '@aerogel/core/components/contracts/Select';\nimport type { SelectEmits, SelectProps } from '@aerogel/core/components/contracts/Select';\nimport type { FormFieldValue } from '@aerogel/core/forms/FormController';\n\nimport HeadlessSelectTrigger from './HeadlessSelectTrigger.vue';\nimport HeadlessSelectOptions from './HeadlessSelectOptions.vue';\n\ndefineOptions({ inheritAttrs: false });\n\nconst emit = defineEmits<SelectEmits<T>>();\nconst { as = 'div', compareOptions = (a, b) => a === b, ...props } = defineProps<SelectProps<T>>();\nconst { expose, acceptableValue, update } = useSelect(\n computed(() => ({ as, compareOptions, ...props })),\n emit,\n);\n\ndefineExpose(expose);\n</script>\n","<template>\n <Label v-if=\"show\" :for=\"select.id\" v-bind=\"$props\">\n <slot>\n {{ select.label }}\n </slot>\n </Label>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, useSlots } from 'vue';\nimport { Label } from 'reka-ui';\nimport type { LabelProps } from 'reka-ui';\n\nimport { injectReactiveOrFail } from '@aerogel/core/utils/vue';\nimport type { SelectExpose } from '@aerogel/core/components/contracts/Select';\n\ndefineProps<Omit<LabelProps, 'for'>>();\n\nconst select = injectReactiveOrFail<SelectExpose>(\n 'select',\n '<HeadlessSelectLabel> must be a child of a <HeadlessSelect>',\n);\nconst slots = useSlots();\nconst show = computed(() => !!(select.label || slots.default));\n</script>\n","<template>\n <HeadlessSelectLabel v-if=\"$slots.default\" :class=\"renderedClasses\">\n <slot />\n </HeadlessSelectLabel>\n <HeadlessSelectLabel v-else :class=\"renderedClasses\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { HTMLAttributes } from 'vue';\n\nimport HeadlessSelectLabel from '@aerogel/core/components/headless/HeadlessSelectLabel.vue';\nimport { classes, injectReactiveOrFail } from '@aerogel/core/utils';\nimport type { SelectExpose } from '@aerogel/core/components/contracts/Select';\n\nconst { class: rootClasses } = defineProps<{ class?: HTMLAttributes['class'] }>();\n\nconst select = injectReactiveOrFail<SelectExpose>('select', '<SelectLabel> must be a child of a <Select>');\nconst renderedClasses = computed(() =>\n classes('block text-sm leading-6 font-medium text-gray-900', select.labelClass, rootClasses));\n</script>\n","<template>\n <HeadlessSelectOption :class=\"renderedOuterClasses\" :value>\n <div :class=\"renderedInnerClasses\">\n <slot />\n </div>\n </HeadlessSelectOption>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { AcceptableValue } from 'reka-ui';\nimport type { HTMLAttributes } from 'vue';\n\nimport HeadlessSelectOption from '@aerogel/core/components/headless/HeadlessSelectOption.vue';\nimport { classes } from '@aerogel/core/utils';\n\nconst { class: outerClass, innerClass } = defineProps<{\n value: AcceptableValue;\n class?: HTMLAttributes['class'];\n innerClass?: HTMLAttributes['class'];\n}>();\nconst renderedOuterClasses = computed(() => classes('group p-1 outline-none', outerClass));\nconst renderedInnerClasses = computed(() =>\n classes(\n // eslint-disable-next-line vue/max-len\n 'relative flex max-w-[calc(100vw-2rem)] cursor-pointer items-center truncate rounded-md gap-2 px-2 py-1 text-sm select-none *:truncate group-data-[highlighted]:bg-gray-100 group-data-[state=checked]:font-semibold group-data-[state=unchecked]:opacity-50',\n innerClass,\n ));\n</script>\n","<template>\n <HeadlessSelectOptions :class=\"renderedClasses\">\n <slot v-if=\"select.options?.length\">\n <SelectOption v-for=\"option of select?.options ?? []\" :key=\"option.key\" :value=\"option.value\">\n {{ option.label }}\n </SelectOption>\n </slot>\n <slot v-else>\n <SelectOption disabled :value=\"null\">\n {{ $td('ui.selectEmpty', 'No options available') }}\n </SelectOption>\n </slot>\n </HeadlessSelectOptions>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { HTMLAttributes } from 'vue';\n\nimport HeadlessSelectOptions from '@aerogel/core/components/headless/HeadlessSelectOptions.vue';\nimport { classes, injectReactiveOrFail } from '@aerogel/core/utils';\nimport type { SelectExpose } from '@aerogel/core/components/contracts/Select';\n\nimport SelectOption from './SelectOption.vue';\n\nconst { class: rootClasses } = defineProps<{ class?: HTMLAttributes['class'] }>();\n\nconst select = injectReactiveOrFail<SelectExpose>('select', '<SelectOptions> must be a child of a <Select>');\nconst renderedClasses = computed(() =>\n classes(\n 'z-50 overflow-auto rounded-lg bg-white text-base shadow-lg ring-1 ring-black/5 focus:outline-hidden',\n select.optionsClass,\n rootClasses,\n ));\n</script>\n","<template>\n <HeadlessSelectTrigger :class=\"renderedClasses\">\n <HeadlessSelectValue class=\"col-start-1 row-start-1 truncate pr-6\" />\n <IconCheveronDown class=\"col-start-1 row-start-1 size-5 self-center justify-self-end text-gray-500 sm:size-4\" />\n <div v-if=\"select?.errors\" class=\"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3\">\n <IconExclamationSolid class=\"size-5 text-red-500\" />\n </div>\n </HeadlessSelectTrigger>\n</template>\n\n<script setup lang=\"ts\">\nimport IconCheveronDown from '~icons/zondicons/cheveron-down';\nimport IconExclamationSolid from '~icons/zondicons/exclamation-solid';\n\nimport { computed } from 'vue';\nimport type { HTMLAttributes } from 'vue';\n\nimport HeadlessSelectTrigger from '@aerogel/core/components/headless/HeadlessSelectTrigger.vue';\nimport HeadlessSelectValue from '@aerogel/core/components/headless/HeadlessSelectValue.vue';\nimport { injectReactiveOrFail } from '@aerogel/core/utils';\nimport { classes } from '@aerogel/core/utils/classes';\nimport type { SelectExpose } from '@aerogel/core/components/contracts/Select';\n\nconst { class: rootClasses } = defineProps<{ class?: HTMLAttributes['class'] }>();\nconst select = injectReactiveOrFail<SelectExpose>('select', '<SelectTrigger> must be a child of a <Select>');\nconst renderedClasses = computed(() =>\n classes(\n // eslint-disable-next-line vue/max-len\n 'relative grid w-full cursor-default grid-cols-1 rounded-md bg-white py-1.5 pr-2 pl-3 text-left text-gray-900 outline-1 -outline-offset-1',\n 'focus:outline-2 focus:-outline-offset-2 sm:text-sm/6',\n {\n 'mt-1': select.label,\n 'outline-gray-300 focus:outline-primary-600 data-[state=open]:outline-primary-600': !select.errors,\n 'text-gray-900 shadow-2xs ring-gray-900/10 placeholder:text-gray-400': !select.errors,\n 'outline-red-900/10 pr-10 text-red-900 placeholder:text-red-300': select.errors,\n 'focus:outline-red-500 data-[state=open]:outline-red-500': select.errors,\n },\n rootClasses,\n ));\n</script>\n","<template>\n <p v-if=\"errorMessage\" :id=\"`${select.id}-error`\">\n {{ errorMessage }}\n </p>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\nimport { injectReactiveOrFail } from '@aerogel/core/utils/vue';\nimport { translateWithDefault } from '@aerogel/core/lang/utils';\nimport type { SelectExpose } from '@aerogel/core/components/contracts/Select';\n\nconst select = injectReactiveOrFail<SelectExpose>(\n 'select',\n '<HeadlessSelectError> must be a child of a <HeadlessSelect>',\n);\nconst errorMessage = computed(() => {\n if (!select.errors) {\n return null;\n }\n\n return translateWithDefault(`errors.${select.errors[0]}`, `Error: ${select.errors[0]}`);\n});\n</script>\n","<template>\n <HeadlessSelect :ref=\"forwardRef\" v-bind=\"$props\" @update:model-value=\"$emit('update:modelValue', $event)\">\n <SelectLabel />\n <slot>\n <SelectTrigger />\n <HeadlessSelectError class=\"mt-2 text-sm text-red-600\" />\n <SelectOptions />\n </slot>\n </HeadlessSelect>\n</template>\n\n<script setup lang=\"ts\" generic=\"T extends Nullable<FormFieldValue>\">\nimport { useForwardExpose } from 'reka-ui';\nimport type { Nullable } from '@noeldemartin/utils';\n\nimport HeadlessSelect from '@aerogel/core/components/headless/HeadlessSelect.vue';\nimport type { SelectEmits, SelectProps } from '@aerogel/core/components/contracts/Select';\nimport type { FormFieldValue } from '@aerogel/core/forms';\n\nimport SelectLabel from './SelectLabel.vue';\nimport SelectOptions from './SelectOptions.vue';\nimport SelectTrigger from './SelectTrigger.vue';\nimport HeadlessSelectError from '../headless/HeadlessSelectError.vue';\n\ndefineProps<SelectProps<T>>();\ndefineEmits<SelectEmits<T>>();\n\nconst { forwardRef } = useForwardExpose();\n</script>\n","<template>\n <Select\n v-model=\"$lang.locale\"\n class=\"flex flex-col items-start md:flex-row\"\n as=\"div\"\n :options\n :render-option=\"renderLocale\"\n >\n <div class=\"grow\">\n <SelectLabel class=\"text-base font-semibold\">\n {{ $td('settings.locale', 'Language') }}\n </SelectLabel>\n <Markdown\n lang-key=\"settings.localeDescription\"\n lang-default=\"Choose the application's language.\"\n class=\"mt-1 text-sm text-gray-500\"\n />\n </div>\n <Button variant=\"ghost\" :as=\"SelectTrigger\" class=\"grid w-auto outline-none\" />\n <SelectOptions />\n </Select>\n</template>\n\n<script setup lang=\"ts\">\nimport Aerogel from 'virtual:aerogel';\n\nimport { computed } from 'vue';\n\nimport Markdown from '@aerogel/core/components/ui/Markdown.vue';\nimport Button from '@aerogel/core/components/ui/Button.vue';\nimport Select from '@aerogel/core/components/ui/Select.vue';\nimport SelectLabel from '@aerogel/core/components/ui/SelectLabel.vue';\nimport SelectTrigger from '@aerogel/core/components/ui/SelectTrigger.vue';\nimport SelectOptions from '@aerogel/core/components/ui/SelectOptions.vue';\nimport { Lang, translateWithDefault } from '@aerogel/core/lang';\n\nconst browserLocale = Lang.getBrowserLocale();\nconst options = computed(() => [null, ...Lang.locales]);\n\nfunction renderLocale(locale: string | null): string {\n return (\n (locale && Aerogel.locales[locale]) ??\n translateWithDefault('settings.localeDefault', '{locale} (default)', {\n locale: Aerogel.locales[browserLocale] ?? browserLocale,\n })\n );\n}\n</script>\n","import { defineSettings } from '@aerogel/core/services';\n\nimport Language from './Language.vue';\n\nexport default defineSettings([\n {\n priority: 100,\n component: Language,\n },\n]);\n","import App from '@aerogel/core/services/App';\nimport { bootServices } from '@aerogel/core/services';\nimport { definePlugin } from '@aerogel/core/plugins';\n\nimport Lang from './Lang';\nimport settings from './settings';\nimport { translate, translateWithDefault } from './utils';\nimport type { LangProvider } from './Lang';\n\nexport { Lang, translate, translateWithDefault };\nexport type { LangProvider };\n\nconst services = { $lang: Lang };\n\nexport type LangServices = typeof services;\n\nexport default definePlugin({\n async install(app) {\n app.config.globalProperties.$t ??= translate;\n app.config.globalProperties.$td = translateWithDefault;\n\n settings.forEach((setting) => App.addSetting(setting));\n\n await bootServices(app, services);\n },\n});\n\ndeclare module '@aerogel/core/services' {\n export interface Services extends LangServices {}\n}\n\ndeclare module 'vue' {\n interface ComponentCustomProperties {\n $td: typeof translateWithDefault;\n }\n}\n","<template>\n <root />\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, h, useAttrs } from 'vue';\nimport { isInstanceOf } from '@noeldemartin/utils';\nimport type { VNode } from 'vue';\n\nimport { getMarkdownRouter, renderMarkdown } from '@aerogel/core/utils/markdown';\nimport { translate, translateWithDefault } from '@aerogel/core/lang';\nimport { renderVNode } from '@aerogel/core/utils/vue';\n\nconst { as, inline, langKey, langParams, langDefault, text, actions } = defineProps<{\n as?: string;\n inline?: boolean;\n langKey?: string;\n langParams?: number | Record<string, unknown>;\n langDefault?: string;\n text?: string;\n actions?: Record<string, () => unknown>;\n}>();\n\nconst attrs = useAttrs();\nconst slots = defineSlots<{ default?(): VNode[] }>();\nconst markdown = computed(() => {\n if (slots.default) {\n return slots.default().map(renderVNode).join('');\n }\n\n return (\n text ??\n (langKey &&\n (langDefault\n ? translateWithDefault(langKey, langDefault, langParams ?? {})\n : translate(langKey, langParams ?? {})))\n );\n});\nconst html = computed(() => {\n if (!markdown.value) {\n return null;\n }\n\n let renderedHtml = renderMarkdown(markdown.value);\n\n if (inline) {\n renderedHtml = renderedHtml.replace('<p>', '<span>').replace('</p>', '</span>');\n }\n\n return renderedHtml;\n});\nconst root = () =>\n h(as ?? (inline ? 'span' : 'div'), {\n innerHTML: html.value,\n onClick,\n ...attrs,\n class: `${attrs.class ?? ''} ${inline ? '' : 'prose'}`,\n });\n\nasync function onClick(event: Event) {\n const { target } = event;\n\n if (isInstanceOf(target, HTMLElement) && target.dataset.markdownAction) {\n actions?.[target.dataset.markdownAction]?.();\n\n return;\n }\n\n if (isInstanceOf(target, HTMLAnchorElement) && target.dataset.markdownRoute) {\n const router = getMarkdownRouter();\n\n if (router) {\n event.preventDefault();\n\n router.visit(target.dataset.markdownRoute);\n }\n\n return;\n }\n}\n</script>\n\n<style scoped>\n/* @apply .text-links .font-normal .no-underline .hover:underline; */\n* :deep(a) {\n --tw-font-weight: var(--font-weight-normal);\n text-decoration-line: none;\n color: var(--color-links);\n font-weight: var(--font-weight-normal);\n}\n\n@media (hover: hover) {\n * :deep(a:hover) {\n text-decoration-line: underline;\n }\n}\n</style>\n","<template>\n <div class=\"mt-4 flex\" :class=\"{ 'flex-col': layout === 'vertical' }\">\n <div class=\"flex-grow\">\n <h3 :id=\"titleId\" class=\"text-base font-semibold\">\n {{ title }}\n </h3>\n <Markdown v-if=\"description\" :text=\"description\" class=\"mt-1 text-sm text-gray-500\" />\n </div>\n\n <div :class=\"renderedRootClass\">\n <slot />\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { HTMLAttributes } from 'vue';\n\nimport Markdown from '@aerogel/core/components/ui/Markdown.vue';\nimport { classes } from '@aerogel/core/utils';\n\nconst { layout = 'horizontal', class: rootClass } = defineProps<{\n title: string;\n titleId?: string;\n description?: string;\n class?: HTMLAttributes['class'];\n layout?: 'vertical' | 'horizontal';\n}>();\nconst renderedRootClass = computed(() => classes(rootClass, 'flex flex-col justify-center gap-1'));\n</script>\n","<template>\n <div :class=\"rootClass\">\n <label v-if=\"label\" :for=\"expose.id\" :class=\"labelClass\">\n {{ label }}\n </label>\n <SwitchRoot\n :id=\"expose.id\"\n :name\n :model-value=\"expose.value.value\"\n v-bind=\"$attrs\"\n :class=\"inputClass\"\n @update:model-value=\"$emit('update:modelValue', $event)\"\n >\n <SwitchThumb :class=\"thumbClass\" />\n </SwitchRoot>\n </div>\n</template>\n\n<script setup lang=\"ts\" generic=\"T extends boolean = boolean\">\nimport { SwitchRoot, SwitchThumb } from 'reka-ui';\nimport { computed, inject, readonly, watchEffect } from 'vue';\nimport { uuid } from '@noeldemartin/utils';\nimport type { HTMLAttributes } from 'vue';\n\nimport type FormController from '@aerogel/core/forms/FormController';\nimport type { FormFieldValue } from '@aerogel/core/forms/FormController';\nimport type { InputEmits, InputExpose, InputProps } from '@aerogel/core/components/contracts/Input';\n\ndefineOptions({ inheritAttrs: false });\n\nconst {\n name,\n label,\n description,\n modelValue,\n class: rootClass,\n} = defineProps<\n InputProps<T> & {\n class?: HTMLAttributes['class'];\n labelClass?: HTMLAttributes['class'];\n inputClass?: HTMLAttributes['class'];\n thumbClass?: HTMLAttributes['class'];\n }\n>();\nconst emit = defineEmits<InputEmits>();\nconst form = inject<FormController | null>('form', null);\nconst errors = computed(() => {\n if (!form || !name) {\n return null;\n }\n\n return form.errors[name] ?? null;\n});\n\nconst expose = {\n id: `switch-${uuid()}`,\n name: computed(() => name),\n label: computed(() => label),\n description: computed(() => description),\n value: computed(() => {\n if (form && name) {\n return form.getFieldValue(name) as boolean;\n }\n\n return modelValue;\n }),\n errors: readonly(errors),\n required: computed(() => {\n if (!name || !form) {\n return;\n }\n\n return form.getFieldRules(name).includes('required');\n }),\n update(value) {\n if (form && name) {\n form.setFieldValue(name, value as FormFieldValue);\n\n return;\n }\n\n emit('update:modelValue', value);\n },\n} satisfies InputExpose;\n\ndefineExpose(expose);\n\nwatchEffect(() => {\n if (!description && !errors.value) {\n return;\n }\n\n // eslint-disable-next-line no-console\n console.warn('Errors and description not implemented in <HeadlessSwitch>');\n});\n</script>\n","<template>\n <HeadlessSwitch\n class=\"flex flex-row items-center gap-1\"\n input-class=\"disabled:opacity-50 disabled:cursor-not-allowed data-[state=checked]:bg-primary-600 data-[state=unchecked]:bg-gray-200 relative inline-flex h-6 w-11 shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focusdisabled:opacity-50 disabled:cursor-not-allowed :ring-2 focus:ring-primary-600 focus:ring-offset-2 focus:outline-hidden\"\n thumb-class=\"data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0 pointer-events-none inline-block size-5 transform rounded-full bg-white shadow-sm ring-0 transition duration-200 ease-in-out\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport HeadlessSwitch from '@aerogel/core/components/headless/HeadlessSwitch.vue';\n</script>\n","<template>\n <Setting\n title-id=\"debug-setting\"\n :title=\"$td('settings.debug', 'Debugging')\"\n :description=\"$td('settings.debugDescription', 'Enable debugging with [Eruda](https://eruda.liriliri.io/).')\"\n >\n <Switch v-model=\"$errors.debug\" aria-labelledby=\"debug-setting\" />\n </Setting>\n</template>\n\n<script setup lang=\"ts\">\nimport Setting from '@aerogel/core/components/ui/Setting.vue';\nimport Switch from '@aerogel/core/components/ui/Switch.vue';\n</script>\n","import { defineSettings } from '@aerogel/core/services';\n\nimport Debug from './Debug.vue';\n\nexport default defineSettings([\n {\n priority: 10,\n component: Debug,\n },\n]);\n","import { JSError } from '@noeldemartin/utils';\n\nexport default class JobCancelledError extends JSError {}\n","import type { App as AppInstance } from 'vue';\n\nimport App from '@aerogel/core/services/App';\nimport { bootServices } from '@aerogel/core/services';\nimport { definePlugin } from '@aerogel/core/plugins';\nimport { getErrorMessage } from '@aerogel/core/errors/utils';\n\nimport Errors from './Errors';\nimport settings from './settings';\nimport type { ErrorReport, ErrorReportLog, ErrorSource } from './Errors.state';\n\nexport * from './utils';\nexport { Errors };\nexport { default as JobCancelledError } from './JobCancelledError';\nexport { default as ServiceBootError } from './ServiceBootError';\nexport type { ErrorSource, ErrorReport, ErrorReportLog };\n\nconst services = { $errors: Errors };\nconst frameworkHandler: ErrorHandler = (error) => {\n if (getErrorMessage(error).includes('ResizeObserver loop completed with undelivered notifications.')) {\n return true;\n }\n\n Errors.report(error);\n\n return true;\n};\n\nfunction setUpErrorHandler(app: AppInstance, baseHandler: ErrorHandler = () => false): void {\n const errorHandler: ErrorHandler = (error) => baseHandler(error) || frameworkHandler(error);\n\n app.config.errorHandler = errorHandler;\n globalThis.onerror = (event, _, __, ___, error) => errorHandler(error ?? event);\n globalThis.onunhandledrejection = (event) => errorHandler(event.reason);\n}\n\nexport type ErrorHandler = (error: ErrorSource) => boolean;\nexport type ErrorsServices = typeof services;\n\nexport default definePlugin({\n async install(app, options) {\n setUpErrorHandler(app, options.handleError);\n\n settings.forEach((setting) => App.addSetting(setting));\n\n await bootServices(app, services);\n },\n});\n\ndeclare module '@aerogel/core/bootstrap/options' {\n export interface AerogelOptions {\n handleError?(error: ErrorSource): boolean;\n }\n}\n\ndeclare module '@aerogel/core/services' {\n export interface Services extends ErrorsServices {}\n}\n","import { isTesting } from '@noeldemartin/utils';\n\nimport Events from '@aerogel/core/services/Events';\nimport { App } from '@aerogel/core/services';\nimport { definePlugin } from '@aerogel/core/plugins';\nimport type { Services } from '@aerogel/core/services';\n\nexport interface AerogelTestingRuntime {\n on: (typeof Events)['on'];\n service<T extends keyof Services>(name: T): Services[T] | null;\n}\n\nexport default definePlugin({\n async install() {\n if (!isTesting()) {\n return;\n }\n\n globalThis.testingRuntime = {\n on: ((...args: Parameters<(typeof Events)['on']>) => Events.on(...args)) as (typeof Events)['on'],\n service: (name) => App.service(name),\n };\n },\n});\n\ndeclare global {\n // eslint-disable-next-line no-var\n var testingRuntime: AerogelTestingRuntime | undefined;\n}\n","<template>\n <DialogRoot :ref=\"forwardRef\" open @update:open=\"persistent || $event || close()\">\n <DialogPortal>\n <slot :close />\n </DialogPortal>\n </DialogRoot>\n</template>\n\n<script setup lang=\"ts\" generic=\"T = void\">\nimport { DialogPortal, DialogRoot, useForwardExpose } from 'reka-ui';\nimport { provide, ref } from 'vue';\nimport type { DialogContent } from 'reka-ui';\nimport type { Nullable } from '@noeldemartin/utils';\n\nimport { useModal } from '@aerogel/core/ui/modals';\nimport type { AcceptRefs } from '@aerogel/core/utils/vue';\nimport type { ModalExpose, ModalProps, ModalSlots } from '@aerogel/core/components/contracts/Modal';\n\nconst $content = ref<Nullable<InstanceType<typeof DialogContent>>>(null);\nconst { close } = useModal<T>();\n\ndefineProps<ModalProps>();\ndefineSlots<ModalSlots<T>>();\ndefineExpose<AcceptRefs<ModalExpose>>({ $content });\n\nconst { forwardRef } = useForwardExpose();\n\nprovide('$modalContentRef', $content);\n</script>\n","<template>\n <DialogContent ref=\"$contentRef\">\n <slot />\n\n <ModalComponent :is=\"child\" v-if=\"child\" />\n </DialogContent>\n</template>\n\n<script setup lang=\"ts\">\nimport { useTemplateRef, watchEffect } from 'vue';\nimport { DialogContent } from 'reka-ui';\nimport type { Ref } from 'vue';\n\nimport { ModalComponent, useModal } from '@aerogel/core/ui/modals';\nimport { injectOrFail } from '@aerogel/core/utils/vue';\nimport type { ModalContentInstance } from '@aerogel/core/components/contracts/Modal';\n\nconst { child } = useModal();\nconst $modalContentRef = injectOrFail<Ref<ModalContentInstance>>('$modalContentRef');\nconst $content = useTemplateRef('$contentRef');\n\nwatchEffect(() => ($modalContentRef.value = $content.value));\n</script>\n","<template>\n <DialogDescription v-bind=\"$props\">\n <slot />\n </DialogDescription>\n</template>\n\n<script setup lang=\"ts\">\nimport { DialogDescription } from 'reka-ui';\nimport type { DialogDescriptionProps } from 'reka-ui';\n\ndefineProps<DialogDescriptionProps>();\n</script>\n","<template>\n <DialogOverlay v-bind=\"$props\">\n <slot />\n </DialogOverlay>\n</template>\n\n<script setup lang=\"ts\">\nimport { DialogOverlay } from 'reka-ui';\nimport type { DialogOverlayProps } from 'reka-ui';\n\ndefineProps<DialogOverlayProps>();\n</script>\n","<template>\n <DialogTitle v-bind=\"$props\">\n <slot />\n </DialogTitle>\n</template>\n\n<script setup lang=\"ts\">\nimport { DialogTitle } from 'reka-ui';\nimport type { DialogTitleProps } from 'reka-ui';\n\ndefineProps<DialogTitleProps>();\n</script>\n","<template>\n <!-- @vue-generic {T} -->\n <HeadlessModal\n v-slot=\"{ close }\"\n v-bind=\"props\"\n :ref=\"($modal) => forwardRef($modal as HeadlessModalInstance)\"\n :persistent\n >\n <HeadlessModalOverlay\n class=\"fixed inset-0 transition-opacity duration-300 will-change-[opacity]\"\n :class=\"{\n 'animate-[fade-in_var(--tw-duration)_ease-in-out]': !hasRenderedModals,\n 'bg-black/30': firstVisibleModal?.id === id || (!firstVisibleModal && modals[0]?.id === id),\n 'opacity-0': !firstVisibleModal,\n hidden: renderFullscreen,\n }\"\n />\n <HeadlessModalContent v-bind=\"contentProps\" :class=\"renderedWrapperClass\">\n <div\n v-if=\"!persistent && !closeHidden\"\n class=\"absolute top-0 right-0 pt-3.5 pr-2.5\"\n :class=\"{ 'hidden sm:block': !renderFullscreen }\"\n >\n <button\n type=\"button\"\n class=\"clickable z-10 rounded-full p-2.5 text-gray-400 hover:text-gray-500\"\n @click=\"close()\"\n >\n <span class=\"sr-only\">{{ $td('ui.close', 'Close') }}</span>\n <IconClose class=\"size-4\" />\n </button>\n </div>\n\n <HeadlessModalTitle\n v-if=\"title\"\n class=\"px-4 pt-5 text-base font-semibold text-gray-900\"\n :class=\"{\n 'sr-only': titleHidden,\n 'pb-0': description && !descriptionHidden,\n 'pb-2': !description || descriptionHidden,\n }\"\n >\n <Markdown :text=\"title\" inline />\n </HeadlessModalTitle>\n\n <HeadlessModalDescription\n v-if=\"description\"\n class=\"px-4 pt-1 pb-2\"\n :class=\"{ 'sr-only': descriptionHidden }\"\n >\n <Markdown :text=\"description\" class=\"text-sm leading-6 text-gray-500\" />\n </HeadlessModalDescription>\n\n <div :class=\"renderedContentClass\">\n <slot :close />\n </div>\n </HeadlessModalContent>\n </HeadlessModal>\n</template>\n\n<script lang=\"ts\">\nimport IconClose from '~icons/zondicons/close';\n\nimport { useForwardExpose } from 'reka-ui';\nimport { computed, onMounted } from 'vue';\nimport type { ComponentPublicInstance, HTMLAttributes, Ref } from 'vue';\nimport { type Nullable, after } from '@noeldemartin/utils';\n\nimport Markdown from '@aerogel/core/components/ui/Markdown.vue';\nimport HeadlessModal from '@aerogel/core/components/headless/HeadlessModal.vue';\nimport HeadlessModalContent from '@aerogel/core/components/headless/HeadlessModalContent.vue';\nimport HeadlessModalDescription from '@aerogel/core/components/headless/HeadlessModalDescription.vue';\nimport HeadlessModalOverlay from '@aerogel/core/components/headless/HeadlessModalOverlay.vue';\nimport HeadlessModalTitle from '@aerogel/core/components/headless/HeadlessModalTitle.vue';\nimport UI from '@aerogel/core/ui/UI';\nimport { classes } from '@aerogel/core/utils/classes';\nimport { reactiveSet } from '@aerogel/core/utils';\nimport { injectModal, modals, useModal } from '@aerogel/core/ui/modals';\nimport type { ModalController } from '@aerogel/core/ui/modals';\nimport type { AcceptRefs } from '@aerogel/core/utils/vue';\nimport type { ModalExpose, ModalProps, ModalSlots } from '@aerogel/core/components/contracts/Modal';\n\nconst renderedModals = reactiveSet<ModalController>();\n</script>\n\n<script setup lang=\"ts\" generic=\"T = void\">\ntype HeadlessModalInstance = ComponentPublicInstance & ModalExpose;\n\nconst {\n class: contentClass = '',\n wrapperClass = '',\n title,\n titleHidden,\n description,\n persistent,\n closeHidden,\n fullscreen,\n fullscreenOnMobile,\n ...props\n} = defineProps<\n ModalProps & {\n wrapperClass?: HTMLAttributes['class'];\n class?: HTMLAttributes['class'];\n closeHidden?: boolean;\n }\n>();\n\ndefineSlots<ModalSlots<T>>();\ndefineExpose<AcceptRefs<ModalExpose>>({\n $content: computed(() => $modal.value?.$content),\n});\n\nconst { forwardRef, currentRef } = useForwardExpose<HeadlessModalInstance>();\nconst { id, visible } = useModal();\nconst $modal = currentRef as Ref<Nullable<HeadlessModalInstance>>;\nconst modal = injectModal();\nconst inForeground = computed(\n () => visible.value && modals.value.toReversed().find((modal) => modal.visible.value)?.id === id.value,\n);\nconst firstVisibleModal = computed(() => modals.value.find((modal) => modal.visible.value));\nconst hasRenderedModals = computed(() => modals.value.some((modal) => renderedModals.has(modal)));\nconst contentProps = computed(() => (description ? {} : { 'aria-describedby': undefined }));\nconst renderedContentClass = computed(() =>\n classes(\n 'overflow-auto px-4 pb-4 flex flex-col flex-1',\n { 'pt-4': !title || titleHidden, 'max-h-[90vh]': !renderFullscreen.value },\n contentClass,\n ));\nconst renderFullscreen = computed(() => fullscreen || (fullscreenOnMobile && UI.mobile));\nconst renderedWrapperClass = computed(() =>\n classes(\n 'isolate fixed z-50 flex flex-col overflow-hidden bg-white text-left duration-300',\n renderFullscreen.value\n ? [\n 'inset-0 transition-[transform,translate] will-change-[transform,translate]',\n renderedModals.has(modal.value) || 'animate-[slide-in_var(--tw-duration)_ease-in-out]',\n inForeground.value ? 'translate-y-0' : 'translate-y-full',\n ]\n : [\n 'top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-full',\n 'max-w-[calc(100%-2rem)] rounded-lg shadow-xl sm:max-w-lg',\n 'transition-[scale,opacity] will-change-[scale,opacity]',\n renderedModals.has(modal.value) ||\n 'animate-[fade-in_var(--tw-duration)_ease-in-out,grow_var(--tw-duration)_ease-in-out]',\n inForeground.value ? 'scale-100 opacity-100' : 'scale-50 opacity-0',\n ],\n wrapperClass,\n ));\n\nonMounted(() => after(500).then(() => renderedModals.add(modal.value)));\n</script>\n","import { computed } from 'vue';\n\nimport { translateWithDefault } from '@aerogel/core/lang/utils';\nimport type { ModalExpose } from '@aerogel/core/components/contracts/Modal';\n\nexport interface AlertModalProps {\n title?: string;\n message: string;\n}\n\nexport interface AlertModalExpose extends ModalExpose {}\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function useAlertModal(props: AlertModalProps) {\n const renderedTitle = computed(() => props.title ?? translateWithDefault('ui.alert', 'Alert'));\n const titleHidden = computed(() => !props.title);\n\n return { renderedTitle, titleHidden };\n}\n","<template>\n <Modal :title=\"renderedTitle\" :title-hidden=\"titleHidden\">\n <Markdown :text=\"message\" />\n </Modal>\n</template>\n\n<script setup lang=\"ts\">\nimport Modal from '@aerogel/core/components/ui/Modal.vue';\nimport Markdown from '@aerogel/core/components/ui/Markdown.vue';\nimport { useAlertModal } from '@aerogel/core/components/contracts/AlertModal';\nimport type { AlertModalExpose, AlertModalProps } from '@aerogel/core/components/contracts/AlertModal';\n\nconst props = defineProps<AlertModalProps>();\nconst { renderedTitle, titleHidden } = useAlertModal(props);\n\ndefineExpose<AlertModalExpose>();\n</script>\n","<template>\n <form @submit.prevent=\"form ? form.submit() : $emit('submit')\">\n <slot />\n </form>\n</template>\n\n<script setup lang=\"ts\">\nimport { provide, watchEffect } from 'vue';\n\nimport type FormController from '@aerogel/core/forms/FormController';\n\nlet offSubmit: (() => void) | undefined;\nconst { form } = defineProps<{ form?: FormController }>();\nconst emit = defineEmits<{ submit: [] }>();\n\nwatchEffect((onCleanup) => {\n offSubmit?.();\n offSubmit = form?.on('submit', () => emit('submit'));\n\n onCleanup(() => offSubmit?.());\n});\n\nprovide('form', form);\n</script>\n","import { computed } from 'vue';\n\nimport { translateWithDefault } from '@aerogel/core/lang';\nimport { useForm } from '@aerogel/core/utils/composition/forms';\nimport type { ButtonVariant } from '@aerogel/core/components/contracts/Button';\nimport type { FormFieldDefinition } from '@aerogel/core/forms/FormController';\nimport type { Nullable } from '@noeldemartin/utils';\nimport type { ModalEmits, ModalExpose } from '@aerogel/core/components/contracts/Modal';\n\nexport type ConfirmModalCheckboxes = Record<string, { label: string; default?: boolean; required?: boolean }>;\nexport type ConfirmModalResult = boolean | [boolean, Record<string, Nullable<boolean>>];\n\nexport interface ConfirmModalProps {\n title?: string;\n message: string;\n acceptText?: string;\n acceptVariant?: ButtonVariant;\n cancelText?: string;\n cancelVariant?: ButtonVariant;\n checkboxes?: ConfirmModalCheckboxes;\n actions?: Record<string, () => unknown>;\n required?: boolean;\n}\n\nexport interface ConfirmModalExpose extends ModalExpose {}\n\nexport interface ConfirmModalEmits extends ModalEmits<ConfirmModalResult> {}\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function useConfirmModal(props: ConfirmModalProps) {\n const form = useForm(\n Object.entries(props.checkboxes ?? {}).reduce(\n (values, [name, checkbox]) => ({\n [name]: {\n type: 'boolean',\n default: checkbox.default,\n required: checkbox.required ? 'required' : undefined,\n },\n ...values,\n }),\n {} as Record<string, FormFieldDefinition<'boolean'>>,\n ),\n );\n\n const renderedTitle = computed(() => props.title ?? translateWithDefault('ui.confirm', 'Confirm'));\n const titleHidden = computed(() => !props.title);\n const renderedAcceptText = computed(() => props.acceptText ?? translateWithDefault('ui.accept', 'Ok'));\n const renderedCancelText = computed(() => props.cancelText ?? translateWithDefault('ui.cancel', 'Cancel'));\n\n return { form, renderedTitle, titleHidden, renderedAcceptText, renderedCancelText };\n}\n","<template>\n <!-- @vue-generic {import('@aerogel/core/components/contracts/ConfirmModal').ConfirmModalResult} -->\n <Modal\n v-slot=\"{ close }\"\n :title=\"renderedTitle\"\n :title-hidden=\"titleHidden\"\n persistent\n >\n <Form :form @submit=\"close([true, form.data()])\">\n <Markdown :text=\"message\" :actions />\n\n <ul v-if=\"checkboxes\" class=\"mt-4 flex flex-col text-sm text-gray-600\">\n <li v-for=\"(checkbox, name) of checkboxes\" :key=\"name\">\n <label class=\"flex items-center\">\n <input\n v-model=\"form[name]\"\n type=\"checkbox\"\n :required=\"checkbox.required\"\n class=\"border-primary-600 text-primary-600 hover:bg-primary-50 hover:checked:bg-primary-500 focus:ring-primary-600 focus-visible:ring-primary-600 rounded border-2\"\n >\n <span class=\"ml-1.5\">{{ checkbox.label }}</span>\n </label>\n </li>\n </ul>\n\n <div class=\"mt-4 flex flex-row-reverse gap-2\">\n <Button :variant=\"acceptVariant\" submit>\n {{ renderedAcceptText }}\n </Button>\n <Button v-if=\"!required\" :variant=\"cancelVariant\" @click=\"close(false)\">\n {{ renderedCancelText }}\n </Button>\n </div>\n </Form>\n </Modal>\n</template>\n\n<script setup lang=\"ts\">\nimport Form from '@aerogel/core/components/ui/Form.vue';\nimport Markdown from '@aerogel/core/components/ui/Markdown.vue';\nimport Button from '@aerogel/core/components/ui/Button.vue';\nimport Modal from '@aerogel/core/components/ui/Modal.vue';\nimport { useConfirmModal } from '@aerogel/core/components/contracts/ConfirmModal';\nimport type {\n ConfirmModalEmits,\n ConfirmModalExpose,\n ConfirmModalProps,\n} from '@aerogel/core/components/contracts/ConfirmModal';\n\nconst { cancelVariant = 'secondary', ...props } = defineProps<ConfirmModalProps>();\nconst { form, renderedTitle, titleHidden, renderedAcceptText, renderedCancelText } = useConfirmModal(props);\n\ndefineEmits<ConfirmModalEmits>();\ndefineExpose<ConfirmModalExpose>();\n</script>\n","<template>\n <div class=\"flex\">\n <slot v-for=\"button of buttons\" v-bind=\"button\">\n <Button\n size=\"icon\"\n variant=\"ghost\"\n class=\"group whitespace-nowrap\"\n :href=\"button.url\"\n :title=\"$td(`errors.report_${button.id}`, button.description)\"\n @click=\"button.click\"\n >\n <span class=\"sr-only\">{{ $td(`errors.report_${button.id}`, button.description) }}</span>\n <component :is=\"button.iconComponent\" class=\"size-4\" aria-hidden=\"true\" />\n </Button>\n </slot>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport IconConsole from '~icons/mdi/console';\nimport IconCopy from '~icons/zondicons/copy';\nimport IconGitHub from '~icons/mdi/github';\n\nimport { computed } from 'vue';\nimport { stringExcerpt, tap } from '@noeldemartin/utils';\nimport type { Component } from 'vue';\n\nimport App from '@aerogel/core/services/App';\nimport Button from '@aerogel/core/components/ui/Button.vue';\nimport UI from '@aerogel/core/ui/UI';\nimport { translateWithDefault } from '@aerogel/core/lang/utils';\nimport type { ErrorReport } from '@aerogel/core/errors';\n\ninterface ErrorReportModalButtonsDefaultSlotProps {\n id: string;\n description: string;\n iconComponent: Component;\n url?: string;\n click?(): void;\n}\n\ndefineSlots<{\n default(props: ErrorReportModalButtonsDefaultSlotProps): unknown;\n}>();\n\nconst props = defineProps<{ report: ErrorReport }>();\nconst summary = computed(() =>\n props.report.description ? `${props.report.title}: ${props.report.description}` : props.report.title);\nconst githubReportUrl = computed(() => {\n if (!App.sourceUrl) {\n return false;\n }\n\n const issueTitle = encodeURIComponent(summary.value);\n const issueBody = encodeURIComponent(\n [\n '[Please, explain here what you were trying to do when this error appeared]',\n '',\n 'Error details:',\n '```',\n stringExcerpt(\n props.report.details ?? 'Details missing from report',\n 1800 - issueTitle.length - App.sourceUrl.length,\n ).trim(),\n '```',\n ].join('\\n'),\n );\n\n return `${App.sourceUrl}/issues/new?title=${issueTitle}&body=${issueBody}`;\n});\nconst buttons = computed(() =>\n tap(\n [\n {\n id: 'clipboard',\n description: 'Copy to clipboard',\n iconComponent: IconCopy,\n async click() {\n await navigator.clipboard.writeText(`${summary.value}\\n\\n${props.report.details}`);\n\n UI.toast(translateWithDefault('errors.copiedToClipboard', 'Debug information copied to clipboard'));\n },\n },\n {\n id: 'console',\n description: 'Log to console',\n iconComponent: IconConsole,\n click() {\n const error = props.report.error ?? props.report;\n\n (window as { error?: unknown }).error = error;\n\n // eslint-disable-next-line no-console\n console.error(error);\n\n UI.toast(\n translateWithDefault(\n 'errors.addedToConsole',\n 'You can now use the **error** variable in the console',\n ),\n );\n },\n },\n ] as ErrorReportModalButtonsDefaultSlotProps[],\n (reportButtons) => {\n if (!githubReportUrl.value) {\n return;\n }\n\n reportButtons.push({\n id: 'github',\n description: 'Report in GitHub',\n iconComponent: IconGitHub,\n url: githubReportUrl.value,\n });\n },\n ));\n</script>\n","<template>\n <Markdown :text inline />\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\nimport Markdown from '@aerogel/core/components/ui/Markdown.vue';\nimport type { ErrorReport } from '@aerogel/core/errors';\n\nconst { totalReports, currentReport, report } = defineProps<{\n report: ErrorReport;\n currentReport?: number;\n totalReports?: number;\n}>();\n\nconst text = computed(() => {\n if (!totalReports || totalReports <= 1) {\n return report.title;\n }\n\n return `${report.title} (${currentReport}/${totalReports})`;\n});\n</script>\n","import { computed, ref } from 'vue';\n\nimport { translateWithDefault } from '@aerogel/core/lang';\nimport type { ErrorReport } from '@aerogel/core/errors';\nimport type { ModalExpose } from '@aerogel/core/components/contracts/Modal';\n\nexport interface ErrorReportModalProps {\n report: ErrorReport;\n reports: ErrorReport[];\n}\n\nexport interface ErrorReportModalExpose extends ModalExpose {}\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function useErrorReportModal(props: ErrorReportModalProps) {\n const activeReportIndex = ref(props.reports.includes(props.report) ? props.reports.indexOf(props.report) : 0);\n const activeReport = computed(() => props.reports[activeReportIndex.value] as ErrorReport);\n const details = computed(\n () =>\n activeReport.value.details?.trim() ||\n translateWithDefault('errors.detailsEmpty', 'This error is missing a stacktrace.'),\n );\n const previousReportText = translateWithDefault('errors.previousReport', 'Show previous report');\n const nextReportText = translateWithDefault('errors.nextReport', 'Show next report');\n\n return {\n activeReportIndex,\n details,\n nextReportText,\n previousReportText,\n activeReport,\n };\n}\n","<template>\n <Modal\n :title=\"$td('errors.report', 'Error report')\"\n title-hidden\n close-hidden\n class=\"p-0\"\n wrapper-class=\"sm:w-auto sm:min-w-lg sm:max-w-[80vw]\"\n >\n <div class=\"px-4 pt-5 pb-4\">\n <h2 class=\"flex justify-between gap-4\">\n <div class=\"flex items-center gap-2\">\n <IconExclamationSolid class=\"size-5 text-red-600\" />\n <ErrorReportModalTitle\n class=\"text-lg leading-6 font-semibold text-gray-900\"\n :report=\"activeReport\"\n :current-report=\"activeReportIndex + 1\"\n :total-reports=\"reports.length\"\n />\n <span v-if=\"reports.length > 1\" class=\"flex gap-0.5\">\n <Button\n size=\"icon\"\n variant=\"ghost\"\n :disabled=\"activeReportIndex === 0\"\n :aria-label=\"previousReportText\"\n :title=\"previousReportText\"\n @click=\"activeReportIndex--\"\n >\n <IconCheveronLeft class=\"size-4\" />\n </Button>\n <Button\n size=\"icon\"\n variant=\"ghost\"\n :disabled=\"activeReportIndex === reports.length - 1\"\n :aria-label=\"nextReportText\"\n :title=\"nextReportText\"\n @click=\"activeReportIndex++\"\n >\n <IconCheveronRight class=\"size-4\" />\n </Button>\n </span>\n </div>\n <ErrorReportModalButtons :report=\"activeReport\" class=\"gap-0.5\" />\n </h2>\n <Markdown v-if=\"activeReport.description\" :text=\"activeReport.description\" class=\"text-gray-600\" />\n </div>\n <div class=\"-mt-2 max-h-[75vh] overflow-auto bg-red-800/10\">\n <pre class=\"p-4 text-xs text-red-800\" v-text=\"details\" />\n </div>\n </Modal>\n</template>\n\n<script setup lang=\"ts\">\nimport IconCheveronLeft from '~icons/zondicons/cheveron-left';\nimport IconCheveronRight from '~icons/zondicons/cheveron-right';\nimport IconExclamationSolid from '~icons/zondicons/exclamation-solid';\n\nimport Markdown from '@aerogel/core/components/ui/Markdown.vue';\nimport Button from '@aerogel/core/components/ui/Button.vue';\nimport ErrorReportModalButtons from '@aerogel/core/components/ui/ErrorReportModalButtons.vue';\nimport ErrorReportModalTitle from '@aerogel/core/components/ui/ErrorReportModalTitle.vue';\nimport Modal from '@aerogel/core/components/ui/Modal.vue';\nimport { useErrorReportModal } from '@aerogel/core/components/contracts/ErrorReportModal';\nimport type {\n ErrorReportModalExpose,\n ErrorReportModalProps,\n} from '@aerogel/core/components/contracts/ErrorReportModal';\n\nconst props = defineProps<ErrorReportModalProps>();\n\nconst { activeReportIndex, details, nextReportText, previousReportText, activeReport } = useErrorReportModal(props);\n\ndefineExpose<ErrorReportModalExpose>();\n</script>\n","<template>\n <div class=\"relative mt-1 h-2 w-full overflow-hidden rounded-full bg-gray-200\">\n <div :class=\"filledClasses\" :style=\"`transform:translateX(-${(1 - renderedProgress) * 100}%)`\" />\n <div\n v-if=\"overflowWidthPercentage\"\n :class=\"overflowClasses\"\n :style=\"{ width: `${overflowWidthPercentage}%` }\"\n />\n <span class=\"sr-only\">\n {{\n $td('ui.progress', '{progress}% complete', {\n progress: renderedProgress * 100,\n })\n }}\n </span>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onUnmounted, ref, watch } from 'vue';\n\nimport { classes } from '@aerogel/core/utils/classes';\nimport type Job from '@aerogel/core/jobs/Job';\nimport type { Falsifiable } from '@aerogel/core/utils';\n\nconst { filledClass, overflowClass, progress, job } = defineProps<{\n filledClass?: string;\n overflowClass?: string;\n progress?: number;\n job?: Falsifiable<Job>;\n}>();\n\nlet cleanup: Falsifiable<Function>;\nconst jobProgress = ref(0);\nconst filledClasses = computed(() =>\n classes('size-full transition-transform duration-500 rounded-r-full ease-linear bg-primary-600', filledClass));\nconst overflowClasses = computed(() =>\n classes(\n 'absolute inset-y-0 right-0 size-full rounded-r-full',\n 'bg-primary-900 transition-[width] duration-500 ease-linear',\n overflowClass,\n ));\nconst renderedProgress = computed(() => {\n if (typeof progress === 'number') {\n return progress;\n }\n\n return jobProgress.value;\n});\nconst overflowWidthPercentage = computed(() =>\n renderedProgress.value > 1 ? 100 * ((renderedProgress.value - 1) / renderedProgress.value) : null);\n\nwatch(\n () => job,\n () => {\n cleanup && cleanup();\n\n jobProgress.value = job ? job.progress : 0;\n cleanup = job && job.listeners.add({ onUpdated: (value) => (jobProgress.value = value) });\n },\n { immediate: true },\n);\n\nonUnmounted(() => cleanup && cleanup());\n</script>\n","import { computed } from 'vue';\n\nimport { translateWithDefault } from '@aerogel/core/lang';\nimport type { Job } from '@aerogel/core/jobs';\nimport type { ModalExpose } from '@aerogel/core/components/contracts/Modal';\n\nexport interface LoadingModalProps {\n title?: string;\n message?: string;\n progress?: number;\n job?: Job;\n}\n\nexport interface LoadingModalExpose extends ModalExpose {}\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function useLoadingModal(props: LoadingModalProps) {\n const renderedTitle = computed(() => props.title ?? translateWithDefault('ui.loading', 'Loading'));\n const renderedMessage = computed(\n () => props.message ?? translateWithDefault('ui.loadingInProgress', 'Loading in progress...'),\n );\n const showProgress = computed(() => typeof props.progress === 'number' || !!props.job);\n const titleHidden = computed(() => !props.title);\n\n return { renderedTitle, renderedMessage, titleHidden, showProgress };\n}\n","<template>\n <Modal\n persistent\n wrapper-class=\"w-auto\"\n :title=\"renderedTitle\"\n :title-hidden\n :class=\"{ 'flex-col-reverse': showProgress, 'flex-row items-center justify-center gap-2': !showProgress }\"\n >\n <ProgressBar\n v-if=\"showProgress\"\n :progress\n :job\n class=\"min-w-[min(400px,80vw)]\"\n />\n <IconSpinner v-else class=\"text-primary-600 mr-1 size-6\" />\n <Markdown :text=\"renderedMessage\" />\n </Modal>\n</template>\n\n<script setup lang=\"ts\">\nimport IconSpinner from '~icons/svg-spinners/90-ring-with-bg';\n\nimport Markdown from '@aerogel/core/components/ui/Markdown.vue';\nimport Modal from '@aerogel/core/components/ui/Modal.vue';\nimport ProgressBar from '@aerogel/core/components/ui/ProgressBar.vue';\nimport { useLoadingModal } from '@aerogel/core/components/contracts/LoadingModal';\nimport type { LoadingModalExpose, LoadingModalProps } from '@aerogel/core/components/contracts/LoadingModal';\n\nconst props = defineProps<LoadingModalProps>();\nconst { renderedTitle, renderedMessage, titleHidden, showProgress } = useLoadingModal(props);\n\ndefineExpose<LoadingModalExpose>();\n</script>\n","<template>\n <component :is=\"as\">\n <slot />\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject, provide, readonly } from 'vue';\nimport { uuid } from '@noeldemartin/utils';\n\nimport type FormController from '@aerogel/core/forms/FormController';\nimport type { FormFieldValue } from '@aerogel/core/forms/FormController';\nimport type { InputEmits, InputExpose, InputProps } from '@aerogel/core/components/contracts/Input';\n\nconst { as = 'div', name, label, description, modelValue } = defineProps<InputProps & { as?: string }>();\nconst emit = defineEmits<InputEmits>();\nconst form = inject<FormController | null>('form', null);\nconst errors = computed(() => {\n if (!form || !name) {\n return null;\n }\n\n return form.errors[name] ?? null;\n});\n\nconst expose = {\n id: `input-${uuid()}`,\n name: computed(() => name),\n label: computed(() => label),\n description: computed(() => description),\n value: computed(() => {\n if (form && name) {\n return form.getFieldValue(name);\n }\n\n return modelValue;\n }),\n errors: readonly(errors),\n required: computed(() => {\n if (!name || !form) {\n return;\n }\n\n return form.getFieldRules(name).includes('required');\n }),\n update(value) {\n if (form && name) {\n form.setFieldValue(name, value as FormFieldValue);\n\n return;\n }\n\n emit('update:modelValue', value);\n },\n} satisfies InputExpose;\n\nprovide('input', expose);\ndefineExpose(expose);\n</script>\n","<template>\n <label v-if=\"show\" :for=\"input.id\">\n <slot>\n {{ input.label }}\n </slot>\n </label>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, useSlots } from 'vue';\n\nimport { injectReactiveOrFail } from '@aerogel/core/utils/vue';\nimport type { InputExpose } from '@aerogel/core/components/contracts/Input';\n\nconst input = injectReactiveOrFail<InputExpose>('input', '<HeadlessInputLabel> must be a child of a <HeadlessInput>');\nconst slots = useSlots();\nconst show = computed(() => !!(input.label || slots.default));\n</script>\n","<template>\n <input\n :id=\"input.id\"\n ref=\"$inputRef\"\n :name\n :checked\n :type=\"renderedType\"\n :required=\"input.required ?? undefined\"\n :aria-invalid=\"input.errors ? 'true' : 'false'\"\n :aria-describedby=\"\n input.errors ? `${input.id}-error` : input.description ? `${input.id}-description` : undefined\n \"\n @input=\"update\"\n >\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject, useTemplateRef, watchEffect } from 'vue';\n\nimport { injectReactiveOrFail } from '@aerogel/core/utils/vue';\nimport { onFormFocus } from '@aerogel/core/utils/composition/forms';\nimport { getLocalTimezoneOffset } from '@aerogel/core/utils';\nimport type FormController from '@aerogel/core/forms/FormController';\nimport type { FormFieldValue } from '@aerogel/core/forms/FormController';\nimport type { InputExpose } from '@aerogel/core/components/contracts/Input';\n\nconst { type } = defineProps<{ type?: string }>();\nconst $input = useTemplateRef('$inputRef');\nconst input = injectReactiveOrFail<InputExpose>('input', '<HeadlessInputInput> must be a child of a <HeadlessInput>');\nconst form = inject<FormController | null>('form', null);\nconst name = computed(() => input.name ?? undefined);\nconst value = computed(() => input.value);\nconst renderedType = computed(() => {\n if (type) {\n return type;\n }\n\n const fieldType = (name.value && form?.getFieldType(name.value)) ?? '';\n\n return ['text', 'email', 'number', 'tel', 'url'].includes(fieldType) ? fieldType : 'text';\n});\nconst checked = computed(() => {\n if (renderedType.value !== 'checkbox') {\n return;\n }\n\n return !!value.value;\n});\n\nfunction update() {\n if (!$input.value) {\n return;\n }\n\n input.update(getValue());\n}\n\nfunction getValue(): FormFieldValue | null {\n if (!$input.value) {\n return null;\n }\n\n switch (renderedType.value) {\n case 'checkbox':\n return $input.value.checked;\n case 'date':\n case 'time':\n case 'datetime-local': {\n const date = new Date(\n Math.round($input.value.valueAsNumber / 60000) * 60000 +\n getLocalTimezoneOffset($input.value.valueAsDate ?? new Date($input.value.valueAsNumber)),\n );\n\n if (isNaN(date.getTime())) {\n return null;\n }\n\n return date;\n }\n\n case 'number':\n return $input.value.valueAsNumber;\n default:\n return $input.value.value;\n }\n}\n\nonFormFocus(input, () => $input.value?.focus());\nwatchEffect(() => {\n if (!$input.value) {\n return;\n }\n\n if (['date', 'time', 'datetime-local'].includes(renderedType.value) && value.value instanceof Date) {\n const roundedValue = Math.round(value.value.getTime() / 60000) * 60000;\n\n $input.value.valueAsNumber = roundedValue - getLocalTimezoneOffset(value.value);\n\n if (value.value.getTime() !== roundedValue) {\n input.update(new Date(roundedValue));\n }\n\n return;\n }\n\n $input.value.value = (value.value as string) ?? null;\n});\n</script>\n","<template>\n <slot :id=\"`${input.id}-description`\">\n <Markdown\n v-if=\"show\"\n v-bind=\"$attrs\"\n :id=\"`${input.id}-description`\"\n :text\n />\n </slot>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\nimport Markdown from '@aerogel/core/components/ui/Markdown.vue';\nimport { injectReactiveOrFail } from '@aerogel/core/utils/vue';\nimport type { InputExpose } from '@aerogel/core/components/contracts/Input';\n\ndefineOptions({ inheritAttrs: false });\n\nconst input = injectReactiveOrFail<InputExpose>(\n 'input',\n '<HeadlessInputDescription> must be a child of a <HeadlessInput>',\n);\nconst text = computed(() => (typeof input.description === 'string' ? input.description : ''));\nconst show = computed(() => !!input.description);\n</script>\n","<template>\n <p v-if=\"errorMessage\" :id=\"`${input.id}-error`\">\n {{ errorMessage }}\n </p>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\nimport { injectReactiveOrFail } from '@aerogel/core/utils/vue';\nimport { translateWithDefault } from '@aerogel/core/lang/utils';\nimport type { InputExpose } from '@aerogel/core/components/contracts/Input';\n\nconst input = injectReactiveOrFail<InputExpose>('input', '<HeadlessInputError> must be a child of a <HeadlessInput>');\nconst errorMessage = computed(() => {\n if (!input.errors) {\n return null;\n }\n\n return translateWithDefault(`errors.${input.errors[0]}`, `Error: ${input.errors[0]}`);\n});\n</script>\n","<template>\n <HeadlessInput\n ref=\"$inputRef\"\n :label=\"label\"\n :class=\"rootClasses\"\n v-bind=\"props\"\n @update:model-value=\"$emit('update:modelValue', $event)\"\n >\n <HeadlessInputLabel class=\"block text-sm leading-6 font-medium text-gray-900\" />\n <div :class=\"renderedWrapperClasses\">\n <HeadlessInputInput v-bind=\"inputAttrs\" :class=\"renderedInputClasses\" />\n <div v-if=\"$input?.errors\" class=\"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3\">\n <IconExclamationSolid class=\"size-5 text-red-500\" />\n </div>\n </div>\n <HeadlessInputDescription :class=\"renderedDescriptionClasses\" />\n <HeadlessInputError :class=\"renderedErrorClasses\" />\n </HeadlessInput>\n</template>\n\n<script setup lang=\"ts\">\nimport IconExclamationSolid from '~icons/zondicons/exclamation-solid';\n\nimport { computed, useTemplateRef } from 'vue';\nimport type { HTMLAttributes } from 'vue';\n\nimport HeadlessInput from '@aerogel/core/components/headless/HeadlessInput.vue';\nimport HeadlessInputLabel from '@aerogel/core/components/headless/HeadlessInputLabel.vue';\nimport HeadlessInputInput from '@aerogel/core/components/headless/HeadlessInputInput.vue';\nimport HeadlessInputDescription from '@aerogel/core/components/headless/HeadlessInputDescription.vue';\nimport HeadlessInputError from '@aerogel/core/components/headless/HeadlessInputError.vue';\nimport { classes } from '@aerogel/core/utils/classes';\nimport { useInputAttrs } from '@aerogel/core/utils/composition/forms';\nimport type { InputEmits, InputProps } from '@aerogel/core/components/contracts/Input';\n\ndefineOptions({ inheritAttrs: false });\ndefineEmits<InputEmits>();\n\nconst { label, inputClass, wrapperClass, descriptionClass, errorClass, ...props } = defineProps<\n InputProps & {\n inputClass?: HTMLAttributes['class'];\n wrapperClass?: HTMLAttributes['class'];\n descriptionClass?: HTMLAttributes['class'];\n errorClass?: HTMLAttributes['class'];\n }\n>();\nconst $input = useTemplateRef('$inputRef');\nconst [inputAttrs, rootClasses] = useInputAttrs();\nconst renderedWrapperClasses = computed(() =>\n classes('relative rounded-md shadow-2xs', { 'mt-1': label }, wrapperClass));\nconst renderedDescriptionClasses = computed(() => classes('mt-2 text-sm text-gray-600', descriptionClass));\nconst renderedErrorClasses = computed(() => classes('mt-2 text-sm text-red-600', errorClass));\nconst renderedInputClasses = computed(() =>\n classes(\n // eslint-disable-next-line vue/max-len\n 'block w-full rounded-md border-0 py-1.5 ring-1 ring-inset focus:ring-2 focus:ring-inset sm:text-sm sm:leading-6',\n {\n 'focus:ring-primary-600': !$input.value?.errors,\n 'text-gray-900 shadow-2xs ring-gray-900/10 placeholder:text-gray-400': !$input.value?.errors,\n 'pr-10 text-red-900 ring-red-900/10 placeholder:text-red-300 focus:ring-red-500': $input.value?.errors,\n },\n inputClass,\n ));\n</script>\n","import type { FormFieldDefinition } from './FormController';\n\nexport function booleanInput(\n defaultValue?: boolean,\n options: { rules?: string[] } = {},\n): FormFieldDefinition<'boolean'> {\n return {\n default: defaultValue,\n type: 'boolean',\n rules: options.rules,\n };\n}\n\nexport function dateInput(defaultValue?: Date, options: { rules?: string[] } = {}): FormFieldDefinition<'date'> {\n return {\n default: defaultValue,\n type: 'date',\n rules: options.rules,\n };\n}\n\nexport function enumInput<const T extends string>(\n values: readonly T[],\n defaultValue?: T,\n options: { rules?: string[] } = {},\n): FormFieldDefinition<'enum', string, T> {\n return {\n default: defaultValue,\n type: 'enum',\n rules: options.rules,\n values,\n };\n}\n\nexport function requiredBooleanInput(\n defaultValue?: boolean,\n options: { rules?: string[] } = {},\n): FormFieldDefinition<'boolean', 'required'> {\n return {\n default: defaultValue,\n type: 'boolean',\n rules: ['required', ...((options.rules as 'required'[]) ?? [])],\n };\n}\n\nexport function requiredDateInput(\n defaultValue?: Date,\n options: { rules?: string[] } = {},\n): FormFieldDefinition<'date', 'required'> {\n return {\n default: defaultValue,\n type: 'date',\n rules: ['required', ...((options.rules as 'required'[]) ?? [])],\n };\n}\n\nexport function requiredEnumInput<const T extends string>(\n values: readonly T[],\n defaultValue?: T,\n options: { rules?: string[] } = {},\n): FormFieldDefinition<'enum', 'required', T> {\n return {\n default: defaultValue,\n type: 'enum',\n rules: ['required', ...((options.rules as 'required'[]) ?? [])],\n values,\n };\n}\n\nexport function requiredNumberInput(\n defaultValue?: number,\n options: { rules?: string[] } = {},\n): FormFieldDefinition<'number', 'required'> {\n return {\n default: defaultValue,\n type: 'number',\n rules: ['required', ...((options.rules as 'required'[]) ?? [])],\n };\n}\n\nexport function requiredObjectInput<T extends object>(\n defaultValue?: T,\n options: { rules?: string[] } = {},\n): FormFieldDefinition<'object', 'required', T> {\n return {\n default: defaultValue,\n type: 'object',\n rules: ['required', ...((options.rules as 'required'[]) ?? [])],\n };\n}\n\nexport function requiredStringInput(\n defaultValue?: string,\n options: { rules?: string[] } = {},\n): FormFieldDefinition<'string', 'required'> {\n return {\n default: defaultValue,\n type: 'string',\n rules: ['required', ...((options.rules as 'required'[]) ?? [])],\n };\n}\n\nexport function numberInput(defaultValue?: number, options: { rules?: string[] } = {}): FormFieldDefinition<'number'> {\n return {\n default: defaultValue,\n type: 'number',\n rules: options.rules,\n };\n}\n\nexport function objectInput<T extends object>(\n defaultValue?: T,\n options: { rules?: string[] } = {},\n): FormFieldDefinition<'object', string, T> {\n return {\n default: defaultValue,\n type: 'object',\n rules: options.rules,\n };\n}\n\nexport function stringInput(defaultValue?: string, options: { rules?: string[] } = {}): FormFieldDefinition<'string'> {\n return {\n default: defaultValue,\n type: 'string',\n rules: options.rules,\n };\n}\n","import { computed } from 'vue';\n\nimport { useForm } from '@aerogel/core/utils/composition/forms';\nimport { requiredStringInput } from '@aerogel/core/forms/utils';\nimport { translateWithDefault } from '@aerogel/core/lang';\nimport type { ButtonVariant } from '@aerogel/core/components/contracts/Button';\nimport type { ModalEmits, ModalExpose } from '@aerogel/core/components/contracts/Modal';\n\nexport type PromptModalResult = string;\n\nexport interface PromptModalProps {\n title?: string;\n message: string;\n label?: string;\n defaultValue?: string;\n placeholder?: string;\n acceptText?: string;\n acceptVariant?: ButtonVariant;\n cancelText?: string;\n cancelVariant?: ButtonVariant;\n}\n\nexport interface PromptModalExpose extends ModalExpose {}\n\nexport interface PromptModalEmits extends ModalEmits<PromptModalResult> {}\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function usePromptModal(props: PromptModalProps) {\n const form = useForm({\n draft: requiredStringInput(props.defaultValue ?? ''),\n });\n const renderedTitle = computed(() => props.title ?? props.message);\n const renderedMessage = computed(() => (props.title ? props.message : null));\n const renderedAcceptText = computed(() => props.acceptText ?? translateWithDefault('ui.accept', 'Ok'));\n const renderedCancelText = computed(() => props.cancelText ?? translateWithDefault('ui.cancel', 'Cancel'));\n\n return { form, renderedTitle, renderedMessage, renderedAcceptText, renderedCancelText };\n}\n","<template>\n <!-- @vue-generic {import('@aerogel/core/components/contracts/PromptModal').PromptModalResult} -->\n <Modal v-slot=\"{ close }\" :title=\"renderedTitle\" persistent>\n <Form :form @submit=\"close(form.draft)\">\n <Markdown v-if=\"renderedMessage\" :text=\"renderedMessage\" />\n <Input\n name=\"draft\"\n class=\"mt-2\"\n :placeholder\n :label\n />\n\n <div class=\"mt-4 flex flex-row-reverse gap-2\">\n <Button :variant=\"acceptVariant\" submit>\n {{ renderedAcceptText }}\n </Button>\n <Button :variant=\"cancelVariant\" @click=\"close()\">\n {{ renderedCancelText }}\n </Button>\n </div>\n </Form>\n </Modal>\n</template>\n\n<script setup lang=\"ts\">\nimport Markdown from '@aerogel/core/components/ui/Markdown.vue';\nimport Button from '@aerogel/core/components/ui/Button.vue';\nimport Form from '@aerogel/core/components/ui/Form.vue';\nimport Input from '@aerogel/core/components/ui/Input.vue';\nimport Modal from '@aerogel/core/components/ui/Modal.vue';\nimport { usePromptModal } from '@aerogel/core/components/contracts/PromptModal';\nimport type {\n PromptModalEmits,\n PromptModalExpose,\n PromptModalProps,\n} from '@aerogel/core/components/contracts/PromptModal';\n\nconst { cancelVariant = 'secondary', ...props } = defineProps<PromptModalProps>();\nconst { form, renderedTitle, renderedMessage, renderedAcceptText, renderedCancelText } = usePromptModal(props);\n\ndefineEmits<PromptModalEmits>();\ndefineExpose<PromptModalExpose>();\n</script>\n","<template>\n <div class=\"grid grow place-items-center\">\n <div class=\"flex flex-col items-center p-8\">\n <i-majesticons-exclamation class=\"size-20 text-red-600\" />\n <h1 class=\"mt-0 mb-0 text-center text-4xl font-medium text-red-600\">\n {{ $td('startupCrash.title', 'Oops, something went wrong!') }}\n </h1>\n <Markdown\n :text=\"\n $td(\n 'startupCrash.message',\n 'There was a problem starting the application, but here\\'s some things you can do:'\n )\n \"\n class=\"mt-4 text-center\"\n />\n <div\n class=\"mt-4 grid grid-cols-1 gap-2 sm:grid-cols-2 [&_button]:justify-start sm:[&_button]:size-32 sm:[&_button]:flex-col sm:[&_button]:justify-center [&_svg]:size-6 sm:[&_svg]:size-8\"\n >\n <Button variant=\"danger\" @click=\"$app.reload()\">\n <IconRefresh />\n {{ $td('startupCrash.reload', 'Try again') }}\n </Button>\n <Button variant=\"danger\" @click=\"$errors.inspect($errors.startupErrors)\">\n <IconBug />\n {{ $td('startupCrash.inspect', 'View error details') }}\n </Button>\n <Button variant=\"danger\" @click=\"purgeDevice()\">\n <IconDelete />\n {{ $td('startupCrash.purge', 'Purge device') }}\n </Button>\n <Button variant=\"danger\" @click=\"$errors.debug = !$errors.debug\">\n <IconFrameInspect />\n {{ $td('startupCrash.debug', 'Toggle debugging') }}\n </Button>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport IconBug from '~icons/material-symbols/bug-report';\nimport IconDelete from '~icons/material-symbols/delete-forever-rounded';\nimport IconFrameInspect from '~icons/material-symbols/frame-inspect';\nimport IconRefresh from '~icons/material-symbols/refresh-rounded';\n\nimport App from '@aerogel/core/services/App';\nimport Button from '@aerogel/core/components/ui/Button.vue';\nimport Markdown from '@aerogel/core/components/ui/Markdown.vue';\nimport Storage from '@aerogel/core/services/Storage';\nimport UI from '@aerogel/core/ui/UI';\nimport { translateWithDefault } from '@aerogel/core/lang/utils';\n\nasync function purgeDevice() {\n const confirmed = await UI.confirm(\n translateWithDefault('startupCrash.purgeConfirmTitle', 'Delete everything?'),\n translateWithDefault(\n 'startupCrash.purgeConfirmMessage',\n 'If the problem persists, one drastic solution may be to wipe the storage in this device ' +\n 'to start from scratch. However, keep in mind that **all the data that you haven\\'t ' +\n 'synchronized will be deleted forever**.\\n\\nDo you still want to proceed?',\n ),\n {\n acceptVariant: 'danger',\n acceptText: translateWithDefault('startupCrash.purgeConfirmAccept', 'Purge device'),\n },\n );\n\n if (!confirmed) {\n return;\n }\n\n await Storage.purge();\n await App.reload();\n}\n</script>\n","<template>\n <component :is=\"action.dismiss ? ToastClose : 'button'\" type=\"button\" @click=\"action.click\">\n {{ action.label }}\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport { ToastClose } from 'reka-ui';\n\nimport type { ToastAction as IToastAction } from '@aerogel/core/components/contracts/Toast';\n\ndefineProps<{ action: IToastAction }>();\n</script>\n","<template>\n <ToastRoot>\n <slot>\n <span v-if=\"message\">{{ message }}</span>\n <HeadlessToastAction v-for=\"(action, key) of actions\" :key :action />\n </slot>\n </ToastRoot>\n</template>\n\n<script setup lang=\"ts\">\nimport { ToastRoot } from 'reka-ui';\n\nimport type { ToastProps } from '@aerogel/core/components/contracts/Toast';\n\nimport HeadlessToastAction from './HeadlessToastAction.vue';\n\ndefineProps<ToastProps>();\n</script>\n","<template>\n <HeadlessToast :class=\"renderedClasses\">\n <Markdown v-if=\"message\" :text=\"message\" inline />\n\n <Button\n v-for=\"(action, key) of actions\"\n :key\n :action\n :variant\n :as=\"HeadlessToastAction\"\n />\n </HeadlessToast>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { HTMLAttributes } from 'vue';\n\nimport Button from '@aerogel/core/components/ui/Button.vue';\nimport Markdown from '@aerogel/core/components/ui/Markdown.vue';\nimport HeadlessToast from '@aerogel/core/components/headless/HeadlessToast.vue';\nimport HeadlessToastAction from '@aerogel/core/components/headless/HeadlessToastAction.vue';\nimport { variantClasses } from '@aerogel/core/utils/classes';\nimport type { ToastExpose, ToastProps } from '@aerogel/core/components/contracts/Toast';\nimport type { Variants } from '@aerogel/core/utils/classes';\n\nconst { class: baseClasses, variant = 'secondary' } = defineProps<ToastProps & { class?: HTMLAttributes['class'] }>();\nconst renderedClasses = computed(() =>\n variantClasses<Variants<Pick<ToastProps, 'variant'>>>(\n { baseClasses, variant },\n {\n baseClasses: 'flex items-center gap-2 rounded-md p-2 ring-1 shadow-lg border-gray-200',\n variants: {\n variant: {\n secondary: 'bg-gray-900 text-white ring-black',\n danger: 'bg-red-50 text-red-900 ring-red-100',\n warning: 'bg-yellow-50 text-yellow-900 ring-yellow-100',\n },\n },\n defaultVariants: {\n variant: 'secondary',\n },\n },\n ));\n\ndefineExpose<ToastExpose>();\n</script>\n","import AlertModal from '@aerogel/core/components/ui/AlertModal.vue';\nimport ConfirmModal from '@aerogel/core/components/ui/ConfirmModal.vue';\nimport ErrorReportModal from '@aerogel/core/components/ui/ErrorReportModal.vue';\nimport LoadingModal from '@aerogel/core/components/ui/LoadingModal.vue';\nimport PromptModal from '@aerogel/core/components/ui/PromptModal.vue';\nimport StartupCrash from '@aerogel/core/components/ui/StartupCrash.vue';\nimport Toast from '@aerogel/core/components/ui/Toast.vue';\nimport { bootServices } from '@aerogel/core/services';\nimport { definePlugin } from '@aerogel/core/plugins';\n\nimport UI from './UI';\nimport type { UIComponents } from './UI';\nimport type { Component } from 'vue';\n\nconst services = { $ui: UI };\n\nexport * from './modals';\nexport * from './UI';\nexport * from './utils';\nexport { default as UI } from './UI';\n\nexport type UIServices = typeof services;\n\nexport default definePlugin({\n async install(app, options) {\n const components: Partial<Record<keyof UIComponents, Component>> = {\n 'alert-modal': AlertModal,\n 'confirm-modal': ConfirmModal,\n 'error-report-modal': ErrorReportModal,\n 'loading-modal': LoadingModal,\n 'prompt-modal': PromptModal,\n 'startup-crash': StartupCrash,\n 'toast': Toast,\n ...options.components,\n };\n\n for (const [name, component] of Object.entries(components)) {\n UI.registerComponent(name as keyof UIComponents, component as UIComponents[keyof UIComponents]);\n }\n\n await bootServices(app, services);\n },\n});\n\ndeclare module '@aerogel/core/bootstrap/options' {\n export interface AerogelOptions {\n components?: Partial<Partial<UIComponents>>;\n }\n}\n\ndeclare module '@aerogel/core/services' {\n export interface Services extends UIServices {}\n}\n","import { registerFormValidationRule } from '@aerogel/core/forms/validation';\nimport { definePlugin } from '@aerogel/core/plugins';\n\nexport * from './FormController';\nexport * from './utils';\nexport * from './validation';\nexport { default as FormController } from './FormController';\n\nexport default definePlugin({\n async install(_, { formValidationRules }) {\n for (const [rule, validator] of Object.entries(formValidationRules ?? {})) {\n registerFormValidationRule(rule, validator);\n }\n },\n});\n","import { createApp } from 'vue';\nimport { isDevelopment } from '@noeldemartin/utils';\nimport type { App as AppInstance, Component } from 'vue';\n\nimport App from '@aerogel/core/services/App';\nimport directives from '@aerogel/core/directives';\nimport errors from '@aerogel/core/errors';\nimport Events from '@aerogel/core/services/Events';\nimport lang from '@aerogel/core/lang';\nimport services from '@aerogel/core/services';\nimport testing from '@aerogel/core/testing';\nimport ui from '@aerogel/core/ui';\nimport forms from '@aerogel/core/forms';\nimport { installPlugins } from '@aerogel/core/plugins';\nimport type { AerogelOptions } from '@aerogel/core/bootstrap/options';\n\nexport type { AerogelOptions };\n\nexport async function bootstrapApplication(app: AppInstance, options: AerogelOptions = {}): Promise<void> {\n const plugins = [testing, directives, errors, lang, services, ui, forms, ...(options.plugins ?? [])];\n\n App.instance = app;\n\n await installPlugins(plugins, app, options);\n await options.install?.(app);\n await Events.emit('application-ready');\n}\n\nexport async function bootstrap(rootComponent: Component, options: AerogelOptions = {}): Promise<void> {\n const app = createApp(rootComponent);\n\n if (isDevelopment()) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (window as any).$aerogel = app;\n }\n\n await bootstrapApplication(app, options);\n\n app.mount('#app');\n app._container?.classList.remove('loading');\n\n await Events.emit('application-mounted');\n}\n\ndeclare module '@aerogel/core/services/Events' {\n export interface EventsPayload {\n 'application-ready': void;\n 'application-mounted': void;\n }\n}\n","<template>\n <ToastProvider>\n <component\n :is=\"toast.component\"\n v-for=\"toast of $ui.toasts\"\n :id=\"toast.id\"\n :key=\"toast.id\"\n v-bind=\"toast.properties\"\n />\n <ToastViewport class=\"fixed right-0 bottom-0 z-50 flex flex-col items-end space-y-4 px-4 py-6 sm:p-6\" />\n </ToastProvider>\n</template>\n\n<script setup lang=\"ts\">\nimport { ToastProvider, ToastViewport } from 'reka-ui';\n</script>\n","<template>\n <ModalsPortal nested />\n <AppToasts />\n</template>\n\n<script setup lang=\"ts\">\nimport { ModalsPortal } from '@aerogel/core/ui/modals';\n\nimport AppToasts from './AppToasts.vue';\n</script>\n","<template>\n <div class=\"text-primary-text flex min-h-full flex-col text-base leading-tight font-normal antialiased\">\n <slot v-if=\"$errors.hasStartupErrors\" name=\"startup-crash\">\n <component :is=\"$ui.requireComponent('startup-crash')\" />\n </slot>\n <slot v-else />\n\n <AppOverlays />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport AppOverlays from './AppOverlays.vue';\n</script>\n","<template>\n <textarea\n :id=\"input.id\"\n ref=\"$textAreaRef\"\n :name\n :value\n :required=\"input.required ?? undefined\"\n :aria-invalid=\"input.errors ? 'true' : 'false'\"\n :aria-describedby=\"\n input.errors ? `${input.id}-error` : input.description ? `${input.id}-description` : undefined\n \"\n @input=\"update\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, useTemplateRef } from 'vue';\n\nimport { onFormFocus } from '@aerogel/core/utils/composition/forms';\nimport { injectReactiveOrFail } from '@aerogel/core/utils/vue';\nimport type { InputExpose } from '@aerogel/core/components/contracts/Input';\n\nconst $textArea = useTemplateRef('$textAreaRef');\nconst input = injectReactiveOrFail<InputExpose>(\n 'input',\n '<HeadlessInputTextArea> must be a child of a <HeadlessInput>',\n);\nconst name = computed(() => input.name ?? undefined);\nconst value = computed(() => input.value as string);\n\nfunction update() {\n if (!$textArea.value) {\n return;\n }\n\n input.update($textArea.value.value);\n}\n\nonFormFocus(input, () => $textArea.value?.focus());\n</script>\n","<template>\n <details class=\"group\">\n <summary :class=\"renderedSummaryClasses\">\n <IconCheveronRight class=\"size-6 transition-transform group-open:rotate-90\" />\n <slot name=\"label\">\n <span>{{ label ?? $td('ui.details', 'Details') }}</span>\n </slot>\n </summary>\n\n <div :class=\"renderedContentClasses\">\n <slot />\n </div>\n </details>\n</template>\n\n<script setup lang=\"ts\">\nimport IconCheveronRight from '~icons/zondicons/cheveron-right';\nimport { classes } from '@aerogel/core/utils';\nimport { type HTMLAttributes, computed } from 'vue';\n\nconst {\n label = undefined,\n contentClass,\n summaryClass,\n} = defineProps<{ label?: string; contentClass?: HTMLAttributes['class']; summaryClass?: HTMLAttributes['class'] }>();\nconst renderedContentClasses = computed(() => classes('pt-2 pl-4', contentClass));\nconst renderedSummaryClasses = computed(() =>\n classes(\n '-ml-2 flex w-[max-content] items-center rounded-lg py-2 pr-3 pl-1 max-w-full',\n 'hover:bg-gray-100 focus-visible:outline focus-visible:outline-gray-700',\n summaryClass,\n ));\n</script>\n","<template>\n <Details :label=\"$td('ui.advancedOptions', 'Advanced options')\">\n <slot />\n </Details>\n</template>\n\n<script setup lang=\"ts\">\nimport Details from './Details.vue';\n</script>\n","<template>\n <HeadlessInput\n ref=\"$inputRef\"\n :class=\"renderedClasses\"\n v-bind=\"props\"\n @update:model-value=\"$emit('update:modelValue', $event)\"\n >\n <div class=\"flex h-6 items-center\">\n <HeadlessInputInput v-bind=\"inputAttrs\" type=\"checkbox\" :class=\"renderedInputClasses\" />\n </div>\n <div v-if=\"$slots.default\" :class=\"renderedLabelClasses\">\n <HeadlessInputLabel class=\"text-gray-900\">\n <slot />\n </HeadlessInputLabel>\n <HeadlessInputError class=\"text-red-600\" />\n </div>\n <div v-else-if=\"label\" :class=\"renderedLabelClasses\">\n <HeadlessInputLabel class=\"text-gray-900\" />\n <HeadlessInputError class=\"text-red-600\" />\n </div>\n </HeadlessInput>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, useTemplateRef } from 'vue';\nimport type { HTMLAttributes } from 'vue';\n\nimport HeadlessInput from '@aerogel/core/components/headless/HeadlessInput.vue';\nimport HeadlessInputError from '@aerogel/core/components/headless/HeadlessInputError.vue';\nimport HeadlessInputInput from '@aerogel/core/components/headless/HeadlessInputInput.vue';\nimport HeadlessInputLabel from '@aerogel/core/components/headless/HeadlessInputLabel.vue';\nimport { classes } from '@aerogel/core/utils/classes';\nimport { useInputAttrs } from '@aerogel/core/utils/composition/forms';\nimport type { InputEmits, InputProps } from '@aerogel/core/components/contracts/Input';\n\ndefineOptions({ inheritAttrs: false });\ndefineEmits<InputEmits>();\n\nconst { inputClass, labelClass, ...props } = defineProps<\n InputProps & { inputClass?: HTMLAttributes['class']; labelClass?: HTMLAttributes['class'] }\n>();\n\nconst $input = useTemplateRef('$inputRef');\nconst [inputAttrs, rootClasses] = useInputAttrs();\nconst renderedClasses = computed(() => classes('relative flex items-start', rootClasses.value));\nconst renderedInputClasses = computed(() =>\n classes(\n 'size-4 rounded text-primary-600 not-checked:hover:bg-gray-200 checked:hover:text-primary-500 checked:border-0',\n {\n 'border-gray-300 focus:ring-primary-600': !$input.value?.errors,\n 'border-red-400 border-2 focus:ring-red-600': $input.value?.errors,\n },\n inputClass,\n ));\nconst renderedLabelClasses = computed(() => classes('ml-2 text-sm leading-6', labelClass));\n</script>\n","<template>\n <slot />\n</template>\n\n<script setup lang=\"ts\">\nimport { provide } from 'vue';\n\nconst { name, value } = defineProps<{ name: string; value: unknown }>();\n\nprovide(name, value);\n</script>\n","<template>\n <ComboboxItem v-bind=\"$props\" class=\"group p-1 outline-none\" @select=\"onSelect($event)\">\n <div\n class=\"relative flex max-w-[calc(100vw-2rem)] cursor-pointer items-center gap-2 truncate rounded-md px-2 py-1 text-sm select-none *:truncate group-data-[highlighted]:bg-gray-100 group-data-[state=checked]:font-semibold group-data-[state=unchecked]:opacity-50\"\n >\n <slot>\n {{ renderedLabel }}\n </slot>\n </div>\n </ComboboxItem>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { ComboboxItem, injectComboboxRootContext } from 'reka-ui';\nimport { toString } from '@noeldemartin/utils';\nimport type { ComboboxItemProps, SelectItemSelectEvent } from 'reka-ui';\n\nimport { injectReactiveOrFail } from '@aerogel/core/utils';\nimport type { ComboboxContext } from '@aerogel/core/components/contracts/Combobox';\nimport type { SelectExpose } from '@aerogel/core/components/contracts/Select';\n\nconst emit = defineEmits<{ select: [] }>();\n\nconst { value } = defineProps<ComboboxItemProps>();\nconst select = injectReactiveOrFail<SelectExpose>('select', '<ComboboxOption> must be a child of a <Combobox>');\nconst rootContext = injectComboboxRootContext();\nconst combobox = injectReactiveOrFail<ComboboxContext>('combobox');\nconst renderedLabel = computed(() => {\n const itemOption = select.options?.find((option) => option.value === value);\n\n return itemOption ? select.renderOption(itemOption.value) : toString(value);\n});\n\nfunction onSelect(event: SelectItemSelectEvent<unknown>) {\n if (rootContext.multiple.value || rootContext.disabled.value) {\n return;\n }\n\n event.preventDefault();\n combobox.preventChange = true;\n rootContext.modelValue.value = value;\n\n emit('select');\n}\n</script>\n","<template>\n <ComboboxPortal>\n <ComboboxContent\n position=\"popper\"\n :align=\"select.align\"\n :side=\"select.side\"\n :side-offset=\"4\"\n :class=\"renderedClasses\"\n >\n <ComboboxViewport>\n <ComboboxEmpty class=\"group p-1 outline-none\">\n <div\n class=\"relative flex max-w-[calc(100vw-2rem)] items-center gap-2 truncate rounded-md px-2 py-1 text-sm select-none *:truncate\"\n >\n {{ $td('ui.comboboxEmpty', 'No options found') }}\n </div>\n </ComboboxEmpty>\n\n <ComboboxGroup ref=\"$group\">\n <ComboboxOption\n v-if=\"showInputOption\"\n :value=\"newInputValue?.(combobox.input) ?? (combobox.input as AcceptableValue)\"\n @select=\"$emit('select')\"\n >\n {{ combobox.input }}\n </ComboboxOption>\n <ComboboxOption\n v-for=\"option in filteredOptions\"\n :key=\"option.key\"\n :value=\"option.value\"\n @select=\"$emit('select')\"\n />\n </ComboboxGroup>\n </ComboboxViewport>\n </ComboboxContent>\n </ComboboxPortal>\n</template>\n\n<script setup lang=\"ts\">\nimport { ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxPortal, ComboboxViewport, useFilter } from 'reka-ui';\nimport { computed, useTemplateRef, watch } from 'vue';\nimport type { Nullable } from '@noeldemartin/utils';\nimport type { AcceptableValue } from 'reka-ui';\n\nimport { classes, injectReactiveOrFail } from '@aerogel/core/utils';\nimport type { FormFieldValue } from '@aerogel/core/forms';\nimport type { SelectExpose } from '@aerogel/core/components/contracts/Select';\nimport type { ComboboxContext } from '@aerogel/core/components/contracts/Combobox';\n\nimport ComboboxOption from './ComboboxOption.vue';\n\ndefineEmits<{ select: [] }>();\n\nconst { newInputValue } = defineProps<{ newInputValue?: (value: string) => Nullable<FormFieldValue> }>();\nconst { contains } = useFilter({ sensitivity: 'base' });\nconst select = injectReactiveOrFail<SelectExpose>('select', '<ComboboxOptions> must be a child of a <Combobox>');\nconst combobox = injectReactiveOrFail<ComboboxContext>('combobox');\nconst $group = useTemplateRef('$group');\nconst filteredOptions = computed(\n () => select.options?.filter((option) => contains(option.label, combobox.input)) ?? [],\n);\nconst showInputOption = computed(\n () => combobox.input && !filteredOptions.value.some((option) => option.label === combobox.input),\n);\nconst renderedClasses = classes(\n 'max-h-(--reka-combobox-content-available-height) min-w-(--reka-combobox-trigger-width)',\n 'z-50 overflow-auto rounded-lg bg-white text-base shadow-lg ring-1 ring-black/5 focus:outline-hidden',\n);\n\nwatch($group, () => (combobox.$group = $group.value?.$el ?? null));\n</script>\n","<template>\n <ComboboxAnchor class=\"relative\">\n <ComboboxInput\n :id=\"select.id\"\n v-model=\"combobox.input\"\n :placeholder=\"select.placeholder\"\n :class=\"renderedRootClasses\"\n :display-value=\"select.renderOption\"\n :name=\"select.name\"\n @focus=\"$emit('focus')\"\n @blur=\"onBlur()\"\n @keydown.esc=\"$emit('blur')\"\n />\n <div v-if=\"select?.errors\" class=\"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3\">\n <IconExclamationSolid class=\"size-5 text-red-500\" />\n </div>\n </ComboboxAnchor>\n</template>\n\n<script setup lang=\"ts\">\nimport IconExclamationSolid from '~icons/zondicons/exclamation-solid';\n\nimport { ComboboxAnchor, ComboboxInput } from 'reka-ui';\nimport { computed, watch } from 'vue';\n\nimport { classes, injectReactiveOrFail } from '@aerogel/core/utils';\nimport type { SelectExpose } from '@aerogel/core/components/contracts/Select';\nimport type { ComboboxContext } from '@aerogel/core/components/contracts/Combobox';\n\nconst emit = defineEmits<{ focus: []; change: []; blur: [] }>();\nconst select = injectReactiveOrFail<SelectExpose>('select', '<ComboboxTrigger> must be a child of a <Combobox>');\nconst combobox = injectReactiveOrFail<ComboboxContext>('combobox');\nconst renderedRootClasses = computed(() =>\n classes(\n // eslint-disable-next-line vue/max-len\n 'block w-full rounded-md border-0 py-1.5 ring-1 ring-inset focus:ring-2 focus:ring-inset sm:text-sm sm:leading-6',\n {\n 'mt-1': select.label,\n 'focus:ring-primary-600': !select.errors,\n 'text-gray-900 shadow-2xs ring-gray-900/10 placeholder:text-gray-400': !select.errors,\n 'pr-10 text-red-900 ring-red-900/10 placeholder:text-red-300 focus:ring-red-500': select.errors,\n },\n ));\n\nfunction onBlur() {\n const elements = Array.from(document.querySelectorAll(':hover'));\n\n if (elements.some((element) => combobox.$group?.contains(element))) {\n return;\n }\n\n emit('blur');\n}\n\nwatch(\n () => combobox.input,\n () => {\n if (combobox.preventChange) {\n combobox.preventChange = false;\n\n return;\n }\n\n emit('change');\n },\n);\n</script>\n","<template>\n <Label\n v-if=\"show\"\n :for=\"select.id\"\n :class=\"renderedClasses\"\n v-bind=\"$props\"\n >\n <slot>\n {{ select.label }}\n </slot>\n </Label>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, useSlots } from 'vue';\nimport { Label } from 'reka-ui';\nimport type { LabelProps } from 'reka-ui';\n\nimport { classes } from '@aerogel/core/utils';\nimport { injectReactiveOrFail } from '@aerogel/core/utils/vue';\nimport type { SelectExpose } from '@aerogel/core/components/contracts/Select';\n\ndefineProps<Omit<LabelProps, 'for'>>();\n\nconst select = injectReactiveOrFail<SelectExpose>('select', '<ComboboxLabel> must be a child of a <Combobox>');\nconst slots = useSlots();\nconst show = computed(() => !!(select.label || slots.default));\nconst renderedClasses = computed(() => classes('block text-sm leading-6 font-medium text-gray-900', select.labelClass));\n</script>\n","<template>\n <ComboboxRoot\n ignore-filter\n :open\n :reset-search-term-on-blur=\"false\"\n :reset-search-term-on-select=\"false\"\n :model-value=\"acceptableValue\"\n :by=\"compareOptions\"\n @update:model-value=\"update($event)\"\n >\n <Provide name=\"combobox\" :value=\"combobox\">\n <ComboboxLabel />\n <ComboboxTrigger @focus=\"open = true\" @change=\"open = true\" @blur=\"open = false\" />\n <HeadlessSelectError class=\"mt-2 text-sm text-red-600\" />\n <ComboboxOptions :new-input-value @select=\"open = false\" />\n </Provide>\n </ComboboxRoot>\n</template>\n\n<script setup lang=\"ts\" generic=\"T extends Nullable<FormFieldValue>\">\nimport { ComboboxRoot } from 'reka-ui';\nimport { computed, ref, watch } from 'vue';\nimport type { AcceptableValue } from 'reka-ui';\nimport type { Nullable } from '@noeldemartin/utils';\n\nimport Provide from '@aerogel/core/components/vue/Provide.vue';\nimport { useSelect } from '@aerogel/core/components/contracts/Select';\nimport type { AcceptRefs } from '@aerogel/core/utils';\nimport type { ComboboxContext } from '@aerogel/core/components/contracts/Combobox';\nimport type { SelectEmits, SelectProps } from '@aerogel/core/components/contracts/Select';\nimport type { FormFieldValue } from '@aerogel/core/forms';\n\nimport ComboboxOptions from './ComboboxOptions.vue';\nimport ComboboxTrigger from './ComboboxTrigger.vue';\nimport ComboboxLabel from './ComboboxLabel.vue';\nimport HeadlessSelectError from '../headless/HeadlessSelectError.vue';\n\nconst emit = defineEmits<SelectEmits<T>>();\nconst {\n as = 'div',\n compareOptions = (a, b) => a === b,\n newInputValue,\n ...props\n} = defineProps<SelectProps<T> & { newInputValue?: (value: string) => T }>();\nconst {\n expose,\n acceptableValue,\n update: baseUpdate,\n renderOption,\n} = useSelect(\n computed(() => ({ as, compareOptions, ...props })),\n emit,\n);\nconst open = ref(false);\nconst optionsByLabel = computed(() =>\n Object.fromEntries(expose.options.value?.map((option) => [option.label, option.value]) ?? []));\nconst combobox = {\n input: ref(acceptableValue.value ? renderOption(acceptableValue.value as T) : ''),\n preventChange: ref(false),\n $group: ref(null),\n} satisfies AcceptRefs<ComboboxContext>;\n\nfunction update(value: AcceptableValue) {\n combobox.input.value = renderOption(value as T);\n\n baseUpdate(value);\n}\n\nwatch(expose.value, (value) => {\n const newOptionLabel = renderOption(value as T);\n\n if (combobox.input.value === newOptionLabel) {\n return;\n }\n\n combobox.preventChange.value = true;\n combobox.input.value = newOptionLabel;\n});\n\nwatch(combobox.input, (value) => {\n const newInputOption = newInputValue ? (newInputValue(value) as AcceptableValue) : value;\n const newInputOptionLabel = renderOption(newInputOption as T);\n\n if (newInputOptionLabel in optionsByLabel.value) {\n update(optionsByLabel.value[newInputOptionLabel] as AcceptableValue);\n\n return;\n }\n\n update(newInputOption);\n});\n\ndefineExpose(expose);\n</script>\n","<template>\n <DropdownMenuItem :class=\"renderedClasses\" v-bind=\"props\" @select=\"$emit('select')\">\n <slot />\n </DropdownMenuItem>\n</template>\n\n<script setup lang=\"ts\">\nimport { classes } from '@aerogel/core/utils';\nimport { computed } from 'vue';\nimport { DropdownMenuItem } from 'reka-ui';\nimport type { HTMLAttributes } from 'vue';\nimport type { PrimitiveProps } from 'reka-ui';\n\ndefineEmits<{ select: [] }>();\n\nconst { class: rootClass, ...props } = defineProps<{ class?: HTMLAttributes['class'] } & PrimitiveProps>();\nconst renderedClasses = computed(() =>\n classes(\n 'flex w-full items-center gap-2 rounded-lg px-2 py-2 text-sm text-gray-900 data-[highlighted]:bg-gray-100',\n rootClass,\n ));\n</script>\n","<template>\n <DropdownMenuContent\n class=\"gap-y-0.5 rounded-lg bg-white p-1.5 shadow-lg ring-1 ring-black/5\"\n :align=\"dropdownMenu.align\"\n :side=\"dropdownMenu.side\"\n >\n <slot>\n <DropdownMenuOption\n v-for=\"(option, key) in dropdownMenu.options\"\n :key\n :as=\"option.route || option.href ? HeadlessButton : undefined\"\n :class=\"option.class\"\n v-bind=\"\n option.route || option.href\n ? {\n href: option.href,\n route: option.route,\n routeParams: option.routeParams,\n routeQuery: option.routeQuery,\n }\n : {}\n \"\n @select=\"option.click?.()\"\n >\n {{ option.label }}\n </DropdownMenuOption>\n </slot>\n </DropdownMenuContent>\n</template>\n\n<script setup lang=\"ts\">\nimport { DropdownMenuContent } from 'reka-ui';\n\nimport { injectReactiveOrFail } from '@aerogel/core/utils';\nimport type { DropdownMenuExpose } from '@aerogel/core/components/contracts/DropdownMenu';\n\nimport DropdownMenuOption from './DropdownMenuOption.vue';\nimport HeadlessButton from '../headless/HeadlessButton.vue';\n\nconst dropdownMenu = injectReactiveOrFail<DropdownMenuExpose>(\n 'dropdown-menu',\n '<DropdownMenuOptions> must be a child of a <DropdownMenu>',\n);\n</script>\n","<template>\n <DropdownMenuRoot>\n <DropdownMenuTrigger>\n <slot />\n </DropdownMenuTrigger>\n <DropdownMenuPortal>\n <slot name=\"options\">\n <DropdownMenuOptions />\n </slot>\n </DropdownMenuPortal>\n </DropdownMenuRoot>\n</template>\n\n<script setup lang=\"ts\">\nimport { DropdownMenuPortal, DropdownMenuRoot, DropdownMenuTrigger } from 'reka-ui';\nimport { computed, provide } from 'vue';\nimport type { AcceptRefs } from '@aerogel/core/utils';\n\nimport type { DropdownMenuExpose, DropdownMenuProps } from '@aerogel/core/components/contracts/DropdownMenu';\n\nimport DropdownMenuOptions from './DropdownMenuOptions.vue';\n\nconst { align, side, options } = defineProps<DropdownMenuProps>();\nconst expose = {\n align,\n side,\n options: computed(() => options?.filter(Boolean)),\n} satisfies AcceptRefs<DropdownMenuExpose>;\n\nprovide('dropdown-menu', expose);\ndefineExpose(expose);\n</script>\n","<template>\n <div class=\"relative\" :class=\"{ 'pointer-events-none!': disabled && !editing }\">\n <div v-if=\"!editing\" :class=\"renderedContentClass\">\n <slot />\n </div>\n <span v-else :class=\"renderedFillerClass\">\n {{ draft }}\n </span>\n <span v-if=\"type === 'number'\" class=\"inline-block transition-[width]\" :class=\"editing ? 'w-5' : 'w-0'\" />\n <form class=\"w-full\" :aria-hidden=\"formAriaHidden\" @submit.prevent=\"$input?.blur()\">\n <input\n ref=\"$inputRef\"\n v-model=\"draft\"\n :tabindex=\"tabindex ?? undefined\"\n :aria-label=\"ariaLabel ?? undefined\"\n :type\n :class=\"[\n renderedInputClass,\n { 'opacity-0': !editing, 'appearance-textfield': !editing && type === 'number' },\n ]\"\n @keyup=\"$emit('update', draft)\"\n @focus=\"startEditing()\"\n @blur=\"stopEditing()\"\n >\n </form>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, useTemplateRef, watchEffect } from 'vue';\nimport type { HTMLAttributes } from 'vue';\n\nimport { classes } from '@aerogel/core/utils/classes';\n\nconst emit = defineEmits<{ update: [value: string | number]; save: [] }>();\nconst {\n type = 'text',\n text,\n contentClass,\n ariaLabel,\n formAriaHidden,\n tabindex,\n disabled,\n} = defineProps<{\n type?: string;\n contentClass?: HTMLAttributes['class'];\n ariaLabel?: string;\n formAriaHidden?: boolean;\n tabindex?: string;\n text: string;\n disabled?: boolean;\n}>();\nconst $input = useTemplateRef('$inputRef');\nconst editing = ref<string | null>(null);\nconst draft = ref(text);\nconst renderedContentClass = computed(() => classes('inline whitespace-pre', contentClass));\nconst renderedFillerClass = computed(() => classes('invisible whitespace-pre', contentClass));\nconst renderedInputClass = computed(() =>\n classes('absolute inset-0 h-full w-full resize-none border-0 bg-transparent p-0 focus:ring-0', contentClass));\n\nfunction startEditing() {\n editing.value = text;\n}\n\nfunction stopEditing() {\n if (!editing.value) {\n return;\n }\n\n if (type !== 'number' && draft.value.trim().length === 0) {\n draft.value = editing.value;\n\n emit('update', draft.value);\n }\n\n editing.value = null;\n\n emit('save');\n}\n\nwatchEffect(() => (draft.value = text));\n</script>\n","<template>\n <Modal :title=\"$td('errors.report', 'Errors ({count})', { count: $errors.logs.length })\">\n <ol>\n <li\n v-for=\"(log, index) of $errors.logs\"\n :key=\"index\"\n class=\"mb-2 flex max-w-prose min-w-56 justify-between py-2 last:mb-0\"\n >\n <div>\n <h3 class=\"font-medium\">\n {{ log.report.title }}\n </h3>\n <time :datetime=\"log.date.toISOString()\" class=\"text-xs text-gray-700\">\n {{ log.date.toLocaleTimeString() }}\n </time>\n <Markdown\n class=\"text-sm text-gray-500\"\n :text=\"log.report.description ?? getErrorMessage(log.report)\"\n />\n </div>\n <Button\n size=\"icon\"\n variant=\"ghost\"\n :aria-label=\"$td('errors.viewDetails', 'View details')\"\n :title=\"$td('errors.viewDetails', 'View details')\"\n class=\"self-center\"\n @click=\"\n $errors.inspect(\n log.report,\n $errors.logs.map(({ report }) => report)\n )\n \"\n >\n <IconViewShow class=\"size-4\" aria-hidden=\"true\" />\n </Button>\n </li>\n </ol>\n </Modal>\n</template>\n\n<script setup lang=\"ts\">\nimport IconViewShow from '~icons/zondicons/view-show';\n\nimport Button from '@aerogel/core/components/ui/Button.vue';\nimport Modal from '@aerogel/core/components/ui/Modal.vue';\nimport Markdown from '@aerogel/core/components/ui/Markdown.vue';\nimport { getErrorMessage } from '@aerogel/core/errors';\n</script>\n","<template>\n <Button\n v-if=\"$errors.logs.length > 0\"\n size=\"icon\"\n variant=\"ghost\"\n :title=\"$td('errors.viewLogs', 'View error logs')\"\n :aria-label=\"$td('errors.viewLogs', 'View error logs')\"\n @click=\"$ui.modal(ErrorLogsModal)\"\n >\n <IconWarning class=\"size-6 text-red-500\" />\n </Button>\n</template>\n\n<script setup lang=\"ts\">\nimport IconWarning from '~icons/ion/warning';\n\nimport Button from '@aerogel/core/components/ui/Button.vue';\nimport ErrorLogsModal from '@aerogel/core/components/ui/ErrorLogsModal.vue';\n</script>\n","<template>\n <Markdown :text=\"message\" inline />\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\nimport { getErrorMessage } from '@aerogel/core/errors/utils';\nimport type { ErrorSource } from '@aerogel/core/errors/Errors.state';\n\nimport Markdown from '@aerogel/core/components/ui/Markdown.vue';\n\nconst { error } = defineProps<{ error: ErrorSource }>();\nconst message = computed(() => getErrorMessage(error));\n</script>\n","<template>\n <Button variant=\"link\" v-bind=\"$props\">\n <slot />\n </Button>\n</template>\n\n<script setup lang=\"ts\">\nimport Button from '@aerogel/core/components/ui/Button.vue';\nimport type { ButtonProps } from '@aerogel/core/components/contracts/Button';\n\ndefineProps<Omit<ButtonProps, 'variant'>>();\n</script>\n","<template>\n <Modal :title=\"$td('settings.title', 'Settings')\" :fullscreen-on-mobile=\"$app.settingsFullscreenOnMobile\">\n <component :is=\"setting.component\" v-for=\"(setting, key) in settings\" :key />\n </Modal>\n</template>\n\n<script setup lang=\"ts\">\nimport { arraySorted } from '@noeldemartin/utils';\nimport { computed } from 'vue';\n\nimport App from '@aerogel/core/services/App';\nimport Modal from '@aerogel/core/components/ui/Modal.vue';\n\nconst settings = computed(() => arraySorted(App.settings, 'priority', 'desc'));\n</script>\n","<template>\n <HeadlessInput\n ref=\"$inputRef\"\n :label=\"label\"\n :class=\"rootClasses\"\n v-bind=\"props\"\n @update:model-value=\"$emit('update:modelValue', $event)\"\n >\n <HeadlessInputLabel class=\"block text-sm leading-6 font-medium text-gray-900\" />\n <div :class=\"renderedWrapperClasses\">\n <HeadlessInputTextArea v-bind=\"inputAttrs\" :class=\"renderedInputClasses\" />\n <div v-if=\"$input?.errors\" class=\"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3\">\n <IconExclamationSolid class=\"size-5 text-red-500\" />\n </div>\n </div>\n <HeadlessInputDescription class=\"mt-2 text-sm text-gray-600\" />\n <HeadlessInputError class=\"mt-2 text-sm text-red-600\" />\n </HeadlessInput>\n</template>\n\n<script setup lang=\"ts\">\nimport IconExclamationSolid from '~icons/zondicons/exclamation-solid';\n\nimport { computed, useTemplateRef } from 'vue';\nimport type { HTMLAttributes } from 'vue';\n\nimport HeadlessInput from '@aerogel/core/components/headless/HeadlessInput.vue';\nimport HeadlessInputLabel from '@aerogel/core/components/headless/HeadlessInputLabel.vue';\nimport HeadlessInputTextArea from '@aerogel/core/components/headless/HeadlessInputTextArea.vue';\nimport HeadlessInputDescription from '@aerogel/core/components/headless/HeadlessInputDescription.vue';\nimport HeadlessInputError from '@aerogel/core/components/headless/HeadlessInputError.vue';\nimport { classes } from '@aerogel/core/utils/classes';\nimport { useInputAttrs } from '@aerogel/core/utils/composition/forms';\nimport type { InputEmits, InputProps } from '@aerogel/core/components/contracts/Input';\n\ndefineOptions({ inheritAttrs: false });\ndefineEmits<InputEmits>();\nconst { label, inputClass, wrapperClass, ...props } = defineProps<\n InputProps & { inputClass?: HTMLAttributes['class']; wrapperClass?: HTMLAttributes['class'] }\n>();\nconst $input = useTemplateRef('$inputRef');\nconst [inputAttrs, rootClasses] = useInputAttrs();\nconst renderedWrapperClasses = computed(() =>\n classes('relative rounded-md shadow-2xs', { 'mt-1': label }, wrapperClass));\nconst renderedInputClasses = computed(() =>\n classes(\n // eslint-disable-next-line vue/max-len\n 'block w-full rounded-md border-0 py-1.5 ring-1 ring-inset focus:ring-2 focus:ring-inset sm:text-sm sm:leading-6',\n {\n 'focus:ring-primary-600': !$input.value?.errors,\n 'text-gray-900 shadow-2xs ring-gray-900/10 placeholder:text-gray-400': !$input.value?.errors,\n 'pr-10 text-red-900 ring-red-900/10 placeholder:text-red-300 focus:ring-red-500': $input.value?.errors,\n },\n inputClass,\n ));\n</script>\n","import { ListenersManager, PromisedValue, round, tap, toError } from '@noeldemartin/utils';\nimport type { Listeners } from '@noeldemartin/utils';\n\nimport JobCancelledError from '@aerogel/core/errors/JobCancelledError';\n\nimport type { JobListener } from './listeners';\nimport type { JobStatus } from './status';\n\nexport default abstract class Job<\n Listener extends JobListener = JobListener,\n Status extends JobStatus = JobStatus,\n SerializedStatus extends JobStatus = JobStatus,\n> {\n\n protected status: Status;\n protected _listeners: ListenersManager<JobListener>;\n protected _progress?: number;\n protected _cancelled?: PromisedValue<void>;\n protected _started: PromisedValue<void>;\n protected _completed: PromisedValue<void>;\n\n constructor() {\n this.status = this.getInitialStatus();\n this._listeners = new ListenersManager();\n this._started = new PromisedValue();\n this._completed = new PromisedValue();\n }\n\n public async start(): Promise<void> {\n this.beforeStart();\n this._started.resolve();\n\n try {\n await this.updateProgress();\n await this.run();\n await this.updateProgress();\n\n this._completed.resolve();\n } catch (error) {\n if (error instanceof JobCancelledError) {\n return;\n }\n\n throw tap(toError(error), (realError) => {\n this._completed.reject(realError);\n });\n }\n }\n\n public async cancel(): Promise<void> {\n this._cancelled = new PromisedValue();\n\n await this._cancelled;\n }\n\n public serialize(): SerializedStatus {\n return this.serializeStatus(this.status);\n }\n\n public get listeners(): Listeners<Listener> {\n return this._listeners;\n }\n\n public get progress(): number {\n return this._progress ?? 0;\n }\n\n public get cancelled(): boolean {\n return !!this._cancelled?.isResolved();\n }\n\n public get started(): Promise<void> {\n return this._started;\n }\n\n public get completed(): Promise<void> {\n return this._completed;\n }\n\n protected abstract run(): Promise<void>;\n\n protected getInitialStatus(): Status {\n return { completed: false } as Status;\n }\n\n protected beforeStart(): void {\n if (!this._started.isResolved()) {\n return;\n }\n\n if (this._cancelled) {\n delete this._progress;\n delete this._cancelled;\n\n return;\n }\n\n throw new Error('Job already started!');\n }\n\n protected assertNotCancelled(): void {\n if (!this._cancelled) {\n return;\n }\n\n this._cancelled.resolve();\n\n throw new JobCancelledError();\n }\n\n protected calculateCurrentProgress(status?: JobStatus): number {\n status ??= this.status;\n\n if (status.completed) {\n return 1;\n }\n\n if (!status.children || status.children.length === 0) {\n return 0;\n }\n\n return round(\n status.children.reduce((total, child) => total + this.calculateCurrentProgress(child), 0) /\n status.children.length,\n 2,\n );\n }\n\n protected async updateProgress(update?: (status: Status) => unknown): Promise<void> {\n await update?.(this.status);\n\n const progress = this.calculateCurrentProgress();\n\n if (progress === this._progress) {\n return;\n }\n\n this._progress = progress;\n\n await this._listeners.emit('onUpdated', progress);\n }\n\n protected serializeStatus(status: Status): SerializedStatus {\n return { ...status } as unknown as SerializedStatus;\n }\n\n}\n","import Job from './Job';\n\nexport { Job };\nexport * from './Job';\nexport * from './listeners';\nexport * from './status';\n\nexport async function dispatch(job: Job): Promise<void> {\n await job.start();\n}\n"],"names":["ServiceBootError","JSError","serviceNamespace","cause","appNamespace","Aerogel","stringToSlug","_store","initializePiniaStore","resetPiniaStore","tap","createPinia","store","setActivePinia","getPiniaStore","defineServiceStore","name","options","defineStore","defineServiceState","_a","Service","state","key","value","__publicField","MagicObject","getters","PromisedValue","property","handleError","error","Storage","stateOrProperty","update","old","objectOnly","keyOrKeys","keys","arrayFrom","isEmpty","persisted","watcher","storage","objectDeepClone","fail","EventListenerPriorities","EventsService","event","listener","payload","listeners","priority","optionsOrListener","handler","onceListener","off","args","priorities","arrayRemove","handlers","_b","a","b","_c","Events","facade","defineSettings","settings","Service$3","getEnv","AppService","setting","markRaw","fullscreenOnMobile","callback","queryParameters","updateLocationQueryParameters","forever","App","definePlugin","plugin","installPlugins","plugins","pluginsMap","renderVNodeAttrs","node","attrs","toString","defineDirective","directive","injectReactive","inject","reactive","injectReactiveOrFail","errorMessage","injectOrFail","renderVNode","Comment","Text","Static","resizeObservers","measure","element","modifiers","sizes","variantClasses","config","valueBaseClasses","values","configBaseClasses","configs","variants","cva","classes","unref","inputs","twMerge","clsx","useEvent","unsubscribe","onUnmounted","builtInRules","isValidType","definition","validators","registerFormValidationRule","rule","validator","defineFormValidationRules","rules","validateType","validate","errors","__valueType","validForms","FormController","fields","ref","computed","readonly","field","formErrors","valid","input","nextTick","data","initialData","onFormFocus","form","stop","useForm","useInputAttrs","useAttrs","objectWithout","onCleanMounted","operation","cleanUp","noop","onMounted","persistent","defaults","watch","toRaw","reactiveSet","initial","set","trigger","track","equals","hasEqual","item","existingItem","customRef","_track","_trigger","items","computedAsync","getter","result","asyncValue","computedDebounce","optionsOrGetter","inputGetter","inputOptions","debounce","watchEffect","router","makeRenderer","Renderer","renderer","link","defaultLink","renderActionLinks","html","matches","stringMatchAll","action","text","renderRouteLinks","route","url","getMarkdownRouter","setMarkdownRouter","markdownRouter","renderMarkdown","markdown","marked","safeHtml","DOMPurify","MINUTE_MILLISECONDS","getLocalTimezoneOffset","date","aerogelDirectives","directives","app","CacheService","response","cache","instance","Cache","StorageService","replaceExisting","original","replacements","defaultServices","bootServices","services","service","isDevelopment","isTesting","services$3","DefaultLangProvider","locale","fallbackLocale","_","defaultMessage","Service$2","LangService","provider","parameters","locales","Lang","translate","translateWithDefault","registerErrorHandler","getErrorMessage","isObject","instances","useModal","injectModal","close","remove","modal","useModalBase","after","MOBILE_BREAKPOINT","Layouts","getCurrentLayout","Service$1","layout","UIService","component","messageOrTitle","message","getProperties","messageOrOptions","properties","confirmed","checkboxes","checkbox","defaultValue","trim","operationOrMessageOrOptions","processOperation","o","processArgs","delay","props","delayed","operationPromise","createModal","showModal","closeModal","otherOptions","toast","uuid","componentProps","modals","id","splash","UI","logs","startupErrors","ErrorsService","errorOrReports","_reports","report","reports","startupError","log","objectWithoutEmpty","Errors","__props","_openBlock","_createBlock","_unref","_mergeProps","asChild","disabled","_renderSlot","_ctx","_createPropsRestProxy","renderedClasses","HeadlessButton","hasSelectOptionLabel","option","useSelect","emit","renderOption","evaluate","computedValue","modelValue","acceptableValue","computedOptions","expose","provide","select","$slots","SelectValue","SelectTrigger","_createVNode","HeadlessSelectValue","SelectIcon","renderedLabel","itemOption","$props","SelectItemText","SelectPortal","SelectContent","SelectViewport","innerClass","_createElementBlock","_Fragment","_renderList","HeadlessSelectOption","__emit","__expose","SelectRoot","compareOptions","_cache","$event","_withCtx","open","_resolveDynamicComponent","as","_normalizeProps","_guardReactiveProps","$attrs","HeadlessSelectTrigger","HeadlessSelectOptions","slots","useSlots","show","_createTextVNode","_toDisplayString","HeadlessSelectLabel","renderedOuterClasses","renderedInnerClasses","_createElementVNode","SelectOption","$td","IconCheveronDown","_hoisted_1","IconExclamationSolid","forwardRef","useForwardExpose","HeadlessSelect","$emit","SelectLabel","HeadlessSelectError","SelectOptions","browserLocale","renderLocale","Select","$lang","Markdown","Button","settings$1","Language","lang","_useSlots","renderedHtml","root","h","onClick","target","isInstanceOf","renderedRootClass","_normalizeClass","titleId","title","_hoisted_2","description","label","labelClass","inputClass","SwitchThumb","thumbClass","HeadlessSwitch","Setting","Switch","$errors","Debug","JobCancelledError","frameworkHandler","setUpErrorHandler","baseHandler","errorHandler","__","___","testing","$content","DialogRoot","DialogPortal","child","$modalContentRef","useTemplateRef","DialogContent","ModalComponent","renderedModals","$modal","currentRef","visible","inForeground","firstVisibleModal","hasRenderedModals","contentProps","renderedContentClass","renderFullscreen","renderedWrapperClass","HeadlessModal","HeadlessModalOverlay","HeadlessModalContent","closeHidden","IconClose","HeadlessModalTitle","titleHidden","descriptionHidden","HeadlessModalDescription","useAlertModal","renderedTitle","Modal","offSubmit","onCleanup","useConfirmModal","renderedAcceptText","renderedCancelText","Form","actions","_vModelCheckbox","_hoisted_4","_hoisted_5","acceptVariant","required","cancelVariant","summary","githubReportUrl","issueTitle","issueBody","stringExcerpt","buttons","IconCopy","IconConsole","reportButtons","IconGitHub","button","useErrorReportModal","activeReportIndex","activeReport","details","previousReportText","nextReportText","_hoisted_3","ErrorReportModalTitle","IconCheveronLeft","IconCheveronRight","ErrorReportModalButtons","cleanup","jobProgress","filledClasses","overflowClasses","renderedProgress","overflowWidthPercentage","useLoadingModal","renderedMessage","showProgress","ProgressBar","progress","job","IconSpinner","$input","renderedType","fieldType","checked","getValue","roundedValue","inputAttrs","rootClasses","renderedWrapperClasses","renderedDescriptionClasses","renderedErrorClasses","renderedInputClasses","HeadlessInput","HeadlessInputLabel","HeadlessInputInput","HeadlessInputDescription","HeadlessInputError","booleanInput","dateInput","enumInput","requiredBooleanInput","requiredDateInput","requiredEnumInput","requiredNumberInput","requiredObjectInput","requiredStringInput","numberInput","objectInput","stringInput","usePromptModal","Input","placeholder","purgeDevice","_component_i_majesticons_exclamation","$app","IconRefresh","IconBug","IconDelete","IconFrameInspect","ToastClose","ToastRoot","HeadlessToastAction","HeadlessToast","variant","ui","components","AlertModal","ConfirmModal","ErrorReportModal","LoadingModal","PromptModal","StartupCrash","Toast","forms","formValidationRules","bootstrapApplication","bootstrap","rootComponent","createApp","ToastProvider","$ui","ToastViewport","ModalsPortal","AppToasts","AppOverlays","$textArea","renderedContentClasses","renderedSummaryClasses","Details","renderedLabelClasses","rootContext","injectComboboxRootContext","combobox","onSelect","ComboboxItem","contains","useFilter","$group","filteredOptions","showInputOption","ComboboxPortal","ComboboxContent","ComboboxViewport","ComboboxEmpty","ComboboxGroup","ComboboxOption","newInputValue","renderedRootClasses","onBlur","ComboboxAnchor","ComboboxInput","baseUpdate","optionsByLabel","newOptionLabel","newInputOption","newInputOptionLabel","ComboboxRoot","Provide","ComboboxLabel","ComboboxTrigger","ComboboxOptions","dropdownMenu","DropdownMenuContent","DropdownMenuOption","DropdownMenuRoot","DropdownMenuTrigger","DropdownMenuPortal","DropdownMenuOptions","editing","draft","renderedFillerClass","renderedInputClass","startEditing","stopEditing","type","formAriaHidden","_withModifiers","tabindex","ariaLabel","index","IconViewShow","ErrorLogsModal","IconWarning","arraySorted","HeadlessInputTextArea","Job","ListenersManager","toError","realError","status","round","total","dispatch"],"mappings":";;;;;;;;;;;;;;;AAEA,MAAqBA,WAAyBC,GAAQ;AAAA,EAElD,YAAYC,GAA0BC,GAAgB;AAClD,UAAM,YAAYD,CAAgB,oBAAoB,EAAE,OAAAC,GAAO;AAAA,EACnE;AAEJ;ACJO,SAASC,KAAuB;AACnC,SAAOC,EAAQ,aAAaC,GAAaD,EAAQ,IAAI;AACzD;ACFA,IAAIE,KAAuB;AAE3B,SAASC,KAA8B;AACnC,SAAOD,MAAUE,GAAA;AACrB;AAEO,SAASA,KAAyB;AACrC,SAAOC,GAAIC,MAAe,CAACC,MAAU;AACjC,IAAAL,KAASK,GAETC,GAAeD,CAAK;AAAA,EACxB,CAAC;AACL;AAEO,SAASE,KAAuB;AACnC,SAAOP,MAAUC,GAAA;AACrB;AAEO,SAASO,GACZC,GACAC,GACkB;AAClB,SAAAT,GAAA,GAEOU,GAAYF,GAAMC,CAAO,EAAA;AACpC;ACWO,SAASE,GAIdF,GAQyD;;AACvD,SAAOG,IAAA,cAAcC,GAAqD;AAAA,IAInD,YAAqB;AACpC,aAAO;AAAA,IACX;AAAA,IAEmB,UAAyB;AACxC,aAAOJ,EAAQ,QAAQ;AAAA,IAC3B;AAAA,IAEmB,kBAAgC;AAC/C,aAAI,OAAOA,EAAQ,gBAAiB,aACzBA,EAAQ,aAAA,IAGZ,OAAO,QAAQA,EAAQ,YAAY,EAAE,OAAO,CAACK,GAAO,CAACC,GAAKC,CAAK,MAAM;AACxE,YAAI;AACA,UAAAA,IAAQ,gBAAgBA,CAAK;AAAA,QACjC,QAAgB;AAEZ,kBAAQ;AAAA,YACJ,oBAAoBD,CAAG,gBAAgB,KAAK,SAAS;AAAA;AAAA,UAAA;AAAA,QAK7D;AAEA,eAAAD,EAAMC,CAAkB,IAAIC,GAErBF;AAAA,MACX,GAAG,CAAA,CAAkB;AAAA,IACzB;AAAA,IAEmB,6BAAmF;AAClG,aAAQL,EAAQ,YAAY,CAAA;AAAA,IAChC;AAAA,IAEmB,mBAAyD;AACxE,aAAQA,EAAQ,SAAS,CAAA;AAAA,IAC7B;AAAA,IAEmB,wBAAwBK,GAAuC;;AAC9E,eAAOF,IAAAH,EAAQ,cAAR,gBAAAG,EAAA,KAAAH,GAAoBK,OAAWA;AAAA,IAC1C;AAAA,IAEmB,0BAA0BA,GAAuC;;AAChF,eAAOF,IAAAH,EAAQ,YAAR,gBAAAG,EAAA,KAAAH,GAAkBK,OAAWA;AAAA,IACxC;AAAA,EAAA,GAhDAG,EAFGL,GAEoB,WAAWH,EAAQ,WAAwB,CAAA,IAF/DG;AAqDX;;UAEAA,KAAA,cAIUM,GAAY;AAAA,EAUlB,cAAc;AACV,UAAA;AAPM,IAAAD,EAAA;AACF,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AAKJ,UAAME,IAAU,KAAK,2BAAA;AAErB,SAAK,QAAQ,KAAK,QAAA,KAAa,WAAW,MAC1C,KAAK,UAAU,IAAIC,EAAA,GACnB,KAAK,qBAAqB,IAAI,IAAI,OAAO,KAAKD,CAAO,CAAC,GACtD,KAAK,YAAY,KAAK,iBAAA,GACtB,KAAK,SACD,KAAK,UAAA,KACLZ,GAAmB,KAAK,OAAO;AAAA,MAC3B,OAAO,MAAM,KAAK,gBAAA;AAAA;AAAA,MAGlB,SAAAY;AAAA,IAAA,CACH;AAAA,EACT;AAAA,EAEA,IAAW,SAA8B;AACrC,WAAO,KAAK;AAAA,EAChB;AAAA,EAIgB,OAAoDE,GAAwB;AACxF,WAAO,MAAM,OAAaA,CAAa;AAAA,EAC3C;AAAA,EAEO,SAAwB;AAC3B,UAAMC,IAAc,CAACC,MAAmB,KAAK,QAAQ,OAAO,IAAI/B,GAAiB,KAAK,OAAO+B,CAAK,CAAC;AAEnG,QAAI;AACA,WAAK,gBACA,KAAK,MAAM,KAAK,MAAM,EACtB,KAAK,MAAM,KAAK,QAAQ,QAAA,CAAS,EACjC,MAAMD,CAAW;AAAA,IAC1B,SAASC,GAAO;AACZ,MAAAD,EAAYC,CAAK;AAAA,IACrB;AAEA,WAAO,KAAK;AAAA,EAChB;AAAA,EAEO,oBAA6B;AAChC,WAAOC,EAAQ,IAAI,KAAK,UAAU;AAAA,EACtC;AAAA,EAEO,SAAgCH,GAAsB;AACzD,WAAK,KAAK,SAIHA,KAAY,KAAK,OAAO,UAAU,KAAK,mBAAmB,IAAIA,CAAQ,IAHlE;AAAA,EAIf;AAAA,EAIO,SAAgCA,GAAgC;AAEnE,UAAMjB,IAAQ,KAAK;AAEnB,WAAIiB,IACOjB,IAAQA,EAAMiB,CAAQ,IAAK,SAG/BjB,KAAiB,CAAA;AAAA,EAC5B;AAAA,EAIO,SAAgCqB,GAAqCT,GAAwB;AAChG,QAAI,CAAC,KAAK;AACN;AAGJ,UAAMU,IAAS,OAAOD,KAAoB,WAAW,EAAE,CAACA,CAAe,GAAGT,EAAA,IAAUS,GAC9EE,IAAMC,GAAW,KAAK,OAAO,QAAiB,OAAO,KAAKF,CAAM,CAAC;AAEvE,WAAO,OAAO,KAAK,OAAO,QAAQA,CAAM,GACxC,KAAK,eAAeA,GAA0BC,CAAqB;AAAA,EACvE;AAAA,EAIO,qBAA4CE,GAA0B;AACzE,QAAI,CAAC,KAAK;AACN;AAGJ,UAAMC,IAAOC,GAAUF,CAAS,GAC1Bf,IAAQc,GAAW,KAAK,OAAO,QAAiBE,CAAI;AAE1D,IAAIE,GAAQlB,CAAK,KAIjB,KAAK,yBAAyBA,CAAK;AAAA,EACvC;AAAA,EAEmB,MAAMO,GAA2B;AAChD,WAAI,KAAK,SAASA,CAAQ,IACf,KAAK,SAASA,CAAQ,IAG1B,MAAM,MAAMA,CAAQ;AAAA,EAC/B;AAAA,EAEmB,MAAMA,GAAkBL,GAAsB;AAC7D,SAAK,SAAS,EAAE,CAACK,CAAQ,GAAGL,GAAyB;AAAA,EACzD;AAAA,EAEA,IAAc,aAAqB;AAC/B,WAAO,GAAGpB,GAAA,CAAc,IAAI,KAAK,KAAK;AAAA,EAC1C;AAAA,EAEU,eAAe8B,GAAwBC,GAA2B;AACxE,UAAMM,IAAYL,GAAWF,GAAQ,KAAK,OAAO,SAAS,CAAC;AAE3D,IAAKM,GAAQC,CAAS,KAClB,KAAK,yBAAyBA,CAA2B;AAG7D,eAAWZ,KAAYK,GAAQ;AAC3B,YAAMQ,IAAU,KAAK,UAAUb,CAAQ;AAEvC,MAAI,CAACa,KAAWR,EAAOL,CAAQ,MAAMM,EAAIN,CAAQ,KAIjDa,EAAQ,KAAK,MAAMR,EAAOL,CAAQ,GAAGM,EAAIN,CAAQ,CAAC;AAAA,IACtD;AAAA,EACJ;AAAA,EAEU,yBAAyBY,GAAiC;AAChE,UAAME,IAAUX,EAAQ,IAAoB,KAAK,UAAU;AAE3D,IAAKW,KAILX,EAAQ,IAAI,KAAK,YAAY;AAAA,MACzB,GAAGW;AAAA,MACH,GAAG,KAAK,wBAAwBC,GAAgBH,CAAS,CAAmB;AAAA,IAAA,CAC/E;AAAA,EACL;AAAA,EAEU,YAAqB;AAC3B,WAAO;AAAA,EACX;AAAA,EAEU,UAAyB;AAC/B,WAAO;AAAA,EACX;AAAA,EAEU,kBAAyB;AAC/B,WAAO,CAAA;AAAA,EACX;AAAA,EAEU,6BAA4E;AAClF,WAAO,CAAA;AAAA,EACX;AAAA,EAEU,mBAAkD;AACxD,WAAO,CAAA;AAAA,EACX;AAAA,EAEU,wBAAwBnB,GAAuC;AACrE,WAAOA;AAAA,EACX;AAAA,EAEU,0BAA0BA,GAAuC;AACvE,WAAOA;AAAA,EACX;AAAA,EAEA,MAAgB,gBAA+B;AAC3C,SAAK,sBAAA;AAAA,EACT;AAAA,EAEA,MAAgB,OAAsB;AAAA,EAEtC;AAAA,EAEU,wBAA8B;AACpC,QAAI,GAAC,KAAK,eAAekB,GAAQ,KAAK,OAAO,SAAS,CAAC,IAIvD;AAAA,UAAIR,EAAQ,IAAI,KAAK,UAAU,GAAG;AAC9B,cAAMS,IAAYT,EAAQ,QAAwB,KAAK,UAAU;AACjE,aAAK,SAAS,KAAK,0BAA0BS,CAAS,CAAC;AAEvD;AAAA,MACJ;AAEAT,MAAAA,EAAQ,IAAI,KAAK,YAAYI,GAAW,KAAK,SAAA,GAAY,KAAK,OAAO,SAAS,CAAC,CAAC;AAAA;AAAA,EACpF;AAAA,EAEU,eAAwD;AAC9D,WAAK,KAAK,SAIH,KAAK,SAHDS,EAAK,mBAAmB,KAAK,KAAK,SAAS;AAAA,EAI1D;AAEJ,GAtNIpB,EANJL,IAMkB,WAAoB,CAAA,IANtCA;ACvFO,MAAM0B,KAA0B;AAAA,EACnC,KAAK;AAAA,EACL,SAAS;AAAA,EACT,MAAM;AACV;AAIO,MAAMC,WAAsB1B,GAAQ;AAAA,EAApC;AAAA;AAEK,IAAAI,EAAA,mBAAiG,CAAA;AAAA;AAAA,EAEzG,MAAyB,OAAsB;AAC3C,WAAO,QAAQ,WAAW,qBAAqB,CAAA,CAAE,EAAE,QAAQ,CAAC,CAACuB,GAAOC,CAAQ;AAAA;AAAA,MAExE,KAAK,GAAGD,GAAcC,CAAyB;AAAA,KAAC;AAAA,EACxD;AAAA,EAIA,MAAa,KAAKD,GAAeE,GAAkC;;AAC/D,UAAMC,IAAY,KAAK,UAAUH,CAAK,KAAK,EAAE,YAAY,CAAA,GAAI,UAAU,GAAC;AAExE,eAAWI,KAAYD,EAAU;AAC7B,YAAM,QAAQ,MAAI/B,IAAA+B,EAAU,SAASC,CAAQ,MAA3B,gBAAAhC,EAA8B,IAAI,CAAC6B,MAAaA,EAASC,CAAO,OAAM,CAAA,CAAE;AAAA,EAElG;AAAA;AAAA;AAAA,EAWO,GACHF,GACAK,GACAJ,GACU;AACV,UAAMhC,IACF,OAAOoC,KAAsB,aACvB,CAAA,IACA,OAAOA,KAAsB,WACzB,EAAE,UAAUA,EAAA,IACZA,GACRC,IAAU,OAAOD,KAAsB,aAAaA,IAAqBJ;AAE/E,gBAAK,iBAAiBD,GAAO/B,GAASqC,CAAO,GAEtC,MAAM,KAAK,IAAIN,GAAOM,CAAO;AAAA,EACxC;AAAA;AAAA;AAAA,EASO,KACHN,GACAK,GACAJ,GACU;AACV,QAAIM,IAAqC;AACzC,UAAMtC,IAAU,OAAOoC,KAAsB,aAAa,CAAA,IAAKA,GACzDC,IAAU,OAAOD,KAAsB,aAAaA,IAAqBJ;AAE/E,WAAOvC;AAAA,MACH,MAAM6C,KAAgB,KAAK,IAAIP,GAAOO,CAAY;AAAA,MAClD,CAACC,MAAQ;AACL,QAAAD,IAAe,IAAIE,OACfD,EAAA,GAEOF,EAAQ,GAAGG,CAAI,IAG1B,KAAK,iBAAiBT,GAAO/B,GAASqC,CAAO;AAAA,MACjD;AAAA,IAAA;AAAA,EAER;AAAA,EAEO,IAAIN,GAAeC,GAA+B;;AACrD,UAAME,IAAY,KAAK,UAAUH,CAAK;AAEtC,QAAI,CAACG;AACD;AAGJ,UAAMO,IAAa,CAAC,GAAGP,EAAU,UAAU;AAE3C,eAAWC,KAAYM;AACnB,MAAAC,GAAYR,EAAU,SAASC,CAAQ,KAAK,CAAA,GAAIH,CAAQ,KAEpD7B,IAAA+B,EAAU,SAASC,CAAQ,MAA3B,gBAAAhC,EAA8B,YAAW,MACzC,OAAO+B,EAAU,SAASC,CAAQ,GAClCO,GAAYR,EAAU,YAAYC,CAAQ;AAIlD,IAAID,EAAU,WAAW,WAAW,KAChC,OAAO,KAAK,UAAUH,CAAK;AAAA,EAEnC;AAAA,EAEU,iBAAiBA,GAAe/B,GAAwCqC,GAA8B;;AAC5G,UAAMF,IAAWnC,EAAQ,YAAY;AAErC,IAAM+B,KAAS,KAAK,cAChB,KAAK,UAAUA,CAAK,IAAI,EAAE,YAAY,CAAA,GAAI,UAAU,GAAC;AAGzD,UAAMU,MACFtC,IAAA,KAAK,UAAU4B,CAAK,MAApB,gBAAA5B,EAAuB,eAAcyB,EAAe,iCAAiCG,CAAK,GAAG,GAC3FY,MACFC,IAAA,KAAK,UAAUb,CAAK,MAApB,gBAAAa,EAAuB,aACvBhB,EAAsC,+BAA+BG,CAAK,GAAG;AAEjF,IAAKU,EAAW,SAASN,CAAQ,MAC7BM,EAAW,KAAKN,CAAQ,GACxBM,EAAW,KAAK,CAACI,GAAGC,MAAMA,IAAID,CAAC,GAC/BF,EAASR,CAAQ,IAAI,CAAA,KAGzBY,IAAAJ,EAASR,CAAQ,MAAjB,QAAAY,EAAoB,KAAKV;AAAA,EAC7B;AAEJ;AAEA,MAAAW,IAAeC,GAAOnB,EAAa;AC5I5B,SAASoB,GAAuCC,GAAgB;AACnE,SAAOA;AACX;AAEA,MAAAC,KAAelD,GAAmB;AAAA,EAC9B,MAAM;AAAA,EACN,cAAc;AAAA,IACV,SAAS,CAAA;AAAA,IACT,UAAU;AAAA,IACV,aAAamD,QAAY;AAAA,IACzB,SAASjE,EAAQ;AAAA,IACjB,WAAWA,EAAQ;AAAA,IACnB,UAAU,CAAA;AAAA,IACV,4BAA4B;AAAA,EAAA;AAAA,EAEhC,UAAU;AAAA,IACN,aAAa,CAACiB,MAAUA,EAAM,gBAAgB;AAAA,IAC9C,SAAS,CAACA,MAAUA,EAAM,gBAAgB;AAAA,IAC1C,SAAS,CAACA,MAAUA,EAAM,gBAAgB,UAAUA,EAAM,gBAAgB;AAAA,IAC1E,YAAYA,GAAe;AACvB,aAAI,KAAK,cACE,SAASjB,EAAQ,WAAW,WAAW,UAAU,GAAG,CAAC,IAG5D,KAAK,UACE,aAAaA,EAAQ,WAAW,WAAW,UAAU,GAAG,CAAC,IAG7D,IAAIiB,EAAM,OAAO;AAAA,IAC5B;AAAA,IACA,WAAWA,GAAe;AACtB,aACIA,EAAM,aACL,KAAK,eAAe,KAAK,UAAU,SAASjB,EAAQ,UAAU,KAAK,iBAAiB,KAAK,WAAW;AAAA,IAE7G;AAAA,EAAA;AAER,CAAC;ACpCM,MAAMkE,WAAmBlD,GAAQ;AAAA,EAAjC;AAAA;AAEa,IAAAI,EAAA,cAAOpB,EAAQ;AACf,IAAAoB,EAAA,eAAQ,IAAIG,EAAA;AACZ,IAAAH,EAAA,iBAAU,IAAIG,EAAA;AAAA;AAAA,EAEvB,UAAmB;AACtB,WAAO,KAAK,MAAM,WAAA;AAAA,EACtB;AAAA,EAEO,YAAqB;AACxB,WAAO,KAAK,QAAQ,WAAA;AAAA,EACxB;AAAA,EAEO,WAAW4C,GAA2B;AACzC,SAAK,SAAS,KAAKC,EAAQD,CAAO,CAAC;AAAA,EACvC;AAAA,EAEO,8BAA8BE,GAAmC;AACpE,SAAK,6BAA6BA;AAAA,EACtC;AAAA,EAEA,MAAa,UAAaC,GAA+B;AAGrD,WAFe,MAAM,KAAK,MAAM,KAAKA,CAAQ;AAAA,EAGjD;AAAA,EAEA,MAAa,OAAOC,GAAqE;AACrF,IAAAA,KAAmBC,GAA8BD,CAAe,GAEhE,SAAS,OAAA,GAGT,MAAME,GAAA;AAAA,EACV;AAAA,EAEO,OAAkC9D,GAAwB;AAC7D,WAAQ,KAAK,QAAQA,CAAI,KAAW;AAAA,EACxC;AAAA,EAEO,QAAkCA,GAA6B;;AAClE,aAAOI,IAAA,KAAK,aAAL,gBAAAA,EAAe,OAAO,iBAAiBJ,OAAS;AAAA,EAC3D;AAAA,EAEA,MAAyB,OAAsB;AAC3C,IAAAiD,EAAO,KAAK,qBAAqB,MAAM,KAAK,MAAM,SAAS,GAC3DA,EAAO,KAAK,uBAAuB,MAAM,KAAK,QAAQ,SAAS;AAAA,EACnE;AAEJ;AAEA,MAAAc,IAAeb,GAAOK,EAAU;AC5DzB,SAASS,GAA+BC,GAAc;AACzD,SAAOA;AACX;AAEA,eAAsBC,GAAeC,MAAsB1B,GAAoD;AAC3G,EAAAsB,EAAI;AAAA,IACA;AAAA,IACAI,EAAQ;AAAA,MACJ,CAACC,GAAYH,OACLA,EAAO,SACPG,EAAWH,EAAO,IAAI,IAAIA,IAGvBG;AAAA,MAEX,CAAA;AAAA,IAAC;AAAA,EACL,GAGJ,MAAM,QAAQ,IAAID,EAAQ,IAAI,CAACF,MAAWA,EAAO,QAAQ,GAAGxB,CAAI,CAAC,KAAK,CAAA,CAAE;AAC5E;AClBA,SAAS4B,GAAiBC,GAAqB;AAC3C,SAAO,OAAO,QAAQA,EAAK,SAAS,CAAA,CAAE,EAAE,OAAO,CAACC,GAAO,CAACvE,GAAMQ,CAAK,MACxD+D,IAAQ,GAAGvE,CAAI,KAAKwE,EAAShE,CAAK,CAAC,KAC3C,EAAE;AACT;AAGO,SAASiE,GAEZC,GAEkC;AAClC,SAAOA;AACX;AAEO,SAASC,GAAiCpE,GAAgE;AAC7G,QAAMC,IAAQoE,GAAOrE,CAAG;AAExB,SAAOC,IAAQqE,GAAYrE,CAAK,IAAI;AACxC;AAEO,SAASsE,EACZvE,GACAwE,GACmB;AACnB,SAAOJ,GAAepE,CAAG,KAAKsB,EAAKkD,KAAgB,sBAAsBP,EAASjE,CAAG,CAAC,iBAAiB;AAC3G;AAEO,SAASyE,GAAgBzE,GAA+BwE,GAA0B;AACrF,SAAOH,GAAOrE,CAAG,KAAKsB,EAAKkD,KAAgB,sBAAsBP,EAASjE,CAAG,CAAC,iBAAiB;AACnG;AAEO,SAAS0E,GAAYX,GAA8B;AACtD,SAAI,OAAOA,KAAS,WACTA,IAGPA,EAAK,SAASY,KACP,KAGPZ,EAAK,SAASa,MAAQb,EAAK,SAASc,KAC7Bd,EAAK,WAGZA,EAAK,SAAS,OACP;AAAA;AAAA,IAGJ,IAAIA,EAAK,IAAI,IAAID,GAAiBC,CAAI,CAAC,IAAI,MAAM,KAAKA,EAAK,QAAiC,EAC9F,IAAIW,EAAW,EACf,KAAK,EAAE,CAAC,KAAKX,EAAK,IAAI;AAC/B;ACzDA,MAAMe,yBAA4D,QAAA,GAkBlEC,KAAiF;AAAA,EAC7E,QAAQC,GAAsB,EAAE,OAAA/E,GAAO,WAAAgF,KAAa;AAChD,UAAMvD,IAAW,OAAOzB,KAAU,aAAcA,IAAqC,MAC/EU,IAAS,MAAM;AACjB,YAAMuE,IAAQF,EAAQ,sBAAA;AAEtB,MAAIC,EAAU,QACVD,EAAQ,MAAM,YAAY,WAAW,GAAGE,EAAM,KAAK,IAAI,GACvDF,EAAQ,MAAM,YAAY,YAAY,GAAGE,EAAM,MAAM,IAAI,IAG7DxD,KAAA,QAAAA,EAAW,EAAE,OAAOwD,EAAM,OAAO,QAAQA,EAAM;IACnD;AAEA,IAAID,EAAU,SACVH,GAAgB,IAAIE,GAAS7F,GAAI,IAAI,eAAewB,CAAM,CAAC,EAAE,QAAQqE,CAAO,CAAC,GAGjFrE,EAAA;AAAA,EACJ;AAAA,EACA,UAAUqE,GAAS;;AACf,KAAAnF,IAAAiF,GAAgB,IAAIE,CAAO,MAA3B,QAAAnF,EAA8B,UAAUmF,IACxCF,GAAgB,OAAOE,CAAO;AAAA,EAClC;AACJ;ACnBO,SAASG,GACZlF,GACAmF,GACM;AACN,QAAM,EAAE,aAAaC,GAAkB,GAAGC,MAAWrF,GAC/C,EAAE,aAAasF,GAAmB,GAAGC,MAAYJ,GACjDK,IAAWC,GAAIH,GAAmBC,CAAuB;AAE/D,SAAOG,EAAQF,EAASH,CAAqB,GAAGM,EAAMP,CAAgB,CAAC;AAC3E;AAEO,SAASM,KAAWE,GAA8B;AACrD,SAAOC,GAAQC,GAAKF,CAAM,CAAC;AAC/B;ACvBO,SAASG,GAASvE,GAAeC,GAA+B;AAEnE,QAAMuE,IAAcvD,EAAO,GAAGjB,GAAcC,CAAQ;AAEpD,EAAAwE,GAAY,MAAMD,GAAa;AACnC;ACjBA,MAAME,KAAmD;AAAA,EACrD,UAAU,CAAClG,MAAWA,IAAQ,SAAY;AAC9C;AAEA,SAASmG,GAAYnG,GAAgBoG,GAA0C;;AAC3E,MAA2BpG,KAAU;AACjC,WAAO;AAGX,UAAQoG,EAAW,MAAA;AAAA,IACf,KAAK;AACD,aAAO,OAAOpG,KAAU;AAAA,IAC5B,KAAK;AACD,aAAO,CAAC,GAACJ,IAAAwG,EAAW,WAAX,QAAAxG,EAAmB,SAASI;AAAA,IACzC,KAAK;AACD,aAAO,OAAOA,KAAU;AAAA,IAC5B,KAAK;AACD,aAAO,OAAOA,KAAU;AAAA,IAC5B,KAAK;AACD,aAAOA,aAAiB;AAAA,IAC5B,KAAK;AACD,aAAO,OAAOA,KAAU;AAAA,EAAA;AAEpC;AAIO,MAAMqG,KAAiD,EAAE,GAAGH,GAAA;AAE5D,SAASI,GAA8BC,GAAcC,GAAwC;AAChG,EAAAH,GAAWE,CAAI,IAAIC;AACvB;AAEO,SAASC,GAAwEC,GAAa;AACjG,SAAOA;AACX;AAEO,SAASC,GAAa3G,GAAgBoG,GAA2C;AACpF,SAAID,GAAYnG,GAAOoG,CAAU,IACtB,CAAA,IAGJ,CAAC,eAAe;AAC3B;AAEO,SAASQ,GAAS5G,GAAgBuG,GAAwB;;AAC7D,QAAMM,KAASjH,IAAAyG,GAAWE,OAAX,gBAAA3G,EAAA,KAAAyG,IAAmBrG;AAElC,SAAO6G,IAAS9F,GAAU8F,CAAM,IAAI,CAAA;AACxC;AC/CO,MAAMC,KAA6B,OAAA,GA+CpCC,yBAAgE,QAAA;AAKtE,MAAqBC,WAAmF9G,GAAY;AAAA,EAUhH,YAAY+G,GAAgB;AACxB,UAAA;AATG,IAAAhH,EAAA;AAEC,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA,oBAA6E,CAAA;AAKjF,SAAK,UAAUgH,GACf,KAAK,aAAaC,EAAI,EAAK,GAC3B,KAAK,QAAQ,KAAK,eAAeD,CAAM,GACvC,KAAK,UAAU,KAAK,iBAAiBA,CAAM,GAE3CF,GAAW;AAAA,MACP;AAAA,MACAI,EAAS,MAAM,CAAC,OAAO,OAAO,KAAK,OAAO,EAAE,KAAK,CAAC5G,MAAUA,MAAU,IAAI,CAAC;AAAA,IAAA,GAG/E,KAAK,SAAS6G,GAAS,KAAK,OAAO;AAAA,EACvC;AAAA,EAEA,IAAW,QAAiB;;AACxB,WAAO,CAAC,GAACxH,IAAAmH,GAAW,IAAI,IAAI,MAAnB,QAAAnH,EAAsB;AAAA,EACnC;AAAA,EAEA,IAAW,YAAqB;AAC5B,WAAO,KAAK,WAAW;AAAA,EAC3B;AAAA,EAEO,cAAsCyH,GAAUrH,GAAkC;AAGrF,IAFA,KAAK,MAAMqH,CAAK,IAAIrH,GAEf,KAAK,WAAW,SAIrB,KAAK,SAAA;AAAA,EACT;AAAA,EAEO,cAAsCqH,GAAgD;AACzF,WAAO,KAAK,MAAMA,CAAK;AAAA,EAC3B;AAAA,EAEO,cAAsCA,GAAoB;;AAC7D,aAAOzH,IAAA,KAAK,QAAQyH,CAAK,MAAlB,gBAAAzH,EAAqB,UAAS,CAAA;AAAA,EACzC;AAAA,EAEO,eAAuCyH,GAAUR,GAA+B;AACnF,SAAK,QAAQQ,CAAK,IAAIR;AAAA,EAC1B;AAAA,EAEO,aAAqCQ,GAAgC;;AACxE,aAAOzH,IAAA,KAAK,QAAQyH,CAAK,MAAlB,gBAAAzH,EAAqB,SAAQ;AAAA,EACxC;AAAA,EAEO,OAAyB;AAC5B,WAAO,EAAE,GAAG,KAAK,MAAA;AAAA,EACrB;AAAA,EAEO,WAAoB;AACvB,UAAMiH,IAAS,OAAO,QAAQ,KAAK,OAAO,EAAE;AAAA,MACxC,CAACS,GAAY,CAAC9H,GAAM4G,CAAU,OAC1BkB,EAAW9H,CAAI,IAAI,KAAK,eAAeA,GAAM4G,CAAU,GAEhDkB;AAAA,MAEX,CAAA;AAAA,IAAC;AAGL,gBAAK,YAAYT,CAAM,GAEhB,KAAK;AAAA,EAChB;AAAA,EAEO,MAAMpH,IAAwD,IAAU;AAC3E,SAAK,WAAW,QAAQ,IAExBA,EAAQ,YAAY,KAAK,UAAA,GACzBA,EAAQ,cAAc,KAAK,YAAA;AAAA,EAC/B;AAAA,EAEO,SAAkB;;AACrB,SAAK,WAAW,QAAQ;AAExB,eAAW,CAAC4H,GAAOrH,CAAK,KAAK,OAAO,QAAQ,KAAK,KAAK,GAAG;AACrD,YAAMoG,IAAa,KAAK,QAAQiB,CAAK,KAAKhG,EAAA;AAE1C,MAAI,OAAOrB,KAAU,YAAY,EAAEoG,EAAW,QAAQ,QAItD,KAAK,MAAMiB,CAAqB,IAAIrH,EAAM,KAAA;AAAA,IAC9C;AAEA,UAAMuH,IAAQ,KAAK,SAAA;AAEnB,WAAAA,OAAS3H,IAAA,KAAK,WAAW,WAAhB,QAAAA,EAA2B,QAAQ,CAAC6B,MAAaA,OAEnD8F;AAAA,EACX;AAAA,EAIO,GAAG/F,GAA2BC,GAA8D;;AAC/F,YAAA7B,IAAA,KAAK,YAAL4B,OAAA5B,EAAA4B,KAA2B,CAAA,KAG3Ba,IAAA,KAAK,WAAWb,CAAK,MAArB,QAAAa,EAAwB,KAAKZ,IAGtB,MAAM,KAAK,IAAID,GAAcC,CAAQ;AAAA,EAChD;AAAA,EAIO,IAAID,GAA2BC,GAAwD;AAC1F,IAAAU,GAAY,KAAK,WAAWX,CAAK,KAAK,CAAA,GAAIC,CAAQ;AAAA,EACtD;AAAA,EAEA,MAAa,MAAM+F,GAA8B;;AAC7C,UAAMC,GAAA,IAEN7H,IAAA,KAAK,WAAW,UAAhB,QAAAA,EAA0B,QAAQ,CAAC6B,MAAaA,EAAS+F,CAAK;AAAA,EAClE;AAAA,EAEmB,MAAMnH,GAA2B;AAChD,WAAMA,KAAY,KAAK,UAIhB,KAAK,cAAcA,CAAQ,IAHvB,MAAM,MAAMA,CAAQ;AAAA,EAInC;AAAA,EAEmB,MAAMA,GAAkBL,GAAsB;AAC7D,QAAI,EAAEK,KAAY,KAAK,UAAU;AAC7B,YAAM,MAAMA,GAAUL,CAAK;AAE3B;AAAA,IACJ;AAEA,SAAK,cAAcK,GAAUL,CAAiC;AAAA,EAClE;AAAA,EAEQ,eAAeR,GAAoB4G,GAAkD;AACzF,UAAMS,IAAS,CAAA,GACT7G,IAAQ,KAAK,MAAMR,CAAI,GACvBkH,IAAQN,EAAW,SAAS,CAAA;AAElC,IAAAS,EAAO,KAAK,GAAGF,GAAa3G,GAAOoG,CAAU,CAAC;AAE9C,eAAWG,KAAQG;AACf,MAAIH,MAAS,cAAevG,KAAU,QAItC6G,EAAO,KAAK,GAAGD,GAAS5G,GAAOuG,CAAI,CAAC;AAGxC,WAAOM,EAAO,SAAS,IAAIA,IAAS;AAAA,EACxC;AAAA,EAEQ,eAAeI,GAAkC;AACrD,QAAI,KAAK,SAAS;AACd,aAAO,CAAA;AAGX,UAAMS,IAAO,OAAO,QAAQT,CAAM,EAAE,OAAO,CAACU,GAAa,CAACnI,GAAM4G,CAAU,OACtEuB,EAAYnI,CAAoB,IAAK4G,EAAW,WAAW,MAEpDuB,IACR,CAAA,CAAsB;AAEzB,WAAOtD,GAASqD,CAAI;AAAA,EACxB;AAAA,EAEQ,iBAAiBT,GAAoC;AACzD,QAAI,KAAK,SAAS;AACd,aAAO,CAAA;AAGX,UAAMJ,IAAS,OAAO,KAAKI,CAAM,EAAE,OAAO,CAACK,GAAY9H,OACnD8H,EAAW9H,CAAoB,IAAI,MAE5B8H,IACR,CAAA,CAAwB;AAE3B,WAAOjD,GAASwC,CAAM;AAAA,EAC1B;AAAA,EAEQ,YAAkB;AACtB,eAAW,CAACrH,GAAM6H,CAAK,KAAK,OAAO,QAAQ,KAAK,OAAO;AACnD,WAAK,MAAM7H,CAAoB,IAAK6H,EAAM,WAAW;AAAA,EAE7D;AAAA,EAEQ,YAAYR,GAAgD;AAChE,WAAO,KAAK,KAAK,OAAO,EAAE,QAAQ,CAAC9G,MAAQ,OAAO,KAAK,QAAQA,CAAmB,CAAC,GAEnF8G,KAAU,OAAO,OAAO,KAAK,SAASA,CAAM;AAAA,EAChD;AAEJ;AC/PO,SAASe,GAAYJ,GAAmC/F,GAA+B;AAC1F,QAAMoG,IAAOzD,GAA8B,QAAQ,IAAI,GACjD0D,IAAOD,KAAA,gBAAAA,EAAM,GAAG,SAAS,CAACrI,MAASgI,EAAM,SAAShI,KAAQiC;AAEhE,EAAAwE,GAAY,MAAM6B,KAAA,gBAAAA,GAAQ;AAC9B;AAEO,SAASC,GAA8Cd,GAA4C;AACtG,SAAO,IAAID,GAAeC,CAAM;AACpC;AAEO,SAASe,KAA4D;AACxE,QAAMjE,IAAQkE,GAAA,GACRvC,IAAUyB,EAAS,MAAMpD,EAAM,KAAK;AAG1C,SAAO,CAFYoD,EAAS,MAAMe,GAAcnE,GAAO,OAAO,CAAC,GAE3C2B,CAAkC;AAC1D;ACvBO,SAASyC,GAAeC,GAAiC;AAC5D,MAAIC,IAAoBC;AAExB,EAAAC,GAAU,MAAOF,IAAUD,GAAY,GACvCnC,GAAY,MAAMoC,GAAS;AAC/B;ACJO,SAASG,GAA6BhJ,GAAciJ,GAAkC;AACzF,QAAMrJ,IAAQiF,GAAY7D,EAAQ,IAAOhB,CAAI,KAAKiJ,CAAQ;AAE1D,SAAAC,EAAMtJ,GAAO,MAAMoB,EAAQ,IAAIhB,GAAMmJ,GAAMvJ,CAAK,CAAC,CAAC,GAE3CA;AACX;ACNO,SAASwJ,GAAeC,GAAwBpJ,IAAgD,IAAI;AACvG,MAAIqJ,IAAc,IAAI,IAAID,CAAO,GAC7BE,GACAC;AACJ,QAAMC,IAASxJ,KAAA,gBAAAA,EAAS,QAClByJ,IAAWD,IACX,CAACE,MAAYjC,EAAI,MAAM,OAAA,EAAS,KAAK,CAACkC,MAAiBH,EAAOE,GAAMC,CAAY,CAAC,IACjF,MAAM,IACNlC,IAAMmC,GAAU,CAACC,GAAQC,OAC3BP,IAAQM,GACRP,IAAUQ,GAEH;AAAA,IACH,KAAK,MAAMT;AAAA,IACX,KAAK,MAAMzH,EAAK,2CAA2C;AAAA,EAAA,EAElE;AAED,SAAO;AAAA,IACH,SAAS;AACL,aAAA2H,EAAA,GAEO,MAAM,KAAK9B,EAAI,MAAM,QAAQ;AAAA,IACxC;AAAA,IACA,IAAIiC,GAAS;AACT,aAAAH,EAAA,GAEO9B,EAAI,MAAM,IAAIiC,CAAI,KAAKD,EAASC,CAAI;AAAA,IAC/C;AAAA,IACA,IAAIA,GAAS;AAGT,MAFAJ,EAAA,GAEI,CAAAG,EAASC,CAAI,KAIjBjC,EAAI,MAAM,IAAIiC,CAAI;AAAA,IACtB;AAAA,IACA,OAAOA,GAAS;AACZ,MAAAJ,EAAA,GAEA7B,EAAI,MAAM,OAAOiC,CAAI;AAAA,IACzB;AAAA,IACA,QAAQ;AACJ,MAAAJ,EAAA,GAEA7B,EAAI,MAAM,MAAA;AAAA,IACd;AAAA,IACA,MAAMsC,GAAsB;AACxB,MAAAT,EAAA,GAEAD,IAAM,IAAI,IAAIU,CAAK;AAAA,IACvB;AAAA,EAAA;AAER;ACjDO,SAASC,GAAiBC,GAA8C;AAC3E,QAAMC,IAASzC,EAAA,GACT0C,IAAazC,EAASuC,CAAM;AAElC,SAAAhB,EAAMkB,GAAY,YAAaD,EAAO,QAAQ,MAAMC,EAAW,OAAQ,EAAE,WAAW,IAAM,GAEnFD;AACX;AAIO,SAASE,GACZC,GACAC,GACc;AACd,QAAMC,IAAeD,IAAeD,IAAiD,CAAA,GAC/EJ,IAASK,KAAgBD,GACzBhK,IAAQoH,EAAI8C,EAAa,WAAW,IAAI,GACxCtJ,IAASuJ,GAAS,CAACjK,MAAWF,EAAM,QAAQE,GAAQgK,EAAa,SAAS,GAAG;AAEnF,SAAAE,GAAY,MAAMxJ,EAAOgJ,EAAA,CAAQ,CAAC,GAE3B5J;AACX;AC5BA,IAAIqK,KAAgC;AAEpC,SAASC,KAAyB;AAC9B,SAAOlL,GAAI,IAAImL,GAAA,GAAY,CAACC,MAAa;AACrC,IAAAA,EAAS,OAAO,SAASC,GAAM;AAC3B,YAAMC,IAAcH,GAAS,UAAU,KAAK,MAAM,MAAM,CAACE,CAAI,CAAC;AAE9D,aAAKA,EAAK,KAAK,WAAW,GAAG,IAItBC,IAHIA,EAAY,QAAQ,MAAM,oBAAoB;AAAA,IAI7D;AAAA,EACJ,CAAC;AACL;AAEA,SAASC,GAAkBC,GAAsB;AAC7C,QAAMC,IAAUC,GAAkBF,GAAM,kDAAkD;AAE1F,aAAW,CAACH,GAAMM,GAAQC,CAAI,KAAKH;AAC/B,IAAAD,IAAOA,EAAK,QAAQH,GAAM,+CAA+CM,CAAM,KAAKC,CAAI,WAAW;AAGvG,SAAOJ;AACX;AAEA,SAASK,GAAiBL,GAAsB;AAC5C,QAAMC,IAAUC,GAAkBF,GAAM,iDAAiD;AAEzF,aAAW,CAACH,GAAMS,GAAOF,CAAI,KAAKH,GAAS;AACvC,UAAMM,KAAMd,MAAA,gBAAAA,GAAQ,QAAQa,OAAUA;AAEtC,IAAAN,IAAOA,EAAK,QAAQH,GAAM,2BAA2BS,CAAK,WAAWC,CAAG,KAAKH,CAAI,MAAM;AAAA,EAC3F;AAEA,SAAOJ;AACX;AAOO,SAASQ,KAA2C;AACvD,SAAOf;AACX;AAEO,SAASgB,GAAkBC,GAAsC;AACpE,EAAAjB,KAASiB;AACb;AAEO,SAASC,GAAeC,GAA0B;AACrD,MAAIZ,IAAOa,GAAOD,GAAU,EAAE,UAAUlB,GAAA,GAAgB,OAAO,IAAO;AAEtE,SAAAM,IAAOc,GAASd,CAAI,GACpBA,IAAOD,GAAkBC,CAAI,GAC7BA,IAAOK,GAAiBL,CAAI,GAErBA;AACX;AAEO,SAASc,GAASd,GAAsB;AAC3C,SAAOe,GAAU,SAASf,GAAM,EAAE,UAAU,CAAC,QAAQ,GAAG;AAC5D;ACjEO,MAAMgB,KAAsB;AAE5B,SAASC,GAAuBC,GAA+B;AAClE,SAAO,EAAEA,KAAQ,oBAAI,QAAQ,kBAAA,IAAsB,CAACF;AACxD;ACDA,MAAAF,KAAuD;AAAA,EACnD,QAAQzG,GAAsB,EAAE,OAAA/E,KAAS;AACrC,IAAA+E,EAAQ,YAAYyG,GAASxL,CAAK;AAAA,EACtC;AACJ,GCFa6L,KAAoB;AAAA,EAC7B,SAAW/G;AAAA,EACX,aAAa0G;AACjB,GAMAM,KAA4B;AAAA,EACxB,QAAQC,GAAKtM,GAAS;AAClB,UAAMqM,IAAa;AAAA,MACf,GAAGD;AAAA,MACH,GAAGpM,EAAQ;AAAA,IAAA;AAGf,eAAW,CAACD,GAAM0E,CAAS,KAAK,OAAO,QAAQ4H,CAAU;AACrD,MAAAC,EAAI,UAAUvM,GAAM0E,CAAsB;AAAA,EAElD;AACJ;ACvBO,MAAM8H,WAAqBnM,GAAQ;AAAA,EAAnC;AAAA;AAEK,IAAAI,EAAA;AAAA;AAAA,EAER,MAAa,IAAIgL,GAAuC;AAIpD,WAFiB,OADH,MAAM,KAAK,KAAA,GACI,MAAMA,CAAG,KAEnB;AAAA,EACvB;AAAA,EAEA,MAAa,MAAMA,GAAagB,GAAmC;AAG/D,WAFc,MAAM,KAAK,KAAA,GAEb,IAAIhB,GAAKgB,CAAQ;AAAA,EACjC;AAAA,EAEA,MAAa,QAAQhB,GAAagB,GAAmC;AACjE,UAAMC,IAAQ,MAAM,KAAK,KAAA;AAGzB,KAFa,MAAMA,EAAM,KAAKjB,CAAG,GAExB,WAAW,KAIpB,MAAMiB,EAAM,IAAIjB,GAAKgB,CAAQ;AAAA,EACjC;AAAA,EAEA,MAAgB,OAAuB;AACnC,WAAQ,KAAK,QACT,KAAK,SACL/M,GAAI,IAAIkB,KAAwB,CAAC8L,MAAU;AACvC,aAAO,KAAK,KAAK,EAAE,KAAK,CAACC,MAAaD,EAAM,QAAQC,CAAQ,CAAC;AAAA,IACjE,CAAC;AAAA,EACT;AAEJ;AAEA,MAAAC,KAAe1J,GAAOsJ,EAAY;ACrC3B,MAAMK,WAAuBxM,GAAQ;AAAA,EAExC,MAAa,QAAuB;AAChC,UAAM4C,EAAO,KAAK,eAAe;AAAA,EACrC;AAEJ;AAEA,MAAAjC,KAAekC,GAAO2J,EAAc;ACJ7B,SAASC,GAGdC,GAAqBC,GAAgE;AACnF,SAAO;AAAA,IACH,GAAGD;AAAA,IACH,GAAG3L,GAAW4L,GAAc,OAAO,KAAKD,CAAQ,CAAC;AAAA,EAAA;AAEzD;ACMA,MAAME,KAAkB;AAAA,EACpB,MAAMlJ;AAAA,EACN,SAASd;AAAA,EACT,UAAUjC;AACd;AAMA,eAAsBkM,GAAaX,GAAkBY,GAAkD;AACnG,QAAM,QAAQ;AAAA,IACV,OAAO,QAAQA,CAAQ,EAAE,IAAI,OAAO,CAACnN,GAAMoN,CAAO,MAAM;AACpD,YAAMA,EACD,OAAA,EACA,MAAM,CAACrM,MAAA;;AAAU,gBAAA8B,KAAAzC,IAAAmM,EAAI,QAAO,iBAAX,gBAAA1J,EAAA,KAAAzC,GAA0BW,GAAO,MAAM,oBAAoBf,CAAI;AAAA,OAAI;AAAA,IAC7F,CAAC;AAAA,EAAA,GAGL,OAAO,OAAOuM,EAAI,OAAO,kBAAkBY,CAAQ,IAE/CE,EAAA,KAAmBC,SACnB,OAAO,OAAO,YAAYH,CAAQ;AAE1C;AAEA,MAAAI,KAA4B;AAAA,EACxB,MAAM,QAAQhB,GAAKtM,GAAS;;AACxB,UAAMkN,IAAW;AAAA,MACb,GAAGF;AAAA,MACH,GAAGhN,EAAQ;AAAA,IAAA;AAGf,IAAAsM,EAAI,IAAIzM,IAAe,IACvBM,IAAAH,EAAQ,aAAR,QAAAG,EAAkB,QAAQ,CAACoD,MAAYO,EAAI,WAAWP,CAAO,IAEzDvD,EAAQ,+BAA+B,UACvC8D,EAAI,8BAA8B9D,EAAQ,0BAA0B,GAGxE,MAAMiN,GAAaX,GAAKY,CAAQ;AAAA,EACpC;AACJ;AC7DA,MAAqBK,GAA4C;AAAA,EAE7D,YACYC,GACAC,GACV;AAFU,SAAA,SAAAD,GACA,KAAA,iBAAAC;AAAA,EACT;AAAA,EAEI,YAAoB;AACvB,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,MAAa,UAAUD,GAA+B;AAClD,SAAK,SAASA;AAAA,EAClB;AAAA,EAEO,oBAA4B;AAC/B,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,MAAa,kBAAkBC,GAAuC;AAClE,SAAK,iBAAiBA;AAAA,EAC1B;AAAA,EAEO,aAAuB;AAC1B,WAAO,CAAC,IAAI;AAAA,EAChB;AAAA,EAEO,UAAUnN,GAAqB;AAElC,WAAA8M,OAAmB,QAAQ,KAAK,0BAA0B,GAEnD9M;AAAA,EACX;AAAA,EAEO,qBAAqBoN,GAAWC,GAAgC;AAEnE,WAAAP,OAAmB,QAAQ,KAAK,0BAA0B,GAEnDO;AAAA,EACX;AAEJ;AC3CA,MAAAC,KAAe1N,GAAmB;AAAA,EAC9B,MAAM;AAAA,EACN,SAAS,CAAC,UAAU,gBAAgB;AAAA,EACpC,cAAc;AAAA,IACV,QAAQ;AAAA,IACR,SAAS,CAAC,IAAI;AAAA,IACd,gBAAgB;AAAA,EAAA;AAExB,CAAC;ACKM,MAAM2N,WAAoBzN,GAAQ;AAAA,EAIrC,cAAc;AACV,UAAA;AAHI,IAAAI,EAAA;AAKJ,SAAK,WAAW,IAAI+M;AAAA,MAChB,KAAK,SAAS,QAAQ,KAAK,KAAK,iBAAA;AAAA,MAChC,KAAK,SAAS,gBAAgB;AAAA,IAAA;AAAA,EAEtC;AAAA,EAEA,MAAa,YAAYO,GAAuC;AAC5D,SAAK,WAAWA,GAChB,KAAK,UAAUA,EAAS,WAAA,GAExB,MAAMA,EAAS,UAAU,KAAK,UAAU,KAAK,kBAAkB,GAC/D,MAAMA,EAAS,kBAAkB,KAAK,cAAc;AAAA,EACxD;AAAA,EAEO,UAAUxN,GAAayN,GAAuD;AACjF,WAAO,KAAK,SAAS,UAAUzN,GAAKyN,CAAU,KAAKzN;AAAA,EACvD;AAAA,EAEO,qBACHA,GACAqN,GACAI,IAA+C,CAAA,GACzC;AACN,WAAO,KAAK,SAAS,qBAAqBzN,GAAKqN,GAAgBI,CAAU;AAAA,EAC7E;AAAA,EAEO,mBAA2B;AAC9B,UAAMC,IAAU,KAAK,SAAS,SAAS;AAEvC,WAAO,UAAU,UAAU,KAAK,CAACR,MAAWQ,EAAQ,SAASR,CAAM,CAAC,KAAK;AAAA,EAC7E;AAAA,EAEA,MAAyB,OAAsB;AAC3C,IAAK,WAAW,YAIhB,KAAK,eAAe;AAAA,MAChB,YAAY;;AACR,cAAM,KAAK,SAAS,UAAU,KAAK,UAAU,KAAK,kBAAkB,GACpE,MAAM,KAAK,SAAS,kBAAkB,KAAK,cAAc,GAEzD,KAAK,UACCrN,IAAA,SAAS,cAAc,MAAM,MAA7B,QAAAA,EAAgC,aAAa,QAAQ,KAAK,WAC1DyC,IAAA,SAAS,cAAc,MAAM,MAA7B,QAAAA,EAAgC,gBAAgB;AAAA,MAC1D;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK;AAAA,EAE1B;AAEJ;AAEA,MAAAqL,KAAehL,GAAO4K,EAAW,GCxEpBK,KAAYD,GAAK,UAAU,KAAKA,EAAI,GACpCE,IAAuBF,GAAK,qBAAqB,KAAKA,EAAI,GCCjEtL,KAA2B,CAAA;AAI1B,SAASyL,GAAqB/L,GAA6B;AAC9D,EAAAM,GAAS,KAAKN,CAAO;AACzB;AAEO,SAASgM,GAAgBvN,GAA4B;AACxD,aAAWuB,KAAWM,IAAU;AAC5B,UAAMuH,IAAS7H,EAAQvB,CAAK;AAE5B,QAAIoJ;AACA,aAAOA;AAAA,EAEf;AAEA,SAAI,OAAOpJ,KAAU,WACVA,IAGPA,aAAiB,SAASA,aAAiB9B,KACpC8B,EAAM,UAGbwN,GAASxN,CAAK,IACPyD,EAASzD,EAAM,WAAcA,EAAM,eAAkB,sBAAsB,IAG/EqN,EAAqB,kBAAkB,eAAe;AACjE;AClBA,MAAMI,yBAAgB,QAAA;AAGf,SAASC,KAAsB;AAClC,QAAM9B,IAAW+B,GAAA,GACX,EAAE,OAAAC,GAAO,QAAAC,GAAQ,GAAGC,EAAA,IAAUC,GAAgBN,GAAU,IAAI7B,CAAQ,IAAI,CAAA,IAAK,EAAE,eAAe,IAAO;AAE3G,SAAA6B,GAAU,IAAI7B,CAAQ,GAEf;AAAA,IACH,GAAGkC;AAAA,IACH,MAAM,MAAM1E,GAAY;AACpB,MAAAwE,EAAMxE,CAAM,GAEZ,MAAM4E,GAAM,GAAI,GAEhBH,EAAA;AAAA,IACJ;AAAA,EAAA;AAER;ACnCO,MAAMI,KAAoB,KAEpBC,KAAU;AAAA,EACnB,QAAQ;AAAA,EACR,SAAS;AACb;AAIO,SAASC,KAA2B;AACvC,SAAI,WAAW,aAAaF,KACjBC,GAAQ,UAGZA,GAAQ;AACnB;ACHA,MAAAE,KAAehP,GAAmB;AAAA,EAC9B,MAAM;AAAA,EACN,cAAc;AAAA,IACV,QAAQ,CAAA;AAAA,IACR,QAAQ+O,GAAA;AAAA,EAAiB;AAAA,EAE7B,UAAU;AAAA,IACN,SAAS,CAAC,EAAE,QAAAE,EAAA,MAAaA,MAAWH,GAAQ;AAAA,IAC5C,QAAQ,CAAC,EAAE,QAAAG,QAAaA,MAAWH,GAAQ;AAAA,EAAA;AAEnD,CAAC;AC+DM,MAAMI,WAAkBhP,GAAQ;AAAA,EAAhC;AAAA;AAEK,IAAAI,EAAA,oBAAoC,CAAA;AAAA;AAAA,EAErC,kBAAgDT,GAASsP,GAAkC;AAC9F,SAAK,WAAWtP,CAAI,IAAIsP;AAAA,EAC5B;AAAA,EAEO,iBAA+CtP,GAAiC;AACnF,WAAO,KAAK,WAAWA,CAAI,KAAK;AAAA,EACpC;AAAA,EAEO,iBAA+CA,GAA0B;AAC5E,WAAO,KAAK,iBAAiBA,CAAI,KAAK6B,EAAK,iBAAiB7B,CAAI,mBAAmB;AAAA,EACvF;AAAA,EAIO,MAAMuP,GAAwBC,GAAwB;AACzD,UAAMC,IAAgB,MACd,OAAOD,KAAY,WACZ,EAAE,SAASD,EAAA,IAGf;AAAA,MACH,OAAOA;AAAA,MACP,SAAAC;AAAA,IAAA;AAIR,SAAK,MAAM,KAAK,iBAAiB,aAAa,GAAGC,GAAe;AAAA,EACpE;AAAA;AAAA;AAAA,EASA,MAAa,QACTF,GACAG,GACAzP,GACqD;AAkBrD,UAAM0P,IAhBE,OAAOD,KAAqB,WACrB;AAAA,MACH,GAAIA,KAAoB,CAAA;AAAA,MACxB,SAASH;AAAA,MACT,UAAU,CAAC,EAACG,KAAA,QAAAA,EAAkB;AAAA,IAAA,IAI/B;AAAA,MACH,GAAIzP,KAAW,CAAA;AAAA,MACf,OAAOsP;AAAA,MACP,SAASG;AAAA,MACT,UAAU,CAAC,EAACzP,KAAA,QAAAA,EAAS;AAAA,IAAA,GAKvB,EAAE,UAAAwM,MAAa,MAAM,KAAK,MAAM,KAAK,iBAAiB,eAAe,GAAGkD,CAAU,GAClFC,IAAY,OAAOnD,KAAa,WAAWA,EAAS,CAAC,IAAKA,KAAY,IACtEoD,IACF,OAAOpD,KAAa,WACdA,EAAS,CAAC,IACV,OAAO,QAAQkD,EAAW,cAAc,CAAA,CAAE,EAAE;AAAA,MAC1C,CAAC9J,GAAQ,CAACiK,GAAU,EAAE,SAASC,EAAA,CAAc,OAAO;AAAA,QAChD,CAACD,CAAQ,GAAGC,KAAgB;AAAA,QAC5B,GAAGlK;AAAA,MAAA;AAAA,MAEL,CAAA;AAAA,IAAC;AAGf,eAAW,CAAC7F,GAAM8P,CAAQ,KAAK,OAAO,QAAQH,EAAW,cAAc,CAAA,CAAE;AACrE,UAAI,GAACG,EAAS,YAAYD,EAAW7P,CAAI;AAIzC,eAAI4P,KAAavC,OAEb,QAAQ,KAAK,4DAA4DrN,CAAI,wBAAwB,GAGlG,CAAC,IAAO6P,CAAU;AAG7B,WAAO,gBAAgBF,IAAa,CAACC,GAAWC,CAAU,IAAID;AAAA,EAClE;AAAA,EAIA,MAAa,OACTL,GACAG,GACAzP,GACsB;AACtB,UAAM+P,KAAO/P,KAAA,gBAAAA,EAAS,SAAQ,IACxBwP,IAAgB,MACd,OAAOC,KAAqB,WACrB;AAAA,MACH,SAASH;AAAA,MACT,GAAIG,KAAoB,CAAA;AAAA,IAAC,IAI1B;AAAA,MACH,OAAOH;AAAA,MACP,SAASG;AAAA,MACT,GAAIzP,KAAW,CAAA;AAAA,IAAC,GAIlB,EAAE,UAAAwM,MAAa,MAAM,KAAK,MAAM,KAAK,iBAAiB,cAAc,GAAGgD,GAAe;AAG5F,YAFeO,KAAQ,OAAOvD,KAAa,WAAWA,KAAA,gBAAAA,EAAU,SAASA,MAExD;AAAA,EACrB;AAAA,EAKA,MAAa,QACTwD,GACArH,GACU;AACV,UAAMsH,IAAmB,CAACC,MAA+B,OAAOA,KAAM,aAAa,QAAQ,QAAQA,EAAA,CAAG,IAAIA,GACpGC,IAAc,MAIf;AACD,UAAI,OAAOH,KAAgC;AACvC,eAAO;AAAA,UACH,OAAO,EAAE,SAASA,EAAA;AAAA,UAClB,kBAAkBC,EAAiBtH,CAAmC;AAAA,QAAA;AAI9E,UAAI,OAAOqH,KAAgC,cAAcA,aAAuC;AAC5F,eAAO,EAAE,kBAAkBC,EAAiBD,CAA2B,EAAA;AAG3E,YAAM,EAAE,OAAAI,GAAO,GAAGC,MAAUL;AAE5B,aAAO;AAAA,QACH,OAAAK;AAAAA,QACA,OAAOnK,EAAMkK,CAAK;AAAA,QAClB,kBAAkBH,EAAiBtH,CAAmC;AAAA,MAAA;AAAA,IAE9E;AAEA,QAAI2H,IAAU;AACd,UAAM,EAAE,kBAAAC,GAAkB,OAAAF,GAAO,OAAAD,EAAA,IAAUD,EAAA;AAI3C,QAFAC,KAAU,MAAM,QAAQ,KAAK,CAACtB,GAAM,EAAE,IAAIsB,EAAA,CAAO,EAAE,KAAK,MAAOE,IAAU,EAAK,GAAGC,CAAgB,CAAC,GAE9FH,KAAS,CAACE;AACV,aAAOC;AAGX,UAAM3B,IAAQ4B,GAAY,KAAK,iBAAiB,eAAe,GAAGH,CAAK;AAEvE,IAAAI,GAAU7B,CAAK;AAEf,QAAI;AACA,YAAM1E,IAAS,MAAMqG;AAErB,mBAAMzB,GAAM,EAAE,IAAI,KAAK,GAEhB5E;AAAA,IACX,UAAA;AACI,YAAMwG,GAAW9B,EAAM,IAAI,EAAE,aAAa,KAAM;AAAA,IACpD;AAAA,EACJ;AAAA,EAEO,MAAMW,GAAiBvP,IAAwB,IAAU;AAC5D,UAAM,EAAE,WAAAqP,GAAW,GAAGsB,EAAA,IAAiB3Q,GACjC4Q,IAAiB;AAAA,MACnB,IAAIC,GAAA;AAAA,MACJ,YAAY,EAAE,SAAAtB,GAAS,GAAGoB,EAAA;AAAA,MAC1B,WAAWnN,EAAQ6L,KAAa,KAAK,iBAAiB,OAAO,CAAC;AAAA,IAAA;AAGlE,SAAK,SAAS,UAAU,KAAK,OAAO,OAAOuB,CAAK,CAAC;AAAA,EACrD;AAAA,EAYO,MAA2BvB,GAAcyB,GAAiE;AAE7G,WAAOL,GAAUpB,GAAkByB,KAAkB,EAAE;AAAA,EAC3D;AAAA,EAEA,MAAa,iBAAgC;AACzC,UAAM,QAAQ,IAAIC,GAAO,MAAM,IAAI,CAAC,EAAE,IAAAC,EAAA,MAASN,GAAWM,GAAI,EAAE,aAAa,IAAA,CAAM,CAAC,CAAC;AAAA,EACzF;AAAA,EAEA,MAAyB,OAAsB;AAC3C,SAAK,kBAAA,GACL,KAAK,yBAAA;AAAA,EACT;AAAA,EAEQ,oBAA0B;AAC9B,IAAAhO,EAAO,KAAK,uBAAuB,YAAY;AAC3C,UAAI,CAAC,WAAW,YAAY,CAAC,WAAW;AACpC;AAGJ,YAAMiO,IAAS,WAAW,SAAS,eAAe,QAAQ;AAE1D,MAAKA,MAID,WAAW,iBAAiBA,CAAM,EAAE,YAAY,QAChDA,EAAO,MAAM,UAAU,KAEvB,MAAMnC,GAAM,EAAE,IAAI,KAAK,IAG3BmC,EAAO,OAAA;AAAA,IACX,CAAC;AAAA,EACL;AAAA,EAEQ,2BAAiC;AACrC,QAAI,CAAC,WAAW;AACZ;AAKJ,IAFc,WAAW,WAAW,eAAelC,EAAiB,KAAK,EAEnE,iBAAiB,UAAU,MAAM,KAAK,SAAS,EAAE,QAAQE,GAAA,EAAiB,CAAG,CAAC;AAAA,EACxF;AAEJ;AAEA,MAAAiC,IAAejO,GAAOmM,EAAS,GCzT/BhP,KAAeF,GAAmB;AAAA,EAC9B,MAAM;AAAA,EACN,cAAc;AAAA,IACV,MAAM,CAAA;AAAA,IACN,eAAe,CAAA;AAAA,IACf,OAAO;AAAA,EAAA;AAAA,EAEX,UAAU;AAAA,IACN,WAAW,CAAC,EAAE,MAAAiR,EAAA,MAAWA,EAAK,SAAS;AAAA,IACvC,cAAc,CAAC,EAAE,MAAAA,EAAA,MAAWA,EAAK,KAAK,CAACrQ,MAAU,CAACA,EAAM,IAAI;AAAA,IAC5D,kBAAkB,CAAC,EAAE,eAAAsQ,QAAoBA,EAAc,SAAS;AAAA,EAAA;AAExE,CAAC;ACjBM,MAAMC,WAAsBjR,GAAQ;AAAA,EAApC;AAAA;AAEI,IAAAI,EAAA,wBAA0B;AACzB,IAAAA,EAAA,iBAAmB;AACnB,IAAAA,EAAA,eAA6B;AAC7B,IAAAA,EAAA,sBAA+C;AAAA;AAAA,EAEhD,SAAe;AAClB,SAAK,UAAU;AAAA,EACnB;AAAA,EAEO,UAAgB;AACnB,SAAK,UAAU;AAAA,EACnB;AAAA,EAIA,MAAa,QAAQ8Q,GAA6CC,GAAyC;AACvG,QAAI,MAAM,QAAQD,CAAc,KAAKA,EAAe,WAAW,GAAG;AAC9D,MAAAJ,EAAG,MAAM/C,EAAqB,uBAAuB,qBAAqB,CAAC;AAE3E;AAAA,IACJ;AAEA,UAAMqD,IAAS,MAAM,QAAQF,CAAc,IACpCA,EAAe,CAAC,IACjB,KAAK,cAAcA,CAAc,IAC7BA,IACA,MAAM,KAAK,kBAAkBA,CAAc,GAC/CG,IAAU,MAAM,QAAQH,CAAc,IAAKA,IAAoCC,KAAY,CAACC,CAAM;AAExG,IAAAN,EAAG,MAAMA,EAAG,iBAAiB,oBAAoB,GAAG,EAAE,QAAAM,GAAQ,SAAAC,GAAS;AAAA,EAC3E;AAAA,EAEA,MAAa,OAAO3Q,GAAoByO,GAAiC;AAWrE,QAVA,MAAMvM,EAAO,KAAK,SAAS,EAAE,OAAAlC,GAAO,SAAAyO,GAAS,GAEzClC,GAAU,MAAM,MAIhBD,OACA,KAAK,SAAStM,CAAK,GAGnB,CAAC,KAAK;AACN,YAAMA;AAGV,QAAI,CAACgD,EAAI,aAAa;AAClB,YAAM4N,IAAe,MAAM,KAAK,yBAAyB5Q,CAAK;AAE9D,MAAI4Q,KACA,KAAK,SAAS,EAAE,eAAe,KAAK,cAAc,OAAOA,CAAY,GAAG;AAG5E;AAAA,IACJ;AAEA,UAAMF,IAAS,MAAM,KAAK,kBAAkB1Q,CAAK,GAC3C6Q,IAAsB;AAAA,MACxB,QAAAH;AAAA,MACA,MAAM;AAAA,MACN,0BAAU,KAAA;AAAA,IAAK;AAGnB,IAAAN,EAAG;AAAA,MACC3B,KACIpB,EAAqB,iBAAiB,2DAA4D;AAAA,MACtG;AAAA,QACI,SAAS;AAAA,QACT,SAAS;AAAA,UACL;AAAA,YACI,OAAOA,EAAqB,sBAAsB,cAAc;AAAA,YAChE,SAAS;AAAA,YACT,OAAO,MAAM+C,EAAG,MAAMA,EAAG,iBAAiB,oBAAoB,GAAG,EAAE,QAAAM,GAAQ,SAAS,CAACA,CAAM,GAAG;AAAA,UAAA;AAAA,QAClG;AAAA,MACJ;AAAA,IACJ,GAGJ,KAAK,SAAS,EAAE,MAAM,CAACG,CAAG,EAAE,OAAO,KAAK,IAAI,GAAG;AAAA,EACnD;AAAA,EAEO,uBAAuB7Q,GAAoByO,GAAwB;AACtE,IAAKnC,QAIDmC,KAEA,QAAQ,KAAKA,CAAO,GAGxB,KAAK,SAASzO,CAAK;AAAA,EACvB;AAAA,EAEO,IAAI0Q,GAA2B;AAClC,SAAK,SAAS;AAAA,MACV,MAAM,KAAK,KAAK,IAAI,CAACG,MACbA,EAAI,WAAWH,IACRG,IAGJ;AAAA,QACH,GAAGA;AAAA,QACH,MAAM;AAAA,MAAA,CAEb;AAAA,IAAA,CACJ;AAAA,EACL;AAAA,EAEA,MAAyB,OAAsB;AAC3C,IAAAlH,GAAY,YAAY;;AACpB,UAAI,CAAC,KAAK,OAAO;AACb,SAAAtK,IAAA,KAAK,UAAL,QAAAA,EAAY;AAEZ;AAAA,MACJ;AAEA,WAAK,UAAL,KAAK,SAAW,MAAM,OAAO,OAAO,GAAG,UACvC,KAAK,iBAAL,KAAK,eAAiB,EAAE,MAAM,OAAO,iBAAiB,GAAG,OAAO,IAEhE,KAAK,MAAM,KAAA,GACX,KAAK,aAAa,QAAQ,CAAC6D,MAAA;;AAAW,gBAAA7D,IAAA,KAAK,UAAL,gBAAAA,EAAY,IAAI6D;AAAA,OAAO;AAAA,IACjE,CAAC;AAAA,EACL;AAAA,EAEQ,SAASlD,GAAsB;AAEnC,YAAQ,MAAMA,CAAK,GAEfwN,GAASxN,CAAK,KAAKA,EAAM,SACzB,KAAK,SAASA,EAAM,KAAK;AAAA,EAEjC;AAAA,EAEQ,cAAcA,GAAsC;AACxD,WAAOwN,GAASxN,CAAK,KAAK,WAAWA;AAAA,EACzC;AAAA,EAEA,MAAc,kBAAkBA,GAA0C;AACtE,WAAI,OAAOA,KAAU,WACV,EAAE,OAAOA,EAAA,IAGhBA,aAAiB,SAASA,aAAiB9B,KACpC,KAAK,2BAA2B8B,CAAK,IAG5CwN,GAASxN,CAAK,IACP8Q,GAAmB;AAAA,MACtB,OAAOrN;AAAA,QACHzD,EAAM,QAAWA,EAAM,SAAYqN,EAAqB,kBAAkB,eAAe;AAAA,MAAA;AAAA,MAE7F,aAAa5J;AAAA,QACTzD,EAAM,WACFA,EAAM,eACNqN,EAAqB,6BAA6B,sBAAsB;AAAA,MAAA;AAAA,MAEhF,OAAArN;AAAA,IAAA,CACH,IAGE;AAAA,MACH,OAAOqN,EAAqB,kBAAkB,eAAe;AAAA,MAC7D,OAAArN;AAAA,IAAA;AAAA,EAER;AAAA,EAEA,MAAc,yBAAyBA,GAAiD;AACpF,WAAIA,aAAiB/B,KAEV+B,EAAM,iBAAiB/B,KAAmB,OAAO,KAAK,kBAAkB+B,EAAM,KAAK,IAGvF,KAAK,kBAAkBA,CAAK;AAAA,EACvC;AAAA,EAEQ,2BAA2BA,GAAwBkI,IAAiC,IAAiB;AACzG,WAAO;AAAA,MACH,OAAOlI,EAAM;AAAA,MACb,aAAaA,EAAM;AAAA,MACnB,SAASA,EAAM;AAAA,MACf,OAAAA;AAAA,MACA,GAAGkI;AAAA,IAAA;AAAA,EAEX;AAEJ;AAEA,MAAA6I,KAAe5O,GAAOoO,EAAa;;;;;;;;;;;;;;;;ACxLnC,UAAMhB,IAAQ3I,EAAS,MACfoK,EAAA,KACO,EAAE,IAACA,EAAA,GAAA,IAGVA,EAAA,QACO;AAAA,MACH,IAAIZ,EAAG,iBAAiB,aAAa,KAAK;AAAA,MAC1C,IAAIU,GAAmB;AAAA,QACnB,MAAME,EAAA;AAAA,QACN,QAAQA,EAAA;AAAA,QACR,OAAOA,EAAA;AAAA,MAAA,CACV;AAAA,IAAA,IAILA,EAAA,OACO;AAAA,MACH,IAAI;AAAA,MACJ,QAAQ;AAAA,MACR,MAAGA,EAAA;AAAA,IAAA,IAIJ;AAAA,MACH,IAAI;AAAA,MACJ,MAAMA,EAAA,SAAS,WAAW;AAAA,IAAA,CAEjC;sBAhDGC,KAAAC,EAOYC,OAPZC,EAOY;AAAA,MANP,OAAOJ,EAAA;AAAA,MACP,YAAAK,EAAAA;AAAAA,MACA,UAAAC,EAAAA;AAAAA,IAAAA,GACO/B,EAAA,KAAK,GAAA;AAAA,iBAEb,MAAQ;AAAA,QAARgC,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;;;;;;;;;;;;;;;;ACOhB,UAAMjC,IAA4DkC,EAAAT,GAAA,CAAA,SAAA,QAAA,WAAA,UAAA,CAAA,GAI5DU,IAAkB9K,EAAS,MAAMjC;AAAA,MACnC,EAAE,sBAAa,SAAMqM,EAAA,SAAG,MAAGA,EAAA,MAAG,UAAOA,EAAA,SAAA;AAAA,MACrC;AAAA,QACI,aAAa;AAAA,QACb,UAAU;AAAA,UACN,SAAS;AAAA,YACL,SAAS;AAAA,YACT,WAAW;AAAA,YACX,QAAQ;AAAA,YACR,SAAS;AAAA,YACT,OAAO;AAAA,YACP,SAAS;AAAA,YACT,MAAM;AAAA,UAAA;AAAA,UAEV,MAAM;AAAA,YACF,OAAO;AAAA,YACP,SAAS;AAAA,YACT,OAAO;AAAA,YACP,MAAM;AAAA,UAAA;AAAA,UAEV,UAAU;AAAA,YACN,OAAO;AAAA,YACP,MAAM;AAAA,UAAA;AAAA,QACV;AAAA,QAEJ,kBAAkB;AAAA,UACd;AAAA,YACI,SAAS,CAAC,WAAW,aAAa,UAAU,SAAS,SAAS;AAAA,YAC9D,OAAO;AAAA,UAAA;AAAA,UAEX;AAAA,YACI,SAAS,CAAC,WAAW,QAAQ;AAAA,YAC7B,OAAO;AAAA,UAAA;AAAA,UAEX;AAAA,YACI,SAAS,CAAC,aAAa,SAAS;AAAA,YAChC,OAAO;AAAA,UAAA;AAAA,UAEX;AAAA,YACI,SAAS,CAAC,WAAW,aAAa,UAAU,SAAS,SAAS;AAAA,YAC9D,MAAM;AAAA,YACN,OAAO;AAAA,UAAA;AAAA,UAEX;AAAA,YACI,SAAS,CAAC,WAAW,aAAa,UAAU,SAAS,SAAS;AAAA,YAC9D,MAAM;AAAA,YACN,OAAO;AAAA,UAAA;AAAA,UAEX;AAAA,YACI,SAAS,CAAC,WAAW,aAAa,UAAU,SAAS,SAAS;AAAA,YAC9D,MAAM;AAAA,YACN,OAAO;AAAA,UAAA;AAAA,UAEX;AAAA,YACI,SAAS;AAAA,YACT,UAAU;AAAA,YACV,OAAO;AAAA,UAAA;AAAA,UAEX;AAAA,YACI,SAAS,CAAC,aAAa,SAAS,SAAS;AAAA,YACzC,UAAU;AAAA,YACV,OAAO;AAAA,UAAA;AAAA,UAEX;AAAA,YACI,SAAS;AAAA,YACT,UAAU;AAAA,YACV,OAAO;AAAA,UAAA;AAAA,UAEX;AAAA,YACI,SAAS;AAAA,YACT,UAAU;AAAA,YACV,OAAO;AAAA,UAAA;AAAA,UAEX;AAAA,YACI,SAAS;AAAA,YACT,MAAM;AAAA,YACN,OAAO;AAAA,UAAA;AAAA,UAEX;AAAA,YACI,SAAS;AAAA,YACT,MAAM;AAAA,YACN,OAAO;AAAA,UAAA;AAAA,UAEX;AAAA,YACI,SAAS;AAAA,YACT,MAAM;AAAA,YACN,OAAO;AAAA,UAAA;AAAA,QACX;AAAA,QAEJ,iBAAiB;AAAA,UACb,SAAS;AAAA,UACT,MAAM;AAAA,UACN,UAAU;AAAA,QAAA;AAAA,MACd;AAAA,IACJ,CACH;sBAhHGC,EAAA,GAAAC,EAEiBS,IAFjBP,EAEiB;AAAA,MAFA,OAAOM,EAAA;AAAA,MAAkB,UAAAJ,EAAAA;AAAAA,IAAAA,GAAiB/B,CAAK,GAAA;AAAA,iBAC5D,MAAQ;AAAA,QAARgC,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;AC6CT,SAASI,GAAqBC,GAAiD;AAClF,SAAO,OAAOA,KAAW,YAAYA,MAAW,QAAQ,WAAWA;AACvE;AAGO,SAASC,GACZvC,GACAwC,GACF;AACE,QAAMzK,IAAOzD,GAA8B,QAAQ,IAAI,GACjDmO,IAAe,CAACH,MACdA,MAAW,SACJ,KAGJtC,EAAM,MAAM,eACbA,EAAM,MAAM,aAAasC,CAAM,IAC/BD,GAAqBC,CAAM,IACvBI,GAASJ,EAAO,KAAe,IAC/BpO,EAASoO,CAAM,GAEvBK,IAAgBtL,EAAS,MAAM;AACjC,UAAM,EAAE,MAAA3H,GAAM,YAAAkT,EAAA,IAAe5C,EAAM;AAEnC,WAAIjI,KAAQrI,IACDqI,EAAK,cAAcrI,CAAI,IAG3BkT;AAAA,EACX,CAAC,GACKC,IAAkBxL,EAAS,MAAMsL,EAAc,KAAwB,GACvE5L,IAASM,EAAS,MAChB,CAACU,KAAQ,CAACiI,EAAM,MAAM,OACf,OAGJjI,EAAK,OAAOiI,EAAM,MAAM,IAAI,KAAK,IAC3C,GACK8C,IAAkBzL,EAAS,MACxB2I,EAAM,MAAM,UAIVA,EAAM,MAAM,QAAQ,IAAI,CAACsC,OAAY;AAAA,IACxC,KAAK9B,GAAA;AAAA,IACL,OAAOiC,EAAaH,CAAM;AAAA,IAC1B,OAAOA;AAAA,EAAA,EACT,IAPS,IAQd,GAEKS,IAAS;AAAA,IACX,cAAAN;AAAA,IACA,YAAYpL,EAAS,MAAM2I,EAAM,MAAM,UAAU;AAAA,IACjD,cAAc3I,EAAS,MAAM2I,EAAM,MAAM,YAAY;AAAA,IACrD,OAAO3I,EAAS,MAAM2I,EAAM,MAAM,KAAK;AAAA,IACvC,MAAM3I,EAAS,MAAM2I,EAAM,MAAM,IAAI;AAAA,IACrC,OAAO2C;AAAA,IACP,IAAI,UAAUnC,GAAA,CAAM;AAAA,IACpB,MAAMnJ,EAAS,MAAM2I,EAAM,MAAM,IAAI;AAAA,IACrC,OAAO3I,EAAS,MAAM2I,EAAM,MAAM,KAAK;AAAA,IACvC,aAAa3I,EAAS,MAAM2I,EAAM,MAAM,WAAW;AAAA,IACnD,aAAa3I,EAAS,MAAM2I,EAAM,MAAM,eAAelC,EAAqB,aAAa,kBAAkB,CAAC;AAAA,IAC5G,SAASgF;AAAA,IACT,gBAAgBzL,EAAS,MAAA;;AACrB,cAAAvH,IAAAgT,EAAgB,UAAhB,gBAAAhT,EAAuB,KAAK,CAACwS,MAAWA,EAAO,UAAUtC,EAAM,MAAM;AAAA,KAAW;AAAA,IACpF,QAAQ1I,GAASP,CAAM;AAAA,IACvB,UAAUM,EAAS,MAAM;AACrB,UAAI,GAAC2I,EAAM,MAAM,QAAQ,CAACjI;AAI1B,eAAOA,EAAK,cAAciI,EAAM,MAAM,IAAI,EAAE,SAAS,UAAU;AAAA,IACnE,CAAC;AAAA,IACD,OAAO9P,GAAO;AACV,UAAI6H,KAAQiI,EAAM,MAAM,MAAM;AAC1B,QAAAjI,EAAK,cAAciI,EAAM,MAAM,MAAM9P,CAAuB;AAE5D;AAAA,MACJ;AAEA,MAAAsS,EAAK,qBAAqBtS,CAAK;AAAA,IACnC;AAAA,EAAA;AAGJ,WAASU,EAAOV,GAAwB;AACpC,IAAA6S,EAAO,OAAO7S,CAAU;AAAA,EAC5B;AAEA,SAAA8S,GAAQ,UAAUD,CAAM,GAEjB,EAAE,QAAAA,GAAQ,iBAAAF,GAAiB,QAAAjS,GAAQ,cAAA6R,EAAA;AAC9C;;;;AC7HA,UAAMQ,IAASzO;AAAA,MACX;AAAA,MACA;AAAA,IAAA;qBAdmB0O,EAAAA,OAAO,gBAA1BvB,EAEcC,EAAAuB,EAAA,GAAA;AAAA;MAFsB,aAAavB,EAAAqB,CAAA,EAAO;AAAA,IAAA;iBACpD,MAAQ;AAAA,QAARjB,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;oCAEZN,EAAwDC,EAAAuB,EAAA,GAAA;AAAA;MAAnC,aAAavB,EAAAqB,CAAA,EAAO;AAAA,IAAA;;;;;ACa7C,UAAMA,IAASzO;AAAA,MACX;AAAA,MACA;AAAA,IAAA;2BAlBAmN,EAKgBC,EAAAwB,EAAA,GAAA;AAAA,MALA,IAAIxB,EAAAqB,CAAA,EAAO;AAAA,IAAA;iBACvB,MAGO;AAAA,QAHPjB,EAGOC,yBAHP,MAGO;AAAA,UAFHoB,EAAyDC,IAAA;AAAA,YAAnC,aAAa1B,EAAAqB,CAAA,EAAO;AAAA,UAAA;UAC1CI,EAAczB,EAAA2B,EAAA,CAAA;AAAA,QAAA;;;;;;;;;;;;;;;ACgB1B,UAAMN,IAASzO;AAAA,MACX;AAAA,MACA;AAAA,IAAA,GAEEgP,IAAgBnM,EAAS,MAAM;;AACjC,YAAMoM,KAAa3T,IAAAmT,EAAO,YAAP,gBAAAnT,EAAgB,KAAK,CAACwS,MAAWA,EAAO,UAAUb;AAErE,aAAOgC,IAAaR,EAAO,aAAaQ,EAAW,KAAK,IAAIvP,EAASuN,OAAK;AAAA,IAC9E,CAAC;sBA3BGC,EAAA,GAAAC,EAMaC,aANO8B,EAAAA,MAAM,CAAA,GAAA;AAAA,iBACtB,MAIiB;AAAA,QAJjBL,EAIiBzB,EAAA+B,EAAA,GAAA,MAAA;AAAA,qBAHb,MAEO;AAAA,YAFP3B,EAEOC,yBAFP,MAEO;AAAA,kBADAuB,EAAA,KAAa,GAAA,CAAA;AAAA,YAAA;;;;;;;;;;;;;;;AC+BhC,UAAMP,IAASzO;AAAA,MACX;AAAA,MACA;AAAA,IAAA,GAEE2N,IAAkB9K,EAAS,MAC7BzB,EAAQ,sFAAsF6L,EAAA,KAAS,CAAC;2BAvCxGE,EAkBeC,EAAAgC,EAAA,GAAA,MAAA;AAAA,iBAjBX,MAgBgB;AAAA,QAhBhBP,EAgBgBzB,EAAAiC,EAAA,GAAA;AAAA,UAfZ,UAAS;AAAA,UACR,SAAO1B,EAAA,KAAe;AAAA,UACtB,OAAOP,EAAAqB,CAAA,EAAO;AAAA,UACd,MAAMrB,EAAAqB,CAAA,EAAO;AAAA,UACb,eAAa;AAAA,QAAA;qBAEd,MAQiB;AAAA,YARjBI,EAQiBzB,EAAAkC,EAAA,GAAA;AAAA,cARA,SAAOC,EAAAA,UAAU;AAAA,YAAA;yBAC9B,MAMO;AAAA,gBANP/B,EAMOC,yBANP,MAMO;AAAA,mBALHP,EAAA,EAAA,GAAAsC,EAIEC,GAAA,MAAAC,EAHmBtC,EAAAqB,CAAA,EAAO,gBAAjBX,YADXX,EAIEwC,IAAA;AAAA,oBAFG,KAAK7B,EAAO;AAAA,oBACZ,OAAOA,EAAO;AAAA,kBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACgBvC,UAAME,IAAO4B,GACPpE,IAA+DkC,EAAAT,GAAA,CAAA,MAAA,gBAAA,CAAA,GAC/D,EAAE,QAAAsB,GAAQ,iBAAAF,GAAiB,QAAAjS,EAAA,IAAW2R;AAAA,MACxClL,EAAS,OAAO,EAAE,IAACoK,EAAA,IAAG,gBAAaA,EAAA,gBAAG,GAAGzB,EAAA,EAAQ;AAAA,MACjDwC;AAAA,IAAA;AAGJ,WAAA6B,EAAatB,CAAM,mBApCfpB,EAYaC,EAAA0C,EAAA,GAAA;AAAA,MAVR,eAAa1C,EAAAiB,CAAA;AAAA,MACb,IAAI0B,EAAAA;AAAAA,MACJ,uBAAkBC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAE7C,EAAAhR,CAAA,EAAO6T,CAAM;AAAA,IAAA;MAElC,SAAAC,EAAA,CAKY,EAVF,MAAAC,QAAI;AAAA,cAKdhD,EAKYiD,GALIC,EAAAA,EAAE,GAAAC,GAAAC,GAAUC,EAAAA,MAAM,CAAA,GAAA;AAAA,qBAC9B,MAGO;AAAA,YAHPhD,EAGOC,EAAA,QAAA,WAAA;AAAA,cAHA,YAAAW,EAAAA;AAAAA,cAAa,MAAA+B;AAAA,YAAA,GAApB,MAGO;AAAA,cAFHtB,EAAyB4B,EAAA;AAAA,cACzB5B,EAAyB6B,EAAA;AAAA,YAAA;;;;;;;;;;;;;;;ACQzC,UAAMjC,IAASzO;AAAA,MACX;AAAA,MACA;AAAA,IAAA,GAEE2Q,IAAQC,GAAA,GACRC,IAAOhO,EAAS,MAAM,CAAC,EAAE4L,EAAO,SAASkC,EAAM,QAAQ;qBAtB5CE,EAAA,SAAb3D,EAAA,GAAAC,EAIQC,OAJRC,EAIQ;AAAA;MAJY,KAAKD,EAAAqB,CAAA,EAAO;AAAA,IAAA,GAAYS,EAAAA,MAAM,GAAA;AAAA,iBAC9C,MAEO;AAAA,QAFP1B,EAEOC,yBAFP,MAEO;AAAA,UADAqD,EAAAC,EAAA3D,EAAAqB,CAAA,EAAO,KAAK,GAAA,CAAA;AAAA,QAAA;;;;;;;;;;;ACc3B,UAAMA,IAASzO,EAAmC,UAAU,6CAA6C,GACnG2N,IAAkB9K,EAAS,MAC7BzB,EAAQ,qDAAqDqN,EAAO,YAAYxB,EAAA,KAAW,CAAC;qBAlBjEyB,EAAAA,OAAO,gBAAlCvB,EAEsB6D,IAAA;AAAA;MAFsB,SAAOrD,EAAA,KAAe;AAAA,IAAA;iBAC9D,MAAQ;AAAA,QAARH,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;8BAEZN,EAAuD6D,IAAA;AAAA;MAA1B,SAAOrD,EAAA,KAAe;AAAA,IAAA;;;;;;;;;;ACiBvD,UAAMsD,IAAuBpO,EAAS,MAAMzB,EAAQ,0BAA0B6L,EAAA,KAAU,CAAC,GACnFiE,IAAuBrO,EAAS,MAClCzB;AAAA;AAAA,MAEI;AAAA,MACA6L,EAAA;AAAA,IAAA,CACH;2BA1BDE,EAIuBwC,IAAA;AAAA,MAJA,SAAOsB,EAAA,KAAoB;AAAA,MAAG,OAAAvV,EAAAA;AAAAA,IAAAA;iBACjD,MAEM;AAAA,QAFNyV,EAEM,OAAA;AAAA,UAFA,SAAOD,EAAA,KAAoB;AAAA,QAAA;UAC7B1D,EAAQC,EAAA,QAAA,SAAA;AAAA,QAAA;;;;;;;;;;;ACwBpB,UAAMgB,IAASzO,EAAmC,UAAU,+CAA+C,GACrG2N,IAAkB9K,EAAS,MAC7BzB;AAAA,MACI;AAAA,MACAqN,EAAO;AAAA,MACPxB,EAAA;AAAA,IAAA,CACH;2BAhCDE,EAWwBuD,IAAA;AAAA,MAXA,SAAO/C,EAAA,KAAe;AAAA,IAAA;iBAC1C,MAAA;;AAIO;AAAA,WAJKP,IAAAA,EAAAqB,CAAA,EAAO,YAAPrB,QAAAA,EAAgB,SAA5BI,EAIOC,iCAJP,MAAA;;AAIO;AAAA,eAHHP,EAAA,EAAA,GAAAsC,EAEeC,GAAA,MAAAC,IAFgBtC,IAAAA,EAAAqB,CAAA,MAAArB,gBAAAA,EAAQ,iBAAlBU,YAArBX,EAEeiE,IAAA;AAAA,gBAFwC,KAAKtD,EAAO;AAAA,gBAAM,OAAOA,EAAO;AAAA,cAAA;2BACnF,MAAkB;AAAA,kBAAfgD,EAAAC,EAAAjD,EAAO,KAAK,GAAA,CAAA;AAAA,gBAAA;;;;eAGvBN,EAIOC,iCAJP,MAIO;AAAA,YAHHoB,EAEeuC,IAAA;AAAA,cAFD,UAAA;AAAA,cAAU,OAAO;AAAA,YAAA;yBAC3B,MAAmD;AAAA,oBAAhDC,EAAAA,IAAG,kBAAA,sBAAA,CAAA,GAAA,CAAA;AAAA,cAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACetB,UAAM5C,IAASzO,EAAmC,UAAU,+CAA+C,GACrG2N,IAAkB9K,EAAS,MAC7BzB;AAAA;AAAA,MAEI;AAAA,MACA;AAAA,MACA;AAAA,QACI,QAAQqN,EAAO;AAAA,QACf,oFAAoF,CAACA,EAAO;AAAA,QAC5F,uEAAuE,CAACA,EAAO;AAAA,QAC/E,kEAAkEA,EAAO;AAAA,QACzE,2DAA2DA,EAAO;AAAA,MAAA;AAAA,MAEtExB,EAAA;AAAA,IAAA,CACH;2BArCDE,EAMwBsD,IAAA;AAAA,MANA,SAAO9C,EAAA,KAAe;AAAA,IAAA;iBAC1C,MAAA;;AAAqE;AAAA,UAArEkB,EAAqEC,IAAA,EAAhD,OAAM,yCAAuC;AAAA,UAClED,EAAgHzB,EAAAkE,EAAA,GAAA,EAA9F,OAAM,uFAAqF;AAAA,WAClGlE,IAAAA,EAAAqB,CAAA,MAAArB,QAAAA,EAAQ,UAAnBF,KAAAsC,EAEM,OAFN+B,IAEM;AAAA,YADF1C,EAAoDzB,EAAAoE,EAAA,GAAA,EAA9B,OAAM,uBAAqB;AAAA,UAAA;;;;;;;;;ACQ7D,UAAM/C,IAASzO;AAAA,MACX;AAAA,MACA;AAAA,IAAA,GAEEC,IAAe4C,EAAS,MACrB4L,EAAO,SAILnF,EAAqB,UAAUmF,EAAO,OAAO,CAAC,CAAC,IAAI,UAAUA,EAAO,OAAO,CAAC,CAAC,EAAE,IAH3E,IAId;qBAtBYxO,EAAA,cAATuP,EAEI,KAAA;AAAA;MAFoB,IAAE,GAAKpC,EAAAqB,CAAA,EAAO,EAAE;AAAA,IAAA,KACjCxO,EAAA,KAAY,GAAA,GAAAsR,EAAA;;;;;;;;;;;;;;;;;;;;;ACyBvB,UAAM,EAAE,YAAAE,EAAA,IAAeC,GAAA;sBA1BnBxE,EAAA,GAAAC,EAOiBwE,IAPjBtE,EAOiB,EAPA,KAAKD,EAAAqE,CAAA,KAAoBvC,EAAAA,QAAM;AAAA,MAAG,uBAAkBc,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAE2B,EAAAA,MAAK,qBAAsB3B,CAAM;AAAA,IAAA;iBACpG,MAAe;AAAA,QAAfpB,EAAegD,EAAA;AAAA,QACfrE,EAIOC,yBAJP,MAIO;AAAA,UAHHoB,EAAiBD,EAAA;AAAA,UACjBC,EAAyDiD,IAAA,EAApC,OAAM,6BAA2B;AAAA,UACtDjD,EAAiBkD,EAAA;AAAA,QAAA;;;;;;;;AC8B7B,UAAMC,IAAgB5I,GAAK,iBAAA,GACrBjO,IAAU0H,EAAS,MAAM,CAAC,MAAM,GAAGuG,GAAK,OAAO,CAAC;AAEtD,aAAS6I,EAAatJ,GAA+B;AACjD,cACKA,KAAUpO,EAAQ,QAAQoO,CAAM,MACjCW,EAAqB,0BAA0B,sBAAsB;AAAA,QACjE,QAAQ/O,EAAQ,QAAQyX,CAAa,KAAKA;AAAA,MAAA,CAC7C;AAAA,IAET;2BA7CI7E,EAmBS+E,IAAA;AAAA,MAlBIC,YAAAA,EAAAA,MAAM;AAAA,MAANA,uBAAAA,EAAAA,CAAAA,MAAAA,EAAAA,CAAAA,IAAAA,CAAAA,MAAAA,EAAAA,MAAM,SAAMlC;AAAA,MACrB,OAAM;AAAA,MACN,IAAG;AAAA,MACF,SAAA9U,EAAA;AAAA,MACA,iBAAe8W;AAAA,IAAA;iBAEhB,MASM;AAAA,QATNd,EASM,OATNI,IASM;AAAA,UARF1C,EAEcgD,IAAA,EAFD,OAAM,6BAAyB;AAAA,uBACxC,MAAwC;AAAA,kBAArCR,EAAAA,IAAG,mBAAA,UAAA,CAAA,GAAA,CAAA;AAAA,YAAA;;;UAEVxC,EAIEuD,GAAA;AAAA,YAHE,YAAS;AAAA,YACT,gBAAa;AAAA,YACb,OAAM;AAAA,UAAA;;QAGdvD,EAA+EwD,GAAA;AAAA,UAAvE,SAAQ;AAAA,UAAS,IAAIzD;AAAAA,UAAe,OAAM;AAAA,QAAA;QAClDC,EAAiBkD,EAAA;AAAA,MAAA;;;;ICfzBO,KAA8B;AAAA,EAC1B;AAAA,IACI,UAAU;AAAA,IACV,WAAWC;AAAAA,EAAA;AAEnB,GCGMlK,KAAW,EAAE,OAAOe,GAAA,GAI1BoJ,KAA4B;AAAA,EACxB,MAAM,QAAQ/K,GAAK;;AACf,KAAAnM,IAAAmM,EAAI,OAAO,kBAAiB,OAA5BnM,EAA4B,KAAO+N,KACnC5B,EAAI,OAAO,iBAAiB,MAAM6B,GAElChL,GAAS,QAAQ,CAACI,MAAYO,EAAI,WAAWP,CAAO,CAAC,GAErD,MAAM0J,GAAaX,GAAKY,EAAQ;AAAA,EACpC;AACJ;;;;;;;;;;;;ACFA,UAAM5I,IAAQkE,GAAA,GACRgN,IAAQ8B,GAAA,GACRzL,IAAWnE,EAAS,MAClB8N,EAAM,UACCA,EAAM,UAAU,IAAIxQ,EAAW,EAAE,KAAK,EAAE,IAI/C8M,EAAA,SACCA,EAAA,YACIA,EAAA,cACK3D,EAAqB2D,WAASA,EAAA,aAAaA,EAAA,cAAc,EAAE,IAC3D5D,GAAU4D,EAAA,SAASA,EAAA,cAAc,CAAA,CAAE,GAEpD,GACK7G,IAAOvD,EAAS,MAAM;AACxB,UAAI,CAACmE,EAAS;AACV,eAAO;AAGX,UAAI0L,IAAe3L,GAAeC,EAAS,KAAK;AAEhD,aAAIiG,EAAA,WACAyF,IAAeA,EAAa,QAAQ,OAAO,QAAQ,EAAE,QAAQ,QAAQ,SAAS,IAG3EA;AAAA,IACX,CAAC,GACKC,IAAO,MACTC,GAAE3F,EAAA,OAAOA,EAAA,SAAS,SAAS,QAAQ;AAAA,MAC/B,WAAW7G,EAAK;AAAA,MAChB,SAAAyM;AAAA,MACA,GAAGpT;AAAA,MACH,OAAO,GAAGA,EAAM,SAAS,EAAE,IAAIwN,EAAA,SAAS,KAAK,OAAO;AAAA,IAAA,CACvD;AAEL,mBAAe4F,EAAQ3V,GAAc;;AACjC,YAAM,EAAE,QAAA4V,MAAW5V;AAEnB,UAAI6V,GAAaD,GAAQ,WAAW,KAAKA,EAAO,QAAQ,gBAAgB;AACpE,SAAA/U,KAAAzC,IAAA2R,cAAA,gBAAA3R,EAAUwX,EAAO,QAAQ,oBAAzB,QAAA/U,EAAA,KAAAzC;AAEA;AAAA,MACJ;AAEA,UAAIyX,GAAaD,GAAQ,iBAAiB,KAAKA,EAAO,QAAQ,eAAe;AACzE,cAAMjN,IAASe,GAAA;AAEf,QAAIf,MACA3I,EAAM,eAAA,GAEN2I,EAAO,MAAMiN,EAAO,QAAQ,aAAa;AAG7C;AAAA,MACJ;AAAA,IACJ;2BA9EI3F,EAAQwF,CAAA;AAAA;;;;;;;;;;;;;;;;AC4BZ,UAAMK,IAAoBnQ,EAAS,MAAMzB,EAAQ6L,EAAA,OAAW,oCAAoC,CAAC;2BA5B7FuC,EAWM,OAAA;AAAA,MAXD,OAAKyD,EAAA,CAAC,aAAW,EAAA,YAAuB3I,EAAAA,WAAM,YAAA,CAAA;AAAA,IAAA;MAC/C6G,EAKM,OALNI,IAKM;AAAA,QAJFJ,EAEK,MAAA;AAAA,UAFA,IAAI+B,EAAAA;AAAAA,UAAS,OAAM;AAAA,QAAA,KACjBC,EAAAA,KAAK,GAAA,GAAAC,EAAA;AAAA,QAEIC,EAAAA,oBAAhBlG,EAAsFiF,GAAA;AAAA;UAAxD,MAAMiB,EAAAA;AAAAA,UAAa,OAAM;AAAA,QAAA;;MAG3DlC,EAEM,OAAA;AAAA,QAFA,SAAO6B,EAAA,KAAiB;AAAA,MAAA;QAC1BxF,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;;;;;;;;;;;;;;ACkCpB,UAAMO,IAAO4B,GACPrM,IAAOzD,GAA8B,QAAQ,IAAI,GACjDyC,IAASM,EAAS,MAChB,CAACU,KAAQ,CAAC0J,EAAA,OACH,OAGJ1J,EAAK,OAAO0J,EAAA,IAAI,KAAK,IAC/B,GAEKsB,IAAS;AAAA,MACX,IAAI,UAAUvC,GAAA,CAAM;AAAA,MACpB,MAAMnJ,EAAS,MAAMoK,EAAA,IAAI;AAAA,MACzB,OAAOpK,EAAS,MAAMoK,EAAA,KAAK;AAAA,MAC3B,aAAapK,EAAS,MAAMoK,aAAW;AAAA,MACvC,OAAOpK,EAAS,MACRU,KAAQ0J,EAAA,OACD1J,EAAK,cAAc0J,MAAI,IAG3BA,EAAA,UACV;AAAA,MACD,QAAQnK,GAASP,CAAM;AAAA,MACvB,UAAUM,EAAS,MAAM;AACrB,YAAI,GAACoK,EAAA,QAAQ,CAAC1J;AAId,iBAAOA,EAAK,cAAc0J,EAAA,IAAI,EAAE,SAAS,UAAU;AAAA,MACvD,CAAC;AAAA,MACD,OAAOvR,GAAO;AACV,YAAI6H,KAAQ0J,EAAA,MAAM;AACd,UAAA1J,EAAK,cAAc0J,EAAA,MAAMvR,CAAuB;AAEhD;AAAA,QACJ;AAEA,QAAAsS,EAAK,qBAAqBtS,CAAK;AAAA,MACnC;AAAA,IAAA;AAGJ,WAAAmU,EAAatB,CAAM,GAEnB3I,GAAY,MAAM;AACd,MAAI,CAACqH,EAAA,eAAe,CAAC1K,EAAO,SAK5B,QAAQ,KAAK,4DAA4D;AAAA,IAC7E,CAAC,mBA7FGiN,EAcM,OAAA;AAAA,MAdA,SAAOvC,EAAA,KAAS;AAAA,IAAA;MACLqG,EAAAA,cAAb9D,EAEQ,SAAA;AAAA;QAFa,KAAKjB,EAAO;AAAA,QAAK,SAAOgF,EAAAA,UAAU;AAAA,MAAA,KAChDD,EAAAA,KAAK,GAAA,IAAA/B,EAAA;MAEZ1C,EASazB,OATbC,EASa;AAAA,QARR,IAAIkB,EAAO;AAAA,QACX,MAAArT,EAAAA;AAAAA,QACA,eAAaqT,EAAO,MAAM;AAAA,MAAA,GACnBiC,EAAAA,QAAM;AAAA,QACb,OAAOgD,EAAAA;AAAAA,QACP,uBAAkBxD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAE2B,EAAAA,MAAK,qBAAsB3B,CAAM;AAAA,MAAA;mBAEtD,MAAmC;AAAA,UAAnCpB,EAAmCzB,EAAAqG,EAAA,GAAA;AAAA,YAArB,SAAOC,EAAAA,UAAU;AAAA,UAAA;;;;;;;;;2BCZvCvG,EAIEwG,IAAA;AAAA,MAHE,OAAM;AAAA,MACN,eAAY;AAAA,MACZ,eAAY;AAAA,IAAA;;;;;2BCHhBxG,EAMUyG,IAAA;AAAA,MALN,YAAS;AAAA,MACR,OAAOvC,EAAAA,IAAG,kBAAA,WAAA;AAAA,MACV,aAAaA,EAAAA,IAAG,6BAAA,4DAAA;AAAA,IAAA;iBAEjB,MAAkE;AAAA,QAAlExC,EAAkEgF,IAAA;AAAA,UAAjDC,YAAAA,EAAAA,QAAQ;AAAA,UAARA,uBAAAA,EAAAA,CAAAA,MAAAA,EAAAA,CAAAA,IAAAA,CAAAA,MAAAA,EAAAA,QAAQ,QAAK7D;AAAA,UAAE,mBAAgB;AAAA,QAAA;;;;;ICFxD3R,KAA8B;AAAA,EAC1B;AAAA,IACI,UAAU;AAAA,IACV,WAAWyV;AAAAA,EAAA;AAEnB;ACPA,MAAqBC,WAA0B7Z,GAAQ;AAAC;ACexD,MAAMkO,KAAW,EAAE,SAAS2E,GAAA,GACtBiH,KAAiC,CAAChY,OAChCuN,GAAgBvN,CAAK,EAAE,SAAS,+DAA+D,KAInG+Q,GAAO,OAAO/Q,CAAK,GAEZ;AAGX,SAASiY,GAAkBzM,GAAkB0M,IAA4B,MAAM,IAAa;AACxF,QAAMC,IAA6B,CAACnY,MAAUkY,EAAYlY,CAAK,KAAKgY,GAAiBhY,CAAK;AAE1F,EAAAwL,EAAI,OAAO,eAAe2M,GAC1B,WAAW,UAAU,CAAClX,GAAO2L,GAAGwL,GAAIC,GAAKrY,MAAUmY,EAAanY,KAASiB,CAAK,GAC9E,WAAW,uBAAuB,CAACA,MAAUkX,EAAalX,EAAM,MAAM;AAC1E;AAKA,MAAAqF,KAA4B;AAAA,EACxB,MAAM,QAAQkF,GAAKtM,GAAS;AACxB,IAAA+Y,GAAkBzM,GAAKtM,EAAQ,WAAW,GAE1CmD,GAAS,QAAQ,CAACI,MAAYO,EAAI,WAAWP,CAAO,CAAC,GAErD,MAAM0J,GAAaX,GAAKY,EAAQ;AAAA,EACpC;AACJ,GCnCAkM,KAA4B;AAAA,EACxB,MAAM,UAAU;AACZ,IAAK/L,SAIL,WAAW,iBAAiB;AAAA,MACxB,IAAK,IAAI7K,MAA4CQ,EAAO,GAAG,GAAGR,CAAI;AAAA,MACtE,SAAS,CAACzC,MAAS+D,EAAI,QAAQ/D,CAAI;AAAA,IAAA;AAAA,EAE3C;AACJ;;;;;;;;;;;;;;;;;;;;;;;;;ACLA,UAAMsZ,IAAW5R,EAAkD,IAAI,GACjE,EAAE,OAAAiH,EAAA,IAAUF,GAAA;AAIlB,IAAAkG,EAAsC,EAAE,UAAA2E,GAAU;AAElD,UAAM,EAAE,YAAA/C,EAAA,IAAeC,GAAA;AAEvB,WAAAlD,GAAQ,oBAAoBgG,CAAQ,mBA1BhCrH,EAIaC,EAAAqH,EAAA,GAAA;AAAA,MAJA,KAAKrH,EAAAqE,CAAA;AAAA,MAAY,MAAA;AAAA,MAAM,iBAAWzB,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAE/L,EAAAA,cAAc+L,KAAU7C,EAAAvD,CAAA,EAAA;AAAA,IAAK;iBAC1E,MAEe;AAAA,QAFfgF,EAEezB,EAAAsH,EAAA,GAAA,MAAA;AAAA,qBADX,MAAe;AAAA,YAAflH,EAAeC,EAAA,QAAA,WAAA,EAAR,OAAAL,EAAAvD,CAAA,EAAA,CAAK;AAAA,UAAA;;;;;;;;;;ACcxB,UAAM,EAAE,OAAA8K,EAAA,IAAUhL,GAAA,GACZiL,IAAmB1U,GAAwC,kBAAkB,GAC7EsU,IAAWK,EAAe,aAAa;AAE7C,WAAAjP,GAAY,MAAOgP,EAAiB,QAAQJ,EAAS,KAAM,mBApBvDrH,EAIgBC,EAAA0H,EAAA,GAAA,EAJD,KAAI,iBAAa;AAAA,iBAC5B,MAAQ;AAAA,QAARtH,EAAQC,EAAA,QAAA,SAAA;AAAA,QAE0BL,EAAAuH,CAAA,UAAlCxH,EAA2CC,EAAA2H,EAAA,GAAA;AAAA;UAA1B,IAAI3H,EAAAuH,CAAA;AAAA,QAAA;;;;;;;;;;;;sBCHzBzH,EAAA,GAAAC,EAEoBC,aAFO8B,EAAAA,MAAM,CAAA,GAAA;AAAA,iBAC7B,MAAQ;AAAA,QAAR1B,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;;;;;;;;sBCDZP,EAAA,GAAAC,EAEgBC,aAFO8B,EAAAA,MAAM,CAAA,GAAA;AAAA,iBACzB,MAAQ;AAAA,QAAR1B,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;;;;;;;sBCDZP,EAAA,GAAAC,EAEcC,aAFO8B,EAAAA,MAAM,CAAA,GAAA;AAAA,iBACvB,MAAQ;AAAA,QAAR1B,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;iDCgFVuH,KAAiB1Q,GAAA;;;;;;;;;;;;;;;AAMvB,UAAMkH,IAWFkC,EAAAT,GAAA,CAAA,SAAA,gBAAA,SAAA,eAAA,eAAA,cAAA,eAAA,cAAA,oBAAA,CAAA;AASJ,IAAA4C,EAAsC;AAAA,MAClC,UAAUhN,EAAS;;AAAM,gBAAAvH,IAAA2Z,EAAO,UAAP,gBAAA3Z,EAAc;AAAA,OAAQ;AAAA,IAAA,CAClD;AAED,UAAM,EAAE,YAAAmW,GAAY,YAAAyD,EAAA,IAAexD,GAAA,GAC7B,EAAE,IAAAvF,GAAI,SAAAgJ,EAAA,IAAYxL,GAAA,GAClBsL,IAASC,GACTnL,IAAQH,GAAA,GACRwL,IAAevS;AAAA,MACjB,MAAA;;AAAM,eAAAsS,EAAQ,WAAS7Z,IAAA4Q,GAAO,MAAM,WAAA,EAAa,KAAK,CAACnC,OAAUA,GAAM,QAAQ,KAAK,MAA7D,gBAAAzO,EAAgE,QAAO6Q,EAAG;AAAA;AAAA,IAAA,GAE/FkJ,IAAoBxS,EAAS,MAAMqJ,GAAO,MAAM,KAAK,CAACnC,MAAUA,EAAM,QAAQ,KAAK,CAAC,GACpFuL,IAAoBzS,EAAS,MAAMqJ,GAAO,MAAM,KAAK,CAACnC,MAAUiL,GAAe,IAAIjL,CAAK,CAAC,CAAC,GAC1FwL,IAAe1S,EAAS,MAAOoK,gBAAc,KAAK,EAAE,oBAAoB,QAAY,GACpFuI,IAAuB3S,EAAS,MAClCzB;AAAA,MACI;AAAA,MACA,EAAE,QAAQ,CAAC6L,EAAA,SAASA,EAAA,aAAa,gBAAgB,CAACwI,EAAiB,MAAA;AAAA,MACnExI,EAAA;AAAA,IAAA,CACH,GACCwI,IAAmB5S,EAAS,MAAMoK,EAAA,cAAeA,EAAA,sBAAsBZ,EAAG,MAAO,GACjFqJ,IAAuB7S,EAAS,MAClCzB;AAAA,MACI;AAAA,MACAqU,EAAiB,QACX;AAAA,QACE;AAAA,QACAT,GAAe,IAAIjL,EAAM,KAAK,KAAK;AAAA,QACnCqL,EAAa,QAAQ,kBAAkB;AAAA,MAAA,IAEzC;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACAJ,GAAe,IAAIjL,EAAM,KAAK,KACxB;AAAA,QACNqL,EAAa,QAAQ,0BAA0B;AAAA,MAAA;AAAA,MAEvDnI,EAAA;AAAA,IAAA,CACH;AAEL,WAAAhJ,GAAU,MAAMgG,GAAM,GAAG,EAAE,KAAK,MAAM+K,GAAe,IAAIjL,EAAM,KAAK,CAAC,CAAC,oBAnJlEoD,EAuDgBwI,IAvDhBtI,EAuDgB7B,GArDC;AAAA,MACZ,KAAG,CAAGyJ,OAAW7H,EAAAqE,CAAA,EAAWwD,EAAM;AAAA,MAClC,YAAA/Q,EAAAA;AAAAA,IAAAA;MAED,SAAAgM,EAAA,CAQE,EAbQ,OAAArG,SAAK;;AAAA;AAAA,UAKfgF,EAQE+G,IAAA;AAAA,YAPE,UAAM,uEAAqE;AAAA,mEACIN,EAAA;AAAA,+BAAkDha,KAAA+Z,EAAA,UAAA,gBAAA/Z,GAAmB,QAAO8R,EAAAjB,CAAA,KAAE,CAAMkJ,EAAA,WAAqBjI,KAAAA,EAAAlB,EAAA,EAAM,CAAA,MAANkB,gBAAAA,GAAW,QAAOA,EAAAjB,CAAA;AAAA,4BAAmCkJ,EAAA;AAAA,sBAA2CI,EAAA;AAAA,YAAA;;UAO5R5G,EAuCuBgH,IAvCvBxI,EAuCuBkI,SAvCmB,EAAG,OAAOG,EAAA,MAAA,CAAoB,GAAA;AAAA,uBACpE,MAaM;AAAA,cAZKxR,CAAAA,EAAAA,eAAe4R,EAAAA,oBAD1BtG,EAaM,OAAA;AAAA;gBAXF,OAAKyD,EAAA,CAAC,wCAAsC,EAAA,mBAAA,CACdwC,EAAA,OAAgB,CAAA;AAAA,cAAA;gBAE9CtE,EAOS,UAAA;AAAA,kBANL,MAAK;AAAA,kBACL,OAAM;AAAA,kBACL,iBAAOtH,GAAA;AAAA,gBAAK;kBAEbsH,EAA2D,QAA3DiC,IAA2DrC,EAAlCM,EAAAA,IAAG,YAAA,OAAA,CAAA,GAAA,CAAA;AAAA,kBAC5BxC,EAA4BzB,EAAA2I,EAAA,GAAA,EAAjB,OAAM,UAAQ;AAAA,gBAAA;;cAKvB5C,EAAAA,cADVhG,EAUqB6I,IAAA;AAAA;gBARjB,UAAM,mDAAiD;AAAA,6BACdC,EAAAA;AAAAA,kBAAyC5C,QAAAA,EAAAA,gBAAgB6C,EAAAA;AAAAA,kBAAgD7C,QAAAA,CAAAA,EAAAA,eAAe6C,EAAAA;AAAAA,gBAAAA;;2BAMjK,MAAiC;AAAA,kBAAjCrH,EAAiCuD,GAAA;AAAA,oBAAtB,MAAMe,EAAAA;AAAAA,oBAAO,QAAA;AAAA,kBAAA;;;;cAIlBE,EAAAA,oBADVlG,EAM2BgJ,IAAA;AAAA;gBAJvB,OAAKlD,EAAA,CAAC,kBAAgB,EAAA,WACDiD,EAAAA,mBAAiB,CAAA;AAAA,cAAA;2BAEtC,MAAwE;AAAA,kBAAxErH,EAAwEuD,GAAA;AAAA,oBAA7D,MAAMiB,EAAAA;AAAAA,oBAAa,OAAM;AAAA,kBAAA;;;;cAGxClC,EAEM,OAAA;AAAA,gBAFA,SAAOqE,EAAA,KAAoB;AAAA,cAAA;gBAC7BhI,EAAeC,EAAA,QAAA,WAAA,EAAR,OAAA5D,IAAK;AAAA,cAAA;;;;;;;;;;ACzCrB,SAASuM,GAAc5K,GAAwB;AAClD,QAAM6K,IAAgBxT,EAAS,MAAM2I,EAAM,SAASlC,EAAqB,YAAY,OAAO,CAAC,GACvF2M,IAAcpT,EAAS,MAAM,CAAC2I,EAAM,KAAK;AAE/C,SAAO,EAAE,eAAA6K,GAAe,aAAAJ,EAAA;AAC5B;;;;;;;;ACNA,UAAMzK,IAAQyB,GACR,EAAE,eAAAoJ,GAAe,aAAAJ,MAAgBG,GAAc5K,CAAK;AAE1D,WAAAqE,EAAA,mBAdI1C,EAEQmJ,IAAA;AAAA,MAFA,OAAOlJ,EAAAiJ,CAAA;AAAA,MAAgB,gBAAcjJ,EAAA6I,CAAA;AAAA,IAAA;iBACzC,MAA4B;AAAA,QAA5BpH,EAA4BuD,GAAA,EAAjB,MAAM1H,EAAAA,QAAAA,GAAO,MAAA,GAAA,CAAA,MAAA,CAAA;AAAA,MAAA;;;;;;;;;;;ACShC,QAAI6L;AAEJ,UAAMvI,IAAO4B;AAEb,WAAAhK,GAAY,CAAC4Q,MAAc;;AACvB,MAAAD,KAAA,QAAAA,KACAA,KAAYjb,IAAA2R,EAAA,SAAA,gBAAA3R,EAAM,GAAG,UAAU,MAAM0S,EAAK,QAAQ,IAElDwI,EAAU,MAAMD,KAAA,gBAAAA,GAAa;AAAA,IACjC,CAAC,GAED/H,GAAQ,QAAQvB,MAAI,mBArBhBuC,EAEO,QAAA;AAAA,MAFA,oCAAgBjM,EAAAA,OAAOA,OAAK,WAAWqO,EAAAA,MAAK,QAAA,GAAA,CAAA,SAAA,CAAA;AAAA,IAAA;MAC/CpE,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;AC2BT,SAASgJ,GAAgBjL,GAA0B;AACtD,QAAMjI,IAAOE;AAAA,IACT,OAAO,QAAQ+H,EAAM,cAAc,CAAA,CAAE,EAAE;AAAA,MACnC,CAACzK,GAAQ,CAAC7F,GAAM8P,CAAQ,OAAO;AAAA,QAC3B,CAAC9P,CAAI,GAAG;AAAA,UACJ,MAAM;AAAA,UACN,SAAS8P,EAAS;AAAA,UAClB,UAAUA,EAAS,WAAW,aAAa;AAAA,QAAA;AAAA,QAE/C,GAAGjK;AAAA,MAAA;AAAA,MAEP,CAAA;AAAA,IAAC;AAAA,EACL,GAGEsV,IAAgBxT,EAAS,MAAM2I,EAAM,SAASlC,EAAqB,cAAc,SAAS,CAAC,GAC3F2M,IAAcpT,EAAS,MAAM,CAAC2I,EAAM,KAAK,GACzCkL,IAAqB7T,EAAS,MAAM2I,EAAM,cAAclC,EAAqB,aAAa,IAAI,CAAC,GAC/FqN,IAAqB9T,EAAS,MAAM2I,EAAM,cAAclC,EAAqB,aAAa,QAAQ,CAAC;AAEzG,SAAO,EAAE,MAAA/F,GAAM,eAAA8S,GAAe,aAAAJ,GAAa,oBAAAS,GAAoB,oBAAAC,EAAA;AACnE;;;;;;;;;;;;;;;;;;;ACDA,UAAMnL,IAA4CkC,EAAAT,GAAA,CAAA,eAAA,CAAA,GAC5C,EAAE,MAAA1J,GAAM,eAAA8S,GAAe,aAAAJ,GAAa,oBAAAS,GAAoB,oBAAAC,EAAA,IAAuBF,GAAgBjL,CAAK;AAG1G,WAAAqE,EAAA,mBAnDI1C,EAgCQmJ,IAAA;AAAA,MA9BH,OAAOlJ,EAAAiJ,CAAA;AAAA,MACP,gBAAcjJ,EAAA6I,CAAA;AAAA,MACf,YAAA;AAAA,IAAA;MAEA,SAAA/F,EAAA,CAyBO,EA9BG,OAAArG,QAAK;AAAA,QAKfgF,EAyBO+H,IAAA;AAAA,UAzBA,MAAAxJ,EAAA7J,CAAA;AAAA,UAAM,UAAM,CAAA0M,MAAEpG,EAAK,CAAA,IAAQuD,EAAA7J,CAAA,EAAK,MAAI,CAAA;AAAA,QAAA;qBACvC,MAAqC;AAAA,YAArCsL,EAAqCuD,GAAA;AAAA,cAA1B,MAAM1H,EAAAA;AAAAA,cAAU,SAAAmM,EAAAA;AAAAA,YAAAA;YAEjB9L,EAAAA,cAAVmC,EAAA,GAAAsC,EAYK,MAZL+B,IAYK;AAAA,eAXDrE,EAAA,EAAA,GAAAsC,EAUKC,GAAA,MAAAC,EAV0B3E,EAAAA,YAAU,CAA7BC,GAAU9P,YAAtBsU,EAUK,MAAA,EAVuC,KAAKtU,KAAI;AAAA,gBACjDiW,EAQQ,SARRiC,IAQQ;AAAA,qBAPJjC,EAKC,SAAA;AAAA,oBAJY,uBAAA,CAAAlB,MAAA7C,EAAA7J,CAAA,EAAKrI,CAAI,IAAA+U;AAAA,oBAClB,MAAK;AAAA,oBACJ,UAAUjF,EAAS;AAAA,oBACpB,OAAM;AAAA,kBAAA;oBAHG,CAAA8L,IAAA1J,EAAA7J,CAAA,EAAKrI,CAAI,CAAA;AAAA,kBAAA;kBAKtBiW,EAAgD,QAAhD4F,IAAgDhG,EAAxB/F,EAAS,KAAK,GAAA,CAAA;AAAA,gBAAA;;;YAKlDmG,EAOM,OAPN6F,IAOM;AAAA,cANFnI,EAESwD,GAAA;AAAA,gBAFA,SAAS4E,EAAAA;AAAAA,gBAAe,QAAA;AAAA,cAAA;2BAC7B,MAAwB;AAAA,sBAArB7J,EAAAsJ,CAAA,CAAkB,GAAA,CAAA;AAAA,gBAAA;;;cAEVQ,EAAAA,6BAAf/J,EAESkF,GAAA;AAAA;gBAFiB,SAAS8E,EAAAA;AAAAA,gBAAgB,gBAAOtN,EAAK,EAAA;AAAA,cAAA;2BAC3D,MAAwB;AAAA,sBAArBuD,EAAAuJ,CAAA,CAAkB,GAAA,CAAA;AAAA,gBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACezC,UAAMnL,IAAQyB,GACRmK,IAAUvU,EAAS,MACrB2I,EAAM,OAAO,cAAc,GAAGA,EAAM,OAAO,KAAK,KAAKA,EAAM,OAAO,WAAW,KAAKA,EAAM,OAAO,KAAK,GAClG6L,IAAkBxU,EAAS,MAAM;AACnC,UAAI,CAAC5D,EAAI;AACL,eAAO;AAGX,YAAMqY,IAAa,mBAAmBF,EAAQ,KAAK,GAC7CG,IAAY;AAAA,QACd;AAAA,UACI;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACAC;AAAA,YACIhM,EAAM,OAAO,WAAW;AAAA,YACxB,OAAO8L,EAAW,SAASrY,EAAI,UAAU;AAAA,UAAA,EAC3C,KAAA;AAAA,UACF;AAAA,QAAA,EACF,KAAK;AAAA,CAAI;AAAA,MAAA;AAGf,aAAO,GAAGA,EAAI,SAAS,qBAAqBqY,CAAU,SAASC,CAAS;AAAA,IAC5E,CAAC,GACKE,IAAU5U,EAAS,MACrBjI;AAAA,MACI;AAAA,QACI;AAAA,UACI,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,eAAe8c;AAAA,UACf,MAAM,QAAQ;AACV,kBAAM,UAAU,UAAU,UAAU,GAAGN,EAAQ,KAAK;AAAA;AAAA,EAAO5L,EAAM,OAAO,OAAO,EAAE,GAEjFa,EAAG,MAAM/C,EAAqB,4BAA4B,uCAAuC,CAAC;AAAA,UACtG;AAAA,QAAA;AAAA,QAEJ;AAAA,UACI,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,eAAeqO;AAAA,UACf,QAAQ;AACJ,kBAAM1b,IAAQuP,EAAM,OAAO,SAASA,EAAM;AAEzC,mBAA+B,QAAQvP,GAGxC,QAAQ,MAAMA,CAAK,GAEnBoQ,EAAG;AAAA,cACC/C;AAAA,gBACI;AAAA,gBACA;AAAA,cAAA;AAAA,YACJ;AAAA,UAER;AAAA,QAAA;AAAA,MACJ;AAAA,MAEJ,CAACsO,MAAkB;AACf,QAAKP,EAAgB,SAIrBO,EAAc,KAAK;AAAA,UACf,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,eAAeC;AAAA,UACf,KAAKR,EAAgB;AAAA,QAAA,CACxB;AAAA,MACL;AAAA,IAAA,CACH;sBAnHDnK,EAAA,GAAAsC,EAcM,OAdN+B,IAcM;AAAA,cAbF/B,EAYOC,GAAA,MAAAC,EAZgB+H,EAAA,OAAO,CAAjBK,MAAbtK,EAYOC,EAAA,QAAA,WAZPJ,EAYO,EAAA,SAAA,GAAA,GAZiCyK,CAAM,GAA9C,MAYO;AAAA,QAXHjJ,EAUSwD,GAAA;AAAA,UATL,MAAK;AAAA,UACL,SAAQ;AAAA,UACR,OAAM;AAAA,UACL,MAAMyF,EAAO;AAAA,UACb,OAAOzG,MAAG,iBAAkByG,EAAO,EAAE,IAAIA,EAAO,WAAW;AAAA,UAC3D,SAAOA,EAAO;AAAA,QAAA;qBAEf,MAAwF;AAAA,YAAxF3G,EAAwF,QAAxFiC,IAAwFrC,EAA/DM,EAAAA,IAAG,iBAAkByG,EAAO,EAAE,IAAIA,EAAO,WAAW,CAAA,GAAA,CAAA;AAAA,kBAC7E3K,EAA0EiD,GAA1D0H,EAAO,aAAa,GAAA;AAAA,cAAE,OAAM;AAAA,cAAS,eAAY;AAAA,YAAA;;;;;;;;;;;;;;;ACIjF,UAAMtR,IAAO3D,EAAS,MACd,CAACoK,EAAA,gBAAgBA,kBAAgB,IAC1BA,EAAA,OAAO,QAGX,GAAGA,SAAO,KAAK,KAAKA,EAAA,aAAa,IAAIA,EAAA,YAAY,GAC3D;2BArBGE,EAAyBiF,GAAA;AAAA,MAAd,MAAA5L,EAAA;AAAA,MAAK,QAAA;AAAA,IAAA;;;ACab,SAASuR,GAAoBvM,GAA8B;AAC9D,QAAMwM,IAAoBpV,EAAI4I,EAAM,QAAQ,SAASA,EAAM,MAAM,IAAIA,EAAM,QAAQ,QAAQA,EAAM,MAAM,IAAI,CAAC,GACtGyM,IAAepV,EAAS,MAAM2I,EAAM,QAAQwM,EAAkB,KAAK,CAAgB,GACnFE,IAAUrV;AAAA,IACZ,MAAA;;AACI,eAAAvH,IAAA2c,EAAa,MAAM,YAAnB,gBAAA3c,EAA4B,WAC5BgO,EAAqB,uBAAuB,qCAAqC;AAAA;AAAA,EAAA,GAEnF6O,IAAqB7O,EAAqB,yBAAyB,sBAAsB,GACzF8O,IAAiB9O,EAAqB,qBAAqB,kBAAkB;AAEnF,SAAO;AAAA,IACH,mBAAA0O;AAAA,IACA,SAAAE;AAAA,IACA,gBAAAE;AAAA,IACA,oBAAAD;AAAA,IACA,cAAAF;AAAA,EAAA;AAER;;;;;;;;;;;ACmCA,UAAMzM,IAAQyB,GAER,EAAE,mBAAA+K,GAAmB,SAAAE,GAAS,gBAAAE,GAAgB,oBAAAD,GAAoB,cAAAF,EAAA,IAAiBF,GAAoBvM,CAAK;AAElH,WAAAqE,EAAA,mBAtEI1C,EA+CQmJ,IAAA;AAAA,MA9CH,OAAOjF,EAAAA,IAAG,iBAAA,cAAA;AAAA,MACX,gBAAA;AAAA,MACA,gBAAA;AAAA,MACA,OAAM;AAAA,MACN,iBAAc;AAAA,IAAA;iBAEd,MAoCM;AAAA,QApCNF,EAoCM,OApCNI,IAoCM;AAAA,UAnCFJ,EAiCK,MAjCLiC,IAiCK;AAAA,YAhCDjC,EA8BM,OA9BNkH,IA8BM;AAAA,cA7BFxJ,EAAoDzB,EAAAoE,EAAA,GAAA,EAA9B,OAAM,uBAAqB;AAAA,cACjD3C,EAKEyJ,IAAA;AAAA,gBAJE,OAAM;AAAA,gBACL,QAAQlL,EAAA6K,CAAA;AAAA,gBACR,kBAAgB7K,EAAA4K,CAAA,IAAiB;AAAA,gBACjC,iBAAepL,EAAAA,QAAQ;AAAA,cAAA;cAEhBA,EAAAA,QAAQ,SAAM,KAA1BM,KAAAsC,EAqBO,QArBPuH,IAqBO;AAAA,gBApBHlI,EASSwD,GAAA;AAAA,kBARL,MAAK;AAAA,kBACL,SAAQ;AAAA,kBACP,UAAUjF,EAAA4K,CAAA,MAAiB;AAAA,kBAC3B,cAAY5K,EAAA+K,CAAA;AAAA,kBACZ,OAAO/K,EAAA+K,CAAA;AAAA,kBACP,gCAAOH,EAAA;AAAA,gBAAA;6BAER,MAAmC;AAAA,oBAAnCnJ,EAAmCzB,EAAAmL,EAAA,GAAA,EAAjB,OAAM,UAAQ;AAAA,kBAAA;;;gBAEpC1J,EASSwD,GAAA;AAAA,kBARL,MAAK;AAAA,kBACL,SAAQ;AAAA,kBACP,UAAUjF,EAAA4K,CAAA,MAAsBpL,EAAAA,QAAQ,SAAM;AAAA,kBAC9C,cAAYQ,EAAAgL,CAAA;AAAA,kBACZ,OAAOhL,EAAAgL,CAAA;AAAA,kBACP,gCAAOJ,EAAA;AAAA,gBAAA;6BAER,MAAoC;AAAA,oBAApCnJ,EAAoCzB,EAAAoL,EAAA,GAAA,EAAjB,OAAM,UAAQ;AAAA,kBAAA;;;;;YAI7C3J,EAAkE4J,IAAA;AAAA,cAAxC,QAAQrL,EAAA6K,CAAA;AAAA,cAAc,OAAM;AAAA,YAAA;;UAE1C7K,EAAA6K,CAAA,EAAa,oBAA7B9K,EAAmGiF,GAAA;AAAA;YAAxD,MAAMhF,EAAA6K,CAAA,EAAa;AAAA,YAAa,OAAM;AAAA,UAAA;;QAErF9G,EAEM,OAFN6F,IAEM;AAAA,UADF7F,EAAyD,OAAA;AAAA,YAApD,OAAM;AAAA,YAA2B,aAAAJ,EAAQ3D,EAAQ8K,CAAA,CAAD;AAAA,UAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACdjE,QAAIQ;AACJ,UAAMC,IAAc/V,EAAI,CAAC,GACnBgW,IAAgB/V,EAAS,MAC3BzB,EAAQ,yFAAyF6L,EAAA,WAAW,CAAC,GAC3G4L,IAAkBhW,EAAS,MAC7BzB;AAAA,MACI;AAAA,MACA;AAAA,MACA6L,EAAA;AAAA,IAAA,CACH,GACC6L,IAAmBjW,EAAS,MAC1B,OAAOoK,EAAA,YAAa,WACbA,EAAA,WAGJ0L,EAAY,KACtB,GACKI,IAA0BlW,EAAS,MACrCiW,EAAiB,QAAQ,IAAI,QAAQA,EAAiB,QAAQ,KAAKA,EAAiB,SAAS,IAAI;AAErG,WAAA1U;AAAA,MACI,MAAM6I,EAAA;AAAA,MACN,MAAM;AACF,QAAAyL,KAAWA,EAAA,GAEXC,EAAY,QAAQ1L,EAAA,MAAMA,MAAI,WAAW,GACzCyL,IAAUzL,EAAA,OAAOA,EAAA,IAAI,UAAU,IAAI,EAAE,WAAW,CAACvR,MAAWid,EAAY,QAAQjd,GAAQ;AAAA,MAC5F;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,GAGtBiG,GAAY,MAAM+W,KAAWA,GAAS,cA9DlCxL,EAAA,GAAAsC,EAcM,OAdN+B,IAcM;AAAA,MAbFJ,EAAiG,OAAA;AAAA,QAA3F,SAAOyH,EAAA,KAAa;AAAA,QAAG,wCAAqCE,EAAA,SAAgB,GAAA,IAAA;AAAA,MAAA;MAExEC,EAAA,cADVvJ,EAIE,OAAA;AAAA;QAFG,SAAOqJ,EAAA,KAAe;AAAA,QACtB,sBAAmBE,EAAA,KAAuB,KAAA;AAAA,MAAA;MAE/C5H,EAMO,QANPiC,IAMOrC,EAJCM,EAAAA,IAAG,eAAA,wBAAA;AAAA,kBAAwEyH,EAAA,QAAgB;AAAA,MAAA;;;;ACMpG,SAASE,GAAgBxN,GAA0B;AACtD,QAAM6K,IAAgBxT,EAAS,MAAM2I,EAAM,SAASlC,EAAqB,cAAc,SAAS,CAAC,GAC3F2P,IAAkBpW;AAAA,IACpB,MAAM2I,EAAM,WAAWlC,EAAqB,wBAAwB,wBAAwB;AAAA,EAAA,GAE1F4P,IAAerW,EAAS,MAAM,OAAO2I,EAAM,YAAa,YAAY,CAAC,CAACA,EAAM,GAAG,GAC/EyK,IAAcpT,EAAS,MAAM,CAAC2I,EAAM,KAAK;AAE/C,SAAO,EAAE,eAAA6K,GAAe,iBAAA4C,GAAiB,aAAAhD,GAAa,cAAAiD,EAAA;AAC1D;;;;;;;;;;ACGA,UAAM1N,IAAQyB,GACR,EAAE,eAAAoJ,GAAe,iBAAA4C,GAAiB,aAAAhD,GAAa,cAAAiD,EAAA,IAAiBF,GAAgBxN,CAAK;AAE3F,WAAAqE,EAAA,mBA9BI1C,EAeQmJ,IAAA;AAAA,MAdJ,YAAA;AAAA,MACA,iBAAc;AAAA,MACb,OAAOlJ,EAAAiJ,CAAA;AAAA,MACP,gBAAAjJ,EAAA6I,CAAA;AAAA,MACA,OAAKhD,EAAA,EAAA,oBAAwB7F,EAAA8L,CAAA,GAAY,8CAAA,CAAiD9L,EAAA8L,CAAA,EAAA,CAAY;AAAA,IAAA;iBAEvG,MAKE;AAAA,QAJQ9L,EAAA8L,CAAA,UADV/L,EAKEgM,IAAA;AAAA;UAHG,UAAAC,EAAAA;AAAAA,UACA,KAAAC,EAAAA;AAAAA,UACD,OAAM;AAAA,QAAA,0CAEVlM,EAA2DC,EAAAkM,EAAA,GAAA;AAAA;UAAvC,OAAM;AAAA,QAAA;QAC1BzK,EAAoCuD,GAAA,EAAzB,MAAMhF,EAAA6L,CAAA,EAAA,GAAe,MAAA,GAAA,CAAA,MAAA,CAAA;AAAA,MAAA;;;;;;;;;;;;;;;ACAxC,UAAMjL,IAAO4B,GACPrM,IAAOzD,GAA8B,QAAQ,IAAI,GACjDyC,IAASM,EAAS,MAChB,CAACU,KAAQ,CAAC0J,EAAA,OACH,OAGJ1J,EAAK,OAAO0J,EAAA,IAAI,KAAK,IAC/B,GAEKsB,IAAS;AAAA,MACX,IAAI,SAASvC,GAAA,CAAM;AAAA,MACnB,MAAMnJ,EAAS,MAAMoK,EAAA,IAAI;AAAA,MACzB,OAAOpK,EAAS,MAAMoK,EAAA,KAAK;AAAA,MAC3B,aAAapK,EAAS,MAAMoK,aAAW;AAAA,MACvC,OAAOpK,EAAS,MACRU,KAAQ0J,EAAA,OACD1J,EAAK,cAAc0J,MAAI,IAG3BA,EAAA,UACV;AAAA,MACD,QAAQnK,GAASP,CAAM;AAAA,MACvB,UAAUM,EAAS,MAAM;AACrB,YAAI,GAACoK,EAAA,QAAQ,CAAC1J;AAId,iBAAOA,EAAK,cAAc0J,EAAA,IAAI,EAAE,SAAS,UAAU;AAAA,MACvD,CAAC;AAAA,MACD,OAAOvR,GAAO;AACV,YAAI6H,KAAQ0J,EAAA,MAAM;AACd,UAAA1J,EAAK,cAAc0J,EAAA,MAAMvR,CAAuB;AAEhD;AAAA,QACJ;AAEA,QAAAsS,EAAK,qBAAqBtS,CAAK;AAAA,MACnC;AAAA,IAAA;AAGJ,WAAA8S,GAAQ,SAASD,CAAM,GACvBsB,EAAatB,CAAM,cAxDfrB,KAAAC,EAEYiD,GAFIC,EAAAA,EAAE,GAAA,MAAA;AAAA,iBACd,MAAQ;AAAA,QAAR7C,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;;;ACYhB,UAAMvK,IAAQlD,EAAkC,SAAS,2DAA2D,GAC9G2Q,IAAQC,GAAA,GACRC,IAAOhO,EAAS,MAAM,CAAC,EAAEK,EAAM,SAASyN,EAAM,QAAQ;qBAf3CE,EAAA,cAAbrB,EAIQ,SAAA;AAAA;MAJY,KAAKpC,EAAAlK,CAAA,EAAM;AAAA,IAAA;MAC3BsK,EAEOC,yBAFP,MAEO;AAAA,QADAqD,EAAAC,EAAA3D,EAAAlK,CAAA,EAAM,KAAK,GAAA,CAAA;AAAA,MAAA;;;;;;;;;ACwB1B,UAAMqW,IAAS1E,EAAe,WAAW,GACnC3R,IAAQlD,EAAkC,SAAS,2DAA2D,GAC9GuD,IAAOzD,GAA8B,QAAQ,IAAI,GACjD5E,IAAO2H,EAAS,MAAMK,EAAM,QAAQ,MAAS,GAC7CxH,IAAQmH,EAAS,MAAMK,EAAM,KAAK,GAClCsW,IAAe3W,EAAS,MAAM;AAChC,UAAIoK,EAAA;AACA,eAAOA,EAAA;AAGX,YAAMwM,KAAave,EAAK,UAASqI,KAAA,gBAAAA,EAAM,aAAarI,EAAK,YAAW;AAEpE,aAAO,CAAC,QAAQ,SAAS,UAAU,OAAO,KAAK,EAAE,SAASue,CAAS,IAAIA,IAAY;AAAA,IACvF,CAAC,GACKC,IAAU7W,EAAS,MAAM;AAC3B,UAAI2W,EAAa,UAAU;AAI3B,eAAO,CAAC,CAAC9d,EAAM;AAAA,IACnB,CAAC;AAED,aAASU,IAAS;AACd,MAAKmd,EAAO,SAIZrW,EAAM,OAAOyW,GAAU;AAAA,IAC3B;AAEA,aAASA,IAAkC;AACvC,UAAI,CAACJ,EAAO;AACR,eAAO;AAGX,cAAQC,EAAa,OAAA;AAAA,QACjB,KAAK;AACD,iBAAOD,EAAO,MAAM;AAAA,QACxB,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK,kBAAkB;AACnB,gBAAMjS,IAAO,IAAI;AAAA,YACb,KAAK,MAAMiS,EAAO,MAAM,gBAAgB,GAAK,IAAI,MAC7ClS,GAAuBkS,EAAO,MAAM,eAAe,IAAI,KAAKA,EAAO,MAAM,aAAa,CAAC;AAAA,UAAA;AAG/F,iBAAI,MAAMjS,EAAK,QAAA,CAAS,IACb,OAGJA;AAAA,QACX;AAAA,QAEA,KAAK;AACD,iBAAOiS,EAAO,MAAM;AAAA,QACxB;AACI,iBAAOA,EAAO,MAAM;AAAA,MAAA;AAAA,IAEhC;AAEA,WAAAjW,GAAYJ,GAAO,MAAA;;AAAM,cAAA5H,IAAAie,EAAO,UAAP,gBAAAje,EAAc;AAAA,KAAO,GAC9CsK,GAAY,MAAM;AACd,UAAK2T,EAAO,OAIZ;AAAA,YAAI,CAAC,QAAQ,QAAQ,gBAAgB,EAAE,SAASC,EAAa,KAAK,KAAK9d,EAAM,iBAAiB,MAAM;AAChG,gBAAMke,IAAe,KAAK,MAAMle,EAAM,MAAM,QAAA,IAAY,GAAK,IAAI;AAEjE,UAAA6d,EAAO,MAAM,gBAAgBK,IAAevS,GAAuB3L,EAAM,KAAK,GAE1EA,EAAM,MAAM,QAAA,MAAcke,KAC1B1W,EAAM,OAAO,IAAI,KAAK0W,CAAY,CAAC;AAGvC;AAAA,QACJ;AAEA,QAAAL,EAAO,MAAM,QAAS7d,EAAM,SAAoB;AAAA;AAAA,IACpD,CAAC,mBAzGG8T,EAYC,SAAA;AAAA,MAXI,IAAIpC,EAAAlK,CAAA,EAAM;AAAA,MACX,KAAI;AAAA,MACH,MAAAhI,EAAA;AAAA,MACA,SAAAwe,EAAA;AAAA,MACA,MAAMF,EAAA;AAAA,MACN,UAAUpM,EAAAlK,CAAA,EAAM,YAAY;AAAA,MAC5B,gBAAckK,EAAAlK,CAAA,EAAM,SAAM,SAAA;AAAA,MAC1B,oBAA+BkK,EAAAlK,CAAA,EAAM,SAAM,GAAMkK,EAAAlK,CAAA,EAAM,EAAE,WAAWkK,EAAAlK,CAAA,EAAM,cAAW,GAAMkK,EAAAlK,CAAA,EAAM,EAAE,iBAAiB;AAAA,MAGpH,SAAO9G;AAAA,IAAA;;;;;;ACQhB,UAAM8G,IAAQlD;AAAA,MACV;AAAA,MACA;AAAA,IAAA,GAEEwG,IAAO3D,EAAS,MAAO,OAAOK,EAAM,eAAgB,WAAWA,EAAM,cAAc,EAAG,GACtF2N,IAAOhO,EAAS,MAAM,CAAC,CAACK,EAAM,WAAW;qBAxB3CsK,EAOOC,EAAA,QAAA,WAAA;AAAA,MAPA,IAAE,GAAKL,EAAAlK,CAAA,EAAM,EAAE;AAAA,IAAA,GAAtB,MAOO;AAAA,MALO2N,EAAA,cADV1D,EAKEiF,GALF/E,EAKE,EAAA,KAAA,KAHUmD,EAAAA,QAAM;AAAA,QACb,IAAE,GAAKpD,EAAAlK,CAAA,EAAM,EAAE;AAAA,QACf,MAAAsD,EAAA;AAAA,MAAA;;;;;;ACOb,UAAMtD,IAAQlD,EAAkC,SAAS,2DAA2D,GAC9GC,IAAe4C,EAAS,MACrBK,EAAM,SAIJoG,EAAqB,UAAUpG,EAAM,OAAO,CAAC,CAAC,IAAI,UAAUA,EAAM,OAAO,CAAC,CAAC,EAAE,IAHzE,IAId;qBAnBYjD,EAAA,cAATuP,EAEI,KAAA;AAAA;MAFoB,IAAE,GAAKpC,EAAAlK,CAAA,EAAM,EAAE;AAAA,IAAA,KAChCjD,EAAA,KAAY,GAAA,GAAAsR,EAAA;;;;;;;;;;;;;;;;;;;;ACoCvB,UAAM/F,IAA8EkC,EAAAT,GAAA,CAAA,SAAA,cAAA,gBAAA,oBAAA,YAAA,CAAA,GAQ9EsM,IAAS1E,EAAe,WAAW,GACnC,CAACgF,GAAYC,CAAW,IAAIpW,GAAA,GAC5BqW,IAAyBlX,EAAS,MACpCzB,EAAQ,kCAAkC,EAAE,QAAQ6L,EAAA,MAAA,GAASA,EAAA,YAAY,CAAC,GACxE+M,IAA6BnX,EAAS,MAAMzB,EAAQ,8BAA8B6L,EAAA,gBAAgB,CAAC,GACnGgN,IAAuBpX,EAAS,MAAMzB,EAAQ,6BAA6B6L,EAAA,UAAU,CAAC,GACtFiN,IAAuBrX,EAAS;;AAClC,aAAAzB;AAAA;AAAA,QAEI;AAAA,QACA;AAAA,UACI,0BAA0B,GAAC9F,IAAAie,EAAO,UAAP,QAAAje,EAAc;AAAA,UACzC,uEAAuE,GAACyC,IAAAwb,EAAO,UAAP,QAAAxb,EAAc;AAAA,UACtF,mFAAkFG,IAAAqb,EAAO,UAAP,gBAAArb,EAAc;AAAA,QAAA;AAAA,QAEpG+O,EAAA;AAAA,MAAA;AAAA,KACH;sBA7DDC,EAAA,GAAAC,EAgBgBgN,IAhBhB9M,EAgBgB;AAAA,MAfZ,KAAI;AAAA,MACH,OAAOiG,EAAAA;AAAAA,MACP,OAAOlG,EAAA0M,CAAA;AAAA,IAAA,GACAtO,GAAK;AAAA,MACZ,uBAAkBwE,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAE2B,EAAAA,MAAK,qBAAsB3B,CAAM;AAAA,IAAA;iBAEtD,MAAA;;AAAgF;AAAA,UAAhFpB,EAAgFuL,IAAA,EAA5D,OAAM,qDAAmD;AAAA,UAC7EjJ,EAKM,OAAA;AAAA,YALA,SAAO4I,EAAA,KAAsB;AAAA,UAAA;YAC/BlL,EAAwEwL,IAAxEhN,EAAwED,MAAlC,EAAG,OAAO8M,EAAA,MAAA,CAAoB,GAAA,MAAA,IAAA,CAAA,OAAA,CAAA;AAAA,aACzD5e,IAAAie,EAAA,UAAA,QAAAje,EAAQ,UAAnB4R,KAAAsC,EAEM,OAFN+B,IAEM;AAAA,cADF1C,EAAoDzB,EAAAoE,EAAA,GAAA,EAA9B,OAAM,uBAAqB;AAAA,YAAA;;UAGzD3C,EAAgEyL,IAAA;AAAA,YAArC,SAAON,EAAA,KAA0B;AAAA,UAAA;UAC5DnL,EAAoD0L,IAAA;AAAA,YAA/B,SAAON,EAAA,KAAoB;AAAA,UAAA;;;;;;;ACdjD,SAASO,GACZvP,GACA9P,IAAgC,IACF;AAC9B,SAAO;AAAA,IACH,SAAS8P;AAAA,IACT,MAAM;AAAA,IACN,OAAO9P,EAAQ;AAAA,EAAA;AAEvB;AAEO,SAASsf,GAAUxP,GAAqB9P,IAAgC,IAAiC;AAC5G,SAAO;AAAA,IACH,SAAS8P;AAAA,IACT,MAAM;AAAA,IACN,OAAO9P,EAAQ;AAAA,EAAA;AAEvB;AAEO,SAASuf,GACZ3Z,GACAkK,GACA9P,IAAgC,CAAA,GACM;AACtC,SAAO;AAAA,IACH,SAAS8P;AAAA,IACT,MAAM;AAAA,IACN,OAAO9P,EAAQ;AAAA,IACf,QAAA4F;AAAA,EAAA;AAER;AAEO,SAAS4Z,GACZ1P,GACA9P,IAAgC,IACU;AAC1C,SAAO;AAAA,IACH,SAAS8P;AAAA,IACT,MAAM;AAAA,IACN,OAAO,CAAC,YAAY,GAAK9P,EAAQ,SAA0B,CAAA,CAAG;AAAA,EAAA;AAEtE;AAEO,SAASyf,GACZ3P,GACA9P,IAAgC,IACO;AACvC,SAAO;AAAA,IACH,SAAS8P;AAAA,IACT,MAAM;AAAA,IACN,OAAO,CAAC,YAAY,GAAK9P,EAAQ,SAA0B,CAAA,CAAG;AAAA,EAAA;AAEtE;AAEO,SAAS0f,GACZ9Z,GACAkK,GACA9P,IAAgC,CAAA,GACU;AAC1C,SAAO;AAAA,IACH,SAAS8P;AAAA,IACT,MAAM;AAAA,IACN,OAAO,CAAC,YAAY,GAAK9P,EAAQ,SAA0B,CAAA,CAAG;AAAA,IAC9D,QAAA4F;AAAA,EAAA;AAER;AAEO,SAAS+Z,GACZ7P,GACA9P,IAAgC,IACS;AACzC,SAAO;AAAA,IACH,SAAS8P;AAAA,IACT,MAAM;AAAA,IACN,OAAO,CAAC,YAAY,GAAK9P,EAAQ,SAA0B,CAAA,CAAG;AAAA,EAAA;AAEtE;AAEO,SAAS4f,GACZ9P,GACA9P,IAAgC,IACY;AAC5C,SAAO;AAAA,IACH,SAAS8P;AAAA,IACT,MAAM;AAAA,IACN,OAAO,CAAC,YAAY,GAAK9P,EAAQ,SAA0B,CAAA,CAAG;AAAA,EAAA;AAEtE;AAEO,SAAS6f,GACZ/P,GACA9P,IAAgC,IACS;AACzC,SAAO;AAAA,IACH,SAAS8P;AAAA,IACT,MAAM;AAAA,IACN,OAAO,CAAC,YAAY,GAAK9P,EAAQ,SAA0B,CAAA,CAAG;AAAA,EAAA;AAEtE;AAEO,SAAS8f,GAAYhQ,GAAuB9P,IAAgC,IAAmC;AAClH,SAAO;AAAA,IACH,SAAS8P;AAAA,IACT,MAAM;AAAA,IACN,OAAO9P,EAAQ;AAAA,EAAA;AAEvB;AAEO,SAAS+f,GACZjQ,GACA9P,IAAgC,IACQ;AACxC,SAAO;AAAA,IACH,SAAS8P;AAAA,IACT,MAAM;AAAA,IACN,OAAO9P,EAAQ;AAAA,EAAA;AAEvB;AAEO,SAASggB,GAAYlQ,GAAuB9P,IAAgC,IAAmC;AAClH,SAAO;AAAA,IACH,SAAS8P;AAAA,IACT,MAAM;AAAA,IACN,OAAO9P,EAAQ;AAAA,EAAA;AAEvB;ACpGO,SAASigB,GAAe5P,GAAyB;AACpD,QAAMjI,IAAOE,GAAQ;AAAA,IACjB,OAAOuX,GAAoBxP,EAAM,gBAAgB,EAAE;AAAA,EAAA,CACtD,GACK6K,IAAgBxT,EAAS,MAAM2I,EAAM,SAASA,EAAM,OAAO,GAC3DyN,IAAkBpW,EAAS,MAAO2I,EAAM,QAAQA,EAAM,UAAU,IAAK,GACrEkL,IAAqB7T,EAAS,MAAM2I,EAAM,cAAclC,EAAqB,aAAa,IAAI,CAAC,GAC/FqN,IAAqB9T,EAAS,MAAM2I,EAAM,cAAclC,EAAqB,aAAa,QAAQ,CAAC;AAEzG,SAAO,EAAE,MAAA/F,GAAM,eAAA8S,GAAe,iBAAA4C,GAAiB,oBAAAvC,GAAoB,oBAAAC,EAAA;AACvE;;;;;;;;;;;;;;;;ACAA,UAAMnL,IAA4CkC,EAAAT,GAAA,CAAA,eAAA,CAAA,GAC5C,EAAE,MAAA1J,GAAM,eAAA8S,GAAe,iBAAA4C,GAAiB,oBAAAvC,GAAoB,oBAAAC,EAAA,IAAuByE,GAAe5P,CAAK;AAG7G,WAAAqE,EAAA,mBAvCI1C,EAmBQmJ,IAAA;AAAA,MAnBmB,OAAOlJ,EAAAiJ,CAAA;AAAA,MAAe,YAAA;AAAA,IAAA;MAC7C,SAAAnG,EAAA,CAiBO,EAlBM,OAAArG,QAAK;AAAA,QAClBgF,EAiBO+H,IAAA;AAAA,UAjBA,MAAAxJ,EAAA7J,CAAA;AAAA,UAAM,UAAM,CAAA0M,MAAEpG,EAAMuD,EAAA7J,CAAA,EAAK,KAAK;AAAA,QAAA;qBACjC,MAA2D;AAAA,YAA3C6J,EAAA6L,CAAA,UAAhB9L,EAA2DiF,GAAA;AAAA;cAAzB,MAAMhF,EAAA6L,CAAA;AAAA,YAAA;YACxCpK,EAKEwM,IAAA;AAAA,cAJE,MAAK;AAAA,cACL,OAAM;AAAA,cACL,aAAAC,EAAAA;AAAAA,cACA,OAAAhI,EAAAA;AAAAA,YAAAA;YAGLnC,EAOM,OAPNI,IAOM;AAAA,cANF1C,EAESwD,GAAA;AAAA,gBAFA,SAAS4E,EAAAA;AAAAA,gBAAe,QAAA;AAAA,cAAA;2BAC7B,MAAwB;AAAA,sBAArB7J,EAAAsJ,CAAA,CAAkB,GAAA,CAAA;AAAA,gBAAA;;;cAEzB7H,EAESwD,GAAA;AAAA,gBAFA,SAAS8E,EAAAA;AAAAA,gBAAgB,gBAAOtN,EAAA;AAAA,cAAK;2BAC1C,MAAwB;AAAA,sBAArBuD,EAAAuJ,CAAA,CAAkB,GAAA,CAAA;AAAA,gBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACoCzC,mBAAe4E,IAAc;AAezB,MAdkB,MAAMlP,EAAG;AAAA,QACvB/C,EAAqB,kCAAkC,oBAAoB;AAAA,QAC3EA;AAAA,UACI;AAAA,UACA;AAAA;AAAA;AAAA,QAAA;AAAA,QAIJ;AAAA,UACI,eAAe;AAAA,UACf,YAAYA,EAAqB,mCAAmC,cAAc;AAAA,QAAA;AAAA,MACtF,MAOJ,MAAMpN,GAAQ,MAAA,GACd,MAAM+C,EAAI,OAAA;AAAA,IACd;;;AAzEI,aAAAiO,EAAA,GAAAsC,EAoCM,OApCN+B,IAoCM;AAAA,QAnCFJ,EAkCM,OAlCNiC,IAkCM;AAAA,UAjCFvE,EAA0D2M,GAAA,EAA/B,OAAM,wBAAsB;AAAA,UACvDrK,EAEK,MAFLkH,IAEKtH,EADEM,EAAAA,IAAG,sBAAA,6BAAA,CAAA,GAAA,CAAA;AAAA,UAEVxC,EAQEuD,GAAA;AAAA,YAPG,MAA2Bf,EAAAA;AAAAA;;;YAM5B,OAAM;AAAA,UAAA;UAEVF,EAmBM,OAnBN4F,IAmBM;AAAA,YAhBFlI,EAGSwD,GAAA;AAAA,cAHD,SAAQ;AAAA,cAAU,SAAKrC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAEwL,EAAAA,KAAK,OAAA;AAAA,YAAM;yBACxC,MAAe;AAAA,gBAAf5M,EAAezB,EAAAsO,EAAA,CAAA;AAAA,gBAAA5K,EAAA,QACZO,EAAAA,IAAG,uBAAA,WAAA,CAAA,GAAA,CAAA;AAAA,cAAA;;;YAEVxC,EAGSwD,GAAA;AAAA,cAHD,SAAQ;AAAA,cAAU,gCAAOyB,EAAAA,QAAQ,QAAQA,EAAAA,QAAQ,aAAa;AAAA,YAAA;yBAClE,MAAW;AAAA,gBAAXjF,EAAWzB,EAAAuO,EAAA,CAAA;AAAA,gBAAA7K,EAAA,QACRO,EAAAA,IAAG,wBAAA,oBAAA,CAAA,GAAA,CAAA;AAAA,cAAA;;;YAEVxC,EAGSwD,GAAA;AAAA,cAHD,SAAQ;AAAA,cAAU,gCAAOkJ,EAAA;AAAA,YAAW;yBACxC,MAAc;AAAA,gBAAd1M,EAAczB,EAAAwO,EAAA,CAAA;AAAA,gBAAA9K,EAAA,QACXO,EAAAA,IAAG,sBAAA,cAAA,CAAA,GAAA,CAAA;AAAA,cAAA;;;YAEVxC,EAGSwD,GAAA;AAAA,cAHD,SAAQ;AAAA,cAAU,gCAAOyB,EAAAA,QAAQ,QAAK,CAAIA,EAAAA,QAAQ;AAAA,YAAA;yBACtD,MAAoB;AAAA,gBAApBjF,EAAoBzB,EAAAyO,EAAA,CAAA;AAAA,gBAAA/K,EAAA,QACjBO,EAAAA,IAAG,sBAAA,kBAAA,CAAA,GAAA,CAAA;AAAA,cAAA;;;;;;;;;;;;;;sBChCtBnE,EAAA,GAAAC,EAEYiD,GAFI7J,EAAAA,OAAO,UAAU6G,EAAA0O,EAAA,IAAU,QAAA,GAAA;AAAA,MAAa,MAAK;AAAA,MAAU,SAAOvV,EAAAA,OAAO;AAAA,IAAA;iBACjF,MAAkB;AAAA,QAAfA,EAAAA,EAAAA,EAAAA,OAAO,KAAK,GAAA,CAAA;AAAA,MAAA;;;;;;;;;;;;2BCDnB4G,EAKYC,EAAA2O,EAAA,GAAA,MAAA;AAAA,iBAJR,MAGO;AAAA,QAHPvO,EAGOC,yBAHP,MAGO;AAAA,UAFS/C,EAAAA,WAAZwC,EAAA,GAAAsC,EAAyC,cAAjB9E,EAAAA,OAAO,GAAA,CAAA;WAC/BwC,EAAA,EAAA,GAAAsC,EAAqEC,GAAA,MAAAC,EAAxBmH,EAAAA,SAAO,CAAvBtQ,GAAQ9K,YAArC0R,EAAqE6O,IAAA;AAAA,YAAd,KAAAvgB;AAAA,YAAK,QAAA8K;AAAA,UAAA;;;;;;;;;;;;;;;ACuBxE,UAAMoH,IAAkB9K,EAAS,MAC7BjC;AAAA,MACI,EAAE,aAAUqM,EAAA,OAAG,SAAMA,EAAA,QAAA;AAAA,MACrB;AAAA,QACI,aAAa;AAAA,QACb,UAAU;AAAA,UACN,SAAS;AAAA,YACL,WAAW;AAAA,YACX,QAAQ;AAAA,YACR,SAAS;AAAA,UAAA;AAAA,QACb;AAAA,QAEJ,iBAAiB;AAAA,UACb,SAAS;AAAA,QAAA;AAAA,MACb;AAAA,IACJ,CACH;AAEL,WAAA4C,EAAA,mBA5CI1C,EAUgB8O,IAAA;AAAA,MAVA,SAAOtO,EAAA,KAAe;AAAA,IAAA;iBAClC,MAAkD;AAAA,QAAlCjD,EAAAA,gBAAhByC,EAAkDiF,GAAA;AAAA;UAAxB,MAAM1H,EAAAA;AAAAA,UAAS,QAAA;AAAA,QAAA;SAEzCwC,EAAA,EAAA,GAAAsC,EAMEC,GAAA,MAAAC,EAL0BmH,EAAAA,SAAO,CAAvBtQ,GAAQ9K,YADpB0R,EAMEkF,GAAA;AAAA,UAJG,KAAA5W;AAAA,UACA,QAAA8K;AAAA,UACA,SAAA2V,EAAAA;AAAAA,UACA,IAAIF;AAAAA,QAAA;;;;;ICKX3T,KAAW,EAAE,KAAKgE,EAAA,GASxB8P,KAA4B;AAAA,EACxB,MAAM,QAAQ1U,GAAKtM,GAAS;AACxB,UAAMihB,IAA6D;AAAA,MAC/D,eAAeC;AAAAA,MACf,iBAAiBC;AAAAA,MACjB,sBAAsBC;AAAAA,MACtB,iBAAiBC;AAAAA,MACjB,gBAAgBC;AAAAA,MAChB,iBAAiBC;AAAAA,MACjB,OAASC;AAAAA,MACT,GAAGxhB,EAAQ;AAAA,IAAA;AAGf,eAAW,CAACD,GAAMsP,CAAS,KAAK,OAAO,QAAQ4R,CAAU;AACrD,MAAA/P,EAAG,kBAAkBnR,GAA4BsP,CAA6C;AAGlG,UAAMpC,GAAaX,GAAKY,EAAQ;AAAA,EACpC;AACJ,GClCAuU,KAA4B;AAAA,EACxB,MAAM,QAAQ/T,GAAG,EAAE,qBAAAgU,KAAuB;AACtC,eAAW,CAAC5a,GAAMC,CAAS,KAAK,OAAO,QAAQ2a,KAAuB,CAAA,CAAE;AACpE,MAAA7a,GAA2BC,GAAMC,CAAS;AAAA,EAElD;AACJ;ACIA,eAAsB4a,GAAqBrV,GAAkBtM,IAA0B,IAAmB;;AACtG,QAAMkE,IAAU,CAACkV,IAAS/M,IAAYjF,IAAQiQ,IAAMnK,IAAU8T,IAAIS,IAAO,GAAIzhB,EAAQ,WAAW,CAAA,CAAG;AAEnG,EAAA8D,EAAI,WAAWwI,GAEf,MAAMrI,GAAeC,GAASoI,GAAKtM,CAAO,GAC1C,QAAMG,IAAAH,EAAQ,YAAR,gBAAAG,EAAA,KAAAH,GAAkBsM,KACxB,MAAMtJ,EAAO,KAAK,mBAAmB;AACzC;AAEA,eAAsB4e,GAAUC,GAA0B7hB,IAA0B,IAAmB;;AACnG,QAAMsM,IAAMwV,GAAUD,CAAa;AAEnC,EAAIzU,QAEC,OAAe,WAAWd,IAG/B,MAAMqV,GAAqBrV,GAAKtM,CAAO,GAEvCsM,EAAI,MAAM,MAAM,IAChBnM,IAAAmM,EAAI,eAAJ,QAAAnM,EAAgB,UAAU,OAAO,YAEjC,MAAM6C,EAAO,KAAK,qBAAqB;AAC3C;;;;2BCzCIgP,EASgBC,EAAA8P,EAAA,GAAA,MAAA;AAAA,iBANR,MAA2B;AAAA,SAF/BhQ,EAAA,EAAA,GAAAsC,EAMEC,GAAA,MAAAC,EAJkByN,EAAAA,IAAI,SAAbpR,OAFXmB,KAAAC,EAMEiD,GALOrE,EAAM,SAAS,GADxBsB,EAME;AAAA,UAHG,IAAItB,EAAM;AAAA,UACV,KAAKA,EAAM;AAAA,QAAA,GACJ,EAAA,SAAA,GAAA,GAAAA,EAAM,UAAU,GAAA,MAAA,IAAA,CAAA,IAAA,CAAA;QAE5B8C,EAAwGzB,EAAAgQ,EAAA,GAAA,EAAzF,OAAM,kFAAgF;AAAA,MAAA;;;;;;;;MCRzGvO,EAAuBzB,EAAAiQ,EAAA,GAAA,EAAT,QAAA,IAAM;AAAA,MACpBxO,EAAayO,EAAA;AAAA,IAAA;;;;;sBCDbpQ,EAAA,GAAAsC,EAOM,OAPN+B,IAOM;AAAA,MANUuC,EAAAA,QAAQ,mBAApBtG,EAEOC,uCAFP,MAEO;AAAA,cADHN,EAAyDiD,GAAzC+M,EAAAA,IAAI,iBAAgB,eAAA,CAAA,CAAA;AAAA,MAAA,KAExC3P,EAAeC,EAAA,QAAA,WAAA,EAAA,KAAA,GAAA;AAAA,MAEfoB,EAAe0O,EAAA;AAAA,IAAA;;;;;ACevB,UAAMC,IAAY3I,EAAe,cAAc,GACzC3R,IAAQlD;AAAA,MACV;AAAA,MACA;AAAA,IAAA,GAEE9E,IAAO2H,EAAS,MAAMK,EAAM,QAAQ,MAAS,GAC7CxH,IAAQmH,EAAS,MAAMK,EAAM,KAAe;AAElD,aAAS9G,IAAS;AACd,MAAKohB,EAAU,SAIfta,EAAM,OAAOsa,EAAU,MAAM,KAAK;AAAA,IACtC;AAEA,WAAAla,GAAYJ,GAAO,MAAA;;AAAM,cAAA5H,IAAAkiB,EAAU,UAAV,gBAAAliB,EAAiB;AAAA,KAAO,mBArC7CkU,EAWE,YAAA;AAAA,MAVG,IAAIpC,EAAAlK,CAAA,EAAM;AAAA,MACX,KAAI;AAAA,MACH,MAAAhI,EAAA;AAAA,MACA,OAAAQ,EAAA;AAAA,MACA,UAAU0R,EAAAlK,CAAA,EAAM,YAAY;AAAA,MAC5B,gBAAckK,EAAAlK,CAAA,EAAM,SAAM,SAAA;AAAA,MAC1B,oBAA+BkK,EAAAlK,CAAA,EAAM,SAAM,GAAMkK,EAAAlK,CAAA,EAAM,EAAE,WAAWkK,EAAAlK,CAAA,EAAM,cAAW,GAAMkK,EAAAlK,CAAA,EAAM,EAAE,iBAAiB;AAAA,MAGpH,SAAO9G;AAAA,IAAA;;;;;;;;;;;ACchB,UAAMqhB,IAAyB5a,EAAS,MAAMzB,EAAQ,aAAa6L,EAAA,YAAY,CAAC,GAC1EyQ,IAAyB7a,EAAS,MACpCzB;AAAA,MACI;AAAA,MACA;AAAA,MACA6L,EAAA;AAAA,IAAA,CACH;sBA9BDC,EAAA,GAAAsC,EAWU,WAXV+B,IAWU;AAAA,MAVNJ,EAKU,WAAA;AAAA,QALA,SAAOuM,EAAA,KAAsB;AAAA,MAAA;QACnC7O,EAA8EzB,EAAAoL,EAAA,GAAA,EAA3D,OAAM,oDAAkD;AAAA,QAC3EhL,EAEOC,uBAFP,MAEO;AAAA,UADH0D,EAAwD,QAAA,MAAAJ,EAA/CuC,EAAAA,SAASjC,EAAAA,IAAG,cAAA,SAAA,CAAA,GAAA,CAAA;AAAA,QAAA;;MAI7BF,EAEM,OAAA;AAAA,QAFA,SAAOsM,EAAA,KAAsB;AAAA,MAAA;QAC/BjQ,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;;2BCThBN,EAEUwQ,IAAA;AAAA,MAFA,OAAOtM,EAAAA,IAAG,sBAAA,kBAAA;AAAA,IAAA;iBAChB,MAAQ;AAAA,QAAR7D,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;;;;;;;;;;;;;ACoChB,UAAMjC,IAAuCkC,EAAAT,GAAA,CAAA,cAAA,YAAA,CAAA,GAIvCsM,IAAS1E,EAAe,WAAW,GACnC,CAACgF,GAAYC,CAAW,IAAIpW,GAAA,GAC5BiK,IAAkB9K,EAAS,MAAMzB,EAAQ,6BAA6B0Y,EAAY,KAAK,CAAC,GACxFI,IAAuBrX,EAAS;;AAClC,aAAAzB;AAAA,QACI;AAAA,QACA;AAAA,UACI,0CAA0C,GAAC9F,IAAAie,EAAO,UAAP,QAAAje,EAAc;AAAA,UACzD,+CAA8CyC,IAAAwb,EAAO,UAAP,gBAAAxb,EAAc;AAAA,QAAA;AAAA,QAEhEkP,EAAA;AAAA,MAAA;AAAA,KACH,GACC2Q,IAAuB/a,EAAS,MAAMzB,EAAQ,0BAA0B6L,EAAA,UAAU,CAAC;sBArDrFC,EAAA,GAAAC,EAmBgBgN,IAnBhB9M,EAmBgB;AAAA,MAlBZ,KAAI;AAAA,MACH,OAAOM,EAAA;AAAA,IAAA,GACAnC,GAAK;AAAA,MACZ,uBAAkBwE,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAE2B,EAAAA,MAAK,qBAAsB3B,CAAM;AAAA,IAAA;iBAEtD,MAEM;AAAA,QAFNkB,EAEM,OAFNI,IAEM;AAAA,UADF1C,EAAwFwL,IAAxFhN,EAAwFD,EAAAyM,CAAA,GAAlD;AAAA,YAAE,MAAK;AAAA,YAAY,OAAOK,EAAA;AAAA,UAAA;;QAEzDxL,EAAAA,OAAO,gBAAlBc,EAKM,OAAA;AAAA;UALsB,SAAOoO,EAAA,KAAoB;AAAA,QAAA;UACnD/O,EAEqBuL,IAAA,EAFD,OAAM,mBAAe;AAAA,uBACrC,MAAQ;AAAA,cAAR5M,EAAQC,EAAA,QAAA,SAAA;AAAA,YAAA;;;UAEZoB,EAA2C0L,IAAA,EAAvB,OAAM,gBAAc;AAAA,QAAA,SAE5BjH,EAAAA,cAAhB9D,EAGM,OAAA;AAAA;UAHkB,SAAOoO,EAAA,KAAoB;AAAA,QAAA;UAC/C/O,EAA4CuL,IAAA,EAAxB,OAAM,iBAAe;AAAA,UACzCvL,EAA2C0L,IAAA,EAAvB,OAAM,gBAAc;AAAA,QAAA;;;;;;;;;;;;ACTpD,WAAA/L,GAAQvB,EAAA,MAAMA,EAAA,KAAK,aARfO,EAAQC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;ACqBZ,UAAMO,IAAO4B,GAGPnB,IAASzO,EAAmC,UAAU,kDAAkD,GACxG6d,IAAcC,GAAA,GACdC,IAAW/d,EAAsC,UAAU,GAC3DgP,IAAgBnM,EAAS,MAAM;;AACjC,YAAMoM,KAAa3T,IAAAmT,EAAO,YAAP,gBAAAnT,EAAgB,KAAK,CAACwS,MAAWA,EAAO,UAAUb;AAErE,aAAOgC,IAAaR,EAAO,aAAaQ,EAAW,KAAK,IAAIvP,EAASuN,OAAK;AAAA,IAC9E,CAAC;AAED,aAAS+Q,EAAS9gB,GAAuC;AACrD,MAAI2gB,EAAY,SAAS,SAASA,EAAY,SAAS,UAIvD3gB,EAAM,eAAA,GACN6gB,EAAS,gBAAgB,IACzBF,EAAY,WAAW,QAAQ5Q,EAAA,OAE/Be,EAAK,QAAQ;AAAA,IACjB;2BA3CIb,EAQeC,EAAA6Q,EAAA,GARf5Q,EAQeI,EAAA,QARa;AAAA,MAAE,OAAM;AAAA,MAA0B,UAAMuC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAE+N,EAAS/N,CAAM;AAAA,IAAA;iBACjF,MAMM;AAAA,QANNkB,EAMM,OANNI,IAMM;AAAA,UAHF/D,EAEOC,yBAFP,MAEO;AAAA,gBADAuB,EAAA,KAAa,GAAA,CAAA;AAAA,UAAA;;;;;;;;;;;;;ACgDhC,UAAM,EAAE,UAAAkP,EAAA,IAAaC,GAAU,EAAE,aAAa,QAAQ,GAChD1P,IAASzO,EAAmC,UAAU,mDAAmD,GACzG+d,IAAW/d,EAAsC,UAAU,GAC3Doe,IAASvJ,EAAe,QAAQ,GAChCwJ,IAAkBxb;AAAA,MACpB,MAAA;;AAAM,iBAAAvH,IAAAmT,EAAO,YAAP,gBAAAnT,EAAgB,OAAO,CAACwS,MAAWoQ,EAASpQ,EAAO,OAAOiQ,EAAS,KAAK,OAAM,CAAA;AAAA;AAAA,IAAC,GAEnFO,IAAkBzb;AAAA,MACpB,MAAMkb,EAAS,SAAS,CAACM,EAAgB,MAAM,KAAK,CAACvQ,MAAWA,EAAO,UAAUiQ,EAAS,KAAK;AAAA,IAAA,GAE7FpQ,IAAkBvM;AAAA,MACpB;AAAA,MACA;AAAA,IAAA;AAGJ,WAAAgD,EAAMga,GAAQ,MAAA;;AAAO,aAAAL,EAAS,WAASziB,IAAA8iB,EAAO,UAAP,gBAAA9iB,EAAc,QAAO;AAAA,KAAK,mBApE7D6R,EAkCiBC,EAAAmR,EAAA,GAAA,MAAA;AAAA,iBAjCb,MAgCkB;AAAA,QAhClB1P,EAgCkBzB,EAAAoR,EAAA,GAAA;AAAA,UA/Bd,UAAS;AAAA,UACR,OAAOpR,EAAAqB,CAAA,EAAO;AAAA,UACd,MAAMrB,EAAAqB,CAAA,EAAO;AAAA,UACb,eAAa;AAAA,UACb,SAAOrB,EAAAO,CAAA,CAAe;AAAA,QAAA;qBAEvB,MAwBmB;AAAA,YAxBnBkB,EAwBmBzB,EAAAqR,EAAA,GAAA,MAAA;AAAA,yBAvBf,MAMgB;AAAA,gBANhB5P,EAMgBzB,EAAAsR,EAAA,GAAA,EAND,OAAM,4BAAwB;AAAA,6BACzC,MAIM;AAAA,oBAJNvN,EAIM,OAJNI,IAIMR,EADCM,EAAAA,IAAG,oBAAA,kBAAA,CAAA,GAAA,CAAA;AAAA,kBAAA;;;gBAIdxC,EAcgBzB,EAAAuR,EAAA,GAAA;AAAA,2BAdG;AAAA,kBAAJ,KAAIP;AAAA,gBAAA;6BACf,MAAA;;AAMiB;AAAA,sBALPE,EAAA,cADVnR,EAMiByR,IAAA;AAAA;wBAJZ,SAAOC,IAAAA,oBAAAA,gBAAAA,EAAAA,KAAAA,GAAgBzR,EAAA2Q,CAAA,EAAS,WAAW3Q,EAAA2Q,CAAA,EAAS;AAAA,wBACpD,iCAAQnM,EAAAA,MAAK,QAAA;AAAA,sBAAA;mCAEd,MAAoB;AAAA,0BAAjBd,EAAAC,EAAA3D,EAAA2Q,CAAA,EAAS,KAAK,GAAA,CAAA;AAAA,wBAAA;;;8BAErBvO,EAKEC,GAAA,MAAAC,EAJmB2O,EAAA,OAAe,CAAzBvQ,YADXX,EAKEyR,IAAA;AAAA,wBAHG,KAAK9Q,EAAO;AAAA,wBACZ,OAAOA,EAAO;AAAA,wBACd,iCAAQ8D,EAAAA,MAAK,QAAA;AAAA,sBAAA;;;;;;;;;;;;;;;;;;;;;;ACDtC,UAAM5D,IAAO4B,GACPnB,IAASzO,EAAmC,UAAU,mDAAmD,GACzG+d,IAAW/d,EAAsC,UAAU,GAC3D8e,IAAsBjc,EAAS,MACjCzB;AAAA;AAAA,MAEI;AAAA,MACA;AAAA,QACI,QAAQqN,EAAO;AAAA,QACf,0BAA0B,CAACA,EAAO;AAAA,QAClC,uEAAuE,CAACA,EAAO;AAAA,QAC/E,kFAAkFA,EAAO;AAAA,MAAA;AAAA,IAC7F,CACH;AAEL,aAASsQ,IAAS;AAGd,MAFiB,MAAM,KAAK,SAAS,iBAAiB,QAAQ,CAAC,EAElD,KAAK,CAACte,MAAA;;AAAY,gBAAAnF,IAAAyiB,EAAS,WAAT,gBAAAziB,EAAiB,SAASmF;AAAA,OAAQ,KAIjEuN,EAAK,MAAM;AAAA,IACf;AAEA,WAAA5J;AAAA,MACI,MAAM2Z,EAAS;AAAA,MACf,MAAM;AACF,YAAIA,EAAS,eAAe;AACxB,UAAAA,EAAS,gBAAgB;AAEzB;AAAA,QACJ;AAEA,QAAA/P,EAAK,QAAQ;AAAA,MACjB;AAAA,IAAA,mBA/DAb,EAeiBC,EAAA4R,EAAA,GAAA,EAfD,OAAM,cAAU;AAAA,iBAC5B,MAAA;;AAUE;AAAA,UAVFnQ,EAUEzB,EAAA6R,EAAA,GAAA;AAAA,YATG,IAAI7R,EAAAqB,CAAA,EAAO;AAAA,YACH,YAAArB,EAAA2Q,CAAA,EAAS;AAAA,YAAT,uBAAA/N,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAA7C,EAAA2Q,CAAA,EAAS,QAAK9N;AAAA,YACtB,aAAa7C,EAAAqB,CAAA,EAAO;AAAA,YACpB,SAAOqQ,EAAA,KAAmB;AAAA,YAC1B,iBAAe1R,EAAAqB,CAAA,EAAO;AAAA,YACtB,MAAMrB,EAAAqB,CAAA,EAAO;AAAA,YACb,gCAAOmD,EAAAA,MAAK,OAAA;AAAA,YACZ,+BAAMmN;YACN,qCAAanN,EAAAA,MAAK,MAAA,GAAA,CAAA,KAAA,CAAA;AAAA,UAAA;WAEZxE,IAAAA,EAAAqB,CAAA,MAAArB,QAAAA,EAAQ,UAAnBF,KAAAsC,EAEM,OAFN+B,IAEM;AAAA,YADF1C,EAAoDzB,EAAAoE,EAAA,GAAA,EAA9B,OAAM,uBAAqB;AAAA,UAAA;;;;;;;;;;;;;ACU7D,UAAM/C,IAASzO,EAAmC,UAAU,iDAAiD,GACvG2Q,IAAQC,GAAA,GACRC,IAAOhO,EAAS,MAAM,CAAC,EAAE4L,EAAO,SAASkC,EAAM,QAAQ,GACvDhD,IAAkB9K,EAAS,MAAMzB,EAAQ,qDAAqDqN,EAAO,UAAU,CAAC;qBAzBxGoC,EAAA,SADV3D,EAAA,GAAAC,EASQC,OATRC,EASQ;AAAA;MAPH,KAAKD,EAAAqB,CAAA,EAAO;AAAA,MACZ,OAAOd,EAAA;AAAA,IAAA,GACAuB,EAAAA,MAAM,GAAA;AAAA,iBAEd,MAEO;AAAA,QAFP1B,EAEOC,yBAFP,MAEO;AAAA,UADAqD,EAAAC,EAAA3D,EAAAqB,CAAA,EAAO,KAAK,GAAA,CAAA;AAAA,QAAA;;;;;;;;;;;;;;;;;;;;;;;;;AC6B3B,UAAMT,IAAO4B,GACPpE,IAKFkC,EAAAT,GAAA,CAAA,MAAA,kBAAA,eAAA,CAAA,GACE;AAAA,MACF,QAAAsB;AAAA,MACA,iBAAAF;AAAA,MACA,QAAQ6Q;AAAA,MACR,cAAAjR;AAAA,IAAA,IACAF;AAAA,MACAlL,EAAS,OAAO,EAAE,IAACoK,EAAA,IAAG,gBAAaA,EAAA,gBAAG,GAAGzB,EAAA,EAAQ;AAAA,MACjDwC;AAAA,IAAA,GAEEmC,IAAOvN,EAAI,EAAK,GAChBuc,IAAiBtc,EAAS,MAAA;;AAC5B,oBAAO,cAAYvH,IAAAiT,EAAO,QAAQ,UAAf,gBAAAjT,EAAsB,IAAI,CAACwS,MAAW,CAACA,EAAO,OAAOA,EAAO,KAAK,OAAM,CAAA,CAAE;AAAA,KAAC,GAC3FiQ,IAAW;AAAA,MACb,OAAOnb,EAAIyL,EAAgB,QAAQJ,EAAaI,EAAgB,KAAU,IAAI,EAAE;AAAA,MAChF,eAAezL,EAAI,EAAK;AAAA,MACxB,QAAQA,EAAI,IAAI;AAAA,IAAA;AAGpB,aAASxG,EAAOV,GAAwB;AACpC,MAAAqiB,EAAS,MAAM,QAAQ9P,EAAavS,CAAU,GAE9CwjB,EAAWxjB,CAAK;AAAA,IACpB;AAEA,WAAA0I,EAAMmK,EAAO,OAAO,CAAC7S,MAAU;AAC3B,YAAM0jB,IAAiBnR,EAAavS,CAAU;AAE9C,MAAIqiB,EAAS,MAAM,UAAUqB,MAI7BrB,EAAS,cAAc,QAAQ,IAC/BA,EAAS,MAAM,QAAQqB;AAAA,IAC3B,CAAC,GAEDhb,EAAM2Z,EAAS,OAAO,CAACriB,MAAU;AAC7B,YAAM2jB,IAAiBpS,EAAA,gBAAiBA,EAAA,cAAcvR,CAAK,IAAwBA,GAC7E4jB,IAAsBrR,EAAaoR,CAAmB;AAE5D,UAAIC,KAAuBH,EAAe,OAAO;AAC7C,QAAA/iB,EAAO+iB,EAAe,MAAMG,CAAmB,CAAoB;AAEnE;AAAA,MACJ;AAEA,MAAAljB,EAAOijB,CAAc;AAAA,IACzB,CAAC,GAEDxP,EAAatB,CAAM,mBA3FfpB,EAeeC,EAAAmS,EAAA,GAAA;AAAA,MAdX,iBAAA;AAAA,MACC,MAAApP,EAAA;AAAA,MACA,6BAA2B;AAAA,MAC3B,+BAA6B;AAAA,MAC7B,eAAa/C,EAAAiB,CAAA;AAAA,MACb,IAAI0B,EAAAA;AAAAA,MACJ,uBAAkBC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAE7T,EAAO6T,CAAM;AAAA,IAAA;iBAElC,MAKU;AAAA,QALVpB,EAKU2Q,IAAA;AAAA,UALD,MAAK;AAAA,UAAY,OAAOzB;AAAA,QAAA;qBAC7B,MAAiB;AAAA,YAAjBlP,EAAiB4Q,EAAA;AAAA,YACjB5Q,EAAmF6Q,IAAA;AAAA,cAAjE,gCAAOvP,EAAA,QAAI;AAAA,cAAU,iCAAQA,EAAA,QAAI;AAAA,cAAU,+BAAMA,EAAA,QAAI;AAAA,YAAA;YACvEtB,EAAyDiD,IAAA,EAApC,OAAM,6BAA2B;AAAA,YACtDjD,EAA2D8Q,IAAA;AAAA,cAAzC,mBAAAd,EAAAA;AAAAA,cAAiB,iCAAQ1O,EAAA,QAAI;AAAA,YAAA;;;;;;;;;;;;;;;;;ACC3D,UAAM3E,IAAiCkC,EAAAT,GAAA,CAAA,OAAA,CAAA,GACjCU,IAAkB9K,EAAS,MAC7BzB;AAAA,MACI;AAAA,MACA6L,EAAA;AAAA,IAAA,CACH;sBAnBDC,EAAA,GAAAC,EAEmBC,OAFnBC,EAEmB,EAFA,OAAOM,EAAA,MAAA,GAAyBnC,GAAK;AAAA,MAAG,iCAAQoG,EAAAA,MAAK,QAAA;AAAA,IAAA;iBACpE,MAAQ;AAAA,QAARpE,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;;;ACqChB,UAAMmS,IAAe5f;AAAA,MACjB;AAAA,MACA;AAAA,IAAA;2BAxCAmN,EA0BsBC,EAAAyS,EAAA,GAAA;AAAA,MAzBlB,OAAM;AAAA,MACL,OAAOzS,EAAAwS,CAAA,EAAa;AAAA,MACpB,MAAMxS,EAAAwS,CAAA,EAAa;AAAA,IAAA;iBAEpB,MAoBO;AAAA,QApBPpS,EAoBOC,yBApBP,MAoBO;AAAA,WAnBHP,EAAA,EAAA,GAAAsC,EAkBqBC,WAjBOrC,EAAAwS,CAAA,EAAa,SAAO,CAApC9R,GAAQrS,OADpByR,EAAA,GAAAC,EAkBqB2S,IAlBrBzS;AAAAA,YAkBqB;AAAA,cAhBhB,KAAA5R;AAAA,cACA,IAAIqS,EAAO,SAASA,EAAO,OAAOF,KAAiB;AAAA,cACnD,OAAOE,EAAO;AAAA,YAAA;AAAA;YACcA,EAAO,SAASA,EAAO;cAAmE,MAAAA,EAAO;AAAA,cAAyC,OAAAA,EAAO;AAAA,cAAgD,aAAAA,EAAO;AAAA,cAAqD,YAAAA,EAAO;AAAA,YAAA;;cAUhS,UAAM,CAAAmC,MAAA;;AAAE,wBAAA3U,IAAAwS,EAAO,UAAP,gBAAAxS,EAAA,KAAAwS;AAAA;AAAA,YAAY;AAAA;uBAErB,MAAkB;AAAA,cAAfgD,EAAAC,EAAAjD,EAAO,KAAK,GAAA,CAAA;AAAA,YAAA;;;;;;;;;;;;;;;;ACD/B,UAAMS,IAAS;AAAA,MACX,OAAItB,EAAA;AAAA,MACJ,MAAGA,EAAA;AAAA,MACH,SAASpK,EAAS,MAAA;;AAAM,gBAAAvH,IAAA2R,EAAA,YAAA,gBAAA3R,EAAS,OAAO;AAAA,OAAQ;AAAA,IAAA;AAGpD,WAAAkT,GAAQ,iBAAiBD,CAAM,GAC/BsB,EAAatB,CAAM,mBA7BfpB,EASmBC,EAAA2S,EAAA,GAAA,MAAA;AAAA,iBARf,MAEsB;AAAA,QAFtBlR,EAEsBzB,EAAA4S,EAAA,GAAA,MAAA;AAAA,qBADlB,MAAQ;AAAA,YAARxS,EAAQC,EAAA,QAAA,SAAA;AAAA,UAAA;;;QAEZoB,EAIqBzB,EAAA6S,EAAA,GAAA,MAAA;AAAA,qBAHjB,MAEO;AAAA,YAFPzS,EAEOC,yBAFP,MAEO;AAAA,cADHoB,EAAuBqR,EAAA;AAAA,YAAA;;;;;;;;;;;;;;;;;;;;;AC2BvC,UAAMlS,IAAO4B,GAkBP2J,IAAS1E,EAAe,WAAW,GACnCsL,IAAUvd,EAAmB,IAAI,GACjCwd,IAAQxd,EAAIqK,MAAI,GAChBuI,IAAuB3S,EAAS,MAAMzB,EAAQ,yBAAyB6L,EAAA,YAAY,CAAC,GACpFoT,IAAsBxd,EAAS,MAAMzB,EAAQ,4BAA4B6L,EAAA,YAAY,CAAC,GACtFqT,IAAqBzd,EAAS,MAChCzB,EAAQ,uFAAuF6L,EAAA,YAAY,CAAC;AAEhH,aAASsT,IAAe;AACpB,MAAAJ,EAAQ,QAAQlT,EAAA;AAAA,IACpB;AAEA,aAASuT,IAAc;AACnB,MAAKL,EAAQ,UAITlT,EAAA,SAAS,YAAYmT,EAAM,MAAM,KAAA,EAAO,WAAW,MACnDA,EAAM,QAAQD,EAAQ,OAEtBnS,EAAK,UAAUoS,EAAM,KAAK,IAG9BD,EAAQ,QAAQ,MAEhBnS,EAAK,MAAM;AAAA,IACf;AAEA,WAAApI,GAAY,MAAOwa,EAAM,QAAQnT,EAAA,IAAK,mBA/ElCuC,EAwBM,OAAA;AAAA,MAxBD,OAAKyD,EAAA,CAAC,YAAU,EAAA,wBAAmC1F,EAAAA,aAAa4S,EAAA,OAAO,CAAA;AAAA,IAAA;MAC5DA,EAAA,cAGZ3Q,EAEO,QAAA;AAAA;QAFO,SAAO6Q,EAAA,KAAmB;AAAA,MAAA,KACjCD,EAAA,KAAK,GAAA,CAAA,WAJZ5Q,EAEM,OAAA;AAAA;QAFgB,SAAOgG,EAAA,KAAoB;AAAA,MAAA;QAC7ChI,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;MAKAgT,EAAAA,SAAI,iBAAhBjR,EAA0G,QAAA;AAAA;QAA3E,OAAKyD,EAAA,CAAC,mCAA0CkN,EAAA,QAAO,QAAA,KAAA,CAAA;AAAA,MAAA;MACtFhP,EAeO,QAAA;AAAA,QAfD,OAAM;AAAA,QAAU,eAAauP,EAAAA;AAAAA,QAAiB,UAAM1Q,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA2Q,GAAA,CAAA1Q,MAAA;;AAAU,kBAAA3U,IAAAie,EAAA,UAAA,gBAAAje,EAAQ;AAAA,WAAI,CAAA,SAAA,CAAA;AAAA,MAAA;WAC5E6V,EAaC,SAAA;AAAA,UAZG,KAAI;AAAA,wDACKiP,EAAK,QAAAnQ;AAAA,UACb,UAAU2Q,EAAAA,YAAY;AAAA,UACtB,cAAYC,EAAAA,aAAa;AAAA,UACzB,MAAAJ,EAAAA;AAAAA,UACA,OAAKxN,EAAA;AAAA,YAAwBqN,EAAA;AAAA,4BAAwDH,EAAA,OAAO,wBAAA,CAA2BA,EAAA,SAAWM,EAAAA,SAAI,SAAA;AAAA,UAAA;UAItI,SAAKzQ,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAE2B,EAAAA,MAAK,UAAWwO,EAAA,KAAK;AAAA,UAC5B,gCAAOG;UACP,+BAAMC,EAAA;AAAA,QAAW;eAVTJ,EAAA,KAAK;AAAA,QAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BCX1BjT,EAoCQmJ,IAAA;AAAA,MApCA,OAAOjF,EAAAA,IAAG,iBAAA,oBAAA,EAAA,OAA+CyC,UAAQ,KAAK,OAAA,CAAM;AAAA,IAAA;iBAChF,MAkCK;AAAA,QAlCL3C,EAkCK,MAAA,MAAA;AAAA,WAjCDjE,EAAA,EAAA,GAAAsC,EAgCKC,WA/BsBqE,EAAAA,QAAQ,MAAI,CAA3BhH,GAAKgU,YADjBtR,EAgCK,MAAA;AAAA,YA9BA,KAAKsR;AAAA,YACN,OAAM;AAAA,UAAA;YAEN3P,EAWM,OAAA,MAAA;AAAA,cAVFA,EAEK,MAFLI,IAEKR,EADEjE,EAAI,OAAO,KAAK,GAAA,CAAA;AAAA,cAEvBqE,EAEO,QAAA;AAAA,gBAFA,UAAUrE,EAAI,KAAK,YAAA;AAAA,gBAAe,OAAM;AAAA,cAAA,KACxCA,EAAI,KAAK,oBAAkB,GAAA,GAAAsG,EAAA;AAAA,cAElCvE,EAGEuD,GAAA;AAAA,gBAFE,OAAM;AAAA,gBACL,MAAMtF,EAAI,OAAO,eAAeM,EAAA5D,EAAA,EAAgBsD,EAAI,MAAM;AAAA,cAAA;;YAGnE+B,EAcSwD,GAAA;AAAA,cAbL,MAAK;AAAA,cACL,SAAQ;AAAA,cACP,cAAYhB,EAAAA,IAAG,sBAAA,cAAA;AAAA,cACf,OAAOA,EAAAA,IAAG,sBAAA,cAAA;AAAA,cACX,OAAM;AAAA,cACL,SAAK,CAAApB,MAA2B6D,EAAAA,QAAQ;AAAA,gBAAqChH,EAAI;AAAA,gBAAoCgH,EAAAA,QAAQ,KAAK,IAAG,CAAA,EAAI,QAAAnH,EAAA,MAAaA,CAAM;AAAA,cAAA;AAAA;yBAO7J,MAAkD;AAAA,gBAAlDkC,EAAkDzB,EAAA2T,EAAA,GAAA;AAAA,kBAApC,OAAM;AAAA,kBAAS,eAAY;AAAA,gBAAA;;;;;;;;;;;;;qBC/B/CjN,EAAAA,QAAQ,KAAK,SAAM,UAD7B3G,EASSkF,GAAA;AAAA;MAPL,MAAK;AAAA,MACL,SAAQ;AAAA,MACP,OAAOhB,EAAAA,IAAG,mBAAA,iBAAA;AAAA,MACV,cAAYA,EAAAA,IAAG,mBAAA,iBAAA;AAAA,MACf,SAAKrB,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAEkN,EAAAA,IAAI,MAAM6D,EAAc;AAAA,IAAA;iBAEhC,MAA2C;AAAA,QAA3CnS,EAA2CzB,EAAA6T,EAAA,GAAA,EAA9B,OAAM,uBAAqB;AAAA,MAAA;;;;;;;;;;ACIhD,UAAMvW,IAAU7H,EAAS,MAAM2G,GAAgByD,EAAA,KAAK,CAAC;2BAZjDE,EAAmCiF,GAAA;AAAA,MAAxB,MAAM1H,EAAA;AAAA,MAAS,QAAA;AAAA,IAAA;;;;;;;;;;;;;;;;;sBCA1BwC,EAAA,GAAAC,EAESkF,GAFThF,EAES,EAFD,SAAQ,OAAA,GAAe6B,EAAAA,MAAM,GAAA;AAAA,iBACjC,MAAQ;AAAA,QAAR1B,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;;;ACWhB,UAAMnP,IAAWuE,EAAS,MAAMqe,GAAYjiB,EAAI,UAAU,YAAY,MAAM,CAAC;2BAZzEkO,EAEQmJ,IAAA;AAAA,MAFA,OAAOjF,EAAAA,IAAG,kBAAA,UAAA;AAAA,MAAiC,wBAAsBoK,EAAAA,KAAK;AAAA,IAAA;iBACvC,MAAkC;AAAA,SAArEvO,EAAA,EAAA,GAAAsC,EAA6EC,GAAA,MAAAC,EAAjBpR,EAAA,OAAQ,CAAzBI,GAASjD,OAApDyR,EAAA,GAAAC,EAA6EiD,GAA7D1R,EAAQ,SAAS,GAAA,EAAsC,KAAAjD,GAAG;;;;;;;;;;;;;;;;;;;;;ACmClF,UAAM+P,IAAgDkC,EAAAT,GAAA,CAAA,SAAA,cAAA,cAAA,CAAA,GAGhDsM,IAAS1E,EAAe,WAAW,GACnC,CAACgF,GAAYC,CAAW,IAAIpW,GAAA,GAC5BqW,IAAyBlX,EAAS,MACpCzB,EAAQ,kCAAkC,EAAE,QAAQ6L,EAAA,MAAA,GAASA,EAAA,YAAY,CAAC,GACxEiN,IAAuBrX,EAAS;;AAClC,aAAAzB;AAAA;AAAA,QAEI;AAAA,QACA;AAAA,UACI,0BAA0B,GAAC9F,IAAAie,EAAO,UAAP,QAAAje,EAAc;AAAA,UACzC,uEAAuE,GAACyC,IAAAwb,EAAO,UAAP,QAAAxb,EAAc;AAAA,UACtF,mFAAkFG,IAAAqb,EAAO,UAAP,gBAAArb,EAAc;AAAA,QAAA;AAAA,QAEpG+O,EAAA;AAAA,MAAA;AAAA,KACH;sBArDDC,EAAA,GAAAC,EAgBgBgN,IAhBhB9M,EAgBgB;AAAA,MAfZ,KAAI;AAAA,MACH,OAAOiG,EAAAA;AAAAA,MACP,OAAOlG,EAAA0M,CAAA;AAAA,IAAA,GACAtO,GAAK;AAAA,MACZ,uBAAkBwE,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAE2B,EAAAA,MAAK,qBAAsB3B,CAAM;AAAA,IAAA;iBAEtD,MAAA;;AAAgF;AAAA,UAAhFpB,EAAgFuL,IAAA,EAA5D,OAAM,qDAAmD;AAAA,UAC7EjJ,EAKM,OAAA;AAAA,YALA,SAAO4I,EAAA,KAAsB;AAAA,UAAA;YAC/BlL,EAA2EsS,IAA3E9T,EAA2ED,MAAlC,EAAG,OAAO8M,EAAA,MAAA,CAAoB,GAAA,MAAA,IAAA,CAAA,OAAA,CAAA;AAAA,aAC5D5e,IAAAie,EAAA,UAAA,QAAAje,EAAQ,UAAnB4R,KAAAsC,EAEM,OAFN+B,IAEM;AAAA,cADF1C,EAAoDzB,EAAAoE,EAAA,GAAA,EAA9B,OAAM,uBAAqB;AAAA,YAAA;;UAGzD3C,EAA+DyL,IAAA,EAArC,OAAM,8BAA4B;AAAA,UAC5DzL,EAAwD0L,IAAA,EAApC,OAAM,6BAA2B;AAAA,QAAA;AAAA;;;;;ACR7D,MAA8B6G,GAI5B;AAAA,EASE,cAAc;AAPJ,IAAAzlB,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AAGN,SAAK,SAAS,KAAK,iBAAA,GACnB,KAAK,aAAa,IAAI0lB,GAAA,GACtB,KAAK,WAAW,IAAIvlB,EAAA,GACpB,KAAK,aAAa,IAAIA,EAAA;AAAA,EAC1B;AAAA,EAEA,MAAa,QAAuB;AAChC,SAAK,YAAA,GACL,KAAK,SAAS,QAAA;AAEd,QAAI;AACA,YAAM,KAAK,eAAA,GACX,MAAM,KAAK,IAAA,GACX,MAAM,KAAK,eAAA,GAEX,KAAK,WAAW,QAAA;AAAA,IACpB,SAASG,GAAO;AACZ,UAAIA,aAAiB+X;AACjB;AAGJ,YAAMpZ,GAAI0mB,GAAQrlB,CAAK,GAAG,CAACslB,MAAc;AACrC,aAAK,WAAW,OAAOA,CAAS;AAAA,MACpC,CAAC;AAAA,IACL;AAAA,EACJ;AAAA,EAEA,MAAa,SAAwB;AACjC,SAAK,aAAa,IAAIzlB,EAAA,GAEtB,MAAM,KAAK;AAAA,EACf;AAAA,EAEO,YAA8B;AACjC,WAAO,KAAK,gBAAgB,KAAK,MAAM;AAAA,EAC3C;AAAA,EAEA,IAAW,YAAiC;AACxC,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAW,WAAmB;AAC1B,WAAO,KAAK,aAAa;AAAA,EAC7B;AAAA,EAEA,IAAW,YAAqB;;AAC5B,WAAO,CAAC,GAACR,IAAA,KAAK,eAAL,QAAAA,EAAiB;AAAA,EAC9B;AAAA,EAEA,IAAW,UAAyB;AAChC,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAW,YAA2B;AAClC,WAAO,KAAK;AAAA,EAChB;AAAA,EAIU,mBAA2B;AACjC,WAAO,EAAE,WAAW,GAAA;AAAA,EACxB;AAAA,EAEU,cAAoB;AAC1B,QAAK,KAAK,SAAS,cAInB;AAAA,UAAI,KAAK,YAAY;AACjB,eAAO,KAAK,WACZ,OAAO,KAAK;AAEZ;AAAA,MACJ;AAEA,YAAM,IAAI,MAAM,sBAAsB;AAAA;AAAA,EAC1C;AAAA,EAEU,qBAA2B;AACjC,QAAK,KAAK;AAIV,iBAAK,WAAW,QAAA,GAEV,IAAI0Y,GAAA;AAAA,EACd;AAAA,EAEU,yBAAyBwN,GAA4B;AAG3D,WAFAA,UAAW,KAAK,SAEZA,EAAO,YACA,IAGP,CAACA,EAAO,YAAYA,EAAO,SAAS,WAAW,IACxC,IAGJC;AAAA,MACHD,EAAO,SAAS,OAAO,CAACE,GAAO/M,MAAU+M,IAAQ,KAAK,yBAAyB/M,CAAK,GAAG,CAAC,IACpF6M,EAAO,SAAS;AAAA,MACpB;AAAA,IAAA;AAAA,EAER;AAAA,EAEA,MAAgB,eAAeplB,GAAqD;AAChF,WAAMA,KAAA,gBAAAA,EAAS,KAAK;AAEpB,UAAMgd,IAAW,KAAK,yBAAA;AAEtB,IAAIA,MAAa,KAAK,cAItB,KAAK,YAAYA,GAEjB,MAAM,KAAK,WAAW,KAAK,aAAaA,CAAQ;AAAA,EACpD;AAAA,EAEU,gBAAgBoI,GAAkC;AACxD,WAAO,EAAE,GAAGA,EAAA;AAAA,EAChB;AAEJ;AC3IA,eAAsBG,GAAStI,GAAyB;AACpD,QAAMA,EAAI,MAAA;AACd;"}
|