@dereekb/dbx-form 13.2.2 → 13.3.1

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.
@@ -1 +1 @@
1
- {"version":3,"file":"dereekb-dbx-form.mjs","sources":["../../../../packages/dbx-form/src/lib/form/form.ts","../../../../packages/dbx-form/src/lib/form/action/form.action.directive.ts","../../../../packages/dbx-form/src/lib/form/action/transition/form.action.transition.safety.directive.ts","../../../../packages/dbx-form/src/lib/formly/formly.context.ts","../../../../packages/dbx-form/src/lib/formly/formly.form.component.ts","../../../../packages/dbx-form/src/lib/form/io/form.input.directive.ts","../../../../packages/dbx-form/src/lib/form/action/form.action.dialog.component.ts","../../../../packages/dbx-form/src/lib/form/io/form.loading.directive.ts","../../../../packages/dbx-form/src/lib/form/io/form.change.directive.ts","../../../../packages/dbx-form/src/lib/form/form.angular.util.ts","../../../../packages/dbx-form/src/lib/form/form.module.ts","../../../../packages/dbx-form/src/lib/formly/config/validation.ts","../../../../packages/dbx-form/src/lib/formly/field/checklist/checklist.item.field.content.default.component.ts","../../../../packages/dbx-form/src/lib/formly/field/checklist/checklist.item.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/checklist/checklist.item.field.component.html","../../../../packages/dbx-form/src/lib/formly/field/wrapper/info.wrapper.component.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/section.wrapper.component.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/flex.wrapper.component.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/subsection.wrapper.component.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/expand.wrapper.delegate.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/expand.wrapper.component.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/autotouch.wrapper.component.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/toggle.wrapper.component.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/style.wrapper.component.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/working.wrapper.component.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/wrapper.key.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/wrapper.module.ts","../../../../packages/dbx-form/src/lib/formly/field/checklist/checklist.item.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/field.ts","../../../../packages/dbx-form/src/lib/formly/field/checklist/checklist.item.field.ts","../../../../packages/dbx-form/src/lib/formly/field/checklist/checklist.field.ts","../../../../packages/dbx-form/src/lib/formly/field/component/component.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/component/component.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/component/component.field.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/list/list.field.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/list/list.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/list/list.field.component.html","../../../../packages/dbx-form/src/lib/formly/field/selection/list/list.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/pickable/pickable.field.directive.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/pickable/pickable.chip.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/pickable/pickable.chip.field.component.html","../../../../packages/dbx-form/src/lib/formly/field/selection/pickable/pickable.list.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/pickable/pickable.list.field.component.html","../../../../packages/dbx-form/src/lib/formly/field/selection/pickable/pickable.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/pickable/pickable.field.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/pickable/pickable.util.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/searchable/searchable.field.autocomplete.item.component.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/searchable/searchable.field.directive.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/searchable/searchable.chip.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/searchable/searchable.chip.field.component.html","../../../../packages/dbx-form/src/lib/formly/field/selection/searchable/searchable.field.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/searchable/searchable.text.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/searchable/searchable.text.field.component.html","../../../../packages/dbx-form/src/lib/formly/field/selection/searchable/searchable.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/searchable/text.chip.field.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/sourceselect/sourceselect.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/sourceselect/sourceselect.field.component.html","../../../../packages/dbx-form/src/lib/formly/field/selection/sourceselect/sourceselect.field.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/sourceselect/sourceselect.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/selection.field.ts","../../../../packages/dbx-form/src/lib/formly/field/texteditor/texteditor.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/texteditor/texteditor.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/texteditor/texteditor.field.ts","../../../../packages/dbx-form/src/lib/formly/field/value/array/array.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/value/array/array.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/value/array/array.field.ts","../../../../packages/dbx-form/src/lib/formly/field/value/boolean/boolean.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/value/boolean/boolean.field.ts","../../../../packages/dbx-form/src/lib/formly/field/value/date/datetime.ts","../../../../packages/dbx-form/src/lib/formly/field/value/date/datetime.field.service.ts","../../../../packages/dbx-form/src/lib/formly/field/value/date/date.value.ts","../../../../packages/dbx-form/src/lib/formly/field/value/date/datetime.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/value/date/datetime.field.component.html","../../../../packages/dbx-form/src/lib/formly/field/value/date/fixeddaterange.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/value/date/fixeddaterange.field.component.html","../../../../packages/dbx-form/src/lib/formly/field/value/date/date.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/wrapper.ts","../../../../packages/dbx-form/src/lib/formly/field/value/date/datetime.field.ts","../../../../packages/dbx-form/src/lib/formly/field/value/date/datetime.preset.ts","../../../../packages/dbx-form/src/lib/validator/boolean.ts","../../../../packages/dbx-form/src/lib/validator/email.ts","../../../../packages/dbx-form/src/lib/validator/field.ts","../../../../packages/dbx-form/src/lib/validator/number.ts","../../../../packages/dbx-form/src/lib/validator/available.ts","../../../../packages/dbx-form/src/lib/validator/phone.ts","../../../../packages/dbx-form/src/lib/validator/website.ts","../../../../packages/dbx-form/src/lib/formly/field/value/number/number.field.ts","../../../../packages/dbx-form/src/lib/formly/field/value/number/number.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/value/phone/phone.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/value/phone/phone.field.component.html","../../../../packages/dbx-form/src/lib/formly/field/value/phone/phone.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/value/text/text.field.ts","../../../../packages/dbx-form/src/lib/formly/field/value/phone/phone.field.ts","../../../../packages/dbx-form/src/lib/formly/field/value/text/text.additional.field.ts","../../../../packages/dbx-form/src/lib/formly/field/value/text/text.address.field.ts","../../../../packages/dbx-form/src/lib/formly/field/value/text/text.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/value/hidden.field.ts","../../../../packages/dbx-form/src/lib/formly/field/form.field.module.ts","../../../../packages/dbx-form/src/lib/formly/form/form.form.ts","../../../../packages/dbx-form/src/lib/formly/formly.directive.ts","../../../../packages/dbx-form/src/lib/formly/formly.component.template.ts","../../../../packages/dbx-form/src/lib/formly/form/search.form.component.ts","../../../../packages/dbx-form/src/lib/formly/template/available.ts","../../../../packages/dbx-form/src/lib/formly/template/available.module.ts","../../../../packages/dbx-form/src/lib/formly/template/login.ts","../../../../packages/dbx-form/src/lib/formly/template/login.module.ts","../../../../packages/dbx-form/src/lib/formly/template/timezone.ts","../../../../packages/dbx-form/src/lib/formly/template/timezone.module.ts","../../../../packages/dbx-form/src/lib/formly/template/website.ts","../../../../packages/dbx-form/src/lib/formly/formly.context.directive.ts","../../../../packages/dbx-form/src/lib/formly/formly.providers.ts","../../../../packages/dbx-form/src/lib/layout/form.spacer.directive.ts","../../../../packages/dbx-form/src/lib/form.module.ts","../../../../packages/dbx-form/src/lib/form.providers.ts","../../../../packages/dbx-form/src/dereekb-dbx-form.ts"],"sourcesContent":["import { forwardRef, type Provider, type Type } from '@angular/core';\nimport { type Observable } from 'rxjs';\nimport { type LockSet } from '@dereekb/rxjs';\nimport { type BooleanStringKeyArray, type Maybe } from '@dereekb/util';\nimport { type AbstractControl, type FormControlStatus } from '@angular/forms';\n\n/**\n * Current state of a DbxForm\n */\nexport enum DbxFormState {\n /**\n * Form is not finished initializing.\n */\n INITIALIZING = -1,\n /**\n * Form is initialized but has not yet used.\n */\n RESET = 0,\n /**\n * Form has been used.\n */\n USED = 1\n}\n\n/**\n * Unique key for disabling/enabling.\n */\nexport type DbxFormDisabledKey = string;\n\nexport const DEFAULT_FORM_DISABLED_KEY = 'dbx_form_disabled';\n\nexport interface DbxFormStateRef {\n readonly state: DbxFormState;\n}\n\n/**\n * DbxForm stream event\n */\nexport interface DbxFormEvent extends DbxFormStateRef {\n readonly isComplete: boolean;\n readonly status: FormControlStatus;\n readonly pristine?: boolean;\n readonly untouched?: boolean;\n readonly lastResetAt?: Date;\n readonly changesCount?: number;\n /**\n * Whether or not the form is disabled.\n */\n readonly isDisabled?: boolean;\n /**\n * Current disabled state keys.\n */\n readonly disabled?: BooleanStringKeyArray;\n}\n\n/**\n * Form that has an event stream, value, and state items.\n */\nexport abstract class DbxForm<T = unknown> {\n abstract readonly stream$: Observable<DbxFormEvent>;\n\n /**\n * Returns an observable that returns the current state of the form.\n */\n abstract getValue(): Observable<T>;\n\n /**\n * Returns an observable that returns the current disabled keys.\n */\n abstract getDisabled(): Observable<BooleanStringKeyArray>;\n}\n\nexport abstract class DbxMutableForm<T = unknown> extends DbxForm<T> {\n /**\n * LockSet for the form.\n */\n abstract readonly lockSet?: LockSet;\n\n /**\n * Sets the initial value of the form, and resets the form.\n *\n * @param value\n */\n abstract setValue(value: Maybe<Partial<T>>): void;\n\n /**\n * Resets the form to the initial value.\n */\n abstract resetForm(): void;\n\n /**\n * Disables the form\n *\n * @param disabled\n */\n abstract setDisabled(key?: DbxFormDisabledKey, disabled?: boolean): void;\n\n /**\n * Force the form to update itself as if it was changed.\n */\n abstract forceFormUpdate(): void;\n}\n\nexport function provideDbxForm<S extends DbxForm>(sourceType: Type<S>): Provider[] {\n return [{ provide: DbxForm, useExisting: forwardRef(() => sourceType) }];\n}\n\nexport function provideDbxMutableForm<S extends DbxMutableForm>(sourceType: Type<S>): Provider[] {\n return [...provideDbxForm(sourceType), { provide: DbxMutableForm, useExisting: forwardRef(() => sourceType) }];\n}\n\nexport function toggleDisableFormControl(form: AbstractControl<any>, isDisabled: boolean, config?: Parameters<AbstractControl['disable']>[0]) {\n if (isDisabled) {\n form.disable(config);\n } else {\n form.enable(config);\n }\n}\n","import { Directive, type OnInit, inject, input } from '@angular/core';\nimport { addSeconds, isPast } from 'date-fns';\nimport { type Observable, of, combineLatest, exhaustMap, catchError, delay, filter, first, map, switchMap, distinctUntilChanged, shareReplay } from 'rxjs';\nimport { DbxActionContextStoreSourceInstance, type DbxActionValueGetterResult, cleanLockSet } from '@dereekb/dbx-core';\nimport { SubscriptionObject, type IsModifiedFunction, type IsValidFunction, type ObservableOrValue, asObservable, type IsEqualFunction, makeIsModifiedFunctionObservable } from '@dereekb/rxjs';\nimport { DbxFormState, DbxMutableForm } from '../../form/form';\nimport { type IsModified, type IsValid, type MapFunction, type Maybe } from '@dereekb/util';\nimport { toObservable } from '@angular/core/rxjs-interop';\n\nexport const APP_ACTION_FORM_DISABLED_KEY = 'dbx_action_form';\n\nexport type DbxActionFormMapValueFunction<T, O> = MapFunction<T, ObservableOrValue<DbxActionValueGetterResult<O>>>;\n\n/**\n * Used with an action to bind a form to an action as it's value source.\n *\n * If the form has errors when the action is trigger, it will reject the action.\n *\n * If the source is not considered modified, the trigger will be ignored.\n */\n@Directive({\n selector: '[dbxActionForm]',\n standalone: true\n})\nexport class DbxActionFormDirective<T = object, O = T> implements OnInit {\n readonly form = inject(DbxMutableForm<T>, { host: true });\n readonly source = inject(DbxActionContextStoreSourceInstance<O, unknown>);\n\n readonly lockSet = cleanLockSet({\n onDestroy: () => {\n this.source.enable(APP_ACTION_FORM_DISABLED_KEY);\n },\n onLockSetDestroy: () => {\n this._triggeredSub.destroy();\n this._isCompleteSub.destroy();\n this._isWorkingSub.destroy();\n this.form.setDisabled(APP_ACTION_FORM_DISABLED_KEY, false);\n }\n });\n\n /**\n * Whether or not to disable the form while the action is working.\n *\n * Defaults to true.\n */\n readonly dbxActionFormDisabledOnWorking = input<Maybe<boolean>>(true);\n\n /**\n * Optional validator that checks whether or not the value is\n * ready to send before the context store is marked enabled.\n */\n readonly dbxActionFormIsValid = input<Maybe<IsValidFunction<T>>>();\n\n /**\n * Optional function that checks whether or not the value is still the same/equal.\n */\n readonly dbxActionFormIsEqual = input<Maybe<IsEqualFunction<T>>>();\n\n /**\n * Optional function that checks whether or not the value has been modified.\n *\n * If dbxActionFormIsEqual is provided, this will be ignored.\n */\n readonly dbxActionFormIsModified = input<Maybe<IsModifiedFunction<T>>>();\n\n /**\n * Optional function that maps the form's value to the source's value.\n */\n readonly dbxActionFormMapValue = input<Maybe<DbxActionFormMapValueFunction<T, O>>>();\n\n readonly dbxActionFormDisabledOnWorking$ = toObservable(this.dbxActionFormDisabledOnWorking);\n\n readonly isValidFunction$ = toObservable(this.dbxActionFormIsValid).pipe(\n map((x) => x ?? (() => of(true))),\n shareReplay(1)\n );\n readonly isModifiedFunction$: Observable<IsModifiedFunction<T>> = makeIsModifiedFunctionObservable({\n isModified: toObservable(this.dbxActionFormIsModified),\n isEqual: toObservable(this.dbxActionFormIsEqual)\n }).pipe(shareReplay(1));\n\n readonly mapValueFunction$: Observable<Maybe<DbxActionFormMapValueFunction<T, O>>> = toObservable(this.dbxActionFormMapValue);\n\n private readonly _triggeredSub = new SubscriptionObject();\n private readonly _isCompleteSub = new SubscriptionObject();\n private readonly _isWorkingSub = new SubscriptionObject();\n\n constructor() {\n if (this.form.lockSet) {\n this.lockSet.addChildLockSet(this.form.lockSet, 'form');\n }\n\n this.lockSet.addChildLockSet(this.source.lockSet, 'source');\n }\n\n ngOnInit(): void {\n // Pass data from the form to the source when triggered.\n this._triggeredSub.subscription = this.source.triggered$\n .pipe(\n switchMap(() =>\n this.form.stream$.pipe(\n first(),\n exhaustMap((stream) => {\n const { isComplete } = stream;\n const doNothing = {}; // nothing, form not complete\n\n let obs: Observable<DbxActionValueGetterResult<O>>;\n\n if (isComplete) {\n obs = this.form.getValue().pipe(\n first(),\n exhaustMap((value) =>\n this.preCheckReadyValue(value).pipe(\n first(),\n switchMap((canContinue) => {\n if (canContinue) {\n return this.readyValue(value).pipe(first());\n } else {\n return of(doNothing);\n }\n }),\n catchError((error) => of({ reject: error }))\n )\n )\n );\n } else {\n obs = of(doNothing);\n }\n\n return obs;\n })\n )\n )\n )\n .subscribe((result: DbxActionValueGetterResult<O>) => {\n if (result.reject) {\n this.source.reject(result.reject);\n } else if (result.value != null) {\n this.source.readyValue(result.value);\n } else {\n // value isn't ready\n }\n });\n\n // Update the enabled/disabled state\n this._isCompleteSub.subscription = this.form.stream$\n .pipe(\n delay(0),\n filter((x) => x.state !== DbxFormState.INITIALIZING),\n switchMap((event) => {\n return this.form.getValue().pipe(\n first(),\n exhaustMap((value) => {\n // Use both changes count and whether or not something was in the past to guage whether or not the item has been touched.\n // Angular Form's untouched is whether or not focus has been lost but we can still receive value updates.\n // More than a certain amount of updates implies that it is being typed into/used.\n // 3 changes and 2 seconds are arbitrary values derived from guesses about any slow/late changes that may come from external directives for setup.\n const isProbablyTouched = !event.untouched || ((event.changesCount ?? 0) > 3 && isPast(addSeconds(event.lastResetAt ?? new Date(), 2)));\n\n // create overrides\n const returnFalseFunction = () => of(false);\n\n const runIsValidCheck = event.isComplete;\n const isValidFunction: Maybe<IsValidFunction<T>> = runIsValidCheck ? undefined : returnFalseFunction;\n\n const isConsideredModified = event.pristine === false && isProbablyTouched;\n const isModifiedFunction: Maybe<IsModifiedFunction<T>> = isConsideredModified ? undefined : returnFalseFunction;\n\n return this.checkIsValidAndIsModified(value, { isValidFunction, isModifiedFunction }).pipe(\n map(([valid, modified]: [boolean, boolean]) => ({ valid, modified, value, event })),\n first()\n );\n })\n );\n })\n )\n .subscribe(({ valid, modified /*, value, event */ }) => {\n // console.log('x: ', value, event, valid, modified);\n\n // Update Modified State\n this.source.setIsModified(modified);\n\n // Disable if the form is not yet complete/valid.\n this.source.enable(APP_ACTION_FORM_DISABLED_KEY, valid);\n });\n\n // Watch the working state and disable form while working\n this._isWorkingSub.subscription = combineLatest([this.source.isWorking$, this.dbxActionFormDisabledOnWorking$])\n .pipe(\n map(([isWorking, disableFormWhileWorking]: [boolean, Maybe<boolean>]) => disableFormWhileWorking !== false && isWorking),\n distinctUntilChanged()\n )\n .subscribe((disable) => {\n this.form.setDisabled(APP_ACTION_FORM_DISABLED_KEY, disable);\n });\n }\n\n checkIsValidAndIsModified(value: T, overrides?: CheckValidAndModifiedOverrides<T>): Observable<[IsValid, IsModified]> {\n const { isModifiedFunction: overrideIsModifiedFunction, isValidFunction: overrideIsValidFunction } = overrides ?? {};\n const isValidFunctionObs = overrideIsValidFunction != null ? of(overrideIsValidFunction) : this.isValidFunction$;\n const isModifiedFunctionObs = overrideIsModifiedFunction != null ? of(overrideIsModifiedFunction) : this.isModifiedFunction$;\n\n return combineLatest([isValidFunctionObs, isModifiedFunctionObs]).pipe(\n switchMap(([isValid, isModified]) => {\n return combineLatest([isValid(value), isModified(value)]).pipe(map(([valid, modified]) => [valid, modified] as [boolean, boolean]));\n })\n );\n }\n\n protected preCheckReadyValue(value: T): Observable<[IsValid, IsModified]> {\n return this.checkIsValidAndIsModified(value);\n }\n\n protected readyValue(value: T): Observable<DbxActionValueGetterResult<O>> {\n return this.mapValueFunction$.pipe(\n switchMap((mapFunction) => {\n if (mapFunction) {\n return asObservable(mapFunction(value));\n } else {\n return of({ value: value as unknown as O });\n }\n })\n );\n }\n}\n\ninterface CheckValidAndModifiedOverrides<T> {\n isModifiedFunction?: Maybe<IsModifiedFunction<T>>;\n isValidFunction?: Maybe<IsValidFunction<T>>;\n}\n","import { Directive, effect, inject, input } from '@angular/core';\nimport { type HookResult, type Transition } from '@uirouter/core';\nimport { type DbxActionTransitionSafetyType, DbxActionTransitionSafetyDirective } from '@dereekb/dbx-web';\nimport { DbxActionFormDirective } from '../form.action.directive';\n\n/**\n * Extension of DbxActionTransitionSafetyDirective that forces the form to update first.\n *\n * NOTE: Only works with UIRouter\n */\n@Directive({\n selector: '[dbxActionFormSafety]',\n standalone: true\n})\nexport class DbxActionFormSafetyDirective<T, O> extends DbxActionTransitionSafetyDirective<T, O> {\n readonly dbxActionForm = inject(DbxActionFormDirective<T>, { host: true });\n readonly dbxActionFormSafety = input<DbxActionTransitionSafetyType>('auto');\n\n protected readonly _dbxActionFormSafetyUpdateEffect = effect(() => this._safetyType.next(this.dbxActionFormSafety()));\n\n protected override _handleOnBeforeTransition(transition: Transition): HookResult {\n this.dbxActionForm.form.forceFormUpdate();\n return super._handleOnBeforeTransition(transition);\n }\n}\n","import { Injectable, type OnDestroy, type Provider } from '@angular/core';\nimport { BehaviorSubject, type Observable, of, switchMap, shareReplay, distinctUntilChanged } from 'rxjs';\nimport { type DbxForm, type DbxFormDisabledKey, type DbxFormEvent, DbxFormState, type DbxMutableForm, DEFAULT_FORM_DISABLED_KEY, provideDbxMutableForm } from '../form/form';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { LockSet, filterMaybe } from '@dereekb/rxjs';\nimport { type BooleanStringKeyArray, BooleanStringKeyArrayUtility, type Destroyable, type Maybe } from '@dereekb/util';\n\nexport interface DbxFormlyInitialize<T> {\n fields: Observable<FormlyFieldConfig[]>;\n initialDisabled: BooleanStringKeyArray;\n initialValue: Maybe<Partial<T>>;\n}\n\n/**\n * DbxFormlyContext delegate.\n *\n * This is usually the component or element that contains the form itself.\n */\nexport interface DbxFormlyContextDelegate<T = unknown> extends Omit<DbxMutableForm<T>, 'lockSet'> {\n readonly stream$: Observable<DbxFormEvent>;\n init(initialize: DbxFormlyInitialize<T>): void;\n}\n\n/**\n * Allows a directive to provide a formly context and form.\n */\nexport function provideFormlyContext(): Provider[] {\n return [DbxFormlyContext, ...provideDbxMutableForm(DbxFormlyContext)];\n}\n\n/**\n * DbxForm Instance that registers a delegate and manages the state of that form/delegate.\n */\n@Injectable()\nexport class DbxFormlyContext<T = unknown> implements DbxForm<T>, Destroyable, OnDestroy {\n private static INITIAL_STATE: DbxFormEvent = { isComplete: false, state: DbxFormState.INITIALIZING, status: 'PENDING' };\n\n readonly lockSet = new LockSet();\n\n private readonly _fields = new BehaviorSubject<Maybe<FormlyFieldConfig[]>>(undefined);\n private readonly _initialValue = new BehaviorSubject<Maybe<Partial<T>>>(undefined);\n private readonly _disabled = new BehaviorSubject<BooleanStringKeyArray>(undefined);\n private readonly _delegate = new BehaviorSubject<Maybe<DbxFormlyContextDelegate<T>>>(undefined);\n\n readonly fields$ = this._fields.pipe(filterMaybe(), shareReplay(1));\n readonly disabled$ = this._disabled.pipe(filterMaybe(), shareReplay(1));\n readonly stream$: Observable<DbxFormEvent> = this._delegate.pipe(\n distinctUntilChanged(),\n switchMap((x) => (x ? x.stream$ : of(DbxFormlyContext.INITIAL_STATE))),\n shareReplay(1)\n );\n\n ngOnDestroy(): void {\n this.destroy();\n }\n\n destroy(): void {\n this.lockSet.destroyOnNextUnlock(() => {\n this._fields.complete();\n this._initialValue.complete();\n this._disabled.complete();\n this._delegate.complete();\n });\n }\n\n setDelegate(delegate?: DbxFormlyContextDelegate<T>): void {\n if (delegate !== this._delegate.value) {\n if (delegate != null) {\n delegate.init({\n fields: this.fields$,\n initialDisabled: this.disabled,\n initialValue: this._initialValue.value\n });\n }\n\n this._delegate.next(delegate);\n }\n }\n\n clearDelegate(delegate: DbxFormlyContextDelegate<T>): void {\n if (delegate === this._delegate.value) {\n this.setDelegate(undefined);\n }\n }\n\n get fields(): Maybe<FormlyFieldConfig[]> {\n return this._fields.value;\n }\n\n set fields(fields: Maybe<FormlyFieldConfig[]>) {\n this._fields.next(fields);\n }\n\n // MARK: FormComponent\n getValue(): Observable<T> {\n return this._delegate.pipe(\n filterMaybe(),\n switchMap((x) => x.getValue()),\n shareReplay(1)\n );\n }\n\n setValue(value: Partial<T>): void {\n this._initialValue.next(value);\n\n if (this._delegate.value) {\n this._delegate.value.setValue(value);\n }\n }\n\n isDisabled(): boolean {\n return BooleanStringKeyArrayUtility.isTrue(this.disabled);\n }\n\n get disabled(): BooleanStringKeyArray {\n return this._disabled.value;\n }\n\n getDisabled(): Observable<BooleanStringKeyArray> {\n return this._disabled.asObservable();\n }\n\n setDisabled(key?: DbxFormDisabledKey, disabled = true): void {\n const nextDisabled = BooleanStringKeyArrayUtility.set(this.disabled, key ?? DEFAULT_FORM_DISABLED_KEY, disabled);\n this._disabled.next(nextDisabled);\n\n if (this._delegate.value) {\n this._delegate.value.setDisabled(key, disabled);\n }\n }\n\n resetForm(): void {\n if (this._delegate.value) {\n this._delegate.value.resetForm();\n }\n }\n\n forceFormUpdate(): void {\n if (this._delegate.value) {\n this._delegate.value.forceFormUpdate();\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, type OnInit, computed, inject, signal, viewChild } from '@angular/core';\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { type FormlyFieldConfig, FormlyForm, type FormlyFormOptions, FormlyModule } from '@ngx-formly/core';\nimport { distinctUntilChanged, map, throttleTime, startWith, BehaviorSubject, type Observable, Subject, switchMap, shareReplay, of, scan, filter, timer, first, merge, delay } from 'rxjs';\nimport { cleanWithLockSet } from '@dereekb/dbx-core';\nimport { type DbxForm, type DbxFormDisabledKey, type DbxFormEvent, DbxFormState, DEFAULT_FORM_DISABLED_KEY, provideDbxMutableForm, toggleDisableFormControl } from '../form/form';\nimport { DbxFormlyContext, type DbxFormlyContextDelegate, type DbxFormlyInitialize } from './formly.context';\nimport { scanCount, switchMapFilterMaybe, SubscriptionObject } from '@dereekb/rxjs';\nimport { type BooleanStringKeyArray, BooleanStringKeyArrayUtility, iterablesAreSetEquivalent, type Maybe } from '@dereekb/util';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\nexport interface DbxFormlyFormState {\n changesSinceLastResetCount: number;\n isFormValid: boolean;\n isFormDisabled: boolean;\n}\n\n/**\n * Used for rending a form from a DbxFormlyContext.\n */\n@Component({\n selector: 'dbx-formly',\n exportAs: 'formly',\n template: `\n <form [formGroup]=\"form\" class=\"dbx-formly\">\n <formly-form [form]=\"form\" [options]=\"options\" [fields]=\"fieldsSignal()\" [model]=\"modelSignal()\"></formly-form>\n </form>\n `,\n host: {\n class: 'dbx-formly'\n },\n providers: provideDbxMutableForm(DbxFormlyComponent),\n imports: [FormsModule, ReactiveFormsModule, FormlyModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormlyComponent<T> implements DbxForm, DbxFormlyContextDelegate<T>, OnInit {\n private readonly _dbxFormlyContext = inject(DbxFormlyContext<T>);\n\n readonly formlyForm = viewChild(FormlyForm);\n\n private readonly _fields = new BehaviorSubject<Maybe<Observable<FormlyFieldConfig[]>>>(undefined);\n private readonly _events = new BehaviorSubject<DbxFormEvent>({ isComplete: false, state: DbxFormState.INITIALIZING, status: 'PENDING' });\n private readonly _disabled = new BehaviorSubject<BooleanStringKeyArray>(undefined);\n\n private readonly _reset = new BehaviorSubject<Date>(new Date());\n private readonly _forceUpdate = new Subject<void>();\n\n private readonly _disabledSub = new SubscriptionObject();\n private readonly _enforceDisabledSub = new SubscriptionObject();\n\n readonly form = new FormGroup({});\n readonly modelSignal = signal<T>({} as T);\n\n readonly options: FormlyFormOptions = {};\n\n readonly fields$ = this._fields.pipe(switchMapFilterMaybe(), distinctUntilChanged(), shareReplay(1));\n\n readonly stream$: Observable<DbxFormEvent> = this._reset.pipe(\n switchMap((lastResetAt) =>\n this.form.valueChanges.pipe(\n startWith(0),\n distinctUntilChanged(),\n throttleTime(50, undefined, { leading: true, trailing: true }),\n scanCount(-1),\n // update on validation changes too. Does not count towards changes since last reset.\n switchMap((changesSinceLastReset) => this.form.statusChanges.pipe(startWith(this.form.status), distinctUntilChanged()).pipe(map(() => changesSinceLastReset))),\n map((changesSinceLastResetCount: number) => ({\n changesSinceLastResetCount,\n isFormValid: this.form.status !== 'PENDING' && this.form.valid,\n isFormDisabled: this.form.disabled\n })),\n scan(\n (acc: DbxFormlyFormState, next: DbxFormlyFormState) => {\n // Pass forward valid if next was a disabled change/check, which changes angular form's isValid value.\n // If it was valid prior, then it should be valid now, unless we just reset, in which case it might not be valid.\n const valid = next.isFormValid || (next.isFormDisabled && acc.isFormValid && acc.changesSinceLastResetCount > 0);\n\n return {\n changesSinceLastResetCount: next.changesSinceLastResetCount,\n isFormValid: valid,\n isFormDisabled: next.isFormDisabled\n };\n },\n {\n changesSinceLastResetCount: 0,\n isFormValid: false,\n isFormDisabled: false\n }\n ),\n switchMap(({ changesSinceLastResetCount, isFormValid, isFormDisabled }) => {\n const nextState = () => {\n const isReset = changesSinceLastResetCount <= 1; // first emission after reset is the first value.\n const complete = isFormValid;\n\n const nextState: DbxFormEvent = {\n isComplete: complete,\n state: isReset ? DbxFormState.RESET : DbxFormState.USED,\n status: this.form.status,\n untouched: this.form.untouched,\n pristine: this.form.pristine,\n changesCount: changesSinceLastResetCount,\n lastResetAt,\n disabled: this.disabled,\n isDisabled: isFormDisabled\n };\n\n return nextState;\n };\n\n const state = nextState();\n\n if (isFormValid && this.form.untouched) {\n return timer(150, 200).pipe(\n // every 200 ms check if the form is now marked touched, then push a new state\n filter(() => this.form.touched),\n map(() => nextState()),\n // only push the new state once\n first(),\n // send the first value immediately\n startWith(state)\n );\n } else {\n return of(state);\n }\n })\n )\n ),\n shareReplay(1)\n );\n\n private readonly _fieldsSignal = toSignal(this.fields$, { initialValue: undefined });\n\n readonly fieldsSignal = computed(() => this._fieldsSignal() ?? []);\n\n constructor() {\n cleanWithLockSet(this._dbxFormlyContext.lockSet, () => {\n this._dbxFormlyContext.clearDelegate(this);\n this._events.complete();\n this._fields.complete();\n this._reset.complete();\n this._forceUpdate.complete();\n this._disabled.complete();\n this._disabledSub.destroy();\n this._enforceDisabledSub.destroy();\n });\n }\n\n ngOnInit(): void {\n this._dbxFormlyContext.setDelegate(this);\n\n const resyncDisabledState = () => {\n const isDisabled = BooleanStringKeyArrayUtility.isTrue(this._disabled.value);\n let change = false;\n\n if (this.form.disabled !== isDisabled) {\n toggleDisableFormControl(this.form, isDisabled, { emitEvent: true });\n change = true;\n }\n\n return change;\n };\n\n this._disabledSub.subscription = this._disabled.pipe(distinctUntilChanged(iterablesAreSetEquivalent)).subscribe(() => {\n resyncDisabledState();\n });\n\n // NOTE: Form sometimes becomes undisabled somewhere/somehow. Re-enforce the disabled state where necessary.\n this._enforceDisabledSub.subscription = merge([\n this._reset.pipe(\n map(() => 'RESET'),\n delay(50)\n ),\n this.form.statusChanges.pipe(throttleTime(50, undefined, { leading: true, trailing: true }))\n ]).subscribe((change) => {\n resyncDisabledState();\n });\n }\n\n // MARK: Delegate\n init(initialize: DbxFormlyInitialize<T>): void {\n this._fields.next(initialize.fields);\n this._disabled.next(initialize.initialDisabled);\n }\n\n getValue(): Observable<T> {\n return of(this.form.value as T);\n }\n\n setValue(value: T): void {\n this.modelSignal.set(structuredClone(value) as T);\n\n if (this.options.updateInitialValue) {\n this.options.updateInitialValue();\n this.options.resetModel?.();\n }\n\n // Re-mark as untouched and pristine.\n this.form.markAsUntouched();\n this.form.markAsPristine();\n\n // After updating the value, if the form is still untouched mark it as pristine again.\n // Sometimes the values get marked as changed and break pristine before a user has time to interact.\n setTimeout(() => {\n if (this.form.untouched) {\n this.form.markAsPristine();\n }\n }, 500);\n\n // ping reset\n this.resetForm();\n }\n\n resetForm(): void {\n if (this.options.resetModel) {\n this.options.resetModel();\n }\n\n this._reset.next(new Date());\n }\n\n get isDisabled(): boolean {\n return BooleanStringKeyArrayUtility.isTrue(this.disabled);\n }\n\n get disabled(): BooleanStringKeyArray {\n return this._disabled.value;\n }\n\n getDisabled(): Observable<BooleanStringKeyArray> {\n return this._disabled.asObservable();\n }\n\n setDisabled(key?: DbxFormDisabledKey, disabled = true): void {\n const next = BooleanStringKeyArrayUtility.set(this.disabled, key ?? DEFAULT_FORM_DISABLED_KEY, disabled);\n this._disabled.next(next);\n }\n\n // MARK: Update\n forceFormUpdate(): void {\n this._forceUpdate.next();\n }\n}\n","import { distinctUntilChanged, filter, map, switchMap, combineLatest, type Observable, EMPTY, exhaustMap, takeUntil, Subject, tap, shareReplay, throttleTime, type Subscription } from 'rxjs';\nimport { Directive, effect, inject, input } from '@angular/core';\nimport { DbxFormState, type DbxFormStateRef, DbxMutableForm } from '../form';\nimport { type Maybe } from '@dereekb/util';\nimport { asObservable, type ObservableOrValue, cleanup, errorOnEmissionsInPeriod } from '@dereekb/rxjs';\nimport { cleanSubscription } from '@dereekb/dbx-core';\n\nexport function dbxFormSourceObservable<T>(form: DbxMutableForm, inputObs: ObservableOrValue<T>, modeObs: Observable<DbxFormSourceDirectiveMode>): Observable<T> {\n return dbxFormSourceObservableFromStream(form.stream$, inputObs, modeObs);\n}\n\nexport function dbxFormSourceObservableFromStream<T>(streamObs: Observable<DbxFormStateRef>, inputObs: ObservableOrValue<T>, modeObs: ObservableOrValue<DbxFormSourceDirectiveMode>): Observable<T> {\n const value$ = asObservable(inputObs).pipe(shareReplay(1)); // catch/share the latest emission\n\n const state$ = streamObs.pipe(\n map((x) => x.state),\n distinctUntilChanged()\n );\n\n const mode$ = asObservable(modeObs).pipe(distinctUntilChanged());\n\n return combineLatest([mode$, value$]).pipe(\n map((x) => x[0]),\n distinctUntilChanged(),\n switchMap((mode: DbxFormSourceDirectiveMode) => {\n if (mode === 'reset') {\n // reset only\n return state$.pipe(\n exhaustMap((state: DbxFormState) => {\n if (state === DbxFormState.RESET) {\n let firstValueSent = false;\n const doneSubject = new Subject();\n\n return combineLatest([value$, state$]).pipe(\n map(([value, state]) => {\n if (!firstValueSent || state === DbxFormState.RESET) {\n return [value, true] as [T, boolean]; // always forward the first value.\n } else {\n return [value, false] as [T, boolean];\n }\n }),\n tap(([_, send]) => {\n firstValueSent = true;\n if (!send) {\n doneSubject.next(undefined);\n }\n }),\n filter(([_, send]) => send),\n map(([value, _]) => value),\n takeUntil(doneSubject),\n cleanup(() => {\n doneSubject.complete();\n })\n );\n } else {\n return EMPTY;\n }\n })\n );\n } else {\n // pass any updated value while not initializing.\n return state$.pipe(\n map((x) => x === DbxFormState.INITIALIZING),\n distinctUntilChanged(),\n switchMap((initializing: boolean) => {\n if (initializing) {\n return EMPTY;\n } else {\n let valueObs = value$;\n\n if (mode === 'always') {\n valueObs = valueObs.pipe(\n throttleTime(10, undefined, { leading: true, trailing: true }),\n errorOnEmissionsInPeriod({\n period: 1000,\n maxEmissionsPerPeriod: 50,\n onError: () => {\n console.error('dbxFormSourceObservableFromStream: Error thrown due to too many emissions. There may be an unintentional loop being triggered by dbxFormSource. Typically this can occur in cases where the dbxFormSource directive is used at the same time as dbxFormValueChange directive and the same value is being pushed.');\n }\n })\n );\n }\n\n return valueObs;\n }\n })\n );\n }\n })\n );\n}\n\n/**\n * DbxFormSourceDirective modes that define when to copy data from the source.\n *\n * - reset: only copy data when the form is reset.\n * - always: always copy data when the data observable emits a value. Has a throttle of 20ms to prevent too many emissions. If emissions occur in a manner that appears to be a loop (more than 30 emissions in 1 second), then an error is thrown and warning printed to the console.\n * - every: equal to always, but has no throttle or error message warning.\n */\nexport type DbxFormSourceDirectiveMode = 'reset' | 'always' | 'every';\n\n/**\n * Used with a FormComponent to set the value based on the input value.\n */\n@Directive({\n selector: '[dbxFormSource]',\n standalone: true\n})\nexport class DbxFormSourceDirective<T = unknown> {\n readonly form = inject(DbxMutableForm<T>, { host: true });\n\n readonly dbxFormSourceMode = input<Maybe<DbxFormSourceDirectiveMode>>();\n readonly dbxFormSource = input<Maybe<ObservableOrValue<Maybe<Partial<T>>>>>();\n\n protected readonly _effectSub = cleanSubscription();\n protected readonly _setFormSourceObservableEffect = effect(() => {\n const formSource = this.dbxFormSource();\n const mode: DbxFormSourceDirectiveMode = this.dbxFormSourceMode() ?? 'reset';\n\n let subscription: Maybe<Subscription>;\n\n if (formSource) {\n subscription = dbxFormSourceObservableFromStream(this.form.stream$, formSource, mode).subscribe((x) => {\n this.form.setValue(x);\n });\n }\n\n this._effectSub.setSub(subscription);\n });\n}\n","import { Component, inject, type OnInit } from '@angular/core';\nimport { AbstractDialogDirective, DbxDialogContentDirective, DbxDialogContentCloseComponent, DbxActionModule, DbxButtonModule, type DbxButtonStyle } from '@dereekb/dbx-web';\nimport { type MatDialog, type MatDialogConfig, type MatDialogRef } from '@angular/material/dialog';\nimport { type Maybe } from '@dereekb/util';\nimport { asObservableFromGetter, type MaybeObservableOrValueGetter, type ObservableOrValueGetter, type WorkUsingContext } from '@dereekb/rxjs';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { distinctUntilChanged } from 'rxjs';\nimport { cleanSubscription, type DbxButtonDisplay } from '@dereekb/dbx-core';\nimport { DbxFormlyContext, provideFormlyContext } from '../../formly/formly.context';\nimport { DbxFormlyComponent } from '../../formly/formly.form.component';\nimport { DbxFormSourceDirective } from '../io/form.input.directive';\nimport { DbxActionFormDirective } from './form.action.directive';\n\nexport interface DbxFormActionDialogComponentButtonConfig extends DbxButtonDisplay, DbxButtonStyle {}\n\nexport interface DbxFormActionDialogComponentConfig<O> {\n /**\n * Header text for the dialog.\n */\n readonly header: string;\n /**\n * Used for retrieving the fields to display in the dialog.\n */\n readonly fields: ObservableOrValueGetter<FormlyFieldConfig[]>;\n /**\n * Initial value for the form.\n */\n readonly initialValue?: MaybeObservableOrValueGetter<O>;\n /**\n * Text/Icon for the submit button.\n */\n readonly submitButtonConfig?: DbxFormActionDialogComponentButtonConfig;\n /**\n * Dialog-specific configuration\n */\n readonly dialog?: Omit<MatDialogConfig, 'data'>;\n}\n\n/**\n *\n */\n@Component({\n template: `\n <dbx-dialog-content dbxAction [dbxActionHandler]=\"handleSubmitValue\" class=\"dbx-dialog-content-with-header\">\n <h3 class=\"dbx-dialog-content-header\">{{ header }}</h3>\n <dbx-dialog-content-close (close)=\"close()\"></dbx-dialog-content-close>\n <div>\n <dbx-formly dbxActionForm [dbxFormSource]=\"initialValue$\"></dbx-formly>\n <dbx-button dbxActionButton [buttonDisplay]=\"submitButtonConfig\" [buttonStyle]=\"submitButtonConfig\" [raised]=\"true\"></dbx-button>\n </div>\n </dbx-dialog-content>\n `,\n standalone: true,\n providers: [provideFormlyContext()],\n imports: [DbxDialogContentDirective, DbxActionModule, DbxButtonModule, DbxDialogContentCloseComponent, DbxFormlyComponent, DbxFormSourceDirective, DbxActionFormDirective, DbxFormlyComponent]\n})\nexport class DbxFormActionDialogComponent<O> extends AbstractDialogDirective<O, DbxFormActionDialogComponentConfig<O>> implements OnInit {\n private readonly _fieldsSub = cleanSubscription();\n\n readonly context = inject(DbxFormlyContext<O>, { self: true });\n readonly fields$ = asObservableFromGetter(this.data.fields);\n readonly initialValue$ = asObservableFromGetter(this.data.initialValue);\n\n readonly header = this.data.header;\n\n readonly submitButtonConfig = {\n text: 'Submit',\n ...this.data.submitButtonConfig\n };\n\n ngOnInit(): void {\n this._fieldsSub.setSub(\n this.fields$.pipe(distinctUntilChanged()).subscribe((fields) => {\n this.context.fields = fields;\n })\n );\n }\n\n readonly handleSubmitValue: WorkUsingContext<O> = (value, context) => {\n context.success();\n this.close(value);\n };\n\n static openDialogWithForm<O>(matDialog: MatDialog, config: DbxFormActionDialogComponentConfig<O>): MatDialogRef<DbxFormActionDialogComponent<O>, Maybe<O>> {\n const dialogRef = matDialog.open(DbxFormActionDialogComponent<O>, {\n width: '90vw',\n maxHeight: '300px',\n maxWidth: '600px',\n ...config.dialog,\n data: config\n });\n\n return dialogRef;\n }\n}\n","import { type Observable } from 'rxjs';\nimport { Directive, inject, input } from '@angular/core';\nimport { cleanSubscription } from '@dereekb/dbx-core';\nimport { DbxMutableForm } from '../../form/form';\nimport { type LoadingState, type MaybeObservableOrValue, filterMaybe, maybeValueFromObservableOrValue, valueFromFinishedLoadingState } from '@dereekb/rxjs';\nimport { dbxFormSourceObservableFromStream, type DbxFormSourceDirectiveMode } from './form.input.directive';\nimport { type Maybe } from '@dereekb/util';\nimport { toObservable } from '@angular/core/rxjs-interop';\n\nconst DEFAULT_DBX_FORM_LOADING_SOURCE_DIRECTIVE_MODE: DbxFormSourceDirectiveMode = 'reset';\n\n/**\n * Used with a FormComponent to set the value from a LoadingState when the value is available.\n *\n * Only passes non-null values from the source.\n */\n@Directive({\n selector: '[dbxFormLoadingSource]',\n standalone: true\n})\nexport class DbxFormLoadingSourceDirective<T extends object = object> {\n readonly form = inject(DbxMutableForm<T>, { host: true });\n\n readonly dbxFormLoadingSourceMode = input<DbxFormSourceDirectiveMode, Maybe<DbxFormSourceDirectiveMode>>(DEFAULT_DBX_FORM_LOADING_SOURCE_DIRECTIVE_MODE, { transform: (x) => x ?? DEFAULT_DBX_FORM_LOADING_SOURCE_DIRECTIVE_MODE });\n readonly dbxFormLoadingSource = input<MaybeObservableOrValue<LoadingState<T>>>();\n\n readonly mode$ = toObservable(this.dbxFormLoadingSourceMode);\n readonly source$: Observable<Maybe<T>> = toObservable(this.dbxFormLoadingSource).pipe(maybeValueFromObservableOrValue(), filterMaybe(), valueFromFinishedLoadingState());\n\n constructor() {\n cleanSubscription(\n dbxFormSourceObservableFromStream(this.form.stream$, this.source$, this.mode$).subscribe((x) => {\n this.form.setValue(x);\n })\n );\n }\n}\n","import { Directive, type OnInit, inject, output } from '@angular/core';\nimport { cleanSubscription } from '@dereekb/dbx-core';\nimport { type Maybe } from '@dereekb/util';\nimport { first, mergeMap, delay, map } from 'rxjs';\nimport { DbxForm } from '../form';\n\n/**\n * Used to see form value changes.\n *\n * Emits undefined when the form is incomplete, and the value when the form is complete.\n */\n@Directive({\n selector: '[dbxFormValueChange]',\n standalone: true\n})\nexport class DbxFormValueChangeDirective<T> implements OnInit {\n readonly form = inject(DbxForm<T>, { host: true });\n\n readonly dbxFormValueChange = output<Maybe<T>>();\n\n protected readonly _sub = cleanSubscription();\n\n ngOnInit(): void {\n // specifically call within ngOnInit to ensure first emission occurs after the form is initialized.\n this._sub.setSub(\n this.form.stream$\n .pipe(\n mergeMap((x) =>\n this.form.getValue().pipe(\n first(),\n map((value) => ({ isComplete: x.isComplete, value }))\n )\n ),\n delay(0)\n )\n .subscribe(({ isComplete, value }) => {\n if (isComplete) {\n this.dbxFormValueChange.emit(value);\n } else {\n this.dbxFormValueChange.emit(undefined);\n }\n })\n );\n }\n}\n","import { type AbstractControl } from '@angular/forms';\nimport { type Maybe } from '@dereekb/util';\nimport { type Observable, startWith } from 'rxjs';\n\n/**\n * A FormGroup/AbstractControl path to a specific control.\n */\nexport type FormControlPath = string;\n\n/**\n * Streams a value from the input control at the given path. If no path is specified, streams the value from the control.\n *\n * @param fromControl\n * @param path\n * @returns\n */\nexport function streamValueFromControl<T>(fromControl: AbstractControl, path?: FormControlPath): Maybe<Observable<T>> {\n const control = path ? fromControl.get(path) : fromControl;\n return control?.valueChanges.pipe(startWith(control.value));\n}\n","import { NgModule } from '@angular/core';\n\n@NgModule({\n exports: []\n})\nexport class DbxFormModule {}\n","import { type FieldTypeConfig } from '@ngx-formly/core';\nimport { type ValidationMessageOption } from '../type';\n\nexport function minLengthValidationMessage(err: unknown, field: FieldTypeConfig) {\n return `Should have atleast ${field.props.minLength} characters.`;\n}\n\nexport function maxLengthValidationMessage(err: unknown, field: FieldTypeConfig) {\n return `This value should be less than ${field.props.maxLength} characters.`;\n}\n\nexport function minValidationMessage(err: unknown, field: FieldTypeConfig) {\n return `This value should be more than or equal to ${field.props.min}.`;\n}\n\nexport function maxValidationMessage(err: unknown, field: FieldTypeConfig) {\n return `This value should be less than or equal to ${field.props.max}.`;\n}\n\nexport const REQUIRED_VALIDATION_MESSAGE = { name: 'required', message: 'This field is required.' };\nexport const MIN_LENGTH_VALIDATION_MESSAGE = { name: 'minLength', message: minLengthValidationMessage } as ValidationMessageOption;\nexport const MAX_LENGTH_VALIDATION_MESSAGE = { name: 'maxLength', message: maxLengthValidationMessage } as ValidationMessageOption;\nexport const MIN_VALIDATION_MESSAGE = { name: 'min', message: minValidationMessage } as ValidationMessageOption;\nexport const MAX_VALIDATION_MESSAGE = { name: 'max', message: maxValidationMessage } as ValidationMessageOption;\nexport const INVALID_PHONE_NUMBER_MESSAGE = { name: 'validatePhoneNumber', message: 'This is not a valid phone number.' };\nexport const INVALID_PHONE_NUMBER_EXTENSION_MESSAGE = { name: 'validatePhoneNumberExtension', message: 'This is not a valid phone number extension.' };\n\nexport function defaultValidationMessages(): ValidationMessageOption[] {\n return [REQUIRED_VALIDATION_MESSAGE, MIN_LENGTH_VALIDATION_MESSAGE, MAX_LENGTH_VALIDATION_MESSAGE, MIN_VALIDATION_MESSAGE, MAX_VALIDATION_MESSAGE, INVALID_PHONE_NUMBER_MESSAGE, INVALID_PHONE_NUMBER_EXTENSION_MESSAGE];\n}\n","import { ChangeDetectionStrategy, Component, signal } from '@angular/core';\nimport { type ChecklistItemDisplayContent, type ChecklistItemFieldDisplayComponent } from './checklist.item';\nimport { type Maybe } from '@dereekb/util';\n\n// MARK: Default\n@Component({\n template: `\n @if (displayContentSignal()) {\n <div class=\"dbx-default-checklist-item-field\">\n @if (displayContentSignal()?.label) {\n <div class=\"item-label\">{{ displayContentSignal()?.label }}</div>\n }\n @if (displayContentSignal()?.sublabel) {\n <div class=\"item-sublabel\">{{ displayContentSignal()?.sublabel }}</div>\n }\n @if (displayContentSignal()?.description) {\n <div class=\"dbx-hint item-description\">{{ displayContentSignal()?.description }}</div>\n }\n </div>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: []\n})\nexport class DbxDefaultChecklistItemFieldDisplayComponent<T = unknown> implements ChecklistItemFieldDisplayComponent<T> {\n readonly _displayContentSignal = signal<Maybe<ChecklistItemDisplayContent<T>>>(undefined);\n readonly displayContentSignal = this._displayContentSignal.asReadonly();\n\n setDisplayContent(displayContent: ChecklistItemDisplayContent<T>): void {\n this._displayContentSignal.set(displayContent);\n }\n}\n","import { ChangeDetectionStrategy, Component, type OnInit, type Type, inject, signal } from '@angular/core';\nimport { type DbxInjectionComponentConfig, DbxInjectionComponent, cleanSubscription } from '@dereekb/dbx-core';\nimport { switchMapFilterMaybe } from '@dereekb/rxjs';\nimport { shareReplay, distinctUntilChanged, map, type Observable } from 'rxjs';\nimport { type ValidationErrors, type FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { FieldType, type FieldTypeConfig, type FormlyFieldProps } from '@ngx-formly/core';\nimport { type ChecklistItemFieldDisplayComponent, type ChecklistItemDisplayContent } from './checklist.item';\nimport { DbxDefaultChecklistItemFieldDisplayComponent } from './checklist.item.field.content.default.component';\nimport { type Maybe } from '@dereekb/util';\nimport { toSignal, toObservable } from '@angular/core/rxjs-interop';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatRippleModule } from '@angular/material/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { DbxAnchorComponent } from '@dereekb/dbx-web';\n\n@Component({\n selector: 'dbx-checklist-item-content-component',\n template: `\n <dbx-injection [config]=\"config\"></dbx-injection>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [DbxInjectionComponent]\n})\nexport class DbxChecklistItemContentComponent<T = unknown> {\n readonly checklistItemFieldComponent = inject(DbxChecklistItemFieldComponent<T>);\n\n readonly config: DbxInjectionComponentConfig<ChecklistItemFieldDisplayComponent<T>> = {\n componentClass: this.checklistItemFieldComponent.componentClass,\n init: (instance) => {\n cleanSubscription(\n this.checklistItemFieldComponent.displayContent$.subscribe((content: ChecklistItemDisplayContent<T>) => {\n instance.setDisplayContent(content);\n })\n );\n }\n };\n}\n\nexport interface DbxChecklistItemFieldProps<T = unknown> extends FormlyFieldProps {\n /**\n * Observable used to retrieve content to display for the item.\n */\n readonly displayContent: Observable<ChecklistItemDisplayContent<T>>;\n /**\n * Custom component class to use by default.\n */\n readonly componentClass?: Type<ChecklistItemFieldDisplayComponent<T>>;\n}\n\n@Component({\n templateUrl: 'checklist.item.field.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [ReactiveFormsModule, MatCheckboxModule, DbxAnchorComponent, MatRippleModule, MatIconModule, DbxChecklistItemContentComponent]\n})\nexport class DbxChecklistItemFieldComponent<T = unknown> extends FieldType<FieldTypeConfig<DbxChecklistItemFieldProps<T>>> implements OnInit {\n private readonly _displayContentObs = signal<Maybe<Observable<ChecklistItemDisplayContent<T>>>>(undefined);\n\n readonly displayContent$: Observable<ChecklistItemDisplayContent<T>> = toObservable(this._displayContentObs).pipe(switchMapFilterMaybe(), distinctUntilChanged(), shareReplay(1));\n\n readonly anchor$ = this.displayContent$.pipe(\n map((x: ChecklistItemDisplayContent<T>) => x.anchor),\n shareReplay(1)\n );\n\n readonly rippleDisabled$ = this.displayContent$.pipe(\n map((x: ChecklistItemDisplayContent<T>) => x.ripple === false || (x.ripple !== true && !x.anchor)),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly anchorSignal = toSignal(this.anchor$);\n readonly rippleDisabledSignal = toSignal(this.rippleDisabled$, { initialValue: false });\n\n get formGroup(): FormGroup {\n return this.form as FormGroup;\n }\n\n get formControlName(): string {\n return this.key as string;\n }\n\n get label(): Maybe<string> {\n return this.props.label;\n }\n\n get description(): Maybe<string> {\n return this.props.description;\n }\n\n get required(): Maybe<boolean> {\n return this.props.required;\n }\n\n get checklistField(): DbxChecklistItemFieldProps<T> {\n return this.props;\n }\n\n get errors(): Maybe<ValidationErrors> {\n return this.field.formControl?.errors;\n }\n\n get componentClass(): Type<ChecklistItemFieldDisplayComponent<T>> {\n return this.checklistField.componentClass ?? DbxDefaultChecklistItemFieldDisplayComponent;\n }\n\n ngOnInit() {\n // field prop is finally available here\n this._displayContentObs.set(this.checklistField.displayContent);\n }\n}\n","<div class=\"dbx-checklist-item-wrapper\" [formGroup]=\"formGroup\">\n @if (label) {\n <div class=\"dbx-checklist-item-label\">{{ label }}</div>\n }\n <div class=\"dbx-checklist-item\">\n <div class=\"dbx-checklist-item-check\">\n <mat-checkbox [formControlName]=\"formControlName\"></mat-checkbox>\n </div>\n <div class=\"dbx-checklist-item-content-wrapper\">\n <dbx-anchor [block]=\"true\" [anchor]=\"anchorSignal()\">\n <div class=\"dbx-checklist-item-content\" matRipple [matRippleDisabled]=\"rippleDisabledSignal()\">\n <dbx-checklist-item-content-component></dbx-checklist-item-content-component>\n <span class=\"spacer\"></span>\n @if (!rippleDisabledSignal()) {\n <mat-icon>navigate_next</mat-icon>\n }\n </div>\n </dbx-anchor>\n </div>\n </div>\n @if (description) {\n <div class=\"dbx-hint\">{{ description }}</div>\n }\n</div>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { FieldWrapper, type FormlyFieldConfig, type FormlyFieldProps } from '@ngx-formly/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\n\nexport interface DbxFormInfoConfig extends FormlyFieldProps {\n readonly onInfoClick: () => void;\n}\n\n@Component({\n template: `\n <div class=\"dbx-form-info-wrapper dbx-flex-bar\">\n <div class=\"dbx-form-info-wrapper-content dbx-flex-grow\">\n <ng-container #fieldComponent></ng-container>\n </div>\n <div class=\"dbx-form-info-wrapper-info dbx-flex-noshrink dbx-flex-column dbx-flex-center\">\n <button mat-icon-button [attr.aria-label]=\"'show info button for ' + (to.label || 'section')\" (click)=\"onInfoClick()\">\n <mat-icon>info</mat-icon>\n </button>\n </div>\n </div>\n `,\n imports: [MatIconButton, MatIconModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormInfoWrapperComponent extends FieldWrapper<FormlyFieldConfig<DbxFormInfoConfig>> {\n get infoWrapper(): DbxFormInfoConfig {\n return this.props;\n }\n\n onInfoClick(): void {\n this.infoWrapper.onInfoClick();\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { type DbxSectionHeaderConfig, DbxSectionLayoutModule } from '@dereekb/dbx-web';\nimport { type Maybe } from '@dereekb/util';\nimport { FieldWrapper, type FormlyFieldConfig } from '@ngx-formly/core';\n\nexport type DbxFormSectionConfig = DbxSectionHeaderConfig;\n\n@Component({\n selector: 'dbx-form-section-wrapper',\n template: `\n <dbx-section [headerConfig]=\"headerConfig\">\n <ng-container #fieldComponent></ng-container>\n </dbx-section>\n `,\n imports: [DbxSectionLayoutModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormSectionWrapperComponent extends FieldWrapper<FormlyFieldConfig<DbxFormSectionConfig>> {\n get headerConfig(): Maybe<DbxSectionHeaderConfig> {\n return this.props;\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { DbxFlexGroupDirective, type ScreenMediaWidthType } from '@dereekb/dbx-web';\nimport { FieldWrapper, type FormlyFieldConfig } from '@ngx-formly/core';\n\nexport interface DbxFlexWrapperConfig {\n /**\n * Breakpoint based on the screen width.\n */\n readonly breakpoint?: ScreenMediaWidthType;\n /**\n * Whether or not to use relative sizing.\n */\n readonly relative?: boolean;\n /**\n * Whether or not to break to a new column when the breakpoint is reached.\n */\n readonly breakToColumn?: boolean;\n}\n\n@Component({\n template: `\n <div class=\"dbx-form-flex-section\" dbxFlexGroup [content]=\"false\" [relative]=\"relative\" [breakpoint]=\"breakpoint\" [breakToColumn]=\"breakToColumn\">\n <ng-container #fieldComponent></ng-container>\n </div>\n `,\n imports: [DbxFlexGroupDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormFlexWrapperComponent extends FieldWrapper<FormlyFieldConfig<DbxFlexWrapperConfig>> {\n get flexWrapper(): DbxFlexWrapperConfig {\n return this.props;\n }\n\n get breakpoint() {\n return this.flexWrapper.breakpoint;\n }\n\n get relative() {\n return this.flexWrapper.relative ?? false;\n }\n\n get breakToColumn() {\n return this.flexWrapper.breakToColumn ?? false;\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { type DbxSectionHeaderConfig, DbxSubSectionComponent } from '@dereekb/dbx-web';\nimport { type Maybe } from '@dereekb/util';\nimport { type FieldTypeConfig, FieldWrapper } from '@ngx-formly/core';\n\nexport type DbxFormSubsectionConfig = DbxSectionHeaderConfig;\n\n@Component({\n selector: 'dbx-form-subsection-wrapper',\n template: `\n <dbx-subsection [headerConfig]=\"headerConfig\">\n <ng-container #fieldComponent></ng-container>\n </dbx-subsection>\n `,\n imports: [DbxSubSectionComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormSubsectionWrapperComponent extends FieldWrapper<FieldTypeConfig<DbxFormSubsectionConfig>> {\n get headerConfig(): Maybe<DbxSectionHeaderConfig> {\n return this.props;\n }\n}\n","import { type Maybe, objectIsEmpty } from '@dereekb/util';\nimport { FieldWrapper, type FormlyFieldProps, type FormlyFieldConfig } from '@ngx-formly/core';\nimport { map, shareReplay, startWith, switchMap, BehaviorSubject, of, distinctUntilChanged } from 'rxjs';\nimport { Directive, type OnDestroy, type OnInit } from '@angular/core';\nimport { type AbstractControl } from '@angular/forms';\nimport { filterMaybe } from '@dereekb/rxjs';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\nexport interface AbstractFormExpandSectionConfig<T extends object = object> extends Pick<FormlyFieldProps, 'label'> {\n expandLabel?: string;\n /**\n * Optional function to use for checking value existence.\n */\n hasValueFn?: (value: T) => boolean;\n}\n\nexport const DEFAULT_HAS_VALUE_FN = (x: object) => !objectIsEmpty(x);\n\n@Directive()\nexport class AbstractFormExpandSectionWrapperDirective<T extends object = object, S extends AbstractFormExpandSectionConfig<T> = AbstractFormExpandSectionConfig<T>> extends FieldWrapper<FormlyFieldConfig<S>> implements OnInit, OnDestroy {\n protected readonly _formControlObs = new BehaviorSubject<Maybe<AbstractControl>>(undefined);\n protected readonly _toggleOpen = new BehaviorSubject<Maybe<boolean>>(undefined);\n\n readonly formControl$ = this._formControlObs.pipe(filterMaybe());\n\n readonly show$ = this._toggleOpen.pipe(\n switchMap((toggleOpen: Maybe<boolean>) => {\n if (toggleOpen != null) {\n return of(toggleOpen);\n } else {\n return this.hasValue$;\n }\n }),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly hasValue$ = this.formControl$.pipe(\n switchMap((x) =>\n x.valueChanges.pipe(\n startWith(x.value),\n map((value) => {\n return this.hasValueFn(value);\n }),\n shareReplay(1)\n )\n )\n );\n\n readonly showSignal = toSignal(this.show$, { initialValue: false });\n readonly hasValueSignal = toSignal(this.hasValue$, { initialValue: false });\n\n get expandSection(): S {\n return this.props;\n }\n\n get hasValueFn(): (value: T) => boolean {\n return this.expandSection.hasValueFn ?? (DEFAULT_HAS_VALUE_FN as (value: T) => boolean);\n }\n\n get expandLabel(): Maybe<string> {\n let label: Maybe<string> = this.expandSection.expandLabel ?? this.field.props?.label;\n\n if (label == null) {\n const firstFieldGroup = this.field.fieldGroup?.[0];\n\n if (firstFieldGroup) {\n label = firstFieldGroup.props?.label ?? (firstFieldGroup.key as string);\n }\n }\n\n return label;\n }\n\n open(): void {\n this._toggleOpen.next(true);\n }\n\n ngOnInit(): void {\n this._formControlObs.next(this.formControl);\n }\n\n ngOnDestroy(): void {\n this._toggleOpen.complete();\n this._formControlObs.complete();\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { AbstractFormExpandSectionWrapperDirective, type AbstractFormExpandSectionConfig } from './expand.wrapper.delegate';\n\nexport type DbxFormExpandWrapperButtonType = 'button' | 'text';\n\nexport interface DbxFormExpandWrapperConfig<T extends object = object> extends AbstractFormExpandSectionConfig<T> {\n readonly buttonType?: DbxFormExpandWrapperButtonType;\n}\n\n/**\n * Section that is expandable by a button until a value is set, or the button is pressed.\n */\n@Component({\n template: `\n @if (showSignal()) {\n <ng-container #fieldComponent></ng-container>\n } @else {\n <span class=\"dbx-form-expand-wrapper-button\" (click)=\"open()\">{{ expandLabel }}</span>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormExpandWrapperComponent<T extends object = object> extends AbstractFormExpandSectionWrapperDirective<T, DbxFormExpandWrapperConfig<T>> {\n get buttonType(): DbxFormExpandWrapperButtonType {\n return this.expandSection.buttonType ?? 'button';\n }\n}\n","import { ChangeDetectionStrategy, Component, type OnInit } from '@angular/core';\nimport { type FieldTypeConfig, FieldWrapper } from '@ngx-formly/core';\nimport { delay } from 'rxjs';\n\n/**\n * Wrapper than sets the field to \"touched\" when the value changes and the field is not pristine.\n */\n@Component({\n template: `\n <ng-container #fieldComponent></ng-container>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class AutoTouchFieldWrapperComponent extends FieldWrapper<FieldTypeConfig> implements OnInit {\n ngOnInit(): void {\n this.formControl.valueChanges.pipe(delay(200)).subscribe(() => {\n if (!this.formControl.pristine && this.formControl.untouched) {\n this.formControl.markAsTouched();\n this.formControl.updateValueAndValidity();\n }\n });\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { type Maybe } from '@dereekb/util';\nimport { first, shareReplay, switchMap, type Observable, of } from 'rxjs';\nimport { type AbstractFormExpandSectionConfig, AbstractFormExpandSectionWrapperDirective } from './expand.wrapper.delegate';\nimport { MatSlideToggle } from '@angular/material/slide-toggle';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\nexport interface DbxFormToggleWrapperConfig<T extends object = object> extends AbstractFormExpandSectionConfig<T> {\n toggleLabelObs?: (open: Maybe<boolean>) => Observable<string>;\n}\n\n/**\n * Section that can be expanded by a button until a value is set, or the button is pressed.\n */\n@Component({\n template: `\n <div class=\"dbx-form-toggle-wrapper\">\n <div class=\"dbx-form-toggle-wrapper-toggle\">\n <mat-slide-toggle [checked]=\"showSignal()\" (toggleChange)=\"onToggleChange()\">{{ slideLabelSignal() }}</mat-slide-toggle>\n </div>\n @if (showSignal()) {\n <ng-container #fieldComponent></ng-container>\n }\n </div>\n `,\n imports: [MatSlideToggle],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormToggleWrapperComponent<T extends object = object> extends AbstractFormExpandSectionWrapperDirective<T, DbxFormToggleWrapperConfig> {\n readonly slideLabel$ = this._toggleOpen.pipe(\n switchMap((x) => {\n if (this.expandSection?.toggleLabelObs) {\n return this.expandSection?.toggleLabelObs(x);\n } else {\n return of(this.expandLabel);\n }\n }),\n shareReplay(1)\n );\n\n readonly slideLabelSignal = toSignal(this.slideLabel$, { initialValue: '' });\n\n onToggleChange(): void {\n this.show$.pipe(first()).subscribe((show) => {\n this._toggleOpen.next(!show);\n });\n }\n}\n","import { NgClass, NgStyle } from '@angular/common';\nimport { type OnInit, type OnDestroy, Component, ChangeDetectionStrategy } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { asObservable, type ObservableOrValue, switchMapMaybeDefault } from '@dereekb/rxjs';\nimport { type Maybe } from '@dereekb/util';\nimport { FieldWrapper, type FormlyFieldConfig } from '@ngx-formly/core';\nimport { BehaviorSubject, type Observable, shareReplay } from 'rxjs';\n\nexport type DbxFormStyleObject = { [styleClass: string]: any };\n\nexport interface DbxFormStyleWrapperConfig {\n styleGetter?: Maybe<ObservableOrValue<DbxFormStyleObject>>;\n classGetter?: Maybe<ObservableOrValue<string>>;\n}\n\n@Component({\n template: `\n <div class=\"dbx-form-style-wrapper\" [ngClass]=\"classSignal()\" [ngStyle]=\"styleSignal()\">\n <ng-container #fieldComponent></ng-container>\n </div>\n `,\n imports: [NgClass, NgStyle],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormStyleWrapperComponent extends FieldWrapper<FormlyFieldConfig<DbxFormStyleWrapperConfig>> implements OnInit, OnDestroy {\n private readonly _style = new BehaviorSubject<Maybe<Observable<DbxFormStyleObject>>>(undefined);\n private readonly _class = new BehaviorSubject<Maybe<Observable<string>>>(undefined);\n\n readonly style$ = this._style.pipe(switchMapMaybeDefault({}), shareReplay(1));\n readonly class$ = this._class.pipe(switchMapMaybeDefault(''), shareReplay(1));\n\n readonly styleSignal = toSignal(this.style$);\n readonly classSignal = toSignal(this.class$);\n\n get styleGetter(): Maybe<ObservableOrValue<DbxFormStyleObject>> {\n return this.props.styleGetter;\n }\n\n get classGetter(): Maybe<ObservableOrValue<string>> {\n return this.props.classGetter;\n }\n\n ngOnInit(): void {\n if (this.styleGetter) {\n this._style.next(asObservable(this.styleGetter));\n }\n\n if (this.classGetter) {\n this._class.next(asObservable(this.classGetter));\n }\n }\n\n ngOnDestroy(): void {\n this._style.complete();\n this._class.complete();\n }\n}\n","import { type OnInit, type OnDestroy, Component, ChangeDetectionStrategy } from '@angular/core';\nimport { DbxLoadingComponent } from '@dereekb/dbx-web';\nimport { SimpleLoadingContext, SubscriptionObject } from '@dereekb/rxjs';\nimport { FieldWrapper, type FormlyFieldConfig } from '@ngx-formly/core';\n\n/**\n * No configurable value for now.\n */\nexport type DbxFormWorkingWrapperConfig = object;\n\n/**\n * Adds a loading bar to help signify asynchronous work is occuring.\n *\n * By default shows loading during asynchronous validation of a field (FormControl status is \"PENDING\")\n */\n@Component({\n template: `\n <div class=\"dbx-form-working-wrapper\">\n <ng-container #fieldComponent></ng-container>\n <dbx-loading [linear]=\"true\" [context]=\"workingContext\"></dbx-loading>\n </div>\n `,\n imports: [DbxLoadingComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormWorkingWrapperComponent extends FieldWrapper<FormlyFieldConfig<DbxFormWorkingWrapperConfig>> implements OnInit, OnDestroy {\n readonly sub = new SubscriptionObject();\n readonly workingContext = new SimpleLoadingContext(false);\n\n ngOnInit(): void {\n this.sub.subscription = this.formControl?.statusChanges.subscribe({\n next: (x) => this.workingContext.setLoading(x === 'PENDING')\n });\n }\n\n ngOnDestroy(): void {\n this.workingContext.destroy();\n this.sub.destroy();\n }\n}\n","export const AUTO_TOUCH_WRAPPER_KEY = 'autotouch';\nexport const TOGGLE_WRAPPER_KEY = 'toggle';\nexport const SECTION_WRAPPER_KEY = 'section';\nexport const SUBSECTION_WRAPPER_KEY = 'subsection';\nexport const INFO_WRAPPER_KEY = 'info';\nexport const FLEX_WRAPPER_KEY = 'flex';\nexport const STYLE_WRAPPER_KEY = 'style';\nexport const WORKING_WRAPPER_KEY = 'working';\nexport const EXPAND_WRAPPER_KEY = 'expand';\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxFormInfoWrapperComponent } from './info.wrapper.component';\nimport { DbxFormSectionWrapperComponent } from './section.wrapper.component';\nimport { DbxFormFlexWrapperComponent } from './flex.wrapper.component';\nimport { DbxFormSubsectionWrapperComponent } from './subsection.wrapper.component';\nimport { DbxFormExpandWrapperComponent } from './expand.wrapper.component';\nimport { AutoTouchFieldWrapperComponent } from './autotouch.wrapper.component';\nimport { DbxFormToggleWrapperComponent } from './toggle.wrapper.component';\nimport { DbxFormStyleWrapperComponent } from './style.wrapper.component';\nimport { DbxFormWorkingWrapperComponent } from './working.wrapper.component';\nimport { AUTO_TOUCH_WRAPPER_KEY, EXPAND_WRAPPER_KEY, FLEX_WRAPPER_KEY, INFO_WRAPPER_KEY, SECTION_WRAPPER_KEY, STYLE_WRAPPER_KEY, SUBSECTION_WRAPPER_KEY, TOGGLE_WRAPPER_KEY, WORKING_WRAPPER_KEY } from './wrapper.key';\nimport { FormlyMaterialModule } from '@ngx-formly/material';\n\nconst importsAndExports = [\n AutoTouchFieldWrapperComponent,\n DbxFormSectionWrapperComponent,\n DbxFormSubsectionWrapperComponent,\n DbxFormInfoWrapperComponent,\n DbxFormExpandWrapperComponent,\n DbxFormToggleWrapperComponent,\n DbxFormFlexWrapperComponent,\n DbxFormStyleWrapperComponent,\n DbxFormWorkingWrapperComponent,\n // Formly\n FormlyModule,\n FormlyMaterialModule\n];\n\n@NgModule({\n imports: [\n ...importsAndExports,\n FormlyModule.forChild({\n wrappers: [\n { name: AUTO_TOUCH_WRAPPER_KEY, component: AutoTouchFieldWrapperComponent },\n { name: EXPAND_WRAPPER_KEY, component: DbxFormExpandWrapperComponent },\n { name: TOGGLE_WRAPPER_KEY, component: DbxFormToggleWrapperComponent },\n { name: SECTION_WRAPPER_KEY, component: DbxFormSectionWrapperComponent },\n { name: SUBSECTION_WRAPPER_KEY, component: DbxFormSubsectionWrapperComponent },\n { name: INFO_WRAPPER_KEY, component: DbxFormInfoWrapperComponent },\n { name: FLEX_WRAPPER_KEY, component: DbxFormFlexWrapperComponent },\n { name: STYLE_WRAPPER_KEY, component: DbxFormStyleWrapperComponent },\n { name: WORKING_WRAPPER_KEY, component: DbxFormWorkingWrapperComponent }\n ]\n })\n ],\n exports: importsAndExports\n})\nexport class DbxFormFormlyWrapperModule {}\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxFormFormlyWrapperModule } from '../wrapper/wrapper.module';\nimport { DbxChecklistItemContentComponent, DbxChecklistItemFieldComponent } from './checklist.item.field.component';\nimport { DbxDefaultChecklistItemFieldDisplayComponent } from './checklist.item.field.content.default.component';\n\nconst importsAndExports = [DbxChecklistItemFieldComponent, DbxChecklistItemContentComponent, DbxDefaultChecklistItemFieldDisplayComponent];\n\n@NgModule({\n imports: [\n ...importsAndExports,\n DbxFormFormlyWrapperModule,\n FormlyModule.forChild({\n types: [{ name: 'checklistitem', component: DbxChecklistItemFieldComponent }]\n })\n ],\n exports: importsAndExports\n})\nexport class DbxFormFormlyChecklistItemFieldModule {}\n","import { type AsyncValidatorFn, type ValidatorFn } from '@angular/forms';\nimport { mergeObjects, filterFromPOJO, mergeObjectsFunction, filterFromPOJOFunction, type FilterKeyValueTuplesInput, type GeneralFilterFromPOJOFunction, type ArrayOrValue, type Maybe, asArray, objectHasNoKeys, type MapFunction } from '@dereekb/util';\nimport { type FormlyFieldConfig, type FormlyFieldProps } from '@ngx-formly/core';\nimport { type ValidationMessageOption } from '../type';\nimport { type FormlyFieldProps as MaterialFormlyFormFieldProps } from '@ngx-formly/material/form-field';\n\nexport type FormlyValueParser<I = any, O = any> = MapFunction<I, O>;\n\nexport interface FieldConfigParsersRef {\n parsers: FormlyValueParser[];\n}\n\nexport interface FieldConfig extends Pick<FormlyFieldConfig, 'expressions' | 'parsers'>, Partial<FieldConfigParsersRef> {\n key: string;\n required?: boolean;\n readonly?: boolean;\n}\n\nexport interface FieldConfigWithParsers {\n parsers?: FormlyValueParser[];\n}\n\nexport type DisableAutocompleteForField = false;\n\nexport interface LabeledFieldConfig extends FieldConfig {\n key: string;\n label?: string;\n placeholder?: string;\n required?: boolean;\n readonly?: boolean;\n /**\n * Sets the autocomplete values.\n */\n autocomplete?: string | DisableAutocompleteForField;\n}\n\nexport interface DefaultValueFieldConfig<T = unknown> {\n defaultValue?: T;\n}\n\nexport interface AttributesFieldConfig {\n attributes?: {\n [key: string]: string | number;\n };\n}\n\nexport interface DescriptionFieldConfig {\n description?: string;\n}\n\nexport type PartialPotentialFieldConfig = Partial<FieldConfig> & Partial<LabeledFieldConfig> & Partial<AttributesFieldConfig> & Partial<DescriptionFieldConfig>;\n\n/**\n * Validates the configuration on the input field.\n */\nexport function formlyField<T extends FormlyFieldConfig = FormlyFieldConfig>(fieldConfig: T): T {\n if (!fieldConfig.key) {\n console.error(fieldConfig);\n throw new Error(`Field had a null key.`);\n }\n\n return fieldConfig;\n}\n\n/**\n * Creates an object with propers, expressions, and parsers properly configured from the input FieldConfig.\n *\n * @param fieldConfig\n * @param override\n * @returns\n */\nexport function propsAndConfigForFieldConfig<O extends object = object>(fieldConfig: Partial<FieldConfig> & Partial<LabeledFieldConfig> & Partial<AttributesFieldConfig> & Partial<DescriptionFieldConfig>, override?: PartialPotentialFieldConfig & O) {\n const { expressions, parsers } = fieldConfig;\n const props = propsValueForFieldConfig(fieldConfig, override);\n\n return {\n props,\n expressions,\n parsers\n };\n}\n\nexport const partialPotentialFieldConfigKeys: (keyof PartialPotentialFieldConfig)[] = ['label', 'placeholder', 'required', 'readonly', 'description', 'autocomplete'];\nexport const partialPotentialFieldConfigKeysFilter: FilterKeyValueTuplesInput<PartialPotentialFieldConfig> = {\n keysFilter: partialPotentialFieldConfigKeys\n};\n\nexport const mergePropsValueObjects = mergeObjectsFunction<PartialPotentialFieldConfig>(partialPotentialFieldConfigKeysFilter);\n\nexport const filterPartialPotentialFieldConfigValuesFromObject = filterFromPOJOFunction<PartialPotentialFieldConfig>({\n filter: partialPotentialFieldConfigKeysFilter\n}) as GeneralFilterFromPOJOFunction<PartialPotentialFieldConfig>;\n\nexport function propsValueForFieldConfig<T extends FormlyFieldProps, O extends object = object>(fieldConfig: PartialPotentialFieldConfig, override?: PartialPotentialFieldConfig & O): Partial<T> & O {\n const { label, placeholder, required, readonly, description, autocomplete } = mergePropsValueObjects([fieldConfig, override]);\n const attributes = mergeObjects([fieldConfig.attributes, override?.attributes]);\n\n const result = filterFromPOJO({\n ...override,\n label,\n placeholder,\n required,\n readonly,\n description,\n attributes\n }) as T & O;\n\n // Apply autocomplete\n if (autocomplete != null) {\n if (autocomplete === false) {\n result.attributes = {\n ...result.attributes,\n ...disableFormlyFieldAutofillAttributes()\n };\n } else {\n (\n result.attributes as {\n [key: string]: string | number;\n }\n )['autocomplete'] = autocomplete;\n }\n }\n\n return result;\n}\n\n/**\n * Returns configuration for a formlyField that will disable autofill/autocomplete for a field.\n */\nexport function disableFormlyFieldAutofillAttributes(): { name: string; autocomplete: string } {\n // https://stackoverflow.com/questions/15738259/disabling-chrome-autofill\n return {\n name: 'password',\n autocomplete: 'off'\n };\n}\n\nexport type FormlyMessageProperties = {\n [messageProperties: string]: ValidationMessageOption['message'];\n};\n\nexport interface ValidatorsForFieldConfigInput {\n validators?: ArrayOrValue<ValidatorFn>;\n asyncValidators?: ArrayOrValue<AsyncValidatorFn>;\n messages?: Maybe<FormlyMessageProperties>;\n}\n\nexport type ValidatorsForFieldConfig = {\n validation?: {\n messages?: FormlyMessageProperties;\n };\n validators?: {\n validation: ValidatorFn[];\n };\n asyncValidators?: {\n validation: AsyncValidatorFn[];\n };\n};\n\nexport function validatorsForFieldConfig(input: ValidatorsForFieldConfigInput): Maybe<ValidatorsForFieldConfig> {\n const validators: ValidatorFn[] = asArray(input.validators);\n const asyncValidators: AsyncValidatorFn[] = asArray(input.asyncValidators);\n const messages: Maybe<FormlyMessageProperties> = input.messages;\n let config: Maybe<ValidatorsForFieldConfig>;\n\n if (messages || validators.length || asyncValidators.length) {\n config = {};\n\n if (validators.length) {\n config.validators = {\n validation: validators\n };\n }\n\n if (asyncValidators.length) {\n config.validators = {\n validation: asyncValidators\n };\n }\n\n if (messages && !objectHasNoKeys(messages)) {\n config.validation = {\n messages\n };\n }\n }\n\n return config;\n}\n\n// MARK: Material\nexport interface MaterialFormFieldConfig {\n readonly materialFormField?: Partial<Pick<MaterialFormlyFormFieldProps, 'prefix' | 'suffix' | 'hideLabel' | 'hideRequiredMarker' | 'hideFieldUnderline' | 'floatLabel' | 'appearance' | 'color' | 'hintStart' | 'hintEnd'>>;\n}\n","import { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig } from '../field';\nimport { type DbxChecklistItemFieldProps } from './checklist.item.field.component';\n\nexport interface ChecklistItemFieldConfig<T = unknown> extends LabeledFieldConfig, DbxChecklistItemFieldProps<T> {}\nexport type ChecklistItemFieldBuilderInput<T = unknown> = Partial<ChecklistItemFieldConfig<T>> & Pick<ChecklistItemFieldConfig<T>, 'key' | 'displayContent'>;\n\nexport function checklistItemField<T = unknown>(config: ChecklistItemFieldBuilderInput<T>): FormlyFieldConfig<DbxChecklistItemFieldProps<T>> {\n const { key, displayContent, componentClass } = config;\n\n const fieldConfig = formlyField({\n key,\n type: 'checklistitem',\n ...propsAndConfigForFieldConfig(config, {\n displayContent,\n componentClass\n })\n });\n\n return fieldConfig;\n}\n","import { type Observable, combineLatest, map, shareReplay } from 'rxjs';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type ChecklistItemDisplayContent } from './checklist.item';\nimport { type Configurable, type KeyValueTransformMap, addPlusPrefixToNumber, type Maybe } from '@dereekb/util';\nimport { checklistItemField, type ChecklistItemFieldBuilderInput } from './checklist.item.field';\n\nexport type ChecklistItemFieldDataSetFieldKey<D> = keyof D & string;\nexport type ChecklistItemFieldDataSetFieldValueForKey<D, K extends keyof D = keyof D> = D[K];\nexport type ChecklistType<D> = KeyValueTransformMap<D, boolean>;\n\nexport type ChecklistItemFieldDataSetBuilderInput<D, T> = { key: ChecklistItemFieldDataSetFieldKey<D> } & ChecklistItemFieldBuilderInput<T>;\n\nexport interface ChecklistItemFieldDataSetItem<D, T extends ChecklistType<D>> {\n /**\n * Key for the field.\n */\n readonly key: ChecklistItemFieldDataSetFieldKey<T>;\n /**\n * Base field configuration to use.\n */\n readonly field: ChecklistItemFieldBuilderInput<T>;\n}\n\n/**\n * Used for building a set of configurations for a data-type object that has as second object that is used as a checklist.\n */\nexport class ChecklistItemFieldDataSetBuilder<D extends object, C extends ChecklistType<D> = ChecklistType<D>> {\n private readonly _fields = new Map<ChecklistItemFieldDataSetFieldKey<C>, ChecklistItemFieldDataSetItem<D, ChecklistType<D>>>();\n\n readonly dataObs$: Observable<D>;\n\n constructor(dataObs: Observable<D>) {\n this.dataObs$ = dataObs;\n }\n\n /**\n * Merges the input config with existing configuration.\n *\n * The displayContentObs, if provided, will merge with the existing observable and the two objects merged.\n */\n merge<T>(key: ChecklistItemFieldDataSetFieldKey<D>, config: Partial<ChecklistItemFieldBuilderInput<T>>) {\n const currentField = this._assertFieldExists(key).field;\n const mergedConfig: Configurable<ChecklistItemFieldDataSetBuilderInput<D, T>> = {\n ...currentField,\n ...config,\n key\n } as any;\n\n if (currentField.displayContent && config.displayContent) {\n mergedConfig.displayContent = combineLatest([currentField.displayContent, config.displayContent]).pipe(\n map(([a, b]) => {\n const result = {\n ...a,\n ...b\n };\n\n // console.log('A and b: ', a, b, result);\n return result;\n }),\n shareReplay(1)\n );\n }\n\n // console.log('Merged: ', mergedConfig);\n\n this.field(mergedConfig);\n }\n\n override<T>(key: ChecklistItemFieldDataSetFieldKey<D>, config: Partial<ChecklistItemFieldBuilderInput<T>>) {\n const currentField = this._assertFieldExists(key);\n\n this.field({\n ...currentField.field,\n ...config,\n key\n });\n }\n\n _assertFieldExists(key: ChecklistItemFieldDataSetFieldKey<D>): ChecklistItemFieldDataSetItem<D, any> {\n const currentField = this._fields.get(key);\n\n if (!currentField) {\n throw new Error(`Expected field with key \"${key}\" for override() but was unavailable.`);\n }\n\n return currentField;\n }\n\n showValueFieldArrayCount<T extends ChecklistItemFieldDataSetFieldValueForKey<D> & Array<unknown>>(key: ChecklistItemFieldDataSetFieldKey<D>, config?: Partial<ChecklistItemFieldDataSetBuilderInput<D, T>>) {\n return this.field({\n displayContent: this.contentWithDisplayValueFromData(key, (x: T) => addPlusPrefixToNumber(x?.length)),\n ...config,\n key\n });\n }\n\n showValueField<T extends ChecklistItemFieldDataSetFieldValueForKey<D> = ChecklistItemFieldDataSetFieldValueForKey<D>>(key: ChecklistItemFieldDataSetFieldKey<D>, config?: Partial<ChecklistItemFieldDataSetBuilderInput<D, T>>, labelFn: (value: T) => Maybe<string> = (x: T) => (x as unknown as object | number | string)?.toString()) {\n return this.field({\n displayContent: this.contentWithDisplayValueFromData(key, labelFn),\n ...config,\n key\n });\n }\n\n field<T>(config: ChecklistItemFieldDataSetBuilderInput<D, T>) {\n const key = config.key;\n\n const field: ChecklistItemFieldDataSetItem<D, ChecklistType<D>> = {\n key,\n field: config as unknown as ChecklistItemFieldBuilderInput<ChecklistType<D>>\n };\n\n this._fields.set(key, field);\n }\n\n // MARK: Build/Finish\n build(): FormlyFieldConfig[] {\n return Array.from(this._fields.values()).map(({ field }) => {\n return checklistItemField(field);\n });\n }\n\n // MARK: Utility\n customContentFromData<T extends ChecklistItemFieldDataSetFieldValueForKey<D> = ChecklistItemFieldDataSetFieldValueForKey<D>>(mapFn: (data: D) => ChecklistItemDisplayContent<T>): Observable<ChecklistItemDisplayContent<T>> {\n return this.dataObs$.pipe(map(mapFn));\n }\n\n contentWithValueFromData<K extends keyof D = keyof D, T extends ChecklistItemFieldDataSetFieldValueForKey<D> = ChecklistItemFieldDataSetFieldValueForKey<D>>(key: K, contentFn?: (value: T) => ChecklistItemDisplayContent<T>): Observable<ChecklistItemDisplayContent<T>> {\n return this.customContentFromData((data) => {\n const meta = data[key] as unknown as T;\n const content = contentFn?.(meta);\n\n return {\n meta,\n ...content\n };\n });\n }\n\n contentWithDisplayValueFromData<T extends ChecklistItemFieldDataSetFieldValueForKey<D> = ChecklistItemFieldDataSetFieldValueForKey<D>>(key: ChecklistItemFieldDataSetFieldKey<D>, labelFn: (value: T) => Maybe<string> = (x: T) => (x as unknown as object | number | string)?.toString()): Observable<ChecklistItemDisplayContent<T>> {\n function sanitizeLabel(label: Maybe<string>): string {\n return label ?? 'N/A';\n }\n\n return this.contentWithValueFromData(key, (value: T) => ({ label: sanitizeLabel(labelFn(value)) }));\n }\n}\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { DbxInjectionComponent, type DbxInjectionComponentConfig } from '@dereekb/dbx-core';\nimport { FieldType, type FormlyFieldConfig } from '@ngx-formly/core';\n\nexport type DbxFormComponentFieldConfig<T> = DbxInjectionComponentConfig<T>;\n\nexport interface DbxFormComponentFormlyFieldConfig<T = unknown> extends FormlyFieldConfig {\n componentField: DbxFormComponentFieldConfig<T>;\n}\n\n@Component({\n template: `\n <div class=\"dbx-form-component\" dbx-injection [config]=\"config\"></div>\n `,\n imports: [DbxInjectionComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormComponentFieldComponent<T = unknown> extends FieldType<DbxFormComponentFormlyFieldConfig<T>> {\n get config(): DbxInjectionComponentConfig<T> {\n return this.field.componentField;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxFormComponentFieldComponent } from './component.field.component';\n\nconst importsAndExports = [DbxFormComponentFieldComponent];\n\n@NgModule({\n imports: [\n ...importsAndExports,\n FormlyModule.forChild({\n types: [{ name: 'component', component: DbxFormComponentFieldComponent }]\n })\n ],\n exports: importsAndExports\n})\nexport class DbxFormFormlyComponentFieldModule {}\n","import { type DbxFormComponentFieldConfig, type DbxFormComponentFormlyFieldConfig } from './component.field.component';\n\nexport type ComponentFieldConfig<T = unknown> = DbxFormComponentFieldConfig<T>;\n\nexport function componentField<T = unknown>(config: ComponentFieldConfig<T>): DbxFormComponentFormlyFieldConfig<T> {\n return {\n type: 'component',\n componentField: config\n };\n}\n","import { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig } from '../../field';\nimport { type DbxItemListFieldProps } from './list.field.component';\nimport { type AbstractDbxSelectionListWrapperDirective } from '@dereekb/dbx-web';\nimport { type PrimativeKey } from '@dereekb/util';\n\nexport interface DbxListFieldConfig<T = unknown, C extends AbstractDbxSelectionListWrapperDirective<T> = AbstractDbxSelectionListWrapperDirective<T>, K extends PrimativeKey = PrimativeKey> extends LabeledFieldConfig, DbxItemListFieldProps<T, C, K> {}\n\nexport function dbxListField<T = unknown, C extends AbstractDbxSelectionListWrapperDirective<T> = AbstractDbxSelectionListWrapperDirective<T>, K extends PrimativeKey = PrimativeKey>(config: DbxListFieldConfig<T, C, K>): FormlyFieldConfig {\n const { key, listComponentClass, readKey, state$, loadMore } = config;\n return formlyField({\n key,\n type: 'dbxlistfield',\n ...propsAndConfigForFieldConfig(config, {\n listComponentClass,\n readKey,\n state$,\n loadMore\n })\n });\n}\n","import { ChangeDetectionStrategy, Component, type OnDestroy, type OnInit, type Type } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { type AbstractControl } from '@angular/forms';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { DbxInjectionComponent, type DbxInjectionComponentConfig } from '@dereekb/dbx-core';\nimport { type AbstractDbxSelectionListWrapperDirective, type ListSelectionState, type DbxValueListItemDecisionFunction, dbxValueListItemDecisionFunction, DbxListModifierModule } from '@dereekb/dbx-web';\nimport { distinctUntilHasDifferentValues, filterMaybe, type ListLoadingState, SubscriptionObject, switchMapFilterMaybe } from '@dereekb/rxjs';\nimport { convertMaybeToArray, hasDifferentValues, isSelectedDecisionFunctionFactory, type Maybe, type PrimativeKey, type ReadKeyFunction, readKeysFrom } from '@dereekb/util';\nimport { type FormlyFieldProps, FieldType, type FieldTypeConfig } from '@ngx-formly/core';\nimport { map, type Observable, shareReplay, BehaviorSubject, startWith, switchMap } from 'rxjs';\n\nexport interface DbxItemListFieldProps<T = unknown, C extends AbstractDbxSelectionListWrapperDirective<T> = AbstractDbxSelectionListWrapperDirective<T>, K extends PrimativeKey = PrimativeKey> extends Pick<FormlyFieldProps, 'label' | 'description'> {\n /**\n * List to render components from\n */\n readonly listComponentClass: Observable<Type<C>>;\n /**\n * Read key function to read the identifier from the input\n */\n readonly readKey: ReadKeyFunction<T, K>;\n /**\n * Observable that provides the items to select.\n */\n readonly state$: Observable<ListLoadingState<T>>;\n /**\n * Function that signals to load more items.\n */\n readonly loadMore?: () => void;\n}\n\n/**\n * Used for picking items by identifier from a DbxList component.\n */\n@Component({\n templateUrl: 'list.field.component.html',\n imports: [DbxListModifierModule, DbxInjectionComponent, MatDividerModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxItemListFieldComponent<T = unknown, C extends AbstractDbxSelectionListWrapperDirective<T> = AbstractDbxSelectionListWrapperDirective<T>, K extends PrimativeKey = PrimativeKey> extends FieldType<FieldTypeConfig<DbxItemListFieldProps<T, C, K>>> implements OnInit, OnDestroy {\n private readonly _selectionEventSub = new SubscriptionObject();\n private readonly _loadMoreSub = new SubscriptionObject();\n\n private readonly _formControlObs = new BehaviorSubject<Maybe<AbstractControl>>(undefined);\n readonly formControl$ = this._formControlObs.pipe(filterMaybe());\n\n readonly _formControlValue$: Observable<Maybe<K[]>> = this.formControl$.pipe(switchMap((control) => control.valueChanges.pipe(startWith(control.value), shareReplay(1))));\n readonly values$: Observable<K[]> = this._formControlValue$.pipe(map(convertMaybeToArray), shareReplay(1));\n\n private readonly _listComponentClassObs = new BehaviorSubject<Maybe<Observable<Type<C>>>>(undefined);\n readonly listComponentClass$ = this._listComponentClassObs.pipe(switchMapFilterMaybe());\n\n readonly config$: Observable<DbxInjectionComponentConfig<C>> = this.listComponentClass$.pipe(\n map((componentClass) => {\n const loadMore = this.loadMore;\n const config: DbxInjectionComponentConfig<C> = {\n componentClass,\n init: (listView) => {\n listView.setSelectionMode('select'); // always enable select\n listView.setState(this.field.props.state$);\n\n if (loadMore != null) {\n this._loadMoreSub.subscription = listView.loadMore.subscribe(() => loadMore());\n }\n\n // set subscription\n this._selectionEventSub.subscription = listView.selectionChange.subscribe((x) => this.updateForSelection(x));\n }\n };\n\n return config;\n })\n );\n\n readonly isSelectedModifierFunction$: Observable<DbxValueListItemDecisionFunction<T>> = this.values$.pipe(\n distinctUntilHasDifferentValues(),\n map((values) => {\n return dbxValueListItemDecisionFunction(isSelectedDecisionFunctionFactory({ readKey: this.readKey })(values));\n }),\n shareReplay(1)\n );\n\n readonly configSignal = toSignal(this.config$);\n readonly isSelectedModifierFunctionSignal = toSignal(this.isSelectedModifierFunction$);\n\n get label() {\n return this.field.props.label;\n }\n\n get description() {\n return this.field.props.description;\n }\n\n get listComponentClass() {\n return this.field.props.listComponentClass;\n }\n\n get readKey() {\n return this.field.props.readKey;\n }\n\n get loadMore() {\n return this.field.props.loadMore;\n }\n\n ngOnInit(): void {\n this._formControlObs.next(this.formControl);\n this._listComponentClassObs.next(this.listComponentClass);\n }\n\n ngOnDestroy(): void {\n this._formControlObs.complete();\n this._selectionEventSub.destroy();\n this._listComponentClassObs.complete();\n }\n\n updateForSelection(list: ListSelectionState<T>) {\n const items = list.items.filter((x) => x.selected).map((x) => x.itemValue);\n const values = readKeysFrom(this.readKey, items);\n this.setValues(values);\n }\n\n setValues(values: Maybe<K[]>): void {\n const currentValues = this.formControl.value;\n\n if (currentValues == null || hasDifferentValues(currentValues, values)) {\n this.formControl.setValue(values);\n this.formControl.markAsDirty();\n this.formControl.markAsTouched();\n }\n }\n}\n","<div class=\"dbx-list-item-field\" dbxListItemModifier [dbxListItemIsSelectedModifier]=\"isSelectedModifierFunctionSignal()\">\n @if (label) {\n <span class=\"dbx-label dbx-label-padded\">{{ label }}</span>\n }\n <div class=\"dbx-list-item-field-content\">\n <dbx-injection [config]=\"configSignal()\"></dbx-injection>\n </div>\n <mat-divider></mat-divider>\n @if (description) {\n <div class=\"dbx-form-description\">{{ description }}</div>\n }\n</div>\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxItemListFieldComponent } from './list.field.component';\n\nconst importsAndExports = [DbxItemListFieldComponent];\n\n@NgModule({\n imports: [\n ...importsAndExports,\n FormlyModule.forChild({\n types: [{ name: 'dbxlistfield', component: DbxItemListFieldComponent }]\n })\n ],\n exports: importsAndExports\n})\nexport class DbxFormFormlyDbxListFieldModule {}\n","import { type DbxInjectionComponentConfig } from '@dereekb/dbx-core';\nimport { type LoadingState, successResult, mapLoadingStateResults, filterMaybe, mapIsListLoadingStateWithEmptyValue, startWithBeginLoading, SubscriptionObject, listLoadingStateContext } from '@dereekb/rxjs';\nimport { type PrimativeKey, convertMaybeToArray, makeValuesGroupMap, type Maybe, type ArrayOrValue, separateValues, filterUniqueValues, type Configurable } from '@dereekb/util';\nimport { Directive, type OnDestroy, type OnInit, viewChild } from '@angular/core';\nimport { FormControl, type AbstractControl } from '@angular/forms';\nimport { MatInput } from '@angular/material/input';\nimport { type FieldTypeConfig, type FormlyFieldProps } from '@ngx-formly/core';\nimport { FieldType } from '@ngx-formly/material';\nimport { BehaviorSubject, combineLatest, type Observable, of, filter, map, debounceTime, distinctUntilChanged, switchMap, startWith, shareReplay, mergeMap, first, delay } from 'rxjs';\nimport { type PickableValueFieldDisplayFunction, type PickableValueFieldDisplayValue, type PickableValueFieldFilterFunction, type PickableValueFieldHashFunction, type PickableValueFieldLoadValuesFunction, type PickableValueFieldValue } from './pickable';\nimport { type DbxValueListItem } from '@dereekb/dbx-web';\nimport { camelCase } from 'change-case-all';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\n/**\n * Wraps the selected state with the items.\n */\nexport type PickableItemFieldItem<T, M = unknown> = DbxValueListItem<PickableValueFieldDisplayValue<T, M>>;\n\nexport type PickableItemFieldItemSortFn<T, M = unknown> = (items: PickableItemFieldItem<T, M>[]) => PickableItemFieldItem<T, M>[];\n\nexport interface PickableValueFieldsFieldProps<T, M = unknown, H extends PrimativeKey = PrimativeKey> extends FormlyFieldProps {\n /**\n * Loads all pickable values.\n */\n readonly loadValues: PickableValueFieldLoadValuesFunction<T, M>;\n /**\n * Used for building a display value given the input.\n */\n readonly displayForValue: PickableValueFieldDisplayFunction<T, M>;\n /**\n * Used for hashing display values and omitting repeat values.\n *\n * If hashForValue is not provided, the value's value will be used as is.\n */\n readonly hashForValue?: PickableValueFieldHashFunction<T, H>;\n /**\n * Used for filtering values via the search text.\n */\n readonly filterValues?: PickableValueFieldFilterFunction<T, M>;\n /**\n * Used for sorting the items before they are displayed.\n *\n * Should only be used to sort values.\n */\n readonly sortItems?: PickableItemFieldItemSortFn<T, M>;\n /**\n * Whether or not to allow multiple items to be selected.\n */\n readonly multiSelect?: boolean;\n /**\n * Whether or not to set/get values as an array or a single value. If set false, multiSelect is ignored.\n */\n readonly asArrayValue?: boolean;\n /**\n * Whether or not to show the text filter. True by default if filterValues is provided.\n */\n readonly showTextFilter?: boolean;\n /**\n * Whether or not to skip the filter function when the input is empty.\n *\n * True by default.\n */\n readonly skipFilterFnOnEmpty?: boolean;\n /**\n * Filter Label\n */\n readonly filterLabel?: string;\n /**\n * The maximum number of values that can be picked\n */\n readonly maxPicks?: number;\n /**\n * Optional description/hint to display.\n */\n readonly description?: string;\n /**\n * Footer Display\n */\n readonly footerConfig?: DbxInjectionComponentConfig;\n /**\n * Changes the selection mode of the list to \"view\" mode on disabled, hiding the selection boxes.\n */\n readonly changeSelectionModeToViewOnDisabled?: boolean;\n /**\n * (Optional) observable that will trigger the clearing of all cached display values.\n */\n readonly refreshDisplayValues$?: Observable<unknown>;\n}\n\n/**\n * Displayed value with the computed hash.\n */\nexport interface PickableValueFieldDisplayValueWithHash<T, M = unknown, H extends PrimativeKey = PrimativeKey> extends PickableValueFieldDisplayValue<T, M> {\n _hash: H;\n}\n\n/**\n * Used for picking pre-set values using items as the presentation.\n */\n@Directive()\nexport class AbstractDbxPickableItemFieldDirective<T, M = unknown, H extends PrimativeKey = PrimativeKey> extends FieldType<FieldTypeConfig<PickableValueFieldsFieldProps<T, M, H>>> implements OnInit, OnDestroy {\n readonly filterMatInput = viewChild<string, MatInput>('matInput', { read: MatInput });\n\n readonly inputCtrl = new FormControl('');\n\n private readonly _formControlObs = new BehaviorSubject<Maybe<AbstractControl>>(undefined);\n readonly formControl$ = this._formControlObs.pipe(filterMaybe());\n\n private readonly _clearDisplayHashMapSub = new SubscriptionObject();\n private readonly _displayHashMap = new BehaviorSubject<Map<H, PickableValueFieldDisplayValue<T, M>>>(new Map());\n\n readonly filterInputValue$: Observable<Maybe<string>> = this.inputCtrl.valueChanges.pipe(startWith(undefined));\n readonly filterInputValueString$: Observable<Maybe<string>> = this.filterInputValue$.pipe(debounceTime(200), distinctUntilChanged(), shareReplay(1));\n\n readonly loadResultsDisplayValuesState$: Observable<LoadingState<PickableValueFieldDisplayValueWithHash<T, M, H>[]>> = this.formControl$.pipe(\n first(),\n switchMap(() =>\n this.loadValuesFn().pipe(\n switchMap((x) => this.loadDisplayValuesForFieldValues(x)),\n startWithBeginLoading()\n )\n ),\n shareReplay(1)\n );\n\n readonly _formControlValue$: Observable<T | T[]> = this.formControl$.pipe(switchMap((control) => control.valueChanges.pipe(startWith(control.value), shareReplay(1))));\n\n readonly loadResultsDisplayValues$: Observable<PickableValueFieldDisplayValueWithHash<T, M, H>[]> = this.loadResultsDisplayValuesState$.pipe(map((x) => x?.value ?? []));\n\n /**\n * Current values in the form control.\n */\n readonly values$: Observable<T[]> = this._formControlValue$.pipe(map(convertMaybeToArray), shareReplay(1));\n\n /**\n * Current values with their display value.\n */\n readonly displayValuesState$: Observable<LoadingState<PickableValueFieldDisplayValueWithHash<T, M, H>[]>> = combineLatest([this.loadResultsDisplayValues$, this.values$]).pipe(\n switchMap(([displayValues, currentValues]) => {\n const displayValuesMap = makeValuesGroupMap(displayValues, (x) => this.hashForValue(x.value));\n const valuesNotInDisplayMap: T[] = [];\n\n currentValues.forEach((x) => {\n const key = this.hashForValue(x);\n const displayValue: Maybe<PickableValueFieldDisplayValueWithHash<T, M, H>> = displayValuesMap.get(key)?.[0];\n\n if (!displayValue) {\n valuesNotInDisplayMap.push(x);\n }\n });\n\n if (valuesNotInDisplayMap.length) {\n return this.loadDisplayValuesForValues(valuesNotInDisplayMap).pipe(\n map((x) =>\n mapLoadingStateResults(x, {\n mapValue: (loadedValues: Configurable<PickableValueFieldDisplayValueWithHash<T, M, H>>[]) => {\n loadedValues.forEach((x) => (x.isUnknown = x.isUnknown ?? true)); // Assign unknown flag.\n return [...displayValues, ...loadedValues];\n }\n })\n )\n );\n } else {\n return of(successResult(displayValues));\n }\n })\n );\n\n /**\n * Results to be displayed if filtered.\n */\n readonly filteredSearchResultsState$: Observable<LoadingState<PickableValueFieldDisplayValueWithHash<T, M, H>[]>> = this.loadResultsDisplayValues$.pipe(\n switchMap((values) =>\n this.filterInputValueString$.pipe(\n switchMap((text) =>\n combineLatest([this._filterValues(text, values), this.displayValuesState$]).pipe(\n map(([values, displayState]) =>\n mapLoadingStateResults(displayState, {\n mapValue: (displayValues: PickableValueFieldDisplayValueWithHash<T, M, H>[]) => {\n const valueHashSet = new Set(values.map((x) => this.hashForValue(x)));\n return displayValues.filter((x) => !x.isUnknown && valueHashSet.has(x._hash));\n }\n })\n ),\n startWithBeginLoading()\n )\n )\n )\n ),\n shareReplay(1)\n );\n\n readonly filteredSearchResults$: Observable<PickableValueFieldDisplayValueWithHash<T, M, H>[]> = this.filteredSearchResultsState$.pipe(\n map((x) => x?.value),\n filterMaybe(),\n shareReplay(1)\n );\n\n readonly items$: Observable<PickableItemFieldItem<T, M>[]> = combineLatest([this.filteredSearchResults$, this.values$]).pipe(\n map(([displayValues, values]) => {\n const selectedHashValuesSet = new Set(values.map((x) => this.hashForValue(x)));\n let items: PickableItemFieldItem<T, M>[] = displayValues.map((x) => ({ itemValue: x, selected: selectedHashValuesSet.has(x._hash) }));\n\n if (this.sortItems) {\n items = this.sortItems(items);\n }\n\n return items;\n }),\n shareReplay(1)\n );\n\n readonly itemsLoadingState$: Observable<LoadingState<PickableItemFieldItem<T>[]>> = this.loadResultsDisplayValues$.pipe(\n switchMap(() =>\n this.items$.pipe(\n first(),\n map((x) => successResult(x)),\n startWithBeginLoading(),\n shareReplay(1)\n )\n )\n );\n\n /**\n * Context used for managing the loading of items, or when the current results change.\n */\n readonly context = listLoadingStateContext({ obs: this.itemsLoadingState$, showLoadingOnNoValue: false });\n\n readonly filterItemsLoadingState$: Observable<LoadingState<PickableItemFieldItem<T>[]>> = this.items$.pipe(\n map((x) => successResult(x)),\n startWithBeginLoading(),\n shareReplay(1)\n );\n\n readonly noItemsAvailable$ = this.filterItemsLoadingState$.pipe(mapIsListLoadingStateWithEmptyValue(), distinctUntilChanged());\n\n /**\n * Context used for searching/filtering.\n */\n readonly filterResultsContext = listLoadingStateContext({ obs: this.filteredSearchResultsState$, showLoadingOnNoValue: true });\n\n readonly itemsSignal = toSignal(this.items$);\n readonly noItemsAvailableSignal = toSignal(this.noItemsAvailable$);\n\n get readonly(): Maybe<boolean> {\n return this.props.readonly;\n }\n\n get isReadonlyOrDisabled() {\n return this.readonly || this.disabled;\n }\n\n get pickableField(): PickableValueFieldsFieldProps<T, M, H> {\n return this.props;\n }\n\n get multiSelect(): boolean {\n return this.pickableField.multiSelect ?? true;\n }\n\n get asArrayValue(): boolean {\n return this.pickableField.asArrayValue ?? true;\n }\n\n get pickOnlyOne(): boolean {\n return this.asArrayValue === false || this.multiSelect === false;\n }\n\n get filterLabel(): Maybe<string> {\n return this.pickableField.filterLabel;\n }\n\n get name(): string {\n return this.field.name ?? camelCase(this.label ?? (this.key as string));\n }\n\n get label(): Maybe<string> {\n return this.props.label;\n }\n\n get autocomplete(): string {\n return (this.props.attributes?.['autocomplete'] ?? this.key) as string;\n }\n\n get changeSelectionModeToViewOnDisabled(): boolean {\n return this.pickableField.changeSelectionModeToViewOnDisabled ?? false;\n }\n\n get sortItems(): Maybe<PickableItemFieldItemSortFn<T, M>> {\n return this.pickableField.sortItems;\n }\n\n get hashForValue(): PickableValueFieldHashFunction<T, H> {\n return this.pickableField.hashForValue ?? ((x) => x as unknown as H);\n }\n\n get displayForValue(): PickableValueFieldDisplayFunction<T, M> {\n return this.pickableField.displayForValue;\n }\n\n get showFilterInput(): boolean {\n return Boolean(this.pickableField.filterValues);\n }\n\n get filterValuesFn(): PickableValueFieldFilterFunction<T, M> {\n return this.pickableField.filterValues ?? ((_, x) => of(x.map((y) => y.value)));\n }\n\n get skipFilterFnOnEmpty(): boolean {\n return this.pickableField.skipFilterFnOnEmpty ?? true;\n }\n\n get _filterValues(): PickableValueFieldFilterFunction<T, M> {\n let fn: PickableValueFieldFilterFunction<T, M>;\n\n if (this.skipFilterFnOnEmpty) {\n fn = (filterText: Maybe<string>, values: PickableValueFieldDisplayValue<T, M>[]): Observable<T[]> => {\n let result: Observable<T[]>;\n\n if (filterText) {\n result = this.filterValuesFn(filterText, values);\n } else {\n result = of(values.map((x) => x.value));\n }\n\n return result;\n };\n } else {\n fn = this.filterValuesFn;\n }\n\n return fn;\n }\n\n get showTextFilter(): boolean {\n return this.pickableField.showTextFilter ?? Boolean(this.pickableField.filterValues);\n }\n\n get loadValuesFn(): PickableValueFieldLoadValuesFunction<T, M> {\n return this.pickableField.loadValues;\n }\n\n get values(): T[] {\n return this._getValueOnFormControl(this.formControl.value) ?? [];\n }\n\n get footerConfig(): Maybe<DbxInjectionComponentConfig> {\n return this.pickableField.footerConfig;\n }\n\n get refreshDisplayValues$() {\n return this.pickableField.refreshDisplayValues$;\n }\n\n loadDisplayValuesForValues(values: T[]): Observable<LoadingState<PickableValueFieldDisplayValueWithHash<T, M, H>[]>> {\n return this.loadDisplayValuesForFieldValues(values.map((value) => ({ value })));\n }\n\n loadDisplayValuesForFieldValues(values: PickableValueFieldValue<T, M>[]): Observable<LoadingState<PickableValueFieldDisplayValueWithHash<T, M, H>[]>> {\n return this.getDisplayValuesForFieldValues(values).pipe(\n map((displayValues: PickableValueFieldDisplayValueWithHash<T, M, H>[]) => successResult(displayValues)),\n startWithBeginLoading(),\n shareReplay(1)\n );\n }\n\n getDisplayValuesForFieldValues(values: PickableValueFieldValue<T, M>[]): Observable<PickableValueFieldDisplayValueWithHash<T, M, H>[]> {\n return this._displayHashMap.pipe(\n mergeMap((displayMap) => {\n const mappingResult = values.map((x) => [x, this.hashForValue(x.value)] as [PickableValueFieldValue<T, M>, H]).map(([x, hash], i) => [i, hash, x, displayMap.get(hash)] as [number, H, PickableValueFieldValue<T, M>, PickableValueFieldDisplayValueWithHash<T, M, H>]);\n\n const {\n //\n included: hasDisplay,\n excluded: needsDisplay\n } = separateValues(mappingResult, (x) => Boolean(x[3]));\n\n if (needsDisplay.length > 0) {\n // Go get the display value.\n const displayValuesObs = this.displayForValue(needsDisplay.map((x) => x[2]));\n\n return displayValuesObs.pipe(\n first(),\n map((displayResults) => {\n const displayResultsWithHash: PickableValueFieldDisplayValueWithHash<T, M, H>[] = displayResults.map((x) => {\n (x as PickableValueFieldDisplayValueWithHash<T, M, H>)._hash = this.hashForValue(x.value);\n return x as PickableValueFieldDisplayValueWithHash<T, M, H>;\n });\n\n // Create a map to re-join values later.\n const displayResultsMapping: [PickableValueFieldDisplayValueWithHash<T, M, H>, H][] = displayResultsWithHash.map((x) => [x, x._hash]);\n const valueIndexHashMap = new Map(displayResultsMapping.map(([x, hash]) => [hash, x]));\n\n // Update displayMap. No need to push an update notification.\n displayResultsMapping.forEach(([x, hash]) => displayMap.set(hash, x));\n\n // Zip values back together.\n const newDisplayValues = mappingResult.map((x) => x[3] ?? valueIndexHashMap.get(x[1]));\n\n // Return display values.\n return newDisplayValues;\n })\n );\n } else {\n // If all display values are hashed return that.\n return of(hasDisplay.map((x) => x[3])) as Observable<PickableValueFieldDisplayValueWithHash<T, M, H>[]>;\n }\n })\n );\n }\n\n ngOnInit(): void {\n this._formControlObs.next(this.formControl);\n\n if (this.refreshDisplayValues$ != null) {\n this._clearDisplayHashMapSub.subscription = this.refreshDisplayValues$.subscribe(() => this._displayHashMap.next(new Map()));\n }\n\n // Focus after finished loading for the first time.\n this.context.loading$\n .pipe(\n delay(10),\n filter((x) => x),\n first()\n )\n .subscribe(() => {\n this.filterMatInput()?.focus();\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._displayHashMap.complete();\n this._formControlObs.complete();\n this._clearDisplayHashMapSub.destroy();\n this.filterResultsContext.destroy();\n }\n\n protected _getValueOnFormControl(valueOnFormControl: ArrayOrValue<T>): T[] {\n const value: T[] = valueOnFormControl != null ? ([] as T[]).concat(valueOnFormControl) : []; // Always return an array.\n return value;\n }\n\n addValue(value: T): void {\n let newValues: T[];\n\n if (this.pickOnlyOne) {\n newValues = [value];\n } else {\n newValues = [...this.values, value];\n }\n\n this.setValues(newValues);\n }\n\n removeValue(value: T): void {\n const hashToFilter = this.hashForValue(value);\n const values = this.values.filter((x) => this.hashForValue(x) !== hashToFilter);\n this.setValues(values);\n }\n\n setValues(values: T[]): void {\n // Use to filter non-unique values.\n if (this.hashForValue) {\n values = filterUniqueValues(values, this.hashForValue);\n }\n\n if (this.pickOnlyOne) {\n values = [values[0]].filter((x) => x != null);\n }\n\n this._setValueOnFormControl(values);\n }\n\n // MARK: Internal\n protected _setValueOnFormControl(values: T[]): void {\n let newValue: T | T[] = values;\n\n if (!this.asArrayValue) {\n newValue = [values[0]].filter((x) => x != null)[0];\n }\n\n this.formControl.setValue(newValue);\n this.formControl.markAsTouched();\n this.formControl.markAsDirty();\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { AbstractDbxPickableItemFieldDirective, type PickableItemFieldItem } from './pickable.field.directive';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { DbxLoadingComponent } from '@dereekb/dbx-web';\nimport { MatDivider } from '@angular/material/divider';\nimport { DbxInjectionComponent } from '@dereekb/dbx-core';\nimport { MatInputModule } from '@angular/material/input';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\n\n/**\n * Used for picking pre-set values using chips as the presentation.\n */\n@Component({\n templateUrl: 'pickable.chip.field.component.html',\n imports: [MatChipsModule, NgTemplateOutlet, FormsModule, ReactiveFormsModule, MatIconModule, MatInputModule, DbxLoadingComponent, MatDivider, DbxInjectionComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxPickableChipListFieldComponent<T> extends AbstractDbxPickableItemFieldDirective<T> {\n itemClicked(item: PickableItemFieldItem<T>): void {\n if (!item.disabled && !this.isReadonlyOrDisabled) {\n if (item.selected) {\n this.removeValue(item.itemValue.value);\n } else {\n this.addValue(item.itemValue.value);\n }\n }\n }\n}\n","<div class=\"dbx-pickable-item-field\">\n <dbx-loading [context]=\"context\" [linear]=\"true\">\n @if (showFilterInput) {\n <ng-container *ngTemplateOutlet=\"filterTemplate\"></ng-container>\n }\n <!-- Content -->\n <div class=\"dbx-pickable-item-field-chips\">\n <mat-chip-listbox [multiple]=\"multiSelect\" [required]=\"required\" [selectable]=\"!isReadonlyOrDisabled\" [disabled]=\"readonly\" #chipList>\n @for (item of itemsSignal(); track item.itemValue.value) {\n <mat-chip-option (click)=\"itemClicked(item)\" [selected]=\"item.selected\" [disabled]=\"isReadonlyOrDisabled || item.disabled\">\n @if (item.itemValue.icon) {\n <mat-icon matChipAvatar>{{ item.itemValue.icon }}</mat-icon>\n }\n <span class=\"dbx-chip-label\">{{ item.itemValue.label }}</span>\n @if (item.itemValue.sublabel) {\n <span class=\"dbx-chip-sublabel\">{{ item.itemValue.sublabel }}</span>\n }\n </mat-chip-option>\n }\n </mat-chip-listbox>\n <dbx-injection [config]=\"footerConfig\"></dbx-injection>\n </div>\n </dbx-loading>\n</div>\n\n<!-- Filter Input -->\n<ng-template #filterTemplate>\n <div class=\"dbx-pickable-item-field-filter\">\n <div class=\"dbx-label\">{{ filterLabel }}</div>\n <input [name]=\"name\" autocomplete=\"{{ autocomplete }}\" #filterMatInput=\"matInput\" matInput [placeholder]=\"placeholder\" [formControl]=\"inputCtrl\" />\n <mat-divider></mat-divider>\n <dbx-loading [linear]=\"true\" [context]=\"filterResultsContext\"></dbx-loading>\n <!-- No items found. -->\n @if (noItemsAvailableSignal()) {\n <p class=\"dbx-label\">No items match this filter.</p>\n }\n </div>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { DbxInjectionComponent, type DbxInjectionComponentConfig } from '@dereekb/dbx-core';\nimport { AbstractDbxSelectionListWrapperDirective, provideDbxListView, AbstractDbxSelectionListViewDirective, AbstractDbxValueListViewItemComponent, type ListSelectionState, addConfigToValueListItems, type DbxListSelectionMode, provideDbxListViewWrapper, DbxLoadingComponent, DbxSelectionValueListViewContentComponent, DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE, DbxListWrapperComponentImportsModule } from '@dereekb/dbx-web';\nimport { type Maybe } from '@dereekb/util';\nimport { map, shareReplay } from 'rxjs';\nimport { type PickableValueFieldDisplayValue } from './pickable';\nimport { AbstractDbxPickableItemFieldDirective, type PickableItemFieldItem } from './pickable.field.directive';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatDivider } from '@angular/material/divider';\nimport { MatInputModule } from '@angular/material/input';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\n// MARK: Selection List\n@Component({\n selector: 'dbx-form-pickable-item-field-item-list',\n template: DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE,\n imports: [DbxListWrapperComponentImportsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: provideDbxListViewWrapper(DbxPickableListFieldItemListComponent),\n standalone: true\n})\nexport class DbxPickableListFieldItemListComponent<T> extends AbstractDbxSelectionListWrapperDirective<PickableItemFieldItem<T>> {\n constructor() {\n super({\n componentClass: DbxPickableListFieldItemListViewComponent\n });\n }\n}\n\n/**\n * NOTE: Values input are PickableItemFieldItem<T>, but output values are PickableValueFieldDisplayValue<T>.\n */\n@Component({\n template: `\n <dbx-selection-list-view-content [multiple]=\"multiple\" [selectionMode]=\"selectionMode\" [items]=\"itemsSignal()\"></dbx-selection-list-view-content>\n `,\n providers: provideDbxListView(DbxPickableListFieldItemListViewComponent),\n imports: [DbxSelectionValueListViewContentComponent],\n standalone: true\n})\nexport class DbxPickableListFieldItemListViewComponent<T> extends AbstractDbxSelectionListViewDirective<any> {\n readonly dbxPickableListFieldComponent = inject(DbxPickableListFieldComponent<T>);\n\n // TODO: any belongs here for now, but item list typings need to be updated.\n\n readonly config: DbxInjectionComponentConfig = {\n componentClass: DbxPickableListFieldItemListViewItemComponent\n };\n\n get multiple(): boolean {\n return !this.dbxPickableListFieldComponent.pickOnlyOne;\n }\n\n get selectionMode(): Maybe<DbxListSelectionMode> {\n let selectionMode: Maybe<DbxListSelectionMode> = 'select';\n\n if (this.dbxPickableListFieldComponent.disabled && this.dbxPickableListFieldComponent.changeSelectionModeToViewOnDisabled) {\n selectionMode = 'view';\n }\n\n return selectionMode;\n }\n\n readonly items$ = this.values$.pipe(\n // NOTE: This causes the \"value\" to be a PickableValueFieldDisplayValue<T>, which means we emit PickableValueFieldDisplayValue<T> to DbxPickableListFieldComponent.\n map((x) => addConfigToValueListItems(this.config, x)),\n shareReplay(1)\n );\n\n readonly itemsSignal = toSignal(this.items$);\n}\n\n@Component({\n template: `\n <div class=\"dbx-default-pickable-item-field-list-item dbx-flex-bar\">\n @if (icon) {\n <mat-icon class=\"dbx-icon-spacer\">{{ icon }}</mat-icon>\n }\n <span class=\"dbx-chip-label\">{{ label }}</span>\n @if (sublabel) {\n <span class=\"dbx-chip-sublabel\">({{ sublabel }})</span>\n }\n </div>\n `,\n imports: [MatIconModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxPickableListFieldItemListViewItemComponent<T> extends AbstractDbxValueListViewItemComponent<PickableValueFieldDisplayValue<T>> {\n readonly label = this.itemValue.label;\n readonly sublabel = this.itemValue.sublabel;\n readonly icon = this.itemValue.icon;\n}\n\n// List Field Component\n/**\n * Used for picking pre-set values using a selection list as the presentation.\n */\n@Component({\n templateUrl: 'pickable.list.field.component.html',\n imports: [DbxPickableListFieldItemListComponent, NgTemplateOutlet, FormsModule, ReactiveFormsModule, MatInputModule, MatDivider, DbxLoadingComponent, DbxInjectionComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxPickableListFieldComponent<T> extends AbstractDbxPickableItemFieldDirective<T> {\n onSelectionChange(event: unknown) {\n const items = (event as ListSelectionState<PickableValueFieldDisplayValue<T>>).items;\n const values = items.map((x) => x.itemValue.value);\n this.setValues(values);\n }\n}\n","<div class=\"dbx-pickable-item-field\">\n <dbx-loading [context]=\"context\">\n @if (showFilterInput) {\n <ng-container *ngTemplateOutlet=\"filterTemplate\"></ng-container>\n }\n <!-- Content -->\n <div class=\"dbx-pickable-item-field-list\">\n <div class=\"dbx-pickable-item-field-list-content\">\n <dbx-form-pickable-item-field-item-list [disabled]=\"isReadonlyOrDisabled\" [state]=\"filterItemsLoadingState$\" (selectionChange)=\"onSelectionChange($event)\"></dbx-form-pickable-item-field-item-list>\n </div>\n <dbx-injection [config]=\"footerConfig\"></dbx-injection>\n </div>\n </dbx-loading>\n</div>\n\n<!-- Filter Input -->\n<ng-template #filterTemplate>\n <div class=\"dbx-pickable-item-field-filter\">\n <div class=\"dbx-label\">{{ filterLabel }}</div>\n <input [name]=\"name\" autocomplete=\"{{ autocomplete }}\" #filterMatInput=\"matInput\" matInput [placeholder]=\"placeholder\" [formControl]=\"inputCtrl\" />\n <mat-divider></mat-divider>\n <dbx-loading [linear]=\"true\" [context]=\"filterResultsContext\"></dbx-loading>\n <!-- No items found. -->\n @if (noItemsAvailableSignal()) {\n <p class=\"dbx-label\">No items match this filter.</p>\n }\n </div>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxPickableChipListFieldComponent } from './pickable.chip.field.component';\nimport { DbxPickableListFieldComponent, DbxPickableListFieldItemListComponent, DbxPickableListFieldItemListViewComponent, DbxPickableListFieldItemListViewItemComponent } from './pickable.list.field.component';\n\nconst importsAndExports = [DbxPickableChipListFieldComponent, DbxPickableListFieldComponent, DbxPickableListFieldItemListComponent, DbxPickableListFieldItemListViewComponent, DbxPickableListFieldItemListViewItemComponent];\n\n@NgModule({\n imports: [\n ...importsAndExports,\n FormlyModule.forChild({\n types: [\n { name: 'pickablechipfield', component: DbxPickableChipListFieldComponent, wrappers: ['form-field'] },\n { name: 'pickablelistfield', component: DbxPickableListFieldComponent, wrappers: ['form-field'] }\n ]\n })\n ],\n exports: importsAndExports\n})\nexport class DbxFormFormlyPickableFieldModule {}\n","import { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig, type MaterialFormFieldConfig } from '../../field';\nimport { PickableItemFieldItem, type PickableValueFieldsFieldProps } from './pickable.field.directive';\nexport { PickableItemFieldItem };\n\nexport interface PickableItemFieldConfig<T = unknown, M = unknown> extends LabeledFieldConfig, PickableValueFieldsFieldProps<T, M>, MaterialFormFieldConfig {}\n\nexport function pickableItemChipField<T = unknown, M = unknown>(config: PickableItemFieldConfig<T, M>): FormlyFieldConfig {\n const { key, materialFormField } = config;\n return formlyField({\n key,\n type: 'pickablechipfield',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n ...config,\n autocomplete: false\n })\n });\n}\n\nexport function pickableItemListField<T = unknown, M = unknown>(config: PickableItemFieldConfig<T, M>): FormlyFieldConfig {\n const { key, materialFormField } = config;\n return formlyField({\n key,\n type: 'pickablelistfield',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n ...config,\n autocomplete: false\n })\n });\n}\n","import { caseInsensitiveFilterByIndexOfDecisionFactory, type LabeledValue, type Maybe, type SearchStringFilterFunction, searchStringFilterFunction, sortByStringFunction } from '@dereekb/util';\nimport { type Observable, of } from 'rxjs';\nimport { type PickableValueFieldDisplayValue, type PickableValueFieldValue } from './pickable';\nimport { type PickableItemFieldItem, type PickableValueFieldsFieldProps } from './pickable.field.directive';\n\nexport const filterPickableItemFieldValuesByLabelFilterFunction: SearchStringFilterFunction<PickableValueFieldDisplayValue<any>> = searchStringFilterFunction({\n readStrings: (x) => [x.label],\n decisionFactory: caseInsensitiveFilterByIndexOfDecisionFactory\n});\n\nexport function filterPickableItemFieldValuesByLabel<T>(filterText: Maybe<string>, values: PickableValueFieldDisplayValue<T>[]): Observable<T[]> {\n let filteredValues: PickableValueFieldDisplayValue<T>[];\n\n if (filterText) {\n filteredValues = filterPickableItemFieldValuesByLabelFilterFunction(filterText, values);\n } else {\n filteredValues = values;\n }\n\n return of(filteredValues.map((x) => x.value));\n}\n\nexport const sortPickableItemsByLabelStringFunction = sortByStringFunction<PickableItemFieldItem<any>>((x) => x.itemValue.label);\n\nexport function sortPickableItemsByLabel<T>(chips: PickableItemFieldItem<T>[]): PickableItemFieldItem<T>[] {\n return chips.sort(sortPickableItemsByLabelStringFunction);\n}\n\n// MARK: PickableValueFieldValuesConfigForStaticLabeledValues\nexport type PickableValueFieldValuesConfigForStaticLabeledValues<T, M extends LabeledValue<T>> = Pick<PickableValueFieldsFieldProps<T, M>, 'loadValues' | 'displayForValue' | 'filterValues'>;\n\nexport interface PickableValueFieldValuesConfigForStaticLabeledValuesConfig<T, M extends LabeledValue<T>> {\n readonly allOptions: M[];\n readonly unknownOptionLabel?: string;\n}\n\nexport function pickableValueFieldValuesConfigForStaticLabeledValues<T, M extends LabeledValue<T>>(input: M[] | PickableValueFieldValuesConfigForStaticLabeledValuesConfig<T, M>): PickableValueFieldValuesConfigForStaticLabeledValues<T, M> {\n const config = Array.isArray(input) ? { allOptions: input } : input;\n const { allOptions, unknownOptionLabel = 'UNKNOWN' } = config;\n const values: PickableValueFieldValue<T, M>[] = allOptions.map((meta) => ({ value: meta.value, meta }));\n const optionsMap = new Map(allOptions.map((x) => [x.value, x]));\n\n return {\n loadValues: () => of(values),\n filterValues: filterPickableItemFieldValuesByLabel, // auto filter by label\n displayForValue: (values: PickableValueFieldValue<T, M>[]) =>\n of(\n values.map((x) => {\n const meta = x.meta ?? optionsMap.get(x.value);\n return { ...x, meta, label: meta?.label ?? unknownOptionLabel };\n })\n )\n };\n}\n","import { ChangeDetectionStrategy, Component, computed, Directive, inject, InjectionToken, input } from '@angular/core';\nimport { type ConfiguredSearchableValueFieldDisplayValue } from './searchable';\nimport { mergeArraysIntoArray } from '@dereekb/util';\nimport { DbxInjectionComponent, type DbxInjectionComponentConfig } from '@dereekb/dbx-core';\nimport { DbxAnchorComponent } from '@dereekb/dbx-web';\nimport { MatIconModule } from '@angular/material/icon';\n\nexport const DBX_SEARCHABLE_FIELD_COMPONENT_DATA_TOKEN = new InjectionToken('DbxSearchableField');\n\n@Component({\n selector: 'dbx-searchable-field-autocomplete-item',\n template: `\n <dbx-anchor [block]=\"true\" [anchor]=\"anchorSignal()\">\n <dbx-injection [config]=\"configSignal()\"></dbx-injection>\n </dbx-anchor>\n `,\n imports: [DbxAnchorComponent, DbxInjectionComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxSearchableFieldAutocompleteItemComponent<T> {\n readonly displayValue = input.required<ConfiguredSearchableValueFieldDisplayValue<T>>();\n\n readonly configSignal = computed(() => {\n const displayValue = this.displayValue();\n const config: DbxInjectionComponentConfig = {\n ...displayValue.display,\n providers: mergeArraysIntoArray(\n [\n {\n provide: DBX_SEARCHABLE_FIELD_COMPONENT_DATA_TOKEN,\n useValue: displayValue\n }\n ],\n displayValue.display.providers\n )\n };\n\n return config;\n });\n\n readonly anchorSignal = computed(() => this.displayValue().anchor);\n}\n\n// MARK: Default\n@Directive()\nexport abstract class AbstractDbxSearchableFieldDisplayDirective<T> {\n readonly displayValue = inject<ConfiguredSearchableValueFieldDisplayValue<T>>(DBX_SEARCHABLE_FIELD_COMPONENT_DATA_TOKEN);\n}\n\n@Component({\n selector: 'dbx-default-searchable-field-display',\n template: `\n <div class=\"dbx-default-searchable-field-display dbx-flex-bar\">\n @if (icon) {\n <mat-icon class=\"dbx-icon-spacer\">{{ icon }}</mat-icon>\n }\n <span class=\"dbx-chip-label\">{{ displayValue.label }}</span>\n @if (displayValue.sublabel) {\n <span class=\"dbx-chip-sublabel\">({{ displayValue.sublabel }})</span>\n }\n </div>\n `,\n imports: [MatIconModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxDefaultSearchableFieldDisplayComponent<T> extends AbstractDbxSearchableFieldDisplayDirective<T> {\n readonly icon = this.displayValue.icon;\n}\n","import { type ArrayOrValue, type Maybe, convertMaybeToArray, lastValue, type PrimativeKey, separateValues, asArray, filterUniqueValues, type Configurable } from '@dereekb/util';\nimport { type DbxInjectionComponentConfig, mergeDbxInjectionComponentConfigs } from '@dereekb/dbx-core';\nimport { filterMaybe, SubscriptionObject, type LoadingState, successResult, startWithBeginLoading, isLoadingStateInLoadingState, listLoadingStateContext } from '@dereekb/rxjs';\nimport { Directive, ElementRef, type OnDestroy, type OnInit, viewChild } from '@angular/core';\nimport { type AbstractControl, FormControl, type ValidatorFn } from '@angular/forms';\nimport { type FieldTypeConfig, type FormlyFieldProps } from '@ngx-formly/core';\nimport { FieldType } from '@ngx-formly/material';\nimport { debounceTime, distinctUntilChanged, first, map, mergeMap, shareReplay, startWith, switchMap, BehaviorSubject, of, type Observable } from 'rxjs';\nimport { type SearchableValueFieldHashFn, type SearchableValueFieldStringSearchFn, type SearchableValueFieldDisplayFn, type SearchableValueFieldDisplayValue, type SearchableValueFieldValue, type SearchableValueFieldAnchorFn, type ConfiguredSearchableValueFieldDisplayValue } from './searchable';\nimport { DbxDefaultSearchableFieldDisplayComponent } from './searchable.field.autocomplete.item.component';\nimport { camelCase } from 'change-case-all';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\nexport interface StringValueFieldsFieldProps extends FormlyFieldProps {\n /**\n * Custom input validators.\n */\n readonly textInputValidator?: ValidatorFn | ValidatorFn[];\n}\n\nexport interface SearchableValueFieldsFieldProps<T, M = unknown, H extends PrimativeKey = PrimativeKey> extends FormlyFieldProps, StringValueFieldsFieldProps {\n /**\n * Whether or not to allow string values to be used directly, or if values can only be chosen from searching.\n */\n readonly allowStringValues?: boolean;\n /**\n * Whether or not to set/get values as an array or a single value. If set false, multiSelect is ignored.\n */\n readonly asArrayValue?: boolean;\n /**\n * Optional conversion function. If provided, allowStringValues is considered true.\n */\n readonly convertStringValue?: (text: string) => T;\n /**\n * Used for hashing display values and omitting repeat values.\n *\n * If hashForValue is not provided, the value's value will be used as is.\n */\n readonly hashForValue?: SearchableValueFieldHashFn<T, H>;\n /**\n * Performs a search.\n */\n readonly search: SearchableValueFieldStringSearchFn<T, M>;\n /**\n * Whether or not to allow searches on empty text. Is false by default.\n */\n readonly searchOnEmptyText?: boolean;\n /**\n * Default injected config to use for display values.\n */\n readonly display?: Partial<DbxInjectionComponentConfig>;\n /**\n * Used for building a display value given the input.\n */\n readonly displayForValue: SearchableValueFieldDisplayFn<T, M>;\n /**\n * Whether or not to use the anchor field on value elements.\n *\n * This has no default effect if a component class is provided.\n */\n readonly useAnchor?: boolean;\n /**\n * Used for retrieving an anchor value for values that have no anchor value set.\n *\n * Only used when useAnchor is true.\n */\n readonly anchorForValue?: SearchableValueFieldAnchorFn<T, M>;\n /**\n * Whether or not to show \"Clear\" in the autcomplete list.\n */\n readonly showClearValue?: boolean;\n /**\n * Label for the search input.\n *\n * Defaults to \"Search\"\n */\n readonly searchLabel?: string;\n /**\n * (Optional) observable that will trigger the clearing of all cached display values.\n */\n readonly refreshDisplayValues$?: Observable<unknown>;\n}\n\nconst DEFAULT_SEARCH_INPUT_PLACEHOLDER = 'Type to Search';\n\nconst DEFAULT_SEARCHABLE_FIELD_DISPLAY: Partial<DbxInjectionComponentConfig> = {\n componentClass: DbxDefaultSearchableFieldDisplayComponent\n};\n\n/**\n * Abstract searchable field that provides a feature for searching for values, and for displaying values using Observables.\n *\n * Display values are cached for performance.\n */\n@Directive()\nexport abstract class AbstractDbxSearchableValueFieldDirective<T, M = unknown, H extends PrimativeKey = PrimativeKey, C extends SearchableValueFieldsFieldProps<T, M, H> = SearchableValueFieldsFieldProps<T, M, H>> extends FieldType<FieldTypeConfig<C>> implements OnInit, OnDestroy {\n /**\n * Whether or not to set/get values as an array.\n */\n abstract get multiSelect(): boolean;\n\n /**\n * Optional override set by the parent class for whether or not to allow the current value to sync to the input.\n */\n allowSyncValueToInput = false;\n\n /**\n * Default placeholder text to use when searchOnEmptyText is false.\n */\n defaultSearchInputPlaceholder?: Maybe<string> = DEFAULT_SEARCH_INPUT_PLACEHOLDER;\n\n readonly textInput = viewChild<string, ElementRef<HTMLInputElement>>('textInput', { read: ElementRef<HTMLInputElement> });\n\n readonly inputCtrl = new FormControl<string>('');\n\n private readonly _formControlObs = new BehaviorSubject<Maybe<AbstractControl>>(undefined);\n readonly formControl$ = this._formControlObs.pipe(filterMaybe());\n\n private readonly _clearDisplayHashMapSub = new SubscriptionObject();\n private readonly _displayHashMap = new BehaviorSubject<Map<H, ConfiguredSearchableValueFieldDisplayValue<T, M>>>(new Map());\n\n readonly inputValue$: Observable<string> = this.inputCtrl.valueChanges.pipe(\n startWith(this.inputCtrl.value),\n map((x) => x || '')\n );\n\n readonly inputValueString$: Observable<string> = this.inputValue$.pipe(debounceTime(200), distinctUntilChanged());\n\n readonly searchResultsState$: Observable<LoadingState<ConfiguredSearchableValueFieldDisplayValue<T, M>[]>> = this.inputValueString$.pipe(\n switchMap((text) =>\n (text || this.searchOnEmptyText ? this.search(text ?? '') : of([])).pipe(\n switchMap((x) => this.loadDisplayValuesForFieldValues(x)),\n // Return begin loading to setup the loading state.\n startWithBeginLoading()\n )\n ),\n shareReplay(1)\n );\n\n private readonly _singleValueSyncSub = new SubscriptionObject();\n\n readonly searchContext = listLoadingStateContext({ obs: this.searchResultsState$, showLoadingOnNoValue: false });\n readonly searchResults$: Observable<ConfiguredSearchableValueFieldDisplayValue<T, M>[]> = this.searchResultsState$.pipe(\n map((x) => x?.value ?? []),\n shareReplay(1)\n );\n readonly isLoadingSearchResults$: Observable<boolean> = this.searchResultsState$.pipe(map(isLoadingStateInLoadingState), distinctUntilChanged(), shareReplay(1));\n\n readonly _formControlValue$: Observable<T | T[]> = this.formControl$.pipe(switchMap((control) => control.valueChanges.pipe(startWith(control.value), shareReplay(1))));\n\n readonly values$: Observable<T[]> = this._formControlValue$.pipe(map(convertMaybeToArray), shareReplay(1));\n\n readonly displayValuesState$: Observable<LoadingState<ConfiguredSearchableValueFieldDisplayValue<T, M>[]>> = this.values$.pipe(\n distinctUntilChanged(),\n switchMap((values: T[]) => this.loadDisplayValuesForValues(values)),\n shareReplay(1)\n );\n\n readonly displayValues$: Observable<ConfiguredSearchableValueFieldDisplayValue<T, M>[]> = this.displayValuesState$.pipe(map((x) => x?.value ?? []));\n\n readonly inputValueSignal = toSignal(this.inputValue$);\n readonly searchResultsSignal = toSignal(this.searchResults$);\n readonly displayValuesSignal = toSignal(this.displayValues$);\n\n readonly isLoadingSearchResultsSignal = toSignal(this.isLoadingSearchResults$);\n\n get name(): string {\n return this.field.name ?? camelCase(this.label ?? (this.key as string));\n }\n\n get label(): Maybe<string> {\n return this.props.label;\n }\n\n get readonly(): Maybe<boolean> {\n return this.props.readonly;\n }\n\n get isReadonlyOrDisabled() {\n return this.readonly || this.disabled;\n }\n\n get searchableField(): SearchableValueFieldsFieldProps<T, M, H> {\n return this.props;\n }\n\n get asArrayValue(): boolean {\n return this.searchableField.asArrayValue ?? true;\n }\n\n get pickOnlyOne(): boolean {\n return this.asArrayValue === false || this.multiSelect === false;\n }\n\n get searchOnEmptyText(): boolean {\n return this.searchableField.searchOnEmptyText ?? false;\n }\n\n get searchInputPlaceholder(): string | '' {\n const searchOnEmpty = this.searchOnEmptyText;\n const placeholder = this.searchableField.placeholder;\n const test = placeholder || (searchOnEmpty ? undefined : this.defaultSearchInputPlaceholder) || '';\n return test;\n }\n\n get autocomplete(): string {\n return (this.props.attributes?.['autocomplete'] ?? this.key) as string;\n }\n\n get hashForValue(): SearchableValueFieldHashFn<T, H> {\n return this.searchableField.hashForValue ?? ((x) => x as unknown as H);\n }\n\n get displayForValue(): SearchableValueFieldDisplayFn<T, M> {\n return this.searchableField.displayForValue;\n }\n\n get useAnchor(): Maybe<boolean> {\n return this.searchableField.useAnchor;\n }\n\n get anchorForValue(): Maybe<SearchableValueFieldAnchorFn<T, M>> {\n return this.searchableField.anchorForValue;\n }\n\n get display(): Maybe<Partial<DbxInjectionComponentConfig>> {\n return this.searchableField.display;\n }\n\n get search(): SearchableValueFieldStringSearchFn<T, M> {\n return this.searchableField.search;\n }\n\n get values(): T[] {\n return this._getValueOnFormControl(this.formControl.value) ?? [];\n }\n\n get allowStringValues(): boolean {\n return this.searchableField.allowStringValues ?? Boolean(this.convertStringValue);\n }\n\n get convertStringValue(): Maybe<(text: string) => T> {\n return this.searchableField.convertStringValue;\n }\n\n get showClearValue(): boolean {\n return this.searchableField.showClearValue ?? true;\n }\n\n get searchLabel() {\n return this.searchableField.searchLabel ?? 'Search';\n }\n\n get refreshDisplayValues$() {\n return this.searchableField.refreshDisplayValues$;\n }\n\n loadDisplayValuesForValues(values: T[]): Observable<LoadingState<ConfiguredSearchableValueFieldDisplayValue<T, M>[]>> {\n return this.loadDisplayValuesForFieldValues(values.map((value) => ({ value })));\n }\n\n loadDisplayValuesForFieldValues(values: SearchableValueFieldValue<T, M>[]): Observable<LoadingState<ConfiguredSearchableValueFieldDisplayValue<T, M>[]>> {\n return this.getDisplayValuesForFieldValues(values).pipe(\n map((displayValues: ConfiguredSearchableValueFieldDisplayValue<T, M>[]) => successResult(displayValues)),\n startWithBeginLoading(),\n shareReplay(1)\n );\n }\n\n getDisplayValuesForFieldValues(values: SearchableValueFieldValue<T, M>[]): Observable<ConfiguredSearchableValueFieldDisplayValue<T, M>[]> {\n return this._displayHashMap.pipe(\n mergeMap((displayMap) => {\n const mappingResult = values.map((x) => [x, this.hashForValue(x.value)] as [SearchableValueFieldValue<T, M>, H]).map(([x, hash], i) => [i, hash, x, displayMap.get(hash)] as [number, H, SearchableValueFieldValue<T, M>, ConfiguredSearchableValueFieldDisplayValue<T, M>]);\n\n const {\n //\n included: hasDisplay,\n excluded: needsDisplay\n } = separateValues(mappingResult, (x) => Boolean(x[3]));\n\n let obs: Observable<ConfiguredSearchableValueFieldDisplayValue<T, M>[]>;\n\n if (needsDisplay.length > 0) {\n // Go get the display value.\n const displayValuesObs = this.displayForValue(needsDisplay.map((x) => x[2]));\n const defaultDisplay = mergeDbxInjectionComponentConfigs([DEFAULT_SEARCHABLE_FIELD_DISPLAY, this.display]);\n\n const anchorForValue = this.useAnchor && this.anchorForValue;\n\n obs = displayValuesObs.pipe(\n first(),\n map((displayResults) => {\n // Assign the default component classes to complete configuration.\n (displayResults as Configurable<SearchableValueFieldDisplayValue<T, M>>[]).forEach((x) => {\n if (!x.display) {\n x.display = defaultDisplay;\n } else {\n x.display = mergeDbxInjectionComponentConfigs([defaultDisplay, x.display]);\n }\n\n if (!x.anchor && anchorForValue) {\n x.anchor = anchorForValue(x);\n }\n });\n\n // Create a map to re-join values later.\n const displayResultsMapping: [ConfiguredSearchableValueFieldDisplayValue<T, M>, H][] = (displayResults as ConfiguredSearchableValueFieldDisplayValue<T, M>[]).map((x) => [x, this.hashForValue(x.value)]);\n const valueIndexHashMap = new Map(displayResultsMapping.map(([x, hash]) => [hash, x]));\n\n // Update displayMap. No need to push an update notification.\n displayResultsMapping.forEach(([x, hash]) => displayMap.set(hash, x));\n\n // Zip values back together.\n const newDisplayValues = mappingResult.map((x) => x[3] ?? valueIndexHashMap.get(x[1]));\n\n // Return display values.\n return newDisplayValues;\n })\n );\n } else {\n // If all display values are hashed return that.\n obs = of(hasDisplay.map((x) => x[3]));\n }\n\n return obs;\n })\n );\n }\n\n ngOnInit(): void {\n this._formControlObs.next(this.formControl);\n\n if (this.refreshDisplayValues$ != null) {\n this._clearDisplayHashMapSub.subscription = this.refreshDisplayValues$.subscribe(() => this._displayHashMap.next(new Map()));\n }\n\n if (this.searchableField.textInputValidator) {\n this.inputCtrl.setValidators(this.searchableField.textInputValidator);\n }\n\n if (this.allowSyncValueToInput && this.multiSelect === false) {\n this._singleValueSyncSub.subscription = this.displayValues$.subscribe((x) => {\n if (x[0]) {\n this._syncSingleValue(x[0]);\n }\n });\n }\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._clearDisplayHashMapSub.destroy();\n this._displayHashMap.complete();\n this._singleValueSyncSub.destroy();\n this._formControlObs.complete();\n this.searchContext.destroy();\n }\n\n /**\n * Used to sync the input control with the selected value.\n *\n * Only used when multiSelect is false.\n */\n protected _syncSingleValue(value: SearchableValueFieldDisplayValue<T>): void {\n this.inputCtrl.setValue(value.label);\n }\n\n protected _addWithTextValue(text: string): void {\n if (!this.searchableField.allowStringValues) {\n return;\n }\n\n if (text) {\n text = (text || '').trim();\n this.inputCtrl.setValue(text.trim());\n }\n\n if (!this.inputCtrl.valid) {\n return;\n }\n\n if (text) {\n const value = this.convertStringValue ? this.convertStringValue(text) : (text as unknown as T);\n this.addValue(value);\n }\n }\n\n addWithDisplayValue(displayValue: SearchableValueFieldDisplayValue<T>): void {\n this.addValue(displayValue.value);\n }\n\n removeWithDisplayValue(displayValue: SearchableValueFieldDisplayValue<T>): void {\n this.removeValue(displayValue.value);\n }\n\n _tryAddCurrentInputValue(): boolean {\n let addedValue = false;\n\n if (this.allowStringValues) {\n const value = this.inputCtrl.value || '';\n\n if ((value || '').trim()) {\n this._addWithTextValue(value);\n addedValue = true;\n }\n }\n\n return addedValue;\n }\n\n addValue(value: T): void {\n const textInput = this.textInput();\n\n if (textInput) {\n textInput.nativeElement.value = '';\n }\n\n this.inputCtrl.setValue(null);\n this.setValues([...this.values, value]);\n }\n\n removeValue(value: T): void {\n let values;\n\n if (this.hashForValue) {\n const hashToFilter = this.hashForValue(value);\n values = this.values.filter((x) => this.hashForValue(x) !== hashToFilter);\n } else {\n values = this.values.filter((x) => x !== value);\n }\n\n this.setValues(values);\n }\n\n clearValues(): void {\n this.setValues([]);\n }\n\n setValues(values: T[]): void {\n // Use to filter non-unique values.\n if (this.hashForValue) {\n values = filterUniqueValues(values, this.hashForValue);\n }\n\n if (this.pickOnlyOne) {\n values = [lastValue(values)].filter((x) => x != null);\n }\n\n this._setValueOnFormControl(values);\n }\n\n // MARK: Internal\n protected _getValueOnFormControl(valueOnFormControl: ArrayOrValue<T>): T[] {\n const value: T[] = valueOnFormControl != null ? asArray(valueOnFormControl) : []; // Always return an array.\n return value;\n }\n\n protected _setValueOnFormControl(values: T[]): void {\n let newValue: T | T[] = values;\n\n if (!this.asArrayValue) {\n newValue = [values[0]].filter((x) => x != null)[0];\n }\n\n this.formControl.setValue(newValue);\n this.formControl.markAsDirty();\n this.formControl.markAsTouched();\n }\n}\n","import { SubscriptionObject, skipUntilTimeElapsedAfterLastEmission } from '@dereekb/rxjs';\nimport { Subject } from 'rxjs';\nimport { ChangeDetectionStrategy, Component, type OnDestroy, type OnInit } from '@angular/core';\nimport { MatAutocompleteModule, type MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';\nimport { type MatChipInputEvent, MatChipsModule } from '@angular/material/chips';\nimport { AbstractDbxSearchableValueFieldDirective, type SearchableValueFieldsFieldProps } from './searchable.field.directive';\nimport { COMMA, ENTER } from '@angular/cdk/keycodes';\nimport { type PrimativeKey } from '@dereekb/util';\nimport { type SearchableValueFieldDisplayValue } from './searchable';\nimport { MatIconModule } from '@angular/material/icon';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { DbxLoadingModule } from '@dereekb/dbx-web';\nimport { DbxSearchableFieldAutocompleteItemComponent } from './searchable.field.autocomplete.item.component';\nimport { MatOptionModule } from '@angular/material/core';\n\nexport interface SearchableChipValueFieldsFieldProps<T, M = unknown, H extends PrimativeKey = PrimativeKey> extends SearchableValueFieldsFieldProps<T, M, H> {\n /**\n * Whether or not to allow multiple items to be selected.\n */\n readonly multiSelect?: boolean;\n}\n\n@Component({\n templateUrl: 'searchable.chip.field.component.html',\n imports: [MatChipsModule, MatIconModule, FormsModule, ReactiveFormsModule, DbxLoadingModule, MatAutocompleteModule, MatOptionModule, DbxSearchableFieldAutocompleteItemComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxSearchableChipFieldComponent<T, M = unknown, H extends PrimativeKey = PrimativeKey> extends AbstractDbxSearchableValueFieldDirective<T, M, H, SearchableChipValueFieldsFieldProps<T, M, H>> implements OnInit, OnDestroy {\n override get multiSelect(): boolean {\n return this.props.multiSelect ?? true;\n }\n\n private readonly _blur = new Subject<void>();\n private readonly _blurSub = new SubscriptionObject();\n\n readonly separatorKeysCodes: number[] = [ENTER, COMMA];\n\n selected(event: MatAutocompleteSelectedEvent): void {\n this.addWithDisplayValue(event.option.value);\n }\n\n tabPressedOnInput(event: KeyboardEvent): boolean {\n if (event?.key?.toLowerCase() === 'tab') {\n if (this._tryAddCurrentInputValue()) {\n event.preventDefault();\n event.stopImmediatePropagation();\n return false;\n }\n }\n\n return true;\n }\n\n addChip(event: MatChipInputEvent): void {\n const text = event.value ?? this.inputCtrl.value;\n return this._addWithTextValue(text);\n }\n\n protected override _syncSingleValue(value: SearchableValueFieldDisplayValue<T>): void {\n // Do nothing\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n\n // Only try and add the text item as a value if a value wasn't just added (for example, clicking a value).\n this._blurSub.subscription = this._blur.pipe(skipUntilTimeElapsedAfterLastEmission(this.values$, 100)).subscribe(() => {\n this._tryAddCurrentInputValue();\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._blur.complete();\n this._blurSub.destroy();\n }\n\n onBlur(): void {\n this._blur.next();\n }\n}\n","<div class=\"dbx-searchable-field\">\n <!-- View -->\n <mat-chip-grid [required]=\"required\" [disabled]=\"readonly\" #chipList>\n @for (displayValue of displayValuesSignal(); track displayValue.value) {\n <mat-chip-row [removable]=\"true\" (removed)=\"removeWithDisplayValue(displayValue)\">\n @if (displayValue.icon) {\n <mat-icon matChipAvatar>{{ displayValue.icon }}</mat-icon>\n }\n <span class=\"dbx-chip-label\">{{ displayValue.label }}</span>\n @if (displayValue.sublabel) {\n <span class=\"dbx-chip-sublabel\">{{ displayValue.sublabel }}</span>\n }\n @if (!readonly) {\n <mat-icon matChipRemove>cancel</mat-icon>\n }\n </mat-chip-row>\n }\n <input #textInput [name]=\"name\" [placeholder]=\"searchInputPlaceholder\" [formControl]=\"inputCtrl\" [matAutocomplete]=\"auto\" autocomplete=\"{{ autocomplete }}\" [matAutocompleteDisabled]=\"readonly\" [matChipInputFor]=\"chipList\" (keydown)=\"tabPressedOnInput($event)\" [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\" (matChipInputTokenEnd)=\"addChip($event)\" (blur)=\"onBlur()\" />\n </mat-chip-grid>\n <div class=\"searchable-field-form-loading\">\n <dbx-loading [linear]=\"true\" [context]=\"searchContext\"></dbx-loading>\n </div>\n</div>\n\n<!-- Autocomplete -->\n<mat-autocomplete class=\"dbx-searchable-text-field-autocomplete\" #auto=\"matAutocomplete\" (optionSelected)=\"selected($event)\">\n @for (displayValue of searchResultsSignal(); track displayValue.value) {\n <mat-option [value]=\"displayValue\">\n <dbx-searchable-field-autocomplete-item [displayValue]=\"displayValue\"></dbx-searchable-field-autocomplete-item>\n </mat-option>\n }\n</mat-autocomplete>\n","import { arrayToMap, type Maybe, type PrimativeKey, separateValues } from '@dereekb/util';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type Observable, of, switchMap, map } from 'rxjs';\nimport { type LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig, type DescriptionFieldConfig, type MaterialFormFieldConfig } from '../../field';\nimport { type SearchableValueFieldDisplayFn, type SearchableValueFieldDisplayValue, type SearchableValueFieldValue } from './searchable';\nimport { type SearchableChipValueFieldsFieldProps } from './searchable.chip.field.component';\nimport { type SearchableTextValueFieldsFieldProps } from './searchable.text.field.component';\n\n/**\n * Used to create a SearchableValueFieldDisplayFn function that will retrieve the metadata for items that are missing their metadata so they can be displayed properly.\n *\n * @param param0\n * @returns\n */\nexport function makeMetaFilterSearchableFieldValueDisplayFn<T extends string | number = string | number, M = unknown>({ loadMetaForValues, makeDisplayForValues }: { loadMetaForValues: (values: SearchableValueFieldValue<T, M>[]) => Observable<SearchableValueFieldValue<T, M>[]>; makeDisplayForValues: (values: SearchableValueFieldValue<T, M>[]) => Observable<SearchableValueFieldDisplayValue<T, M>[]> }): SearchableValueFieldDisplayFn<T, M> {\n return (values: SearchableValueFieldValue<T, M>[]) => {\n const { included: loaded, excluded: needLoading } = separateValues(values, (x) => Boolean(x.meta));\n let allValues: Observable<SearchableValueFieldValue<T, M>[]>;\n\n if (needLoading.length > 0) {\n const loadingResult = loadMetaForValues(needLoading);\n allValues = loadingResult.pipe(\n map((result) => {\n const resultMap: Map<Maybe<T>, SearchableValueFieldValue<T, M>> = arrayToMap(result, (x) => x.value);\n\n const mergedWithLoad = needLoading.map((x) => {\n const id = x.value;\n const loadedItem = resultMap.get(id);\n const anchor = x.anchor ?? loadedItem?.anchor;\n const meta: Maybe<M> = loadedItem?.meta;\n\n return {\n ...x,\n anchor,\n meta\n };\n });\n\n return mergedWithLoad;\n }),\n map((result) => [...loaded, ...result])\n );\n } else {\n allValues = of(loaded);\n }\n\n return allValues.pipe(switchMap(makeDisplayForValues));\n };\n}\n\n// MARK: Chips\nexport type StringSearchableChipFieldConfig<M = unknown> = Omit<SearchableChipFieldConfig<string, M>, 'allowStringValues'>;\n\nexport function searchableStringChipField<M = unknown>(config: StringSearchableChipFieldConfig<M>): FormlyFieldConfig {\n return searchableChipField({\n ...config,\n allowStringValues: true\n });\n}\n\nexport interface SearchableChipFieldConfig<T = unknown, M = unknown, H extends PrimativeKey = PrimativeKey> extends LabeledFieldConfig, DescriptionFieldConfig, MaterialFormFieldConfig, SearchableChipValueFieldsFieldProps<T, M, H> {}\n\nexport function searchableChipField<T, M = unknown, H extends PrimativeKey = PrimativeKey>(config: SearchableChipFieldConfig<T, M, H>): FormlyFieldConfig {\n const { key, placeholder, materialFormField } = config;\n return formlyField({\n key,\n type: 'searchablechipfield',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n ...config,\n placeholder: placeholder ?? 'Add...',\n autocomplete: false\n })\n });\n}\n\n// MARK: Text\nexport interface SearchableTextFieldConfig<T = unknown, M = unknown, H extends PrimativeKey = PrimativeKey> extends LabeledFieldConfig, DescriptionFieldConfig, MaterialFormFieldConfig, SearchableTextValueFieldsFieldProps<T, M, H> {}\n\nexport function searchableTextField<T, M = unknown, H extends PrimativeKey = PrimativeKey>(config: SearchableTextFieldConfig<T, M, H>): FormlyFieldConfig {\n const { key, materialFormField } = config;\n return formlyField({\n key,\n type: 'searchabletextfield',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n ...config,\n autocomplete: false\n })\n });\n}\n","import { ChangeDetectionStrategy, Component, computed, type OnDestroy, type OnInit } from '@angular/core';\nimport { MatAutocompleteModule, type MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';\nimport { AbstractDbxSearchableValueFieldDirective, type SearchableValueFieldsFieldProps } from './searchable.field.directive';\nimport { map, shareReplay } from 'rxjs';\nimport { type PrimativeKey } from '@dereekb/util';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatIconModule } from '@angular/material/icon';\nimport { DbxLoadingModule } from '@dereekb/dbx-web';\nimport { DbxSearchableFieldAutocompleteItemComponent } from './searchable.field.autocomplete.item.component';\nimport { NgClass } from '@angular/common';\nimport { MatInput } from '@angular/material/input';\nimport { MatOptionModule } from '@angular/material/core';\nimport { type SearchableValueFieldDisplayValue } from './searchable';\n\nexport interface SearchableTextValueFieldsFieldProps<T, M = unknown, H extends PrimativeKey = PrimativeKey> extends SearchableValueFieldsFieldProps<T, M, H> {\n readonly showSelectedValue?: boolean;\n}\n\n/**\n * Display component for selecting a single item/value.\n */\n@Component({\n templateUrl: 'searchable.text.field.component.html',\n imports: [FormsModule, MatInput, NgClass, ReactiveFormsModule, DbxLoadingModule, MatOptionModule, MatAutocompleteModule, MatChipsModule, MatIconModule, DbxSearchableFieldAutocompleteItemComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxSearchableTextFieldComponent<T, M = unknown, H extends PrimativeKey = PrimativeKey> extends AbstractDbxSearchableValueFieldDirective<T, M, H, SearchableTextValueFieldsFieldProps<T, M, H>> implements OnInit, OnDestroy {\n override allowSyncValueToInput = true;\n\n readonly selectedDisplayValue$ = this.displayValues$.pipe(\n map((x) => x[0]),\n shareReplay(1)\n );\n\n readonly selectedDisplayValueSignal = toSignal(this.selectedDisplayValue$);\n readonly hasValueSignal = computed(() => Boolean(this.selectedDisplayValueSignal()));\n readonly showSelectedDisplayValueSignal = computed(() => this.showSelectedValue && this.hasValueSignal());\n\n override get searchableField(): SearchableTextValueFieldsFieldProps<T, M, H> {\n return this.props;\n }\n\n get showSelectedValue() {\n return this.searchableField.showSelectedValue ?? !this.allowStringValues; // Show the selected value only if string values are allowed.\n }\n\n get multiSelect() {\n return false;\n }\n\n /*\n private _clearInputSub = new SubscriptionObject();\n\n override ngOnInit(): void {\n super.ngOnInit();\n\n this._clearInputSub.subscription = this.inputValue$.pipe(skipWhile((x) => !x)).subscribe((x) => {\n if (!x) {\n // this.clearValues();\n }\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._clearInputSub.destroy();\n }\n */\n\n selected(event: MatAutocompleteSelectedEvent): void {\n const value = event.option.value as SearchableValueFieldDisplayValue<T> | { _ignore?: true } | { _clear?: true };\n\n console.log('selected', value);\n\n if ((value as any)._clear) {\n this.clearValues();\n } else if (!(value as any)._ignore) {\n this.addWithDisplayValue(value as SearchableValueFieldDisplayValue<T>);\n }\n }\n}\n","<div class=\"dbx-searchable-text-field\" [ngClass]=\"{ 'dbx-searchable-text-field-has-value': hasValueSignal(), 'dbx-searchable-text-field-show-value': showSelectedValue }\">\n <!-- Result View -->\n @if (showSelectedDisplayValueSignal()) {\n <div class=\"dbx-searchable-text-field-value mat-option mat-option-text\">\n <dbx-searchable-field-autocomplete-item [displayValue]=\"selectedDisplayValueSignal()!\"></dbx-searchable-field-autocomplete-item>\n </div>\n }\n <div class=\"dbx-searchable-text-field-input\">\n @if (searchLabel) {\n <div class=\"dbx-label\">{{ searchLabel }}</div>\n }\n <!-- View -->\n <input type=\"search\" [name]=\"name\" matInput #textInput [placeholder]=\"searchInputPlaceholder\" [formControl]=\"inputCtrl\" [matAutocomplete]=\"auto\" [matAutocompleteDisabled]=\"readonly || disabled\" autocomplete=\"{{ autocomplete }}\" />\n <div class=\"searchable-field-form-loading\">\n <dbx-loading [linear]=\"true\" [context]=\"searchContext\"></dbx-loading>\n </div>\n </div>\n</div>\n\n<!-- Autocomplete -->\n<mat-autocomplete class=\"dbx-searchable-text-field-autocomplete\" #auto (optionSelected)=\"selected($event)\">\n @for (displayValue of searchResultsSignal(); track displayValue.value) {\n <mat-option [value]=\"displayValue\">\n <dbx-searchable-field-autocomplete-item [displayValue]=\"displayValue\"></dbx-searchable-field-autocomplete-item>\n </mat-option>\n }\n <!-- If No Results -->\n @if (searchResultsSignal()?.length === 0) {\n @if (!isLoadingSearchResultsSignal()) {\n <mat-option value=\"\" disabled>\n <p class=\"dbx-clear-hint text-center\">No results found.</p>\n </mat-option>\n } @else {\n <mat-option value=\"\" disabled>\n <p class=\"dbx-clear-hint text-center\">Loading...</p>\n </mat-option>\n }\n }\n <!-- Add/Pick String Value -->\n @if (allowStringValues && inputValueSignal()) {\n <mat-option [value]=\"{ value: inputValueSignal() }\">\n <p class=\"dbx-clear-hint text-center\">\"{{ inputValueSignal() }}\"</p>\n </mat-option>\n }\n <!-- Show clear value -->\n @if (showClearValue && hasValueSignal()) {\n <mat-option value=\"\">\n <p class=\"dbx-clear-hint text-center\">Clear</p>\n </mat-option>\n }\n</mat-autocomplete>\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxSearchableChipFieldComponent } from './searchable.chip.field.component';\nimport { DbxDefaultSearchableFieldDisplayComponent, DbxSearchableFieldAutocompleteItemComponent } from './searchable.field.autocomplete.item.component';\nimport { DbxSearchableTextFieldComponent } from './searchable.text.field.component';\n\nconst importsAndExports = [DbxSearchableChipFieldComponent, DbxSearchableTextFieldComponent, DbxSearchableFieldAutocompleteItemComponent, DbxDefaultSearchableFieldDisplayComponent];\n\n@NgModule({\n imports: [\n ...importsAndExports,\n FormlyModule.forChild({\n types: [\n { name: 'searchablechipfield', component: DbxSearchableChipFieldComponent, wrappers: ['form-field'] },\n { name: 'searchabletextfield', component: DbxSearchableTextFieldComponent, wrappers: ['form-field'] }\n ]\n })\n ],\n exports: importsAndExports\n})\nexport class DbxFormFormlySearchableFieldModule {}\n","import { of } from 'rxjs';\nimport { type LabeledFieldConfig } from '../../field';\nimport { type SearchableValueFieldValue } from './searchable';\nimport { searchableChipField } from './searchable.field';\nimport { type StringValueFieldsFieldProps } from './searchable.field.directive';\n\nexport interface ChipTextFieldConfig extends LabeledFieldConfig, StringValueFieldsFieldProps {\n caseSensitive?: boolean;\n}\n\nexport function chipTextField(config: ChipTextFieldConfig) {\n const convertStringValue = config.caseSensitive ? (x: string) => x : (x: string) => x?.toLowerCase();\n\n return searchableChipField({\n search: () => of([]), // no search by default\n ...config,\n allowStringValues: true,\n convertStringValue,\n displayForValue: (values: SearchableValueFieldValue<string>[]) => {\n return of(values.map((x) => ({ ...x, label: x.value })));\n }\n });\n}\n","import { filterMaybe, type LoadingState, isLoadingStateWithDefinedValue, isLoadingStateLoading, type LoadingStateWithDefinedValue, startWithBeginLoading, SubscriptionObject, successResult, beginLoading, mapLoadingStateValueWithOperator, loadingStateContext, type WorkUsingContext, valueFromFinishedLoadingState } from '@dereekb/rxjs';\nimport { ChangeDetectionStrategy, Component, ElementRef, type OnDestroy, type OnInit, viewChild } from '@angular/core';\nimport { distinctUntilChanged, map, switchMap, shareReplay, startWith, mergeMap, scan, BehaviorSubject, tap, first, type Observable, combineLatest, of } from 'rxjs';\nimport { addToSetCopy, asArray, convertMaybeToArray, filterMaybeArrayValues, lastValue, makeValuesGroupMap, type Maybe, mergeArrays, type PrimativeKey, separateValues, setContainsAllValues, setsAreEquivalent, sortByStringFunction } from '@dereekb/util';\nimport { FieldType, type FormlyFieldProps } from '@ngx-formly/material/form-field';\nimport { type FieldTypeConfig } from '@ngx-formly/core';\nimport { type SourceSelectValueMetaLoader, type SourceSelectMetaValueReader, type SourceSelectOpenFunction, type SourceSelectLoadSourcesFunction, type SourceSelectLoadSource, type SourceSelectLoadSourceLoadingState, type SourceSelectDisplayValue, type SourceSelectValue, type SourceSelectDisplayFunction, type SourceSelectDisplayValueGroup, type SourceSelectValueGroup, type SourceSelectOptions, type SourceSelectOpenSourceResult } from './sourceselect';\nimport { type AbstractControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { MatOptgroup, MatOption, MatSelect } from '@angular/material/select';\nimport { DbxActionModule, DbxButtonComponent, DbxButtonSpacerDirective, DbxLoadingComponent } from '@dereekb/dbx-web';\n\nexport interface SourceSelectFieldProps<T extends PrimativeKey = PrimativeKey, M = unknown> extends FormlyFieldProps {\n /**\n * Function to open the source and request values.\n */\n readonly openSource?: SourceSelectOpenFunction<M>;\n /**\n * Loads the sources to display entries from.\n */\n readonly loadSources?: SourceSelectLoadSourcesFunction<M>;\n /**\n * Reads the value from a meta value.\n */\n readonly valueReader: SourceSelectMetaValueReader<T, M>;\n /**\n * Loads metadata for the input values.\n */\n readonly metaLoader: SourceSelectValueMetaLoader<T, M>;\n /**\n * Used for building a display value given the input.\n */\n readonly displayForValue: SourceSelectDisplayFunction<T, M>;\n /**\n * Select button icon\n */\n readonly selectButtonIcon?: string;\n /**\n * Whether or not the selection is as an array.\n */\n readonly multiple?: boolean;\n /**\n * (Optional) observable that will trigger the clearing of all cached display values.\n */\n readonly refreshDisplayValues$?: Observable<unknown>;\n}\n\ninterface SelectFieldOpenSourceMap<T extends PrimativeKey = PrimativeKey, M = unknown> {\n readonly values: SourceSelectValue<T, M>[];\n readonly valuesSet: Set<T>;\n}\n\n/**\n * Component that displays a select view (multi or not)\n */\n@Component({\n selector: 'dbx-form-sourceselectfield',\n templateUrl: 'sourceselect.field.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatSelect, MatOption, FormsModule, ReactiveFormsModule, DbxButtonComponent, MatOptgroup, DbxButtonSpacerDirective, DbxActionModule, DbxLoadingComponent],\n standalone: true\n})\nexport class DbxFormSourceSelectFieldComponent<T extends PrimativeKey = PrimativeKey, M = unknown> extends FieldType<FieldTypeConfig<SourceSelectFieldProps<T, M>>> implements OnInit, OnDestroy {\n private readonly _cacheMetaSub = new SubscriptionObject();\n private readonly _clearDisplayHashMapSub = new SubscriptionObject();\n private readonly _valueMetaHashMap = new BehaviorSubject<Map<T, SourceSelectValue<T, M>>>(new Map());\n private readonly _displayHashMap = new BehaviorSubject<Map<T, SourceSelectDisplayValue<T, M>>>(new Map());\n\n private readonly _formControlObs = new BehaviorSubject<Maybe<AbstractControl<T[]>>>(undefined);\n private readonly _fromOpenSource = new BehaviorSubject<SelectFieldOpenSourceMap<T, M>>({ values: [], valuesSet: new Set() });\n private readonly _loadSources = new BehaviorSubject<Maybe<Observable<SourceSelectLoadSource<M>[]>>>(undefined);\n\n readonly buttonElement = viewChild<string, ElementRef<HTMLElement>>('button', { read: ElementRef<HTMLElement> });\n\n readonly formControl$ = this._formControlObs.pipe(filterMaybe());\n\n readonly currentFormControlValue$ = this.formControl$.pipe(\n switchMap((control) => control.valueChanges.pipe(startWith(control.value))),\n shareReplay(1)\n );\n\n readonly values$: Observable<T[]> = this.currentFormControlValue$.pipe(map(convertMaybeToArray), shareReplay(1));\n\n readonly allValuesEverSelected$: Observable<T[]> = this.values$.pipe(\n scan((acc, values) => {\n let result: Set<T> = acc;\n\n if (!setContainsAllValues(acc, values)) {\n result = addToSetCopy(acc, values);\n }\n\n return result;\n }, new Set<T>()),\n distinctUntilChanged(),\n map((x) => Array.from(x)),\n shareReplay(1)\n );\n\n readonly sourceSelectValuesFromValuesState$: Observable<LoadingState<SourceSelectValue<T, M>[]>> = this.allValuesEverSelected$.pipe(\n distinctUntilChanged(),\n switchMap((values: T[]) => this.loadSourceSelectValueForValues(values)),\n shareReplay(1)\n );\n\n readonly loadSources$: Observable<LoadingState<SourceSelectValueGroup<T, M>[]>> = this._loadSources.pipe(\n filterMaybe(),\n switchMap((loadSource) => {\n const { valueReader } = this;\n\n return loadSource.pipe(\n switchMap((sources: SourceSelectLoadSource<M>[]) => {\n const sourceObs: Observable<SourceSelectLoadSourceLoadingState<M>>[] = sources.map((x) => x.meta.pipe(map((metaState) => ({ ...metaState, label: x.label }))));\n\n if (sourceObs.length === 0) {\n return of(successResult([]));\n } else {\n return combineLatest(sourceObs).pipe(\n map((x) => {\n const statesWithValues = x.filter((y) => isLoadingStateWithDefinedValue(y));\n const loading = x.findIndex(isLoadingStateLoading) !== -1;\n const value: SourceSelectValueGroup<T, M>[] = statesWithValues.map((y) => {\n const group: SourceSelectValueGroup<T, M> = {\n label: y.label,\n values: (y.value as M[]).map((meta) => ({ meta, value: valueReader(meta) }))\n };\n\n return group;\n });\n\n return {\n loading,\n value\n };\n })\n );\n }\n })\n );\n })\n );\n\n readonly fromOpenSource$: Observable<SourceSelectValueGroup<T, M>> = this._fromOpenSource.pipe(\n distinctUntilChanged((a, b) => setsAreEquivalent(a.valuesSet, b.valuesSet)),\n map((x) => {\n const group: SourceSelectValueGroup<T, M> = {\n label: '',\n values: x.values\n };\n\n return group;\n }),\n shareReplay(1)\n );\n\n readonly valueGroupsFromSourcesState$: Observable<LoadingStateWithDefinedValue<SourceSelectValueGroup<T, M>[]>> = combineLatest([this.fromOpenSource$, this.loadSources$]).pipe(\n map(([fromOpenSourceGroup, loadSources]) => {\n const loadSourcesValue = loadSources.value ?? [];\n const value: SourceSelectValueGroup<T, M>[] = [fromOpenSourceGroup, ...loadSourcesValue];\n\n const result: LoadingStateWithDefinedValue<SourceSelectValueGroup<T, M>[]> = {\n loading: loadSources.loading,\n value\n };\n\n return result;\n }),\n shareReplay(1)\n );\n\n readonly allValueGroupsState$: Observable<LoadingState<SourceSelectValueGroup<T, M>[]>> = this.sourceSelectValuesFromValuesState$.pipe(\n switchMap((sourceSelectValuesFromValues: LoadingState<SourceSelectValue<T, M>[]>) => {\n if (isLoadingStateWithDefinedValue(sourceSelectValuesFromValues)) {\n const valuesFromValuesGroup: SourceSelectValueGroup<T, M> = {\n label: '',\n values: sourceSelectValuesFromValues.value\n };\n\n return this.valueGroupsFromSourcesState$.pipe(\n map((sourcesState) => {\n const allGroups: SourceSelectValueGroup<T, M>[] = [valuesFromValuesGroup, ...sourcesState.value];\n\n const result: LoadingState<SourceSelectValueGroup<T, M>[]> = {\n loading: sourceSelectValuesFromValues.loading || sourcesState.loading,\n value: allGroups\n };\n\n return result;\n })\n );\n } else {\n return of(beginLoading<SourceSelectValueGroup<T, M>[]>({}));\n }\n }),\n shareReplay(1)\n );\n\n readonly allOptionGroupsState$: Observable<LoadingState<SourceSelectDisplayValueGroup<T, M>[]>> = this.allValueGroupsState$.pipe(\n mapLoadingStateValueWithOperator(\n switchMap((groups: SourceSelectValueGroup<T, M>[]) => {\n const allGroupsReducedByLabel = makeValuesGroupMap(groups, (x) => x.label) as Map<string, SourceSelectValueGroup<T, M>[]>;\n\n const valuesEncountered = new Set<T>();\n const allUniqueValues: SourceSelectValue<T, M>[] = [];\n\n const simplifiedValuesGroups: SourceSelectValueGroup<T, M>[] = [];\n\n // sort to put the blank label first\n Array.from(allGroupsReducedByLabel.entries())\n .sort(sortByStringFunction((x) => x[0]))\n .forEach(([label, groups]) => {\n const values: SourceSelectValue<T, M>[] = [];\n\n groups.forEach((group) => {\n group.values.forEach((selectValue) => {\n if (!valuesEncountered.has(selectValue.value)) {\n values.push(selectValue);\n allUniqueValues.push(selectValue);\n valuesEncountered.add(selectValue.value);\n }\n });\n });\n\n if (values.length > 0) {\n simplifiedValuesGroups.push({\n label,\n values\n });\n }\n });\n\n const obs = this.getDisplayValuesForSelectValues(allUniqueValues).pipe(\n map((displayValues) => {\n const displayValuesMap = new Map(displayValues.map((x) => [x.value, x]));\n\n const displayGroups: SourceSelectDisplayValueGroup<T, M>[] = simplifiedValuesGroups.map((valueGroup) => {\n const values = filterMaybeArrayValues(valueGroup.values.map((x) => displayValuesMap.get(x.value)));\n\n return {\n label: valueGroup.label,\n values\n };\n });\n\n return displayGroups;\n })\n );\n\n return obs;\n })\n ),\n shareReplay(1)\n );\n\n readonly allOptionGroups$: Observable<SourceSelectDisplayValueGroup<T, M>[]> = this.allOptionGroupsState$.pipe(\n valueFromFinishedLoadingState(),\n map((x) => x ?? []),\n shareReplay(1)\n );\n\n readonly options$: Observable<SourceSelectOptions<T, M>> = this.allOptionGroups$.pipe(\n map((x) => {\n const { included: groupedValues, excluded: nonGroupedGroup } = separateValues(x, (y) => Boolean(y.label));\n\n const result: SourceSelectOptions<T, M> = {\n nonGroupedValues: nonGroupedGroup[0]?.values ?? [],\n groupedValues\n };\n\n return result;\n }),\n shareReplay(1)\n );\n\n readonly nonGroupedValues$ = this.options$.pipe(map((x) => x.nonGroupedValues));\n readonly groupedOptions$ = this.options$.pipe(map((x) => x.groupedValues));\n\n readonly nonGroupedValuesSignal = toSignal(this.nonGroupedValues$);\n readonly groupedOptionsSignal = toSignal(this.groupedOptions$);\n\n get sourceSelectField(): SourceSelectFieldProps<T, M> {\n return this.props;\n }\n\n get openSource() {\n return this.props.openSource;\n }\n\n get showOpenSourceButton() {\n return Boolean(this.openSource);\n }\n\n get loadSources() {\n return this.props.loadSources;\n }\n\n get valueReader() {\n return this.props.valueReader;\n }\n\n get metaLoader() {\n return this.props.metaLoader;\n }\n\n get displayForValue(): SourceSelectDisplayFunction<T, M> {\n return this.props.displayForValue;\n }\n\n get selectButtonIcon() {\n return this.props.selectButtonIcon ?? 'add';\n }\n\n get multiple() {\n return this.props.multiple || false;\n }\n\n get refreshDisplayValues$() {\n return this.props.refreshDisplayValues$;\n }\n\n loadSourceSelectValueForValues(values: T[]): Observable<LoadingState<SourceSelectValue<T, M>[]>> {\n return this.getSourceSelectValueForValues(values).pipe(\n map((sourceSelectValues: SourceSelectValue<T, M>[]) => successResult(sourceSelectValues)),\n startWithBeginLoading(),\n shareReplay(1)\n );\n }\n\n getSourceSelectValueForValues(values: T[]): Observable<SourceSelectValue<T, M>[]> {\n const { valueReader } = this;\n\n return this._valueMetaHashMap.pipe(\n mergeMap((metaMap) => {\n const mappingResult = values.map((hash, i) => [i, hash, metaMap.get(hash)] as [number, T, SourceSelectValue<T, M>]);\n\n const {\n //\n included: hasMeta,\n excluded: needsMeta\n } = separateValues(mappingResult, (x) => Boolean(x[2]));\n\n let obs: Observable<SourceSelectValue<T, M>[]>;\n\n if (needsMeta.length > 0) {\n // Go get the meta value.\n const metaValuesObs = this.metaLoader(needsMeta.map((x) => x[1]));\n\n obs = metaValuesObs.pipe(\n first(),\n map((metaResults) => {\n const metaResultsMapping: SourceSelectValue<T, M>[] = metaResults.map((meta) => ({ meta, value: valueReader(meta) }));\n const valueIndexHashMap = new Map(metaResultsMapping.map((x) => [x.value, x]));\n\n // Update metaMap. No need to push an update notification.\n metaResultsMapping.forEach((x) => metaMap.set(x.value, x));\n\n // Zip values back together.\n const newDisplayValues = mappingResult.map((x) => x[2] ?? valueIndexHashMap.get(x[1]));\n\n // Return display values.\n return newDisplayValues;\n })\n );\n } else {\n // If all display values are hashed return them\n obs = of(hasMeta.map((x) => x[2]));\n }\n\n return obs;\n })\n );\n }\n\n loadDisplayValuesForSelectValues(values: SourceSelectValue<T, M>[]): Observable<LoadingState<SourceSelectDisplayValue<T, M>[]>> {\n return this.getDisplayValuesForSelectValues(values).pipe(\n map((displayValues: SourceSelectDisplayValue<T, M>[]) => successResult(displayValues)),\n startWithBeginLoading(),\n shareReplay(1)\n );\n }\n\n getDisplayValuesForSelectValues(values: SourceSelectValue<T, M>[]): Observable<SourceSelectDisplayValue<T, M>[]> {\n return this._displayHashMap.pipe(\n mergeMap((metaMap) => {\n const mappingResult = values.map((x) => [x, x.value] as [SourceSelectValue<T, M>, T]).map(([x, hash], i) => [i, hash, x, metaMap.get(hash)] as [number, T, SourceSelectValue<T, M>, SourceSelectDisplayValue<T, M>]);\n\n const hasDisplay = mappingResult.filter((x) => Boolean(x[3]));\n const needsDisplay = mappingResult.filter((x) => !x[3]);\n let obs: Observable<SourceSelectDisplayValue<T, M>[]>;\n\n if (needsDisplay.length > 0) {\n // Go get the display value.\n const displayValuesObs = this.displayForValue(needsDisplay.map((x) => x[2]));\n\n obs = displayValuesObs.pipe(\n first(),\n map((displayResults) => {\n const displayResultsMapping: [SourceSelectDisplayValue<T, M>, T][] = (displayResults as SourceSelectDisplayValue<T, M>[]).map((x) => [x, x.value]);\n const valueIndexHashMap = new Map(displayResultsMapping.map(([x, hash]) => [hash, x]));\n\n // Update metaMap. No need to push an update notification.\n displayResultsMapping.forEach(([x, hash]) => metaMap.set(hash, x));\n\n // Zip values back together.\n const newDisplayValues = mappingResult.map((x) => x[3] ?? valueIndexHashMap.get(x[1]));\n\n // Return display values.\n return newDisplayValues;\n })\n );\n } else {\n // If all display values are hashed return that.\n obs = of(hasDisplay.map((x) => x[3]));\n }\n\n return obs;\n })\n );\n }\n\n readonly context = loadingStateContext({ obs: this.allOptionGroupsState$ });\n\n ngOnInit(): void {\n const { loadSources } = this;\n\n this._loadSources.next(loadSources?.() || of([]));\n\n if (this.refreshDisplayValues$ != null) {\n this._clearDisplayHashMapSub.subscription = this.refreshDisplayValues$.subscribe(() => this._displayHashMap.next(new Map()));\n }\n\n this._formControlObs.next(this.formControl);\n\n // copy all values from the sources into the values hash map to prevent reloading\n this._cacheMetaSub.subscription = this.valueGroupsFromSourcesState$.subscribe((x) => {\n const hashMap = this._valueMetaHashMap.value;\n x.value.forEach((x) => x.values.forEach((y) => hashMap.set(y.value, y)));\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._cacheMetaSub.destroy();\n this._clearDisplayHashMapSub.destroy();\n this._valueMetaHashMap.complete();\n this._displayHashMap.complete();\n this._formControlObs.complete();\n this._fromOpenSource.complete();\n this._loadSources.complete();\n this.context.destroy();\n }\n\n readonly handleSelectOptions: WorkUsingContext<unknown> = (_, context) => {\n const { openSource } = this;\n const origin = this.buttonElement();\n\n if (openSource && origin) {\n const sourceObs = openSource({ origin });\n context.startWorkingWithObservable(\n sourceObs.pipe(\n first(),\n tap((result: SourceSelectOpenSourceResult<M>) => {\n const valuesToAdd = mergeArrays([result.select, result.options]);\n\n if (valuesToAdd.length) {\n this.addToOpenSourceMap(valuesToAdd);\n }\n\n if (result.set) {\n this.setCurrentValue(result.set.map((x) => this.valueReader(x)));\n } else if (result.select) {\n this.addToCurrentValue(result.select.map((x) => this.valueReader(x)));\n }\n })\n )\n );\n } else {\n context.reject();\n }\n };\n\n private addToOpenSourceMap(input: M[]) {\n const { valueReader } = this;\n const { values: meta, valuesSet: initialValues } = this._fromOpenSource.value;\n\n const newMetaFromInput: SourceSelectValue<T, M>[] = [];\n const valuesSet = new Set(initialValues);\n\n input.forEach((x) => {\n const value = valueReader(x);\n\n if (!valuesSet.has(value)) {\n newMetaFromInput.push({ meta: x, value });\n valuesSet.add(value);\n }\n });\n\n if (newMetaFromInput.length > 0) {\n this._fromOpenSource.next({\n values: [...meta, ...newMetaFromInput],\n valuesSet: valuesSet\n });\n }\n }\n\n private addToCurrentValue(values: T[]) {\n const currentValue = asArray(this.formControl.value);\n const newValueArray = [...currentValue, ...values];\n this.setCurrentValue(newValueArray);\n }\n\n private setCurrentValue(newValueArray: T[]) {\n const value = this.multiple ? newValueArray : lastValue(newValueArray); // pick last value, as the last value added is the newest value.\n this.formControl.setValue(value);\n this.formControl.markAsDirty();\n this.formControl.markAsTouched();\n }\n}\n","<div class=\"dbx-source-select-field\">\n <div class=\"dbx-source-select-field-content\">\n <mat-select class=\"dbx-source-select-field-select\" [id]=\"id\" [formControl]=\"formControl\" [multiple]=\"props.multiple\">\n @for (value of nonGroupedValuesSignal(); track value.value) {\n <mat-option [value]=\"value.value\">\n {{ value.label }}\n </mat-option>\n }\n @for (optionGroup of groupedOptionsSignal(); track optionGroup.label) {\n <mat-optgroup [label]=\"optionGroup.label\">\n @for (value of optionGroup.values; track value.value) {\n <mat-option [value]=\"value.value\">\n {{ value.label }}\n </mat-option>\n }\n </mat-optgroup>\n }\n </mat-select>\n @if (showOpenSourceButton) {\n <dbx-button-spacer></dbx-button-spacer>\n <dbx-action dbxActionValue [dbxActionHandler]=\"handleSelectOptions\" class=\"dbx-source-select-field-button\">\n <dbx-button #button dbxActionButton [fab]=\"true\" [iconOnly]=\"true\" [icon]=\"selectButtonIcon\"></dbx-button>\n </dbx-action>\n }\n </div>\n <dbx-loading class=\"dbx-source-select-field-loading\" [linear]=\"true\" [context]=\"context\"></dbx-loading>\n</div>\n","import { type PrimativeKey } from '@dereekb/util';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig, type DescriptionFieldConfig, type MaterialFormFieldConfig } from '../../field';\nimport { type SourceSelectFieldProps } from './sourceselect.field.component';\n\n// MARK: Text\nexport interface SourceSelectFieldConfig<T extends PrimativeKey = PrimativeKey, M = unknown> extends LabeledFieldConfig, DescriptionFieldConfig, MaterialFormFieldConfig, SourceSelectFieldProps<T, M> {}\n\nexport function sourceSelectField<T extends PrimativeKey = PrimativeKey, M = unknown>(config: SourceSelectFieldConfig<T, M>): FormlyFieldConfig {\n const { key, materialFormField } = config;\n return formlyField({\n key,\n type: 'sourceselectfield',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n ...config,\n autocomplete: false\n })\n });\n}\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxFormSourceSelectFieldComponent } from './sourceselect.field.component';\n\n@NgModule({\n imports: [\n DbxFormSourceSelectFieldComponent,\n FormlyModule.forChild({\n types: [{ name: 'sourceselectfield', component: DbxFormSourceSelectFieldComponent, wrappers: ['form-field'] }]\n })\n ],\n exports: [DbxFormSourceSelectFieldComponent]\n})\nexport class DbxFormFormlySourceSelectModule {}\n","import { asObservable, type ObservableOrValue } from '@dereekb/rxjs';\nimport { convertMaybeToArray, firstValue, type LabeledValue, type Maybe } from '@dereekb/util';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { map } from 'rxjs';\nimport { type DescriptionFieldConfig, formlyField, type FormlyValueParser, type LabeledFieldConfig, type MaterialFormFieldConfig, propsAndConfigForFieldConfig } from '../field';\n\nexport interface ValueSelectionOptionWithValue<T> extends LabeledValue<T> {\n disabled?: boolean;\n}\n\nexport interface ValueSelectionOptionClear {\n label?: string;\n clear: true;\n}\n\nexport type ValueSelectionOption<T> = ValueSelectionOptionWithValue<T> | ValueSelectionOptionClear;\n\nexport interface ValueSelectionFieldConfig<T> extends LabeledFieldConfig, DescriptionFieldConfig, MaterialFormFieldConfig {\n /**\n * Whether or not to use the native select.\n *\n * Be sure to import FormlyMatNativeSelectModule.\n */\n readonly native?: boolean;\n /**\n * Whether or not to add a clear option to the input values.\n */\n readonly addClearOption?: string | boolean;\n /**\n * Values to select from.\n */\n readonly options: ObservableOrValue<ValueSelectionOption<T>[]>;\n /**\n * Allow selecting multiple values and return an array.\n */\n readonly multiple?: boolean;\n /**\n * The select all option configuration.\n */\n readonly selectAllOption?: true | string;\n}\n\nexport function valueSelectionField<T>(config: ValueSelectionFieldConfig<T>): FormlyFieldConfig {\n const { key, native = false, addClearOption = false, selectAllOption: inputSelectAllOption, options: inputOptions, materialFormField } = config;\n let selectAllOptionConfig: Maybe<{ selectAllOption: string }>;\n\n if (inputSelectAllOption) {\n selectAllOptionConfig = {\n selectAllOption: typeof inputSelectAllOption === 'boolean' ? 'Select All' : (inputSelectAllOption as string)\n };\n }\n\n const options = addClearOption ? asObservable(inputOptions).pipe(map(addValueSelectionOptionFunction(typeof addClearOption === 'string' ? addClearOption : undefined))) : inputOptions;\n let parsers: FormlyValueParser[] | undefined = undefined;\n\n parsers = config.multiple !== true ? [firstValue] : [convertMaybeToArray];\n\n return formlyField({\n key,\n type: native ? 'native-select' : 'select',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n options,\n multiple: config.multiple,\n ...selectAllOptionConfig\n }),\n parsers\n });\n}\n\nexport function addValueSelectionOptionFunction<T>(label?: string | undefined): (options: ValueSelectionOption<T>[]) => ValueSelectionOption<T>[] {\n return (options: ValueSelectionOption<T>[]) => {\n const hasClear = options.findIndex((x) => (x as ValueSelectionOptionClear).clear) !== -1;\n\n if (hasClear) {\n return options;\n } else {\n return [{ label, clear: true }, ...options];\n }\n };\n}\n","import { type FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { CompactContextStore, mapCompactModeObs } from '@dereekb/dbx-web';\nimport { ChangeDetectionStrategy, Component, type OnDestroy, type OnInit, inject } from '@angular/core';\nimport { type FieldTypeConfig, type FormlyFieldProps } from '@ngx-formly/core';\nimport { FieldType } from '@ngx-formly/material';\nimport { Editor, NgxEditorModule } from '@bobbyquantum/ngx-editor';\nimport { debounceTime, filter } from 'rxjs';\nimport { filterMaybe, SubscriptionObject } from '@dereekb/rxjs';\nimport { type Maybe } from '@dereekb/util';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { NgClass } from '@angular/common';\n\nexport type TextEditorComponentFieldProps = FormlyFieldProps;\n\n@Component({\n template: `\n <div class=\"dbx-texteditor-field\" [ngClass]=\"compactClassSignal()\" [formGroup]=\"formGroup\">\n @if (label) {\n <span class=\"dbx-label\">{{ label }}</span>\n }\n <div class=\"dbx-texteditor-field-input\">\n <ngx-editor [editor]=\"editor\" outputFormat=\"html\" [placeholder]=\"placeholder\" [formControlName]=\"formGroupName\"></ngx-editor>\n </div>\n <div class=\"dbx-texteditor-field-menu\">\n <ngx-editor-menu [editor]=\"editor\"></ngx-editor-menu>\n </div>\n @if (description) {\n <div class=\"dbx-form-description\">{{ description }}</div>\n }\n </div>\n `,\n imports: [NgClass, NgxEditorModule, FormsModule, ReactiveFormsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxTextEditorFieldComponent<T extends TextEditorComponentFieldProps = TextEditorComponentFieldProps> extends FieldType<FieldTypeConfig<T>> implements OnInit, OnDestroy {\n private readonly _compactContextStore = inject(CompactContextStore, { optional: true });\n\n private _editor!: Editor;\n private readonly _sub = new SubscriptionObject();\n\n readonly compactClass$ = mapCompactModeObs(this._compactContextStore?.mode$, {\n compact: 'dbx-texteditor-field-compact'\n }).pipe(filterMaybe());\n\n readonly compactClassSignal = toSignal(this.compactClass$, { initialValue: '' });\n\n get formGroupName(): string {\n return this.field.key as string;\n }\n\n get formGroup(): FormGroup {\n return this.form as FormGroup;\n }\n\n get editor(): Editor {\n return this._editor;\n }\n\n get label(): Maybe<string> {\n return this.field.props?.label;\n }\n\n get description(): Maybe<string> {\n return this.props.description;\n }\n\n ngOnInit(): void {\n this._editor = new Editor({});\n\n // TODO: Sync disabled state too\n\n // TODO: Sync the value periodically while not focused too\n\n // Watch for value changes every second and update the pristine level.\n this._sub.subscription = this.editor.valueChanges\n .pipe(\n debounceTime(50),\n filter(() => this.editor.view.hasFocus())\n )\n .subscribe(() => {\n this.formControl.updateValueAndValidity();\n this.formControl.markAsDirty();\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n\n if (this._editor != null) {\n this._editor.destroy();\n }\n\n this._sub.destroy();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxTextEditorFieldComponent } from './texteditor.field.component';\n\nconst importsAndExports = [DbxTextEditorFieldComponent];\n\n@NgModule({\n imports: [\n ...importsAndExports,\n FormlyModule.forChild({\n types: [{ name: 'texteditor', component: DbxTextEditorFieldComponent }]\n })\n ],\n exports: importsAndExports\n})\nexport class DbxFormFormlyTextEditorFieldModule {}\n","import { type DescriptionFieldConfig, type MaterialFormFieldConfig, type LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig } from './../field';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type TextFieldLengthConfig } from '../value/text/text.field';\n\nexport interface TextEditorFieldConfig extends LabeledFieldConfig, DescriptionFieldConfig, TextFieldLengthConfig, MaterialFormFieldConfig {}\n\nexport function textEditorField(config: TextEditorFieldConfig): FormlyFieldConfig {\n const { key, minLength, maxLength, materialFormField } = config;\n const fieldConfig: FormlyFieldConfig = formlyField({\n key,\n type: 'texteditor',\n defaultValue: '', // Set to always get a string as a result.\n modelOptions: {\n // https://formly.dev/examples/validation/async-validation-update-on\n // Set to trigger value update on blurs with the form. However, the value is set internally too.\n updateOn: 'blur'\n },\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n minLength,\n maxLength\n })\n });\n\n return fieldConfig;\n}\n","import { type CdkDragDrop, DragDropModule } from '@angular/cdk/drag-drop';\nimport { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { asDecisionFunction, cachedGetter, type DecisionFunction, type FactoryWithRequiredInput, type Getter, getValueFromGetter, type IndexRef, makeGetter, type Maybe } from '@dereekb/util';\nimport { type FieldArrayTypeConfig, FieldArrayType, type FormlyFieldConfig, type FormlyFieldProps, FormlyModule } from '@ngx-formly/core';\nimport { DbxBarDirective, DbxButtonComponent, DbxButtonSpacerDirective, DbxSubSectionComponent } from '@dereekb/dbx-web';\nimport { MatIconModule } from '@angular/material/icon';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\n\nexport interface DbxFormRepeatArrayPair<T = unknown> extends IndexRef {\n readonly value?: T | undefined;\n}\n\nexport interface DbxFormRepeatArrayFieldConfigPair<T = unknown> extends Partial<DbxFormRepeatArrayPair<T>> {\n readonly fieldConfig: FormlyFieldConfig;\n}\n\nexport type DbxFormRepeatArrayAddTemplateFunction<T> = FactoryWithRequiredInput<Partial<Maybe<T>>, number>;\n\nexport interface DbxFormRepeatArrayConfig<T = unknown> extends Pick<FormlyFieldProps, 'maxLength' | 'label' | 'description'> {\n readonly labelForField?: string | FactoryWithRequiredInput<string, DbxFormRepeatArrayFieldConfigPair<T>>;\n /**\n * Text for the add button.\n */\n readonly addText?: string;\n /**\n * Optional template function to create a new template when using the add button.\n */\n readonly addTemplate?: DbxFormRepeatArrayAddTemplateFunction<T>;\n /**\n * Text for the duplicate button.\n */\n readonly duplicateText?: string;\n /**\n * Text for the remove button.\n */\n readonly removeText?: string;\n /**\n * Whethe or not to disable rearranging items.\n *\n * False by default.\n */\n readonly disableRearrange?: boolean;\n /**\n * Wether or not to show the add button.\n *\n * True by default.\n */\n readonly allowAdd?: boolean;\n /**\n * Whether or not to allow duplicateing items. Can optionally pass a decision function that decides whether or not a specific item can be removed.\n */\n readonly allowDuplicate?: boolean | DecisionFunction<DbxFormRepeatArrayPair<T>>;\n /**\n * Whether or not to allow removing items. Can optionally pass a decision function that decides whether or not a specific item can be removed.\n */\n readonly allowRemove?: boolean | DecisionFunction<DbxFormRepeatArrayPair<T>>;\n /**\n * Adds the duplicate to the end of the values\n */\n readonly addDuplicateToEnd?: boolean;\n}\n\n@Component({\n template: `\n <div class=\"dbx-form-repeat-array\">\n <dbx-subsection [header]=\"label\" [hint]=\"description\">\n <!-- Fields -->\n <div class=\"dbx-form-repeat-array-fields\" cdkDropList [cdkDropListDisabled]=\"disableRearrange\" (cdkDropListDropped)=\"drop($event)\">\n @for (field of field.fieldGroup; track field.key; let i = $index; let last = $last) {\n <div class=\"dbx-form-repeat-array-field\" cdkDrag cdkDragLockAxis=\"y\">\n <div class=\"dbx-form-repeat-array-drag-placeholder\" *cdkDragPlaceholder></div>\n <dbx-bar class=\"dbx-form-repeat-array-bar dbx-bar-fixed-height\">\n @if (!disableRearrange) {\n <button class=\"dbx-form-repeat-array-drag-button\" cdkDragHandle mat-stroked-button><mat-icon>drag_handle</mat-icon></button>\n <dbx-button-spacer></dbx-button-spacer>\n }\n <h4>\n <span class=\"repeat-array-number\">{{ i + 1 }}</span>\n <span>{{ labelForItem(field, i) }}</span>\n </h4>\n <span class=\"dbx-spacer\"></span>\n @if (allowDuplicate(i)) {\n <dbx-button [stroked]=\"true\" [text]=\"duplicateText\" (buttonClick)=\"duplicate(i)\"></dbx-button>\n <dbx-button-spacer></dbx-button-spacer>\n }\n @if (allowRemove(i)) {\n <dbx-button color=\"warn\" [stroked]=\"true\" [text]=\"removeText\" (buttonClick)=\"remove(i)\"></dbx-button>\n }\n </dbx-bar>\n <formly-field class=\"dbx-form-repeat-array-field-content\" [field]=\"field\"></formly-field>\n </div>\n }\n </div>\n <!-- Add Button -->\n <div class=\"dbx-form-repeat-array-footer\">\n @if (allowAdd) {\n <dbx-button [raised]=\"true\" [disabled]=\"addItemDisabled\" [text]=\"addText\" (buttonClick)=\"addClicked()\"></dbx-button>\n }\n </div>\n </dbx-subsection>\n </div>\n `,\n imports: [DbxSubSectionComponent, DbxBarDirective, DbxButtonComponent, FormlyModule, DragDropModule, MatIconModule, DbxButtonSpacerDirective, MatFormFieldModule, FormsModule, ReactiveFormsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormRepeatArrayTypeComponent<T = unknown> extends FieldArrayType<FieldArrayTypeConfig<DbxFormRepeatArrayConfig>> {\n private readonly _labelForField = cachedGetter(() => {\n const input = this.repeatArrayField.labelForField;\n\n if (typeof input === 'function') {\n return input;\n } else {\n return makeGetter(input ?? '');\n }\n });\n\n private readonly _allowRemove: Getter<DecisionFunction<DbxFormRepeatArrayPair<T>>> = cachedGetter(() => {\n return asDecisionFunction(this.field.props.allowRemove, true);\n });\n\n private readonly _allowDuplicate: Getter<DecisionFunction<DbxFormRepeatArrayPair<T>>> = cachedGetter(() => {\n return asDecisionFunction(this.field.props.allowDuplicate || false, false);\n });\n\n get repeatArrayField(): DbxFormRepeatArrayConfig {\n return this.field.props;\n }\n\n get label(): string {\n return this.field.props.label ?? (this.field.key as string);\n }\n\n get description(): Maybe<string> {\n return this.field.props.description;\n }\n\n get duplicateText(): string {\n return this.repeatArrayField.addText ?? 'Duplicate';\n }\n\n get addText(): string {\n return this.repeatArrayField.addText ?? 'Add';\n }\n\n get addTemplate() {\n return this.repeatArrayField.addTemplate;\n }\n\n get removeText(): string {\n return this.repeatArrayField.removeText ?? 'Remove';\n }\n\n get max(): Maybe<number> {\n return this.field.props.maxLength;\n }\n\n get count(): number {\n return this.field.fieldGroup?.length ?? 0;\n }\n\n get disableRearrange(): boolean {\n return Boolean(this.field.props.disableRearrange);\n }\n\n get allowAdd(): boolean {\n return this.field.props.allowAdd ?? true;\n }\n\n get addDuplicateToEnd(): boolean {\n return this.field.props.addDuplicateToEnd ?? false;\n }\n\n allowRemove(i: number) {\n const array: unknown[] = this.model;\n const value = array[i] as T | undefined;\n return this._allowRemove()({\n i,\n value\n });\n }\n\n allowDuplicate(i: number) {\n const array: unknown[] = this.model;\n const value = array[i] as T;\n return this._allowDuplicate()({\n i,\n value\n });\n }\n\n get addItemDisabled() {\n return !this.canAddItem;\n }\n\n get canAddItem(): boolean {\n const max = this.max;\n\n if (max == null) {\n return true;\n } else {\n return this.count < max;\n }\n }\n\n /**\n * Moves the target index up one value.\n *\n * @param index\n */\n moveUp(index: number) {\n if (index === 0) {\n return;\n }\n\n this.swapIndexes(index, index - 1);\n }\n\n moveDown(index: number) {\n this.swapIndexes(index, index + 1);\n }\n\n addClicked() {\n const addTemplate = this.addTemplate;\n const template = addTemplate ? addTemplate(this.count) : undefined;\n this.add(undefined, template);\n }\n\n duplicate(index: number) {\n const array: unknown[] = this.model;\n const targetValue = array[index];\n\n if (!targetValue) {\n return;\n }\n\n const targetIndex = this.addDuplicateToEnd ? array.length : index;\n this.add(targetIndex, targetValue, { markAsDirty: true });\n }\n\n swapIndexes(currentIndex: number, targetIndex: number) {\n const array: unknown[] = this.model;\n const targetValue = array[currentIndex];\n\n if (!targetValue) {\n return;\n }\n\n this.remove(currentIndex);\n this.add(targetIndex, targetValue, { markAsDirty: true });\n this.formControl.markAsTouched();\n }\n\n drop(event: CdkDragDrop<unknown>) {\n this.swapIndexes(event.previousIndex, event.currentIndex);\n }\n\n labelForItem(fieldConfig: FormlyFieldConfig, i: number): string {\n const array: unknown[] = this.model;\n const value = array[i] as T;\n\n return getValueFromGetter(this._labelForField(), {\n i,\n value,\n fieldConfig\n });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxFormRepeatArrayTypeComponent } from './array.field.component';\n\nconst importsAndExports = [DbxFormRepeatArrayTypeComponent];\n\n@NgModule({\n imports: [\n ...importsAndExports,\n FormlyModule.forChild({\n types: [{ name: 'repeatarray', component: DbxFormRepeatArrayTypeComponent }]\n })\n ],\n exports: importsAndExports\n})\nexport class DbxFormFormlyArrayFieldModule {}\n","import { type ArrayOrValue, asArray } from '@dereekb/util';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type FieldConfig, formlyField, propsAndConfigForFieldConfig } from '../../field';\nimport { type DbxFormRepeatArrayConfig } from './array.field.component';\n\nexport interface RepeatArrayFieldConfig<T = unknown> extends DbxFormRepeatArrayConfig<T>, FieldConfig {\n repeatFieldGroup: ArrayOrValue<FormlyFieldConfig>;\n}\n\nexport function repeatArrayField<T = unknown>(config: RepeatArrayFieldConfig<T>) {\n const { key, label, description, repeatFieldGroup, maxLength, addText, addTemplate, removeText, duplicateText, labelForField, disableRearrange, allowAdd, allowRemove, allowDuplicate, addDuplicateToEnd } = config;\n\n return formlyField({\n key,\n type: 'repeatarray',\n ...propsAndConfigForFieldConfig(config, {\n label,\n description,\n maxLength,\n labelForField,\n addText,\n addTemplate,\n removeText,\n duplicateText,\n disableRearrange,\n allowAdd,\n allowRemove,\n allowDuplicate,\n addDuplicateToEnd\n }),\n fieldArray: {\n fieldGroup: asArray(repeatFieldGroup)\n }\n });\n}\n","import { NgModule } from '@angular/core';\nimport { FormlyMaterialModule } from '@ngx-formly/material';\nimport { FormlyMatCheckboxModule } from '@ngx-formly/material/checkbox';\nimport { FormlyMatToggleModule } from '@ngx-formly/material/toggle';\n\nconst importsAndExports = [FormlyMaterialModule, FormlyMatCheckboxModule, FormlyMatToggleModule];\n\n@NgModule({\n imports: importsAndExports,\n exports: importsAndExports\n})\nexport class DbxFormFormlyBooleanFieldModule {}\n","import { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type LabeledFieldConfig, formlyField, type DefaultValueFieldConfig, type DescriptionFieldConfig, propsAndConfigForFieldConfig, type MaterialFormFieldConfig } from '../../field';\nimport { AUTO_TOUCH_WRAPPER_KEY, STYLE_WRAPPER_KEY } from '../../wrapper/wrapper.key';\n\nexport interface ToggleFieldConfig extends Omit<LabeledFieldConfig, 'placeholder' | 'autocomplete'>, DefaultValueFieldConfig<boolean>, DescriptionFieldConfig, MaterialFormFieldConfig {}\n\nexport function toggleField(config: ToggleFieldConfig): FormlyFieldConfig {\n const { key, defaultValue, materialFormField } = config;\n\n const classGetter = 'dbx-mat-form-toggle-field-wrapper';\n return formlyField({\n key,\n type: 'toggle',\n wrappers: [AUTO_TOUCH_WRAPPER_KEY, STYLE_WRAPPER_KEY, 'form-field'], // NOTE: Must specify form-field if other wrapper specified, otherwise it will not be used.\n defaultValue: defaultValue ?? false,\n ...propsAndConfigForFieldConfig(config, {\n classGetter,\n ...materialFormField\n })\n });\n}\n\nexport interface CheckboxFieldConfig extends LabeledFieldConfig, DefaultValueFieldConfig<boolean>, DescriptionFieldConfig, MaterialFormFieldConfig {}\n\nexport function checkboxField(config: CheckboxFieldConfig): FormlyFieldConfig {\n const { key, defaultValue, materialFormField } = config;\n\n const classGetter = 'dbx-mat-form-checkbox-field-wrapper';\n return formlyField({\n key,\n type: 'checkbox',\n wrappers: [STYLE_WRAPPER_KEY, 'form-field'],\n defaultValue: defaultValue ?? false,\n ...propsAndConfigForFieldConfig(config, {\n classGetter,\n ...materialFormField\n })\n });\n}\n\n/*\nexport function acceptTermsField({ key = 'accept', label = 'Accept Terms', description = 'In order to proceed, please accept terms', required = true }\n : Partial<FieldConfigWithDescription>): FormlyFieldConfig {\n return {\n key,\n type: 'checkbox',\n props: {\n label,\n description,\n pattern: 'true',\n required\n },\n validation: {\n messages: {\n pattern: 'Please accept the terms',\n },\n },\n } as FormlyFieldConfig;\n}\n*/\n","import { type Getter, type GetterOrValue, type LogicalDate, type Maybe, type ReadableTimeString, asGetter, getValueFromGetter } from '@dereekb/util';\n\n/**\n * A pair of either a logical date or a time string.\n */\nexport interface DateTimePresetValue {\n /**\n * Logical date to provide.\n */\n logicalDate?: Maybe<LogicalDate>;\n /**\n * Time string value. Ignored if logical date is provided.\n */\n timeString?: Maybe<ReadableTimeString>;\n}\n\n/**\n * Configuration for a DateTimePreset\n */\nexport interface DateTimePresetConfiguration {\n /**\n * Label\n */\n label: GetterOrValue<string>;\n /**\n * Whether or not the value should be retrieved each time or can be cached.\n *\n * Only relevant if a getter is used.\n */\n dynamic?: boolean;\n /**\n * Logical time to provide.\n */\n logicalDate?: Maybe<GetterOrValue<LogicalDate>>;\n /**\n * Time string to return. Ignored if logicalDate is provided.\n */\n timeString?: Maybe<GetterOrValue<ReadableTimeString>>;\n}\n\n/**\n * A label and value getter.\n */\nexport interface DateTimePreset {\n /**\n * Getter for the label\n */\n label: Getter<string>;\n /**\n * Getter for the value\n */\n value: Getter<DateTimePresetValue>;\n}\n\n/**\n * Creates a DateTimePreset from a DateTimePresetConfiguration\n *\n * @param config\n */\nexport function dateTimePreset(config: DateTimePresetConfiguration): DateTimePreset {\n let value: Getter<DateTimePresetValue>;\n\n if (config.logicalDate) {\n value = () => ({ logicalDate: getValueFromGetter(config.logicalDate) });\n } else if (config.timeString) {\n value = () => ({ timeString: getValueFromGetter(config.timeString) });\n } else {\n value = () => ({ logicalDate: 'now' });\n }\n\n if (!config.dynamic) {\n value = asGetter(value()); // get/calculate the value now and return it if not dynamic\n }\n\n return {\n label: asGetter(config.label),\n value\n };\n}\n","import { BehaviorSubject } from 'rxjs';\nimport { type DateTimePresetConfiguration } from './datetime';\nimport { Injectable, InjectionToken, inject } from '@angular/core';\nimport { type Maybe } from '@dereekb/util';\n\nexport const DBX_DATE_TIME_FIELD_MENU_PRESETS_TOKEN = new InjectionToken('DbxDateTimeFieldMenuPresetsServicePresets');\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DbxDateTimeFieldMenuPresetsService {\n private readonly _configurations = new BehaviorSubject<DateTimePresetConfiguration[]>(inject<Maybe<DateTimePresetConfiguration[]>>(DBX_DATE_TIME_FIELD_MENU_PRESETS_TOKEN, { optional: true }) ?? []);\n\n readonly configurations$ = this._configurations.asObservable();\n\n get configurations(): DateTimePresetConfiguration[] {\n return this._configurations.value;\n }\n\n set configurations(configurations: DateTimePresetConfiguration[]) {\n this._configurations.next(configurations);\n }\n}\n","import { type DateTimezoneUtcNormalInstance, parseISO8601DayStringToDate, toJsDate, formatToISO8601DayStringForSystem, formatToISO8601DateString, isSameDateHoursAndMinutes, type DateRangeWithDateOrStringValue, parseJsDateString } from '@dereekb/date';\nimport { type ISO8601DayString, type Maybe, dateFromMinuteOfDay, dateToMinuteOfDay } from '@dereekb/util';\n\nexport enum DbxDateTimeValueMode {\n /**\n * Value is returned/parsed as a Date.\n */\n DATE = 0,\n /**\n * Value is returned/parsed as an ISO8601DateString\n */\n DATE_STRING = 1,\n /**\n * Value is returned/parsed as an ISO8601DayString, relative to the current timezone.\n */\n DAY_STRING = 2,\n /**\n * Value is returned/parsed as a Unix timestamp, relative to the current timezone.\n */\n UNIX_TIMESTAMP = 3,\n /**\n * Value is returned/parsed as a minute of the day, relative to the current timezone.\n */\n MINUTE_OF_DAY = 4,\n /**\n * Value is returned/parsed as a minute of the day, relative to the system timezone.\n */\n SYSTEM_MINUTE_OF_DAY = 5\n}\n\nexport function dbxDateTimeInputValueParseFactory(mode: DbxDateTimeValueMode, timezoneInstance: Maybe<DateTimezoneUtcNormalInstance>): (date: Maybe<Date | string | number>) => Maybe<Date> {\n let factory: (date: Maybe<Date | string | number>) => Maybe<Date>;\n let useTimezoneInstance = true;\n\n switch (mode) {\n case DbxDateTimeValueMode.DAY_STRING:\n factory = (x) => {\n let result: Maybe<Date>;\n\n switch (typeof x) {\n case 'string':\n result = parseISO8601DayStringToDate(x);\n break;\n case 'number':\n result = new Date(x);\n break;\n default:\n result = x;\n break;\n }\n\n return result;\n };\n useTimezoneInstance = false; // day strings do not use timezones\n break;\n case DbxDateTimeValueMode.SYSTEM_MINUTE_OF_DAY:\n case DbxDateTimeValueMode.MINUTE_OF_DAY:\n factory = (x) => {\n let result: Maybe<Date>;\n\n switch (typeof x) {\n case 'number':\n result = dateFromMinuteOfDay(x);\n break;\n case 'string':\n result = parseJsDateString(x);\n break;\n default:\n result = x;\n break;\n }\n\n return result;\n };\n\n if (mode === DbxDateTimeValueMode.SYSTEM_MINUTE_OF_DAY) {\n useTimezoneInstance = false;\n }\n\n break;\n case DbxDateTimeValueMode.UNIX_TIMESTAMP:\n case DbxDateTimeValueMode.DATE_STRING:\n case DbxDateTimeValueMode.DATE:\n default:\n factory = (x) => (x != null ? toJsDate(x as Date | string | number) : x);\n break;\n }\n\n if (timezoneInstance && useTimezoneInstance) {\n const originalFactory = factory;\n\n factory = (input) => {\n const date = originalFactory(input);\n const result = date ? timezoneInstance.systemDateToTargetDate(date) : date;\n return result;\n };\n }\n\n return factory;\n}\n\nexport function dbxDateTimeOutputValueFactory(mode: DbxDateTimeValueMode, timezoneInstance: Maybe<DateTimezoneUtcNormalInstance>): (date: Maybe<Date>) => Maybe<Date | string | number> {\n let factory: (date: Maybe<Date>) => Maybe<Date | string | number>;\n let useTimezoneInstance = true;\n\n switch (mode) {\n case DbxDateTimeValueMode.DAY_STRING:\n factory = (x) => (x != null ? formatToISO8601DayStringForSystem(x) : x);\n useTimezoneInstance = false; // day strings do not use timezones\n break;\n case DbxDateTimeValueMode.DATE_STRING:\n factory = (x) => (x != null ? formatToISO8601DateString(x) : x);\n break;\n case DbxDateTimeValueMode.UNIX_TIMESTAMP:\n factory = (x) => (x != null ? x.getTime() : x);\n break;\n case DbxDateTimeValueMode.SYSTEM_MINUTE_OF_DAY:\n case DbxDateTimeValueMode.MINUTE_OF_DAY:\n factory = (x) => (x != null ? dateToMinuteOfDay(x) : x);\n\n if (mode === DbxDateTimeValueMode.SYSTEM_MINUTE_OF_DAY) {\n useTimezoneInstance = false;\n }\n break;\n case DbxDateTimeValueMode.DATE:\n default:\n factory = (x) => x;\n break;\n }\n\n if (timezoneInstance && useTimezoneInstance) {\n const originalFactory = factory;\n\n factory = (input) => {\n const date = input ? timezoneInstance.targetDateToSystemDate(input) : input;\n const result = originalFactory(date);\n return result;\n };\n }\n\n return factory;\n}\n\nexport function dbxDateTimeIsSameDateTimeFieldValue(a: Maybe<Date | ISO8601DayString | number>, b: Maybe<Date | ISO8601DayString | number>) {\n const typeofA = typeof a;\n return a && b ? (typeofA === 'string' || typeofA === 'number' ? a === b : isSameDateHoursAndMinutes(a as Date, b as Date)) : a == b;\n}\n\nexport function dbxDateRangeIsSameDateRangeFieldValue(a: Maybe<DateRangeWithDateOrStringValue>, b: Maybe<DateRangeWithDateOrStringValue>) {\n return a && b ? dbxDateTimeIsSameDateTimeFieldValue(a.start, b.start) && dbxDateTimeIsSameDateTimeFieldValue(a.end, b.end) : a == b;\n}\n","import { type Maybe, type ReadableTimeString, type ArrayOrValue, type ISO8601DateString, asArray, filterMaybeArrayValues, type DecisionFunction, type Milliseconds, type TimezoneString, type LogicalDate, type DateOrDayString, isISO8601DayStringStart, type MapFunction, mapIdentityFunction, type MinuteOfDay, type UnixDateTimeMillisecondsNumber, type ISO8601DayString } from '@dereekb/util';\nimport { dateFromLogicalDate, type DateTimeMinuteConfig, DateTimeMinuteInstance, guessCurrentTimezone, readableTimeStringToDate, toLocalReadableTimeString, utcDayForDate, safeToJsDate, findMinDate, findMaxDate, isSameDateHoursAndMinutes, getTimezoneAbbreviation, isSameDateDay, dateTimezoneUtcNormal, type DateTimezoneUtcNormalInstance, toJsDayDate, isSameDate, dateTimeMinuteWholeDayDecisionFunction, dateTimeMinuteDecisionFunction } from '@dereekb/date';\nimport { switchMap, shareReplay, map, startWith, tap, first, distinctUntilChanged, debounceTime, throttleTime, BehaviorSubject, type Observable, combineLatest, Subject, merge, interval, of, combineLatestWith, filter, skip } from 'rxjs';\nimport { ChangeDetectionStrategy, Component, type OnDestroy, type OnInit, inject } from '@angular/core';\nimport { type AbstractControl, FormControl, Validators, type FormGroup, type ValidationErrors, ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport { FieldType } from '@ngx-formly/material';\nimport { type FieldTypeConfig, type FormlyFieldProps } from '@ngx-formly/core';\nimport { type MatDatepickerInputEvent, MatDatepickerModule } from '@angular/material/datepicker';\nimport { addMinutes, startOfDay, addDays } from 'date-fns';\nimport { asObservableFromGetter, filterMaybe, type ObservableOrValueGetter, SubscriptionObject, switchMapMaybeDefault, switchMapFilterMaybe, skipAllInitialMaybe } from '@dereekb/rxjs';\nimport { type DateTimePreset, type DateTimePresetConfiguration, dateTimePreset } from './datetime';\nimport { DbxDateTimeFieldMenuPresetsService } from './datetime.field.service';\nimport { DbxDateTimeValueMode, dbxDateTimeInputValueParseFactory, dbxDateTimeIsSameDateTimeFieldValue, dbxDateTimeOutputValueFactory } from './date.value';\nimport { type FormControlPath, streamValueFromControl } from '../../../../form/form.angular.util';\nimport { toggleDisableFormControl } from '../../../../form/form';\nimport { type ErrorStateMatcher } from '@angular/material/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\nimport { DatePipe, NgTemplateOutlet } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatError, MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { DateDistancePipe, GetValuePipe, TimeDistancePipe } from '@dereekb/dbx-core';\nimport { MatDividerModule } from '@angular/material/divider';\n\nexport enum DbxDateTimeFieldTimeMode {\n /**\n * Time is required.\n */\n REQUIRED = 'required',\n /**\n * Time is optional.\n */\n OPTIONAL = 'optional',\n /**\n * Time is permenantly off.\n */\n NONE = 'none'\n}\n\nexport type DbxDateTimePickerConfiguration = Omit<DateTimeMinuteConfig, 'date'>;\n\nexport type DbxDateTimeFieldSyncType = 'before' | 'after';\n\nexport interface DbxDateTimeFieldSyncField {\n /**\n * Field key/path to sync with/against.\n */\n readonly syncWith: string;\n /**\n * How to sync against the other field.\n */\n readonly syncType: DbxDateTimeFieldSyncType;\n}\n\n/**\n * Configuration for the time date field that has a reference and optional map function to map the value.\n */\nexport interface DbxDateTimeFieldTimeDateConfig<I = unknown> {\n readonly path: FormControlPath;\n readonly mapValue?: MapFunction<I, Maybe<DateOrDayString>>;\n}\n\nexport function isDbxDateTimeFieldTimeDateConfig(input: unknown): input is DbxDateTimeFieldTimeDateConfig {\n return input != null && typeof input === 'object' && typeof (input as DbxDateTimeFieldTimeDateConfig).path === 'string';\n}\n\nexport interface DbxDateTimeFieldProps extends FormlyFieldProps {\n /**\n * Custom date label.\n *\n * Defaults to Date\n */\n readonly dateLabel?: string;\n\n /**\n * Custom time label.\n *\n * Defaults to Time\n */\n readonly timeLabel?: string;\n\n /**\n * Label to use for the date hint for \"All Day\". Defaults to \"All Day\".\n */\n readonly allDayLabel?: string;\n\n /**\n * Label to use for the date hint for \"At\". Defaults to \"At\".\n */\n readonly atTimeLabel?: string;\n\n /**\n * Value mode.\n *\n * Defaults to DATE\n */\n readonly valueMode?: DbxDateTimeValueMode;\n\n /**\n * Whether or not the date is hidden, and automatically uses today/input date.\n */\n readonly timeOnly?: boolean;\n\n /**\n * Only applicable when timeOnly is false.\n *\n * Whether or not to always show the date input even when there is only a single date that can be selected.\n *\n * Defaults to true.\n */\n readonly alwaysShowDateInput?: boolean;\n\n /**\n * Whether or not to autofill the date when time is picked.\n *\n * Defaults to false.\n */\n readonly autofillDateWhenTimeIsPicked?: boolean;\n\n /**\n * Whether or not the time can be added/removed optionally.\n *\n * This is ignored if timeOnly is specified.\n */\n readonly timeMode?: DbxDateTimeFieldTimeMode;\n\n /**\n * Other form control for enabling/disabling whether or not it is a full day.\n *\n * This field is only used if time is optional.\n *\n * When time is off, the field is set to true.\n */\n readonly fullDayFieldName?: string;\n\n /**\n * Whether or not to pass the date value as a UTC date, or a date in the current timezone.\n */\n readonly fullDayInUTC?: boolean;\n\n /**\n * Whether or not ot hide the date hint info content.\n *\n * False by default\n */\n readonly hideDateHint?: boolean;\n\n /**\n * Whether or not to hide the date/calendar picker.\n */\n readonly hideDatePicker?: boolean;\n\n /**\n * Custom picker configuration\n */\n readonly pickerConfig?: ObservableOrValueGetter<DbxDateTimePickerConfiguration>;\n\n /**\n * Used for syncing with one or more fields with a Date value.\n */\n readonly getSyncFieldsObs?: () => Observable<ArrayOrValue<DbxDateTimeFieldSyncField>>;\n\n /**\n * (Optional) The input timezone to default to.\n *\n * Ignored if fullDayInUTC is true.\n */\n readonly timezone?: Maybe<ObservableOrValueGetter<Maybe<TimezoneString>>>;\n\n /**\n * (Optional) The date to apply the time to.\n *\n * The timezone abbrviation will also use this date when using the time-only mode.\n */\n readonly timeDate?: Maybe<ObservableOrValueGetter<Maybe<DbxDateTimeFieldTimeDateConfig | FormControlPath | DateOrDayString>>>;\n\n /**\n * Whether or not to display the timezone. True by default.\n */\n readonly showTimezone?: Maybe<boolean>;\n\n /**\n * Custom presets to show in the dropdown.\n */\n readonly presets?: ObservableOrValueGetter<DateTimePresetConfiguration[]>;\n\n /**\n * The time in ms to prevent output from going out when the input value changes.\n */\n readonly inputOutputDebounceTime?: Milliseconds;\n\n /**\n * Whether or not to display the clear date button. True by default.\n */\n readonly showClearButton?: Maybe<boolean>;\n\n /**\n * The number of minutes to add/subtract when using the arrow keys.\n */\n readonly minuteStep?: Maybe<number>;\n}\n\nexport interface DbxDateTimeFieldSyncParsedField extends Pick<DbxDateTimeFieldSyncField, 'syncType'> {\n readonly control: AbstractControl<Maybe<Date | ISO8601DateString>>;\n}\n\nexport function syncConfigValueObs(parseConfigsObs: Observable<DbxDateTimeFieldSyncParsedField[]>, type: DbxDateTimeFieldSyncType): Observable<Date | null> {\n return parseConfigsObs.pipe(\n switchMap((x) => {\n const config = x.find((y) => y.syncType === type);\n let result: Observable<Date | null>;\n\n if (config) {\n const { control } = config;\n result = control.valueChanges.pipe(\n startWith(control.value),\n map((x) => safeToJsDate(x) ?? null)\n );\n } else {\n result = of(null);\n }\n\n return result;\n }),\n distinctUntilChanged(),\n shareReplay(1)\n );\n}\n\nconst TIME_OUTPUT_THROTTLE_TIME: Milliseconds = 10;\n\n/**\n * Error code used when the selected date is not in the schedule.\n */\nexport const DBX_DATE_TIME_FIELD_DATE_NOT_IN_SCHEDULE_ERROR = 'dateTimeFieldDateNotInSchedule';\n\n/**\n * Error code used when the selected time/time input is not in the limited range.\n */\nexport const DBX_DATE_TIME_FIELD_TIME_NOT_IN_RANGE_ERROR = 'dateTimeFieldTimeNotInRange';\n\n@Component({\n templateUrl: 'datetime.field.component.html',\n imports: [FlexLayoutModule, NgTemplateOutlet, MatButtonModule, MatError, MatFormFieldModule, MatDatepickerModule, MatInputModule, FormsModule, ReactiveFormsModule, MatIconModule, MatMenuModule, MatFormFieldModule, GetValuePipe, DatePipe, DateDistancePipe, TimeDistancePipe, MatDividerModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxDateTimeFieldComponent extends FieldType<FieldTypeConfig<DbxDateTimeFieldProps>> implements OnInit, OnDestroy {\n private readonly dbxDateTimeFieldConfigService = inject(DbxDateTimeFieldMenuPresetsService);\n\n private readonly _sub = new SubscriptionObject();\n private readonly _valueSub = new SubscriptionObject();\n private readonly _autoFillDateSync = new SubscriptionObject();\n\n private readonly _config = new BehaviorSubject<Maybe<Observable<DbxDateTimePickerConfiguration>>>(undefined);\n readonly latestConfig$ = this._config.pipe(switchMapMaybeDefault(), distinctUntilChanged(), shareReplay(1));\n\n private readonly _syncConfigObs = new BehaviorSubject<Maybe<Observable<ArrayOrValue<DbxDateTimeFieldSyncField>>>>(undefined);\n\n private readonly _defaultTimezone = new BehaviorSubject<Maybe<Observable<Maybe<TimezoneString>>>>(undefined);\n private readonly _timeDate = new BehaviorSubject<Maybe<Observable<Maybe<DbxDateTimeFieldTimeDateConfig | FormControlPath | DateOrDayString>>>>(undefined);\n private readonly _presets = new BehaviorSubject<Observable<DateTimePresetConfiguration[]>>(of([]));\n\n /**\n * Alternative/backup full day control if not defined in the Formly form.\n */\n private readonly _fullDayInputCtrl = new FormControl(false);\n private readonly _fullDayControlObs = new BehaviorSubject<Maybe<AbstractControl<boolean>>>(undefined);\n readonly fullDayControl$ = this._fullDayControlObs.pipe(filterMaybe());\n\n private readonly _offset = new BehaviorSubject<number>(0);\n private readonly _formControlObs = new BehaviorSubject<Maybe<AbstractControl<Maybe<Date>>>>(undefined);\n readonly formControl$ = this._formControlObs.pipe(filterMaybe());\n\n private readonly _cleared = new Subject<void>();\n private readonly _updateTime = new Subject<void>();\n\n private readonly _resyncTimeInputSub = new SubscriptionObject();\n private readonly _resyncTimeInput = new Subject<void>();\n\n readonly timeErrorStateMatcher: ErrorStateMatcher = {\n isErrorState: (control: AbstractControl | null, form) => {\n if (control) {\n return (control.invalid && (control.dirty || control.touched)) || this.errorStateMatcher.isErrorState(this.formControl, form);\n } else {\n return false;\n }\n }\n };\n\n readonly resyncTimeInput$ = this._resyncTimeInput.pipe(debounceTime(200), shareReplay(1));\n\n private readonly _configUpdateTimeSync = new SubscriptionObject(\n this.latestConfig$.pipe(skip(1)).subscribe((x) => {\n this._updateTime.next();\n })\n );\n\n readonly timezone$: Observable<Maybe<TimezoneString>> = this._defaultTimezone.pipe(switchMapMaybeDefault(), distinctUntilChanged()).pipe(\n map((defaultTimezone) => {\n return defaultTimezone ?? guessCurrentTimezone();\n }),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly timezoneInstance$: Observable<Maybe<DateTimezoneUtcNormalInstance>> = this.timezone$.pipe(\n map((timezone) => (timezone ? dateTimezoneUtcNormal({ timezone }) : undefined)),\n shareReplay(1)\n );\n\n readonly timeDate$: Observable<Maybe<Date>> = this._timeDate.pipe(\n switchMapMaybeDefault(),\n switchMap((x) => {\n let obs: Observable<Maybe<Date>>;\n\n if (x) {\n // if the string is not a date string, then treat it as a path\n if ((typeof x === 'string' && !isISO8601DayStringStart(x)) || isDbxDateTimeFieldTimeDateConfig(x)) {\n const { path, mapValue }: DbxDateTimeFieldTimeDateConfig = typeof x === 'string' ? { path: x } : x;\n obs =\n streamValueFromControl<DateOrDayString>(this.form, path)?.pipe(\n map(mapValue ?? mapIdentityFunction()),\n map((x) => (x ? toJsDayDate(x) : undefined))\n ) ?? of(undefined);\n } else {\n obs = of(toJsDayDate(x));\n }\n } else {\n obs = of(undefined);\n }\n\n return obs;\n }),\n distinctUntilChanged(isSameDateDay),\n shareReplay(1)\n );\n\n readonly valueInSystemTimezone$: Observable<Maybe<Date>> = this.formControl$.pipe(\n map((control) => control.valueChanges.pipe(startWith<Maybe<Date | ISO8601DayString | MinuteOfDay | UnixDateTimeMillisecondsNumber>>(control.value), shareReplay(1))),\n combineLatestWith(this.timezoneInstance$),\n switchMap(([x, timezoneInstance]) => {\n return x.pipe(map(dbxDateTimeInputValueParseFactory(this.valueMode, timezoneInstance)));\n }),\n throttleTime(20, undefined, { leading: true, trailing: true }), // throttle incoming values and timezone changes\n distinctUntilChanged(isSameDateHoursAndMinutes),\n shareReplay(1)\n );\n\n readonly refreshInteral$ = interval(10 * 1000);\n\n /**\n * Used to trigger/display visual updates (specifically on timeDistance, etc.).\n */\n readonly displayValue$ = this.refreshInteral$.pipe(\n // every 10 seconds, refresh w/interval\n startWith(0),\n map(() => new Date().getMinutes()),\n distinctUntilChanged(),\n switchMap(() => this.valueInSystemTimezone$),\n shareReplay(1)\n );\n\n readonly timeString$: Observable<ReadableTimeString | ''> = this.valueInSystemTimezone$.pipe(\n map((x) => (x ? toLocalReadableTimeString(x) : '')),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly dateInputCtrl = new FormControl<Maybe<Date>>(null, {\n validators: []\n });\n\n readonly timeInputCtrl = new FormControl<Maybe<ReadableTimeString>>(null, {\n validators: [Validators.pattern(/^(now)$|^([0-9]|(0[0-9])|(1[0-9])|(2[0-3]))(:)?([0-5][0-9])?(\\s)?([apAP][Mm])?(\\\\s)*$/)]\n });\n\n get dateLabel(): string {\n return this.props.dateLabel ?? 'Date';\n }\n\n get timeLabel(): string {\n return this.props.timeLabel ?? 'Time';\n }\n\n get allDayLabel(): string {\n return this.props.allDayLabel ?? 'All Day';\n }\n\n get atTimeLabel(): string {\n return this.props.atTimeLabel ?? 'At';\n }\n\n get dateOnly(): boolean {\n return this.timeMode === DbxDateTimeFieldTimeMode.NONE;\n }\n\n get dateTimeField(): DbxDateTimeFieldProps {\n return this.field.props;\n }\n\n get timeOnly(): Maybe<boolean> {\n const timeValuesOnly = this.valueMode === DbxDateTimeValueMode.MINUTE_OF_DAY;\n\n if (timeValuesOnly) {\n return true;\n } else {\n return this.dateTimeField.timeOnly;\n }\n }\n\n get alwaysShowDateInput(): boolean {\n return this.props.alwaysShowDateInput ?? true;\n }\n\n get autofillDateWhenTimeIsPicked(): boolean {\n return this.props.autofillDateWhenTimeIsPicked ?? this.alwaysShowDateInput === false;\n }\n\n get showDateInput(): boolean {\n return !this.timeOnly;\n }\n\n get valueMode(): DbxDateTimeValueMode {\n return this.field.props.valueMode ?? DbxDateTimeValueMode.DATE;\n }\n\n get timeMode(): DbxDateTimeFieldTimeMode {\n const dateValuesOnly = this.valueMode === DbxDateTimeValueMode.DAY_STRING;\n\n if (dateValuesOnly) {\n return DbxDateTimeFieldTimeMode.NONE;\n } else {\n return this.timeOnly ? DbxDateTimeFieldTimeMode.REQUIRED : (this.dateTimeField.timeMode ?? DbxDateTimeFieldTimeMode.REQUIRED);\n }\n }\n\n get isDateRequired(): boolean {\n return this.props.required ?? false;\n }\n\n get isTimeRequired(): boolean {\n return this.isDateRequired && this.timeMode === DbxDateTimeFieldTimeMode.REQUIRED;\n }\n\n get description(): Maybe<string> {\n return this.field.props.description;\n }\n\n get hideDateHint(): boolean {\n return this.field.props.hideDateHint ?? false;\n }\n\n get hideDatePicker(): boolean {\n return this.field.props.hideDatePicker ?? false;\n }\n\n get timezone() {\n return this.field.props.timezone;\n }\n\n get timeDate() {\n return this.field.props.timeDate;\n }\n\n get showTimezone() {\n return this.field.props.showTimezone ?? true;\n }\n\n get presets() {\n return this.field.props.presets;\n }\n\n get showClearButton() {\n return this.field.props.showClearButton;\n }\n\n get minuteStep() {\n return this.field.props.minuteStep ?? this.field.props.step ?? 5;\n }\n\n readonly fullDay$: Observable<boolean> = this.fullDayControl$.pipe(\n switchMap((control) => control.valueChanges.pipe(startWith(control.value))),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly showTimeInput$: Observable<boolean> = this.fullDay$.pipe(map((x) => !x && this.timeMode !== DbxDateTimeFieldTimeMode.NONE));\n\n readonly showAddTime$ = this.showTimeInput$.pipe(\n map((x) => !x && this.timeMode === DbxDateTimeFieldTimeMode.OPTIONAL),\n shareReplay(1)\n );\n\n readonly currentDate$ = this.dateInputCtrl.valueChanges.pipe(startWith(this.dateInputCtrl.value), shareReplay(1));\n readonly date$ = this.currentDate$.pipe(filterMaybe(), shareReplay(1));\n\n readonly timezoneAbbreviation$ = combineLatest([this.currentDate$, this.timezone$, this.timeDate$]).pipe(\n map(([date, timezone, timeDate]) => getTimezoneAbbreviation(timezone, timeDate ?? date ?? new Date())),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly dateValue$: Observable<Maybe<Date>> = merge(this.date$, this.valueInSystemTimezone$.pipe(skipAllInitialMaybe())).pipe(\n map((x: Maybe<Date>) => (x ? startOfDay(x) : null)),\n distinctUntilChanged<Maybe<Date>>(isSameDateDay),\n shareReplay(1)\n );\n\n readonly timeInput$: Observable<ReadableTimeString> = this._updateTime.pipe(\n debounceTime(5),\n map(() => this.timeInputCtrl.value || ''),\n distinctUntilChanged()\n );\n\n readonly syncConfigObs$ = this._syncConfigObs.pipe(switchMapMaybeDefault(), shareReplay(1));\n\n readonly parsedSyncConfigs$: Observable<DbxDateTimeFieldSyncParsedField[]> = this.syncConfigObs$.pipe(\n map((x) => {\n let parsed: DbxDateTimeFieldSyncParsedField[];\n\n if (x) {\n parsed = filterMaybeArrayValues(\n asArray(x).map((y) => {\n const control = this.form.get(y.syncWith);\n\n if (control) {\n return {\n control,\n ...y\n };\n } else {\n return undefined;\n }\n })\n );\n } else {\n parsed = [];\n }\n\n return parsed;\n }),\n shareReplay(1)\n );\n\n readonly syncConfigBeforeValue$: Observable<Date | null> = syncConfigValueObs(this.parsedSyncConfigs$, 'before');\n readonly syncConfigAfterValue$: Observable<Date | null> = syncConfigValueObs(this.parsedSyncConfigs$, 'after');\n\n readonly isTimeCleared$ = combineLatest([this.currentDate$, this._timeDate.pipe(startWith(null))]).pipe(\n switchMap(([date, time]) => {\n const isTimeCleared = Boolean(!date && !time);\n return this._cleared.pipe(\n map(() => true),\n startWith(isTimeCleared)\n );\n }),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n protected readonly _rawDateTimeDateValue$: Observable<Maybe<Date>> = this._config.pipe(\n first(),\n switchMap(() => (this.timeOnly ? of(null) : this.dateValue$))\n );\n protected readonly _rawDateTimeTimeValue$: Observable<Maybe<ReadableTimeString>> = this.timeInput$.pipe(startWith(null));\n\n readonly rawDateTime$: Observable<Maybe<Date>> = combineLatest([this._rawDateTimeDateValue$, this._rawDateTimeTimeValue$, this.fullDay$, this.timeDate$, this.isTimeCleared$]).pipe(\n map(([date, timeString, fullDay, timeDate, isTimeCleared]) => {\n let result: Maybe<Date>;\n\n if (!isTimeCleared) {\n if (!date || this.timeOnly) {\n date = timeDate ?? new Date(); // use the time date, or default to the current day\n }\n\n if (date) {\n if (fullDay) {\n if (this.dateTimeField.fullDayInUTC) {\n result = utcDayForDate(date);\n } else {\n result = startOfDay(date);\n }\n } else if (timeString) {\n result =\n readableTimeStringToDate(timeString, {\n date,\n useSystemTimezone: true\n }) ?? date;\n } else if (!this.timeOnly) {\n if (this.timeMode !== DbxDateTimeFieldTimeMode.REQUIRED) {\n // only autofill the date if the time is marked as required (and the time string is empty)\n result = date;\n }\n }\n }\n }\n\n return result;\n }),\n distinctUntilChanged(isSameDateHoursAndMinutes),\n shareReplay(1)\n );\n\n readonly dateTimePickerConfig$: Observable<Maybe<DbxDateTimePickerConfiguration>> = combineLatest([this._config.pipe(switchMapFilterMaybe()), this.syncConfigBeforeValue$, this.syncConfigAfterValue$]).pipe(\n map(([x, dateInputMin, dateInputMax]) => {\n let result: Maybe<DbxDateTimePickerConfiguration> = x;\n\n if (dateInputMin != null || dateInputMax != null) {\n const { min: limitMin, max: limitMax } = x?.limits ?? {};\n const min = findMinDate([dateInputMin, dateFromLogicalDate(limitMin)]);\n const max = findMaxDate([dateInputMax, dateFromLogicalDate(limitMax)]);\n\n result = {\n ...x,\n limits: {\n ...x?.limits,\n min,\n max\n }\n };\n }\n\n return result;\n }),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly dateInputMin$: Observable<Date | null> = this.dateTimePickerConfig$.pipe(\n map((x) => (x?.limits?.min ?? null) as Date | null),\n distinctUntilChanged<Date | null>(isSameDate),\n shareReplay(1)\n );\n\n readonly dateInputMax$: Observable<Date | null> = this.dateTimePickerConfig$.pipe(\n map((x) => (x?.limits?.max ?? null) as Date | null),\n distinctUntilChanged<Date | null>(isSameDate),\n shareReplay(1)\n );\n\n /**\n * Whether or not there is a limited min/max date range applied/available.\n */\n readonly hasRestrictedDateRange$: Observable<boolean> = combineLatest([this.dateInputMin$, this.dateInputMax$]).pipe(\n map(([a, b]) => Boolean(a || b)),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly dateMinAndMaxIsSameDay$: Observable<boolean> = combineLatest([this.dateInputMin$, this.dateInputMax$]).pipe(\n map(([a, b]) => Boolean(a && b) && isSameDateDay(a, b)),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly pickerFilter$: Observable<DecisionFunction<Date | null>> = this.dateTimePickerConfig$.pipe(\n distinctUntilChanged(),\n map((x) => {\n if (x) {\n const filter = dateTimeMinuteWholeDayDecisionFunction(x, false);\n return (x: Date | null) => (x != null ? filter(x) : true);\n } else {\n return () => true;\n }\n }),\n shareReplay(1)\n );\n\n readonly defaultPickerFilter: DecisionFunction<Date | null> = () => true;\n\n readonly timeOutput$: Observable<Maybe<Date>> = combineLatest([this.rawDateTime$, this._offset, this.dateTimePickerConfig$]).pipe(\n throttleTime(TIME_OUTPUT_THROTTLE_TIME, undefined, { leading: false, trailing: true }),\n distinctUntilChanged((current, next) => current[0] === next[0] && next[1] === 0 && current[2] === next[2]),\n tap(([, stepsOffset]) => (stepsOffset ? this._offset.next(0) : 0)),\n map(([date, stepsOffset, config]) => {\n if (date != null) {\n const instance = new DateTimeMinuteInstance({\n date,\n ...config,\n roundDownToMinute: true\n });\n\n // only clamp when the steps offset is set\n if (stepsOffset) {\n date = instance.clamp(date);\n\n const minutes = stepsOffset * this.minuteStep;\n\n if (minutes != 0) {\n date = addMinutes(date, minutes);\n date = instance.clamp(date); // clamp the date again\n }\n }\n }\n\n return date;\n }),\n distinctUntilChanged(isSameDateHoursAndMinutes),\n shareReplay(1)\n );\n\n readonly dateTimePickerInstance$ = this.dateTimePickerConfig$.pipe(\n map((config) => {\n return new DateTimeMinuteInstance({\n ...config,\n roundDownToMinute: true\n });\n }),\n shareReplay(1)\n );\n\n readonly hasEmptyDisplayValue$ = this.displayValue$.pipe(\n map((x) => !x),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly allPresets$: Observable<DateTimePreset[]> = this._presets.pipe(\n switchMapFilterMaybe(),\n map((x: DateTimePresetConfiguration[]) => x.map(dateTimePreset)),\n shareReplay(1)\n );\n\n readonly _presetsPickerFilter$ = this.dateTimePickerConfig$.pipe(\n map((config) => {\n if (config) {\n const filter = dateTimeMinuteDecisionFunction(config); // filter that the date must be in the given range\n return (x: Date | null) => (x != null ? filter(x) : true);\n } else {\n return () => true;\n }\n })\n );\n\n readonly presets$: Observable<DateTimePreset[]> = combineLatest([this.allPresets$, this.fullDay$]).pipe(\n switchMap(([x, fullDay]) => {\n let result: Observable<DateTimePreset[]>;\n\n if (this.timeOnly) {\n result = of(x); // do not filter based on the date\n } else if (fullDay) {\n result = of([]);\n } else {\n result = combineLatest([this._rawDateTimeDateValue$.pipe(throttleTime(1000, undefined, { leading: true, trailing: true })), this._presetsPickerFilter$]).pipe(\n map(([selectedDate, isAllowedDate]) => {\n const allowedPresets: DateTimePreset[] = [];\n\n if (selectedDate) {\n // iterate each preset and check if it is allowed\n x.forEach((preset) => {\n const value = preset.value();\n let presetDate: Maybe<Date>;\n\n if (value.logicalDate) {\n presetDate = dateFromLogicalDate(value.logicalDate);\n } else if (value.timeString) {\n presetDate = readableTimeStringToDate(value.timeString, {\n date: selectedDate,\n useSystemTimezone: true\n });\n }\n\n // the computed date should be within the allowed range\n if (presetDate && isAllowedDate(presetDate)) {\n allowedPresets.push(preset);\n }\n });\n }\n\n return allowedPresets;\n })\n );\n }\n\n return result;\n }),\n shareReplay(1)\n );\n\n readonly showClearButton$: Observable<boolean> = this.hasEmptyDisplayValue$.pipe(\n map((x) => Boolean(this.showClearButton && !x)),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly canAutofillDateWithOnlyAvailableDate$: Observable<boolean> = this.dateMinAndMaxIsSameDay$;\n\n readonly showDateInput$: Observable<boolean> = this.dateMinAndMaxIsSameDay$.pipe(\n map((dateMinAndMaxIsSameDay) => {\n return this.showDateInput && (this.alwaysShowDateInput || !dateMinAndMaxIsSameDay);\n }),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly currentErrorMessage$ = this.formControl$.pipe(\n switchMap((formControl) =>\n formControl.statusChanges.pipe(\n filter((x) => x === 'INVALID' || x === 'VALID'),\n map((x) => {\n let currentErrorMessage: string | undefined;\n\n if (x === 'INVALID') {\n if (this.formControl.hasError('required')) {\n currentErrorMessage = 'Date is required';\n } else if (this.formControl.hasError(DBX_DATE_TIME_FIELD_DATE_NOT_IN_SCHEDULE_ERROR)) {\n currentErrorMessage = 'Date does not fall on an available dates in schedule.';\n } else if (this.formControl.hasError(DBX_DATE_TIME_FIELD_TIME_NOT_IN_RANGE_ERROR)) {\n currentErrorMessage = 'Time is not valid for the given date.';\n } else {\n currentErrorMessage = 'The given date and time is invalid.';\n }\n }\n\n return currentErrorMessage;\n })\n )\n ),\n startWith(undefined),\n shareReplay(1)\n );\n\n readonly hasError$ = this.currentErrorMessage$.pipe(\n map((x) => Boolean(x)),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly dateValueSignal = toSignal(this.dateValue$);\n readonly displayValueSignal = toSignal(this.displayValue$);\n readonly pickerFilterSignal = toSignal(this.pickerFilter$, { initialValue: this.defaultPickerFilter });\n readonly dateInputMinSignal = toSignal(this.dateInputMin$, { initialValue: null });\n readonly dateInputMaxSignal = toSignal(this.dateInputMax$, { initialValue: null });\n readonly showDateInputSignal = toSignal(this.showDateInput$);\n readonly showTimeInputSignal = toSignal(this.showTimeInput$);\n readonly showAddTimeSignal = toSignal(this.showAddTime$);\n readonly fullDaySignal = toSignal(this.fullDay$);\n readonly timezoneAbbreviationSignal = toSignal(this.timezoneAbbreviation$);\n readonly hasEmptyDisplayValueSignal = toSignal(this.hasEmptyDisplayValue$);\n readonly currentErrorMessageSignal = toSignal(this.currentErrorMessage$);\n readonly showClearButtonSignal = toSignal(this.showClearButton$);\n readonly presetsSignal = toSignal(this.presets$);\n readonly hasErrorSignal = toSignal(this.hasError$);\n\n ngOnInit(): void {\n this._formControlObs.next(this.formControl);\n\n const inputPickerConfig = this.dateTimeField.pickerConfig;\n this._config.next(inputPickerConfig ? asObservableFromGetter(inputPickerConfig) : of({}));\n this._syncConfigObs.next(this.dateTimeField.getSyncFieldsObs?.());\n\n this._sub.subscription = this.valueInSystemTimezone$\n .pipe(\n combineLatestWith(this.timezoneInstance$.pipe(map((timezoneInstance) => dbxDateTimeOutputValueFactory(this.valueMode, timezoneInstance)))),\n throttleTime(TIME_OUTPUT_THROTTLE_TIME, undefined, { leading: false, trailing: true }),\n switchMap(([currentValue, valueFactory]) => {\n return this.timeOutput$.pipe(\n throttleTime(TIME_OUTPUT_THROTTLE_TIME * 2, undefined, { leading: false, trailing: true }),\n skipAllInitialMaybe(),\n distinctUntilChanged(isSameDateHoursAndMinutes),\n map((x) => valueFactory(x)),\n filter((x) => !dbxDateTimeIsSameDateTimeFieldValue(x, currentValue))\n );\n })\n )\n .subscribe((value) => {\n this.formControl.setValue(value);\n this.formControl.markAsDirty();\n this.formControl.markAsTouched();\n });\n\n let hasSetMidnightFromInput = false;\n\n /*\n this._valueSub.subscription = this.timeString$.subscribe((x) => {\n this.setTime(x);\n });\n */\n\n if (this.autofillDateWhenTimeIsPicked) {\n this._autoFillDateSync.subscription = this.canAutofillDateWithOnlyAvailableDate$\n .pipe(\n switchMap((canAutofill) => {\n if (canAutofill) {\n // when the time updates the first time, set the current min date\n return this._updateTime.pipe(\n debounceTime(200),\n switchMap((x) => this.dateInputMin$),\n filterMaybe()\n );\n } else {\n return of(null); // don't show anything\n }\n })\n )\n .subscribe((autoDate) => {\n if (autoDate != null) {\n this.dateInputCtrl.setValue(autoDate);\n }\n });\n }\n\n this._valueSub.subscription = this.valueInSystemTimezone$\n .pipe(\n map((x) => (x ? isSameDate(x, startOfDay(x)) : false)),\n distinctUntilChanged(),\n switchMap((isInputValueAtMidnight) => {\n hasSetMidnightFromInput = false;\n return this.timeString$.pipe(\n // skip(1),\n map((timeString) => [timeString, isInputValueAtMidnight] as [string, boolean])\n );\n })\n )\n .subscribe(([x, isInputValueAtMidnight]) => {\n // Skip events where the timeInput value is cleared, unless the input value is at midnight and we've already processed it being at midnight\n if (!this.timeInputCtrl.value && x === '12:00AM' && (!isInputValueAtMidnight || (isInputValueAtMidnight && hasSetMidnightFromInput))) {\n return;\n }\n\n // update the has set flag\n if (x === '12:00AM' && isInputValueAtMidnight) {\n hasSetMidnightFromInput = true;\n }\n\n this.setTime(x);\n });\n\n // Set default timezone if provided.\n if (this.timezone && !this.dateTimeField.fullDayInUTC) {\n this._defaultTimezone.next(asObservableFromGetter(this.timezone));\n }\n\n this._timeDate.next(asObservableFromGetter(this.timeDate));\n\n // Watch for disabled changes so we can propogate them properly.\n this.formControl.registerOnDisabledChange((isDisabled) => {\n toggleDisableFormControl(this.dateInputCtrl, isDisabled);\n toggleDisableFormControl(this.timeInputCtrl, isDisabled);\n });\n\n const isFullDayField = this.dateTimeField.fullDayFieldName;\n let fullDayFieldCtrl: Maybe<AbstractControl>;\n\n if (isFullDayField) {\n fullDayFieldCtrl = this.form.get(isFullDayField);\n }\n\n if (!fullDayFieldCtrl) {\n const isFullDay = this.timeMode === DbxDateTimeFieldTimeMode.NONE;\n this._fullDayInputCtrl.setValue(isFullDay);\n\n // Set the control in the form too if the name is defined.\n if (isFullDayField) {\n (this.form as FormGroup).addControl(isFullDayField, this._fullDayInputCtrl);\n }\n\n fullDayFieldCtrl = this._fullDayInputCtrl;\n }\n\n this._fullDayControlObs.next(fullDayFieldCtrl);\n\n switch (this.timeMode) {\n case DbxDateTimeFieldTimeMode.OPTIONAL:\n break;\n case DbxDateTimeFieldTimeMode.NONE:\n this.removeTime();\n break;\n case DbxDateTimeFieldTimeMode.REQUIRED:\n this.addTime();\n break;\n }\n\n if (this.presets != null) {\n this._presets.next(asObservableFromGetter(this.presets));\n } else {\n this._presets.next(this.dbxDateTimeFieldConfigService.configurations$);\n }\n\n this._resyncTimeInputSub.subscription = this.resyncTimeInput$.pipe(switchMap((x) => combineLatest([this.currentDate$, this.timeString$]).pipe(first()))).subscribe(([currentDate, timeString]) => {\n // only resync when the current date is set, otherwise do not change the time string.\n // This helps in cases where the user picks a time first and we don't want it to be cleared.\n if (currentDate != null) {\n this.timeInputCtrl.setValue(timeString, { emitEvent: false });\n }\n });\n\n // add validators/errors for the form\n this.formControl.addAsyncValidators([\n (x) => {\n const formValue = x.value as Maybe<Date>;\n let obs: Observable<ValidationErrors>;\n\n if (formValue != null) {\n obs = combineLatest([this.timezoneInstance$, this.dateTimePickerInstance$]).pipe(\n map(([timezoneInstance, x]) => {\n // the form value is going to be in the output form, so we need to parse it back to the \"input\" date before evaluating it\n const formValueInSystemTimezone = dbxDateTimeInputValueParseFactory(this.valueMode, timezoneInstance)(formValue);\n\n let errors: ValidationErrors = {\n ...this.timeInputCtrl.errors\n };\n\n if (formValueInSystemTimezone) {\n if (x.dateIsInSchedule(formValueInSystemTimezone)) {\n if (!x.isInValidRange(formValueInSystemTimezone)) {\n errors = {\n [DBX_DATE_TIME_FIELD_TIME_NOT_IN_RANGE_ERROR]: true\n };\n }\n } else {\n errors = {\n [DBX_DATE_TIME_FIELD_DATE_NOT_IN_SCHEDULE_ERROR]: true\n };\n }\n }\n\n return errors;\n }),\n first()\n );\n } else {\n obs = of({});\n }\n\n return obs;\n }\n ]);\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._sub.destroy();\n this._valueSub.destroy();\n this._config.complete();\n this._configUpdateTimeSync.destroy();\n this._defaultTimezone.complete();\n this._resyncTimeInputSub.destroy();\n this._autoFillDateSync.destroy();\n this._timeDate.complete();\n this._presets.complete();\n this._fullDayControlObs.complete();\n this._offset.complete();\n this._formControlObs.complete();\n this._updateTime.complete();\n this._cleared.complete();\n this._resyncTimeInput.complete();\n this._syncConfigObs.complete();\n }\n\n selectPreset(preset: DateTimePreset): void {\n const value = preset.value();\n\n if (value.logicalDate) {\n this.setLogicalTime(value.logicalDate);\n } else if (value.timeString) {\n this.setTime(value.timeString);\n }\n }\n\n datePicked(event: MatDatepickerInputEvent<Date>): void {\n const date = event.value;\n\n if (date) {\n this.setDateInputValue(date);\n }\n }\n\n setLogicalTime(time: LogicalDate): void {\n const date = dateFromLogicalDate(time);\n\n if (date) {\n this.setTimeFromDate(date);\n }\n }\n\n setDateInputValue(date: Date) {\n this.dateInputCtrl.setValue(date);\n this._updateTime.next();\n }\n\n setTimeFromDate(timeDate: Date): void {\n const timeString = toLocalReadableTimeString(timeDate);\n this.setTime(timeString);\n }\n\n setTime(time: ReadableTimeString): void {\n if (this.timeInputCtrl.value !== time) {\n this.timeInputCtrl.setValue(time);\n this._offset.next(0);\n this._updateTime.next();\n }\n }\n\n keydownOnDateInput(event: KeyboardEvent): void {\n let direction = 0;\n\n switch (event.key?.toLowerCase()) {\n case 'arrowup':\n direction = 1;\n break;\n case 'arrowdown':\n direction = -1;\n break;\n }\n\n let offset = 1;\n\n if (event.ctrlKey && event.shiftKey) {\n offset = 365;\n } else if (event.ctrlKey) {\n offset = 30;\n } else if (event.shiftKey) {\n offset = 7;\n }\n\n if (direction !== 0) {\n combineLatest([this.date$, this.dateTimePickerConfig$])\n .pipe(first())\n .subscribe(([date, config]) => {\n const newDate = startOfDay(addDays(date, offset * direction));\n const instance = new DateTimeMinuteInstance({\n date: newDate,\n ...config\n });\n\n const nextDate = instance.isInSchedule(newDate) ? newDate : instance.findNextAvailableDayInSchedule(newDate, direction === 1 ? 'future' : 'past');\n\n if (nextDate != null) {\n this.setDateInputValue(instance.clampToLimit(nextDate));\n }\n });\n }\n }\n\n keydownOnTimeInput(event: KeyboardEvent): void {\n let direction = 0;\n\n switch (event.key?.toLowerCase()) {\n case 'arrowup':\n direction = 1;\n break;\n case 'arrowdown':\n direction = -1;\n break;\n }\n\n let offset = 1;\n\n if (event.altKey && event.shiftKey) {\n offset = 300;\n } else if (event.altKey) {\n offset = 60;\n } else if (event.shiftKey) {\n offset = 5;\n }\n\n if (direction !== 0) {\n this._offset.next(this._offset.value + offset * direction);\n this._updateTime.next();\n }\n }\n\n focusTime(): void {\n // do nothing\n }\n\n focusOutTime(): void {\n // only refresh when there is not a pattern error\n if (!this.timeInputCtrl.hasError('pattern')) {\n this._updateTime.next();\n this._resyncTimeInput.next();\n }\n }\n\n addTime(): void {\n this.setFullDay(false);\n }\n\n removeTime(): void {\n this.setFullDay(true);\n }\n\n setFullDay(fullDay: boolean): void {\n this.fullDayControl$.pipe(first()).subscribe((x) => {\n x.setValue(fullDay);\n });\n }\n\n clearValue(): void {\n this._cleared.next();\n }\n}\n","<div class=\"dbx-datetime-field\" fxLayout=\"row wrap\" fxLayout.xs=\"column wrap\" fxLayoutGap=\"6px grid\" fxLayoutAlign=\"space-evenly stretch\">\n <!-- Date -->\n @if (showDateInputSignal()) {\n <div class=\"dbx-datetime-row\" fxFlex.lt-sm=\"100\" [fxFlex]=\"dateOnly ? '100' : '50'\">\n <ng-container [ngTemplateOutlet]=\"dateInputTemplate\"></ng-container>\n </div>\n }\n <!-- Time -->\n @if (showTimeInputSignal() || showAddTimeSignal()) {\n <!-- Only show flex if there is content to be displayed. -->\n <div class=\"dbx-datetime-row\" fxFlex.lt-sm=\"100\" [fxFlex]=\"showDateInputSignal() ? '50' : '100'\">\n @if (showTimeInputSignal()) {\n <ng-container [ngTemplateOutlet]=\"timeMenuAndInputTemplate\"></ng-container>\n }\n @if (showAddTimeSignal()) {\n <div class=\"add-time-button-wrapper\">\n <button mat-button class=\"mat-datepicker-button-highlight dbx-button-spacer add-time-button\" ngClass.lt-sm=\"add-time-button-full\" (click)=\"addTime()\">\n <mat-icon>timer</mat-icon>\n Add Time\n </button>\n </div>\n }\n </div>\n }\n <!-- Date Hint -->\n @switch (hasErrorSignal()) {\n @case (false) {\n @if (!hideDateHint) {\n <div class=\"dbx-datetime-row dbx-datetime-hint-row\" fxFlex=\"100\">\n <div class=\"dbx-hint\">\n @switch (hasEmptyDisplayValueSignal()) {\n @case (true) {\n <span class=\"dbx-small\">No date/time set</span>\n }\n @case (false) {\n @switch (fullDaySignal()) {\n @case (true) {\n <small>\n <b class=\"dbx-ok\">{{ allDayLabel }}</b>\n {{ displayValueSignal() | date: 'fullDate' }} {{ timezoneAbbreviationSignal() }} ({{ displayValueSignal() | dateDistance }})\n </small>\n }\n @case (false) {\n <small>\n @if (displayValueSignal()) {\n <b class=\"dbx-ok\">{{ atTimeLabel }}</b>\n {{ displayValueSignal() | date: 'medium' }} {{ timezoneAbbreviationSignal() }} ({{ displayValueSignal() | timeDistance }})\n }\n </small>\n }\n }\n }\n }\n </div>\n </div>\n }\n }\n @case (true) {\n @if (currentErrorMessageSignal()) {\n <mat-error>{{ currentErrorMessageSignal() }}</mat-error>\n }\n }\n }\n</div>\n\n<!-- Date Input Template -->\n<ng-template #dateInputTemplate>\n <mat-form-field class=\"dbx-datetime-row-field\">\n <mat-label>{{ dateLabel }}</mat-label>\n <input #dateInput matInput [disabled]=\"disabled\" [required]=\"isDateRequired\" [min]=\"dateInputMinSignal()\" [max]=\"dateInputMaxSignal()\" [matDatepicker]=\"picker\" [matDatepickerFilter]=\"pickerFilterSignal()\" (dateChange)=\"datePicked($event)\" [value]=\"dateValueSignal()\" (keydown)=\"keydownOnDateInput($event)\" />\n <mat-datepicker #picker></mat-datepicker>\n @if (!hideDatePicker) {\n <button matPrefix class=\"dbx-datetime-row-button\" mat-icon-button (click)=\"picker.open()\" [disabled]=\"disabled\">\n <mat-icon>calendar_today</mat-icon>\n </button>\n }\n @if (showClearButtonSignal()) {\n <button matSuffix class=\"dbx-datetime-clear-button\" mat-icon-button aria-label=\"clears the date and time menu\" [disabled]=\"disabled\" (click)=\"clearValue()\">\n <mat-icon>clear</mat-icon>\n </button>\n }\n @if (!showTimeInputSignal()) {\n <span matTextSuffix>\n <ng-container [ngTemplateOutlet]=\"timezoneSuffixTemplate\"></ng-container>\n </span>\n }\n </mat-form-field>\n</ng-template>\n\n<!-- Time Menu/Input Template -->\n<ng-template #timeMenuAndInputTemplate>\n <mat-menu #timemenu=\"matMenu\">\n @if (timeMode === 'optional') {\n <button mat-menu-item (click)=\"removeTime()\">\n <span>Remove Time</span>\n </button>\n <mat-divider></mat-divider>\n }\n @for (preset of presetsSignal(); track preset) {\n <button mat-menu-item (click)=\"selectPreset(preset)\">{{ preset.label | getValue }}</button>\n }\n </mat-menu>\n <mat-form-field class=\"dbx-datetime-row-field\">\n <mat-label>{{ timeLabel }}</mat-label>\n <input #timeInput [errorStateMatcher]=\"timeErrorStateMatcher\" matInput [required]=\"isTimeRequired\" [formControl]=\"timeInputCtrl\" (focus)=\"focusTime()\" (focusout)=\"focusOutTime()\" (keydown)=\"keydownOnTimeInput($event)\" />\n <button matPrefix class=\"dbx-datetime-row-button\" mat-icon-button [matMenuTriggerFor]=\"timemenu\" aria-label=\"opens the time menu\" [disabled]=\"disabled\">\n <mat-icon>timer</mat-icon>\n </button>\n <span matTextSuffix>\n <ng-container [ngTemplateOutlet]=\"timezoneSuffixTemplate\"></ng-container>\n </span>\n @if (timeInputCtrl.hasError('pattern')) {\n <mat-error>The input time is not recognizable.</mat-error>\n }\n </mat-form-field>\n</ng-template>\n\n<!-- Timezone Suffix -->\n<ng-template #timezoneSuffixTemplate>\n @if (showTimezone) {\n <span class=\"dbx-datetime-timezone dbx-faint\">{{ timezoneAbbreviationSignal() }}</span>\n }\n</ng-template>\n","import { type Maybe, type DecisionFunction, type Milliseconds, type TimezoneString, type DateMonth, type DayOfMonth, type YearNumber, isMonthDaySlashDate, MS_IN_MINUTE } from '@dereekb/util';\nimport { guessCurrentTimezone, type DateTimezoneUtcNormalInstance, dateTimezoneUtcNormal, type DateRangeInput, type DateRange, isSameDateDayRange, type DateRangeWithDateOrStringValue, type DateTimeMinuteConfig, dateRange, isDateInDateRange, clampDateRangeToDateRange, isSameDateRange, isSameDateDay, limitDateTimeInstance, dateTimeMinuteWholeDayDecisionFunction } from '@dereekb/date';\nimport { switchMap, shareReplay, map, startWith, distinctUntilChanged, debounceTime, throttleTime, BehaviorSubject, type Observable, Subject, of, combineLatestWith, filter, combineLatest, scan, first, timer } from 'rxjs';\nimport { ChangeDetectionStrategy, Component, ElementRef, Injectable, type OnDestroy, type OnInit, forwardRef, inject, signal, viewChild } from '@angular/core';\nimport { type AbstractControl, FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { FieldType } from '@ngx-formly/material';\nimport { type FieldTypeConfig, type FormlyFieldProps } from '@ngx-formly/core';\nimport { type MatDateRangeSelectionStrategy, MAT_DATE_RANGE_SELECTION_STRATEGY, DateRange as DatePickerDateRange, MatCalendar, MatDatepickerModule } from '@angular/material/datepicker';\nimport { asObservableFromGetter, filterMaybe, type ObservableOrValueGetter, skipAllInitialMaybe, SubscriptionObject, switchMapMaybeDefault } from '@dereekb/rxjs';\nimport { DbxDateTimeValueMode, dbxDateRangeIsSameDateRangeFieldValue, dbxDateTimeInputValueParseFactory, dbxDateTimeOutputValueFactory } from './date.value';\nimport { type DateTimePresetConfiguration } from './datetime';\nimport { DbxDateTimeFieldMenuPresetsService } from './datetime.field.service';\nimport { DateAdapter } from '@angular/material/core';\nimport { isBefore } from 'date-fns';\nimport { MatError, MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { NgClass } from '@angular/common';\n\nexport type DbxFixedDateRangeDateRangeInput = Omit<DateRangeInput, 'date'>;\n\nexport type DbxFixedDateRangePickerConfiguration = Omit<DateTimeMinuteConfig, 'date'>;\n\nexport type DbxFixedDateRangeSelectionMode = 'single' | 'normal' | 'arbitrary' | 'arbitrary_quick';\nexport type DbxFixedDateRangePicking = 'start' | 'end';\n\nexport interface DbxFixedDateRangeFieldProps extends FormlyFieldProps {\n /**\n * Date range input to build the date range.\n */\n readonly dateRangeInput: ObservableOrValueGetter<DbxFixedDateRangeDateRangeInput>;\n\n /**\n * Selection mode to use when picking dates on the calendar.\n */\n readonly selectionMode?: Maybe<ObservableOrValueGetter<DbxFixedDateRangeSelectionMode>>;\n\n /**\n * Value mode for the dates in the output DateRange.\n *\n * Defaults to DATE\n */\n readonly valueMode?: DbxDateTimeValueMode;\n\n /**\n * Whether or not to pass the date value as a UTC date, or a date in the current timezone.\n */\n readonly fullDayInUTC?: boolean;\n\n /**\n * Custom picker configuration\n */\n readonly pickerConfig?: ObservableOrValueGetter<DbxFixedDateRangePickerConfiguration>;\n\n /**\n * (Optional) The input timezone to default to.\n *\n * Ignored if fullDayInUTC is true.\n */\n readonly timezone?: Maybe<ObservableOrValueGetter<Maybe<TimezoneString>>>;\n\n /**\n * Whether or not to display the timezone. True by default.\n */\n readonly showTimezone?: boolean;\n\n /**\n * Custom presets to show in the dropdown.\n */\n readonly presets?: ObservableOrValueGetter<DateTimePresetConfiguration[]>;\n\n /**\n * Whether or not to show the range input. Defaults to true.\n */\n readonly showRangeInput?: boolean;\n}\n\nfunction dbxFixedDateRangeInputValueFactory(mode: DbxDateTimeValueMode, timezoneInstance: Maybe<DateTimezoneUtcNormalInstance>): (input: Maybe<DateRangeWithDateOrStringValue>) => Maybe<DateRange> {\n const dateInputTransformer = dbxDateTimeInputValueParseFactory(mode, timezoneInstance);\n\n return (y) => {\n let result: Maybe<DateRange>;\n\n if (y) {\n result = {\n start: dateInputTransformer(y.start) as Date,\n end: dateInputTransformer(y.end) as Date\n };\n }\n\n return result;\n };\n}\n\nfunction dbxFixedDateRangeOutputValueFactory(mode: DbxDateTimeValueMode, timezoneInstance: Maybe<DateTimezoneUtcNormalInstance>): (date: Maybe<DateRange>) => Maybe<DateRangeWithDateOrStringValue> {\n const dateOutputTransformer = dbxDateTimeOutputValueFactory(mode, timezoneInstance);\n\n return (y) => {\n let result: Maybe<DateRange>;\n\n if (y) {\n result = {\n start: dateOutputTransformer(y.start) as Date,\n end: dateOutputTransformer(y.end) as Date\n };\n }\n\n return result;\n };\n}\n\nconst TIME_OUTPUT_THROTTLE_TIME: Milliseconds = 10;\n\nexport type FixedDateRangeScanType = 'start' | 'end' | 'startRepeat';\n\nexport interface FixedDateRangeScan {\n /**\n * Picked the start or end of the range on the last pick.\n */\n readonly lastPickType?: Maybe<FixedDateRangeScanType>;\n /**\n * The latest date passed, if applicable.\n */\n readonly lastDateRange?: Maybe<Partial<DateRange>>;\n /**\n * The generated boundary range.\n */\n readonly boundary?: DateRange;\n /**\n * New Date Range\n */\n readonly range?: DateRange;\n}\n\ntype SelectedDateEventType = 'calendar' | 'input';\n\ninterface SelectedDateEvent {\n readonly type: SelectedDateEventType;\n readonly range?: Maybe<Partial<DateRange>>;\n}\n\n@Component({\n templateUrl: 'fixeddaterange.field.component.html',\n providers: [\n {\n provide: MAT_DATE_RANGE_SELECTION_STRATEGY,\n useClass: forwardRef(() => DbxFixedDateRangeFieldSelectionStrategy)\n }\n ],\n imports: [MatDatepickerModule, MatFormFieldModule, FormsModule, ReactiveFormsModule, MatInputModule, MatError, NgClass],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFixedDateRangeFieldComponent extends FieldType<FieldTypeConfig<DbxFixedDateRangeFieldProps>> implements OnInit, OnDestroy {\n private readonly dbxDateTimeFieldMenuPresetsService = inject(DbxDateTimeFieldMenuPresetsService);\n\n readonly calendar = viewChild.required<MatCalendar<Date>>(MatCalendar);\n readonly startDateInputElement = viewChild<string, ElementRef>('startDateInput', { read: ElementRef });\n readonly endDateInputElement = viewChild<string, ElementRef>('endDateInput', { read: ElementRef });\n\n readonly currentDateRangeInputSignal = signal<Maybe<DbxFixedDateRangeDateRangeInput>>(undefined);\n readonly currentSelectionModeSignal = signal<DbxFixedDateRangeSelectionMode>('single');\n\n private readonly _sub = new SubscriptionObject();\n\n private readonly _inputRangeFormSub = new SubscriptionObject();\n private readonly _inputRangeFormValueSub = new SubscriptionObject();\n\n private readonly _dateRangeInputSub = new SubscriptionObject();\n private readonly _currentSelectionModeSub = new SubscriptionObject();\n private readonly _latestBoundarySub = new SubscriptionObject();\n private readonly _disableEndSub = new SubscriptionObject();\n private readonly _activeDateSub = new SubscriptionObject();\n\n private readonly _config = new BehaviorSubject<Maybe<Observable<DbxFixedDateRangePickerConfiguration>>>(undefined);\n private readonly _selectionMode = new BehaviorSubject<Maybe<Observable<DbxFixedDateRangeSelectionMode>>>(undefined);\n private readonly _dateRangeInput = new BehaviorSubject<Maybe<Observable<DbxFixedDateRangeDateRangeInput>>>(undefined);\n\n private readonly _timezone = new BehaviorSubject<Maybe<Observable<Maybe<TimezoneString>>>>(undefined);\n private readonly _presets = new BehaviorSubject<Observable<DateTimePresetConfiguration[]>>(of([]));\n\n private readonly _selectionEvent = new Subject<SelectedDateEvent>();\n readonly selectedDateRange$: Observable<Maybe<Partial<DateRange>>> = this._selectionEvent.pipe(map((x) => x.range));\n\n private readonly _formControlObs = new BehaviorSubject<Maybe<AbstractControl<Maybe<DateRange>>>>(undefined);\n readonly formControl$ = this._formControlObs.pipe(filterMaybe());\n\n readonly config$: Observable<DbxFixedDateRangePickerConfiguration> = this._config.pipe(\n filterMaybe(),\n switchMap((x) => x),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly limitDateTimeInstance$ = this.config$.pipe(map(limitDateTimeInstance), shareReplay(1));\n\n readonly selectionMode$: Observable<DbxFixedDateRangeSelectionMode> = this._selectionMode.pipe(\n switchMapMaybeDefault<DbxFixedDateRangeSelectionMode>('single'),\n map((x) => x ?? 'single'),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly dateRangeInput$ = this._dateRangeInput.pipe(switchMapMaybeDefault(), shareReplay(1));\n\n readonly timezone$: Observable<Maybe<TimezoneString>> = this._timezone.pipe(switchMapMaybeDefault(), distinctUntilChanged()).pipe(\n map((defaultTimezone) => {\n return defaultTimezone ?? guessCurrentTimezone();\n }),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly timezoneInstance$: Observable<Maybe<DateTimezoneUtcNormalInstance>> = this.timezone$.pipe(\n map((timezone) => (timezone ? dateTimezoneUtcNormal({ timezone }) : undefined)),\n shareReplay(1)\n );\n\n readonly valueInSystemTimezone$: Observable<Maybe<DateRange>> = this.formControl$.pipe(\n map((control) => control.valueChanges.pipe(startWith<Maybe<DateRangeWithDateOrStringValue>>(control.value), shareReplay(1))),\n combineLatestWith(this.timezoneInstance$),\n switchMap(([x, timezoneInstance]) => {\n return x.pipe(map(dbxFixedDateRangeInputValueFactory(this.valueMode, timezoneInstance)));\n }),\n throttleTime(20, undefined, { leading: false, trailing: true }), // throttle incoming values and timezone changes\n distinctUntilChanged<Maybe<DateRange>>(isSameDateDayRange),\n shareReplay(1)\n );\n\n dateRangeSelectionForMode(mode: DbxFixedDateRangeSelectionMode) {\n const result: Observable<Maybe<DateRange>> = combineLatest([this.dateRangeInput$, this.limitDateTimeInstance$]).pipe(\n switchMap(([dateRangeInput, limitInstance]) => {\n const hasDateRangeConfiguration = Boolean(dateRangeInput);\n const minMaxClamp = (dateRange: DateRange) => limitInstance.clampDateRange(dateRange);\n\n if (mode === 'single') {\n // only use the start date.\n return this.selectedDateRange$.pipe(\n distinctUntilChanged(isSameDateDayRange),\n map((inputDateRange) => {\n const date = inputDateRange?.start;\n return date ? (minMaxClamp(dateRange({ ...dateRangeInput, date } as DateRangeInput)) as DateRange) : null;\n })\n );\n } else {\n // take the first date, then wait unless the date is outside of the range.\n return this.selectedDateRange$.pipe(\n scan((acc: FixedDateRangeScan, nextDateRange: Maybe<Partial<DateRange>>) => {\n let result: FixedDateRangeScan;\n let pickType: Maybe<FixedDateRangeScanType> = 'start';\n\n if (nextDateRange && nextDateRange.start != null) {\n const { start: startOrNextDate, end } = nextDateRange;\n const potentialBoundary = dateRange({ ...dateRangeInput, date: startOrNextDate } as DateRangeInput);\n\n // only comes through when passed by the text inputs\n if (startOrNextDate && end) {\n const range = clampDateRangeToDateRange(nextDateRange, potentialBoundary) as DateRange;\n result = {\n lastDateRange: nextDateRange,\n boundary: range,\n range\n };\n\n // for normal mode we want to protect against \"start\" being input, then the output being passed,\n // and then the next click being treated as another \"start\" instead of an \"end\".\n if (mode === 'normal' && acc.lastPickType === 'start' && isSameDateDay(startOrNextDate, end)) {\n if (isSameDateDay(startOrNextDate, acc.lastDateRange?.start)) {\n pickType = 'startRepeat';\n }\n }\n } else {\n let range: Maybe<DateRange> = undefined;\n let boundary: Maybe<DateRange> = potentialBoundary;\n\n if (mode === 'normal') {\n if (!hasDateRangeConfiguration) {\n // if there is no configured range/boundary, then just set the pick type based on the last type\n boundary = undefined;\n pickType = acc.lastPickType === 'start' ? 'end' : 'start';\n } else if (acc.lastPickType === 'startRepeat') {\n pickType = 'end';\n } else {\n // if the pick is outside the boundary, then consider it a start pick type.\n pickType = acc.lastPickType === 'start' && acc.boundary && isDateInDateRange(startOrNextDate, acc.boundary) ? 'end' : 'start';\n }\n\n // react based on how this\n switch (pickType) {\n case 'end':\n const lastStart = acc.lastDateRange?.start as Date;\n\n let boundaryToCheck: DateRange;\n const selectionIsBeforePreviousSelection = !lastStart || isBefore(startOrNextDate, lastStart);\n\n let nextStart: Date;\n let nextEnd: Date;\n\n if (selectionIsBeforePreviousSelection) {\n nextStart = startOrNextDate;\n nextEnd = lastStart;\n boundaryToCheck = potentialBoundary;\n } else {\n nextStart = lastStart;\n nextEnd = startOrNextDate;\n boundaryToCheck = dateRange({ ...dateRangeInput, date: nextStart } as DateRangeInput);\n }\n\n // Recalculate the boundary using the next start date. If it is outside the selectable range, then it becomes a \"start\" pick type.\n if (isBefore(boundaryToCheck.end, nextEnd)) {\n // TODO: Allow changing the behavior to fill the entire range instead of just resetting it entirely\n\n nextStart = startOrNextDate;\n nextEnd = startOrNextDate;\n pickType = 'start';\n boundary = boundaryToCheck;\n } else {\n boundary = range;\n }\n\n // if we're picking the end then set the range.\n range = {\n start: nextStart,\n end: nextEnd\n };\n break;\n case 'start':\n // retain the boundary as potential boundary, and set our new range from the single date.\n range = {\n start: startOrNextDate as Date,\n end: startOrNextDate as Date\n };\n break;\n }\n } else if (acc.boundary && isDateInDateRange(startOrNextDate, acc.boundary)) {\n // if in the date range, uses the pick as the last date.\n range = {\n start: acc.boundary.start,\n end: startOrNextDate\n };\n\n if (mode === 'arbitrary_quick') {\n // modify boundary to match range\n if (isSameDateRange(acc.range, range) && isSameDateDay(range.end, startOrNextDate)) {\n // if we clicked on the end range, then expand the boundary again to the full range.\n range = dateRange({ ...dateRangeInput, date: range.start } as DateRangeInput);\n boundary = range;\n } else {\n boundary = range;\n }\n } else {\n // retain same boundary\n boundary = acc.boundary;\n }\n } else if (mode === 'arbitrary_quick') {\n range = potentialBoundary;\n }\n\n result = {\n lastDateRange: nextDateRange,\n boundary,\n range\n };\n }\n } else {\n result = {\n lastDateRange: nextDateRange\n };\n }\n\n if (result) {\n result = {\n lastPickType: pickType,\n lastDateRange: result.lastDateRange,\n boundary: result.boundary ? (minMaxClamp(result.boundary) as DateRange) : undefined,\n range: result.range ? (minMaxClamp(result.range) as DateRange) : undefined\n };\n }\n\n return result;\n }, {}),\n filter((x) => !x.lastDateRange || x.range != null), // pass through null/date clearings or ranges\n map((x) => x.range ?? null) // return the range\n );\n }\n })\n );\n\n return result;\n }\n\n readonly fullBoundary$: Observable<Maybe<DateRange>> = this.dateRangeSelectionForMode('single').pipe(shareReplay(1));\n readonly latestBoundary$: Observable<Maybe<DateRange>> = this.selectionMode$.pipe(\n switchMap((mode) => {\n if (mode === 'arbitrary_quick') {\n // in arbitrary_quick mode, the latest value is the boundary, since we always set the value immediately.\n return this.valueInSystemTimezone$;\n } else {\n return this.fullBoundary$;\n }\n })\n );\n\n /**\n * Focuses on the date any time the selection event from the picker occured, otherwise use the system value\n */\n readonly calendarFocusDate$: Observable<Date> = this._selectionEvent.pipe(startWith(null)).pipe(\n switchMap((selectionEvent) => {\n if (selectionEvent && selectionEvent.type === 'calendar' && selectionEvent.range?.start) {\n return of(selectionEvent.range.start);\n } else {\n return this.fullBoundary$.pipe(\n first(),\n map((fullBoundary) => {\n return fullBoundary?.start ?? selectionEvent?.range?.start;\n })\n );\n }\n }),\n filterMaybe(),\n shareReplay(1)\n );\n\n readonly dateRangeSelection$: Observable<Maybe<DateRange>> = this.selectionMode$.pipe(switchMap((mode) => this.dateRangeSelectionForMode(mode)));\n\n readonly calendarSelection$: Observable<DatePickerDateRange<Date> | null> = this.valueInSystemTimezone$.pipe(\n map((x) => (x ? new DatePickerDateRange<Date>(x.start, x.end) : null)),\n shareReplay(1)\n );\n\n readonly endDisabled$ = this.selectionMode$.pipe(\n map((x) => x === 'single'),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly inputRangeForm = new FormGroup({\n start: new FormControl<Maybe<Date>>(null),\n end: new FormControl<Maybe<Date>>(null)\n });\n\n get fixedDateRangeField(): DbxFixedDateRangeFieldProps {\n return this.field.props;\n }\n\n get selectionMode() {\n return this.field.props.selectionMode;\n }\n\n get valueMode(): DbxDateTimeValueMode {\n return this.field.props.valueMode ?? DbxDateTimeValueMode.DATE;\n }\n\n get description(): Maybe<string> {\n return this.field.props.description;\n }\n\n get timezone() {\n return this.field.props.timezone;\n }\n\n get showTimezone() {\n return this.field.props.showTimezone ?? true;\n }\n\n get presets() {\n return this.field.props.presets;\n }\n\n get showRangeInput() {\n return this.field.props.showRangeInput ?? true;\n }\n\n readonly minMaxRange$ = this.limitDateTimeInstance$.pipe(\n combineLatestWith(timer(MS_IN_MINUTE)), // refresh every minute\n map(([x]) => x.dateRange()),\n distinctUntilChanged(isSameDateDayRange),\n shareReplay(1)\n );\n\n readonly min$ = this.minMaxRange$.pipe(\n map((x) => x?.start ?? null),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly max$ = this.minMaxRange$.pipe(\n map((x) => x?.end ?? null),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly pickerFilter$: Observable<DecisionFunction<Date | null>> = this.config$.pipe(\n distinctUntilChanged(),\n map((x) => {\n if (x) {\n const filter = dateTimeMinuteWholeDayDecisionFunction(x, false);\n return (x: Date | null) => (x != null ? filter(x) : true);\n } else {\n return () => true;\n }\n }),\n shareReplay(1)\n );\n\n readonly defaultPickerFilter: DecisionFunction<Date | null> = () => true;\n\n readonly minDateSignal = toSignal(this.min$, { initialValue: null });\n readonly maxDateSignal = toSignal(this.max$, { initialValue: null });\n readonly endDisabledSignal = toSignal(this.endDisabled$);\n readonly latestBoundarySignal = toSignal(this.latestBoundary$);\n readonly calendarSelectionSignal = toSignal(this.calendarSelection$, { initialValue: null });\n readonly pickerFilterSignal = toSignal(this.pickerFilter$, { initialValue: this.defaultPickerFilter });\n\n ngOnInit(): void {\n this._formControlObs.next(this.formControl);\n\n const dateRangeSelection = this.dateRangeSelection$.pipe(shareReplay(1));\n\n const setInputFormValue = (value: Maybe<DateRange>) => {\n if (!isSameDateDayRange(value, this.inputRangeForm.value as Partial<DateRange>)) {\n this.inputRangeForm.setValue({\n start: value?.start ?? null,\n end: value?.end ?? null\n });\n }\n };\n\n this._sub.subscription = this.valueInSystemTimezone$\n .pipe(\n combineLatestWith(this.timezoneInstance$.pipe(map((timezoneInstance) => dbxFixedDateRangeOutputValueFactory(this.valueMode, timezoneInstance)))),\n throttleTime(TIME_OUTPUT_THROTTLE_TIME, undefined, { leading: false, trailing: true }),\n switchMap(([currentValue, valueFactory]) => {\n return dateRangeSelection.pipe(\n skipAllInitialMaybe(),\n distinctUntilChanged<Maybe<DateRange>>(isSameDateDayRange),\n map((x) => [x, currentValue, valueFactory] as [typeof x, typeof currentValue, typeof valueFactory])\n );\n })\n )\n .subscribe(([rawValue, currentValue, valueFactory]) => {\n const value = rawValue ? valueFactory(rawValue) : null;\n const isSameRange = dbxDateRangeIsSameDateRangeFieldValue(value, currentValue);\n\n if (!isSameRange) {\n this.formControl.setValue(value);\n this.formControl.markAsDirty();\n this.formControl.markAsTouched();\n } else if (rawValue != null) {\n // update the input text again\n setInputFormValue(rawValue);\n }\n });\n\n if (this.selectionMode) {\n this._selectionMode.next(asObservableFromGetter(this.selectionMode));\n }\n\n this._currentSelectionModeSub.subscription = this.selectionMode$.subscribe((x) => this.currentSelectionModeSignal.set(x));\n this._dateRangeInputSub.subscription = this.dateRangeInput$.subscribe((x) => this.currentDateRangeInputSignal.set(x));\n\n this._inputRangeFormSub.subscription = this.valueInSystemTimezone$.subscribe((x: Maybe<DateRange>) => {\n setInputFormValue(x);\n });\n\n if (this.showRangeInput) {\n this._inputRangeFormValueSub.subscription = this.valueInSystemTimezone$\n .pipe(\n throttleTime(100), // throttle to prevent the value from changing too fast\n switchMap(() => {\n return this.inputRangeForm.valueChanges.pipe(\n debounceTime(500),\n filter(() => {\n const startString = this.startDateInputElement()?.nativeElement?.value;\n let valid = isMonthDaySlashDate(startString);\n\n if (valid && this.currentSelectionModeSignal() !== 'single') {\n const endString = this.endDateInputElement()?.nativeElement?.value;\n valid = isMonthDaySlashDate(endString);\n }\n\n return valid; // must be a valid text input\n }),\n map((x) => x as Maybe<Partial<DateRange>>)\n );\n }),\n distinctUntilChanged(isSameDateRange)\n )\n .subscribe((x: Maybe<Partial<DateRange>>) => {\n const currentSelectionMode = this.currentSelectionModeSignal();\n\n if (currentSelectionMode === 'single') {\n this.setDateRange(x?.start ? { start: x.start } : null, 'input');\n } else {\n let rangeToSet: Maybe<Partial<DateRange>> = x;\n\n const latestBoundary = this.latestBoundarySignal();\n\n if (currentSelectionMode === 'arbitrary_quick' && latestBoundary && x?.start && x?.end) {\n if (!isDateInDateRange(x.start, latestBoundary)) {\n // if the end date it outside of the current range (i.e. a range was typed in only to the start date) then set the end to the boundary end\n const boundary = dateRange({ ...this.currentDateRangeInputSignal(), date: x.start } as DateRangeInput);\n rangeToSet = { start: x.start, end: boundary.end };\n }\n }\n\n this.setDateRange(rangeToSet, 'input');\n }\n });\n }\n\n this._dateRangeInput.next(asObservableFromGetter(this.fixedDateRangeField.dateRangeInput));\n\n this._disableEndSub.subscription = this.endDisabled$.subscribe((disabled) => {\n const end = this.inputRangeForm.get('end');\n\n if (end) {\n if (disabled) {\n end.disable();\n } else {\n end.enable();\n }\n }\n });\n\n const inputPickerConfig = this.fixedDateRangeField.pickerConfig;\n this._config.next(inputPickerConfig ? asObservableFromGetter(inputPickerConfig) : undefined);\n\n // Set default timezone if provided.\n if (this.timezone && !this.fixedDateRangeField.fullDayInUTC) {\n this._timezone.next(asObservableFromGetter(this.timezone));\n }\n\n // Watch for disabled changes so we can propogate them properly.\n this.formControl.registerOnDisabledChange((disabled) => {\n if (disabled) {\n this.inputRangeForm.disable();\n } else {\n this.inputRangeForm.enable();\n\n this.endDisabled$.pipe(first()).subscribe((disabled) => {\n const end = this.inputRangeForm.get('end');\n\n if (end) {\n if (disabled) {\n end.disable();\n } else {\n end.enable();\n }\n }\n });\n }\n });\n\n if (this.presets != null) {\n this._presets.next(asObservableFromGetter(this.presets));\n } else {\n this._presets.next(this.dbxDateTimeFieldMenuPresetsService.configurations$);\n }\n\n this._activeDateSub.subscription = this.calendarFocusDate$.subscribe((x) => {\n this.calendar().activeDate = x;\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._sub.destroy();\n this._inputRangeFormSub.destroy();\n this._inputRangeFormValueSub.destroy();\n this._dateRangeInputSub.destroy();\n this._currentSelectionModeSub.destroy();\n this._latestBoundarySub.destroy();\n this._disableEndSub.destroy();\n this._activeDateSub.destroy();\n this._config.complete();\n this._selectionMode.complete();\n this._dateRangeInput.complete();\n this._timezone.complete();\n this._presets.complete();\n this._selectionEvent.complete();\n this._formControlObs.complete();\n }\n\n selectedChange(date: Maybe<Date>): void {\n this.setDateRange(date ? { start: date } : null, 'calendar');\n }\n\n setDateRange(range: Maybe<Partial<DateRange>>, type: SelectedDateEventType) {\n this._selectionEvent.next({ type, range });\n }\n\n _createDateRange(date: Maybe<Date>): Maybe<DateRange> {\n return date ? dateRange({ ...this.currentDateRangeInputSignal(), date } as DateRangeInput) : undefined;\n }\n}\n\n@Injectable()\nexport class DbxFixedDateRangeFieldSelectionStrategy<D> implements MatDateRangeSelectionStrategy<D> {\n private readonly _dateAdapter = inject(DateAdapter<D>);\n readonly dbxFixedDateRangeFieldComponent = inject(DbxFixedDateRangeFieldComponent);\n\n selectionFinished(date: D | null, currentRange: DatePickerDateRange<D>, event: Event): DatePickerDateRange<D> {\n // unused\n return currentRange;\n }\n\n createPreview(activeDate: D | null, currentRange: DatePickerDateRange<D>, event: Event): DatePickerDateRange<D> {\n const { currentSelectionModeSignal, latestBoundarySignal } = this.dbxFixedDateRangeFieldComponent;\n const currentSelectionMode = currentSelectionModeSignal();\n\n if (activeDate != null && currentSelectionMode !== 'single') {\n const latestBoundary = latestBoundarySignal();\n const date = this.dateFromAdapterDate(activeDate);\n\n if (latestBoundary && (currentSelectionMode === 'normal' || isDateInDateRange(date, latestBoundary))) {\n const exampleDateRange = this._createDateRange(latestBoundary);\n return exampleDateRange;\n }\n }\n\n return this._createDateRangeWithDate(activeDate);\n }\n\n private _createDateRangeWithDate(input: D | null): DatePickerDateRange<D> {\n let dateRange: Maybe<DateRange>;\n\n if (input) {\n const date = this.dateFromAdapterDate(input);\n dateRange = this.dbxFixedDateRangeFieldComponent._createDateRange(date);\n }\n\n return this._createDateRange(dateRange);\n }\n\n private _createDateRange(input: Maybe<DateRange>): DatePickerDateRange<D> {\n if (input) {\n return new DatePickerDateRange<D>(this.adapterDateFromDate(input.start), this.adapterDateFromDate(input.end));\n } else {\n return new DatePickerDateRange<D>(null, null);\n }\n }\n\n dateFromAdapterDate(input: D) {\n const day: DayOfMonth = this._dateAdapter.getDate(input);\n const monthIndex: DateMonth = this._dateAdapter.getMonth(input);\n const year: YearNumber = this._dateAdapter.getYear(input);\n return new Date(year, monthIndex, day);\n }\n\n adapterDateFromDate(date: Date): D {\n const day: DayOfMonth = date.getDate();\n const monthIndex: DateMonth = date.getMonth();\n const year: YearNumber = date.getFullYear();\n\n return this._dateAdapter.createDate(year, monthIndex, day);\n }\n}\n","<div class=\"dbx-fixeddaterange-field\">\n <mat-calendar #calendarView [selected]=\"calendarSelectionSignal()\" [dateFilter]=\"pickerFilterSignal()\" [minDate]=\"minDateSignal()\" [maxDate]=\"maxDateSignal()\" (selectedChange)=\"selectedChange($event)\"></mat-calendar>\n <mat-form-field class=\"dbx-fixeddaterange-field-input\" appearance=\"fill\">\n @if (showRangeInput) {\n <mat-date-range-input [formGroup]=\"inputRangeForm\">\n <input #startDateInput matStartDate formControlName=\"start\" placeholder=\"Start date\" />\n <input #endDateInput [ngClass]=\"endDisabledSignal() ? 'dbx-fixeddaterange-field-input-end' : ''\" [attr.tabindex]=\"endDisabledSignal() ? -1 : 0\" matEndDate formControlName=\"end\" placeholder=\"End date\" />\n </mat-date-range-input>\n }\n </mat-form-field>\n @if (formControl.hasError('required')) {\n <mat-error>Date range is required</mat-error>\n }\n</div>\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxDateTimeFieldComponent } from './datetime.field.component';\nimport { DbxFormFormlyWrapperModule } from '../../wrapper/wrapper.module';\nimport { DbxFixedDateRangeFieldComponent } from './fixeddaterange.field.component';\n\nconst importsAndExports = [DbxDateTimeFieldComponent, DbxFixedDateRangeFieldComponent, DbxFormFormlyWrapperModule];\n\n@NgModule({\n imports: [\n ...importsAndExports,\n FormlyModule.forChild({\n types: [\n //\n { name: 'datetime', component: DbxDateTimeFieldComponent, wrappers: ['style', 'form-field'] },\n { name: 'fixeddaterange', component: DbxFixedDateRangeFieldComponent, wrappers: ['style', 'form-field'] }\n ]\n })\n ],\n exports: importsAndExports\n})\nexport class DbxFormFormlyDateFieldModule {}\n","import { type DbxFormStyleWrapperConfig } from './style.wrapper.component';\nimport { type DbxFlexWrapperConfig } from './flex.wrapper.component';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type DbxFormToggleWrapperConfig } from './toggle.wrapper.component';\nimport { type DbxFormSectionConfig } from './section.wrapper.component';\nimport { type DbxFormSubsectionConfig } from './subsection.wrapper.component';\nimport { type DbxFormInfoConfig } from './info.wrapper.component';\nimport { type DbxFormExpandWrapperConfig } from './expand.wrapper.component';\nimport { type DbxFlexSize } from '@dereekb/dbx-web';\nimport { type DbxFormWorkingWrapperConfig } from './working.wrapper.component';\nimport { AUTO_TOUCH_WRAPPER_KEY, EXPAND_WRAPPER_KEY, TOGGLE_WRAPPER_KEY, SECTION_WRAPPER_KEY, SUBSECTION_WRAPPER_KEY, INFO_WRAPPER_KEY, STYLE_WRAPPER_KEY, WORKING_WRAPPER_KEY } from './wrapper.key';\n\nexport type WrapperFormlyFieldConfig<P, C extends FormlyFieldConfig> = FormlyFieldConfig<P> & {\n wrappers: string[];\n props: P;\n fieldGroup: [C];\n};\n\nexport function addWrapperToFormlyFieldConfig<C extends FormlyFieldConfig, P extends object>(fieldConfig: C, wrapperKey: string, wrapperProps: P): WrapperFormlyFieldConfig<P, C> {\n return {\n wrappers: [wrapperKey],\n props: wrapperProps,\n fieldGroup: [fieldConfig]\n };\n}\n\nexport function autoTouchWrapper<T extends object, C extends FormlyFieldConfig>(fieldConfig: C, autoTouchWrapper: DbxFormExpandWrapperConfig<T> = {}) {\n return addWrapperToFormlyFieldConfig<C, DbxFormExpandWrapperConfig<T>>(fieldConfig, AUTO_TOUCH_WRAPPER_KEY, autoTouchWrapper);\n}\n\nexport function expandWrapper<T extends object, C extends FormlyFieldConfig>(fieldConfig: C, expandWrapper: DbxFormExpandWrapperConfig<T> = {}) {\n return addWrapperToFormlyFieldConfig<C, DbxFormExpandWrapperConfig<T>>(fieldConfig, EXPAND_WRAPPER_KEY, expandWrapper);\n}\n\nexport function toggleWrapper<C extends FormlyFieldConfig>(fieldConfig: C, toggleWrapper: DbxFormToggleWrapperConfig = {}) {\n return addWrapperToFormlyFieldConfig<C, DbxFormToggleWrapperConfig>(fieldConfig, TOGGLE_WRAPPER_KEY, toggleWrapper);\n}\n\nexport function sectionWrapper<C extends FormlyFieldConfig>(fieldConfig: C, sectionWrapper: DbxFormSectionConfig = {}) {\n return addWrapperToFormlyFieldConfig<C, DbxFormSectionConfig>(fieldConfig, SECTION_WRAPPER_KEY, sectionWrapper);\n}\n\nexport function subsectionWrapper<C extends FormlyFieldConfig>(fieldConfig: C, subsectionWrapper: DbxFormSubsectionConfig = {}) {\n return addWrapperToFormlyFieldConfig<C, DbxFormSubsectionConfig>(fieldConfig, SUBSECTION_WRAPPER_KEY, subsectionWrapper);\n}\n\nexport function infoWrapper<C extends FormlyFieldConfig>(fieldConfig: C, infoWrapper: DbxFormInfoConfig) {\n return addWrapperToFormlyFieldConfig<C, DbxFormInfoConfig>(fieldConfig, INFO_WRAPPER_KEY, infoWrapper);\n}\n\nexport function styleWrapper<C extends FormlyFieldConfig>(fieldConfig: C, styleWrapper: DbxFormStyleWrapperConfig) {\n return addWrapperToFormlyFieldConfig<C, DbxFormStyleWrapperConfig>(fieldConfig, STYLE_WRAPPER_KEY, styleWrapper);\n}\n\nexport function workingWrapper<C extends FormlyFieldConfig>(fieldConfig: C, workingWrapper: DbxFormWorkingWrapperConfig = {}) {\n return addWrapperToFormlyFieldConfig<C, DbxFormWorkingWrapperConfig>(fieldConfig, WORKING_WRAPPER_KEY, workingWrapper);\n}\n\nexport interface DbxFlexLayoutWrapperGroupFieldConfig {\n field: FormlyFieldConfig;\n /**\n * Flex space sizing for the field. If undefined it will default to the provided default size.\n */\n size?: DbxFlexSize;\n}\n\nexport interface DbxFlexLayoutWrapperGroupFieldConfigDefaults extends DbxFlexWrapperConfig, Omit<DbxFlexLayoutWrapperGroupFieldConfig, 'field'> {}\n\nexport function checkIsFieldFlexLayoutGroupFieldConfig(input: FormlyFieldConfig | DbxFlexLayoutWrapperGroupFieldConfig): input is DbxFlexLayoutWrapperGroupFieldConfig {\n if ((input as DbxFlexLayoutWrapperGroupFieldConfig).field != null) {\n return true;\n } else {\n return false;\n }\n}\n\nexport function flexLayoutWrapper(fieldConfigs: (FormlyFieldConfig | DbxFlexLayoutWrapperGroupFieldConfig)[], { relative, breakpoint, breakToColumn, size: defaultSize = 2 }: DbxFlexLayoutWrapperGroupFieldConfigDefaults = {}): FormlyFieldConfig<DbxFlexWrapperConfig> {\n return {\n wrappers: ['flex'],\n fieldGroupClassName: 'dbx-flex-group',\n // fieldGroupClassName: 'field-layout-group',\n props: {\n breakpoint,\n breakToColumn,\n relative\n },\n fieldGroup: fieldConfigs.map((inputConfig) => {\n const fieldConfig: DbxFlexLayoutWrapperGroupFieldConfig = checkIsFieldFlexLayoutGroupFieldConfig(inputConfig)\n ? inputConfig\n : {\n field: inputConfig\n };\n\n const { field, size = defaultSize } = fieldConfig;\n const className = `dbx-flex-${size}`;\n\n return {\n ...field,\n className\n };\n })\n };\n}\n\n// TODO: Add addon wrapper/extension from this demo:\n// https://formly.dev/docs/examples/other/material-prefix-suffix\n\n/*\nexport interface NumberFieldAddon {\n readonly text?: Maybe<string>;\n readonly icon?: Maybe<string>;\n}\n \nreadonly addonLeft?: Maybe<NumberFieldAddon>;\nreadonly addonRight?: Maybe<NumberFieldAddon>;\n*/\n","import { type Observable, of } from 'rxjs';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig, type DescriptionFieldConfig, type MaterialFormFieldConfig } from '../../field';\nimport { type DbxDateTimeFieldProps, DbxDateTimeFieldTimeMode, type DbxDateTimePickerConfiguration } from './datetime.field.component';\nimport { flexLayoutWrapper } from '../../wrapper/wrapper';\nimport { type Maybe } from '@dereekb/util';\nimport { type DbxFixedDateRangeFieldProps } from './fixeddaterange.field.component';\n\nexport interface DateTimeFieldConfig extends LabeledFieldConfig, DescriptionFieldConfig, DbxDateTimeFieldProps, MaterialFormFieldConfig {}\nexport type TimeFieldConfig = Omit<DateTimeFieldConfig, 'showDate' | 'timeOnly'>;\n\nexport const TAKE_NEXT_UPCOMING_TIME_CONFIG_OBS: () => Observable<DbxDateTimePickerConfiguration> = () =>\n of({\n takeNextUpcomingTime: true,\n roundDownToMinute: true\n });\n\n/**\n * Same as DateTime field but with the Date input hidden by default.\n */\nexport function timeOnlyField(config: Partial<TimeFieldConfig> = {}): FormlyFieldConfig {\n return dateTimeField({\n ...config,\n timeMode: DbxDateTimeFieldTimeMode.REQUIRED,\n timeOnly: true\n });\n}\n\nexport function dateTimeField(config: Partial<DateTimeFieldConfig> = {}) {\n const { key = 'date', showClearButton, dateLabel, timeLabel, allDayLabel, atTimeLabel, timeDate, timezone, minuteStep, showTimezone, timeMode = DbxDateTimeFieldTimeMode.REQUIRED, valueMode, alwaysShowDateInput, autofillDateWhenTimeIsPicked, fullDayInUTC, fullDayFieldName, pickerConfig, getSyncFieldsObs, hideDatePicker, hideDateHint, timeOnly = false, presets, materialFormField } = config;\n\n const classGetter = 'dbx-mat-form-field-disable-underline dbx-mat-form-date-time-field-wrapper';\n const fieldConfig: FormlyFieldConfig<DbxDateTimeFieldProps> = formlyField({\n key,\n type: 'datetime',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n showClearButton,\n classGetter,\n dateLabel,\n timeLabel,\n allDayLabel,\n atTimeLabel,\n valueMode,\n timeOnly,\n presets,\n minuteStep,\n timeMode: timeOnly ? DbxDateTimeFieldTimeMode.REQUIRED : timeMode,\n alwaysShowDateInput,\n autofillDateWhenTimeIsPicked,\n timezone,\n timeDate,\n showTimezone,\n fullDayFieldName,\n fullDayInUTC,\n hideDatePicker,\n hideDateHint,\n pickerConfig,\n getSyncFieldsObs\n })\n });\n\n return fieldConfig;\n}\n\nexport type DateDateRangeFieldDateConfig = Omit<DateTimeFieldConfig, 'dateLabel' | 'timeOnly' | 'timeMode' | 'getSyncFieldsObs'>;\n\nexport interface DateDateRangeFieldConfig extends Pick<DateTimeFieldConfig, 'timeDate' | 'timezone' | 'showTimezone' | 'presets' | 'valueMode' | 'minuteStep'> {\n required?: boolean;\n start?: Partial<DateDateRangeFieldDateConfig>;\n end?: Partial<DateDateRangeFieldDateConfig>;\n}\n\nexport function dateRangeField(config: DateDateRangeFieldConfig = {}): FormlyFieldConfig {\n const { required: inputRequired, start, end, timeDate, timezone, showTimezone, presets, valueMode, minuteStep } = config;\n const required = inputRequired ?? start?.required ?? false;\n\n const startFieldKey = start?.key ?? 'start';\n const endFieldKey = end?.key ?? 'end';\n\n const startField = dateTimeField({\n dateLabel: 'Start',\n timeMode: DbxDateTimeFieldTimeMode.NONE,\n getSyncFieldsObs: () => of([{ syncWith: endFieldKey, syncType: 'after' }]),\n presets,\n allDayLabel: '',\n timeDate,\n timezone,\n showTimezone,\n valueMode,\n minuteStep,\n ...start,\n required,\n key: startFieldKey\n });\n\n const endField = dateTimeField({\n dateLabel: 'End',\n timeMode: DbxDateTimeFieldTimeMode.NONE,\n getSyncFieldsObs: () => of([{ syncWith: startFieldKey, syncType: 'before' }]),\n presets,\n allDayLabel: '',\n timeDate,\n timezone,\n showTimezone,\n valueMode,\n minuteStep,\n ...end,\n required,\n key: endFieldKey\n });\n\n return {\n key: undefined,\n fieldGroup: [flexLayoutWrapper([startField, endField], { relative: true, breakToColumn: true, breakpoint: 'large' })]\n };\n}\n\nexport type DateTimeRangeFieldTimeConfig = Omit<DateDateRangeFieldDateConfig, 'allDayLabel' | 'fullDayFieldName' | 'fullDayInUTC'>;\n\nexport interface DateDateTimeRangeFieldConfig extends Pick<DateTimeFieldConfig, 'timeDate' | 'timezone' | 'showTimezone' | 'presets' | 'valueMode' | 'minuteStep'> {\n required?: boolean;\n start?: Partial<DateTimeRangeFieldTimeConfig>;\n end?: Partial<DateTimeRangeFieldTimeConfig>;\n}\n\nexport function dateTimeRangeField(inputConfig: DateDateTimeRangeFieldConfig = {}): FormlyFieldConfig {\n const { required = false, start: inputStart, end: inputEnd, timezone, timeDate, showTimezone, presets, valueMode, minuteStep } = inputConfig;\n\n function dateTimeRangeFieldConfig(config: Maybe<Partial<DateTimeRangeFieldTimeConfig>>): Partial<DateTimeFieldConfig> {\n return {\n valueMode,\n minuteStep,\n ...config,\n required,\n timeMode: DbxDateTimeFieldTimeMode.REQUIRED,\n getSyncFieldsObs: undefined,\n timeOnly: true,\n hideDateHint: true\n };\n }\n\n const startKey = inputStart?.key ?? 'start';\n const endKey = inputEnd?.key ?? 'end';\n\n const start: Partial<DateTimeFieldConfig> = {\n label: 'Start Time',\n ...dateTimeRangeFieldConfig(inputStart),\n key: startKey\n };\n\n const end: Partial<DateTimeFieldConfig> = {\n label: 'End Time',\n ...dateTimeRangeFieldConfig(inputEnd),\n key: endKey\n };\n\n const config = {\n timezone,\n timeDate,\n showTimezone,\n presets,\n start,\n end\n };\n\n return dateRangeField(config);\n}\n\n// MARK: FixedDateRange\nexport interface FixedDateRangeFieldConfig extends LabeledFieldConfig, DescriptionFieldConfig, DbxFixedDateRangeFieldProps, MaterialFormFieldConfig {}\n\nexport function fixedDateRangeField(config: Partial<FixedDateRangeFieldConfig> = {}) {\n const { key = 'dateRange', dateRangeInput, pickerConfig, timezone, selectionMode, showTimezone, valueMode, fullDayInUTC, presets, showRangeInput, materialFormField } = config;\n\n const classGetter = 'dbx-mat-form-field-disable-underline dbx-form-fixed-date-range-field-wrapper';\n const fieldConfig: FormlyFieldConfig<DbxDateTimeFieldProps> = formlyField({\n key,\n type: 'fixeddaterange',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n classGetter,\n dateRangeInput,\n pickerConfig,\n valueMode,\n presets,\n timezone,\n selectionMode,\n showTimezone,\n fullDayInUTC,\n showRangeInput\n })\n });\n\n return fieldConfig;\n}\n","import { type DateTimePresetConfiguration } from './datetime';\n\nexport const DEFAULT_DATE_TIME_FIELD_MENU_PRESETS_PRESETS: DateTimePresetConfiguration[] = [\n {\n label: '6:00AM',\n timeString: '6:00AM'\n },\n {\n label: '8:00AM',\n timeString: '8:00AM'\n },\n {\n label: '10:00AM',\n timeString: '10:00AM'\n },\n {\n label: 'Noon',\n timeString: '12:00PM'\n },\n {\n label: '2:00PM',\n timeString: '2:00PM'\n },\n {\n label: '5:00PM',\n timeString: '5:00PM'\n },\n {\n label: 'Midnight',\n timeString: '12:00AM'\n }\n];\n","import { type AbstractControl, type ValidationErrors, type ValidatorFn } from '@angular/forms';\n\nexport function isTruthy(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const value: boolean | undefined = control.value;\n\n if (!value) {\n return {\n isTruthy: value\n };\n }\n\n return {};\n };\n}\n","import { Validators, type ValidatorFn } from '@angular/forms';\nimport { HAS_WEBSITE_DOMAIN_NAME_REGEX } from '@dereekb/util';\n\nexport function isDomain(): ValidatorFn {\n return Validators.pattern(HAS_WEBSITE_DOMAIN_NAME_REGEX);\n}\n","import { type AbstractControl, type ValidatorFn } from '@angular/forms';\nimport { type KeyValueTupleFilter, allObjectsAreEqual, type EqualityComparatorFunction, KeyValueTypleValueFilter, type ObjectMap, valuesFromPOJO } from '@dereekb/util';\n\nexport const FIELD_VALUES_ARE_EQUAL_VALIDATION_KEY = 'fieldValuesAreEqual';\n\nexport interface FieldValuesAreEqualValidatorConfig<T extends object = object> {\n /**\n * Keys of the value to match on.\n *\n * If none are defined, then all fields from the control are matched.\n */\n keysFilter?: (keyof T)[];\n\n /**\n * Full filter to use, if defined.\n */\n valuesFilter?: KeyValueTupleFilter<T>;\n\n /**\n * Optional equivalence comparator.\n */\n isEqual?: EqualityComparatorFunction<T>;\n\n /**\n * Custom message for this validator.\n */\n message?: string;\n}\n\n/**\n * Validator for validating all values within an object.\n *\n * This is useful for validating a control group where two or more values are expected to be the same, such as a password and a password verification field.\n *\n * @param config\n * @returns\n */\nexport function fieldValuesAreEqualValidator<T extends object = object>(config: FieldValuesAreEqualValidatorConfig<T> = {}): ValidatorFn {\n const { keysFilter, valuesFilter: inputValuesFilter, isEqual = (a, b) => a === b, message = 'Field values are not equal.' } = config;\n\n const valuesFilter: KeyValueTupleFilter<T, keyof T> = inputValuesFilter ?? {\n valueFilter: KeyValueTypleValueFilter.NONE, // keep all values. Null/undefined should be processed.\n keysFilter\n };\n\n return (control: AbstractControl) => {\n const object: ObjectMap<T> = control.value;\n const values: T[] = valuesFromPOJO(object as T, valuesFilter);\n const isValid = allObjectsAreEqual(values, isEqual);\n\n if (isValid) {\n return null;\n } else {\n return {\n [FIELD_VALUES_ARE_EQUAL_VALIDATION_KEY]: { message }\n };\n }\n };\n}\n","import { type AbstractControl, type ValidationErrors, type ValidatorFn, Validators } from '@angular/forms';\nimport { isNumberDivisibleBy, nearestDivisibleValues } from '@dereekb/util';\n\n/**\n * Merges the use of the min and max validator.\n *\n * @param min\n * @param max\n * @returns\n */\nexport function isInRange(min: number = Number.MIN_SAFE_INTEGER, max: number = Number.MAX_SAFE_INTEGER): ValidatorFn {\n const minFn = Validators.min(min);\n const maxFn = Validators.max(max);\n\n return (control: AbstractControl): ValidationErrors | null => {\n const minError = minFn(control);\n const maxError = maxFn(control);\n\n let errors: ValidationErrors | null = null;\n\n if (minError || maxError) {\n errors = {\n ...minError,\n ...maxError\n };\n }\n\n return errors;\n };\n}\n\nexport const IS_DIVISIBLE_BY_VALIDATION_KEY = 'isDivisibleBy';\n\nexport interface IsDivisibleByError {\n value: number;\n nearest: number;\n divisor: number;\n message: string;\n}\n\n/**\n * Angular Form ValidationFn for checking isDivisibleBy the input divisor.\n *\n * @param divisor\n * @returns\n */\nexport function isDivisibleBy(divisor: number): ValidatorFn {\n if (divisor === 0) {\n throw new Error('Divisior must be greater than zero.');\n }\n\n return (control: AbstractControl): ValidationErrors | null => {\n const value: number | undefined = control.value;\n\n if (value != null && !isNumberDivisibleBy(value, divisor)) {\n const nearest = nearestDivisibleValues(value, divisor);\n return {\n [IS_DIVISIBLE_BY_VALIDATION_KEY]: {\n value,\n divisor,\n nearest,\n message: `Number must by divisible by ${divisor}. The two nearest valid values are ${nearest.nearestFloor} and ${nearest.nearestCeil}.`\n }\n };\n }\n\n return {};\n };\n}\n","import { first, switchMap, map, type Observable, of, catchError } from 'rxjs';\nimport { type AbstractControl, type AsyncValidatorFn } from '@angular/forms';\nimport { asyncPusherCache } from '@dereekb/rxjs';\n\nexport const FIELD_VALUE_IS_AVAILABLE_VALIDATION_KEY = 'fieldValueIsAvailable';\nexport const FIELD_VALUE_IS_AVAILABLE_ERROR_VALIDATION_KEY = 'fieldValueIsAvailableError';\n\nexport type FieldValueIsAvailableValidatorFunction<T> = (value: T) => Observable<boolean>;\n\nexport interface FieldValueIsAvailableValidatorConfig<T> {\n /**\n * How long to wait in between value changes.\n */\n throttle?: number;\n\n /**\n * Returns an observable that checks whether or not the value is currently available.\n *\n * @param value\n */\n readonly checkValueIsAvailable: FieldValueIsAvailableValidatorFunction<T>;\n\n /**\n * Custom message for this validator.\n */\n message?: string;\n}\n\n/**\n * Validator for validating all values within an object.\n *\n * This is useful for validating a control group where two or more values are expected to be the same, such as a password and a password verification field.\n *\n * @param config\n * @returns\n */\nexport function fieldValueIsAvailableValidator<T>(config: FieldValueIsAvailableValidatorConfig<T>): AsyncValidatorFn {\n const { throttle = 400, checkValueIsAvailable, message = 'This value is not available.' } = config;\n\n const pusher = asyncPusherCache<T>({\n throttle\n });\n\n return (control: AbstractControl) =>\n pusher(control.valueChanges)(control.value as T).pipe(\n switchMap((x) => checkValueIsAvailable(x)),\n map((isAvailable) => {\n if (isAvailable) {\n return null;\n } else {\n return {\n [FIELD_VALUE_IS_AVAILABLE_VALIDATION_KEY]: { message }\n };\n }\n }),\n catchError(() =>\n of({\n [FIELD_VALUE_IS_AVAILABLE_ERROR_VALIDATION_KEY]: { message: 'An error occured.' }\n })\n ),\n first()\n );\n}\n","import { type AbstractControl, type ValidationErrors, type ValidatorFn } from '@angular/forms';\nimport { e164PhoneNumberExtensionPair, isE164PhoneNumber as isE164PhoneNumberFunction, isValidPhoneExtensionNumber } from '@dereekb/util';\nimport { INVALID_PHONE_NUMBER_EXTENSION_MESSAGE, INVALID_PHONE_NUMBER_MESSAGE } from '../formly/config/validation';\n\n/**\n * Angular Form ValidationFn for checking isE164PhoneNumber the input divisor.\n *\n * @param divisor\n * @returns\n */\nexport function isE164PhoneNumber(allowExtension: boolean): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const value: string | undefined = control.value;\n\n if (value != null && !isE164PhoneNumberFunction(value, allowExtension)) {\n return {\n [INVALID_PHONE_NUMBER_MESSAGE.name]: true\n };\n }\n\n return {};\n };\n}\n\n/**\n * Angular Form ValidationFn for checking the input is a valid phone extension. Empty values return true.\n *\n * @param divisor\n * @returns\n */\nexport function isPhoneExtension(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const value: string | number | undefined = control.value;\n\n if (value != null) {\n const asString = value.toString();\n\n if (asString.length > 0 && !isValidPhoneExtensionNumber(asString)) {\n return {\n [INVALID_PHONE_NUMBER_EXTENSION_MESSAGE.name]: true\n };\n }\n }\n\n return {};\n };\n}\n\nexport function isE164PhoneNumberWithValidExtension(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const value: string | undefined = control.value;\n\n if (value != null) {\n if (isE164PhoneNumberFunction(value, true)) {\n const pair = e164PhoneNumberExtensionPair(value);\n\n if (pair.extension && !isValidPhoneExtensionNumber(pair.extension)) {\n return {\n [INVALID_PHONE_NUMBER_EXTENSION_MESSAGE.name]: true\n };\n }\n } else {\n return {\n [INVALID_PHONE_NUMBER_MESSAGE.name]: true\n };\n }\n }\n\n return {};\n };\n}\n","import { type AbstractControl, type ValidationErrors, type ValidatorFn } from '@angular/forms';\nimport { type ArrayOrValue, type Maybe, type WebsiteDomain, type WebsiteUrlDetails, asArray, isWebsiteUrlWithPrefix, websiteUrlDetails } from '@dereekb/util';\n\nexport const IS_NOT_WEBSITE_URL_VALIDATION_KEY = 'isNotWebsiteUrl';\nexport const IS_NOT_WEBSITE_URL_WITH_PREFIX_VALIDATION_KEY = 'isNotWebsiteUrlWithPrefix';\nexport const IS_NOT_WEBSITE_URL_WITH_EXPECTED_DOMAIN_VALIDATION_KEY = 'isNotWebsiteUrlWithExpectedDomain';\n\nexport interface IsNotWebsiteUrlErrorData {\n readonly value: string;\n readonly isPrefixRequired: boolean;\n readonly message: string;\n}\n\nexport interface IsWebsiteUrlValidatorConfig {\n /**\n * Whether or not to require an http/https prefix.\n *\n * Defaults to true.\n */\n readonly requirePrefix?: Maybe<boolean>;\n /**\n * Valid domains to accept.\n *\n * Defaults to undefined.\n */\n readonly validDomains?: Maybe<ArrayOrValue<WebsiteDomain>>;\n}\n\n/**\n * Angular Form ValidationFn for checking isDivisibleBy the input divisor.\n *\n * @param divisor\n * @returns\n */\nexport function isWebsiteUrlValidator(config?: IsWebsiteUrlValidatorConfig): ValidatorFn {\n const { requirePrefix, validDomains: inputValidDomains } = config ?? {};\n const isPrefixRequired = requirePrefix ?? true;\n const validDomains = asArray(inputValidDomains);\n const validDomainsSet = new Set(validDomains);\n const validateDomains = validDomainsSet.size > 0;\n\n const validateWebsiteValue: (details: WebsiteUrlDetails) => ValidationErrors | null = isPrefixRequired\n ? (details: WebsiteUrlDetails) => {\n return isWebsiteUrlWithPrefix(details.input)\n ? null\n : {\n [IS_NOT_WEBSITE_URL_WITH_PREFIX_VALIDATION_KEY]: {\n value: details.input,\n isPrefixRequired,\n message: `Value is not a website url with an http/https prefix.`\n }\n };\n }\n : (details: WebsiteUrlDetails) => {\n return details.isWebsiteUrl\n ? null\n : {\n [IS_NOT_WEBSITE_URL_VALIDATION_KEY]: {\n value: details.input,\n isPrefixRequired,\n message: `Value is not a valid website url.`\n }\n };\n };\n\n const validateWebsiteDomain: (details: WebsiteUrlDetails) => ValidationErrors | null = (details: WebsiteUrlDetails) => {\n let pass = validDomainsSet.size === 0 ? true : false;\n\n if (details.hasWebsiteDomain && validateDomains) {\n pass = validDomainsSet.has(details.domain);\n }\n\n return pass\n ? null\n : {\n [IS_NOT_WEBSITE_URL_WITH_EXPECTED_DOMAIN_VALIDATION_KEY]: {\n value: details.input,\n isPrefixRequired,\n validDomains,\n message: `Value is not a website url with one of the expected domains: ${validDomains.join(', ')}.`\n }\n };\n };\n\n return (control: AbstractControl): ValidationErrors | null => {\n const value: string | undefined = control.value;\n\n if (value != null) {\n const details = websiteUrlDetails(value);\n\n return {\n ...validateWebsiteValue(details),\n ...validateWebsiteDomain(details)\n };\n }\n\n return {};\n };\n}\n","import { type ValidatorFn } from '@angular/forms';\nimport { concatArrays, type TransformNumberFunctionConfigRef, transformNumberFunction, mapMaybeFunction, DOLLAR_AMOUNT_PRECISION } from '@dereekb/util';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { isDivisibleBy } from '../../../../validator';\nimport { type AttributesFieldConfig, type LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig, type DescriptionFieldConfig, validatorsForFieldConfig, type FieldConfigParsersRef, type FormlyValueParser, type MaterialFormFieldConfig } from '../../field';\n\n// MARK: Number Field\nexport interface NumberFieldNumberConfig {\n readonly min?: number;\n readonly max?: number;\n readonly step?: number;\n readonly enforceStep?: boolean;\n}\n\nexport type NumberFieldInputType = 'number';\n\nexport interface NumberFieldConfig extends LabeledFieldConfig, DescriptionFieldConfig, NumberFieldNumberConfig, AttributesFieldConfig, Partial<TransformNumberFunctionConfigRef>, MaterialFormFieldConfig {\n readonly inputType?: NumberFieldInputType;\n}\n\nexport function numberFieldTransformParser(config: Partial<FieldConfigParsersRef> & Partial<TransformNumberFunctionConfigRef>) {\n const { parsers: inputParsers, transform } = config;\n let parsers: FormlyValueParser[] | undefined;\n\n if (inputParsers) {\n parsers = inputParsers;\n }\n\n if (transform) {\n const transformParser: FormlyValueParser = mapMaybeFunction(transformNumberFunction(transform));\n parsers = concatArrays([transformParser], parsers);\n }\n\n return parsers;\n}\n\nexport function numberField(config: NumberFieldConfig): FormlyFieldConfig {\n const { key, min, max, step, enforceStep, inputType: type = 'number', materialFormField } = config;\n const parsers = numberFieldTransformParser(config);\n\n const validators: ValidatorFn[] = [];\n\n if (step && enforceStep) {\n validators.push(isDivisibleBy(step));\n }\n\n return formlyField({\n key,\n type: 'input',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n type,\n min,\n max,\n step\n }),\n ...validatorsForFieldConfig({\n validators\n }),\n parsers\n });\n}\n\n// MARK: Number Slider\nexport interface NumberSliderFieldConfig extends NumberFieldConfig {\n /**\n * Max value. Required for the slider.\n */\n readonly max: number;\n /**\n * Whether or not to show the thumb label while sliding.\n *\n * Defaults to true.\n *\n * Corresponds to \"discrete\" in Material.\n */\n readonly thumbLabel?: boolean;\n /**\n * Whether or not to invert the selection line.\n */\n readonly invertSelectionColoring?: boolean;\n /**\n * Tick interval. If not provided defaults to the step value, if provided. If false, the ticks are disabled.\n *\n * The tick interval is the number of \"steps\" to show between ticks.\n *\n * For example, a tick interval of 5 show a tick every 5 steps. If steps are 10, it will show a tick at every number divisible by 50 (5 * 10).\n */\n readonly tickInterval?: false | number;\n /**\n * Custom display with function for the thumbLabel.\n */\n readonly displayWith?: (value: number) => string;\n}\n\nexport function numberSliderField(config: NumberSliderFieldConfig): FormlyFieldConfig {\n const { key, min, max, step, enforceStep, inputType: type = 'number', materialFormField, thumbLabel: inputThumbLabel, tickInterval: inputTickInterval, invertSelectionColoring: invertedSelectionColoring = false, displayWith } = config;\n const parsers = numberFieldTransformParser(config);\n\n const validators: ValidatorFn[] = [];\n let tickIntervalFromSteps: number | undefined;\n\n if (step) {\n tickIntervalFromSteps = 1;\n\n if (enforceStep) {\n validators.push(isDivisibleBy(step));\n }\n }\n\n const tickInterval: number | undefined = inputTickInterval === false ? undefined : (inputTickInterval ?? tickIntervalFromSteps ?? undefined);\n return formlyField({\n key,\n type: 'slider',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n type,\n min,\n max,\n step,\n inverted: invertedSelectionColoring,\n discrete: inputThumbLabel ?? true,\n showTickMarks: Boolean(tickInterval),\n tickInterval,\n displayWith\n }),\n ...validatorsForFieldConfig({\n validators\n }),\n parsers\n });\n}\n\n// MARK: Dollar Amount Field\nexport type DollarAmountFieldConfig = Omit<NumberFieldConfig, 'roundToStep' | 'precision'>;\n\nexport function dollarAmountField(config: DollarAmountFieldConfig) {\n return numberField({ ...config, transform: { ...config.transform, precision: config.transform?.precision ?? DOLLAR_AMOUNT_PRECISION } }); // TODO: Add wrapper addon, addonLeft: { text: '$' }\n}\n","import { FormlyMaterialModule } from '@ngx-formly/material';\nimport { FormlyMatSliderModule } from '@ngx-formly/material/slider';\nimport { NgModule } from '@angular/core';\n\nconst importsAndExports = [FormlyMaterialModule, FormlyMatSliderModule];\n\n@NgModule({\n imports: importsAndExports,\n exports: importsAndExports\n})\nexport class DbxFormFormlyNumberFieldModule {}\n","import { Component, type OnInit, type OnDestroy, ChangeDetectionStrategy } from '@angular/core';\nimport { FieldType } from '@ngx-formly/material'; // extend FieldType from Material, not core!\nimport { type FieldTypeConfig, type FormlyFieldProps } from '@ngx-formly/core';\nimport { isPhoneExtension } from '../../../../validator/phone';\nimport { type E164PhoneNumber, type E164PhoneNumberExtensionPair, type Maybe, e164PhoneNumberExtensionPair, e164PhoneNumberFromE164PhoneNumberExtensionPair, objectHasNoKeys } from '@dereekb/util';\nimport { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { SubscriptionObject } from '@dereekb/rxjs';\nimport { combineLatest, distinctUntilChanged, map, startWith } from 'rxjs';\n\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\nimport { FormlyMatFormFieldModule } from '@ngx-formly/material/form-field';\nimport { NgxMatInputTelComponent } from 'ngx-mat-input-tel';\n\nexport interface InternationalPhoneFormlyFieldProps extends FormlyFieldProps {\n readonly preferredCountries?: Maybe<string[]>;\n readonly onlyCountries?: Maybe<string[]>;\n /**\n * Whether or not to enable the search feature. True by default.\n */\n readonly enableSearch?: boolean;\n /**\n * Whether or not to allow adding an extension. False by default.\n */\n readonly allowExtension?: boolean;\n}\n\nexport const DEFAULT_PREFERRED_COUNTRIES = ['us'];\n\n@Component({\n templateUrl: 'phone.field.component.html',\n imports: [MatInputModule, MatFormFieldModule, FormsModule, ReactiveFormsModule, MatIconModule, FlexLayoutModule, FormlyMatFormFieldModule, NgxMatInputTelComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxPhoneFieldComponent extends FieldType<FieldTypeConfig<InternationalPhoneFormlyFieldProps>> implements OnInit, OnDestroy {\n readonly inputSync = new SubscriptionObject();\n readonly outputSync = new SubscriptionObject();\n readonly extensionErrorSync = new SubscriptionObject();\n readonly phoneErrorSync = new SubscriptionObject();\n\n readonly phoneCtrl = new FormControl<string>('');\n readonly extensionCtrl = new FormControl<string>('', {\n validators: [isPhoneExtension()]\n });\n\n readonly inputFormGroup = new FormGroup({\n phone: this.phoneCtrl,\n extension: this.extensionCtrl\n });\n\n get enableSearch(): boolean {\n return this.props.enableSearch ?? true;\n }\n\n get preferredCountries(): string[] {\n return this.props.preferredCountries ?? DEFAULT_PREFERRED_COUNTRIES;\n }\n\n get onlyCountries(): string[] {\n return this.props.onlyCountries ?? [];\n }\n\n get allowExtension(): boolean {\n return this.props.allowExtension ?? false;\n }\n\n ngOnInit(): void {\n this.inputSync.subscription = this.formControl.valueChanges.pipe(startWith(this.formControl.value), distinctUntilChanged()).subscribe((inputValue) => {\n let phone: Maybe<string>;\n let extension: Maybe<string>;\n\n if (inputValue) {\n const pair = e164PhoneNumberExtensionPair(inputValue);\n phone = pair.number;\n extension = pair.extension;\n }\n\n // do not clear/reset if phone is undefined and the phone value is currently null\n if (phone || (!phone && this.phoneCtrl.value !== null)) {\n this.phoneCtrl.setValue(phone || '');\n this.extensionCtrl.setValue(extension || '');\n }\n });\n\n this.outputSync.subscription = combineLatest([this.phoneCtrl.valueChanges.pipe(distinctUntilChanged()), this.extensionCtrl.valueChanges.pipe(startWith(this.extensionCtrl.value), distinctUntilChanged())])\n .pipe(\n map(([phone, extension]) => {\n if (phone) {\n if (this.allowExtension) {\n return e164PhoneNumberFromE164PhoneNumberExtensionPair({\n number: phone as E164PhoneNumber,\n extension\n } as E164PhoneNumberExtensionPair);\n } else {\n return phone;\n }\n } else {\n return undefined;\n }\n }),\n distinctUntilChanged()\n )\n .subscribe((x) => {\n this.formControl.setValue(x);\n });\n\n /*\n * The phoneCtrl's errors are being used to drive the error matcher for this. Sync any invalid states with errors to phoneCtrl.\n * PhoneCtrl updates when the input is updated so it works.\n */\n this.extensionErrorSync.subscription = this.extensionCtrl.statusChanges.subscribe((x) => {\n if (x === 'INVALID') {\n this.phoneCtrl.setErrors(this.formControl.errors, { emitEvent: true });\n }\n });\n\n // sync any phoneCtrl errors with the errors of the form control.\n this.phoneErrorSync.subscription = this.inputFormGroup.statusChanges.subscribe((x) => {\n const errors = { ...this.phoneCtrl.errors, ...this.extensionCtrl.errors };\n this.formControl.setErrors(objectHasNoKeys(errors) ? null : errors, { emitEvent: true });\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this.inputSync.destroy();\n this.outputSync.destroy();\n this.extensionErrorSync.destroy();\n this.phoneErrorSync.destroy();\n }\n}\n","<div class=\"dbx-form-phone-field\" [formGroup]=\"inputFormGroup\">\n <ngx-mat-input-tel name=\"phone\" class=\"dbx-form-phone-field-phone-content\" [required]=\"required\" [enableSearch]=\"enableSearch\" [preferredCountries]=\"preferredCountries\" [enablePlaceholder]=\"false\" [formControl]=\"phoneCtrl\"></ngx-mat-input-tel>\n @if (allowExtension) {\n <div class=\"dbx-form-phone-field-extension-content\">\n <span class=\"dbx-hint dbx-button-spacer\">Ext.</span>\n <input name=\"phone-extension\" class=\"dbx-form-phone-field-extension-input\" placeholder=\"123\" minlength=\"0\" maxlength=\"6\" #extensionInput [formControl]=\"extensionCtrl\" />\n </div>\n }\n</div>\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxPhoneFieldComponent } from './phone.field.component';\n\nconst importsAndExports = [DbxPhoneFieldComponent];\n\n@NgModule({\n imports: [\n ...importsAndExports,\n FormlyModule.forChild({\n types: [{ name: 'intphone', component: DbxPhoneFieldComponent, wrappers: ['form-field'] }]\n })\n ],\n exports: importsAndExports\n})\nexport class DbxFormFormlyPhoneFieldModule {}\n","import { concatArrays, mapMaybeFunction, transformStringFunction, type TransformStringFunctionConfig, type TransformStringFunctionConfigRef } from '@dereekb/util';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type AttributesFieldConfig, type LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig, type DescriptionFieldConfig, type FormlyValueParser, type FieldConfigParsersRef, type MaterialFormFieldConfig } from '../../field';\n\nexport interface TextFieldLengthConfig {\n minLength?: number;\n maxLength?: number;\n}\n\nexport interface TextFieldPatternConfig {\n pattern?: string | RegExp;\n}\n\nexport type TextFieldInputType = 'text' | 'password' | 'email';\n\nexport interface TextFieldConfig extends LabeledFieldConfig, DescriptionFieldConfig, TextFieldPatternConfig, TextFieldLengthConfig, AttributesFieldConfig, Partial<TransformStringFunctionConfigRef>, MaterialFormFieldConfig {\n inputType?: TextFieldInputType;\n transform?: TransformStringFunctionConfig;\n}\n\nexport function textFieldTransformParser(config: Partial<FieldConfigParsersRef> & Partial<TransformStringFunctionConfigRef>) {\n const { parsers: inputParsers, transform } = config;\n let parsers: FormlyValueParser[] | undefined;\n\n if (inputParsers) {\n parsers = inputParsers;\n }\n\n if (transform) {\n const transformParser: FormlyValueParser = mapMaybeFunction(transformStringFunction(transform));\n parsers = concatArrays([transformParser], parsers);\n }\n\n return parsers;\n}\n\nexport function textField(config: TextFieldConfig): FormlyFieldConfig {\n const { transform, key, pattern, minLength, maxLength, inputType: type = 'text', materialFormField } = config;\n const parsers = textFieldTransformParser(config);\n\n return formlyField({\n key,\n type: 'input',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n type,\n minLength,\n maxLength,\n pattern\n }),\n parsers\n });\n}\n\nexport interface TextAreaFieldConfig extends LabeledFieldConfig, DescriptionFieldConfig, TextFieldPatternConfig, TextFieldLengthConfig, AttributesFieldConfig, Partial<TransformStringFunctionConfigRef>, MaterialFormFieldConfig {\n rows?: number;\n}\n\nexport function textAreaField(config: TextAreaFieldConfig): FormlyFieldConfig {\n const { key, rows = 3, pattern, minLength, maxLength, materialFormField } = config;\n const parsers = textFieldTransformParser(config);\n\n return formlyField({\n key,\n type: 'textarea',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n rows,\n minLength,\n maxLength,\n pattern\n }),\n parsers\n });\n}\n","import { type DbxFormSectionConfig } from '../../wrapper/section.wrapper.component';\nimport { sectionWrapper, flexLayoutWrapper } from '../../wrapper/wrapper';\nimport { textField, type TextFieldConfig } from '../text/text.field';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig, validatorsForFieldConfig } from '../../field';\nimport { type InternationalPhoneFormlyFieldProps } from './phone.field.component';\nimport { repeatArrayField, type RepeatArrayFieldConfig } from '../array/array.field';\nimport { isE164PhoneNumber } from '../../../../validator/phone';\n\nexport interface InternationalPhoneFieldConfig extends LabeledFieldConfig, InternationalPhoneFormlyFieldProps {}\n\nexport function phoneField(config: Partial<InternationalPhoneFieldConfig> = {}): FormlyFieldConfig<InternationalPhoneFormlyFieldProps> {\n const { key = 'phone', label = 'Phone Number', preferredCountries, enableSearch, onlyCountries, allowExtension: inputAllowExtension } = config;\n const allowExtension = inputAllowExtension ?? false;\n\n const fieldConfig = formlyField({\n key,\n type: 'intphone',\n ...propsAndConfigForFieldConfig(config, {\n label,\n preferredCountries,\n onlyCountries,\n enableSearch,\n allowExtension\n }),\n ...validatorsForFieldConfig({\n validators: [isE164PhoneNumber(allowExtension)]\n })\n });\n\n return fieldConfig;\n}\n\nexport interface WrappedPhoneAndLabelFieldConfig {\n readonly phoneField?: Partial<InternationalPhoneFieldConfig>;\n readonly labelField?: TextFieldConfig;\n}\n\n/**\n * Puts a phone and\n * @param param0\n * @returns\n */\nexport function wrappedPhoneAndLabelField({ phoneField: phone, labelField: label }: WrappedPhoneAndLabelFieldConfig = {}): FormlyFieldConfig {\n return flexLayoutWrapper(\n [\n {\n field: phoneField(phone),\n size: 2\n },\n {\n field: textField({\n key: 'label',\n label: 'Label',\n autocomplete: 'phone-label',\n ...label\n }),\n size: 4\n }\n ],\n { relative: true }\n );\n}\n\nexport interface PhoneAndLabelFieldSectionConfig extends DbxFormSectionConfig, WrappedPhoneAndLabelFieldConfig {\n readonly key?: string;\n}\n\nexport function phoneAndLabelSectionField({ key, header = 'Phone Number', hint, phoneField, labelField }: PhoneAndLabelFieldSectionConfig = {}): FormlyFieldConfig {\n return sectionWrapper(\n {\n key,\n fieldGroup: [wrappedPhoneAndLabelField({ phoneField, labelField })]\n },\n {\n header,\n hint\n }\n );\n}\n\nexport interface PhoneListFieldConfig extends Omit<RepeatArrayFieldConfig, 'repeatFieldGroup'> {\n phoneAndLabel?: WrappedPhoneAndLabelFieldConfig;\n repeatFieldGroup?: FormlyFieldConfig[];\n}\n\nexport function phoneListField(repeatConfig: Partial<PhoneListFieldConfig> = {}): FormlyFieldConfig {\n const { key = 'phones', label = 'Phone Numbers', addText = 'Add Phone Number', removeText = 'Remove Phone Number', repeatFieldGroup, phoneAndLabel } = repeatConfig;\n\n return repeatArrayField({\n ...repeatConfig,\n key,\n label,\n addText,\n removeText,\n repeatFieldGroup: repeatFieldGroup ?? [wrappedPhoneAndLabelField(phoneAndLabel)]\n });\n}\n","import { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { Validators, type AbstractControl } from '@angular/forms';\nimport { type TextFieldConfig, textField } from './text.field';\nimport { type LabeledFieldConfig, type DescriptionFieldConfig, validatorsForFieldConfig } from '../../field';\nimport { LAT_LNG_PATTERN, US_STATE_CODE_STRING_REGEX, ZIP_CODE_STRING_REGEX } from '@dereekb/util';\nimport { ADDRESS_CITY_MAX_LENGTH, ADDRESS_STATE_CODE_MAX_LENGTH, ADDRESS_STATE_MAX_LENGTH, ADDRESS_COUNTRY_MAX_LENGTH, ADDRESS_ZIP_MAX_LENGTH } from '@dereekb/model';\n\nexport const PHONE_LABEL_MAX_LENGTH = 100;\n\nexport const LABEL_STRING_MAX_LENGTH = 100;\nexport const SEARCH_STRING_MAX_LENGTH = 100;\n\n// MARK: Name Field\nexport function nameField(config: Partial<TextFieldConfig> = {}): FormlyFieldConfig {\n const { key = 'name', label = 'Name', placeholder = 'John Doe', required = false, minLength, maxLength, attributes } = config;\n\n return textField({\n ...config,\n key,\n label,\n placeholder,\n required,\n minLength,\n maxLength,\n attributes\n });\n}\n\n// MARK: Email Field\nexport interface EmailFieldConfig extends Partial<LabeledFieldConfig>, DescriptionFieldConfig {\n readonly rows?: number;\n}\n\nexport function emailField(config: EmailFieldConfig = {}): FormlyFieldConfig {\n const { key = 'email', label = 'Email Address', placeholder = 'you@example.com' } = config;\n const emailFieldConfig = textField({\n ...config,\n key,\n label,\n placeholder,\n inputType: 'email'\n });\n\n emailFieldConfig.validators = {\n email: {\n expression: (c: AbstractControl) => !Validators.email(c),\n message: () => `Not a valid email address.`\n }\n };\n\n return emailFieldConfig;\n}\n\n// MARK: City Field\nexport type CityFieldConfig = Partial<TextFieldConfig>;\n\nexport function cityField(config: CityFieldConfig = {}): FormlyFieldConfig {\n const { key = 'city', placeholder = '', label = 'City', autocomplete = 'city', maxLength = ADDRESS_CITY_MAX_LENGTH, required = false } = config;\n return textField({\n ...config,\n key,\n placeholder,\n label,\n autocomplete,\n required,\n maxLength\n });\n}\n\n// MARK: State Field\nexport interface StateFieldConfig extends Partial<TextFieldConfig> {\n readonly asCode?: boolean;\n}\n\nexport function stateField(config: StateFieldConfig = {}): FormlyFieldConfig {\n const { asCode = false, pattern = asCode ? US_STATE_CODE_STRING_REGEX : undefined, key = 'state', placeholder = '', label = 'State', autocomplete = 'state', maxLength = asCode ? ADDRESS_STATE_CODE_MAX_LENGTH : ADDRESS_STATE_MAX_LENGTH, transform, required = false } = config;\n return textField({\n ...config,\n key,\n placeholder,\n label,\n pattern,\n autocomplete,\n required,\n maxLength,\n transform: {\n ...transform,\n toUppercase: asCode || transform?.toUppercase\n }\n });\n}\n\n// MARK: Country Field\nexport type CountryFieldConfig = Partial<TextFieldConfig>;\n\nexport function countryField(config: CountryFieldConfig = {}): FormlyFieldConfig {\n const { key = 'country', placeholder = '', label = 'Country', autocomplete = 'country', maxLength = ADDRESS_COUNTRY_MAX_LENGTH, required = false } = config;\n return textField({\n ...config,\n key,\n placeholder,\n label,\n autocomplete,\n required,\n maxLength\n });\n}\n\n// MARK: Zip Code Field\nexport type ZipCodeFieldConfig = Partial<TextFieldConfig>;\n\nexport function zipCodeField(config: ZipCodeFieldConfig = {}): FormlyFieldConfig {\n const { key = 'zip', placeholder = '', label = 'Zip Code', autocomplete = 'postal-code', pattern = ZIP_CODE_STRING_REGEX, maxLength = ADDRESS_ZIP_MAX_LENGTH, required = false } = config;\n return textField({\n ...config,\n key,\n placeholder,\n label,\n pattern,\n autocomplete,\n required,\n maxLength\n });\n}\n\n// MARK: LatLng Text Field\nexport const DEFAULT_LAT_LNG_TEXT_FIELD_PLACEHOLDER = '12.345,-67.8910';\nexport const DEFAULT_LAT_LNG_TEXT_FIELD_PATTERN_MESSAGE = `Invalid/unknown coordinates`;\n\nexport function latLngTextField({ key = 'latLng' }: Partial<TextFieldConfig> = {}): FormlyFieldConfig {\n const field = {\n ...textField({\n key,\n label: 'Coordinates',\n placeholder: DEFAULT_LAT_LNG_TEXT_FIELD_PLACEHOLDER,\n pattern: LAT_LNG_PATTERN,\n autocomplete: false\n }),\n ...validatorsForFieldConfig({\n messages: {\n pattern: DEFAULT_LAT_LNG_TEXT_FIELD_PATTERN_MESSAGE\n }\n })\n };\n\n return field;\n}\n","import { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { textField, type TextFieldConfig } from './text.field';\nimport { cityField, type CityFieldConfig, countryField, type CountryFieldConfig, stateField, type StateFieldConfig, zipCodeField, type ZipCodeFieldConfig } from './text.additional.field';\nimport { flexLayoutWrapper, sectionWrapper } from '../../wrapper/wrapper';\nimport { type FieldConfig } from '../../field';\nimport { repeatArrayField } from '../array/array.field';\nimport { type DbxFormSectionConfig } from '../../wrapper/section.wrapper.component';\nimport { ADDRESS_LINE_MAX_LENGTH } from '@dereekb/model';\n\n// MARK: Address Config\nexport interface AddressFormlyFieldsConfig {\n readonly line1Field?: CityFieldConfig;\n readonly line2Field?: CityFieldConfig;\n readonly cityField?: CityFieldConfig;\n readonly stateField?: StateFieldConfig;\n readonly zipCodeField?: ZipCodeFieldConfig;\n readonly countryField?: CountryFieldConfig;\n /**\n * Whether or not to make required fields required.\n *\n * True by default.\n */\n readonly required?: boolean;\n /**\n * Whether or not to include the second address line.\n *\n * True by default.\n */\n readonly includeLine2?: boolean;\n /**\n * Whether or not to include the country.\n *\n * True by default.\n */\n readonly includeCountry?: boolean;\n}\n\nexport interface AddressLineFieldConfig extends Partial<TextFieldConfig> {\n readonly line?: 0 | 1 | 2;\n}\n\nexport function addressLineField(config: AddressLineFieldConfig = {}): FormlyFieldConfig {\n const { line = 1 } = config;\n const lineCode = Math.max(1, line); // minimum of line 1\n\n const { key = `line${lineCode}`, placeholder = '', label = line ? `Line ${line}` : 'Street', autocomplete = `address-line${lineCode}`, maxLength = ADDRESS_LINE_MAX_LENGTH, required = false } = config;\n return textField({\n ...config,\n key,\n placeholder,\n label,\n autocomplete,\n required,\n maxLength\n });\n}\n\nexport function addressFormlyFields(config: AddressFormlyFieldsConfig = {}): FormlyFieldConfig[] {\n const { required = true, includeLine2 = true, includeCountry = true } = config;\n\n const singleLineFields = [\n {\n field: cityField({ required, ...config.cityField })\n },\n {\n field: stateField({ required, ...config.stateField })\n },\n {\n field: zipCodeField({ required, ...config.zipCodeField })\n }\n ];\n\n if (includeCountry) {\n singleLineFields.push({\n field: countryField({ required, ...config.countryField })\n });\n }\n\n let lines: FormlyFieldConfig[];\n\n if (includeLine2) {\n lines = [addressLineField({ required, ...config.line1Field, line: 1 }), addressLineField({ ...config.line2Field, line: 2 })];\n } else {\n lines = [addressLineField({ required, ...config.line1Field, line: 0 })];\n }\n\n return [...lines, flexLayoutWrapper(singleLineFields, { size: 1, relative: true })];\n}\n\n// MARK: Address\nexport interface AddressFieldConfig extends Readonly<FieldConfig>, DbxFormSectionConfig, AddressFormlyFieldsConfig {}\n\nexport function addressField(config: Partial<AddressFieldConfig> = {}): FormlyFieldConfig {\n const { key = 'address', header = 'Address', hint, required = false } = config;\n\n return sectionWrapper(\n {\n ...config,\n key,\n fieldGroup: addressFormlyFields(config),\n required\n },\n {\n ...config,\n header,\n hint\n }\n );\n}\n\n// MARK: Address List\nexport interface AddressListFieldConfig extends Readonly<FieldConfig>, AddressFormlyFieldsConfig {\n readonly maxAddresses?: number;\n}\n\nexport function addressListField(config: Partial<AddressListFieldConfig> = {}): FormlyFieldConfig {\n const { key = 'addresses', required = false, maxAddresses = 6 } = config;\n return repeatArrayField({\n key,\n required,\n label: 'Addresses',\n labelForField: 'Address',\n addText: 'Add Address',\n removeText: 'Remove Address',\n maxLength: maxAddresses,\n repeatFieldGroup: addressFormlyFields(config)\n });\n}\n","import { FormlyMaterialModule } from '@ngx-formly/material';\nimport { NgModule } from '@angular/core';\nimport { DbxFormFormlyWrapperModule } from '../../wrapper/wrapper.module';\nimport { FormlyMatInputModule } from '@ngx-formly/material/input';\nimport { DbxFormFormlyArrayFieldModule } from '../array/array.field.module';\n\nconst importsAndExports = [DbxFormFormlyArrayFieldModule, FormlyMaterialModule, FormlyMatInputModule, DbxFormFormlyWrapperModule];\n\n@NgModule({\n imports: importsAndExports,\n exports: importsAndExports\n})\nexport class DbxFormFormlyTextFieldModule {}\n","import { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type LabeledFieldConfig, formlyField } from '../field';\n\nexport type HiddenFieldConfig = Pick<LabeledFieldConfig, 'key' | 'required'>;\n\nexport function hiddenField({ key, required = false }: HiddenFieldConfig): FormlyFieldConfig {\n return formlyField({\n key,\n props: { required }\n });\n}\n","import { DbxFormFormlyTextEditorFieldModule } from './texteditor/texteditor.field.module';\nimport { NgModule } from '@angular/core';\nimport { DbxFormFormlyChecklistItemFieldModule } from './checklist/checklist.item.field.module';\nimport { DbxFormFormlyComponentFieldModule } from './component/component.field.module';\nimport { DbxFormFormlyWrapperModule } from './wrapper/wrapper.module';\n\nconst importsAndExports = [DbxFormFormlyChecklistItemFieldModule, DbxFormFormlyComponentFieldModule, DbxFormFormlyTextEditorFieldModule, DbxFormFormlyWrapperModule];\n\n@NgModule({\n imports: importsAndExports,\n exports: importsAndExports\n})\nexport class DbxFormFormlyFieldModule {}\n","import { type Maybe } from '@dereekb/util';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type MaterialFormFieldConfig, textField } from '../field';\n\nexport interface DbxFormSearchFormFieldsValue {\n readonly search: string;\n}\n\nexport interface DbxFormSearchFormFieldsConfig extends MaterialFormFieldConfig {\n readonly label?: string;\n readonly placeholder?: string;\n}\n\nexport function dbxFormSearchFormFields(config: Maybe<DbxFormSearchFormFieldsConfig>): FormlyFieldConfig[] {\n const { label, placeholder = 'Search', materialFormField } = config || {};\n\n return [\n textField({\n key: 'search',\n label,\n placeholder,\n autocomplete: false,\n materialFormField: {\n ...materialFormField,\n hideLabel: !label\n }\n })\n ];\n}\n","import { filterMaybe, type MaybeObservableOrValue, maybeValueFromObservableOrValue } from '@dereekb/rxjs';\nimport { type Observable, shareReplay, distinctUntilChanged } from 'rxjs';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type OnInit, Directive, inject, input, effect } from '@angular/core';\nimport { DbxFormlyContext } from './formly.context';\nimport { type Maybe } from '@dereekb/util';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { type DbxFormDisabledKey } from '../form/form';\nimport { cleanSubscription } from '@dereekb/dbx-core';\n\n/**\n * Abstract component for wrapping a DbxFormlyContext.\n *\n * The implementing component should use provideFormlyContext() to provide the DbxFormlyContext specific to this directive. The context is injected using only self.\n */\n@Directive()\nexport abstract class AbstractFormlyFormDirective<T> {\n readonly context = inject(DbxFormlyContext<T>, { self: true });\n\n readonly disabled = input<boolean>(false);\n\n protected readonly _disabledEffect = effect(() => this.context.setDisabled(undefined, this.disabled()));\n\n // Utility Functions\n getValue(): Observable<T> {\n return this.context.getValue();\n }\n\n setValue(value: Partial<T>): void {\n this.context.setValue(value);\n }\n\n resetForm(): void {\n this.context.resetForm();\n }\n\n clearValue(): void {\n this.setValue({});\n }\n\n setDisabled(key?: DbxFormDisabledKey, disabled?: boolean): void {\n this.context.setDisabled(key, disabled);\n }\n}\n\n/**\n * Abstract component for wrapping a form.\n */\n@Directive()\nexport abstract class AbstractSyncFormlyFormDirective<T> extends AbstractFormlyFormDirective<T> implements OnInit {\n abstract fields: FormlyFieldConfig[];\n\n ngOnInit(): void {\n this.context.fields = this.fields;\n }\n}\n\n/**\n * Abstract component for wrapping an asyncrhronously-configured form.\n */\n@Directive()\nexport abstract class AbstractAsyncFormlyFormDirective<T> extends AbstractFormlyFormDirective<T> implements OnInit {\n /**\n * Used to provide fields to the context.\n */\n abstract readonly fields$: Observable<Maybe<FormlyFieldConfig[]>>;\n\n protected readonly _fieldSub = cleanSubscription();\n\n ngOnInit(): void {\n // fields$ is only available after initialization.\n this._fieldSub.setSub(\n this.fields$.pipe(distinctUntilChanged()).subscribe((fields) => {\n this.context.fields = fields;\n })\n );\n }\n}\n\n@Directive()\nexport abstract class AbstractConfigAsyncFormlyFormDirective<T, C> extends AbstractAsyncFormlyFormDirective<T> {\n readonly config = input<MaybeObservableOrValue<C>>(undefined);\n\n readonly currentConfig$ = toObservable(this.config).pipe(maybeValueFromObservableOrValue());\n readonly config$ = this.currentConfig$.pipe(filterMaybe(), shareReplay(1));\n}\n","import { NgModule } from '@angular/core';\nimport { provideFormlyContext } from './formly.context';\nimport { DbxFormlyComponent } from './formly.form.component';\n\n/**\n * Default template for a view that extends AbstractFormlyFormDirective.\n */\nexport const DBX_FORMLY_FORM_COMPONENT_TEMPLATE = `<dbx-formly></dbx-formly>`;\n\n/**\n * Default providers for a view that extends AbstractFormlyFormDirective.\n */\nexport const dbxFormlyFormComponentProviders = provideFormlyContext;\n\nconst dbxFormlyFormComponentImports = [DbxFormlyComponent];\n\n/**\n * Default imports module for a view that extends AbstractFormlyFormDirective.\n */\n@NgModule({\n imports: dbxFormlyFormComponentImports,\n exports: dbxFormlyFormComponentImports\n})\nexport class DbxFormlyFormComponentImportsModule {}\n","import { Component, output } from '@angular/core';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { map, type Observable } from 'rxjs';\nimport { AbstractConfigAsyncFormlyFormDirective } from '../formly.directive';\nimport { dbxFormSearchFormFields, type DbxFormSearchFormFieldsConfig, type DbxFormSearchFormFieldsValue } from './form.form';\nimport { DbxFormlyFormComponentImportsModule, dbxFormlyFormComponentProviders } from '../formly.component.template';\nimport { DbxFormValueChangeDirective } from '../../form/io/form.change.directive';\n\n@Component({\n selector: 'dbx-form-search-form',\n template: `\n <dbx-formly (dbxFormValueChange)=\"searchChanged($event)\"></dbx-formly>\n `,\n providers: dbxFormlyFormComponentProviders(),\n imports: [DbxFormlyFormComponentImportsModule, DbxFormValueChangeDirective],\n standalone: true,\n host: {\n class: 'd-block dbx-form-search-form'\n }\n})\nexport class DbxFormSearchFormComponent extends AbstractConfigAsyncFormlyFormDirective<DbxFormSearchFormFieldsValue, DbxFormSearchFormFieldsConfig> {\n readonly search = output<string>();\n\n readonly fields$: Observable<FormlyFieldConfig[]> = this.currentConfig$.pipe(map(dbxFormSearchFormFields));\n\n searchChanged(value: DbxFormSearchFormFieldsValue) {\n this.search.emit(value.search ?? '');\n }\n}\n","import { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type FieldValueIsAvailableValidatorConfig, fieldValueIsAvailableValidator } from '../../validator/available';\nimport { textField, type TextFieldConfig } from '../field/value/text/text.field';\nimport { workingWrapper } from '../field/wrapper/wrapper';\n\nexport interface TextAvailableFieldConfig extends TextFieldConfig, Omit<FieldValueIsAvailableValidatorConfig<string>, 'message'> {\n readonly isNotAvailableErrorMessage?: string;\n}\n\nexport function textIsAvailableField(config: TextAvailableFieldConfig): FormlyFieldConfig {\n const field = textField(config);\n\n field.asyncValidators = {\n validation: [\n {\n expression: fieldValueIsAvailableValidator({\n ...config,\n message: config?.isNotAvailableErrorMessage\n })\n }\n ]\n };\n\n return workingWrapper(field, {});\n}\n","import { NgModule } from '@angular/core';\nimport { DbxFormFormlyTextFieldModule } from '../field/value/text/text.field.module';\nimport { DbxFormFormlyWrapperModule } from '../field/wrapper/wrapper.module';\n\nconst importsAndExports = [DbxFormFormlyTextFieldModule, DbxFormFormlyWrapperModule];\n\n@NgModule({\n imports: importsAndExports,\n exports: importsAndExports\n})\nexport class DbxFormTextAvailableFieldModule {}\n","import { type TextFieldConfig, textField } from '../field/value/text/text.field';\nimport { type EmailFieldConfig, emailField } from '../field/value/text/text.additional.field';\nimport { fieldValuesAreEqualValidator } from '../../validator/field';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { capitalizeFirstLetter, type Maybe } from '@dereekb/util';\n\n/**\n * Convenience interface for the password parameters configuration for a TextPasswordField.\n */\nexport type TextPasswordFieldPasswordParameters = Partial<Pick<TextFieldConfig, 'maxLength' | 'minLength' | 'pattern'>>;\n\n/**\n * textPasswordField() configuration.\n */\nexport interface TextPasswordFieldConfig extends Omit<TextFieldConfig, 'inputType' | 'key'>, Partial<Pick<TextFieldConfig, 'key' | 'materialFormField'>> {}\n\n/**\n * Configured simple text password field.\n *\n * @param config\n * @returns\n */\nexport function textPasswordField(config?: TextPasswordFieldConfig): FormlyFieldConfig {\n return textField({\n key: 'password',\n ...config,\n label: config?.label ?? 'Password',\n inputType: 'password',\n required: true\n });\n}\n\n/**\n * Configured verify field for a password.\n *\n * @param config\n * @returns\n */\nexport function textVerifyPasswordField(config?: TextPasswordFieldConfig): FormlyFieldConfig {\n return textPasswordField({\n key: 'verifyPassword',\n label: 'Verify Password',\n ...config,\n required: true\n });\n}\n\nexport interface TextPasswordWithVerifyFieldConfig {\n readonly password?: TextPasswordFieldConfig;\n readonly verifyPassword?: TextPasswordFieldConfig;\n}\n\nexport function textPasswordWithVerifyFieldGroup(config: TextPasswordWithVerifyFieldConfig): FormlyFieldConfig {\n const passwordFieldConfig = textPasswordField(config.password);\n const verifyPasswordFieldKey = config.verifyPassword?.key ?? `verify${capitalizeFirstLetter(String(passwordFieldConfig.key))}`;\n const verifyPasswordField = textVerifyPasswordField({\n ...config.password,\n ...config.verifyPassword,\n label: config.verifyPassword?.label ?? `Verify ${passwordFieldConfig.props?.label}`,\n key: verifyPasswordFieldKey\n });\n\n const validators = {\n validation: [\n {\n errorPath: verifyPasswordFieldKey,\n expression: fieldValuesAreEqualValidator({ keysFilter: [passwordFieldConfig.key, verifyPasswordField.key] as string[], message: 'The passwords do not match.' })\n }\n ]\n };\n\n const groupFieldConfig: FormlyFieldConfig = {\n validators,\n fieldGroup: [passwordFieldConfig, verifyPasswordField]\n };\n\n return groupFieldConfig;\n}\n\nexport interface UsernameLoginFieldUsernameConfig {\n readonly email?: Omit<EmailFieldConfig, 'key'>;\n readonly username?: Omit<TextFieldConfig, 'key'>;\n}\n\nexport type UsernameLoginFieldUsernameConfigInput = 'email' | 'username' | UsernameLoginFieldUsernameConfig;\n\n/**\n * usernamePasswordLoginFields() configuration.\n */\nexport interface UsernameLoginFieldsConfig {\n readonly username: UsernameLoginFieldUsernameConfigInput;\n readonly password?: TextPasswordFieldConfig;\n readonly verifyPassword?: Maybe<boolean | TextPasswordFieldConfig>;\n}\n\n/**\n * Value type exported by usernameLoginFields()\n */\nexport interface DefaultUsernameLoginFieldsValue extends DefaultUsernameLoginFieldValue {\n readonly password: string;\n readonly verifyPassword?: string;\n}\n\n/**\n * Template for login field that takes in a username and password.\n *\n * @param param0\n * @returns\n */\nexport function usernamePasswordLoginFields({ username, password, verifyPassword }: UsernameLoginFieldsConfig): FormlyFieldConfig[] {\n const usernameField = usernameLoginField(username);\n const passwordField = verifyPassword ? textPasswordWithVerifyFieldGroup({ password, verifyPassword: verifyPassword === true ? undefined : verifyPassword }) : textPasswordField(password);\n\n return [usernameField, passwordField];\n}\n\n/**\n * Value type exported by usernameLoginField()\n */\nexport interface DefaultUsernameLoginFieldValue {\n readonly username: string;\n}\n\nexport function usernameLoginField(username: UsernameLoginFieldUsernameConfigInput): FormlyFieldConfig {\n let usernameField: FormlyFieldConfig;\n let usernameFieldConfig: UsernameLoginFieldUsernameConfig = username as UsernameLoginFieldUsernameConfig;\n\n const defaultUsernameFieldConfig = { key: 'username', required: true };\n\n if (typeof username === 'string') {\n if (username === 'email') {\n usernameFieldConfig = {\n email: defaultUsernameFieldConfig\n };\n } else {\n usernameFieldConfig = {\n username: defaultUsernameFieldConfig\n };\n }\n }\n\n if (usernameFieldConfig.email) {\n usernameField = emailField({ ...usernameFieldConfig.email, ...defaultUsernameFieldConfig });\n } else {\n usernameField = textField({ ...usernameFieldConfig.username, ...defaultUsernameFieldConfig });\n }\n\n return usernameField;\n}\n","import { NgModule } from '@angular/core';\nimport { DbxFormFormlyTextFieldModule } from '../field/value/text/text.field.module';\n\nconst importsAndExports = [DbxFormFormlyTextFieldModule];\n\n@NgModule({\n imports: importsAndExports,\n exports: importsAndExports\n})\nexport class DbxFormLoginFieldModule {}\n","import { type TimezoneString } from '@dereekb/util';\nimport { allTimezoneInfos, searchTimezoneInfos, type TimezoneInfo, timezoneInfoForSystem } from '@dereekb/date';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type Observable, of } from 'rxjs';\nimport { type SearchableValueFieldStringSearchFn, type SearchableValueFieldValue, type SearchableValueFieldDisplayFn, type SearchableValueFieldDisplayValue } from '../field/selection/searchable';\nimport { searchableTextField, type SearchableTextFieldConfig } from '../field/selection/searchable/searchable.field';\n\nexport type TestStringSearchFunction = (text: string) => string[];\n\nexport function timezoneStringSearchFunction(): SearchableValueFieldStringSearchFn<string, TimezoneInfo> {\n const timezoneInfos = allTimezoneInfos();\n\n return (search: string) => {\n let searchResults;\n\n if (search.length === 0) {\n searchResults = [timezoneInfoForSystem()].concat(timezoneInfos);\n } else {\n searchResults = searchTimezoneInfos(search, timezoneInfos);\n }\n\n return of(searchResults.map((meta) => ({ value: meta.timezone, meta })));\n };\n}\n\nexport const DISPLAY_FOR_TIMEZONE_STRING_VALUE: SearchableValueFieldDisplayFn<string, TimezoneInfo> = (values: SearchableValueFieldValue<string, TimezoneInfo>[]) => {\n const timezoneInfos = allTimezoneInfos();\n\n const displayValues: SearchableValueFieldDisplayValue<string, TimezoneInfo>[] = values.map((x) => {\n const meta = x.meta ?? timezoneInfos.find((y) => x.value === y.timezone); // attempt to find the metadata in the timeInfos if it isn't provided.\n return { ...x, label: x.value, sublabel: meta?.abbreviation ?? 'Unknown' };\n });\n\n const obs: Observable<SearchableValueFieldDisplayValue<string, TimezoneInfo>[]> = of(displayValues);\n return obs;\n};\n\n/**\n * textPasswordField() configuration.\n */\nexport interface TimezoneStringFieldConfig extends Omit<SearchableTextFieldConfig<TimezoneString, TimezoneInfo>, 'inputType' | 'searchOnEmptyText' | 'search' | 'displayForValue' | 'key'>, Partial<Pick<SearchableTextFieldConfig<TimezoneString, TimezoneInfo>, 'key' | 'materialFormField'>> {}\n\n/**\n * Template for a searchable text field for a timezone.\n *\n * @param param0\n * @returns\n */\nexport function timezoneStringField(config: TimezoneStringFieldConfig = {}): FormlyFieldConfig {\n return searchableTextField({\n key: 'timezone',\n label: 'Timezone',\n asArrayValue: false,\n required: false,\n ...config,\n searchOnEmptyText: true,\n allowStringValues: false,\n showClearValue: true,\n search: timezoneStringSearchFunction(),\n displayForValue: DISPLAY_FOR_TIMEZONE_STRING_VALUE\n });\n}\n","import { NgModule } from '@angular/core';\nimport { DbxFormFormlySearchableFieldModule } from '../field/selection/searchable/searchable.field.module';\n\nconst importsAndExports = [DbxFormFormlySearchableFieldModule];\n\n@NgModule({\n imports: importsAndExports,\n exports: importsAndExports\n})\nexport class DbxFormTimezoneStringFieldModule {}\n","import { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type TextFieldConfig, textField } from '../field/value/text';\nimport { validatorsForFieldConfig } from '../field/field';\nimport { type ValidatorFn } from '@angular/forms';\nimport { isWebsiteUrlValidator, type IsWebsiteUrlValidatorConfig } from '../../validator/website';\n\n/**\n * websiteUrlField() configuration.\n */\nexport interface WebsiteUrlFieldConfig extends Omit<TextFieldConfig, 'inputType' | 'key'>, Partial<Pick<TextFieldConfig, 'key' | 'materialFormField'>>, IsWebsiteUrlValidatorConfig {}\n\n/**\n * Configured simple text password field.\n *\n * @param config\n * @returns\n */\nexport function websiteUrlField(config?: WebsiteUrlFieldConfig): FormlyFieldConfig {\n const validators: ValidatorFn[] = [isWebsiteUrlValidator(config)];\n\n const field = {\n ...textField({\n key: 'website',\n ...config,\n label: config?.label ?? 'Website Url',\n inputType: 'text'\n }),\n ...validatorsForFieldConfig({\n validators\n })\n };\n\n return field;\n}\n","import { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { Directive, input } from '@angular/core';\nimport { provideFormlyContext } from './formly.context';\nimport { AbstractAsyncFormlyFormDirective } from './formly.directive';\nimport { type Maybe } from '@dereekb/util';\nimport { toObservable } from '@angular/core/rxjs-interop';\n\n/**\n * Provides an DbxFormlyContext and has an input for fields.\n */\n@Directive({\n selector: '[dbxFormlyFields]',\n providers: provideFormlyContext(),\n standalone: true\n})\nexport class DbxFormlyFieldsContextDirective<T = unknown> extends AbstractAsyncFormlyFormDirective<T> {\n readonly fields = input<Maybe<FormlyFieldConfig[]>>(undefined, { alias: 'dbxFormlyFields' });\n readonly fields$ = toObservable(this.fields);\n}\n","import { importProvidersFrom } from '@angular/core';\nimport { DbxFormFormlyArrayFieldModule, DbxFormFormlyBooleanFieldModule, DbxFormFormlyDateFieldModule, DbxFormFormlyDbxListFieldModule, DbxFormFormlyNumberFieldModule, DbxFormFormlyPhoneFieldModule, DbxFormFormlyPickableFieldModule, DbxFormFormlySearchableFieldModule, DbxFormFormlySourceSelectModule, DbxFormFormlyTextEditorFieldModule, DbxFormFormlyTextFieldModule, DbxFormFormlyWrapperModule } from './field';\nimport { FormlyMaterialModule } from '@ngx-formly/material';\nimport { FormlyModule } from '@ngx-formly/core';\n\nexport function provideDbxFormFormlyFieldDeclarations() {\n return importProvidersFrom([DbxFormFormlyArrayFieldModule, DbxFormFormlyBooleanFieldModule, DbxFormFormlyDateFieldModule, DbxFormFormlyDbxListFieldModule, DbxFormFormlyNumberFieldModule, DbxFormFormlyPhoneFieldModule, DbxFormFormlyPickableFieldModule, DbxFormFormlySearchableFieldModule, DbxFormFormlySourceSelectModule, DbxFormFormlyTextEditorFieldModule, DbxFormFormlyTextFieldModule, DbxFormFormlyWrapperModule, FormlyModule, FormlyMaterialModule]);\n}\n","import { Directive } from '@angular/core';\n\n/**\n * Provides vertical spacing after a form.\n */\n@Directive({\n selector: 'dbx-form-spacer,[dbxFormSpacer],.dbx-form-spacer',\n host: {\n class: 'd-block dbx-form-spacer'\n },\n standalone: true\n})\nexport class DbxFormSpacerDirective {}\n","import { NgModule } from '@angular/core';\nimport { DbxFormModule } from './form/form.module';\nimport { DbxFormFormlyFieldModule } from './formly/field/form.field.module';\n\n@NgModule({\n exports: [DbxFormModule, DbxFormFormlyFieldModule]\n})\nexport class DbxFormExtensionModule {}\n","import { type EnvironmentProviders, makeEnvironmentProviders, type Provider } from '@angular/core';\nimport { provideDateFnsAdapter } from '@angular/material-date-fns-adapter';\nimport { MAT_DATE_LOCALE } from '@angular/material/core';\nimport { MAT_FORM_FIELD_DEFAULT_OPTIONS } from '@angular/material/form-field';\nimport { enUS } from 'date-fns/locale';\nimport { type DateTimePresetConfiguration, DBX_DATE_TIME_FIELD_MENU_PRESETS_TOKEN, DEFAULT_DATE_TIME_FIELD_MENU_PRESETS_PRESETS } from './formly';\nimport { type Maybe } from '@dereekb/util';\n\nexport interface ProvideDbxFormConfigurationConfig {\n readonly provideDateAdapter?: boolean;\n readonly defaultDateTimePresets?: Maybe<DateTimePresetConfiguration[]>;\n}\n\nexport function provideDbxFormConfiguration(config?: ProvideDbxFormConfigurationConfig): EnvironmentProviders {\n const { provideDateAdapter, defaultDateTimePresets } = config ?? {};\n\n const providers: Provider[] = [\n {\n provide: MAT_FORM_FIELD_DEFAULT_OPTIONS,\n useValue: {\n subscriptSizing: 'dynamic',\n floatLabel: 'always',\n appearance: 'outline'\n }\n },\n {\n provide: DBX_DATE_TIME_FIELD_MENU_PRESETS_TOKEN,\n useValue: defaultDateTimePresets ?? DEFAULT_DATE_TIME_FIELD_MENU_PRESETS_PRESETS\n }\n ];\n\n if (provideDateAdapter !== false) {\n providers.push(provideDateFnsAdapter());\n providers.push({\n provide: MAT_DATE_LOCALE,\n useValue: enUS\n });\n }\n\n return makeEnvironmentProviders(providers);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i1","importsAndExports","FieldType","i3","i4","TIME_OUTPUT_THROTTLE_TIME","i5","i6","i9","DatePickerDateRange","isE164PhoneNumberFunction"],"mappings":"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"}
1
+ {"version":3,"file":"dereekb-dbx-form.mjs","sources":["../../../../packages/dbx-form/src/lib/form/form.ts","../../../../packages/dbx-form/src/lib/form/action/form.action.directive.ts","../../../../packages/dbx-form/src/lib/form/action/transition/form.action.transition.safety.directive.ts","../../../../packages/dbx-form/src/lib/formly/formly.context.ts","../../../../packages/dbx-form/src/lib/formly/formly.form.component.ts","../../../../packages/dbx-form/src/lib/form/io/form.input.directive.ts","../../../../packages/dbx-form/src/lib/form/action/form.action.dialog.component.ts","../../../../packages/dbx-form/src/lib/form/io/form.loading.directive.ts","../../../../packages/dbx-form/src/lib/form/io/form.change.directive.ts","../../../../packages/dbx-form/src/lib/form/form.angular.util.ts","../../../../packages/dbx-form/src/lib/form/form.module.ts","../../../../packages/dbx-form/src/lib/formly/config/validation.ts","../../../../packages/dbx-form/src/lib/formly/field/checklist/checklist.item.field.content.default.component.ts","../../../../packages/dbx-form/src/lib/formly/field/checklist/checklist.item.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/checklist/checklist.item.field.component.html","../../../../packages/dbx-form/src/lib/formly/field/wrapper/info.wrapper.component.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/section.wrapper.component.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/flex.wrapper.component.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/subsection.wrapper.component.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/expand.wrapper.delegate.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/expand.wrapper.component.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/autotouch.wrapper.component.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/toggle.wrapper.component.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/style.wrapper.component.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/working.wrapper.component.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/wrapper.key.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/wrapper.module.ts","../../../../packages/dbx-form/src/lib/formly/field/checklist/checklist.item.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/field.ts","../../../../packages/dbx-form/src/lib/formly/field/checklist/checklist.item.field.ts","../../../../packages/dbx-form/src/lib/formly/field/checklist/checklist.field.ts","../../../../packages/dbx-form/src/lib/formly/field/component/component.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/component/component.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/component/component.field.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/list/list.field.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/list/list.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/list/list.field.component.html","../../../../packages/dbx-form/src/lib/formly/field/selection/list/list.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/pickable/pickable.field.directive.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/pickable/pickable.chip.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/pickable/pickable.chip.field.component.html","../../../../packages/dbx-form/src/lib/formly/field/selection/pickable/pickable.list.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/pickable/pickable.list.field.component.html","../../../../packages/dbx-form/src/lib/formly/field/selection/pickable/pickable.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/pickable/pickable.field.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/pickable/pickable.util.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/searchable/searchable.field.autocomplete.item.component.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/searchable/searchable.field.directive.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/searchable/searchable.chip.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/searchable/searchable.chip.field.component.html","../../../../packages/dbx-form/src/lib/formly/field/selection/searchable/searchable.field.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/searchable/searchable.text.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/searchable/searchable.text.field.component.html","../../../../packages/dbx-form/src/lib/formly/field/selection/searchable/searchable.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/searchable/text.chip.field.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/sourceselect/sourceselect.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/sourceselect/sourceselect.field.component.html","../../../../packages/dbx-form/src/lib/formly/field/selection/sourceselect/sourceselect.field.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/sourceselect/sourceselect.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/selection/selection.field.ts","../../../../packages/dbx-form/src/lib/formly/field/texteditor/texteditor.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/texteditor/texteditor.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/texteditor/texteditor.field.ts","../../../../packages/dbx-form/src/lib/formly/field/value/array/array.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/value/array/array.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/value/array/array.field.ts","../../../../packages/dbx-form/src/lib/formly/field/value/boolean/boolean.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/value/boolean/boolean.field.ts","../../../../packages/dbx-form/src/lib/formly/field/value/date/datetime.ts","../../../../packages/dbx-form/src/lib/formly/field/value/date/datetime.field.service.ts","../../../../packages/dbx-form/src/lib/formly/field/value/date/date.value.ts","../../../../packages/dbx-form/src/lib/formly/field/value/date/datetime.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/value/date/datetime.field.component.html","../../../../packages/dbx-form/src/lib/formly/field/value/date/fixeddaterange.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/value/date/fixeddaterange.field.component.html","../../../../packages/dbx-form/src/lib/formly/field/value/date/date.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/wrapper/wrapper.ts","../../../../packages/dbx-form/src/lib/formly/field/value/date/datetime.field.ts","../../../../packages/dbx-form/src/lib/formly/field/value/date/datetime.preset.ts","../../../../packages/dbx-form/src/lib/validator/boolean.ts","../../../../packages/dbx-form/src/lib/validator/email.ts","../../../../packages/dbx-form/src/lib/validator/field.ts","../../../../packages/dbx-form/src/lib/validator/number.ts","../../../../packages/dbx-form/src/lib/validator/available.ts","../../../../packages/dbx-form/src/lib/validator/phone.ts","../../../../packages/dbx-form/src/lib/validator/website.ts","../../../../packages/dbx-form/src/lib/formly/field/value/number/number.field.ts","../../../../packages/dbx-form/src/lib/formly/field/value/number/number.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/value/phone/phone.field.component.ts","../../../../packages/dbx-form/src/lib/formly/field/value/phone/phone.field.component.html","../../../../packages/dbx-form/src/lib/formly/field/value/phone/phone.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/value/text/text.field.ts","../../../../packages/dbx-form/src/lib/formly/field/value/phone/phone.field.ts","../../../../packages/dbx-form/src/lib/formly/field/value/text/text.additional.field.ts","../../../../packages/dbx-form/src/lib/formly/field/value/text/text.address.field.ts","../../../../packages/dbx-form/src/lib/formly/field/value/text/text.field.module.ts","../../../../packages/dbx-form/src/lib/formly/field/value/hidden.field.ts","../../../../packages/dbx-form/src/lib/formly/field/form.field.module.ts","../../../../packages/dbx-form/src/lib/formly/form/form.form.ts","../../../../packages/dbx-form/src/lib/formly/formly.directive.ts","../../../../packages/dbx-form/src/lib/formly/formly.component.template.ts","../../../../packages/dbx-form/src/lib/formly/form/search.form.component.ts","../../../../packages/dbx-form/src/lib/formly/template/available.ts","../../../../packages/dbx-form/src/lib/formly/template/available.module.ts","../../../../packages/dbx-form/src/lib/formly/template/login.ts","../../../../packages/dbx-form/src/lib/formly/template/login.module.ts","../../../../packages/dbx-form/src/lib/formly/template/timezone.ts","../../../../packages/dbx-form/src/lib/formly/template/timezone.module.ts","../../../../packages/dbx-form/src/lib/formly/template/website.ts","../../../../packages/dbx-form/src/lib/formly/formly.context.directive.ts","../../../../packages/dbx-form/src/lib/formly/formly.providers.ts","../../../../packages/dbx-form/src/lib/layout/form.spacer.directive.ts","../../../../packages/dbx-form/src/lib/form.module.ts","../../../../packages/dbx-form/src/lib/form.providers.ts","../../../../packages/dbx-form/src/dereekb-dbx-form.ts"],"sourcesContent":["import { forwardRef, type Provider, type Type } from '@angular/core';\nimport { type Observable } from 'rxjs';\nimport { type LockSet } from '@dereekb/rxjs';\nimport { type BooleanStringKeyArray, type Maybe } from '@dereekb/util';\nimport { type AbstractControl, type FormControlStatus } from '@angular/forms';\n\n/**\n * Current state of a DbxForm\n */\nexport enum DbxFormState {\n /**\n * Form is not finished initializing.\n */\n INITIALIZING = -1,\n /**\n * Form is initialized but has not yet used.\n */\n RESET = 0,\n /**\n * Form has been used.\n */\n USED = 1\n}\n\n/**\n * Unique key for disabling/enabling.\n */\nexport type DbxFormDisabledKey = string;\n\n/**\n * Default key used when disabling/enabling a form without specifying a custom key.\n */\nexport const DEFAULT_FORM_DISABLED_KEY = 'dbx_form_disabled';\n\n/**\n * Reference to the current state of a form.\n */\nexport interface DbxFormStateRef {\n readonly state: DbxFormState;\n}\n\n/**\n * DbxForm stream event\n */\nexport interface DbxFormEvent extends DbxFormStateRef {\n readonly isComplete: boolean;\n readonly status: FormControlStatus;\n readonly pristine?: boolean;\n readonly untouched?: boolean;\n readonly lastResetAt?: Date;\n readonly changesCount?: number;\n /**\n * Whether or not the form is disabled.\n */\n readonly isDisabled?: boolean;\n /**\n * Current disabled state keys.\n */\n readonly disabled?: BooleanStringKeyArray;\n}\n\n/**\n * Form that has an event stream, value, and state items.\n */\nexport abstract class DbxForm<T = unknown> {\n abstract readonly stream$: Observable<DbxFormEvent>;\n\n /**\n * Returns an observable that returns the current state of the form.\n */\n abstract getValue(): Observable<T>;\n\n /**\n * Returns an observable that returns the current disabled keys.\n */\n abstract getDisabled(): Observable<BooleanStringKeyArray>;\n}\n\n/**\n * Mutable extension of {@link DbxForm} that supports setting values, resetting, and disabling the form.\n *\n * @typeParam T - The form value type.\n */\nexport abstract class DbxMutableForm<T = unknown> extends DbxForm<T> {\n /**\n * LockSet for the form.\n */\n abstract readonly lockSet?: LockSet;\n\n /**\n * Sets the initial value of the form, and resets the form.\n *\n * @param value\n */\n abstract setValue(value: Maybe<Partial<T>>): void;\n\n /**\n * Resets the form to the initial value.\n */\n abstract resetForm(): void;\n\n /**\n * Disables the form\n *\n * @param disabled\n */\n abstract setDisabled(key?: DbxFormDisabledKey, disabled?: boolean): void;\n\n /**\n * Force the form to update itself as if it was changed.\n */\n abstract forceFormUpdate(): void;\n}\n\n/**\n * Provides the given type as a {@link DbxForm} in Angular's dependency injection system.\n *\n * @param sourceType - The concrete form type to register as a provider.\n * @returns An array of Angular providers.\n */\nexport function provideDbxForm<S extends DbxForm>(sourceType: Type<S>): Provider[] {\n return [{ provide: DbxForm, useExisting: forwardRef(() => sourceType) }];\n}\n\n/**\n * Provides the given type as both a {@link DbxForm} and {@link DbxMutableForm} in Angular's dependency injection system.\n *\n * @param sourceType - The concrete mutable form type to register as a provider.\n * @returns An array of Angular providers.\n */\nexport function provideDbxMutableForm<S extends DbxMutableForm>(sourceType: Type<S>): Provider[] {\n return [...provideDbxForm(sourceType), { provide: DbxMutableForm, useExisting: forwardRef(() => sourceType) }];\n}\n\n/**\n * Enables or disables an Angular form control based on the provided flag.\n *\n * @param form - The Angular abstract control to enable or disable.\n * @param isDisabled - Whether to disable (`true`) or enable (`false`) the control.\n * @param config - Optional configuration passed to the control's `disable()` or `enable()` methods.\n */\nexport function toggleDisableFormControl(form: AbstractControl<any>, isDisabled: boolean, config?: Parameters<AbstractControl['disable']>[0]) {\n if (isDisabled) {\n form.disable(config);\n } else {\n form.enable(config);\n }\n}\n","import { Directive, type OnInit, inject, input } from '@angular/core';\nimport { addSeconds, isPast } from 'date-fns';\nimport { type Observable, of, combineLatest, exhaustMap, catchError, delay, filter, first, map, switchMap, distinctUntilChanged, shareReplay } from 'rxjs';\nimport { DbxActionContextStoreSourceInstance, type DbxActionValueGetterResult, cleanLockSet } from '@dereekb/dbx-core';\nimport { SubscriptionObject, type IsModifiedFunction, type IsValidFunction, type ObservableOrValue, asObservable, type IsEqualFunction, makeIsModifiedFunctionObservable } from '@dereekb/rxjs';\nimport { DbxFormState, DbxMutableForm } from '../../form/form';\nimport { type IsModified, type IsValid, type MapFunction, type Maybe } from '@dereekb/util';\nimport { toObservable } from '@angular/core/rxjs-interop';\n\n/**\n * Disabled key used by {@link DbxActionFormDirective} to manage the form's disabled state during action processing.\n */\nexport const APP_ACTION_FORM_DISABLED_KEY = 'dbx_action_form';\n\n/**\n * Function that maps a form's value of type `T` to an action value result of type `O`.\n *\n * Used by {@link DbxActionFormDirective} to transform form output before passing it to the action source.\n */\nexport type DbxActionFormMapValueFunction<T, O> = MapFunction<T, ObservableOrValue<DbxActionValueGetterResult<O>>>;\n\n/**\n * Used with an action to bind a form to an action as it's value source.\n *\n * If the form has errors when the action is trigger, it will reject the action.\n *\n * If the source is not considered modified, the trigger will be ignored.\n *\n * @selector `[dbxActionForm]`\n *\n * @typeParam T - The form value type.\n * @typeParam O - The output value type passed to the action source.\n */\n@Directive({\n selector: '[dbxActionForm]',\n standalone: true\n})\nexport class DbxActionFormDirective<T = object, O = T> implements OnInit {\n readonly form = inject(DbxMutableForm<T>, { host: true });\n readonly source = inject(DbxActionContextStoreSourceInstance<O, unknown>);\n\n readonly lockSet = cleanLockSet({\n onDestroy: () => {\n this.source.enable(APP_ACTION_FORM_DISABLED_KEY);\n },\n onLockSetDestroy: () => {\n this._triggeredSub.destroy();\n this._isCompleteSub.destroy();\n this._isWorkingSub.destroy();\n this.form.setDisabled(APP_ACTION_FORM_DISABLED_KEY, false);\n }\n });\n\n /**\n * Whether or not to disable the form while the action is working.\n *\n * Defaults to true.\n */\n readonly dbxActionFormDisabledOnWorking = input<Maybe<boolean>>(true);\n\n /**\n * Optional validator that checks whether or not the value is\n * ready to send before the context store is marked enabled.\n */\n readonly dbxActionFormIsValid = input<Maybe<IsValidFunction<T>>>();\n\n /**\n * Optional function that checks whether or not the value is still the same/equal.\n */\n readonly dbxActionFormIsEqual = input<Maybe<IsEqualFunction<T>>>();\n\n /**\n * Optional function that checks whether or not the value has been modified.\n *\n * If dbxActionFormIsEqual is provided, this will be ignored.\n */\n readonly dbxActionFormIsModified = input<Maybe<IsModifiedFunction<T>>>();\n\n /**\n * Optional function that maps the form's value to the source's value.\n */\n readonly dbxActionFormMapValue = input<Maybe<DbxActionFormMapValueFunction<T, O>>>();\n\n readonly dbxActionFormDisabledOnWorking$ = toObservable(this.dbxActionFormDisabledOnWorking);\n\n readonly isValidFunction$ = toObservable(this.dbxActionFormIsValid).pipe(\n map((x) => x ?? (() => of(true))),\n shareReplay(1)\n );\n readonly isModifiedFunction$: Observable<IsModifiedFunction<T>> = makeIsModifiedFunctionObservable({\n isModified: toObservable(this.dbxActionFormIsModified),\n isEqual: toObservable(this.dbxActionFormIsEqual)\n }).pipe(shareReplay(1));\n\n readonly mapValueFunction$: Observable<Maybe<DbxActionFormMapValueFunction<T, O>>> = toObservable(this.dbxActionFormMapValue);\n\n private readonly _triggeredSub = new SubscriptionObject();\n private readonly _isCompleteSub = new SubscriptionObject();\n private readonly _isWorkingSub = new SubscriptionObject();\n\n constructor() {\n if (this.form.lockSet) {\n this.lockSet.addChildLockSet(this.form.lockSet, 'form');\n }\n\n this.lockSet.addChildLockSet(this.source.lockSet, 'source');\n }\n\n ngOnInit(): void {\n // Pass data from the form to the source when triggered.\n this._triggeredSub.subscription = this.source.triggered$\n .pipe(\n switchMap(() =>\n this.form.stream$.pipe(\n first(),\n exhaustMap((stream) => {\n const { isComplete } = stream;\n const doNothing = {}; // nothing, form not complete\n\n let obs: Observable<DbxActionValueGetterResult<O>>;\n\n if (isComplete) {\n obs = this.form.getValue().pipe(\n first(),\n exhaustMap((value) =>\n this.preCheckReadyValue(value).pipe(\n first(),\n switchMap((canContinue) => {\n if (canContinue) {\n return this.readyValue(value).pipe(first());\n } else {\n return of(doNothing);\n }\n }),\n catchError((error) => of({ reject: error }))\n )\n )\n );\n } else {\n obs = of(doNothing);\n }\n\n return obs;\n })\n )\n )\n )\n .subscribe((result: DbxActionValueGetterResult<O>) => {\n if (result.reject) {\n this.source.reject(result.reject);\n } else if (result.value != null) {\n this.source.readyValue(result.value);\n } else {\n // value isn't ready\n }\n });\n\n // Update the enabled/disabled state\n this._isCompleteSub.subscription = this.form.stream$\n .pipe(\n delay(0),\n filter((x) => x.state !== DbxFormState.INITIALIZING),\n switchMap((event) => {\n return this.form.getValue().pipe(\n first(),\n exhaustMap((value) => {\n // Use both changes count and whether or not something was in the past to guage whether or not the item has been touched.\n // Angular Form's untouched is whether or not focus has been lost but we can still receive value updates.\n // More than a certain amount of updates implies that it is being typed into/used.\n // 3 changes and 2 seconds are arbitrary values derived from guesses about any slow/late changes that may come from external directives for setup.\n const isProbablyTouched = !event.untouched || ((event.changesCount ?? 0) > 3 && isPast(addSeconds(event.lastResetAt ?? new Date(), 2)));\n\n // create overrides\n const returnFalseFunction = () => of(false);\n\n const runIsValidCheck = event.isComplete;\n const isValidFunction: Maybe<IsValidFunction<T>> = runIsValidCheck ? undefined : returnFalseFunction;\n\n const isConsideredModified = event.pristine === false && isProbablyTouched;\n const isModifiedFunction: Maybe<IsModifiedFunction<T>> = isConsideredModified ? undefined : returnFalseFunction;\n\n return this.checkIsValidAndIsModified(value, { isValidFunction, isModifiedFunction }).pipe(\n map(([valid, modified]: [boolean, boolean]) => ({ valid, modified, value, event })),\n first()\n );\n })\n );\n })\n )\n .subscribe(({ valid, modified /*, value, event */ }) => {\n // console.log('x: ', value, event, valid, modified);\n\n // Update Modified State\n this.source.setIsModified(modified);\n\n // Disable if the form is not yet complete/valid.\n this.source.enable(APP_ACTION_FORM_DISABLED_KEY, valid);\n });\n\n // Watch the working state and disable form while working\n this._isWorkingSub.subscription = combineLatest([this.source.isWorking$, this.dbxActionFormDisabledOnWorking$])\n .pipe(\n map(([isWorking, disableFormWhileWorking]: [boolean, Maybe<boolean>]) => disableFormWhileWorking !== false && isWorking),\n distinctUntilChanged()\n )\n .subscribe((disable) => {\n this.form.setDisabled(APP_ACTION_FORM_DISABLED_KEY, disable);\n });\n }\n\n /**\n * Checks whether the given form value is both valid and modified, optionally applying override functions.\n *\n * @param value - The current form value to check.\n * @param overrides - Optional override functions for the validity and modification checks.\n * @returns An observable emitting a tuple of `[isValid, isModified]`.\n */\n checkIsValidAndIsModified(value: T, overrides?: CheckValidAndModifiedOverrides<T>): Observable<[IsValid, IsModified]> {\n const { isModifiedFunction: overrideIsModifiedFunction, isValidFunction: overrideIsValidFunction } = overrides ?? {};\n const isValidFunctionObs = overrideIsValidFunction != null ? of(overrideIsValidFunction) : this.isValidFunction$;\n const isModifiedFunctionObs = overrideIsModifiedFunction != null ? of(overrideIsModifiedFunction) : this.isModifiedFunction$;\n\n return combineLatest([isValidFunctionObs, isModifiedFunctionObs]).pipe(\n switchMap(([isValid, isModified]) => {\n return combineLatest([isValid(value), isModified(value)]).pipe(map(([valid, modified]) => [valid, modified] as [boolean, boolean]));\n })\n );\n }\n\n /**\n * Pre-checks whether the form value is valid and modified before marking it as ready.\n *\n * @param value - The current form value.\n * @returns An observable emitting a tuple of `[isValid, isModified]`.\n */\n protected preCheckReadyValue(value: T): Observable<[IsValid, IsModified]> {\n return this.checkIsValidAndIsModified(value);\n }\n\n /**\n * Transforms the form value into an action value result, applying the optional map function if provided.\n *\n * @param value - The validated form value.\n * @returns An observable emitting the action value getter result.\n */\n protected readyValue(value: T): Observable<DbxActionValueGetterResult<O>> {\n return this.mapValueFunction$.pipe(\n switchMap((mapFunction) => {\n if (mapFunction) {\n return asObservable(mapFunction(value));\n } else {\n return of({ value: value as unknown as O });\n }\n })\n );\n }\n}\n\n/**\n * Optional overrides for the validity and modification check functions\n * used by {@link DbxActionFormDirective.checkIsValidAndIsModified}.\n */\ninterface CheckValidAndModifiedOverrides<T> {\n /** Override function for the modification check. */\n isModifiedFunction?: Maybe<IsModifiedFunction<T>>;\n /** Override function for the validity check. */\n isValidFunction?: Maybe<IsValidFunction<T>>;\n}\n","import { Directive, effect, inject, input } from '@angular/core';\nimport { type HookResult, type Transition } from '@uirouter/core';\nimport { type DbxActionTransitionSafetyType, DbxActionTransitionSafetyDirective } from '@dereekb/dbx-web';\nimport { DbxActionFormDirective } from '../form.action.directive';\n\n/**\n * Extension of {@link DbxActionTransitionSafetyDirective} that forces the form to update before\n * evaluating transition safety. This ensures the latest form state is considered when deciding\n * whether to block or allow a route transition.\n *\n * NOTE: Only works with UIRouter.\n *\n * @selector `[dbxActionFormSafety]`\n *\n * @typeParam T - The form value type.\n * @typeParam O - The output value type passed to the action source.\n */\n@Directive({\n selector: '[dbxActionFormSafety]',\n standalone: true\n})\nexport class DbxActionFormSafetyDirective<T, O> extends DbxActionTransitionSafetyDirective<T, O> {\n readonly dbxActionForm = inject(DbxActionFormDirective<T>, { host: true });\n\n /**\n * The safety type that controls when transitions are blocked.\n *\n * Defaults to `'auto'`, which blocks transitions when the form has unsaved changes.\n */\n readonly dbxActionFormSafety = input<DbxActionTransitionSafetyType>('auto');\n\n protected readonly _dbxActionFormSafetyUpdateEffect = effect(() => this._safetyType.next(this.dbxActionFormSafety()));\n\n protected override _handleOnBeforeTransition(transition: Transition): HookResult {\n this.dbxActionForm.form.forceFormUpdate();\n return super._handleOnBeforeTransition(transition);\n }\n}\n","import { Injectable, type OnDestroy, type Provider } from '@angular/core';\nimport { BehaviorSubject, type Observable, of, switchMap, shareReplay, distinctUntilChanged } from 'rxjs';\nimport { type DbxForm, type DbxFormDisabledKey, type DbxFormEvent, DbxFormState, type DbxMutableForm, DEFAULT_FORM_DISABLED_KEY, provideDbxMutableForm } from '../form/form';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { LockSet, filterMaybe } from '@dereekb/rxjs';\nimport { type BooleanStringKeyArray, BooleanStringKeyArrayUtility, type Destroyable, type Maybe } from '@dereekb/util';\n\nexport interface DbxFormlyInitialize<T> {\n fields: Observable<FormlyFieldConfig[]>;\n initialDisabled: BooleanStringKeyArray;\n initialValue: Maybe<Partial<T>>;\n}\n\n/**\n * DbxFormlyContext delegate.\n *\n * This is usually the component or element that contains the form itself.\n */\nexport interface DbxFormlyContextDelegate<T = unknown> extends Omit<DbxMutableForm<T>, 'lockSet'> {\n readonly stream$: Observable<DbxFormEvent>;\n init(initialize: DbxFormlyInitialize<T>): void;\n}\n\n/**\n * Allows a directive to provide a formly context and form.\n */\nexport function provideFormlyContext(): Provider[] {\n return [DbxFormlyContext, ...provideDbxMutableForm(DbxFormlyContext)];\n}\n\n/**\n * DbxForm Instance that registers a delegate and manages the state of that form/delegate.\n */\n@Injectable()\nexport class DbxFormlyContext<T = unknown> implements DbxForm<T>, Destroyable, OnDestroy {\n private static INITIAL_STATE: DbxFormEvent = { isComplete: false, state: DbxFormState.INITIALIZING, status: 'PENDING' };\n\n readonly lockSet = new LockSet();\n\n private readonly _fields = new BehaviorSubject<Maybe<FormlyFieldConfig[]>>(undefined);\n private readonly _initialValue = new BehaviorSubject<Maybe<Partial<T>>>(undefined);\n private readonly _disabled = new BehaviorSubject<BooleanStringKeyArray>(undefined);\n private readonly _delegate = new BehaviorSubject<Maybe<DbxFormlyContextDelegate<T>>>(undefined);\n\n readonly fields$ = this._fields.pipe(filterMaybe(), shareReplay(1));\n readonly disabled$ = this._disabled.pipe(filterMaybe(), shareReplay(1));\n readonly stream$: Observable<DbxFormEvent> = this._delegate.pipe(\n distinctUntilChanged(),\n switchMap((x) => (x ? x.stream$ : of(DbxFormlyContext.INITIAL_STATE))),\n shareReplay(1)\n );\n\n ngOnDestroy(): void {\n this.destroy();\n }\n\n destroy(): void {\n this.lockSet.destroyOnNextUnlock(() => {\n this._fields.complete();\n this._initialValue.complete();\n this._disabled.complete();\n this._delegate.complete();\n });\n }\n\n setDelegate(delegate?: DbxFormlyContextDelegate<T>): void {\n if (delegate !== this._delegate.value) {\n if (delegate != null) {\n delegate.init({\n fields: this.fields$,\n initialDisabled: this.disabled,\n initialValue: this._initialValue.value\n });\n }\n\n this._delegate.next(delegate);\n }\n }\n\n clearDelegate(delegate: DbxFormlyContextDelegate<T>): void {\n if (delegate === this._delegate.value) {\n this.setDelegate(undefined);\n }\n }\n\n get fields(): Maybe<FormlyFieldConfig[]> {\n return this._fields.value;\n }\n\n set fields(fields: Maybe<FormlyFieldConfig[]>) {\n this._fields.next(fields);\n }\n\n // MARK: FormComponent\n getValue(): Observable<T> {\n return this._delegate.pipe(\n filterMaybe(),\n switchMap((x) => x.getValue()),\n shareReplay(1)\n );\n }\n\n setValue(value: Partial<T>): void {\n this._initialValue.next(value);\n\n if (this._delegate.value) {\n this._delegate.value.setValue(value);\n }\n }\n\n isDisabled(): boolean {\n return BooleanStringKeyArrayUtility.isTrue(this.disabled);\n }\n\n get disabled(): BooleanStringKeyArray {\n return this._disabled.value;\n }\n\n getDisabled(): Observable<BooleanStringKeyArray> {\n return this._disabled.asObservable();\n }\n\n setDisabled(key?: DbxFormDisabledKey, disabled = true): void {\n const nextDisabled = BooleanStringKeyArrayUtility.set(this.disabled, key ?? DEFAULT_FORM_DISABLED_KEY, disabled);\n this._disabled.next(nextDisabled);\n\n if (this._delegate.value) {\n this._delegate.value.setDisabled(key, disabled);\n }\n }\n\n resetForm(): void {\n if (this._delegate.value) {\n this._delegate.value.resetForm();\n }\n }\n\n forceFormUpdate(): void {\n if (this._delegate.value) {\n this._delegate.value.forceFormUpdate();\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, type OnInit, computed, inject, signal, viewChild } from '@angular/core';\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { type FormlyFieldConfig, FormlyForm, type FormlyFormOptions, FormlyModule } from '@ngx-formly/core';\nimport { distinctUntilChanged, map, throttleTime, startWith, BehaviorSubject, type Observable, Subject, switchMap, shareReplay, of, scan, filter, timer, first, merge, delay } from 'rxjs';\nimport { cleanWithLockSet } from '@dereekb/dbx-core';\nimport { type DbxForm, type DbxFormDisabledKey, type DbxFormEvent, DbxFormState, DEFAULT_FORM_DISABLED_KEY, provideDbxMutableForm, toggleDisableFormControl } from '../form/form';\nimport { DbxFormlyContext, type DbxFormlyContextDelegate, type DbxFormlyInitialize } from './formly.context';\nimport { scanCount, switchMapFilterMaybe, SubscriptionObject } from '@dereekb/rxjs';\nimport { type BooleanStringKeyArray, BooleanStringKeyArrayUtility, iterablesAreSetEquivalent, type Maybe } from '@dereekb/util';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\nexport interface DbxFormlyFormState {\n changesSinceLastResetCount: number;\n isFormValid: boolean;\n isFormDisabled: boolean;\n}\n\n/**\n * Used for rending a form from a DbxFormlyContext.\n */\n@Component({\n selector: 'dbx-formly',\n exportAs: 'formly',\n template: `\n <form [formGroup]=\"form\" class=\"dbx-formly\">\n <formly-form [form]=\"form\" [options]=\"options\" [fields]=\"fieldsSignal()\" [model]=\"modelSignal()\"></formly-form>\n </form>\n `,\n host: {\n class: 'dbx-formly'\n },\n providers: provideDbxMutableForm(DbxFormlyComponent),\n imports: [FormsModule, ReactiveFormsModule, FormlyModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormlyComponent<T> implements DbxForm, DbxFormlyContextDelegate<T>, OnInit {\n private readonly _dbxFormlyContext = inject(DbxFormlyContext<T>);\n\n readonly formlyForm = viewChild(FormlyForm);\n\n private readonly _fields = new BehaviorSubject<Maybe<Observable<FormlyFieldConfig[]>>>(undefined);\n private readonly _events = new BehaviorSubject<DbxFormEvent>({ isComplete: false, state: DbxFormState.INITIALIZING, status: 'PENDING' });\n private readonly _disabled = new BehaviorSubject<BooleanStringKeyArray>(undefined);\n\n private readonly _reset = new BehaviorSubject<Date>(new Date());\n private readonly _forceUpdate = new Subject<void>();\n\n private readonly _disabledSub = new SubscriptionObject();\n private readonly _enforceDisabledSub = new SubscriptionObject();\n\n readonly form = new FormGroup({});\n readonly modelSignal = signal<T>({} as T);\n\n readonly options: FormlyFormOptions = {};\n\n readonly fields$ = this._fields.pipe(switchMapFilterMaybe(), distinctUntilChanged(), shareReplay(1));\n\n readonly stream$: Observable<DbxFormEvent> = this._reset.pipe(\n switchMap((lastResetAt) =>\n this.form.valueChanges.pipe(\n startWith(0),\n distinctUntilChanged(),\n throttleTime(50, undefined, { leading: true, trailing: true }),\n scanCount(-1),\n // update on validation changes too. Does not count towards changes since last reset.\n switchMap((changesSinceLastReset) => this.form.statusChanges.pipe(startWith(this.form.status), distinctUntilChanged()).pipe(map(() => changesSinceLastReset))),\n map((changesSinceLastResetCount: number) => ({\n changesSinceLastResetCount,\n isFormValid: this.form.status !== 'PENDING' && this.form.valid,\n isFormDisabled: this.form.disabled\n })),\n scan(\n (acc: DbxFormlyFormState, next: DbxFormlyFormState) => {\n // Pass forward valid if next was a disabled change/check, which changes angular form's isValid value.\n // If it was valid prior, then it should be valid now, unless we just reset, in which case it might not be valid.\n const valid = next.isFormValid || (next.isFormDisabled && acc.isFormValid && acc.changesSinceLastResetCount > 0);\n\n return {\n changesSinceLastResetCount: next.changesSinceLastResetCount,\n isFormValid: valid,\n isFormDisabled: next.isFormDisabled\n };\n },\n {\n changesSinceLastResetCount: 0,\n isFormValid: false,\n isFormDisabled: false\n }\n ),\n switchMap(({ changesSinceLastResetCount, isFormValid, isFormDisabled }) => {\n const nextState = () => {\n const isReset = changesSinceLastResetCount <= 1; // first emission after reset is the first value.\n const complete = isFormValid;\n\n const nextState: DbxFormEvent = {\n isComplete: complete,\n state: isReset ? DbxFormState.RESET : DbxFormState.USED,\n status: this.form.status,\n untouched: this.form.untouched,\n pristine: this.form.pristine,\n changesCount: changesSinceLastResetCount,\n lastResetAt,\n disabled: this.disabled,\n isDisabled: isFormDisabled\n };\n\n return nextState;\n };\n\n const state = nextState();\n\n if (isFormValid && this.form.untouched) {\n return timer(150, 200).pipe(\n // every 200 ms check if the form is now marked touched, then push a new state\n filter(() => this.form.touched),\n map(() => nextState()),\n // only push the new state once\n first(),\n // send the first value immediately\n startWith(state)\n );\n } else {\n return of(state);\n }\n })\n )\n ),\n shareReplay(1)\n );\n\n private readonly _fieldsSignal = toSignal(this.fields$, { initialValue: undefined });\n\n readonly fieldsSignal = computed(() => this._fieldsSignal() ?? []);\n\n constructor() {\n cleanWithLockSet(this._dbxFormlyContext.lockSet, () => {\n this._dbxFormlyContext.clearDelegate(this);\n this._events.complete();\n this._fields.complete();\n this._reset.complete();\n this._forceUpdate.complete();\n this._disabled.complete();\n this._disabledSub.destroy();\n this._enforceDisabledSub.destroy();\n });\n }\n\n ngOnInit(): void {\n this._dbxFormlyContext.setDelegate(this);\n\n const resyncDisabledState = () => {\n const isDisabled = BooleanStringKeyArrayUtility.isTrue(this._disabled.value);\n let change = false;\n\n if (this.form.disabled !== isDisabled) {\n toggleDisableFormControl(this.form, isDisabled, { emitEvent: true });\n change = true;\n }\n\n return change;\n };\n\n this._disabledSub.subscription = this._disabled.pipe(distinctUntilChanged(iterablesAreSetEquivalent)).subscribe(() => {\n resyncDisabledState();\n });\n\n // NOTE: Form sometimes becomes undisabled somewhere/somehow. Re-enforce the disabled state where necessary.\n this._enforceDisabledSub.subscription = merge([\n this._reset.pipe(\n map(() => 'RESET'),\n delay(50)\n ),\n this.form.statusChanges.pipe(throttleTime(50, undefined, { leading: true, trailing: true }))\n ]).subscribe((change) => {\n resyncDisabledState();\n });\n }\n\n // MARK: Delegate\n init(initialize: DbxFormlyInitialize<T>): void {\n this._fields.next(initialize.fields);\n this._disabled.next(initialize.initialDisabled);\n }\n\n getValue(): Observable<T> {\n return of(this.form.value as T);\n }\n\n setValue(value: T): void {\n this.modelSignal.set(structuredClone(value) as T);\n\n if (this.options.updateInitialValue) {\n this.options.updateInitialValue();\n this.options.resetModel?.();\n }\n\n // Re-mark as untouched and pristine.\n this.form.markAsUntouched();\n this.form.markAsPristine();\n\n // After updating the value, if the form is still untouched mark it as pristine again.\n // Sometimes the values get marked as changed and break pristine before a user has time to interact.\n setTimeout(() => {\n if (this.form.untouched) {\n this.form.markAsPristine();\n }\n }, 500);\n\n // ping reset\n this.resetForm();\n }\n\n resetForm(): void {\n if (this.options.resetModel) {\n this.options.resetModel();\n }\n\n this._reset.next(new Date());\n }\n\n get isDisabled(): boolean {\n return BooleanStringKeyArrayUtility.isTrue(this.disabled);\n }\n\n get disabled(): BooleanStringKeyArray {\n return this._disabled.value;\n }\n\n getDisabled(): Observable<BooleanStringKeyArray> {\n return this._disabled.asObservable();\n }\n\n setDisabled(key?: DbxFormDisabledKey, disabled = true): void {\n const next = BooleanStringKeyArrayUtility.set(this.disabled, key ?? DEFAULT_FORM_DISABLED_KEY, disabled);\n this._disabled.next(next);\n }\n\n // MARK: Update\n forceFormUpdate(): void {\n this._forceUpdate.next();\n }\n}\n","import { distinctUntilChanged, filter, map, switchMap, combineLatest, type Observable, EMPTY, exhaustMap, takeUntil, Subject, tap, shareReplay, throttleTime, type Subscription } from 'rxjs';\nimport { Directive, effect, inject, input } from '@angular/core';\nimport { DbxFormState, type DbxFormStateRef, DbxMutableForm } from '../form';\nimport { type Maybe } from '@dereekb/util';\nimport { asObservable, type ObservableOrValue, cleanup, errorOnEmissionsInPeriod } from '@dereekb/rxjs';\nimport { cleanSubscription } from '@dereekb/dbx-core';\n\n/**\n * Creates an observable that pipes input values to a form based on the specified mode.\n *\n * This is a convenience wrapper around {@link dbxFormSourceObservableFromStream} that\n * extracts the stream from the form instance.\n *\n * @param form - The mutable form to derive stream state from.\n * @param inputObs - The source observable or value to pipe into the form.\n * @param modeObs - Observable controlling when values are forwarded (reset, always, or every).\n * @returns An observable of values to be set on the form.\n */\nexport function dbxFormSourceObservable<T>(form: DbxMutableForm, inputObs: ObservableOrValue<T>, modeObs: Observable<DbxFormSourceDirectiveMode>): Observable<T> {\n return dbxFormSourceObservableFromStream(form.stream$, inputObs, modeObs);\n}\n\n/**\n * Creates an observable that pipes input values to a form based on the form's stream state and the specified mode.\n *\n * - `'reset'`: Only forwards the value when the form enters the RESET state.\n * - `'always'`: Forwards values while not initializing, with throttling and loop detection.\n * - `'every'`: Forwards values while not initializing, without throttling or loop protection.\n *\n * @param streamObs - Observable of the form's state stream.\n * @param inputObs - The source observable or value to pipe into the form.\n * @param modeObs - Observable or value controlling when values are forwarded.\n * @returns An observable of values to be set on the form.\n */\nexport function dbxFormSourceObservableFromStream<T>(streamObs: Observable<DbxFormStateRef>, inputObs: ObservableOrValue<T>, modeObs: ObservableOrValue<DbxFormSourceDirectiveMode>): Observable<T> {\n const value$ = asObservable(inputObs).pipe(shareReplay(1)); // catch/share the latest emission\n\n const state$ = streamObs.pipe(\n map((x) => x.state),\n distinctUntilChanged()\n );\n\n const mode$ = asObservable(modeObs).pipe(distinctUntilChanged());\n\n return combineLatest([mode$, value$]).pipe(\n map((x) => x[0]),\n distinctUntilChanged(),\n switchMap((mode: DbxFormSourceDirectiveMode) => {\n if (mode === 'reset') {\n // reset only\n return state$.pipe(\n exhaustMap((state: DbxFormState) => {\n if (state === DbxFormState.RESET) {\n let firstValueSent = false;\n const doneSubject = new Subject();\n\n return combineLatest([value$, state$]).pipe(\n map(([value, state]) => {\n if (!firstValueSent || state === DbxFormState.RESET) {\n return [value, true] as [T, boolean]; // always forward the first value.\n } else {\n return [value, false] as [T, boolean];\n }\n }),\n tap(([_, send]) => {\n firstValueSent = true;\n if (!send) {\n doneSubject.next(undefined);\n }\n }),\n filter(([_, send]) => send),\n map(([value, _]) => value),\n takeUntil(doneSubject),\n cleanup(() => {\n doneSubject.complete();\n })\n );\n } else {\n return EMPTY;\n }\n })\n );\n } else {\n // pass any updated value while not initializing.\n return state$.pipe(\n map((x) => x === DbxFormState.INITIALIZING),\n distinctUntilChanged(),\n switchMap((initializing: boolean) => {\n if (initializing) {\n return EMPTY;\n } else {\n let valueObs = value$;\n\n if (mode === 'always') {\n valueObs = valueObs.pipe(\n throttleTime(10, undefined, { leading: true, trailing: true }),\n errorOnEmissionsInPeriod({\n period: 1000,\n maxEmissionsPerPeriod: 50,\n onError: () => {\n console.error('dbxFormSourceObservableFromStream: Error thrown due to too many emissions. There may be an unintentional loop being triggered by dbxFormSource. Typically this can occur in cases where the dbxFormSource directive is used at the same time as dbxFormValueChange directive and the same value is being pushed.');\n }\n })\n );\n }\n\n return valueObs;\n }\n })\n );\n }\n })\n );\n}\n\n/**\n * Modes that define when to copy data from the source to the form.\n *\n * - `'reset'`: Only copy data when the form is reset.\n * - `'always'`: Always copy data when the data observable emits a value. Has a throttle of 20ms to prevent too many emissions. If emissions occur in a manner that appears to be a loop (more than 30 emissions in 1 second), then an error is thrown and warning printed to the console.\n * - `'every'`: Equal to always, but has no throttle or error message warning.\n */\nexport type DbxFormSourceDirectiveMode = 'reset' | 'always' | 'every';\n\n/**\n * Directive that sets a form's value based on an input observable or value source.\n *\n * Supports different modes for when the value is forwarded to the form:\n * - `'reset'` (default): Only sets the form value when the form is reset.\n * - `'always'`: Sets the form value on every emission, with throttling and loop detection.\n * - `'every'`: Sets the form value on every emission, without throttling.\n *\n * @selector `[dbxFormSource]`\n *\n * @typeParam T - The form value type.\n */\n@Directive({\n selector: '[dbxFormSource]',\n standalone: true\n})\nexport class DbxFormSourceDirective<T = unknown> {\n readonly form = inject(DbxMutableForm<T>, { host: true });\n\n /**\n * The mode controlling when the source value is forwarded to the form.\n */\n readonly dbxFormSourceMode = input<Maybe<DbxFormSourceDirectiveMode>>();\n\n /**\n * The source value or observable to pipe into the form.\n */\n readonly dbxFormSource = input<Maybe<ObservableOrValue<Maybe<Partial<T>>>>>();\n\n protected readonly _effectSub = cleanSubscription();\n protected readonly _setFormSourceObservableEffect = effect(() => {\n const formSource = this.dbxFormSource();\n const mode: DbxFormSourceDirectiveMode = this.dbxFormSourceMode() ?? 'reset';\n\n let subscription: Maybe<Subscription>;\n\n if (formSource) {\n subscription = dbxFormSourceObservableFromStream(this.form.stream$, formSource, mode).subscribe((x) => {\n this.form.setValue(x);\n });\n }\n\n this._effectSub.setSub(subscription);\n });\n}\n","import { Component, inject, type OnInit } from '@angular/core';\nimport { AbstractDialogDirective, DbxDialogContentDirective, DbxDialogContentCloseComponent, DbxActionModule, DbxButtonModule, type DbxButtonStyle } from '@dereekb/dbx-web';\nimport { type MatDialog, type MatDialogConfig, type MatDialogRef } from '@angular/material/dialog';\nimport { type Maybe } from '@dereekb/util';\nimport { asObservableFromGetter, type MaybeObservableOrValueGetter, type ObservableOrValueGetter, type WorkUsingContext } from '@dereekb/rxjs';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { distinctUntilChanged } from 'rxjs';\nimport { cleanSubscription, type DbxButtonDisplay } from '@dereekb/dbx-core';\nimport { DbxFormlyContext, provideFormlyContext } from '../../formly/formly.context';\nimport { DbxFormlyComponent } from '../../formly/formly.form.component';\nimport { DbxFormSourceDirective } from '../io/form.input.directive';\nimport { DbxActionFormDirective } from './form.action.directive';\n\n/**\n * Button configuration for the submit button in a {@link DbxFormActionDialogComponent}.\n *\n * Combines display properties (text, icon) with style properties (color, raised, etc.).\n */\nexport interface DbxFormActionDialogComponentButtonConfig extends DbxButtonDisplay, DbxButtonStyle {}\n\n/**\n * Configuration for opening a {@link DbxFormActionDialogComponent}.\n *\n * Defines the dialog header, form fields, initial values, submit button, and dialog options.\n *\n * @typeParam O - The form value type produced by the dialog.\n */\nexport interface DbxFormActionDialogComponentConfig<O> {\n /**\n * Header text for the dialog.\n */\n readonly header: string;\n /**\n * Used for retrieving the fields to display in the dialog.\n */\n readonly fields: ObservableOrValueGetter<FormlyFieldConfig[]>;\n /**\n * Initial value for the form.\n */\n readonly initialValue?: MaybeObservableOrValueGetter<O>;\n /**\n * Text/Icon for the submit button.\n */\n readonly submitButtonConfig?: DbxFormActionDialogComponentButtonConfig;\n /**\n * Dialog-specific configuration\n */\n readonly dialog?: Omit<MatDialogConfig, 'data'>;\n}\n\n/**\n * A standalone dialog component that renders a dynamic Formly form within a Material dialog.\n *\n * Provides a header, a configurable form, and a submit button wired to an action handler.\n * The dialog closes with the submitted form value on success, or `undefined` if dismissed.\n *\n * Use {@link DbxFormActionDialogComponent.openDialogWithForm} to open the dialog programmatically.\n *\n * @typeParam O - The form value type produced by the dialog.\n */\n@Component({\n template: `\n <dbx-dialog-content dbxAction [dbxActionHandler]=\"handleSubmitValue\" class=\"dbx-dialog-content-with-header\">\n <h3 class=\"dbx-dialog-content-header\">{{ header }}</h3>\n <dbx-dialog-content-close (close)=\"close()\"></dbx-dialog-content-close>\n <div>\n <dbx-formly dbxActionForm [dbxFormSource]=\"initialValue$\"></dbx-formly>\n <dbx-button dbxActionButton [buttonDisplay]=\"submitButtonConfig\" [buttonStyle]=\"submitButtonConfig\" [raised]=\"true\"></dbx-button>\n </div>\n </dbx-dialog-content>\n `,\n standalone: true,\n providers: [provideFormlyContext()],\n imports: [DbxDialogContentDirective, DbxActionModule, DbxButtonModule, DbxDialogContentCloseComponent, DbxFormlyComponent, DbxFormSourceDirective, DbxActionFormDirective, DbxFormlyComponent]\n})\nexport class DbxFormActionDialogComponent<O> extends AbstractDialogDirective<O, DbxFormActionDialogComponentConfig<O>> implements OnInit {\n private readonly _fieldsSub = cleanSubscription();\n\n readonly context = inject(DbxFormlyContext<O>, { self: true });\n readonly fields$ = asObservableFromGetter(this.data.fields);\n readonly initialValue$ = asObservableFromGetter(this.data.initialValue);\n\n readonly header = this.data.header;\n\n readonly submitButtonConfig = {\n text: 'Submit',\n ...this.data.submitButtonConfig\n };\n\n ngOnInit(): void {\n this._fieldsSub.setSub(\n this.fields$.pipe(distinctUntilChanged()).subscribe((fields) => {\n this.context.fields = fields;\n })\n );\n }\n\n /**\n * Action handler that marks the action as successful and closes the dialog with the submitted value.\n */\n readonly handleSubmitValue: WorkUsingContext<O> = (value, context) => {\n context.success();\n this.close(value);\n };\n\n /**\n * Opens a new dialog with a dynamic Formly form using the provided configuration.\n *\n * @param matDialog - The Angular Material dialog service.\n * @param config - Configuration for the dialog, including fields, header, and initial value.\n * @returns A reference to the opened dialog, which resolves to the submitted value or `undefined`.\n */\n static openDialogWithForm<O>(matDialog: MatDialog, config: DbxFormActionDialogComponentConfig<O>): MatDialogRef<DbxFormActionDialogComponent<O>, Maybe<O>> {\n const dialogRef = matDialog.open(DbxFormActionDialogComponent<O>, {\n width: '90vw',\n maxHeight: '300px',\n maxWidth: '600px',\n ...config.dialog,\n data: config\n });\n\n return dialogRef;\n }\n}\n","import { type Observable } from 'rxjs';\nimport { Directive, inject, input } from '@angular/core';\nimport { cleanSubscription } from '@dereekb/dbx-core';\nimport { DbxMutableForm } from '../../form/form';\nimport { type LoadingState, type MaybeObservableOrValue, filterMaybe, maybeValueFromObservableOrValue, valueFromFinishedLoadingState } from '@dereekb/rxjs';\nimport { dbxFormSourceObservableFromStream, type DbxFormSourceDirectiveMode } from './form.input.directive';\nimport { type Maybe } from '@dereekb/util';\nimport { toObservable } from '@angular/core/rxjs-interop';\n\n/**\n * Default mode for the {@link DbxFormLoadingSourceDirective}, which only passes values on form reset.\n */\nconst DEFAULT_DBX_FORM_LOADING_SOURCE_DIRECTIVE_MODE: DbxFormSourceDirectiveMode = 'reset';\n\n/**\n * Directive that sets a form's value from a {@link LoadingState} source once loading is complete.\n *\n * Only passes non-null values from the source. Extracts the value from the finished loading state\n * and forwards it to the form using the configured mode.\n *\n * @selector `[dbxFormLoadingSource]`\n *\n * @typeParam T - The form value type (must extend object).\n */\n@Directive({\n selector: '[dbxFormLoadingSource]',\n standalone: true\n})\nexport class DbxFormLoadingSourceDirective<T extends object = object> {\n readonly form = inject(DbxMutableForm<T>, { host: true });\n\n /**\n * The mode controlling when the loading source value is forwarded to the form.\n *\n * Defaults to `'reset'`.\n */\n readonly dbxFormLoadingSourceMode = input<DbxFormSourceDirectiveMode, Maybe<DbxFormSourceDirectiveMode>>(DEFAULT_DBX_FORM_LOADING_SOURCE_DIRECTIVE_MODE, { transform: (x) => x ?? DEFAULT_DBX_FORM_LOADING_SOURCE_DIRECTIVE_MODE });\n\n /**\n * The loading state source to observe. The form value is set once loading finishes with a non-null value.\n */\n readonly dbxFormLoadingSource = input<MaybeObservableOrValue<LoadingState<T>>>();\n\n readonly mode$ = toObservable(this.dbxFormLoadingSourceMode);\n readonly source$: Observable<Maybe<T>> = toObservable(this.dbxFormLoadingSource).pipe(maybeValueFromObservableOrValue(), filterMaybe(), valueFromFinishedLoadingState());\n\n constructor() {\n cleanSubscription(\n dbxFormSourceObservableFromStream(this.form.stream$, this.source$, this.mode$).subscribe((x) => {\n this.form.setValue(x);\n })\n );\n }\n}\n","import { Directive, type OnInit, inject, output } from '@angular/core';\nimport { cleanSubscription } from '@dereekb/dbx-core';\nimport { type Maybe } from '@dereekb/util';\nimport { first, mergeMap, delay, map } from 'rxjs';\nimport { DbxForm } from '../form';\n\n/**\n * Directive that observes form value changes and emits the current value when the form is complete/valid,\n * or `undefined` when the form is incomplete.\n *\n * Subscribes to the form's stream during `ngOnInit` to ensure the first emission occurs after initialization.\n *\n * @selector `[dbxFormValueChange]`\n *\n * @typeParam T - The form value type.\n */\n@Directive({\n selector: '[dbxFormValueChange]',\n standalone: true\n})\nexport class DbxFormValueChangeDirective<T> implements OnInit {\n readonly form = inject(DbxForm<T>, { host: true });\n\n /**\n * Emits the current form value when the form is complete/valid, or `undefined` when incomplete.\n */\n readonly dbxFormValueChange = output<Maybe<T>>();\n\n protected readonly _sub = cleanSubscription();\n\n ngOnInit(): void {\n // specifically call within ngOnInit to ensure first emission occurs after the form is initialized.\n this._sub.setSub(\n this.form.stream$\n .pipe(\n mergeMap((x) =>\n this.form.getValue().pipe(\n first(),\n map((value) => ({ isComplete: x.isComplete, value }))\n )\n ),\n delay(0)\n )\n .subscribe(({ isComplete, value }) => {\n if (isComplete) {\n this.dbxFormValueChange.emit(value);\n } else {\n this.dbxFormValueChange.emit(undefined);\n }\n })\n );\n }\n}\n","import { type AbstractControl } from '@angular/forms';\nimport { type Maybe } from '@dereekb/util';\nimport { type Observable, startWith } from 'rxjs';\n\n/**\n * A FormGroup/AbstractControl path to a specific control.\n */\nexport type FormControlPath = string;\n\n/**\n * Streams a value from the input control at the given path. If no path is specified, streams the value from the control.\n *\n * Returns `undefined` if the control at the given path does not exist.\n *\n * @param fromControl - The root control to retrieve the target control from.\n * @param path - Optional dot-delimited path to a nested control.\n * @returns An observable of the control's value changes (starting with the current value), or `undefined` if the control was not found.\n *\n * @example\n * ```ts\n * const name$ = streamValueFromControl<string>(formGroup, 'user.name');\n * ```\n */\nexport function streamValueFromControl<T>(fromControl: AbstractControl, path?: FormControlPath): Maybe<Observable<T>> {\n const control = path ? fromControl.get(path) : fromControl;\n return control?.valueChanges.pipe(startWith(control.value));\n}\n","import { NgModule } from '@angular/core';\n\n/**\n * Root Angular module for the dbx-form library.\n *\n * Serves as the base module for form-related functionality. Import this module\n * to access the core form features provided by the library.\n */\n@NgModule({\n exports: []\n})\nexport class DbxFormModule {}\n","import { type FieldTypeConfig } from '@ngx-formly/core';\nimport { type ValidationMessageOption } from '../type';\n\n/**\n * Returns a validation message indicating the minimum character length was not met.\n *\n * @param err - The validation error object.\n * @param field - The Formly field configuration containing `minLength` in its props.\n * @returns A human-readable validation message string.\n */\nexport function minLengthValidationMessage(err: unknown, field: FieldTypeConfig) {\n return `Should have atleast ${field.props.minLength} characters.`;\n}\n\n/**\n * Returns a validation message indicating the maximum character length was exceeded.\n *\n * @param err - The validation error object.\n * @param field - The Formly field configuration containing `maxLength` in its props.\n * @returns A human-readable validation message string.\n */\nexport function maxLengthValidationMessage(err: unknown, field: FieldTypeConfig) {\n return `This value should be less than ${field.props.maxLength} characters.`;\n}\n\n/**\n * Returns a validation message indicating the value is below the minimum allowed.\n *\n * @param err - The validation error object.\n * @param field - The Formly field configuration containing `min` in its props.\n * @returns A human-readable validation message string.\n */\nexport function minValidationMessage(err: unknown, field: FieldTypeConfig) {\n return `This value should be more than or equal to ${field.props.min}.`;\n}\n\n/**\n * Returns a validation message indicating the value exceeds the maximum allowed.\n *\n * @param err - The validation error object.\n * @param field - The Formly field configuration containing `max` in its props.\n * @returns A human-readable validation message string.\n */\nexport function maxValidationMessage(err: unknown, field: FieldTypeConfig) {\n return `This value should be less than or equal to ${field.props.max}.`;\n}\n\n/**\n * Validation message option for required fields.\n */\nexport const REQUIRED_VALIDATION_MESSAGE = { name: 'required', message: 'This field is required.' };\n\n/**\n * Validation message option for minimum length violations.\n */\nexport const MIN_LENGTH_VALIDATION_MESSAGE = { name: 'minLength', message: minLengthValidationMessage } as ValidationMessageOption;\n\n/**\n * Validation message option for maximum length violations.\n */\nexport const MAX_LENGTH_VALIDATION_MESSAGE = { name: 'maxLength', message: maxLengthValidationMessage } as ValidationMessageOption;\n\n/**\n * Validation message option for minimum value violations.\n */\nexport const MIN_VALIDATION_MESSAGE = { name: 'min', message: minValidationMessage } as ValidationMessageOption;\n\n/**\n * Validation message option for maximum value violations.\n */\nexport const MAX_VALIDATION_MESSAGE = { name: 'max', message: maxValidationMessage } as ValidationMessageOption;\n\n/**\n * Validation message option for invalid phone numbers.\n */\nexport const INVALID_PHONE_NUMBER_MESSAGE = { name: 'validatePhoneNumber', message: 'This is not a valid phone number.' };\n\n/**\n * Validation message option for invalid phone number extensions.\n */\nexport const INVALID_PHONE_NUMBER_EXTENSION_MESSAGE = { name: 'validatePhoneNumberExtension', message: 'This is not a valid phone number extension.' };\n\n/**\n * Returns the full set of default validation messages used by the form system.\n *\n * Includes messages for: required, minLength, maxLength, min, max, phone number, and phone number extension.\n *\n * @returns An array of {@link ValidationMessageOption} objects.\n */\nexport function defaultValidationMessages(): ValidationMessageOption[] {\n return [REQUIRED_VALIDATION_MESSAGE, MIN_LENGTH_VALIDATION_MESSAGE, MAX_LENGTH_VALIDATION_MESSAGE, MIN_VALIDATION_MESSAGE, MAX_VALIDATION_MESSAGE, INVALID_PHONE_NUMBER_MESSAGE, INVALID_PHONE_NUMBER_EXTENSION_MESSAGE];\n}\n","import { ChangeDetectionStrategy, Component, signal } from '@angular/core';\nimport { type ChecklistItemDisplayContent, type ChecklistItemFieldDisplayComponent } from './checklist.item';\nimport { type Maybe } from '@dereekb/util';\n\n// MARK: Default\n/**\n * Default display component for checklist items.\n *\n * Renders label, sublabel, and description text from the injected {@link ChecklistItemDisplayContent}.\n */\n@Component({\n template: `\n @if (displayContentSignal()) {\n <div class=\"dbx-default-checklist-item-field\">\n @if (displayContentSignal()?.label) {\n <div class=\"item-label\">{{ displayContentSignal()?.label }}</div>\n }\n @if (displayContentSignal()?.sublabel) {\n <div class=\"item-sublabel\">{{ displayContentSignal()?.sublabel }}</div>\n }\n @if (displayContentSignal()?.description) {\n <div class=\"dbx-hint item-description\">{{ displayContentSignal()?.description }}</div>\n }\n </div>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: []\n})\nexport class DbxDefaultChecklistItemFieldDisplayComponent<T = unknown> implements ChecklistItemFieldDisplayComponent<T> {\n readonly _displayContentSignal = signal<Maybe<ChecklistItemDisplayContent<T>>>(undefined);\n readonly displayContentSignal = this._displayContentSignal.asReadonly();\n\n setDisplayContent(displayContent: ChecklistItemDisplayContent<T>): void {\n this._displayContentSignal.set(displayContent);\n }\n}\n","import { ChangeDetectionStrategy, Component, type OnInit, type Type, inject, signal } from '@angular/core';\nimport { type DbxInjectionComponentConfig, DbxInjectionComponent, cleanSubscription } from '@dereekb/dbx-core';\nimport { switchMapFilterMaybe } from '@dereekb/rxjs';\nimport { shareReplay, distinctUntilChanged, map, type Observable } from 'rxjs';\nimport { type ValidationErrors, type FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { FieldType, type FieldTypeConfig, type FormlyFieldProps } from '@ngx-formly/core';\nimport { type ChecklistItemFieldDisplayComponent, type ChecklistItemDisplayContent } from './checklist.item';\nimport { DbxDefaultChecklistItemFieldDisplayComponent } from './checklist.item.field.content.default.component';\nimport { type Maybe } from '@dereekb/util';\nimport { toSignal, toObservable } from '@angular/core/rxjs-interop';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatRippleModule } from '@angular/material/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { DbxAnchorComponent } from '@dereekb/dbx-web';\n\n/**\n * Wrapper component that injects dynamic display content into a checklist item\n * via {@link DbxInjectionComponent}. Subscribes to the parent field's display content observable.\n */\n@Component({\n selector: 'dbx-checklist-item-content-component',\n template: `\n <dbx-injection [config]=\"config\"></dbx-injection>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [DbxInjectionComponent]\n})\nexport class DbxChecklistItemContentComponent<T = unknown> {\n readonly checklistItemFieldComponent = inject(DbxChecklistItemFieldComponent<T>);\n\n readonly config: DbxInjectionComponentConfig<ChecklistItemFieldDisplayComponent<T>> = {\n componentClass: this.checklistItemFieldComponent.componentClass,\n init: (instance) => {\n cleanSubscription(\n this.checklistItemFieldComponent.displayContent$.subscribe((content: ChecklistItemDisplayContent<T>) => {\n instance.setDisplayContent(content);\n })\n );\n }\n };\n}\n\n/**\n * Formly field properties for a checklist item, providing the display content observable\n * and an optional custom display component class.\n */\nexport interface DbxChecklistItemFieldProps<T = unknown> extends FormlyFieldProps {\n /**\n * Observable used to retrieve content to display for the item.\n */\n readonly displayContent: Observable<ChecklistItemDisplayContent<T>>;\n /**\n * Custom component class to use by default.\n */\n readonly componentClass?: Type<ChecklistItemFieldDisplayComponent<T>>;\n}\n\n/**\n * Formly field component that renders a single checklist item with a checkbox,\n * optional anchor link, and dynamic display content.\n *\n * The display content is provided as an observable and rendered via a configurable\n * component class (defaults to {@link DbxDefaultChecklistItemFieldDisplayComponent}).\n */\n@Component({\n templateUrl: 'checklist.item.field.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [ReactiveFormsModule, MatCheckboxModule, DbxAnchorComponent, MatRippleModule, MatIconModule, DbxChecklistItemContentComponent]\n})\nexport class DbxChecklistItemFieldComponent<T = unknown> extends FieldType<FieldTypeConfig<DbxChecklistItemFieldProps<T>>> implements OnInit {\n private readonly _displayContentObs = signal<Maybe<Observable<ChecklistItemDisplayContent<T>>>>(undefined);\n\n readonly displayContent$: Observable<ChecklistItemDisplayContent<T>> = toObservable(this._displayContentObs).pipe(switchMapFilterMaybe(), distinctUntilChanged(), shareReplay(1));\n\n readonly anchor$ = this.displayContent$.pipe(\n map((x: ChecklistItemDisplayContent<T>) => x.anchor),\n shareReplay(1)\n );\n\n readonly rippleDisabled$ = this.displayContent$.pipe(\n map((x: ChecklistItemDisplayContent<T>) => x.ripple === false || (x.ripple !== true && !x.anchor)),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly anchorSignal = toSignal(this.anchor$);\n readonly rippleDisabledSignal = toSignal(this.rippleDisabled$, { initialValue: false });\n\n get formGroup(): FormGroup {\n return this.form as FormGroup;\n }\n\n get formControlName(): string {\n return this.key as string;\n }\n\n get label(): Maybe<string> {\n return this.props.label;\n }\n\n get description(): Maybe<string> {\n return this.props.description;\n }\n\n get required(): Maybe<boolean> {\n return this.props.required;\n }\n\n get checklistField(): DbxChecklistItemFieldProps<T> {\n return this.props;\n }\n\n get errors(): Maybe<ValidationErrors> {\n return this.field.formControl?.errors;\n }\n\n get componentClass(): Type<ChecklistItemFieldDisplayComponent<T>> {\n return this.checklistField.componentClass ?? DbxDefaultChecklistItemFieldDisplayComponent;\n }\n\n ngOnInit() {\n // field prop is finally available here\n this._displayContentObs.set(this.checklistField.displayContent);\n }\n}\n","<div class=\"dbx-checklist-item-wrapper\" [formGroup]=\"formGroup\">\n @if (label) {\n <div class=\"dbx-checklist-item-label\">{{ label }}</div>\n }\n <div class=\"dbx-checklist-item\">\n <div class=\"dbx-checklist-item-check\">\n <mat-checkbox [formControlName]=\"formControlName\"></mat-checkbox>\n </div>\n <div class=\"dbx-checklist-item-content-wrapper\">\n <dbx-anchor [block]=\"true\" [anchor]=\"anchorSignal()\">\n <div class=\"dbx-checklist-item-content\" matRipple [matRippleDisabled]=\"rippleDisabledSignal()\">\n <dbx-checklist-item-content-component></dbx-checklist-item-content-component>\n <span class=\"spacer\"></span>\n @if (!rippleDisabledSignal()) {\n <mat-icon>navigate_next</mat-icon>\n }\n </div>\n </dbx-anchor>\n </div>\n </div>\n @if (description) {\n <div class=\"dbx-hint\">{{ description }}</div>\n }\n</div>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { FieldWrapper, type FormlyFieldConfig, type FormlyFieldProps } from '@ngx-formly/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\n\n/**\n * Configuration for the info wrapper that adds an info icon button beside the field.\n */\nexport interface DbxFormInfoConfig extends FormlyFieldProps {\n /** Callback invoked when the info button is clicked. */\n readonly onInfoClick: () => void;\n}\n\n/**\n * Formly wrapper that renders a Material info icon button beside the wrapped field.\n * Clicking the button invokes the configured `onInfoClick` callback.\n *\n * Registered as Formly wrapper `'info'`.\n */\n@Component({\n template: `\n <div class=\"dbx-form-info-wrapper dbx-flex-bar\">\n <div class=\"dbx-form-info-wrapper-content dbx-flex-grow\">\n <ng-container #fieldComponent></ng-container>\n </div>\n <div class=\"dbx-form-info-wrapper-info dbx-flex-noshrink dbx-flex-column dbx-flex-center\">\n <button mat-icon-button [attr.aria-label]=\"'show info button for ' + (to.label || 'section')\" (click)=\"onInfoClick()\">\n <mat-icon>info</mat-icon>\n </button>\n </div>\n </div>\n `,\n imports: [MatIconButton, MatIconModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormInfoWrapperComponent extends FieldWrapper<FormlyFieldConfig<DbxFormInfoConfig>> {\n get infoWrapper(): DbxFormInfoConfig {\n return this.props;\n }\n\n onInfoClick(): void {\n this.infoWrapper.onInfoClick();\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { type DbxSectionHeaderConfig, DbxSectionLayoutModule } from '@dereekb/dbx-web';\nimport { type Maybe } from '@dereekb/util';\nimport { FieldWrapper, type FormlyFieldConfig } from '@ngx-formly/core';\n\n/**\n * Configuration for the section wrapper, using the standard section header config.\n */\nexport type DbxFormSectionConfig = DbxSectionHeaderConfig;\n\n/**\n * Formly wrapper that renders the wrapped field inside a `dbx-section` layout\n * with an optional header and hint text.\n *\n * Registered as Formly wrapper `'section'`.\n *\n * @selector dbx-form-section-wrapper\n */\n@Component({\n selector: 'dbx-form-section-wrapper',\n template: `\n <dbx-section [headerConfig]=\"headerConfig\">\n <ng-container #fieldComponent></ng-container>\n </dbx-section>\n `,\n imports: [DbxSectionLayoutModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormSectionWrapperComponent extends FieldWrapper<FormlyFieldConfig<DbxFormSectionConfig>> {\n get headerConfig(): Maybe<DbxSectionHeaderConfig> {\n return this.props;\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { DbxFlexGroupDirective, type ScreenMediaWidthType } from '@dereekb/dbx-web';\nimport { FieldWrapper, type FormlyFieldConfig } from '@ngx-formly/core';\n\n/**\n * Configuration for the flex layout wrapper that arranges child fields\n * in a responsive horizontal layout using the dbx flex group system.\n */\nexport interface DbxFlexWrapperConfig {\n /**\n * Breakpoint based on the screen width.\n */\n readonly breakpoint?: ScreenMediaWidthType;\n /**\n * Whether or not to use relative sizing.\n */\n readonly relative?: boolean;\n /**\n * Whether or not to break to a new column when the breakpoint is reached.\n */\n readonly breakToColumn?: boolean;\n}\n\n/**\n * Formly wrapper that arranges child fields in a responsive flex layout\n * using the `dbxFlexGroup` directive.\n *\n * Registered as Formly wrapper `'flex'`.\n */\n@Component({\n template: `\n <div class=\"dbx-form-flex-section\" dbxFlexGroup [content]=\"false\" [relative]=\"relative\" [breakpoint]=\"breakpoint\" [breakToColumn]=\"breakToColumn\">\n <ng-container #fieldComponent></ng-container>\n </div>\n `,\n imports: [DbxFlexGroupDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormFlexWrapperComponent extends FieldWrapper<FormlyFieldConfig<DbxFlexWrapperConfig>> {\n get flexWrapper(): DbxFlexWrapperConfig {\n return this.props;\n }\n\n get breakpoint() {\n return this.flexWrapper.breakpoint;\n }\n\n get relative() {\n return this.flexWrapper.relative ?? false;\n }\n\n get breakToColumn() {\n return this.flexWrapper.breakToColumn ?? false;\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { type DbxSectionHeaderConfig, DbxSubSectionComponent } from '@dereekb/dbx-web';\nimport { type Maybe } from '@dereekb/util';\nimport { type FieldTypeConfig, FieldWrapper } from '@ngx-formly/core';\n\n/**\n * Configuration for the subsection wrapper, using the standard section header config.\n */\nexport type DbxFormSubsectionConfig = DbxSectionHeaderConfig;\n\n/**\n * Formly wrapper that renders the wrapped field inside a `dbx-subsection` layout\n * with an optional header and hint text.\n *\n * Registered as Formly wrapper `'subsection'`.\n *\n * @selector dbx-form-subsection-wrapper\n */\n@Component({\n selector: 'dbx-form-subsection-wrapper',\n template: `\n <dbx-subsection [headerConfig]=\"headerConfig\">\n <ng-container #fieldComponent></ng-container>\n </dbx-subsection>\n `,\n imports: [DbxSubSectionComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormSubsectionWrapperComponent extends FieldWrapper<FieldTypeConfig<DbxFormSubsectionConfig>> {\n get headerConfig(): Maybe<DbxSectionHeaderConfig> {\n return this.props;\n }\n}\n","import { type Maybe, objectIsEmpty } from '@dereekb/util';\nimport { FieldWrapper, type FormlyFieldProps, type FormlyFieldConfig } from '@ngx-formly/core';\nimport { map, shareReplay, startWith, switchMap, BehaviorSubject, of, distinctUntilChanged } from 'rxjs';\nimport { Directive, type OnDestroy, type OnInit } from '@angular/core';\nimport { type AbstractControl } from '@angular/forms';\nimport { filterMaybe } from '@dereekb/rxjs';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\n/**\n * Base configuration for expandable form section wrappers.\n *\n * Controls the label displayed on the expand trigger and an optional custom\n * function to determine whether the field's value is \"populated\" (which auto-expands the section).\n */\nexport interface AbstractFormExpandSectionConfig<T extends object = object> extends Pick<FormlyFieldProps, 'label'> {\n /** Label shown on the expand trigger. Falls back to the field label or first child field label. */\n expandLabel?: string;\n /**\n * Optional function to use for checking value existence.\n */\n hasValueFn?: (value: T) => boolean;\n}\n\n/**\n * Default value existence check that returns `true` if the object is non-empty.\n */\nexport const DEFAULT_HAS_VALUE_FN = (x: object) => !objectIsEmpty(x);\n\n/**\n * Abstract base directive for expandable form section wrappers.\n *\n * Manages the show/hide state based on whether the field has a value or\n * whether the user manually opened the section. Subclasses provide the\n * specific UI (expand button, toggle, etc.).\n */\n@Directive()\nexport class AbstractFormExpandSectionWrapperDirective<T extends object = object, S extends AbstractFormExpandSectionConfig<T> = AbstractFormExpandSectionConfig<T>> extends FieldWrapper<FormlyFieldConfig<S>> implements OnInit, OnDestroy {\n protected readonly _formControlObs = new BehaviorSubject<Maybe<AbstractControl>>(undefined);\n protected readonly _toggleOpen = new BehaviorSubject<Maybe<boolean>>(undefined);\n\n readonly formControl$ = this._formControlObs.pipe(filterMaybe());\n\n readonly show$ = this._toggleOpen.pipe(\n switchMap((toggleOpen: Maybe<boolean>) => {\n if (toggleOpen != null) {\n return of(toggleOpen);\n } else {\n return this.hasValue$;\n }\n }),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly hasValue$ = this.formControl$.pipe(\n switchMap((x) =>\n x.valueChanges.pipe(\n startWith(x.value),\n map((value) => {\n return this.hasValueFn(value);\n }),\n shareReplay(1)\n )\n )\n );\n\n readonly showSignal = toSignal(this.show$, { initialValue: false });\n readonly hasValueSignal = toSignal(this.hasValue$, { initialValue: false });\n\n get expandSection(): S {\n return this.props;\n }\n\n get hasValueFn(): (value: T) => boolean {\n return this.expandSection.hasValueFn ?? (DEFAULT_HAS_VALUE_FN as (value: T) => boolean);\n }\n\n get expandLabel(): Maybe<string> {\n let label: Maybe<string> = this.expandSection.expandLabel ?? this.field.props?.label;\n\n if (label == null) {\n const firstFieldGroup = this.field.fieldGroup?.[0];\n\n if (firstFieldGroup) {\n label = firstFieldGroup.props?.label ?? (firstFieldGroup.key as string);\n }\n }\n\n return label;\n }\n\n open(): void {\n this._toggleOpen.next(true);\n }\n\n ngOnInit(): void {\n this._formControlObs.next(this.formControl);\n }\n\n ngOnDestroy(): void {\n this._toggleOpen.complete();\n this._formControlObs.complete();\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { AbstractFormExpandSectionWrapperDirective, type AbstractFormExpandSectionConfig } from './expand.wrapper.delegate';\n\n/** The visual style of the expand button: a styled button or plain text link. */\nexport type DbxFormExpandWrapperButtonType = 'button' | 'text';\n\n/**\n * Configuration for the expand wrapper, extending the base expand section config\n * with an optional button type.\n */\nexport interface DbxFormExpandWrapperConfig<T extends object = object> extends AbstractFormExpandSectionConfig<T> {\n /** Visual style of the expand trigger. Defaults to `'button'`. */\n readonly buttonType?: DbxFormExpandWrapperButtonType;\n}\n\n/**\n * Section that is expandable by a button until a value is set, or the button is pressed.\n */\n@Component({\n template: `\n @if (showSignal()) {\n <ng-container #fieldComponent></ng-container>\n } @else {\n <span class=\"dbx-form-expand-wrapper-button\" (click)=\"open()\">{{ expandLabel }}</span>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormExpandWrapperComponent<T extends object = object> extends AbstractFormExpandSectionWrapperDirective<T, DbxFormExpandWrapperConfig<T>> {\n get buttonType(): DbxFormExpandWrapperButtonType {\n return this.expandSection.buttonType ?? 'button';\n }\n}\n","import { ChangeDetectionStrategy, Component, type OnInit } from '@angular/core';\nimport { type FieldTypeConfig, FieldWrapper } from '@ngx-formly/core';\nimport { delay } from 'rxjs';\n\n/**\n * Wrapper than sets the field to \"touched\" when the value changes and the field is not pristine.\n */\n@Component({\n template: `\n <ng-container #fieldComponent></ng-container>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class AutoTouchFieldWrapperComponent extends FieldWrapper<FieldTypeConfig> implements OnInit {\n ngOnInit(): void {\n this.formControl.valueChanges.pipe(delay(200)).subscribe(() => {\n if (!this.formControl.pristine && this.formControl.untouched) {\n this.formControl.markAsTouched();\n this.formControl.updateValueAndValidity();\n }\n });\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { type Maybe } from '@dereekb/util';\nimport { first, shareReplay, switchMap, type Observable, of } from 'rxjs';\nimport { type AbstractFormExpandSectionConfig, AbstractFormExpandSectionWrapperDirective } from './expand.wrapper.delegate';\nimport { MatSlideToggle } from '@angular/material/slide-toggle';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\n/**\n * Configuration for the toggle wrapper that uses a Material slide toggle to\n * show/hide content. Extends the base expand section config with an optional\n * reactive label function.\n */\nexport interface DbxFormToggleWrapperConfig<T extends object = object> extends AbstractFormExpandSectionConfig<T> {\n /** Optional function that returns an observable of the toggle label based on open state. */\n toggleLabelObs?: (open: Maybe<boolean>) => Observable<string>;\n}\n\n/**\n * Section that can be expanded by a button until a value is set, or the button is pressed.\n */\n@Component({\n template: `\n <div class=\"dbx-form-toggle-wrapper\">\n <div class=\"dbx-form-toggle-wrapper-toggle\">\n <mat-slide-toggle [checked]=\"showSignal()\" (toggleChange)=\"onToggleChange()\">{{ slideLabelSignal() }}</mat-slide-toggle>\n </div>\n @if (showSignal()) {\n <ng-container #fieldComponent></ng-container>\n }\n </div>\n `,\n imports: [MatSlideToggle],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormToggleWrapperComponent<T extends object = object> extends AbstractFormExpandSectionWrapperDirective<T, DbxFormToggleWrapperConfig> {\n readonly slideLabel$ = this._toggleOpen.pipe(\n switchMap((x) => {\n if (this.expandSection?.toggleLabelObs) {\n return this.expandSection?.toggleLabelObs(x);\n } else {\n return of(this.expandLabel);\n }\n }),\n shareReplay(1)\n );\n\n readonly slideLabelSignal = toSignal(this.slideLabel$, { initialValue: '' });\n\n onToggleChange(): void {\n this.show$.pipe(first()).subscribe((show) => {\n this._toggleOpen.next(!show);\n });\n }\n}\n","import { NgClass, NgStyle } from '@angular/common';\nimport { type OnInit, type OnDestroy, Component, ChangeDetectionStrategy } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { asObservable, type ObservableOrValue, switchMapMaybeDefault } from '@dereekb/rxjs';\nimport { type Maybe } from '@dereekb/util';\nimport { FieldWrapper, type FormlyFieldConfig } from '@ngx-formly/core';\nimport { BehaviorSubject, type Observable, shareReplay } from 'rxjs';\n\n/** A map of CSS style properties to their values, used with `[ngStyle]`. */\nexport type DbxFormStyleObject = { [styleClass: string]: any };\n\n/**\n * Configuration for the style wrapper that applies dynamic CSS classes and inline styles.\n */\nexport interface DbxFormStyleWrapperConfig {\n /** Observable or static value providing inline styles via `[ngStyle]`. */\n styleGetter?: Maybe<ObservableOrValue<DbxFormStyleObject>>;\n /** Observable or static value providing CSS class names via `[ngClass]`. */\n classGetter?: Maybe<ObservableOrValue<string>>;\n}\n\n/**\n * Formly wrapper that applies dynamic CSS classes and inline styles to the wrapped field.\n *\n * Supports both static values and reactive observables for `[ngClass]` and `[ngStyle]`.\n *\n * Registered as Formly wrapper `'style'`.\n */\n@Component({\n template: `\n <div class=\"dbx-form-style-wrapper\" [ngClass]=\"classSignal()\" [ngStyle]=\"styleSignal()\">\n <ng-container #fieldComponent></ng-container>\n </div>\n `,\n imports: [NgClass, NgStyle],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormStyleWrapperComponent extends FieldWrapper<FormlyFieldConfig<DbxFormStyleWrapperConfig>> implements OnInit, OnDestroy {\n private readonly _style = new BehaviorSubject<Maybe<Observable<DbxFormStyleObject>>>(undefined);\n private readonly _class = new BehaviorSubject<Maybe<Observable<string>>>(undefined);\n\n readonly style$ = this._style.pipe(switchMapMaybeDefault({}), shareReplay(1));\n readonly class$ = this._class.pipe(switchMapMaybeDefault(''), shareReplay(1));\n\n readonly styleSignal = toSignal(this.style$);\n readonly classSignal = toSignal(this.class$);\n\n get styleGetter(): Maybe<ObservableOrValue<DbxFormStyleObject>> {\n return this.props.styleGetter;\n }\n\n get classGetter(): Maybe<ObservableOrValue<string>> {\n return this.props.classGetter;\n }\n\n ngOnInit(): void {\n if (this.styleGetter) {\n this._style.next(asObservable(this.styleGetter));\n }\n\n if (this.classGetter) {\n this._class.next(asObservable(this.classGetter));\n }\n }\n\n ngOnDestroy(): void {\n this._style.complete();\n this._class.complete();\n }\n}\n","import { type OnInit, type OnDestroy, Component, ChangeDetectionStrategy } from '@angular/core';\nimport { DbxLoadingComponent } from '@dereekb/dbx-web';\nimport { SimpleLoadingContext, SubscriptionObject } from '@dereekb/rxjs';\nimport { FieldWrapper, type FormlyFieldConfig } from '@ngx-formly/core';\n\n/**\n * No configurable value for now.\n */\nexport type DbxFormWorkingWrapperConfig = object;\n\n/**\n * Adds a loading bar to help signify asynchronous work is occuring.\n *\n * By default shows loading during asynchronous validation of a field (FormControl status is \"PENDING\")\n */\n@Component({\n template: `\n <div class=\"dbx-form-working-wrapper\">\n <ng-container #fieldComponent></ng-container>\n <dbx-loading [linear]=\"true\" [context]=\"workingContext\"></dbx-loading>\n </div>\n `,\n imports: [DbxLoadingComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormWorkingWrapperComponent extends FieldWrapper<FormlyFieldConfig<DbxFormWorkingWrapperConfig>> implements OnInit, OnDestroy {\n readonly sub = new SubscriptionObject();\n readonly workingContext = new SimpleLoadingContext(false);\n\n ngOnInit(): void {\n this.sub.subscription = this.formControl?.statusChanges.subscribe({\n next: (x) => this.workingContext.setLoading(x === 'PENDING')\n });\n }\n\n ngOnDestroy(): void {\n this.workingContext.destroy();\n this.sub.destroy();\n }\n}\n","/** Formly wrapper key for the auto-touch behavior wrapper. */\nexport const AUTO_TOUCH_WRAPPER_KEY = 'autotouch';\n/** Formly wrapper key for the toggle (slide-toggle expand/collapse) wrapper. */\nexport const TOGGLE_WRAPPER_KEY = 'toggle';\n/** Formly wrapper key for the section layout wrapper. */\nexport const SECTION_WRAPPER_KEY = 'section';\n/** Formly wrapper key for the subsection layout wrapper. */\nexport const SUBSECTION_WRAPPER_KEY = 'subsection';\n/** Formly wrapper key for the info button wrapper. */\nexport const INFO_WRAPPER_KEY = 'info';\n/** Formly wrapper key for the flex layout wrapper. */\nexport const FLEX_WRAPPER_KEY = 'flex';\n/** Formly wrapper key for the dynamic style/class wrapper. */\nexport const STYLE_WRAPPER_KEY = 'style';\n/** Formly wrapper key for the async loading indicator wrapper. */\nexport const WORKING_WRAPPER_KEY = 'working';\n/** Formly wrapper key for the expand/collapse section wrapper. */\nexport const EXPAND_WRAPPER_KEY = 'expand';\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxFormInfoWrapperComponent } from './info.wrapper.component';\nimport { DbxFormSectionWrapperComponent } from './section.wrapper.component';\nimport { DbxFormFlexWrapperComponent } from './flex.wrapper.component';\nimport { DbxFormSubsectionWrapperComponent } from './subsection.wrapper.component';\nimport { DbxFormExpandWrapperComponent } from './expand.wrapper.component';\nimport { AutoTouchFieldWrapperComponent } from './autotouch.wrapper.component';\nimport { DbxFormToggleWrapperComponent } from './toggle.wrapper.component';\nimport { DbxFormStyleWrapperComponent } from './style.wrapper.component';\nimport { DbxFormWorkingWrapperComponent } from './working.wrapper.component';\nimport { AUTO_TOUCH_WRAPPER_KEY, EXPAND_WRAPPER_KEY, FLEX_WRAPPER_KEY, INFO_WRAPPER_KEY, SECTION_WRAPPER_KEY, STYLE_WRAPPER_KEY, SUBSECTION_WRAPPER_KEY, TOGGLE_WRAPPER_KEY, WORKING_WRAPPER_KEY } from './wrapper.key';\nimport { FormlyMaterialModule } from '@ngx-formly/material';\n\nconst importsAndExports = [\n AutoTouchFieldWrapperComponent,\n DbxFormSectionWrapperComponent,\n DbxFormSubsectionWrapperComponent,\n DbxFormInfoWrapperComponent,\n DbxFormExpandWrapperComponent,\n DbxFormToggleWrapperComponent,\n DbxFormFlexWrapperComponent,\n DbxFormStyleWrapperComponent,\n DbxFormWorkingWrapperComponent,\n // Formly\n FormlyModule,\n FormlyMaterialModule\n];\n\n/** Registers all Formly field wrapper types (section, flex, expand, toggle, style, info, working, autotouch, subsection). */\n@NgModule({\n imports: [\n ...importsAndExports,\n FormlyModule.forChild({\n wrappers: [\n { name: AUTO_TOUCH_WRAPPER_KEY, component: AutoTouchFieldWrapperComponent },\n { name: EXPAND_WRAPPER_KEY, component: DbxFormExpandWrapperComponent },\n { name: TOGGLE_WRAPPER_KEY, component: DbxFormToggleWrapperComponent },\n { name: SECTION_WRAPPER_KEY, component: DbxFormSectionWrapperComponent },\n { name: SUBSECTION_WRAPPER_KEY, component: DbxFormSubsectionWrapperComponent },\n { name: INFO_WRAPPER_KEY, component: DbxFormInfoWrapperComponent },\n { name: FLEX_WRAPPER_KEY, component: DbxFormFlexWrapperComponent },\n { name: STYLE_WRAPPER_KEY, component: DbxFormStyleWrapperComponent },\n { name: WORKING_WRAPPER_KEY, component: DbxFormWorkingWrapperComponent }\n ]\n })\n ],\n exports: importsAndExports\n})\nexport class DbxFormFormlyWrapperModule {}\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxFormFormlyWrapperModule } from '../wrapper/wrapper.module';\nimport { DbxChecklistItemContentComponent, DbxChecklistItemFieldComponent } from './checklist.item.field.component';\nimport { DbxDefaultChecklistItemFieldDisplayComponent } from './checklist.item.field.content.default.component';\n\nconst importsAndExports = [DbxChecklistItemFieldComponent, DbxChecklistItemContentComponent, DbxDefaultChecklistItemFieldDisplayComponent];\n\n/** Registers the `checklistitem` Formly field type with wrapper support. */\n@NgModule({\n imports: [\n ...importsAndExports,\n DbxFormFormlyWrapperModule,\n FormlyModule.forChild({\n types: [{ name: 'checklistitem', component: DbxChecklistItemFieldComponent }]\n })\n ],\n exports: importsAndExports\n})\nexport class DbxFormFormlyChecklistItemFieldModule {}\n","import { type AsyncValidatorFn, type ValidatorFn } from '@angular/forms';\nimport { mergeObjects, filterFromPOJO, mergeObjectsFunction, filterFromPOJOFunction, type FilterKeyValueTuplesInput, type GeneralFilterFromPOJOFunction, type ArrayOrValue, type Maybe, asArray, objectHasNoKeys, type MapFunction } from '@dereekb/util';\nimport { type FormlyFieldConfig, type FormlyFieldProps } from '@ngx-formly/core';\nimport { type ValidationMessageOption } from '../type';\nimport { type FormlyFieldProps as MaterialFormlyFormFieldProps } from '@ngx-formly/material/form-field';\n\n/**\n * A value parser function that transforms a form field's value from one type to another.\n */\nexport type FormlyValueParser<I = any, O = any> = MapFunction<I, O>;\n\n/**\n * Reference to an array of value parsers applied to a field's value.\n */\nexport interface FieldConfigParsersRef {\n parsers: FormlyValueParser[];\n}\n\n/**\n * Base configuration for a Formly field, providing the key, required/readonly flags,\n * expressions, and optional value parsers.\n */\nexport interface FieldConfig extends Pick<FormlyFieldConfig, 'expressions' | 'parsers'>, Partial<FieldConfigParsersRef> {\n key: string;\n required?: boolean;\n readonly?: boolean;\n}\n\n/**\n * Optional reference to value parsers for a field.\n */\nexport interface FieldConfigWithParsers {\n parsers?: FormlyValueParser[];\n}\n\n/**\n * Sentinel type to disable autocomplete on a field. Pass `false` to the autocomplete property.\n */\nexport type DisableAutocompleteForField = false;\n\nexport interface LabeledFieldConfig extends FieldConfig {\n key: string;\n label?: string;\n placeholder?: string;\n required?: boolean;\n readonly?: boolean;\n /**\n * Sets the autocomplete values.\n */\n autocomplete?: string | DisableAutocompleteForField;\n}\n\n/**\n * Configuration mixin that provides a default value for a form field.\n */\nexport interface DefaultValueFieldConfig<T = unknown> {\n defaultValue?: T;\n}\n\n/**\n * Configuration mixin for arbitrary HTML attributes on a form field element.\n */\nexport interface AttributesFieldConfig {\n attributes?: {\n [key: string]: string | number;\n };\n}\n\n/**\n * Configuration mixin for a field description/help text.\n */\nexport interface DescriptionFieldConfig {\n description?: string;\n}\n\n/**\n * Union of all partial field config types, used as a generic input type\n * for functions that accept any combination of field properties.\n */\nexport type PartialPotentialFieldConfig = Partial<FieldConfig> & Partial<LabeledFieldConfig> & Partial<AttributesFieldConfig> & Partial<DescriptionFieldConfig>;\n\n/**\n * Validates the configuration on the input field.\n */\nexport function formlyField<T extends FormlyFieldConfig = FormlyFieldConfig>(fieldConfig: T): T {\n if (!fieldConfig.key) {\n console.error(fieldConfig);\n throw new Error(`Field had a null key.`);\n }\n\n return fieldConfig;\n}\n\n/**\n * Creates an object with propers, expressions, and parsers properly configured from the input FieldConfig.\n *\n * @param fieldConfig\n * @param override\n * @returns\n */\nexport function propsAndConfigForFieldConfig<O extends object = object>(fieldConfig: Partial<FieldConfig> & Partial<LabeledFieldConfig> & Partial<AttributesFieldConfig> & Partial<DescriptionFieldConfig>, override?: PartialPotentialFieldConfig & O) {\n const { expressions, parsers } = fieldConfig;\n const props = propsValueForFieldConfig(fieldConfig, override);\n\n return {\n props,\n expressions,\n parsers\n };\n}\n\n/** Keys from {@link PartialPotentialFieldConfig} that are merged into Formly props. */\nexport const partialPotentialFieldConfigKeys: (keyof PartialPotentialFieldConfig)[] = ['label', 'placeholder', 'required', 'readonly', 'description', 'autocomplete'];\n/** Filter configuration for extracting field config keys from objects. */\nexport const partialPotentialFieldConfigKeysFilter: FilterKeyValueTuplesInput<PartialPotentialFieldConfig> = {\n keysFilter: partialPotentialFieldConfigKeys\n};\n\n/** Merge function that combines multiple partial field configs, picking only the recognized keys. */\nexport const mergePropsValueObjects = mergeObjectsFunction<PartialPotentialFieldConfig>(partialPotentialFieldConfigKeysFilter);\n\n/** Filter function that extracts only the recognized field config keys from an object. */\nexport const filterPartialPotentialFieldConfigValuesFromObject = filterFromPOJOFunction<PartialPotentialFieldConfig>({\n filter: partialPotentialFieldConfigKeysFilter\n}) as GeneralFilterFromPOJOFunction<PartialPotentialFieldConfig>;\n\n/**\n * Builds a Formly props object from a field config and optional overrides.\n *\n * Merges label, placeholder, required, readonly, description, attributes, and autocomplete\n * settings. When autocomplete is `false`, disables browser autofill via special attributes.\n *\n * @param fieldConfig - Base field configuration\n * @param override - Optional property overrides\n * @returns Merged props object suitable for use in a {@link FormlyFieldConfig}\n */\nexport function propsValueForFieldConfig<T extends FormlyFieldProps, O extends object = object>(fieldConfig: PartialPotentialFieldConfig, override?: PartialPotentialFieldConfig & O): Partial<T> & O {\n const { label, placeholder, required, readonly, description, autocomplete } = mergePropsValueObjects([fieldConfig, override]);\n const attributes = mergeObjects([fieldConfig.attributes, override?.attributes]);\n\n const result = filterFromPOJO({\n ...override,\n label,\n placeholder,\n required,\n readonly,\n description,\n attributes\n }) as T & O;\n\n // Apply autocomplete\n if (autocomplete != null) {\n if (autocomplete === false) {\n result.attributes = {\n ...result.attributes,\n ...disableFormlyFieldAutofillAttributes()\n };\n } else {\n (\n result.attributes as {\n [key: string]: string | number;\n }\n )['autocomplete'] = autocomplete;\n }\n }\n\n return result;\n}\n\n/**\n * Returns configuration for a formlyField that will disable autofill/autocomplete for a field.\n */\nexport function disableFormlyFieldAutofillAttributes(): { name: string; autocomplete: string } {\n // https://stackoverflow.com/questions/15738259/disabling-chrome-autofill\n return {\n name: 'password',\n autocomplete: 'off'\n };\n}\n\n/**\n * Map of validation message keys to their message strings or functions.\n */\nexport type FormlyMessageProperties = {\n [messageProperties: string]: ValidationMessageOption['message'];\n};\n\n/**\n * Input for building a Formly-compatible validator configuration from Angular validators\n * and custom validation messages.\n */\nexport interface ValidatorsForFieldConfigInput {\n validators?: ArrayOrValue<ValidatorFn>;\n asyncValidators?: ArrayOrValue<AsyncValidatorFn>;\n messages?: Maybe<FormlyMessageProperties>;\n}\n\n/**\n * Formly-compatible validator configuration structure with validators, async validators,\n * and validation messages.\n */\nexport type ValidatorsForFieldConfig = {\n validation?: {\n messages?: FormlyMessageProperties;\n };\n validators?: {\n validation: ValidatorFn[];\n };\n asyncValidators?: {\n validation: AsyncValidatorFn[];\n };\n};\n\n/**\n * Converts Angular validators, async validators, and validation messages into the\n * Formly-compatible validator configuration format.\n *\n * @param input - Validators, async validators, and messages to convert\n * @returns A Formly-compatible validator config, or undefined if no validators provided\n *\n * @example\n * ```typescript\n * const config = validatorsForFieldConfig({\n * validators: [Validators.required],\n * messages: { required: 'This field is required' }\n * });\n * ```\n */\nexport function validatorsForFieldConfig(input: ValidatorsForFieldConfigInput): Maybe<ValidatorsForFieldConfig> {\n const validators: ValidatorFn[] = asArray(input.validators);\n const asyncValidators: AsyncValidatorFn[] = asArray(input.asyncValidators);\n const messages: Maybe<FormlyMessageProperties> = input.messages;\n let config: Maybe<ValidatorsForFieldConfig>;\n\n if (messages || validators.length || asyncValidators.length) {\n config = {};\n\n if (validators.length) {\n config.validators = {\n validation: validators\n };\n }\n\n if (asyncValidators.length) {\n config.validators = {\n validation: asyncValidators\n };\n }\n\n if (messages && !objectHasNoKeys(messages)) {\n config.validation = {\n messages\n };\n }\n }\n\n return config;\n}\n\n// MARK: Material\n/**\n * Configuration mixin for Material form field styling options (prefix, suffix, appearance, etc.).\n */\nexport interface MaterialFormFieldConfig {\n readonly materialFormField?: Partial<Pick<MaterialFormlyFormFieldProps, 'prefix' | 'suffix' | 'hideLabel' | 'hideRequiredMarker' | 'hideFieldUnderline' | 'floatLabel' | 'appearance' | 'color' | 'hintStart' | 'hintEnd'>>;\n}\n","import { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig } from '../field';\nimport { type DbxChecklistItemFieldProps } from './checklist.item.field.component';\n\n/**\n * Full configuration for a single checklist item field.\n */\nexport interface ChecklistItemFieldConfig<T = unknown> extends LabeledFieldConfig, DbxChecklistItemFieldProps<T> {}\n\n/**\n * Builder input for creating a checklist item field. Requires `key` and `displayContent`;\n * all other properties are optional.\n */\nexport type ChecklistItemFieldBuilderInput<T = unknown> = Partial<ChecklistItemFieldConfig<T>> & Pick<ChecklistItemFieldConfig<T>, 'key' | 'displayContent'>;\n\n/**\n * Creates a Formly field configuration for a single checklist item with a checkbox\n * and display content (label, sublabel, description, anchor).\n *\n * @param config - Checklist item configuration with key and display content\n * @returns A validated {@link FormlyFieldConfig} with type `'checklistitem'`\n *\n * @example\n * ```typescript\n * const field = checklistItemField({\n * key: 'emailNotifications',\n * displayContent: of({ label: 'Email Notifications', description: 'Receive updates via email' })\n * });\n * ```\n */\nexport function checklistItemField<T = unknown>(config: ChecklistItemFieldBuilderInput<T>): FormlyFieldConfig<DbxChecklistItemFieldProps<T>> {\n const { key, displayContent, componentClass } = config;\n\n const fieldConfig = formlyField({\n key,\n type: 'checklistitem',\n ...propsAndConfigForFieldConfig(config, {\n displayContent,\n componentClass\n })\n });\n\n return fieldConfig;\n}\n","import { type Observable, combineLatest, map, shareReplay } from 'rxjs';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type ChecklistItemDisplayContent } from './checklist.item';\nimport { type Configurable, type KeyValueTransformMap, addPlusPrefixToNumber, type Maybe } from '@dereekb/util';\nimport { checklistItemField, type ChecklistItemFieldBuilderInput } from './checklist.item.field';\n\n/** A field key from the data set type, constrained to string keys. */\nexport type ChecklistItemFieldDataSetFieldKey<D> = keyof D & string;\n/** The value type for a specific key in the data set. */\nexport type ChecklistItemFieldDataSetFieldValueForKey<D, K extends keyof D = keyof D> = D[K];\n/** Maps all keys of a data type to boolean values, representing a checklist. */\nexport type ChecklistType<D> = KeyValueTransformMap<D, boolean>;\n\n/** Input for adding a checklist item to the data set builder, combining a key with field builder input. */\nexport type ChecklistItemFieldDataSetBuilderInput<D, T> = { key: ChecklistItemFieldDataSetFieldKey<D> } & ChecklistItemFieldBuilderInput<T>;\n\n/**\n * A configured item in a checklist data set, pairing a key with its field builder configuration.\n */\nexport interface ChecklistItemFieldDataSetItem<D, T extends ChecklistType<D>> {\n /**\n * Key for the field.\n */\n readonly key: ChecklistItemFieldDataSetFieldKey<T>;\n /**\n * Base field configuration to use.\n */\n readonly field: ChecklistItemFieldBuilderInput<T>;\n}\n\n/**\n * Used for building a set of configurations for a data-type object that has as second object that is used as a checklist.\n */\nexport class ChecklistItemFieldDataSetBuilder<D extends object, C extends ChecklistType<D> = ChecklistType<D>> {\n private readonly _fields = new Map<ChecklistItemFieldDataSetFieldKey<C>, ChecklistItemFieldDataSetItem<D, ChecklistType<D>>>();\n\n readonly dataObs$: Observable<D>;\n\n constructor(dataObs: Observable<D>) {\n this.dataObs$ = dataObs;\n }\n\n /**\n * Merges the input config with existing configuration.\n *\n * The displayContentObs, if provided, will merge with the existing observable and the two objects merged.\n */\n merge<T>(key: ChecklistItemFieldDataSetFieldKey<D>, config: Partial<ChecklistItemFieldBuilderInput<T>>) {\n const currentField = this._assertFieldExists(key).field;\n const mergedConfig: Configurable<ChecklistItemFieldDataSetBuilderInput<D, T>> = {\n ...currentField,\n ...config,\n key\n } as any;\n\n if (currentField.displayContent && config.displayContent) {\n mergedConfig.displayContent = combineLatest([currentField.displayContent, config.displayContent]).pipe(\n map(([a, b]) => {\n const result = {\n ...a,\n ...b\n };\n\n // console.log('A and b: ', a, b, result);\n return result;\n }),\n shareReplay(1)\n );\n }\n\n // console.log('Merged: ', mergedConfig);\n\n this.field(mergedConfig);\n }\n\n override<T>(key: ChecklistItemFieldDataSetFieldKey<D>, config: Partial<ChecklistItemFieldBuilderInput<T>>) {\n const currentField = this._assertFieldExists(key);\n\n this.field({\n ...currentField.field,\n ...config,\n key\n });\n }\n\n _assertFieldExists(key: ChecklistItemFieldDataSetFieldKey<D>): ChecklistItemFieldDataSetItem<D, any> {\n const currentField = this._fields.get(key);\n\n if (!currentField) {\n throw new Error(`Expected field with key \"${key}\" for override() but was unavailable.`);\n }\n\n return currentField;\n }\n\n showValueFieldArrayCount<T extends ChecklistItemFieldDataSetFieldValueForKey<D> & Array<unknown>>(key: ChecklistItemFieldDataSetFieldKey<D>, config?: Partial<ChecklistItemFieldDataSetBuilderInput<D, T>>) {\n return this.field({\n displayContent: this.contentWithDisplayValueFromData(key, (x: T) => addPlusPrefixToNumber(x?.length)),\n ...config,\n key\n });\n }\n\n showValueField<T extends ChecklistItemFieldDataSetFieldValueForKey<D> = ChecklistItemFieldDataSetFieldValueForKey<D>>(key: ChecklistItemFieldDataSetFieldKey<D>, config?: Partial<ChecklistItemFieldDataSetBuilderInput<D, T>>, labelFn: (value: T) => Maybe<string> = (x: T) => (x as unknown as object | number | string)?.toString()) {\n return this.field({\n displayContent: this.contentWithDisplayValueFromData(key, labelFn),\n ...config,\n key\n });\n }\n\n field<T>(config: ChecklistItemFieldDataSetBuilderInput<D, T>) {\n const key = config.key;\n\n const field: ChecklistItemFieldDataSetItem<D, ChecklistType<D>> = {\n key,\n field: config as unknown as ChecklistItemFieldBuilderInput<ChecklistType<D>>\n };\n\n this._fields.set(key, field);\n }\n\n // MARK: Build/Finish\n build(): FormlyFieldConfig[] {\n return Array.from(this._fields.values()).map(({ field }) => {\n return checklistItemField(field);\n });\n }\n\n // MARK: Utility\n customContentFromData<T extends ChecklistItemFieldDataSetFieldValueForKey<D> = ChecklistItemFieldDataSetFieldValueForKey<D>>(mapFn: (data: D) => ChecklistItemDisplayContent<T>): Observable<ChecklistItemDisplayContent<T>> {\n return this.dataObs$.pipe(map(mapFn));\n }\n\n contentWithValueFromData<K extends keyof D = keyof D, T extends ChecklistItemFieldDataSetFieldValueForKey<D> = ChecklistItemFieldDataSetFieldValueForKey<D>>(key: K, contentFn?: (value: T) => ChecklistItemDisplayContent<T>): Observable<ChecklistItemDisplayContent<T>> {\n return this.customContentFromData((data) => {\n const meta = data[key] as unknown as T;\n const content = contentFn?.(meta);\n\n return {\n meta,\n ...content\n };\n });\n }\n\n contentWithDisplayValueFromData<T extends ChecklistItemFieldDataSetFieldValueForKey<D> = ChecklistItemFieldDataSetFieldValueForKey<D>>(key: ChecklistItemFieldDataSetFieldKey<D>, labelFn: (value: T) => Maybe<string> = (x: T) => (x as unknown as object | number | string)?.toString()): Observable<ChecklistItemDisplayContent<T>> {\n function sanitizeLabel(label: Maybe<string>): string {\n return label ?? 'N/A';\n }\n\n return this.contentWithValueFromData(key, (value: T) => ({ label: sanitizeLabel(labelFn(value)) }));\n }\n}\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { DbxInjectionComponent, type DbxInjectionComponentConfig } from '@dereekb/dbx-core';\nimport { FieldType, type FormlyFieldConfig } from '@ngx-formly/core';\n\n/** Configuration for the custom component to inject into the form field. Alias for {@link DbxInjectionComponentConfig}. */\nexport type DbxFormComponentFieldConfig<T> = DbxInjectionComponentConfig<T>;\n\n/** Formly field config extended with a {@link DbxFormComponentFieldConfig} for custom component rendering. */\nexport interface DbxFormComponentFormlyFieldConfig<T = unknown> extends FormlyFieldConfig {\n componentField: DbxFormComponentFieldConfig<T>;\n}\n\n/**\n * Formly field component that renders a custom Angular component via dynamic injection.\n *\n * Uses {@link DbxInjectionComponent} to instantiate the component class specified in the field's\n * `componentField` configuration.\n */\n@Component({\n template: `\n <div class=\"dbx-form-component\" dbx-injection [config]=\"config\"></div>\n `,\n imports: [DbxInjectionComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormComponentFieldComponent<T = unknown> extends FieldType<DbxFormComponentFormlyFieldConfig<T>> {\n get config(): DbxInjectionComponentConfig<T> {\n return this.field.componentField;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxFormComponentFieldComponent } from './component.field.component';\n\nconst importsAndExports = [DbxFormComponentFieldComponent];\n\n/** Registers the `component` Formly field type for custom Angular component injection. */\n@NgModule({\n imports: [\n ...importsAndExports,\n FormlyModule.forChild({\n types: [{ name: 'component', component: DbxFormComponentFieldComponent }]\n })\n ],\n exports: importsAndExports\n})\nexport class DbxFormFormlyComponentFieldModule {}\n","import { type DbxFormComponentFieldConfig, type DbxFormComponentFormlyFieldConfig } from './component.field.component';\n\n/** Configuration for a custom Angular component embedded as a Formly field. */\nexport type ComponentFieldConfig<T = unknown> = DbxFormComponentFieldConfig<T>;\n\n/**\n * Creates a Formly field configuration that renders a custom Angular component.\n *\n * @param config - Component field configuration\n * @returns A {@link DbxFormComponentFormlyFieldConfig} with type `'component'`\n *\n * @example\n * ```typescript\n * const field = componentField({ componentClass: MyCustomFormComponent });\n * ```\n */\nexport function componentField<T = unknown>(config: ComponentFieldConfig<T>): DbxFormComponentFormlyFieldConfig<T> {\n return {\n type: 'component',\n componentField: config\n };\n}\n","import { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig } from '../../field';\nimport { type DbxItemListFieldProps } from './list.field.component';\nimport { type AbstractDbxSelectionListWrapperDirective } from '@dereekb/dbx-web';\nimport { type PrimativeKey } from '@dereekb/util';\n\n/**\n * Configuration for a dbx list selection field that displays items in a selection list component.\n */\nexport interface DbxListFieldConfig<T = unknown, C extends AbstractDbxSelectionListWrapperDirective<T> = AbstractDbxSelectionListWrapperDirective<T>, K extends PrimativeKey = PrimativeKey> extends LabeledFieldConfig, DbxItemListFieldProps<T, C, K> {}\n\n/**\n * Creates a Formly field configuration for a dbx selection list field.\n *\n * @param config - List field configuration including the list component class and state observable\n * @returns A validated {@link FormlyFieldConfig} with type `'dbxlistfield'`\n *\n * @example\n * ```typescript\n * const field = dbxListField({\n * key: 'selectedItems',\n * label: 'Items',\n * listComponentClass: MyListComponent,\n * state$: items$\n * });\n * ```\n */\nexport function dbxListField<T = unknown, C extends AbstractDbxSelectionListWrapperDirective<T> = AbstractDbxSelectionListWrapperDirective<T>, K extends PrimativeKey = PrimativeKey>(config: DbxListFieldConfig<T, C, K>): FormlyFieldConfig {\n const { key, listComponentClass, readKey, state$, loadMore } = config;\n return formlyField({\n key,\n type: 'dbxlistfield',\n ...propsAndConfigForFieldConfig(config, {\n listComponentClass,\n readKey,\n state$,\n loadMore\n })\n });\n}\n","import { ChangeDetectionStrategy, Component, type OnDestroy, type OnInit, type Type } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { type AbstractControl } from '@angular/forms';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { DbxInjectionComponent, type DbxInjectionComponentConfig } from '@dereekb/dbx-core';\nimport { type AbstractDbxSelectionListWrapperDirective, type ListSelectionState, type DbxValueListItemDecisionFunction, dbxValueListItemDecisionFunction, DbxListModifierModule } from '@dereekb/dbx-web';\nimport { distinctUntilHasDifferentValues, filterMaybe, type ListLoadingState, SubscriptionObject, switchMapFilterMaybe } from '@dereekb/rxjs';\nimport { convertMaybeToArray, hasDifferentValues, isSelectedDecisionFunctionFactory, type Maybe, type PrimativeKey, type ReadKeyFunction, readKeysFrom } from '@dereekb/util';\nimport { type FormlyFieldProps, FieldType, type FieldTypeConfig } from '@ngx-formly/core';\nimport { map, type Observable, shareReplay, BehaviorSubject, startWith, switchMap } from 'rxjs';\n\n/**\n * Formly field properties for an item list selection field that renders items\n * via a custom {@link AbstractDbxSelectionListWrapperDirective} component.\n */\nexport interface DbxItemListFieldProps<T = unknown, C extends AbstractDbxSelectionListWrapperDirective<T> = AbstractDbxSelectionListWrapperDirective<T>, K extends PrimativeKey = PrimativeKey> extends Pick<FormlyFieldProps, 'label' | 'description'> {\n /**\n * List to render components from\n */\n readonly listComponentClass: Observable<Type<C>>;\n /**\n * Read key function to read the identifier from the input\n */\n readonly readKey: ReadKeyFunction<T, K>;\n /**\n * Observable that provides the items to select.\n */\n readonly state$: Observable<ListLoadingState<T>>;\n /**\n * Function that signals to load more items.\n */\n readonly loadMore?: () => void;\n}\n\n/**\n * Formly field component that allows picking items by identifier from a dynamic DbxList component.\n *\n * The list component class is provided as an observable, enabling lazy loading. Selected items\n * are tracked by key and synchronized with the form control value.\n */\n@Component({\n templateUrl: 'list.field.component.html',\n imports: [DbxListModifierModule, DbxInjectionComponent, MatDividerModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxItemListFieldComponent<T = unknown, C extends AbstractDbxSelectionListWrapperDirective<T> = AbstractDbxSelectionListWrapperDirective<T>, K extends PrimativeKey = PrimativeKey> extends FieldType<FieldTypeConfig<DbxItemListFieldProps<T, C, K>>> implements OnInit, OnDestroy {\n private readonly _selectionEventSub = new SubscriptionObject();\n private readonly _loadMoreSub = new SubscriptionObject();\n\n private readonly _formControlObs = new BehaviorSubject<Maybe<AbstractControl>>(undefined);\n readonly formControl$ = this._formControlObs.pipe(filterMaybe());\n\n readonly _formControlValue$: Observable<Maybe<K[]>> = this.formControl$.pipe(switchMap((control) => control.valueChanges.pipe(startWith(control.value), shareReplay(1))));\n readonly values$: Observable<K[]> = this._formControlValue$.pipe(map(convertMaybeToArray), shareReplay(1));\n\n private readonly _listComponentClassObs = new BehaviorSubject<Maybe<Observable<Type<C>>>>(undefined);\n readonly listComponentClass$ = this._listComponentClassObs.pipe(switchMapFilterMaybe());\n\n readonly config$: Observable<DbxInjectionComponentConfig<C>> = this.listComponentClass$.pipe(\n map((componentClass) => {\n const loadMore = this.loadMore;\n const config: DbxInjectionComponentConfig<C> = {\n componentClass,\n init: (listView) => {\n listView.setSelectionMode('select'); // always enable select\n listView.setState(this.field.props.state$);\n\n if (loadMore != null) {\n this._loadMoreSub.subscription = listView.loadMore.subscribe(() => loadMore());\n }\n\n // set subscription\n this._selectionEventSub.subscription = listView.selectionChange.subscribe((x) => this.updateForSelection(x));\n }\n };\n\n return config;\n })\n );\n\n readonly isSelectedModifierFunction$: Observable<DbxValueListItemDecisionFunction<T>> = this.values$.pipe(\n distinctUntilHasDifferentValues(),\n map((values) => {\n return dbxValueListItemDecisionFunction(isSelectedDecisionFunctionFactory({ readKey: this.readKey })(values));\n }),\n shareReplay(1)\n );\n\n readonly configSignal = toSignal(this.config$);\n readonly isSelectedModifierFunctionSignal = toSignal(this.isSelectedModifierFunction$);\n\n get label() {\n return this.field.props.label;\n }\n\n get description() {\n return this.field.props.description;\n }\n\n get listComponentClass() {\n return this.field.props.listComponentClass;\n }\n\n get readKey() {\n return this.field.props.readKey;\n }\n\n get loadMore() {\n return this.field.props.loadMore;\n }\n\n ngOnInit(): void {\n this._formControlObs.next(this.formControl);\n this._listComponentClassObs.next(this.listComponentClass);\n }\n\n ngOnDestroy(): void {\n this._formControlObs.complete();\n this._selectionEventSub.destroy();\n this._listComponentClassObs.complete();\n }\n\n updateForSelection(list: ListSelectionState<T>) {\n const items = list.items.filter((x) => x.selected).map((x) => x.itemValue);\n const values = readKeysFrom(this.readKey, items);\n this.setValues(values);\n }\n\n setValues(values: Maybe<K[]>): void {\n const currentValues = this.formControl.value;\n\n if (currentValues == null || hasDifferentValues(currentValues, values)) {\n this.formControl.setValue(values);\n this.formControl.markAsDirty();\n this.formControl.markAsTouched();\n }\n }\n}\n","<div class=\"dbx-list-item-field\" dbxListItemModifier [dbxListItemIsSelectedModifier]=\"isSelectedModifierFunctionSignal()\">\n @if (label) {\n <span class=\"dbx-label dbx-label-padded\">{{ label }}</span>\n }\n <div class=\"dbx-list-item-field-content\">\n <dbx-injection [config]=\"configSignal()\"></dbx-injection>\n </div>\n <mat-divider></mat-divider>\n @if (description) {\n <div class=\"dbx-form-description\">{{ description }}</div>\n }\n</div>\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxItemListFieldComponent } from './list.field.component';\n\nconst importsAndExports = [DbxItemListFieldComponent];\n\n/** Registers the `dbxlistfield` Formly field type for item list selection. */\n@NgModule({\n imports: [\n ...importsAndExports,\n FormlyModule.forChild({\n types: [{ name: 'dbxlistfield', component: DbxItemListFieldComponent }]\n })\n ],\n exports: importsAndExports\n})\nexport class DbxFormFormlyDbxListFieldModule {}\n","import { type DbxInjectionComponentConfig } from '@dereekb/dbx-core';\nimport { type LoadingState, successResult, mapLoadingStateResults, filterMaybe, mapIsListLoadingStateWithEmptyValue, startWithBeginLoading, SubscriptionObject, listLoadingStateContext } from '@dereekb/rxjs';\nimport { type PrimativeKey, convertMaybeToArray, makeValuesGroupMap, type Maybe, type ArrayOrValue, separateValues, filterUniqueValues, type Configurable } from '@dereekb/util';\nimport { computed, Directive, type OnDestroy, type OnInit, viewChild } from '@angular/core';\nimport { FormControl, type AbstractControl } from '@angular/forms';\nimport { MatInput } from '@angular/material/input';\nimport { type FieldTypeConfig, type FormlyFieldProps } from '@ngx-formly/core';\nimport { FieldType } from '@ngx-formly/material';\nimport { BehaviorSubject, combineLatest, type Observable, of, filter, map, debounceTime, distinctUntilChanged, switchMap, startWith, shareReplay, mergeMap, first, delay } from 'rxjs';\nimport { type PickableValueFieldDisplayFunction, type PickableValueFieldDisplayValue, type PickableValueFieldFilterFunction, type PickableValueFieldHashFunction, type PickableValueFieldLoadValuesFunction, type PickableValueFieldValue } from './pickable';\nimport { type DbxValueListItem } from '@dereekb/dbx-web';\nimport { camelCase } from 'change-case-all';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\n/**\n * A list item wrapping a {@link PickableValueFieldDisplayValue} with selection state.\n */\nexport type PickableItemFieldItem<T, M = unknown> = DbxValueListItem<PickableValueFieldDisplayValue<T, M>>;\n\n/** Sort function for ordering pickable items before display. */\nexport type PickableItemFieldItemSortFn<T, M = unknown> = (items: PickableItemFieldItem<T, M>[]) => PickableItemFieldItem<T, M>[];\n\n/**\n * Formly field properties for configuring a pickable value selection field.\n *\n * Supports single/multi-select, text filtering, hash-based deduplication, and custom display rendering.\n */\nexport interface PickableValueFieldsFieldProps<T, M = unknown, H extends PrimativeKey = PrimativeKey> extends FormlyFieldProps {\n /**\n * Loads all pickable values.\n */\n readonly loadValues: PickableValueFieldLoadValuesFunction<T, M>;\n /**\n * Used for building a display value given the input.\n */\n readonly displayForValue: PickableValueFieldDisplayFunction<T, M>;\n /**\n * Used for hashing display values and omitting repeat values.\n *\n * If hashForValue is not provided, the value's value will be used as is.\n */\n readonly hashForValue?: PickableValueFieldHashFunction<T, H>;\n /**\n * Used for filtering values via the search text.\n */\n readonly filterValues?: PickableValueFieldFilterFunction<T, M>;\n /**\n * Used for sorting the items before they are displayed.\n *\n * Should only be used to sort values.\n */\n readonly sortItems?: PickableItemFieldItemSortFn<T, M>;\n /**\n * Whether or not to allow multiple items to be selected.\n */\n readonly multiSelect?: boolean;\n /**\n * Whether or not to set/get values as an array or a single value. If set false, multiSelect is ignored.\n */\n readonly asArrayValue?: boolean;\n /**\n * Whether or not to show the text filter. True by default if filterValues is provided.\n */\n readonly showTextFilter?: boolean;\n /**\n * Whether or not to skip the filter function when the input is empty.\n *\n * True by default.\n */\n readonly skipFilterFnOnEmpty?: boolean;\n /**\n * Filter Label\n */\n readonly filterLabel?: string;\n /**\n * The maximum number of values that can be picked\n */\n readonly maxPicks?: number;\n /**\n * Optional description/hint to display.\n */\n readonly description?: string;\n /**\n * Footer Display\n */\n readonly footerConfig?: DbxInjectionComponentConfig;\n /**\n * Whether to show an \"All\" toggle button that selects or deselects all visible items.\n *\n * Only applies when `multiSelect` is true (the default).\n */\n readonly showSelectAllButton?: boolean;\n /**\n * Changes the selection mode of the list to \"view\" mode on disabled, hiding the selection boxes.\n */\n readonly changeSelectionModeToViewOnDisabled?: boolean;\n /**\n * (Optional) observable that will trigger the clearing of all cached display values.\n */\n readonly refreshDisplayValues$?: Observable<unknown>;\n}\n\n/**\n * A display value augmented with its computed hash for deduplication and lookup.\n */\nexport interface PickableValueFieldDisplayValueWithHash<T, M = unknown, H extends PrimativeKey = PrimativeKey> extends PickableValueFieldDisplayValue<T, M> {\n _hash: H;\n}\n\n/**\n * Abstract base directive for pickable item fields that manages value loading,\n * display caching, text filtering, and selection state.\n *\n * Subclasses provide the specific UI presentation (chips, lists, etc.).\n */\n@Directive()\nexport class AbstractDbxPickableItemFieldDirective<T, M = unknown, H extends PrimativeKey = PrimativeKey> extends FieldType<FieldTypeConfig<PickableValueFieldsFieldProps<T, M, H>>> implements OnInit, OnDestroy {\n readonly filterMatInput = viewChild<string, MatInput>('matInput', { read: MatInput });\n\n readonly inputCtrl = new FormControl('');\n\n private readonly _formControlObs = new BehaviorSubject<Maybe<AbstractControl>>(undefined);\n readonly formControl$ = this._formControlObs.pipe(filterMaybe());\n\n private readonly _clearDisplayHashMapSub = new SubscriptionObject();\n private readonly _displayHashMap = new BehaviorSubject<Map<H, PickableValueFieldDisplayValue<T, M>>>(new Map());\n\n readonly filterInputValue$: Observable<Maybe<string>> = this.inputCtrl.valueChanges.pipe(startWith(undefined));\n readonly filterInputValueString$: Observable<Maybe<string>> = this.filterInputValue$.pipe(debounceTime(200), distinctUntilChanged(), shareReplay(1));\n\n readonly loadResultsDisplayValuesState$: Observable<LoadingState<PickableValueFieldDisplayValueWithHash<T, M, H>[]>> = this.formControl$.pipe(\n first(),\n switchMap(() =>\n this.loadValuesFn().pipe(\n switchMap((x) => this.loadDisplayValuesForFieldValues(x)),\n startWithBeginLoading()\n )\n ),\n shareReplay(1)\n );\n\n readonly _formControlValue$: Observable<T | T[]> = this.formControl$.pipe(switchMap((control) => control.valueChanges.pipe(startWith(control.value), shareReplay(1))));\n\n readonly loadResultsDisplayValues$: Observable<PickableValueFieldDisplayValueWithHash<T, M, H>[]> = this.loadResultsDisplayValuesState$.pipe(map((x) => x?.value ?? []));\n\n /**\n * Current values in the form control.\n */\n readonly values$: Observable<T[]> = this._formControlValue$.pipe(map(convertMaybeToArray), shareReplay(1));\n\n /**\n * Current values with their display value.\n */\n readonly displayValuesState$: Observable<LoadingState<PickableValueFieldDisplayValueWithHash<T, M, H>[]>> = combineLatest([this.loadResultsDisplayValues$, this.values$]).pipe(\n switchMap(([displayValues, currentValues]) => {\n const displayValuesMap = makeValuesGroupMap(displayValues, (x) => this.hashForValue(x.value));\n const valuesNotInDisplayMap: T[] = [];\n\n currentValues.forEach((x) => {\n const key = this.hashForValue(x);\n const displayValue: Maybe<PickableValueFieldDisplayValueWithHash<T, M, H>> = displayValuesMap.get(key)?.[0];\n\n if (!displayValue) {\n valuesNotInDisplayMap.push(x);\n }\n });\n\n if (valuesNotInDisplayMap.length) {\n return this.loadDisplayValuesForValues(valuesNotInDisplayMap).pipe(\n map((x) =>\n mapLoadingStateResults(x, {\n mapValue: (loadedValues: Configurable<PickableValueFieldDisplayValueWithHash<T, M, H>>[]) => {\n loadedValues.forEach((x) => (x.isUnknown = x.isUnknown ?? true)); // Assign unknown flag.\n return [...displayValues, ...loadedValues];\n }\n })\n )\n );\n } else {\n return of(successResult(displayValues));\n }\n })\n );\n\n /**\n * Results to be displayed if filtered.\n */\n readonly filteredSearchResultsState$: Observable<LoadingState<PickableValueFieldDisplayValueWithHash<T, M, H>[]>> = this.loadResultsDisplayValues$.pipe(\n switchMap((values) =>\n this.filterInputValueString$.pipe(\n switchMap((text) =>\n combineLatest([this._filterValues(text, values), this.displayValuesState$]).pipe(\n map(([values, displayState]) =>\n mapLoadingStateResults(displayState, {\n mapValue: (displayValues: PickableValueFieldDisplayValueWithHash<T, M, H>[]) => {\n const valueHashSet = new Set(values.map((x) => this.hashForValue(x)));\n return displayValues.filter((x) => !x.isUnknown && valueHashSet.has(x._hash));\n }\n })\n ),\n startWithBeginLoading()\n )\n )\n )\n ),\n shareReplay(1)\n );\n\n readonly filteredSearchResults$: Observable<PickableValueFieldDisplayValueWithHash<T, M, H>[]> = this.filteredSearchResultsState$.pipe(\n map((x) => x?.value),\n filterMaybe(),\n shareReplay(1)\n );\n\n readonly items$: Observable<PickableItemFieldItem<T, M>[]> = combineLatest([this.filteredSearchResults$, this.values$]).pipe(\n map(([displayValues, values]) => {\n const selectedHashValuesSet = new Set(values.map((x) => this.hashForValue(x)));\n let items: PickableItemFieldItem<T, M>[] = displayValues.map((x) => ({ itemValue: x, selected: selectedHashValuesSet.has(x._hash) }));\n\n if (this.sortItems) {\n items = this.sortItems(items);\n }\n\n return items;\n }),\n shareReplay(1)\n );\n\n readonly itemsLoadingState$: Observable<LoadingState<PickableItemFieldItem<T>[]>> = this.loadResultsDisplayValues$.pipe(\n switchMap(() =>\n this.items$.pipe(\n first(),\n map((x) => successResult(x)),\n startWithBeginLoading(),\n shareReplay(1)\n )\n )\n );\n\n /**\n * Context used for managing the loading of items, or when the current results change.\n */\n readonly context = listLoadingStateContext({ obs: this.itemsLoadingState$, showLoadingOnNoValue: false });\n\n readonly filterItemsLoadingState$: Observable<LoadingState<PickableItemFieldItem<T>[]>> = this.items$.pipe(\n map((x) => successResult(x)),\n startWithBeginLoading(),\n shareReplay(1)\n );\n\n readonly noItemsAvailable$ = this.filterItemsLoadingState$.pipe(mapIsListLoadingStateWithEmptyValue(), distinctUntilChanged());\n\n /**\n * Context used for searching/filtering.\n */\n readonly filterResultsContext = listLoadingStateContext({ obs: this.filteredSearchResultsState$, showLoadingOnNoValue: true });\n\n readonly itemsSignal = toSignal(this.items$);\n readonly noItemsAvailableSignal = toSignal(this.noItemsAvailable$);\n\n /**\n * Signal that is true when all visible items are currently selected.\n */\n readonly allSelectedSignal = computed(() => {\n const items = this.itemsSignal();\n return items != null && items.length > 0 && items.every((x) => x.selected);\n });\n\n get readonly(): Maybe<boolean> {\n return this.props.readonly;\n }\n\n get isReadonlyOrDisabled() {\n return this.readonly || this.disabled;\n }\n\n get pickableField(): PickableValueFieldsFieldProps<T, M, H> {\n return this.props;\n }\n\n get multiSelect(): boolean {\n return this.pickableField.multiSelect ?? true;\n }\n\n get asArrayValue(): boolean {\n return this.pickableField.asArrayValue ?? true;\n }\n\n get pickOnlyOne(): boolean {\n return this.asArrayValue === false || this.multiSelect === false;\n }\n\n get filterLabel(): Maybe<string> {\n return this.pickableField.filterLabel;\n }\n\n get name(): string {\n return this.field.name ?? camelCase(this.label ?? (this.key as string));\n }\n\n get label(): Maybe<string> {\n return this.props.label;\n }\n\n get autocomplete(): string {\n return (this.props.attributes?.['autocomplete'] ?? this.key) as string;\n }\n\n get changeSelectionModeToViewOnDisabled(): boolean {\n return this.pickableField.changeSelectionModeToViewOnDisabled ?? false;\n }\n\n get showSelectAllButton(): boolean {\n return this.pickableField.showSelectAllButton ?? false;\n }\n\n get sortItems(): Maybe<PickableItemFieldItemSortFn<T, M>> {\n return this.pickableField.sortItems;\n }\n\n get hashForValue(): PickableValueFieldHashFunction<T, H> {\n return this.pickableField.hashForValue ?? ((x) => x as unknown as H);\n }\n\n get displayForValue(): PickableValueFieldDisplayFunction<T, M> {\n return this.pickableField.displayForValue;\n }\n\n get showFilterInput(): boolean {\n return Boolean(this.pickableField.filterValues);\n }\n\n get filterValuesFn(): PickableValueFieldFilterFunction<T, M> {\n return this.pickableField.filterValues ?? ((_, x) => of(x.map((y) => y.value)));\n }\n\n get skipFilterFnOnEmpty(): boolean {\n return this.pickableField.skipFilterFnOnEmpty ?? true;\n }\n\n get _filterValues(): PickableValueFieldFilterFunction<T, M> {\n let fn: PickableValueFieldFilterFunction<T, M>;\n\n if (this.skipFilterFnOnEmpty) {\n fn = (filterText: Maybe<string>, values: PickableValueFieldDisplayValue<T, M>[]): Observable<T[]> => {\n let result: Observable<T[]>;\n\n if (filterText) {\n result = this.filterValuesFn(filterText, values);\n } else {\n result = of(values.map((x) => x.value));\n }\n\n return result;\n };\n } else {\n fn = this.filterValuesFn;\n }\n\n return fn;\n }\n\n get showTextFilter(): boolean {\n return this.pickableField.showTextFilter ?? Boolean(this.pickableField.filterValues);\n }\n\n get loadValuesFn(): PickableValueFieldLoadValuesFunction<T, M> {\n return this.pickableField.loadValues;\n }\n\n get values(): T[] {\n return this._getValueOnFormControl(this.formControl.value) ?? [];\n }\n\n get footerConfig(): Maybe<DbxInjectionComponentConfig> {\n return this.pickableField.footerConfig;\n }\n\n get refreshDisplayValues$() {\n return this.pickableField.refreshDisplayValues$;\n }\n\n loadDisplayValuesForValues(values: T[]): Observable<LoadingState<PickableValueFieldDisplayValueWithHash<T, M, H>[]>> {\n return this.loadDisplayValuesForFieldValues(values.map((value) => ({ value })));\n }\n\n loadDisplayValuesForFieldValues(values: PickableValueFieldValue<T, M>[]): Observable<LoadingState<PickableValueFieldDisplayValueWithHash<T, M, H>[]>> {\n return this.getDisplayValuesForFieldValues(values).pipe(\n map((displayValues: PickableValueFieldDisplayValueWithHash<T, M, H>[]) => successResult(displayValues)),\n startWithBeginLoading(),\n shareReplay(1)\n );\n }\n\n getDisplayValuesForFieldValues(values: PickableValueFieldValue<T, M>[]): Observable<PickableValueFieldDisplayValueWithHash<T, M, H>[]> {\n return this._displayHashMap.pipe(\n mergeMap((displayMap) => {\n const mappingResult = values.map((x) => [x, this.hashForValue(x.value)] as [PickableValueFieldValue<T, M>, H]).map(([x, hash], i) => [i, hash, x, displayMap.get(hash)] as [number, H, PickableValueFieldValue<T, M>, PickableValueFieldDisplayValueWithHash<T, M, H>]);\n\n const {\n //\n included: hasDisplay,\n excluded: needsDisplay\n } = separateValues(mappingResult, (x) => Boolean(x[3]));\n\n if (needsDisplay.length > 0) {\n // Go get the display value.\n const displayValuesObs = this.displayForValue(needsDisplay.map((x) => x[2]));\n\n return displayValuesObs.pipe(\n first(),\n map((displayResults) => {\n const displayResultsWithHash: PickableValueFieldDisplayValueWithHash<T, M, H>[] = displayResults.map((x) => {\n (x as PickableValueFieldDisplayValueWithHash<T, M, H>)._hash = this.hashForValue(x.value);\n return x as PickableValueFieldDisplayValueWithHash<T, M, H>;\n });\n\n // Create a map to re-join values later.\n const displayResultsMapping: [PickableValueFieldDisplayValueWithHash<T, M, H>, H][] = displayResultsWithHash.map((x) => [x, x._hash]);\n const valueIndexHashMap = new Map(displayResultsMapping.map(([x, hash]) => [hash, x]));\n\n // Update displayMap. No need to push an update notification.\n displayResultsMapping.forEach(([x, hash]) => displayMap.set(hash, x));\n\n // Zip values back together.\n const newDisplayValues = mappingResult.map((x) => x[3] ?? valueIndexHashMap.get(x[1]));\n\n // Return display values.\n return newDisplayValues;\n })\n );\n } else {\n // If all display values are hashed return that.\n return of(hasDisplay.map((x) => x[3])) as Observable<PickableValueFieldDisplayValueWithHash<T, M, H>[]>;\n }\n })\n );\n }\n\n ngOnInit(): void {\n this._formControlObs.next(this.formControl);\n\n if (this.refreshDisplayValues$ != null) {\n this._clearDisplayHashMapSub.subscription = this.refreshDisplayValues$.subscribe(() => this._displayHashMap.next(new Map()));\n }\n\n // Focus after finished loading for the first time.\n this.context.loading$\n .pipe(\n delay(10),\n filter((x) => x),\n first()\n )\n .subscribe(() => {\n this.filterMatInput()?.focus();\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._displayHashMap.complete();\n this._formControlObs.complete();\n this._clearDisplayHashMapSub.destroy();\n this.filterResultsContext.destroy();\n }\n\n protected _getValueOnFormControl(valueOnFormControl: ArrayOrValue<T>): T[] {\n const value: T[] = valueOnFormControl != null ? ([] as T[]).concat(valueOnFormControl) : []; // Always return an array.\n return value;\n }\n\n addValue(value: T): void {\n let newValues: T[];\n\n if (this.pickOnlyOne) {\n newValues = [value];\n } else {\n newValues = [...this.values, value];\n }\n\n this.setValues(newValues);\n }\n\n removeValue(value: T): void {\n const hashToFilter = this.hashForValue(value);\n const values = this.values.filter((x) => this.hashForValue(x) !== hashToFilter);\n this.setValues(values);\n }\n\n /**\n * Selects all currently visible items.\n */\n selectAll(): void {\n const items = this.itemsSignal() ?? [];\n const allValues = items.filter((x) => !x.disabled).map((x) => x.itemValue.value);\n this.setValues(allValues);\n }\n\n /**\n * Deselects all currently visible items.\n */\n deselectAll(): void {\n this.setValues([]);\n }\n\n /**\n * Toggles between selecting all and deselecting all visible items.\n */\n toggleAll(): void {\n if (this.allSelectedSignal()) {\n this.deselectAll();\n } else {\n this.selectAll();\n }\n }\n\n setValues(values: T[]): void {\n // Use to filter non-unique values.\n if (this.hashForValue) {\n values = filterUniqueValues(values, this.hashForValue);\n }\n\n if (this.pickOnlyOne) {\n values = [values[0]].filter((x) => x != null);\n }\n\n this._setValueOnFormControl(values);\n }\n\n // MARK: Internal\n protected _setValueOnFormControl(values: T[]): void {\n let newValue: T | T[] = values;\n\n if (!this.asArrayValue) {\n newValue = [values[0]].filter((x) => x != null)[0];\n }\n\n this.formControl.setValue(newValue);\n this.formControl.markAsTouched();\n this.formControl.markAsDirty();\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { AbstractDbxPickableItemFieldDirective, type PickableItemFieldItem } from './pickable.field.directive';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { DbxLoadingComponent } from '@dereekb/dbx-web';\nimport { MatDivider } from '@angular/material/divider';\nimport { DbxInjectionComponent } from '@dereekb/dbx-core';\nimport { MatInputModule } from '@angular/material/input';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\n\n/**\n * Formly field component that renders pickable values as Material chips.\n *\n * Clicking a chip toggles its selection state unless the field is readonly or disabled.\n */\n@Component({\n templateUrl: 'pickable.chip.field.component.html',\n imports: [MatChipsModule, NgTemplateOutlet, FormsModule, ReactiveFormsModule, MatIconModule, MatInputModule, DbxLoadingComponent, MatDivider, DbxInjectionComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxPickableChipListFieldComponent<T> extends AbstractDbxPickableItemFieldDirective<T> {\n itemClicked(item: PickableItemFieldItem<T>): void {\n if (!item.disabled && !this.isReadonlyOrDisabled) {\n if (item.selected) {\n this.removeValue(item.itemValue.value);\n } else {\n this.addValue(item.itemValue.value);\n }\n }\n }\n}\n","<div class=\"dbx-pickable-item-field\">\n <dbx-loading [context]=\"context\" [linear]=\"true\">\n @if (showFilterInput) {\n <ng-container *ngTemplateOutlet=\"filterTemplate\"></ng-container>\n }\n <!-- Content -->\n <div class=\"dbx-pickable-item-field-chips\">\n <mat-chip-listbox [multiple]=\"multiSelect\" [required]=\"required\" [selectable]=\"!isReadonlyOrDisabled\" [disabled]=\"readonly\" #chipList>\n @if (showSelectAllButton && multiSelect && !isReadonlyOrDisabled) {\n <mat-chip-option (click)=\"toggleAll()\" [selected]=\"allSelectedSignal()\">\n <span class=\"dbx-chip-label\">All</span>\n </mat-chip-option>\n }\n @for (item of itemsSignal(); track item.itemValue.value) {\n <mat-chip-option (click)=\"itemClicked(item)\" [selected]=\"item.selected\" [disabled]=\"isReadonlyOrDisabled || item.disabled\">\n @if (item.itemValue.icon) {\n <mat-icon matChipAvatar>{{ item.itemValue.icon }}</mat-icon>\n }\n <span class=\"dbx-chip-label\">{{ item.itemValue.label }}</span>\n @if (item.itemValue.sublabel) {\n <span class=\"dbx-chip-sublabel\">{{ item.itemValue.sublabel }}</span>\n }\n </mat-chip-option>\n }\n </mat-chip-listbox>\n <dbx-injection [config]=\"footerConfig\"></dbx-injection>\n </div>\n </dbx-loading>\n</div>\n\n<!-- Filter Input -->\n<ng-template #filterTemplate>\n <div class=\"dbx-pickable-item-field-filter\">\n <div class=\"dbx-label\">{{ filterLabel }}</div>\n <input [name]=\"name\" autocomplete=\"{{ autocomplete }}\" #filterMatInput=\"matInput\" matInput [placeholder]=\"placeholder\" [formControl]=\"inputCtrl\" />\n <mat-divider></mat-divider>\n <dbx-loading [linear]=\"true\" [context]=\"filterResultsContext\"></dbx-loading>\n <!-- No items found. -->\n @if (noItemsAvailableSignal()) {\n <p class=\"dbx-label\">No items match this filter.</p>\n }\n </div>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { DbxInjectionComponent, type DbxInjectionComponentConfig } from '@dereekb/dbx-core';\nimport { AbstractDbxSelectionListWrapperDirective, provideDbxListView, AbstractDbxSelectionListViewDirective, AbstractDbxValueListViewItemComponent, type ListSelectionState, addConfigToValueListItems, type DbxListSelectionMode, provideDbxListViewWrapper, DbxLoadingComponent, DbxSelectionValueListViewContentComponent, DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE, DbxListWrapperComponentImportsModule } from '@dereekb/dbx-web';\nimport { type Maybe } from '@dereekb/util';\nimport { map, shareReplay } from 'rxjs';\nimport { type PickableValueFieldDisplayValue } from './pickable';\nimport { AbstractDbxPickableItemFieldDirective, type PickableItemFieldItem } from './pickable.field.directive';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatDivider } from '@angular/material/divider';\nimport { MatInputModule } from '@angular/material/input';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\n// MARK: Selection List\n/**\n * Wrapper component for the pickable item selection list, providing the list view container.\n */\n@Component({\n selector: 'dbx-form-pickable-item-field-item-list',\n template: DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE,\n imports: [DbxListWrapperComponentImportsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: provideDbxListViewWrapper(DbxPickableListFieldItemListComponent),\n standalone: true\n})\nexport class DbxPickableListFieldItemListComponent<T> extends AbstractDbxSelectionListWrapperDirective<PickableItemFieldItem<T>> {\n constructor() {\n super({\n componentClass: DbxPickableListFieldItemListViewComponent\n });\n }\n}\n\n/**\n * List view component that renders pickable items with selection support.\n *\n * Input values are {@link PickableItemFieldItem}, but output selection events emit {@link PickableValueFieldDisplayValue}.\n */\n@Component({\n template: `\n <dbx-selection-list-view-content [multiple]=\"multiple\" [selectionMode]=\"selectionMode\" [items]=\"itemsSignal()\"></dbx-selection-list-view-content>\n `,\n providers: provideDbxListView(DbxPickableListFieldItemListViewComponent),\n imports: [DbxSelectionValueListViewContentComponent],\n standalone: true\n})\nexport class DbxPickableListFieldItemListViewComponent<T> extends AbstractDbxSelectionListViewDirective<any> {\n readonly dbxPickableListFieldComponent = inject(DbxPickableListFieldComponent<T>);\n\n // TODO: any belongs here for now, but item list typings need to be updated.\n\n readonly config: DbxInjectionComponentConfig = {\n componentClass: DbxPickableListFieldItemListViewItemComponent\n };\n\n get multiple(): boolean {\n return !this.dbxPickableListFieldComponent.pickOnlyOne;\n }\n\n get selectionMode(): Maybe<DbxListSelectionMode> {\n let selectionMode: Maybe<DbxListSelectionMode> = 'select';\n\n if (this.dbxPickableListFieldComponent.disabled && this.dbxPickableListFieldComponent.changeSelectionModeToViewOnDisabled) {\n selectionMode = 'view';\n }\n\n return selectionMode;\n }\n\n readonly items$ = this.values$.pipe(\n // NOTE: This causes the \"value\" to be a PickableValueFieldDisplayValue<T>, which means we emit PickableValueFieldDisplayValue<T> to DbxPickableListFieldComponent.\n map((x) => addConfigToValueListItems(this.config, x)),\n shareReplay(1)\n );\n\n readonly itemsSignal = toSignal(this.items$);\n}\n\n@Component({\n template: `\n <div class=\"dbx-default-pickable-item-field-list-item dbx-flex-bar\">\n @if (icon) {\n <mat-icon class=\"dbx-icon-spacer\">{{ icon }}</mat-icon>\n }\n <span class=\"dbx-chip-label\">{{ label }}</span>\n @if (sublabel) {\n <span class=\"dbx-chip-sublabel\">({{ sublabel }})</span>\n }\n </div>\n `,\n imports: [MatIconModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxPickableListFieldItemListViewItemComponent<T> extends AbstractDbxValueListViewItemComponent<PickableValueFieldDisplayValue<T>> {\n readonly label = this.itemValue.label;\n readonly sublabel = this.itemValue.sublabel;\n readonly icon = this.itemValue.icon;\n}\n\n// MARK: List Field Component\n/**\n * Formly field component that renders pickable values as a selectable list.\n *\n * Delegates to {@link DbxPickableListFieldItemListComponent} for list rendering and\n * handles selection change events to update the form control value.\n */\n@Component({\n templateUrl: 'pickable.list.field.component.html',\n imports: [DbxPickableListFieldItemListComponent, NgTemplateOutlet, FormsModule, ReactiveFormsModule, MatInputModule, MatDivider, DbxLoadingComponent, DbxInjectionComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxPickableListFieldComponent<T> extends AbstractDbxPickableItemFieldDirective<T> {\n onSelectionChange(event: unknown) {\n const items = (event as ListSelectionState<PickableValueFieldDisplayValue<T>>).items;\n const values = items.map((x) => x.itemValue.value);\n this.setValues(values);\n }\n}\n","<div class=\"dbx-pickable-item-field\">\n <dbx-loading [context]=\"context\">\n @if (showFilterInput) {\n <ng-container *ngTemplateOutlet=\"filterTemplate\"></ng-container>\n }\n <!-- Content -->\n <div class=\"dbx-pickable-item-field-list\">\n <div class=\"dbx-pickable-item-field-list-content\">\n <dbx-form-pickable-item-field-item-list [disabled]=\"isReadonlyOrDisabled\" [state]=\"filterItemsLoadingState$\" (selectionChange)=\"onSelectionChange($event)\"></dbx-form-pickable-item-field-item-list>\n </div>\n <dbx-injection [config]=\"footerConfig\"></dbx-injection>\n </div>\n </dbx-loading>\n</div>\n\n<!-- Filter Input -->\n<ng-template #filterTemplate>\n <div class=\"dbx-pickable-item-field-filter\">\n <div class=\"dbx-label\">{{ filterLabel }}</div>\n <input [name]=\"name\" autocomplete=\"{{ autocomplete }}\" #filterMatInput=\"matInput\" matInput [placeholder]=\"placeholder\" [formControl]=\"inputCtrl\" />\n <mat-divider></mat-divider>\n <dbx-loading [linear]=\"true\" [context]=\"filterResultsContext\"></dbx-loading>\n <!-- No items found. -->\n @if (noItemsAvailableSignal()) {\n <p class=\"dbx-label\">No items match this filter.</p>\n }\n </div>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxPickableChipListFieldComponent } from './pickable.chip.field.component';\nimport { DbxPickableListFieldComponent, DbxPickableListFieldItemListComponent, DbxPickableListFieldItemListViewComponent, DbxPickableListFieldItemListViewItemComponent } from './pickable.list.field.component';\n\nconst importsAndExports = [DbxPickableChipListFieldComponent, DbxPickableListFieldComponent, DbxPickableListFieldItemListComponent, DbxPickableListFieldItemListViewComponent, DbxPickableListFieldItemListViewItemComponent];\n\n/** Registers the `pickablechipfield` and `pickablelistfield` Formly field types. */\n@NgModule({\n imports: [\n ...importsAndExports,\n FormlyModule.forChild({\n types: [\n { name: 'pickablechipfield', component: DbxPickableChipListFieldComponent, wrappers: ['form-field'] },\n { name: 'pickablelistfield', component: DbxPickableListFieldComponent, wrappers: ['form-field'] }\n ]\n })\n ],\n exports: importsAndExports\n})\nexport class DbxFormFormlyPickableFieldModule {}\n","import { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig, type MaterialFormFieldConfig } from '../../field';\nimport { PickableItemFieldItem, type PickableValueFieldsFieldProps } from './pickable.field.directive';\nexport { PickableItemFieldItem };\n\n/**\n * Configuration for a pickable item field that displays selected values as chips or a list.\n */\nexport interface PickableItemFieldConfig<T = unknown, M = unknown> extends LabeledFieldConfig, PickableValueFieldsFieldProps<T, M>, MaterialFormFieldConfig {}\n\n/**\n * Creates a Formly field configuration for a pickable chip field that displays\n * selected values as Material chips.\n *\n * @param config - Pickable item configuration including load and display functions\n * @returns A validated {@link FormlyFieldConfig} with type `'pickablechipfield'`\n *\n * @example\n * ```typescript\n * const field = pickableItemChipField({\n * key: 'tags',\n * label: 'Tags',\n * loadValues: () => tags$,\n * hashForValue: (tag) => tag.id\n * });\n * ```\n */\nexport function pickableItemChipField<T = unknown, M = unknown>(config: PickableItemFieldConfig<T, M>): FormlyFieldConfig {\n const { key, materialFormField } = config;\n return formlyField({\n key,\n type: 'pickablechipfield',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n ...config,\n autocomplete: false\n })\n });\n}\n\n/**\n * Creates a Formly field configuration for a pickable list field that displays\n * selected values in a selection list.\n *\n * @param config - Pickable item configuration including load and display functions\n * @returns A validated {@link FormlyFieldConfig} with type `'pickablelistfield'`\n *\n * @example\n * ```typescript\n * const field = pickableItemListField({\n * key: 'categories',\n * label: 'Categories',\n * loadValues: () => categories$,\n * hashForValue: (cat) => cat.id\n * });\n * ```\n */\nexport function pickableItemListField<T = unknown, M = unknown>(config: PickableItemFieldConfig<T, M>): FormlyFieldConfig {\n const { key, materialFormField } = config;\n return formlyField({\n key,\n type: 'pickablelistfield',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n ...config,\n autocomplete: false\n })\n });\n}\n","import { caseInsensitiveFilterByIndexOfDecisionFactory, type LabeledValue, type Maybe, type SearchStringFilterFunction, searchStringFilterFunction, sortByStringFunction } from '@dereekb/util';\nimport { type Observable, of } from 'rxjs';\nimport { type PickableValueFieldDisplayValue, type PickableValueFieldValue } from './pickable';\nimport { type PickableItemFieldItem, type PickableValueFieldsFieldProps } from './pickable.field.directive';\n\n/** Case-insensitive filter function that matches pickable display values by their label using indexOf. */\nexport const filterPickableItemFieldValuesByLabelFilterFunction: SearchStringFilterFunction<PickableValueFieldDisplayValue<any>> = searchStringFilterFunction({\n readStrings: (x) => [x.label],\n decisionFactory: caseInsensitiveFilterByIndexOfDecisionFactory\n});\n\n/**\n * Filters pickable display values by label text, returning their underlying values.\n *\n * Returns all values when filter text is empty.\n *\n * @param filterText - Text to filter by\n * @param values - Display values to filter\n * @returns Observable emitting the filtered value array\n */\nexport function filterPickableItemFieldValuesByLabel<T>(filterText: Maybe<string>, values: PickableValueFieldDisplayValue<T>[]): Observable<T[]> {\n let filteredValues: PickableValueFieldDisplayValue<T>[];\n\n if (filterText) {\n filteredValues = filterPickableItemFieldValuesByLabelFilterFunction(filterText, values);\n } else {\n filteredValues = values;\n }\n\n return of(filteredValues.map((x) => x.value));\n}\n\n/** String sort comparator that orders pickable items alphabetically by label. */\nexport const sortPickableItemsByLabelStringFunction = sortByStringFunction<PickableItemFieldItem<any>>((x) => x.itemValue.label);\n\n/**\n * Sorts pickable items alphabetically by their label.\n *\n * @param chips - Items to sort\n * @returns The sorted array (mutated in place)\n */\nexport function sortPickableItemsByLabel<T>(chips: PickableItemFieldItem<T>[]): PickableItemFieldItem<T>[] {\n return chips.sort(sortPickableItemsByLabelStringFunction);\n}\n\n// MARK: PickableValueFieldValuesConfigForStaticLabeledValues\n/** Subset of {@link PickableValueFieldsFieldProps} needed for static labeled value configuration. */\nexport type PickableValueFieldValuesConfigForStaticLabeledValues<T, M extends LabeledValue<T>> = Pick<PickableValueFieldsFieldProps<T, M>, 'loadValues' | 'displayForValue' | 'filterValues'>;\n\n/** Configuration for creating a pickable field from a static set of labeled values. */\nexport interface PickableValueFieldValuesConfigForStaticLabeledValuesConfig<T, M extends LabeledValue<T>> {\n readonly allOptions: M[];\n readonly unknownOptionLabel?: string;\n}\n\n/**\n * Creates `loadValues`, `displayForValue`, and `filterValues` functions from a static array of labeled values.\n *\n * Simplifies pickable field setup when all options are known upfront.\n *\n * @param input - Array of labeled values or a config object with options and unknown label\n * @returns Props subset for configuring a pickable field\n *\n * @example\n * ```typescript\n * const config = pickableValueFieldValuesConfigForStaticLabeledValues([\n * { value: 'a', label: 'Option A' },\n * { value: 'b', label: 'Option B' }\n * ]);\n * ```\n */\nexport function pickableValueFieldValuesConfigForStaticLabeledValues<T, M extends LabeledValue<T>>(input: M[] | PickableValueFieldValuesConfigForStaticLabeledValuesConfig<T, M>): PickableValueFieldValuesConfigForStaticLabeledValues<T, M> {\n const config = Array.isArray(input) ? { allOptions: input } : input;\n const { allOptions, unknownOptionLabel = 'UNKNOWN' } = config;\n const values: PickableValueFieldValue<T, M>[] = allOptions.map((meta) => ({ value: meta.value, meta }));\n const optionsMap = new Map(allOptions.map((x) => [x.value, x]));\n\n return {\n loadValues: () => of(values),\n filterValues: filterPickableItemFieldValuesByLabel, // auto filter by label\n displayForValue: (values: PickableValueFieldValue<T, M>[]) =>\n of(\n values.map((x) => {\n const meta = x.meta ?? optionsMap.get(x.value);\n return { ...x, meta, label: meta?.label ?? unknownOptionLabel };\n })\n )\n };\n}\n","import { ChangeDetectionStrategy, Component, computed, Directive, inject, InjectionToken, input } from '@angular/core';\nimport { type ConfiguredSearchableValueFieldDisplayValue } from './searchable';\nimport { mergeArraysIntoArray } from '@dereekb/util';\nimport { DbxInjectionComponent, type DbxInjectionComponentConfig } from '@dereekb/dbx-core';\nimport { DbxAnchorComponent } from '@dereekb/dbx-web';\nimport { MatIconModule } from '@angular/material/icon';\n\n/** Injection token providing the {@link ConfiguredSearchableValueFieldDisplayValue} to autocomplete item display components. */\nexport const DBX_SEARCHABLE_FIELD_COMPONENT_DATA_TOKEN = new InjectionToken('DbxSearchableField');\n\n/**\n * Renders a single autocomplete suggestion item using dynamic component injection.\n *\n * Wraps the display component in a {@link DbxAnchorComponent} and provides the display\n * value data via {@link DBX_SEARCHABLE_FIELD_COMPONENT_DATA_TOKEN}.\n */\n@Component({\n selector: 'dbx-searchable-field-autocomplete-item',\n template: `\n <dbx-anchor [block]=\"true\" [anchor]=\"anchorSignal()\">\n <dbx-injection [config]=\"configSignal()\"></dbx-injection>\n </dbx-anchor>\n `,\n imports: [DbxAnchorComponent, DbxInjectionComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxSearchableFieldAutocompleteItemComponent<T> {\n readonly displayValue = input.required<ConfiguredSearchableValueFieldDisplayValue<T>>();\n\n readonly configSignal = computed(() => {\n const displayValue = this.displayValue();\n const config: DbxInjectionComponentConfig = {\n ...displayValue.display,\n providers: mergeArraysIntoArray(\n [\n {\n provide: DBX_SEARCHABLE_FIELD_COMPONENT_DATA_TOKEN,\n useValue: displayValue\n }\n ],\n displayValue.display.providers\n )\n };\n\n return config;\n });\n\n readonly anchorSignal = computed(() => this.displayValue().anchor);\n}\n\n// MARK: Default\n/**\n * Abstract base directive for custom searchable field display components.\n *\n * Injects the {@link ConfiguredSearchableValueFieldDisplayValue} via the\n * {@link DBX_SEARCHABLE_FIELD_COMPONENT_DATA_TOKEN} for use in custom templates.\n */\n@Directive()\nexport abstract class AbstractDbxSearchableFieldDisplayDirective<T> {\n readonly displayValue = inject<ConfiguredSearchableValueFieldDisplayValue<T>>(DBX_SEARCHABLE_FIELD_COMPONENT_DATA_TOKEN);\n}\n\n/**\n * Default display component for searchable field autocomplete items.\n *\n * Renders an optional icon, a label, and an optional sublabel in a horizontal flex layout.\n */\n@Component({\n selector: 'dbx-default-searchable-field-display',\n template: `\n <div class=\"dbx-default-searchable-field-display dbx-flex-bar\">\n @if (icon) {\n <mat-icon class=\"dbx-icon-spacer\">{{ icon }}</mat-icon>\n }\n <span class=\"dbx-chip-label\">{{ displayValue.label }}</span>\n @if (displayValue.sublabel) {\n <span class=\"dbx-chip-sublabel\">({{ displayValue.sublabel }})</span>\n }\n </div>\n `,\n imports: [MatIconModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxDefaultSearchableFieldDisplayComponent<T> extends AbstractDbxSearchableFieldDisplayDirective<T> {\n readonly icon = this.displayValue.icon;\n}\n","import { type ArrayOrValue, type Maybe, convertMaybeToArray, lastValue, type PrimativeKey, separateValues, asArray, filterUniqueValues, type Configurable } from '@dereekb/util';\nimport { type DbxInjectionComponentConfig, mergeDbxInjectionComponentConfigs } from '@dereekb/dbx-core';\nimport { filterMaybe, SubscriptionObject, type LoadingState, successResult, startWithBeginLoading, isLoadingStateInLoadingState, listLoadingStateContext } from '@dereekb/rxjs';\nimport { Directive, ElementRef, type OnDestroy, type OnInit, viewChild } from '@angular/core';\nimport { type AbstractControl, FormControl, type ValidatorFn } from '@angular/forms';\nimport { type FieldTypeConfig, type FormlyFieldProps } from '@ngx-formly/core';\nimport { FieldType } from '@ngx-formly/material';\nimport { debounceTime, distinctUntilChanged, first, map, mergeMap, shareReplay, startWith, switchMap, BehaviorSubject, of, type Observable } from 'rxjs';\nimport { type SearchableValueFieldHashFn, type SearchableValueFieldStringSearchFn, type SearchableValueFieldDisplayFn, type SearchableValueFieldDisplayValue, type SearchableValueFieldValue, type SearchableValueFieldAnchorFn, type ConfiguredSearchableValueFieldDisplayValue } from './searchable';\nimport { DbxDefaultSearchableFieldDisplayComponent } from './searchable.field.autocomplete.item.component';\nimport { camelCase } from 'change-case-all';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\n/** Formly field properties for text input with optional custom validators. */\nexport interface StringValueFieldsFieldProps extends FormlyFieldProps {\n /**\n * Custom input validators.\n */\n readonly textInputValidator?: ValidatorFn | ValidatorFn[];\n}\n\n/**\n * Formly field properties for configuring a searchable value selection field.\n *\n * Supports search-as-you-type with autocomplete, display value caching via hash,\n * optional string value input, anchor links, and custom display components.\n */\nexport interface SearchableValueFieldsFieldProps<T, M = unknown, H extends PrimativeKey = PrimativeKey> extends FormlyFieldProps, StringValueFieldsFieldProps {\n /**\n * Whether or not to allow string values to be used directly, or if values can only be chosen from searching.\n */\n readonly allowStringValues?: boolean;\n /**\n * Whether or not to set/get values as an array or a single value. If set false, multiSelect is ignored.\n */\n readonly asArrayValue?: boolean;\n /**\n * Optional conversion function. If provided, allowStringValues is considered true.\n */\n readonly convertStringValue?: (text: string) => T;\n /**\n * Used for hashing display values and omitting repeat values.\n *\n * If hashForValue is not provided, the value's value will be used as is.\n */\n readonly hashForValue?: SearchableValueFieldHashFn<T, H>;\n /**\n * Performs a search.\n */\n readonly search: SearchableValueFieldStringSearchFn<T, M>;\n /**\n * Whether or not to allow searches on empty text. Is false by default.\n */\n readonly searchOnEmptyText?: boolean;\n /**\n * Default injected config to use for display values.\n */\n readonly display?: Partial<DbxInjectionComponentConfig>;\n /**\n * Used for building a display value given the input.\n */\n readonly displayForValue: SearchableValueFieldDisplayFn<T, M>;\n /**\n * Whether or not to use the anchor field on value elements.\n *\n * This has no default effect if a component class is provided.\n */\n readonly useAnchor?: boolean;\n /**\n * Used for retrieving an anchor value for values that have no anchor value set.\n *\n * Only used when useAnchor is true.\n */\n readonly anchorForValue?: SearchableValueFieldAnchorFn<T, M>;\n /**\n * Whether or not to show \"Clear\" in the autcomplete list.\n */\n readonly showClearValue?: boolean;\n /**\n * Label for the search input.\n *\n * Defaults to \"Search\"\n */\n readonly searchLabel?: string;\n /**\n * (Optional) observable that will trigger the clearing of all cached display values.\n */\n readonly refreshDisplayValues$?: Observable<unknown>;\n}\n\nconst DEFAULT_SEARCH_INPUT_PLACEHOLDER = 'Type to Search';\n\nconst DEFAULT_SEARCHABLE_FIELD_DISPLAY: Partial<DbxInjectionComponentConfig> = {\n componentClass: DbxDefaultSearchableFieldDisplayComponent\n};\n\n/**\n * Abstract searchable field that provides a feature for searching for values, and for displaying values using Observables.\n *\n * Display values are cached for performance.\n */\n@Directive()\nexport abstract class AbstractDbxSearchableValueFieldDirective<T, M = unknown, H extends PrimativeKey = PrimativeKey, C extends SearchableValueFieldsFieldProps<T, M, H> = SearchableValueFieldsFieldProps<T, M, H>> extends FieldType<FieldTypeConfig<C>> implements OnInit, OnDestroy {\n /**\n * Whether or not to set/get values as an array.\n */\n abstract get multiSelect(): boolean;\n\n /**\n * Optional override set by the parent class for whether or not to allow the current value to sync to the input.\n */\n allowSyncValueToInput = false;\n\n /**\n * Default placeholder text to use when searchOnEmptyText is false.\n */\n defaultSearchInputPlaceholder?: Maybe<string> = DEFAULT_SEARCH_INPUT_PLACEHOLDER;\n\n readonly textInput = viewChild<string, ElementRef<HTMLInputElement>>('textInput', { read: ElementRef<HTMLInputElement> });\n\n readonly inputCtrl = new FormControl<string>('');\n\n private readonly _formControlObs = new BehaviorSubject<Maybe<AbstractControl>>(undefined);\n readonly formControl$ = this._formControlObs.pipe(filterMaybe());\n\n private readonly _clearDisplayHashMapSub = new SubscriptionObject();\n private readonly _displayHashMap = new BehaviorSubject<Map<H, ConfiguredSearchableValueFieldDisplayValue<T, M>>>(new Map());\n\n readonly inputValue$: Observable<string> = this.inputCtrl.valueChanges.pipe(\n startWith(this.inputCtrl.value),\n map((x) => x || '')\n );\n\n readonly inputValueString$: Observable<string> = this.inputValue$.pipe(debounceTime(200), distinctUntilChanged());\n\n readonly searchResultsState$: Observable<LoadingState<ConfiguredSearchableValueFieldDisplayValue<T, M>[]>> = this.inputValueString$.pipe(\n switchMap((text) =>\n (text || this.searchOnEmptyText ? this.search(text ?? '') : of([])).pipe(\n switchMap((x) => this.loadDisplayValuesForFieldValues(x)),\n // Return begin loading to setup the loading state.\n startWithBeginLoading()\n )\n ),\n shareReplay(1)\n );\n\n private readonly _singleValueSyncSub = new SubscriptionObject();\n\n readonly searchContext = listLoadingStateContext({ obs: this.searchResultsState$, showLoadingOnNoValue: false });\n readonly searchResults$: Observable<ConfiguredSearchableValueFieldDisplayValue<T, M>[]> = this.searchResultsState$.pipe(\n map((x) => x?.value ?? []),\n shareReplay(1)\n );\n readonly isLoadingSearchResults$: Observable<boolean> = this.searchResultsState$.pipe(map(isLoadingStateInLoadingState), distinctUntilChanged(), shareReplay(1));\n\n readonly _formControlValue$: Observable<T | T[]> = this.formControl$.pipe(switchMap((control) => control.valueChanges.pipe(startWith(control.value), shareReplay(1))));\n\n readonly values$: Observable<T[]> = this._formControlValue$.pipe(map(convertMaybeToArray), shareReplay(1));\n\n readonly displayValuesState$: Observable<LoadingState<ConfiguredSearchableValueFieldDisplayValue<T, M>[]>> = this.values$.pipe(\n distinctUntilChanged(),\n switchMap((values: T[]) => this.loadDisplayValuesForValues(values)),\n shareReplay(1)\n );\n\n readonly displayValues$: Observable<ConfiguredSearchableValueFieldDisplayValue<T, M>[]> = this.displayValuesState$.pipe(map((x) => x?.value ?? []));\n\n readonly inputValueSignal = toSignal(this.inputValue$);\n readonly searchResultsSignal = toSignal(this.searchResults$);\n readonly displayValuesSignal = toSignal(this.displayValues$);\n\n readonly isLoadingSearchResultsSignal = toSignal(this.isLoadingSearchResults$);\n\n get name(): string {\n return this.field.name ?? camelCase(this.label ?? (this.key as string));\n }\n\n get label(): Maybe<string> {\n return this.props.label;\n }\n\n get readonly(): Maybe<boolean> {\n return this.props.readonly;\n }\n\n get isReadonlyOrDisabled() {\n return this.readonly || this.disabled;\n }\n\n get searchableField(): SearchableValueFieldsFieldProps<T, M, H> {\n return this.props;\n }\n\n get asArrayValue(): boolean {\n return this.searchableField.asArrayValue ?? true;\n }\n\n get pickOnlyOne(): boolean {\n return this.asArrayValue === false || this.multiSelect === false;\n }\n\n get searchOnEmptyText(): boolean {\n return this.searchableField.searchOnEmptyText ?? false;\n }\n\n get searchInputPlaceholder(): string | '' {\n const searchOnEmpty = this.searchOnEmptyText;\n const placeholder = this.searchableField.placeholder;\n const test = placeholder || (searchOnEmpty ? undefined : this.defaultSearchInputPlaceholder) || '';\n return test;\n }\n\n get autocomplete(): string {\n return (this.props.attributes?.['autocomplete'] ?? this.key) as string;\n }\n\n get hashForValue(): SearchableValueFieldHashFn<T, H> {\n return this.searchableField.hashForValue ?? ((x) => x as unknown as H);\n }\n\n get displayForValue(): SearchableValueFieldDisplayFn<T, M> {\n return this.searchableField.displayForValue;\n }\n\n get useAnchor(): Maybe<boolean> {\n return this.searchableField.useAnchor;\n }\n\n get anchorForValue(): Maybe<SearchableValueFieldAnchorFn<T, M>> {\n return this.searchableField.anchorForValue;\n }\n\n get display(): Maybe<Partial<DbxInjectionComponentConfig>> {\n return this.searchableField.display;\n }\n\n get search(): SearchableValueFieldStringSearchFn<T, M> {\n return this.searchableField.search;\n }\n\n get values(): T[] {\n return this._getValueOnFormControl(this.formControl.value) ?? [];\n }\n\n get allowStringValues(): boolean {\n return this.searchableField.allowStringValues ?? Boolean(this.convertStringValue);\n }\n\n get convertStringValue(): Maybe<(text: string) => T> {\n return this.searchableField.convertStringValue;\n }\n\n get showClearValue(): boolean {\n return this.searchableField.showClearValue ?? true;\n }\n\n get searchLabel() {\n return this.searchableField.searchLabel ?? 'Search';\n }\n\n get refreshDisplayValues$() {\n return this.searchableField.refreshDisplayValues$;\n }\n\n loadDisplayValuesForValues(values: T[]): Observable<LoadingState<ConfiguredSearchableValueFieldDisplayValue<T, M>[]>> {\n return this.loadDisplayValuesForFieldValues(values.map((value) => ({ value })));\n }\n\n loadDisplayValuesForFieldValues(values: SearchableValueFieldValue<T, M>[]): Observable<LoadingState<ConfiguredSearchableValueFieldDisplayValue<T, M>[]>> {\n return this.getDisplayValuesForFieldValues(values).pipe(\n map((displayValues: ConfiguredSearchableValueFieldDisplayValue<T, M>[]) => successResult(displayValues)),\n startWithBeginLoading(),\n shareReplay(1)\n );\n }\n\n getDisplayValuesForFieldValues(values: SearchableValueFieldValue<T, M>[]): Observable<ConfiguredSearchableValueFieldDisplayValue<T, M>[]> {\n return this._displayHashMap.pipe(\n mergeMap((displayMap) => {\n const mappingResult = values.map((x) => [x, this.hashForValue(x.value)] as [SearchableValueFieldValue<T, M>, H]).map(([x, hash], i) => [i, hash, x, displayMap.get(hash)] as [number, H, SearchableValueFieldValue<T, M>, ConfiguredSearchableValueFieldDisplayValue<T, M>]);\n\n const {\n //\n included: hasDisplay,\n excluded: needsDisplay\n } = separateValues(mappingResult, (x) => Boolean(x[3]));\n\n let obs: Observable<ConfiguredSearchableValueFieldDisplayValue<T, M>[]>;\n\n if (needsDisplay.length > 0) {\n // Go get the display value.\n const displayValuesObs = this.displayForValue(needsDisplay.map((x) => x[2]));\n const defaultDisplay = mergeDbxInjectionComponentConfigs([DEFAULT_SEARCHABLE_FIELD_DISPLAY, this.display]);\n\n const anchorForValue = this.useAnchor && this.anchorForValue;\n\n obs = displayValuesObs.pipe(\n first(),\n map((displayResults) => {\n // Assign the default component classes to complete configuration.\n (displayResults as Configurable<SearchableValueFieldDisplayValue<T, M>>[]).forEach((x) => {\n if (!x.display) {\n x.display = defaultDisplay;\n } else {\n x.display = mergeDbxInjectionComponentConfigs([defaultDisplay, x.display]);\n }\n\n if (!x.anchor && anchorForValue) {\n x.anchor = anchorForValue(x);\n }\n });\n\n // Create a map to re-join values later.\n const displayResultsMapping: [ConfiguredSearchableValueFieldDisplayValue<T, M>, H][] = (displayResults as ConfiguredSearchableValueFieldDisplayValue<T, M>[]).map((x) => [x, this.hashForValue(x.value)]);\n const valueIndexHashMap = new Map(displayResultsMapping.map(([x, hash]) => [hash, x]));\n\n // Update displayMap. No need to push an update notification.\n displayResultsMapping.forEach(([x, hash]) => displayMap.set(hash, x));\n\n // Zip values back together.\n const newDisplayValues = mappingResult.map((x) => x[3] ?? valueIndexHashMap.get(x[1]));\n\n // Return display values.\n return newDisplayValues;\n })\n );\n } else {\n // If all display values are hashed return that.\n obs = of(hasDisplay.map((x) => x[3]));\n }\n\n return obs;\n })\n );\n }\n\n ngOnInit(): void {\n this._formControlObs.next(this.formControl);\n\n if (this.refreshDisplayValues$ != null) {\n this._clearDisplayHashMapSub.subscription = this.refreshDisplayValues$.subscribe(() => this._displayHashMap.next(new Map()));\n }\n\n if (this.searchableField.textInputValidator) {\n this.inputCtrl.setValidators(this.searchableField.textInputValidator);\n }\n\n if (this.allowSyncValueToInput && this.multiSelect === false) {\n this._singleValueSyncSub.subscription = this.displayValues$.subscribe((x) => {\n if (x[0]) {\n this._syncSingleValue(x[0]);\n }\n });\n }\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._clearDisplayHashMapSub.destroy();\n this._displayHashMap.complete();\n this._singleValueSyncSub.destroy();\n this._formControlObs.complete();\n this.searchContext.destroy();\n }\n\n /**\n * Used to sync the input control with the selected value.\n *\n * Only used when multiSelect is false.\n */\n protected _syncSingleValue(value: SearchableValueFieldDisplayValue<T>): void {\n this.inputCtrl.setValue(value.label);\n }\n\n protected _addWithTextValue(text: string): void {\n if (!this.searchableField.allowStringValues) {\n return;\n }\n\n if (text) {\n text = (text || '').trim();\n this.inputCtrl.setValue(text.trim());\n }\n\n if (!this.inputCtrl.valid) {\n this.inputCtrl.markAsTouched();\n return;\n }\n\n if (text) {\n const value = this.convertStringValue ? this.convertStringValue(text) : (text as unknown as T);\n this.addValue(value);\n }\n }\n\n /**\n * Returns the first validation error message from the input control, if any.\n */\n get inputErrorMessage(): string | undefined {\n const errors = this.inputCtrl.errors;\n\n if (errors) {\n for (const key of Object.keys(errors)) {\n const error = errors[key];\n\n if (error?.message) {\n return error.message;\n }\n }\n }\n\n return undefined;\n }\n\n addWithDisplayValue(displayValue: SearchableValueFieldDisplayValue<T>): void {\n this.addValue(displayValue.value);\n }\n\n removeWithDisplayValue(displayValue: SearchableValueFieldDisplayValue<T>): void {\n this.removeValue(displayValue.value);\n }\n\n _tryAddCurrentInputValue(): boolean {\n let addedValue = false;\n\n if (this.allowStringValues) {\n const value = this.inputCtrl.value || '';\n\n if ((value || '').trim()) {\n this._addWithTextValue(value);\n addedValue = true;\n }\n }\n\n return addedValue;\n }\n\n addValue(value: T): void {\n const textInput = this.textInput();\n\n if (textInput) {\n textInput.nativeElement.value = '';\n }\n\n this.inputCtrl.setValue(null);\n this.setValues([...this.values, value]);\n }\n\n removeValue(value: T): void {\n let values;\n\n if (this.hashForValue) {\n const hashToFilter = this.hashForValue(value);\n values = this.values.filter((x) => this.hashForValue(x) !== hashToFilter);\n } else {\n values = this.values.filter((x) => x !== value);\n }\n\n this.setValues(values);\n }\n\n clearValues(): void {\n this.setValues([]);\n }\n\n setValues(values: T[]): void {\n // Use to filter non-unique values.\n if (this.hashForValue) {\n values = filterUniqueValues(values, this.hashForValue);\n }\n\n if (this.pickOnlyOne) {\n values = [lastValue(values)].filter((x) => x != null);\n }\n\n this._setValueOnFormControl(values);\n }\n\n // MARK: Internal\n protected _getValueOnFormControl(valueOnFormControl: ArrayOrValue<T>): T[] {\n const value: T[] = valueOnFormControl != null ? asArray(valueOnFormControl) : []; // Always return an array.\n return value;\n }\n\n protected _setValueOnFormControl(values: T[]): void {\n let newValue: T | T[] = values;\n\n if (!this.asArrayValue) {\n newValue = [values[0]].filter((x) => x != null)[0];\n }\n\n this.formControl.setValue(newValue);\n this.formControl.markAsDirty();\n this.formControl.markAsTouched();\n }\n}\n","import { SubscriptionObject, skipUntilTimeElapsedAfterLastEmission } from '@dereekb/rxjs';\nimport { Subject } from 'rxjs';\nimport { ChangeDetectionStrategy, Component, type OnDestroy, type OnInit } from '@angular/core';\nimport { MatAutocompleteModule, type MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';\nimport { type MatChipInputEvent, MatChipsModule } from '@angular/material/chips';\nimport { AbstractDbxSearchableValueFieldDirective, type SearchableValueFieldsFieldProps } from './searchable.field.directive';\nimport { COMMA, ENTER } from '@angular/cdk/keycodes';\nimport { type PrimativeKey } from '@dereekb/util';\nimport { type SearchableValueFieldDisplayValue } from './searchable';\nimport { MatIconModule } from '@angular/material/icon';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { DbxLoadingModule } from '@dereekb/dbx-web';\nimport { DbxSearchableFieldAutocompleteItemComponent } from './searchable.field.autocomplete.item.component';\nimport { MatOptionModule } from '@angular/material/core';\n\n/**\n * Formly field properties for the searchable chip selection field.\n *\n * Extends the base searchable props with optional multi-select support.\n */\nexport interface SearchableChipValueFieldsFieldProps<T, M = unknown, H extends PrimativeKey = PrimativeKey> extends SearchableValueFieldsFieldProps<T, M, H> {\n /**\n * Whether or not to allow multiple items to be selected.\n */\n readonly multiSelect?: boolean;\n}\n\n/**\n * Formly field component that combines a search autocomplete with Material chips\n * for selecting multiple values.\n *\n * Supports adding values by typing (if string values are allowed), selecting from\n * autocomplete results, and removing chips. Handles tab and blur events to auto-add text input.\n */\n@Component({\n templateUrl: 'searchable.chip.field.component.html',\n imports: [MatChipsModule, MatIconModule, FormsModule, ReactiveFormsModule, DbxLoadingModule, MatAutocompleteModule, MatOptionModule, DbxSearchableFieldAutocompleteItemComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxSearchableChipFieldComponent<T, M = unknown, H extends PrimativeKey = PrimativeKey> extends AbstractDbxSearchableValueFieldDirective<T, M, H, SearchableChipValueFieldsFieldProps<T, M, H>> implements OnInit, OnDestroy {\n override get multiSelect(): boolean {\n return this.props.multiSelect ?? true;\n }\n\n private readonly _blur = new Subject<void>();\n private readonly _blurSub = new SubscriptionObject();\n\n readonly separatorKeysCodes: number[] = [ENTER, COMMA];\n\n selected(event: MatAutocompleteSelectedEvent): void {\n this.addWithDisplayValue(event.option.value);\n }\n\n tabPressedOnInput(event: KeyboardEvent): boolean {\n if (event?.key?.toLowerCase() === 'tab') {\n if (this._tryAddCurrentInputValue()) {\n event.preventDefault();\n event.stopImmediatePropagation();\n return false;\n }\n }\n\n return true;\n }\n\n addChip(event: MatChipInputEvent): void {\n const text = event.value ?? this.inputCtrl.value;\n return this._addWithTextValue(text);\n }\n\n protected override _syncSingleValue(value: SearchableValueFieldDisplayValue<T>): void {\n // Do nothing\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n\n // Only try and add the text item as a value if a value wasn't just added (for example, clicking a value).\n this._blurSub.subscription = this._blur.pipe(skipUntilTimeElapsedAfterLastEmission(this.values$, 100)).subscribe(() => {\n this._tryAddCurrentInputValue();\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._blur.complete();\n this._blurSub.destroy();\n }\n\n onBlur(): void {\n this._blur.next();\n }\n}\n","<div class=\"dbx-searchable-field\">\n <!-- View -->\n <mat-chip-grid [required]=\"required\" [disabled]=\"readonly\" #chipList>\n @for (displayValue of displayValuesSignal(); track displayValue.value) {\n <mat-chip-row [removable]=\"true\" (removed)=\"removeWithDisplayValue(displayValue)\">\n @if (displayValue.icon) {\n <mat-icon matChipAvatar>{{ displayValue.icon }}</mat-icon>\n }\n <span class=\"dbx-chip-label\">{{ displayValue.label }}</span>\n @if (displayValue.sublabel) {\n <span class=\"dbx-chip-sublabel\">{{ displayValue.sublabel }}</span>\n }\n @if (!readonly) {\n <mat-icon matChipRemove>cancel</mat-icon>\n }\n </mat-chip-row>\n }\n <input #textInput [name]=\"name\" [placeholder]=\"searchInputPlaceholder\" [formControl]=\"inputCtrl\" [matAutocomplete]=\"auto\" autocomplete=\"{{ autocomplete }}\" [matAutocompleteDisabled]=\"readonly\" [matChipInputFor]=\"chipList\" (keydown)=\"tabPressedOnInput($event)\" [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\" (matChipInputTokenEnd)=\"addChip($event)\" (blur)=\"onBlur()\" />\n </mat-chip-grid>\n <div class=\"searchable-field-form-loading\">\n <dbx-loading [linear]=\"true\" [context]=\"searchContext\"></dbx-loading>\n </div>\n @if (inputCtrl.touched && inputErrorMessage) {\n <span class=\"dbx-chip-input-error\">{{ inputErrorMessage }}</span>\n }\n</div>\n\n<!-- Autocomplete -->\n<mat-autocomplete class=\"dbx-searchable-text-field-autocomplete\" #auto=\"matAutocomplete\" (optionSelected)=\"selected($event)\">\n @for (displayValue of searchResultsSignal(); track displayValue.value) {\n <mat-option [value]=\"displayValue\">\n <dbx-searchable-field-autocomplete-item [displayValue]=\"displayValue\"></dbx-searchable-field-autocomplete-item>\n </mat-option>\n }\n</mat-autocomplete>\n","import { arrayToMap, type Maybe, type PrimativeKey, separateValues } from '@dereekb/util';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type Observable, of, switchMap, map } from 'rxjs';\nimport { type LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig, type DescriptionFieldConfig, type MaterialFormFieldConfig } from '../../field';\nimport { type SearchableValueFieldDisplayFn, type SearchableValueFieldDisplayValue, type SearchableValueFieldValue } from './searchable';\nimport { type SearchableChipValueFieldsFieldProps } from './searchable.chip.field.component';\nimport { type SearchableTextValueFieldsFieldProps } from './searchable.text.field.component';\n\n/**\n * Used to create a SearchableValueFieldDisplayFn function that will retrieve the metadata for items that are missing their metadata so they can be displayed properly.\n *\n * @param param0\n * @returns\n */\nexport function makeMetaFilterSearchableFieldValueDisplayFn<T extends string | number = string | number, M = unknown>({ loadMetaForValues, makeDisplayForValues }: { loadMetaForValues: (values: SearchableValueFieldValue<T, M>[]) => Observable<SearchableValueFieldValue<T, M>[]>; makeDisplayForValues: (values: SearchableValueFieldValue<T, M>[]) => Observable<SearchableValueFieldDisplayValue<T, M>[]> }): SearchableValueFieldDisplayFn<T, M> {\n return (values: SearchableValueFieldValue<T, M>[]) => {\n const { included: loaded, excluded: needLoading } = separateValues(values, (x) => Boolean(x.meta));\n let allValues: Observable<SearchableValueFieldValue<T, M>[]>;\n\n if (needLoading.length > 0) {\n const loadingResult = loadMetaForValues(needLoading);\n allValues = loadingResult.pipe(\n map((result) => {\n const resultMap: Map<Maybe<T>, SearchableValueFieldValue<T, M>> = arrayToMap(result, (x) => x.value);\n\n const mergedWithLoad = needLoading.map((x) => {\n const id = x.value;\n const loadedItem = resultMap.get(id);\n const anchor = x.anchor ?? loadedItem?.anchor;\n const meta: Maybe<M> = loadedItem?.meta;\n\n return {\n ...x,\n anchor,\n meta\n };\n });\n\n return mergedWithLoad;\n }),\n map((result) => [...loaded, ...result])\n );\n } else {\n allValues = of(loaded);\n }\n\n return allValues.pipe(switchMap(makeDisplayForValues));\n };\n}\n\n// MARK: Chips\n/** Configuration for a searchable chip field that uses string values directly. */\nexport type StringSearchableChipFieldConfig<M = unknown> = Omit<SearchableChipFieldConfig<string, M>, 'allowStringValues'>;\n\n/**\n * Creates a searchable chip field pre-configured for string values.\n *\n * @param config - String-specific searchable chip field configuration\n * @returns A {@link FormlyFieldConfig} with type `'searchablechipfield'`\n *\n * @example\n * ```typescript\n * const field = searchableStringChipField({ key: 'tags', label: 'Tags', search: searchFn });\n * ```\n */\nexport function searchableStringChipField<M = unknown>(config: StringSearchableChipFieldConfig<M>): FormlyFieldConfig {\n return searchableChipField({\n ...config,\n allowStringValues: true\n });\n}\n\n/**\n * Full configuration for a searchable chip field combining labeling, description,\n * Material styling, and searchable chip behavior.\n */\nexport interface SearchableChipFieldConfig<T = unknown, M = unknown, H extends PrimativeKey = PrimativeKey> extends LabeledFieldConfig, DescriptionFieldConfig, MaterialFormFieldConfig, SearchableChipValueFieldsFieldProps<T, M, H> {}\n\n/**\n * Creates a Formly field configuration for a searchable chip field where users\n * can search for and select values displayed as Material chips.\n *\n * @param config - Searchable chip field configuration\n * @returns A validated {@link FormlyFieldConfig} with type `'searchablechipfield'`\n *\n * @example\n * ```typescript\n * const field = searchableChipField({ key: 'skills', label: 'Skills', search: searchFn, hashForValue: (s) => s.id });\n * ```\n */\nexport function searchableChipField<T, M = unknown, H extends PrimativeKey = PrimativeKey>(config: SearchableChipFieldConfig<T, M, H>): FormlyFieldConfig {\n const { key, placeholder, materialFormField } = config;\n return formlyField({\n key,\n type: 'searchablechipfield',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n ...config,\n placeholder: placeholder ?? 'Add...',\n autocomplete: false\n })\n });\n}\n\n// MARK: Text\n/**\n * Full configuration for a searchable text field with autocomplete.\n */\nexport interface SearchableTextFieldConfig<T = unknown, M = unknown, H extends PrimativeKey = PrimativeKey> extends LabeledFieldConfig, DescriptionFieldConfig, MaterialFormFieldConfig, SearchableTextValueFieldsFieldProps<T, M, H> {}\n\n/**\n * Creates a Formly field configuration for a searchable text field with autocomplete\n * dropdown for selecting values.\n *\n * @param config - Searchable text field configuration\n * @returns A validated {@link FormlyFieldConfig} with type `'searchabletextfield'`\n *\n * @example\n * ```typescript\n * const field = searchableTextField({ key: 'assignee', label: 'Assignee', search: searchFn });\n * ```\n */\nexport function searchableTextField<T, M = unknown, H extends PrimativeKey = PrimativeKey>(config: SearchableTextFieldConfig<T, M, H>): FormlyFieldConfig {\n const { key, materialFormField } = config;\n return formlyField({\n key,\n type: 'searchabletextfield',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n ...config,\n autocomplete: false\n })\n });\n}\n","import { ChangeDetectionStrategy, Component, computed, type OnDestroy, type OnInit } from '@angular/core';\nimport { MatAutocompleteModule, type MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';\nimport { AbstractDbxSearchableValueFieldDirective, type SearchableValueFieldsFieldProps } from './searchable.field.directive';\nimport { map, shareReplay } from 'rxjs';\nimport { type PrimativeKey } from '@dereekb/util';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatIconModule } from '@angular/material/icon';\nimport { DbxLoadingModule } from '@dereekb/dbx-web';\nimport { DbxSearchableFieldAutocompleteItemComponent } from './searchable.field.autocomplete.item.component';\nimport { NgClass } from '@angular/common';\nimport { MatInput } from '@angular/material/input';\nimport { MatOptionModule } from '@angular/material/core';\nimport { type SearchableValueFieldDisplayValue } from './searchable';\n\n/**\n * Formly field properties for the searchable text field, extending the base searchable props\n * with an option to show the currently selected value.\n */\nexport interface SearchableTextValueFieldsFieldProps<T, M = unknown, H extends PrimativeKey = PrimativeKey> extends SearchableValueFieldsFieldProps<T, M, H> {\n readonly showSelectedValue?: boolean;\n}\n\n/**\n * Formly field component for selecting a single value via text search with autocomplete.\n *\n * Syncs the selected value's label back to the text input. Supports optional display\n * of the currently selected value and clear functionality.\n */\n@Component({\n templateUrl: 'searchable.text.field.component.html',\n imports: [FormsModule, MatInput, NgClass, ReactiveFormsModule, DbxLoadingModule, MatOptionModule, MatAutocompleteModule, MatChipsModule, MatIconModule, DbxSearchableFieldAutocompleteItemComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxSearchableTextFieldComponent<T, M = unknown, H extends PrimativeKey = PrimativeKey> extends AbstractDbxSearchableValueFieldDirective<T, M, H, SearchableTextValueFieldsFieldProps<T, M, H>> implements OnInit, OnDestroy {\n override allowSyncValueToInput = true;\n\n readonly selectedDisplayValue$ = this.displayValues$.pipe(\n map((x) => x[0]),\n shareReplay(1)\n );\n\n readonly selectedDisplayValueSignal = toSignal(this.selectedDisplayValue$);\n readonly hasValueSignal = computed(() => Boolean(this.selectedDisplayValueSignal()));\n readonly showSelectedDisplayValueSignal = computed(() => this.showSelectedValue && this.hasValueSignal());\n\n override get searchableField(): SearchableTextValueFieldsFieldProps<T, M, H> {\n return this.props;\n }\n\n get showSelectedValue() {\n return this.searchableField.showSelectedValue ?? !this.allowStringValues; // Show the selected value only if string values are allowed.\n }\n\n get multiSelect() {\n return false;\n }\n\n /*\n private _clearInputSub = new SubscriptionObject();\n\n override ngOnInit(): void {\n super.ngOnInit();\n\n this._clearInputSub.subscription = this.inputValue$.pipe(skipWhile((x) => !x)).subscribe((x) => {\n if (!x) {\n // this.clearValues();\n }\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._clearInputSub.destroy();\n }\n */\n\n selected(event: MatAutocompleteSelectedEvent): void {\n const value = event.option.value as SearchableValueFieldDisplayValue<T> | { _ignore?: true } | { _clear?: true };\n\n console.log('selected', value);\n\n if ((value as any)._clear) {\n this.clearValues();\n } else if (!(value as any)._ignore) {\n this.addWithDisplayValue(value as SearchableValueFieldDisplayValue<T>);\n }\n }\n}\n","<div class=\"dbx-searchable-text-field\" [ngClass]=\"{ 'dbx-searchable-text-field-has-value': hasValueSignal(), 'dbx-searchable-text-field-show-value': showSelectedValue }\">\n <!-- Result View -->\n @if (showSelectedDisplayValueSignal()) {\n <div class=\"dbx-searchable-text-field-value mat-option mat-option-text\">\n <dbx-searchable-field-autocomplete-item [displayValue]=\"selectedDisplayValueSignal()!\"></dbx-searchable-field-autocomplete-item>\n </div>\n }\n <div class=\"dbx-searchable-text-field-input\">\n @if (searchLabel) {\n <div class=\"dbx-label\">{{ searchLabel }}</div>\n }\n <!-- View -->\n <input type=\"search\" [name]=\"name\" matInput #textInput [placeholder]=\"searchInputPlaceholder\" [formControl]=\"inputCtrl\" [matAutocomplete]=\"auto\" [matAutocompleteDisabled]=\"readonly || disabled\" autocomplete=\"{{ autocomplete }}\" />\n <div class=\"searchable-field-form-loading\">\n <dbx-loading [linear]=\"true\" [context]=\"searchContext\"></dbx-loading>\n </div>\n </div>\n</div>\n\n<!-- Autocomplete -->\n<mat-autocomplete class=\"dbx-searchable-text-field-autocomplete\" #auto (optionSelected)=\"selected($event)\">\n @for (displayValue of searchResultsSignal(); track displayValue.value) {\n <mat-option [value]=\"displayValue\">\n <dbx-searchable-field-autocomplete-item [displayValue]=\"displayValue\"></dbx-searchable-field-autocomplete-item>\n </mat-option>\n }\n <!-- If No Results -->\n @if (searchResultsSignal()?.length === 0) {\n @if (!isLoadingSearchResultsSignal()) {\n <mat-option value=\"\" disabled>\n <p class=\"dbx-clear-hint text-center\">No results found.</p>\n </mat-option>\n } @else {\n <mat-option value=\"\" disabled>\n <p class=\"dbx-clear-hint text-center\">Loading...</p>\n </mat-option>\n }\n }\n <!-- Add/Pick String Value -->\n @if (allowStringValues && inputValueSignal()) {\n <mat-option [value]=\"{ value: inputValueSignal() }\">\n <p class=\"dbx-clear-hint text-center\">\"{{ inputValueSignal() }}\"</p>\n </mat-option>\n }\n <!-- Show clear value -->\n @if (showClearValue && hasValueSignal()) {\n <mat-option value=\"\">\n <p class=\"dbx-clear-hint text-center\">Clear</p>\n </mat-option>\n }\n</mat-autocomplete>\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxSearchableChipFieldComponent } from './searchable.chip.field.component';\nimport { DbxDefaultSearchableFieldDisplayComponent, DbxSearchableFieldAutocompleteItemComponent } from './searchable.field.autocomplete.item.component';\nimport { DbxSearchableTextFieldComponent } from './searchable.text.field.component';\n\nconst importsAndExports = [DbxSearchableChipFieldComponent, DbxSearchableTextFieldComponent, DbxSearchableFieldAutocompleteItemComponent, DbxDefaultSearchableFieldDisplayComponent];\n\n/** Registers the `searchablechipfield` and `searchabletextfield` Formly field types. */\n@NgModule({\n imports: [\n ...importsAndExports,\n FormlyModule.forChild({\n types: [\n { name: 'searchablechipfield', component: DbxSearchableChipFieldComponent, wrappers: ['form-field'] },\n { name: 'searchabletextfield', component: DbxSearchableTextFieldComponent, wrappers: ['form-field'] }\n ]\n })\n ],\n exports: importsAndExports\n})\nexport class DbxFormFormlySearchableFieldModule {}\n","import { of } from 'rxjs';\nimport { type LabeledFieldConfig } from '../../field';\nimport { type SearchableValueFieldValue } from './searchable';\nimport { searchableChipField } from './searchable.field';\nimport { type StringValueFieldsFieldProps } from './searchable.field.directive';\n\n/**\n * Configuration for a plain text chip field that allows freeform string entry.\n */\nexport interface ChipTextFieldConfig extends LabeledFieldConfig, StringValueFieldsFieldProps {\n /** Whether text values are case-sensitive. Defaults to false (lowercased). */\n caseSensitive?: boolean;\n}\n\n/**\n * Creates a searchable chip field for freeform text entry where each entered string\n * becomes a chip. Values are lowercased by default unless `caseSensitive` is true.\n *\n * @param config - Text chip field configuration\n * @returns A {@link FormlyFieldConfig} for text chip input\n *\n * @example\n * ```typescript\n * const field = chipTextField({ key: 'tags', label: 'Tags' });\n * ```\n */\nexport function chipTextField(config: ChipTextFieldConfig) {\n const convertStringValue = config.caseSensitive ? (x: string) => x : (x: string) => x?.toLowerCase();\n\n return searchableChipField({\n search: () => of([]), // no search by default\n ...config,\n allowStringValues: true,\n convertStringValue,\n displayForValue: (values: SearchableValueFieldValue<string>[]) => {\n return of(values.map((x) => ({ ...x, label: x.value })));\n }\n });\n}\n","import { filterMaybe, type LoadingState, isLoadingStateWithDefinedValue, isLoadingStateLoading, type LoadingStateWithDefinedValue, startWithBeginLoading, SubscriptionObject, successResult, beginLoading, mapLoadingStateValueWithOperator, loadingStateContext, type WorkUsingContext, valueFromFinishedLoadingState } from '@dereekb/rxjs';\nimport { ChangeDetectionStrategy, Component, ElementRef, type OnDestroy, type OnInit, viewChild } from '@angular/core';\nimport { distinctUntilChanged, map, switchMap, shareReplay, startWith, mergeMap, scan, BehaviorSubject, tap, first, type Observable, combineLatest, of } from 'rxjs';\nimport { addToSetCopy, asArray, convertMaybeToArray, filterMaybeArrayValues, lastValue, makeValuesGroupMap, type Maybe, mergeArrays, type PrimativeKey, separateValues, setContainsAllValues, setsAreEquivalent, sortByStringFunction } from '@dereekb/util';\nimport { FieldType, type FormlyFieldProps } from '@ngx-formly/material/form-field';\nimport { type FieldTypeConfig } from '@ngx-formly/core';\nimport { type SourceSelectValueMetaLoader, type SourceSelectMetaValueReader, type SourceSelectOpenFunction, type SourceSelectLoadSourcesFunction, type SourceSelectLoadSource, type SourceSelectLoadSourceLoadingState, type SourceSelectDisplayValue, type SourceSelectValue, type SourceSelectDisplayFunction, type SourceSelectDisplayValueGroup, type SourceSelectValueGroup, type SourceSelectOptions, type SourceSelectOpenSourceResult } from './sourceselect';\nimport { type AbstractControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { MatOptgroup, MatOption, MatSelect } from '@angular/material/select';\nimport { DbxActionModule, DbxButtonComponent, DbxButtonSpacerDirective, DbxLoadingComponent } from '@dereekb/dbx-web';\n\n/**\n * Formly field properties for the source-select field.\n *\n * Configures how values are loaded from external sources, how metadata is resolved,\n * and how display values are rendered in the select dropdown.\n */\nexport interface SourceSelectFieldProps<T extends PrimativeKey = PrimativeKey, M = unknown> extends FormlyFieldProps {\n /**\n * Function to open the source and request values.\n */\n readonly openSource?: SourceSelectOpenFunction<M>;\n /**\n * Loads the sources to display entries from.\n */\n readonly loadSources?: SourceSelectLoadSourcesFunction<M>;\n /**\n * Reads the value from a meta value.\n */\n readonly valueReader: SourceSelectMetaValueReader<T, M>;\n /**\n * Loads metadata for the input values.\n */\n readonly metaLoader: SourceSelectValueMetaLoader<T, M>;\n /**\n * Used for building a display value given the input.\n */\n readonly displayForValue: SourceSelectDisplayFunction<T, M>;\n /**\n * Select button icon\n */\n readonly selectButtonIcon?: string;\n /**\n * Whether or not the selection is as an array.\n */\n readonly multiple?: boolean;\n /**\n * (Optional) observable that will trigger the clearing of all cached display values.\n */\n readonly refreshDisplayValues$?: Observable<unknown>;\n}\n\ninterface SelectFieldOpenSourceMap<T extends PrimativeKey = PrimativeKey, M = unknown> {\n readonly values: SourceSelectValue<T, M>[];\n readonly valuesSet: Set<T>;\n}\n\n/**\n * Formly field component that renders a Material select dropdown populated from\n * multiple data sources (open source dialogs, loaded sources, and form control values).\n *\n * Merges values from all sources, deduplicates by value key, groups options by label,\n * and caches display values and metadata for performance.\n */\n@Component({\n selector: 'dbx-form-sourceselectfield',\n templateUrl: 'sourceselect.field.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatSelect, MatOption, FormsModule, ReactiveFormsModule, DbxButtonComponent, MatOptgroup, DbxButtonSpacerDirective, DbxActionModule, DbxLoadingComponent],\n standalone: true\n})\nexport class DbxFormSourceSelectFieldComponent<T extends PrimativeKey = PrimativeKey, M = unknown> extends FieldType<FieldTypeConfig<SourceSelectFieldProps<T, M>>> implements OnInit, OnDestroy {\n private readonly _cacheMetaSub = new SubscriptionObject();\n private readonly _clearDisplayHashMapSub = new SubscriptionObject();\n private readonly _valueMetaHashMap = new BehaviorSubject<Map<T, SourceSelectValue<T, M>>>(new Map());\n private readonly _displayHashMap = new BehaviorSubject<Map<T, SourceSelectDisplayValue<T, M>>>(new Map());\n\n private readonly _formControlObs = new BehaviorSubject<Maybe<AbstractControl<T[]>>>(undefined);\n private readonly _fromOpenSource = new BehaviorSubject<SelectFieldOpenSourceMap<T, M>>({ values: [], valuesSet: new Set() });\n private readonly _loadSources = new BehaviorSubject<Maybe<Observable<SourceSelectLoadSource<M>[]>>>(undefined);\n\n readonly buttonElement = viewChild<string, ElementRef<HTMLElement>>('button', { read: ElementRef<HTMLElement> });\n\n readonly formControl$ = this._formControlObs.pipe(filterMaybe());\n\n readonly currentFormControlValue$ = this.formControl$.pipe(\n switchMap((control) => control.valueChanges.pipe(startWith(control.value))),\n shareReplay(1)\n );\n\n readonly values$: Observable<T[]> = this.currentFormControlValue$.pipe(map(convertMaybeToArray), shareReplay(1));\n\n readonly allValuesEverSelected$: Observable<T[]> = this.values$.pipe(\n scan((acc, values) => {\n let result: Set<T> = acc;\n\n if (!setContainsAllValues(acc, values)) {\n result = addToSetCopy(acc, values);\n }\n\n return result;\n }, new Set<T>()),\n distinctUntilChanged(),\n map((x) => Array.from(x)),\n shareReplay(1)\n );\n\n readonly sourceSelectValuesFromValuesState$: Observable<LoadingState<SourceSelectValue<T, M>[]>> = this.allValuesEverSelected$.pipe(\n distinctUntilChanged(),\n switchMap((values: T[]) => this.loadSourceSelectValueForValues(values)),\n shareReplay(1)\n );\n\n readonly loadSources$: Observable<LoadingState<SourceSelectValueGroup<T, M>[]>> = this._loadSources.pipe(\n filterMaybe(),\n switchMap((loadSource) => {\n const { valueReader } = this;\n\n return loadSource.pipe(\n switchMap((sources: SourceSelectLoadSource<M>[]) => {\n const sourceObs: Observable<SourceSelectLoadSourceLoadingState<M>>[] = sources.map((x) => x.meta.pipe(map((metaState) => ({ ...metaState, label: x.label }))));\n\n if (sourceObs.length === 0) {\n return of(successResult([]));\n } else {\n return combineLatest(sourceObs).pipe(\n map((x) => {\n const statesWithValues = x.filter((y) => isLoadingStateWithDefinedValue(y));\n const loading = x.findIndex(isLoadingStateLoading) !== -1;\n const value: SourceSelectValueGroup<T, M>[] = statesWithValues.map((y) => {\n const group: SourceSelectValueGroup<T, M> = {\n label: y.label,\n values: (y.value as M[]).map((meta) => ({ meta, value: valueReader(meta) }))\n };\n\n return group;\n });\n\n return {\n loading,\n value\n };\n })\n );\n }\n })\n );\n })\n );\n\n readonly fromOpenSource$: Observable<SourceSelectValueGroup<T, M>> = this._fromOpenSource.pipe(\n distinctUntilChanged((a, b) => setsAreEquivalent(a.valuesSet, b.valuesSet)),\n map((x) => {\n const group: SourceSelectValueGroup<T, M> = {\n label: '',\n values: x.values\n };\n\n return group;\n }),\n shareReplay(1)\n );\n\n readonly valueGroupsFromSourcesState$: Observable<LoadingStateWithDefinedValue<SourceSelectValueGroup<T, M>[]>> = combineLatest([this.fromOpenSource$, this.loadSources$]).pipe(\n map(([fromOpenSourceGroup, loadSources]) => {\n const loadSourcesValue = loadSources.value ?? [];\n const value: SourceSelectValueGroup<T, M>[] = [fromOpenSourceGroup, ...loadSourcesValue];\n\n const result: LoadingStateWithDefinedValue<SourceSelectValueGroup<T, M>[]> = {\n loading: loadSources.loading,\n value\n };\n\n return result;\n }),\n shareReplay(1)\n );\n\n readonly allValueGroupsState$: Observable<LoadingState<SourceSelectValueGroup<T, M>[]>> = this.sourceSelectValuesFromValuesState$.pipe(\n switchMap((sourceSelectValuesFromValues: LoadingState<SourceSelectValue<T, M>[]>) => {\n if (isLoadingStateWithDefinedValue(sourceSelectValuesFromValues)) {\n const valuesFromValuesGroup: SourceSelectValueGroup<T, M> = {\n label: '',\n values: sourceSelectValuesFromValues.value\n };\n\n return this.valueGroupsFromSourcesState$.pipe(\n map((sourcesState) => {\n const allGroups: SourceSelectValueGroup<T, M>[] = [valuesFromValuesGroup, ...sourcesState.value];\n\n const result: LoadingState<SourceSelectValueGroup<T, M>[]> = {\n loading: sourceSelectValuesFromValues.loading || sourcesState.loading,\n value: allGroups\n };\n\n return result;\n })\n );\n } else {\n return of(beginLoading<SourceSelectValueGroup<T, M>[]>({}));\n }\n }),\n shareReplay(1)\n );\n\n readonly allOptionGroupsState$: Observable<LoadingState<SourceSelectDisplayValueGroup<T, M>[]>> = this.allValueGroupsState$.pipe(\n mapLoadingStateValueWithOperator(\n switchMap((groups: SourceSelectValueGroup<T, M>[]) => {\n const allGroupsReducedByLabel = makeValuesGroupMap(groups, (x) => x.label) as Map<string, SourceSelectValueGroup<T, M>[]>;\n\n const valuesEncountered = new Set<T>();\n const allUniqueValues: SourceSelectValue<T, M>[] = [];\n\n const simplifiedValuesGroups: SourceSelectValueGroup<T, M>[] = [];\n\n // sort to put the blank label first\n Array.from(allGroupsReducedByLabel.entries())\n .sort(sortByStringFunction((x) => x[0]))\n .forEach(([label, groups]) => {\n const values: SourceSelectValue<T, M>[] = [];\n\n groups.forEach((group) => {\n group.values.forEach((selectValue) => {\n if (!valuesEncountered.has(selectValue.value)) {\n values.push(selectValue);\n allUniqueValues.push(selectValue);\n valuesEncountered.add(selectValue.value);\n }\n });\n });\n\n if (values.length > 0) {\n simplifiedValuesGroups.push({\n label,\n values\n });\n }\n });\n\n const obs = this.getDisplayValuesForSelectValues(allUniqueValues).pipe(\n map((displayValues) => {\n const displayValuesMap = new Map(displayValues.map((x) => [x.value, x]));\n\n const displayGroups: SourceSelectDisplayValueGroup<T, M>[] = simplifiedValuesGroups.map((valueGroup) => {\n const values = filterMaybeArrayValues(valueGroup.values.map((x) => displayValuesMap.get(x.value)));\n\n return {\n label: valueGroup.label,\n values\n };\n });\n\n return displayGroups;\n })\n );\n\n return obs;\n })\n ),\n shareReplay(1)\n );\n\n readonly allOptionGroups$: Observable<SourceSelectDisplayValueGroup<T, M>[]> = this.allOptionGroupsState$.pipe(\n valueFromFinishedLoadingState(),\n map((x) => x ?? []),\n shareReplay(1)\n );\n\n readonly options$: Observable<SourceSelectOptions<T, M>> = this.allOptionGroups$.pipe(\n map((x) => {\n const { included: groupedValues, excluded: nonGroupedGroup } = separateValues(x, (y) => Boolean(y.label));\n\n const result: SourceSelectOptions<T, M> = {\n nonGroupedValues: nonGroupedGroup[0]?.values ?? [],\n groupedValues\n };\n\n return result;\n }),\n shareReplay(1)\n );\n\n readonly nonGroupedValues$ = this.options$.pipe(map((x) => x.nonGroupedValues));\n readonly groupedOptions$ = this.options$.pipe(map((x) => x.groupedValues));\n\n readonly nonGroupedValuesSignal = toSignal(this.nonGroupedValues$);\n readonly groupedOptionsSignal = toSignal(this.groupedOptions$);\n\n get sourceSelectField(): SourceSelectFieldProps<T, M> {\n return this.props;\n }\n\n get openSource() {\n return this.props.openSource;\n }\n\n get showOpenSourceButton() {\n return Boolean(this.openSource);\n }\n\n get loadSources() {\n return this.props.loadSources;\n }\n\n get valueReader() {\n return this.props.valueReader;\n }\n\n get metaLoader() {\n return this.props.metaLoader;\n }\n\n get displayForValue(): SourceSelectDisplayFunction<T, M> {\n return this.props.displayForValue;\n }\n\n get selectButtonIcon() {\n return this.props.selectButtonIcon ?? 'add';\n }\n\n get multiple() {\n return this.props.multiple || false;\n }\n\n get refreshDisplayValues$() {\n return this.props.refreshDisplayValues$;\n }\n\n loadSourceSelectValueForValues(values: T[]): Observable<LoadingState<SourceSelectValue<T, M>[]>> {\n return this.getSourceSelectValueForValues(values).pipe(\n map((sourceSelectValues: SourceSelectValue<T, M>[]) => successResult(sourceSelectValues)),\n startWithBeginLoading(),\n shareReplay(1)\n );\n }\n\n getSourceSelectValueForValues(values: T[]): Observable<SourceSelectValue<T, M>[]> {\n const { valueReader } = this;\n\n return this._valueMetaHashMap.pipe(\n mergeMap((metaMap) => {\n const mappingResult = values.map((hash, i) => [i, hash, metaMap.get(hash)] as [number, T, SourceSelectValue<T, M>]);\n\n const {\n //\n included: hasMeta,\n excluded: needsMeta\n } = separateValues(mappingResult, (x) => Boolean(x[2]));\n\n let obs: Observable<SourceSelectValue<T, M>[]>;\n\n if (needsMeta.length > 0) {\n // Go get the meta value.\n const metaValuesObs = this.metaLoader(needsMeta.map((x) => x[1]));\n\n obs = metaValuesObs.pipe(\n first(),\n map((metaResults) => {\n const metaResultsMapping: SourceSelectValue<T, M>[] = metaResults.map((meta) => ({ meta, value: valueReader(meta) }));\n const valueIndexHashMap = new Map(metaResultsMapping.map((x) => [x.value, x]));\n\n // Update metaMap. No need to push an update notification.\n metaResultsMapping.forEach((x) => metaMap.set(x.value, x));\n\n // Zip values back together.\n const newDisplayValues = mappingResult.map((x) => x[2] ?? valueIndexHashMap.get(x[1]));\n\n // Return display values.\n return newDisplayValues;\n })\n );\n } else {\n // If all display values are hashed return them\n obs = of(hasMeta.map((x) => x[2]));\n }\n\n return obs;\n })\n );\n }\n\n loadDisplayValuesForSelectValues(values: SourceSelectValue<T, M>[]): Observable<LoadingState<SourceSelectDisplayValue<T, M>[]>> {\n return this.getDisplayValuesForSelectValues(values).pipe(\n map((displayValues: SourceSelectDisplayValue<T, M>[]) => successResult(displayValues)),\n startWithBeginLoading(),\n shareReplay(1)\n );\n }\n\n getDisplayValuesForSelectValues(values: SourceSelectValue<T, M>[]): Observable<SourceSelectDisplayValue<T, M>[]> {\n return this._displayHashMap.pipe(\n mergeMap((metaMap) => {\n const mappingResult = values.map((x) => [x, x.value] as [SourceSelectValue<T, M>, T]).map(([x, hash], i) => [i, hash, x, metaMap.get(hash)] as [number, T, SourceSelectValue<T, M>, SourceSelectDisplayValue<T, M>]);\n\n const hasDisplay = mappingResult.filter((x) => Boolean(x[3]));\n const needsDisplay = mappingResult.filter((x) => !x[3]);\n let obs: Observable<SourceSelectDisplayValue<T, M>[]>;\n\n if (needsDisplay.length > 0) {\n // Go get the display value.\n const displayValuesObs = this.displayForValue(needsDisplay.map((x) => x[2]));\n\n obs = displayValuesObs.pipe(\n first(),\n map((displayResults) => {\n const displayResultsMapping: [SourceSelectDisplayValue<T, M>, T][] = (displayResults as SourceSelectDisplayValue<T, M>[]).map((x) => [x, x.value]);\n const valueIndexHashMap = new Map(displayResultsMapping.map(([x, hash]) => [hash, x]));\n\n // Update metaMap. No need to push an update notification.\n displayResultsMapping.forEach(([x, hash]) => metaMap.set(hash, x));\n\n // Zip values back together.\n const newDisplayValues = mappingResult.map((x) => x[3] ?? valueIndexHashMap.get(x[1]));\n\n // Return display values.\n return newDisplayValues;\n })\n );\n } else {\n // If all display values are hashed return that.\n obs = of(hasDisplay.map((x) => x[3]));\n }\n\n return obs;\n })\n );\n }\n\n readonly context = loadingStateContext({ obs: this.allOptionGroupsState$ });\n\n ngOnInit(): void {\n const { loadSources } = this;\n\n this._loadSources.next(loadSources?.() || of([]));\n\n if (this.refreshDisplayValues$ != null) {\n this._clearDisplayHashMapSub.subscription = this.refreshDisplayValues$.subscribe(() => this._displayHashMap.next(new Map()));\n }\n\n this._formControlObs.next(this.formControl);\n\n // copy all values from the sources into the values hash map to prevent reloading\n this._cacheMetaSub.subscription = this.valueGroupsFromSourcesState$.subscribe((x) => {\n const hashMap = this._valueMetaHashMap.value;\n x.value.forEach((x) => x.values.forEach((y) => hashMap.set(y.value, y)));\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._cacheMetaSub.destroy();\n this._clearDisplayHashMapSub.destroy();\n this._valueMetaHashMap.complete();\n this._displayHashMap.complete();\n this._formControlObs.complete();\n this._fromOpenSource.complete();\n this._loadSources.complete();\n this.context.destroy();\n }\n\n readonly handleSelectOptions: WorkUsingContext<unknown> = (_, context) => {\n const { openSource } = this;\n const origin = this.buttonElement();\n\n if (openSource && origin) {\n const sourceObs = openSource({ origin });\n context.startWorkingWithObservable(\n sourceObs.pipe(\n first(),\n tap((result: SourceSelectOpenSourceResult<M>) => {\n const valuesToAdd = mergeArrays([result.select, result.options]);\n\n if (valuesToAdd.length) {\n this.addToOpenSourceMap(valuesToAdd);\n }\n\n if (result.set) {\n this.setCurrentValue(result.set.map((x) => this.valueReader(x)));\n } else if (result.select) {\n this.addToCurrentValue(result.select.map((x) => this.valueReader(x)));\n }\n })\n )\n );\n } else {\n context.reject();\n }\n };\n\n private addToOpenSourceMap(input: M[]) {\n const { valueReader } = this;\n const { values: meta, valuesSet: initialValues } = this._fromOpenSource.value;\n\n const newMetaFromInput: SourceSelectValue<T, M>[] = [];\n const valuesSet = new Set(initialValues);\n\n input.forEach((x) => {\n const value = valueReader(x);\n\n if (!valuesSet.has(value)) {\n newMetaFromInput.push({ meta: x, value });\n valuesSet.add(value);\n }\n });\n\n if (newMetaFromInput.length > 0) {\n this._fromOpenSource.next({\n values: [...meta, ...newMetaFromInput],\n valuesSet: valuesSet\n });\n }\n }\n\n private addToCurrentValue(values: T[]) {\n const currentValue = asArray(this.formControl.value);\n const newValueArray = [...currentValue, ...values];\n this.setCurrentValue(newValueArray);\n }\n\n private setCurrentValue(newValueArray: T[]) {\n const value = this.multiple ? newValueArray : lastValue(newValueArray); // pick last value, as the last value added is the newest value.\n this.formControl.setValue(value);\n this.formControl.markAsDirty();\n this.formControl.markAsTouched();\n }\n}\n","<div class=\"dbx-source-select-field\">\n <div class=\"dbx-source-select-field-content\">\n <mat-select class=\"dbx-source-select-field-select\" [id]=\"id\" [formControl]=\"formControl\" [multiple]=\"props.multiple\">\n @for (value of nonGroupedValuesSignal(); track value.value) {\n <mat-option [value]=\"value.value\">\n {{ value.label }}\n </mat-option>\n }\n @for (optionGroup of groupedOptionsSignal(); track optionGroup.label) {\n <mat-optgroup [label]=\"optionGroup.label\">\n @for (value of optionGroup.values; track value.value) {\n <mat-option [value]=\"value.value\">\n {{ value.label }}\n </mat-option>\n }\n </mat-optgroup>\n }\n </mat-select>\n @if (showOpenSourceButton) {\n <dbx-button-spacer></dbx-button-spacer>\n <dbx-action dbxActionValue [dbxActionHandler]=\"handleSelectOptions\" class=\"dbx-source-select-field-button\">\n <dbx-button #button dbxActionButton [fab]=\"true\" [iconOnly]=\"true\" [icon]=\"selectButtonIcon\"></dbx-button>\n </dbx-action>\n }\n </div>\n <dbx-loading class=\"dbx-source-select-field-loading\" [linear]=\"true\" [context]=\"context\"></dbx-loading>\n</div>\n","import { type PrimativeKey } from '@dereekb/util';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig, type DescriptionFieldConfig, type MaterialFormFieldConfig } from '../../field';\nimport { type SourceSelectFieldProps } from './sourceselect.field.component';\n\n// MARK: Source Select\n/**\n * Configuration for a source-select field that loads values from external sources.\n */\nexport interface SourceSelectFieldConfig<T extends PrimativeKey = PrimativeKey, M = unknown> extends LabeledFieldConfig, DescriptionFieldConfig, MaterialFormFieldConfig, SourceSelectFieldProps<T, M> {}\n\n/**\n * Creates a Formly field configuration for a source-select field that loads and\n * displays selectable values from one or more external data sources.\n *\n * @param config - Source-select field configuration\n * @returns A validated {@link FormlyFieldConfig} with type `'sourceselectfield'`\n *\n * @example\n * ```typescript\n * const field = sourceSelectField({\n * key: 'source',\n * label: 'Source',\n * loadSources: () => sources$,\n * metaReader: (meta) => meta.id\n * });\n * ```\n */\nexport function sourceSelectField<T extends PrimativeKey = PrimativeKey, M = unknown>(config: SourceSelectFieldConfig<T, M>): FormlyFieldConfig {\n const { key, materialFormField } = config;\n return formlyField({\n key,\n type: 'sourceselectfield',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n ...config,\n autocomplete: false\n })\n });\n}\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxFormSourceSelectFieldComponent } from './sourceselect.field.component';\n\n/** Registers the `sourceselectfield` Formly field type. */\n@NgModule({\n imports: [\n DbxFormSourceSelectFieldComponent,\n FormlyModule.forChild({\n types: [{ name: 'sourceselectfield', component: DbxFormSourceSelectFieldComponent, wrappers: ['form-field'] }]\n })\n ],\n exports: [DbxFormSourceSelectFieldComponent]\n})\nexport class DbxFormFormlySourceSelectModule {}\n","import { asObservable, type ObservableOrValue } from '@dereekb/rxjs';\nimport { convertMaybeToArray, firstValue, type LabeledValue, type Maybe } from '@dereekb/util';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { map } from 'rxjs';\nimport { type DescriptionFieldConfig, formlyField, type FormlyValueParser, type LabeledFieldConfig, type MaterialFormFieldConfig, propsAndConfigForFieldConfig } from '../field';\n\n/**\n * A selectable option with a value, label, and optional disabled state.\n */\nexport interface ValueSelectionOptionWithValue<T> extends LabeledValue<T> {\n disabled?: boolean;\n}\n\n/**\n * A special \"clear\" option that resets the selection when chosen.\n */\nexport interface ValueSelectionOptionClear {\n label?: string;\n clear: true;\n}\n\n/**\n * A selectable option: either a value option or a clear option.\n */\nexport type ValueSelectionOption<T> = ValueSelectionOptionWithValue<T> | ValueSelectionOptionClear;\n\nexport interface ValueSelectionFieldConfig<T> extends LabeledFieldConfig, DescriptionFieldConfig, MaterialFormFieldConfig {\n /**\n * Whether or not to use the native select.\n *\n * Be sure to import FormlyMatNativeSelectModule.\n */\n readonly native?: boolean;\n /**\n * Whether or not to add a clear option to the input values.\n */\n readonly addClearOption?: string | boolean;\n /**\n * Values to select from.\n */\n readonly options: ObservableOrValue<ValueSelectionOption<T>[]>;\n /**\n * Allow selecting multiple values and return an array.\n */\n readonly multiple?: boolean;\n /**\n * The select all option configuration.\n */\n readonly selectAllOption?: true | string;\n}\n\n/**\n * Creates a Formly select field configuration with support for native/material select,\n * clear option, multiple selection, and \"select all\".\n *\n * @param config - Selection field configuration\n * @returns A validated {@link FormlyFieldConfig} with type `'select'` or `'native-select'`\n *\n * @example\n * ```typescript\n * const field = valueSelectionField({\n * key: 'color',\n * label: 'Color',\n * options: [{ label: 'Red', value: 'red' }, { label: 'Blue', value: 'blue' }]\n * });\n * ```\n */\nexport function valueSelectionField<T>(config: ValueSelectionFieldConfig<T>): FormlyFieldConfig {\n const { key, native = false, addClearOption = false, selectAllOption: inputSelectAllOption, options: inputOptions, materialFormField } = config;\n let selectAllOptionConfig: Maybe<{ selectAllOption: string }>;\n\n if (inputSelectAllOption) {\n selectAllOptionConfig = {\n selectAllOption: typeof inputSelectAllOption === 'boolean' ? 'Select All' : (inputSelectAllOption as string)\n };\n }\n\n const options = addClearOption ? asObservable(inputOptions).pipe(map(addValueSelectionOptionFunction(typeof addClearOption === 'string' ? addClearOption : undefined))) : inputOptions;\n let parsers: FormlyValueParser[] | undefined = undefined;\n\n parsers = config.multiple !== true ? [firstValue] : [convertMaybeToArray];\n\n return formlyField({\n key,\n type: native ? 'native-select' : 'select',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n options,\n multiple: config.multiple,\n ...selectAllOptionConfig\n }),\n parsers\n });\n}\n\n/**\n * Creates a function that prepends a \"clear\" option to the selection options array\n * if one doesn't already exist.\n *\n * @param label - Optional label for the clear option\n * @returns A function that transforms selection options by prepending a clear option\n */\nexport function addValueSelectionOptionFunction<T>(label?: string | undefined): (options: ValueSelectionOption<T>[]) => ValueSelectionOption<T>[] {\n return (options: ValueSelectionOption<T>[]) => {\n const hasClear = options.findIndex((x) => (x as ValueSelectionOptionClear).clear) !== -1;\n\n if (hasClear) {\n return options;\n } else {\n return [{ label, clear: true }, ...options];\n }\n };\n}\n","import { type FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { CompactContextStore, mapCompactModeObs } from '@dereekb/dbx-web';\nimport { ChangeDetectionStrategy, Component, type OnDestroy, type OnInit, inject } from '@angular/core';\nimport { type FieldTypeConfig, type FormlyFieldProps } from '@ngx-formly/core';\nimport { FieldType } from '@ngx-formly/material';\nimport { Editor, NgxEditorModule } from '@bobbyquantum/ngx-editor';\nimport { debounceTime, filter } from 'rxjs';\nimport { filterMaybe, SubscriptionObject } from '@dereekb/rxjs';\nimport { type Maybe } from '@dereekb/util';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { NgClass } from '@angular/common';\n\n/** Formly field properties for the text editor component. */\nexport type TextEditorComponentFieldProps = FormlyFieldProps;\n\n/**\n * Formly field component providing a rich text editor powered by ngx-editor.\n *\n * Outputs HTML format and marks the form control dirty on editor value changes\n * while focused. Supports compact mode via {@link CompactContextStore}.\n */\n@Component({\n template: `\n <div class=\"dbx-texteditor-field\" [ngClass]=\"compactClassSignal()\" [formGroup]=\"formGroup\">\n @if (label) {\n <span class=\"dbx-label\">{{ label }}</span>\n }\n <div class=\"dbx-texteditor-field-input\">\n <ngx-editor [editor]=\"editor\" outputFormat=\"html\" [placeholder]=\"placeholder\" [formControlName]=\"formGroupName\"></ngx-editor>\n </div>\n <div class=\"dbx-texteditor-field-menu\">\n <ngx-editor-menu [editor]=\"editor\"></ngx-editor-menu>\n </div>\n @if (description) {\n <div class=\"dbx-form-description\">{{ description }}</div>\n }\n </div>\n `,\n imports: [NgClass, NgxEditorModule, FormsModule, ReactiveFormsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxTextEditorFieldComponent<T extends TextEditorComponentFieldProps = TextEditorComponentFieldProps> extends FieldType<FieldTypeConfig<T>> implements OnInit, OnDestroy {\n private readonly _compactContextStore = inject(CompactContextStore, { optional: true });\n\n private _editor!: Editor;\n private readonly _sub = new SubscriptionObject();\n\n readonly compactClass$ = mapCompactModeObs(this._compactContextStore?.mode$, {\n compact: 'dbx-texteditor-field-compact'\n }).pipe(filterMaybe());\n\n readonly compactClassSignal = toSignal(this.compactClass$, { initialValue: '' });\n\n get formGroupName(): string {\n return this.field.key as string;\n }\n\n get formGroup(): FormGroup {\n return this.form as FormGroup;\n }\n\n get editor(): Editor {\n return this._editor;\n }\n\n get label(): Maybe<string> {\n return this.field.props?.label;\n }\n\n get description(): Maybe<string> {\n return this.props.description;\n }\n\n ngOnInit(): void {\n this._editor = new Editor({});\n\n // TODO: Sync disabled state too\n\n // TODO: Sync the value periodically while not focused too\n\n // Watch for value changes every second and update the pristine level.\n this._sub.subscription = this.editor.valueChanges\n .pipe(\n debounceTime(50),\n filter(() => this.editor.view.hasFocus())\n )\n .subscribe(() => {\n this.formControl.updateValueAndValidity();\n this.formControl.markAsDirty();\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n\n if (this._editor != null) {\n this._editor.destroy();\n }\n\n this._sub.destroy();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxTextEditorFieldComponent } from './texteditor.field.component';\n\nconst importsAndExports = [DbxTextEditorFieldComponent];\n\n/** Registers the `texteditor` Formly field type for rich text editing. */\n@NgModule({\n imports: [\n ...importsAndExports,\n FormlyModule.forChild({\n types: [{ name: 'texteditor', component: DbxTextEditorFieldComponent }]\n })\n ],\n exports: importsAndExports\n})\nexport class DbxFormFormlyTextEditorFieldModule {}\n","import { type DescriptionFieldConfig, type MaterialFormFieldConfig, type LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig } from './../field';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type TextFieldLengthConfig } from '../value/text/text.field';\n\n/**\n * Configuration for a rich text editor field with optional length constraints.\n */\nexport interface TextEditorFieldConfig extends LabeledFieldConfig, DescriptionFieldConfig, TextFieldLengthConfig, MaterialFormFieldConfig {}\n\n/**\n * Creates a Formly field configuration for a rich text editor.\n *\n * The field defaults to an empty string and updates the model on blur events.\n *\n * @param config - Text editor field configuration\n * @returns A validated {@link FormlyFieldConfig} with type `'texteditor'`\n *\n * @example\n * ```typescript\n * const field = textEditorField({ key: 'bio', label: 'Biography', maxLength: 2000 });\n * ```\n */\nexport function textEditorField(config: TextEditorFieldConfig): FormlyFieldConfig {\n const { key, minLength, maxLength, materialFormField } = config;\n const fieldConfig: FormlyFieldConfig = formlyField({\n key,\n type: 'texteditor',\n defaultValue: '', // Set to always get a string as a result.\n modelOptions: {\n // https://formly.dev/examples/validation/async-validation-update-on\n // Set to trigger value update on blurs with the form. However, the value is set internally too.\n updateOn: 'blur'\n },\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n minLength,\n maxLength\n })\n });\n\n return fieldConfig;\n}\n","import { type CdkDragDrop, DragDropModule } from '@angular/cdk/drag-drop';\nimport { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { asDecisionFunction, cachedGetter, type DecisionFunction, type FactoryWithRequiredInput, type Getter, getValueFromGetter, type IndexRef, makeGetter, type Maybe } from '@dereekb/util';\nimport { type FieldArrayTypeConfig, FieldArrayType, type FormlyFieldConfig, type FormlyFieldProps, FormlyModule } from '@ngx-formly/core';\nimport { DbxBarDirective, DbxButtonComponent, DbxButtonSpacerDirective, DbxSubSectionComponent } from '@dereekb/dbx-web';\nimport { MatIconModule } from '@angular/material/icon';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\n\n/**\n * Represents an item in a repeat array with its index and optional value.\n */\nexport interface DbxFormRepeatArrayPair<T = unknown> extends IndexRef {\n readonly value?: T | undefined;\n}\n\n/**\n * Extends {@link DbxFormRepeatArrayPair} with the Formly field configuration for the item.\n */\nexport interface DbxFormRepeatArrayFieldConfigPair<T = unknown> extends Partial<DbxFormRepeatArrayPair<T>> {\n readonly fieldConfig: FormlyFieldConfig;\n}\n\n/**\n * Factory function that creates a template value for a new repeat array item,\n * given the current count of items.\n */\nexport type DbxFormRepeatArrayAddTemplateFunction<T> = FactoryWithRequiredInput<Partial<Maybe<T>>, number>;\n\n/**\n * Configuration for the repeat array field component, controlling add/remove/duplicate\n * behavior, drag-and-drop rearranging, and item labeling.\n */\nexport interface DbxFormRepeatArrayConfig<T = unknown> extends Pick<FormlyFieldProps, 'maxLength' | 'label' | 'description'> {\n readonly labelForField?: string | FactoryWithRequiredInput<string, DbxFormRepeatArrayFieldConfigPair<T>>;\n /**\n * Text for the add button.\n */\n readonly addText?: string;\n /**\n * Optional template function to create a new template when using the add button.\n */\n readonly addTemplate?: DbxFormRepeatArrayAddTemplateFunction<T>;\n /**\n * Text for the duplicate button.\n */\n readonly duplicateText?: string;\n /**\n * Text for the remove button.\n */\n readonly removeText?: string;\n /**\n * Whethe or not to disable rearranging items.\n *\n * False by default.\n */\n readonly disableRearrange?: boolean;\n /**\n * Wether or not to show the add button.\n *\n * True by default.\n */\n readonly allowAdd?: boolean;\n /**\n * Whether or not to allow duplicateing items. Can optionally pass a decision function that decides whether or not a specific item can be removed.\n */\n readonly allowDuplicate?: boolean | DecisionFunction<DbxFormRepeatArrayPair<T>>;\n /**\n * Whether or not to allow removing items. Can optionally pass a decision function that decides whether or not a specific item can be removed.\n */\n readonly allowRemove?: boolean | DecisionFunction<DbxFormRepeatArrayPair<T>>;\n /**\n * Adds the duplicate to the end of the values\n */\n readonly addDuplicateToEnd?: boolean;\n}\n\n/**\n * Formly custom field type for dynamically repeatable arrays of field groups.\n *\n * Renders a list of field groups that users can add to, remove from, duplicate,\n * and rearrange via drag-and-drop. Enforces an optional maximum item count.\n *\n * Registered as Formly type `'repeatarray'`.\n */\n@Component({\n template: `\n <div class=\"dbx-form-repeat-array\">\n <dbx-subsection [header]=\"label\" [hint]=\"description\">\n <!-- Fields -->\n <div class=\"dbx-form-repeat-array-fields\" cdkDropList [cdkDropListDisabled]=\"disableRearrange\" (cdkDropListDropped)=\"drop($event)\">\n @for (field of field.fieldGroup; track field.key; let i = $index; let last = $last) {\n <div class=\"dbx-form-repeat-array-field\" cdkDrag cdkDragLockAxis=\"y\">\n <div class=\"dbx-form-repeat-array-drag-placeholder\" *cdkDragPlaceholder></div>\n <dbx-bar class=\"dbx-form-repeat-array-bar dbx-bar-fixed-height\">\n @if (!disableRearrange) {\n <button class=\"dbx-form-repeat-array-drag-button\" cdkDragHandle mat-stroked-button><mat-icon>drag_handle</mat-icon></button>\n <dbx-button-spacer></dbx-button-spacer>\n }\n <h4>\n <span class=\"repeat-array-number\">{{ i + 1 }}</span>\n <span>{{ labelForItem(field, i) }}</span>\n </h4>\n <span class=\"dbx-spacer\"></span>\n @if (allowDuplicate(i)) {\n <dbx-button [stroked]=\"true\" [text]=\"duplicateText\" (buttonClick)=\"duplicate(i)\"></dbx-button>\n <dbx-button-spacer></dbx-button-spacer>\n }\n @if (allowRemove(i)) {\n <dbx-button color=\"warn\" [stroked]=\"true\" [text]=\"removeText\" (buttonClick)=\"remove(i)\"></dbx-button>\n }\n </dbx-bar>\n <formly-field class=\"dbx-form-repeat-array-field-content\" [field]=\"field\"></formly-field>\n </div>\n }\n </div>\n <!-- Add Button -->\n <div class=\"dbx-form-repeat-array-footer\">\n @if (allowAdd) {\n <dbx-button [raised]=\"true\" [disabled]=\"addItemDisabled\" [text]=\"addText\" (buttonClick)=\"addClicked()\"></dbx-button>\n }\n </div>\n </dbx-subsection>\n </div>\n `,\n imports: [DbxSubSectionComponent, DbxBarDirective, DbxButtonComponent, FormlyModule, DragDropModule, MatIconModule, DbxButtonSpacerDirective, MatFormFieldModule, FormsModule, ReactiveFormsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFormRepeatArrayTypeComponent<T = unknown> extends FieldArrayType<FieldArrayTypeConfig<DbxFormRepeatArrayConfig>> {\n private readonly _labelForField = cachedGetter(() => {\n const input = this.repeatArrayField.labelForField;\n\n if (typeof input === 'function') {\n return input;\n } else {\n return makeGetter(input ?? '');\n }\n });\n\n private readonly _allowRemove: Getter<DecisionFunction<DbxFormRepeatArrayPair<T>>> = cachedGetter(() => {\n return asDecisionFunction(this.field.props.allowRemove, true);\n });\n\n private readonly _allowDuplicate: Getter<DecisionFunction<DbxFormRepeatArrayPair<T>>> = cachedGetter(() => {\n return asDecisionFunction(this.field.props.allowDuplicate || false, false);\n });\n\n get repeatArrayField(): DbxFormRepeatArrayConfig {\n return this.field.props;\n }\n\n get label(): string {\n return this.field.props.label ?? (this.field.key as string);\n }\n\n get description(): Maybe<string> {\n return this.field.props.description;\n }\n\n get duplicateText(): string {\n return this.repeatArrayField.addText ?? 'Duplicate';\n }\n\n get addText(): string {\n return this.repeatArrayField.addText ?? 'Add';\n }\n\n get addTemplate() {\n return this.repeatArrayField.addTemplate;\n }\n\n get removeText(): string {\n return this.repeatArrayField.removeText ?? 'Remove';\n }\n\n get max(): Maybe<number> {\n return this.field.props.maxLength;\n }\n\n get count(): number {\n return this.field.fieldGroup?.length ?? 0;\n }\n\n get disableRearrange(): boolean {\n return Boolean(this.field.props.disableRearrange);\n }\n\n get allowAdd(): boolean {\n return this.field.props.allowAdd ?? true;\n }\n\n get addDuplicateToEnd(): boolean {\n return this.field.props.addDuplicateToEnd ?? false;\n }\n\n allowRemove(i: number) {\n const array: unknown[] = this.model;\n const value = array[i] as T | undefined;\n return this._allowRemove()({\n i,\n value\n });\n }\n\n allowDuplicate(i: number) {\n const array: unknown[] = this.model;\n const value = array[i] as T;\n return this._allowDuplicate()({\n i,\n value\n });\n }\n\n get addItemDisabled() {\n return !this.canAddItem;\n }\n\n get canAddItem(): boolean {\n const max = this.max;\n\n if (max == null) {\n return true;\n } else {\n return this.count < max;\n }\n }\n\n /**\n * Moves the target index up one value.\n *\n * @param index\n */\n moveUp(index: number) {\n if (index === 0) {\n return;\n }\n\n this.swapIndexes(index, index - 1);\n }\n\n moveDown(index: number) {\n this.swapIndexes(index, index + 1);\n }\n\n addClicked() {\n const addTemplate = this.addTemplate;\n const template = addTemplate ? addTemplate(this.count) : undefined;\n this.add(undefined, template);\n }\n\n duplicate(index: number) {\n const array: unknown[] = this.model;\n const targetValue = array[index];\n\n if (!targetValue) {\n return;\n }\n\n const targetIndex = this.addDuplicateToEnd ? array.length : index;\n this.add(targetIndex, targetValue, { markAsDirty: true });\n }\n\n swapIndexes(currentIndex: number, targetIndex: number) {\n const array: unknown[] = this.model;\n const targetValue = array[currentIndex];\n\n if (!targetValue) {\n return;\n }\n\n this.remove(currentIndex);\n this.add(targetIndex, targetValue, { markAsDirty: true });\n this.formControl.markAsTouched();\n }\n\n drop(event: CdkDragDrop<unknown>) {\n this.swapIndexes(event.previousIndex, event.currentIndex);\n }\n\n labelForItem(fieldConfig: FormlyFieldConfig, i: number): string {\n const array: unknown[] = this.model;\n const value = array[i] as T;\n\n return getValueFromGetter(this._labelForField(), {\n i,\n value,\n fieldConfig\n });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxFormRepeatArrayTypeComponent } from './array.field.component';\n\nconst importsAndExports = [DbxFormRepeatArrayTypeComponent];\n\n/** Registers the `repeatarray` Formly field type for dynamic array fields. */\n@NgModule({\n imports: [\n ...importsAndExports,\n FormlyModule.forChild({\n types: [{ name: 'repeatarray', component: DbxFormRepeatArrayTypeComponent }]\n })\n ],\n exports: importsAndExports\n})\nexport class DbxFormFormlyArrayFieldModule {}\n","import { type ArrayOrValue, asArray } from '@dereekb/util';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type FieldConfig, formlyField, propsAndConfigForFieldConfig } from '../../field';\nimport { type DbxFormRepeatArrayConfig } from './array.field.component';\n\n/**\n * Configuration for a repeat-array field that allows users to dynamically add/remove\n * groups of fields (e.g., multiple addresses, phone numbers).\n */\nexport interface RepeatArrayFieldConfig<T = unknown> extends DbxFormRepeatArrayConfig<T>, FieldConfig {\n /** Field group template that is repeated for each array entry. */\n repeatFieldGroup: ArrayOrValue<FormlyFieldConfig>;\n}\n\n/**\n * Creates a Formly field configuration for a repeatable array of field groups.\n *\n * Users can dynamically add, remove, duplicate, and rearrange entries.\n *\n * @param config - Repeat array configuration including the template field group\n * @returns A validated {@link FormlyFieldConfig} with type `'repeatarray'`\n *\n * @example\n * ```typescript\n * const field = repeatArrayField({\n * key: 'items',\n * label: 'Items',\n * addText: 'Add Item',\n * removeText: 'Remove Item',\n * repeatFieldGroup: [textField({ key: 'name', label: 'Name' })]\n * });\n * ```\n */\nexport function repeatArrayField<T = unknown>(config: RepeatArrayFieldConfig<T>) {\n const { key, label, description, repeatFieldGroup, maxLength, addText, addTemplate, removeText, duplicateText, labelForField, disableRearrange, allowAdd, allowRemove, allowDuplicate, addDuplicateToEnd } = config;\n\n return formlyField({\n key,\n type: 'repeatarray',\n ...propsAndConfigForFieldConfig(config, {\n label,\n description,\n maxLength,\n labelForField,\n addText,\n addTemplate,\n removeText,\n duplicateText,\n disableRearrange,\n allowAdd,\n allowRemove,\n allowDuplicate,\n addDuplicateToEnd\n }),\n fieldArray: {\n fieldGroup: asArray(repeatFieldGroup)\n }\n });\n}\n","import { NgModule } from '@angular/core';\nimport { FormlyMaterialModule } from '@ngx-formly/material';\nimport { FormlyMatCheckboxModule } from '@ngx-formly/material/checkbox';\nimport { FormlyMatToggleModule } from '@ngx-formly/material/toggle';\n\nconst importsAndExports = [FormlyMaterialModule, FormlyMatCheckboxModule, FormlyMatToggleModule];\n\n/** Provides Formly Material checkbox and toggle field support. */\n@NgModule({\n imports: importsAndExports,\n exports: importsAndExports\n})\nexport class DbxFormFormlyBooleanFieldModule {}\n","import { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type LabeledFieldConfig, formlyField, type DefaultValueFieldConfig, type DescriptionFieldConfig, propsAndConfigForFieldConfig, type MaterialFormFieldConfig } from '../../field';\nimport { AUTO_TOUCH_WRAPPER_KEY, STYLE_WRAPPER_KEY } from '../../wrapper/wrapper.key';\n\n/**\n * Configuration for a Material toggle (slide toggle) field.\n */\nexport interface ToggleFieldConfig extends Omit<LabeledFieldConfig, 'placeholder' | 'autocomplete'>, DefaultValueFieldConfig<boolean>, DescriptionFieldConfig, MaterialFormFieldConfig {}\n\n/**\n * Creates a Formly field configuration for a Material slide toggle.\n *\n * Defaults to `false` when no default value is specified. Uses auto-touch and style wrappers.\n *\n * @param config - Toggle field configuration\n * @returns A validated {@link FormlyFieldConfig} with type `'toggle'`\n *\n * @example\n * ```typescript\n * const field = toggleField({ key: 'active', label: 'Active', defaultValue: true });\n * ```\n */\nexport function toggleField(config: ToggleFieldConfig): FormlyFieldConfig {\n const { key, defaultValue, materialFormField } = config;\n\n const classGetter = 'dbx-mat-form-toggle-field-wrapper';\n return formlyField({\n key,\n type: 'toggle',\n wrappers: [AUTO_TOUCH_WRAPPER_KEY, STYLE_WRAPPER_KEY, 'form-field'], // NOTE: Must specify form-field if other wrapper specified, otherwise it will not be used.\n defaultValue: defaultValue ?? false,\n ...propsAndConfigForFieldConfig(config, {\n classGetter,\n ...materialFormField\n })\n });\n}\n\n/**\n * Configuration for a Material checkbox field.\n */\nexport interface CheckboxFieldConfig extends LabeledFieldConfig, DefaultValueFieldConfig<boolean>, DescriptionFieldConfig, MaterialFormFieldConfig {}\n\n/**\n * Creates a Formly field configuration for a Material checkbox.\n *\n * Defaults to `false` when no default value is specified. Uses a style wrapper.\n *\n * @param config - Checkbox field configuration\n * @returns A validated {@link FormlyFieldConfig} with type `'checkbox'`\n *\n * @example\n * ```typescript\n * const field = checkboxField({ key: 'agree', label: 'I agree to the terms' });\n * ```\n */\nexport function checkboxField(config: CheckboxFieldConfig): FormlyFieldConfig {\n const { key, defaultValue, materialFormField } = config;\n\n const classGetter = 'dbx-mat-form-checkbox-field-wrapper';\n return formlyField({\n key,\n type: 'checkbox',\n wrappers: [STYLE_WRAPPER_KEY, 'form-field'],\n defaultValue: defaultValue ?? false,\n ...propsAndConfigForFieldConfig(config, {\n classGetter,\n ...materialFormField\n })\n });\n}\n\n/*\nexport function acceptTermsField({ key = 'accept', label = 'Accept Terms', description = 'In order to proceed, please accept terms', required = true }\n : Partial<FieldConfigWithDescription>): FormlyFieldConfig {\n return {\n key,\n type: 'checkbox',\n props: {\n label,\n description,\n pattern: 'true',\n required\n },\n validation: {\n messages: {\n pattern: 'Please accept the terms',\n },\n },\n } as FormlyFieldConfig;\n}\n*/\n","import { type Getter, type GetterOrValue, type LogicalDate, type Maybe, type ReadableTimeString, asGetter, getValueFromGetter } from '@dereekb/util';\n\n/**\n * A pair of either a logical date or a time string.\n */\nexport interface DateTimePresetValue {\n /**\n * Logical date to provide.\n */\n logicalDate?: Maybe<LogicalDate>;\n /**\n * Time string value. Ignored if logical date is provided.\n */\n timeString?: Maybe<ReadableTimeString>;\n}\n\n/**\n * Configuration for a DateTimePreset\n */\nexport interface DateTimePresetConfiguration {\n /**\n * Label\n */\n label: GetterOrValue<string>;\n /**\n * Whether or not the value should be retrieved each time or can be cached.\n *\n * Only relevant if a getter is used.\n */\n dynamic?: boolean;\n /**\n * Logical time to provide.\n */\n logicalDate?: Maybe<GetterOrValue<LogicalDate>>;\n /**\n * Time string to return. Ignored if logicalDate is provided.\n */\n timeString?: Maybe<GetterOrValue<ReadableTimeString>>;\n}\n\n/**\n * A label and value getter.\n */\nexport interface DateTimePreset {\n /**\n * Getter for the label\n */\n label: Getter<string>;\n /**\n * Getter for the value\n */\n value: Getter<DateTimePresetValue>;\n}\n\n/**\n * Creates a DateTimePreset from a DateTimePresetConfiguration\n *\n * @param config\n */\nexport function dateTimePreset(config: DateTimePresetConfiguration): DateTimePreset {\n let value: Getter<DateTimePresetValue>;\n\n if (config.logicalDate) {\n value = () => ({ logicalDate: getValueFromGetter(config.logicalDate) });\n } else if (config.timeString) {\n value = () => ({ timeString: getValueFromGetter(config.timeString) });\n } else {\n value = () => ({ logicalDate: 'now' });\n }\n\n if (!config.dynamic) {\n value = asGetter(value()); // get/calculate the value now and return it if not dynamic\n }\n\n return {\n label: asGetter(config.label),\n value\n };\n}\n","import { BehaviorSubject } from 'rxjs';\nimport { type DateTimePresetConfiguration } from './datetime';\nimport { Injectable, InjectionToken, inject } from '@angular/core';\nimport { type Maybe } from '@dereekb/util';\n\n/**\n * Injection token for providing default date-time field menu presets application-wide.\n */\nexport const DBX_DATE_TIME_FIELD_MENU_PRESETS_TOKEN = new InjectionToken('DbxDateTimeFieldMenuPresetsServicePresets');\n\n/**\n * Service that manages default date-time preset configurations for all date-time fields.\n *\n * Presets are shown in the date-time field dropdown menu and allow users to quickly\n * select common date/time values (e.g., \"Now\", \"Start of day\").\n *\n * Provide default presets via {@link DBX_DATE_TIME_FIELD_MENU_PRESETS_TOKEN}, or set them\n * dynamically via the `configurations` setter.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class DbxDateTimeFieldMenuPresetsService {\n private readonly _configurations = new BehaviorSubject<DateTimePresetConfiguration[]>(inject<Maybe<DateTimePresetConfiguration[]>>(DBX_DATE_TIME_FIELD_MENU_PRESETS_TOKEN, { optional: true }) ?? []);\n\n readonly configurations$ = this._configurations.asObservable();\n\n get configurations(): DateTimePresetConfiguration[] {\n return this._configurations.value;\n }\n\n set configurations(configurations: DateTimePresetConfiguration[]) {\n this._configurations.next(configurations);\n }\n}\n","import { type DateTimezoneUtcNormalInstance, parseISO8601DayStringToDate, toJsDate, formatToISO8601DayStringForSystem, formatToISO8601DateString, isSameDateHoursAndMinutes, type DateRangeWithDateOrStringValue, parseJsDateString } from '@dereekb/date';\nimport { type ISO8601DayString, type Maybe, dateFromMinuteOfDay, dateToMinuteOfDay } from '@dereekb/util';\n\nexport enum DbxDateTimeValueMode {\n /**\n * Value is returned/parsed as a Date.\n */\n DATE = 0,\n /**\n * Value is returned/parsed as an ISO8601DateString\n */\n DATE_STRING = 1,\n /**\n * Value is returned/parsed as an ISO8601DayString, relative to the current timezone.\n */\n DAY_STRING = 2,\n /**\n * Value is returned/parsed as a Unix timestamp, relative to the current timezone.\n */\n UNIX_TIMESTAMP = 3,\n /**\n * Value is returned/parsed as a minute of the day, relative to the current timezone.\n */\n MINUTE_OF_DAY = 4,\n /**\n * Value is returned/parsed as a minute of the day, relative to the system timezone.\n */\n SYSTEM_MINUTE_OF_DAY = 5\n}\n\n/**\n * Creates a parser function that converts raw form input values (Date, string, or number)\n * into JavaScript Date objects based on the specified value mode.\n *\n * Handles timezone conversion when a timezone instance is provided and the mode requires it.\n *\n * @param mode - Determines how the input value is interpreted\n * @param timezoneInstance - Optional timezone converter for UTC-normal date handling\n * @returns A function that parses input values to Date objects\n *\n * @example\n * ```typescript\n * const parser = dbxDateTimeInputValueParseFactory(DbxDateTimeValueMode.DATE_STRING, timezoneInstance);\n * const date = parser('2024-01-15T10:00:00Z');\n * ```\n */\nexport function dbxDateTimeInputValueParseFactory(mode: DbxDateTimeValueMode, timezoneInstance: Maybe<DateTimezoneUtcNormalInstance>): (date: Maybe<Date | string | number>) => Maybe<Date> {\n let factory: (date: Maybe<Date | string | number>) => Maybe<Date>;\n let useTimezoneInstance = true;\n\n switch (mode) {\n case DbxDateTimeValueMode.DAY_STRING:\n factory = (x) => {\n let result: Maybe<Date>;\n\n switch (typeof x) {\n case 'string':\n result = parseISO8601DayStringToDate(x);\n break;\n case 'number':\n result = new Date(x);\n break;\n default:\n result = x;\n break;\n }\n\n return result;\n };\n useTimezoneInstance = false; // day strings do not use timezones\n break;\n case DbxDateTimeValueMode.SYSTEM_MINUTE_OF_DAY:\n case DbxDateTimeValueMode.MINUTE_OF_DAY:\n factory = (x) => {\n let result: Maybe<Date>;\n\n switch (typeof x) {\n case 'number':\n result = dateFromMinuteOfDay(x);\n break;\n case 'string':\n result = parseJsDateString(x);\n break;\n default:\n result = x;\n break;\n }\n\n return result;\n };\n\n if (mode === DbxDateTimeValueMode.SYSTEM_MINUTE_OF_DAY) {\n useTimezoneInstance = false;\n }\n\n break;\n case DbxDateTimeValueMode.UNIX_TIMESTAMP:\n case DbxDateTimeValueMode.DATE_STRING:\n case DbxDateTimeValueMode.DATE:\n default:\n factory = (x) => (x != null ? toJsDate(x as Date | string | number) : x);\n break;\n }\n\n if (timezoneInstance && useTimezoneInstance) {\n const originalFactory = factory;\n\n factory = (input) => {\n const date = originalFactory(input);\n const result = date ? timezoneInstance.systemDateToTargetDate(date) : date;\n return result;\n };\n }\n\n return factory;\n}\n\n/**\n * Creates a formatter function that converts JavaScript Date objects into the appropriate\n * output format (Date, ISO string, timestamp, or minute-of-day) based on the specified value mode.\n *\n * Handles timezone conversion when a timezone instance is provided and the mode requires it.\n *\n * @param mode - Determines the output format\n * @param timezoneInstance - Optional timezone converter for UTC-normal date handling\n * @returns A function that formats Date objects to the target output type\n *\n * @example\n * ```typescript\n * const formatter = dbxDateTimeOutputValueFactory(DbxDateTimeValueMode.DAY_STRING, null);\n * const dayString = formatter(new Date()); // e.g., '2024-01-15'\n * ```\n */\nexport function dbxDateTimeOutputValueFactory(mode: DbxDateTimeValueMode, timezoneInstance: Maybe<DateTimezoneUtcNormalInstance>): (date: Maybe<Date>) => Maybe<Date | string | number> {\n let factory: (date: Maybe<Date>) => Maybe<Date | string | number>;\n let useTimezoneInstance = true;\n\n switch (mode) {\n case DbxDateTimeValueMode.DAY_STRING:\n factory = (x) => (x != null ? formatToISO8601DayStringForSystem(x) : x);\n useTimezoneInstance = false; // day strings do not use timezones\n break;\n case DbxDateTimeValueMode.DATE_STRING:\n factory = (x) => (x != null ? formatToISO8601DateString(x) : x);\n break;\n case DbxDateTimeValueMode.UNIX_TIMESTAMP:\n factory = (x) => (x != null ? x.getTime() : x);\n break;\n case DbxDateTimeValueMode.SYSTEM_MINUTE_OF_DAY:\n case DbxDateTimeValueMode.MINUTE_OF_DAY:\n factory = (x) => (x != null ? dateToMinuteOfDay(x) : x);\n\n if (mode === DbxDateTimeValueMode.SYSTEM_MINUTE_OF_DAY) {\n useTimezoneInstance = false;\n }\n break;\n case DbxDateTimeValueMode.DATE:\n default:\n factory = (x) => x;\n break;\n }\n\n if (timezoneInstance && useTimezoneInstance) {\n const originalFactory = factory;\n\n factory = (input) => {\n const date = input ? timezoneInstance.targetDateToSystemDate(input) : input;\n const result = originalFactory(date);\n return result;\n };\n }\n\n return factory;\n}\n\n/**\n * Compares two date-time field values for equality, handling Date, ISO8601DayString, and number (timestamp/minute) types.\n *\n * For string and number types, performs strict equality. For Date objects, compares hours and minutes.\n *\n * @param a - First date-time value\n * @param b - Second date-time value\n * @returns Whether the two values represent the same date-time\n */\nexport function dbxDateTimeIsSameDateTimeFieldValue(a: Maybe<Date | ISO8601DayString | number>, b: Maybe<Date | ISO8601DayString | number>) {\n const typeofA = typeof a;\n return a && b ? (typeofA === 'string' || typeofA === 'number' ? a === b : isSameDateHoursAndMinutes(a as Date, b as Date)) : a == b;\n}\n\n/**\n * Compares two date range field values for equality by comparing both start and end values.\n *\n * @param a - First date range value\n * @param b - Second date range value\n * @returns Whether the two date ranges represent the same range\n */\nexport function dbxDateRangeIsSameDateRangeFieldValue(a: Maybe<DateRangeWithDateOrStringValue>, b: Maybe<DateRangeWithDateOrStringValue>) {\n return a && b ? dbxDateTimeIsSameDateTimeFieldValue(a.start, b.start) && dbxDateTimeIsSameDateTimeFieldValue(a.end, b.end) : a == b;\n}\n","import { type Maybe, type ReadableTimeString, type ArrayOrValue, type ISO8601DateString, asArray, filterMaybeArrayValues, type DecisionFunction, type Milliseconds, type TimezoneString, type LogicalDate, type DateOrDayString, isISO8601DayStringStart, type MapFunction, mapIdentityFunction, type MinuteOfDay, type UnixDateTimeMillisecondsNumber, type ISO8601DayString } from '@dereekb/util';\nimport { dateFromLogicalDate, type DateTimeMinuteConfig, DateTimeMinuteInstance, guessCurrentTimezone, readableTimeStringToDate, toLocalReadableTimeString, utcDayForDate, safeToJsDate, findMinDate, findMaxDate, isSameDateHoursAndMinutes, getTimezoneAbbreviation, isSameDateDay, dateTimezoneUtcNormal, type DateTimezoneUtcNormalInstance, toJsDayDate, isSameDate, dateTimeMinuteWholeDayDecisionFunction, dateTimeMinuteDecisionFunction } from '@dereekb/date';\nimport { switchMap, shareReplay, map, startWith, tap, first, distinctUntilChanged, debounceTime, throttleTime, BehaviorSubject, type Observable, combineLatest, Subject, merge, interval, of, combineLatestWith, filter, skip } from 'rxjs';\nimport { ChangeDetectionStrategy, Component, type OnDestroy, type OnInit, inject } from '@angular/core';\nimport { type AbstractControl, FormControl, Validators, type FormGroup, type ValidationErrors, ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport { FieldType } from '@ngx-formly/material';\nimport { type FieldTypeConfig, type FormlyFieldProps } from '@ngx-formly/core';\nimport { type MatDatepickerInputEvent, MatDatepickerModule } from '@angular/material/datepicker';\nimport { addMinutes, startOfDay, addDays } from 'date-fns';\nimport { asObservableFromGetter, filterMaybe, type ObservableOrValueGetter, SubscriptionObject, switchMapMaybeDefault, switchMapFilterMaybe, skipAllInitialMaybe } from '@dereekb/rxjs';\nimport { type DateTimePreset, type DateTimePresetConfiguration, dateTimePreset } from './datetime';\nimport { DbxDateTimeFieldMenuPresetsService } from './datetime.field.service';\nimport { DbxDateTimeValueMode, dbxDateTimeInputValueParseFactory, dbxDateTimeIsSameDateTimeFieldValue, dbxDateTimeOutputValueFactory } from './date.value';\nimport { type FormControlPath, streamValueFromControl } from '../../../../form/form.angular.util';\nimport { toggleDisableFormControl } from '../../../../form/form';\nimport { type ErrorStateMatcher } from '@angular/material/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\nimport { DatePipe, NgTemplateOutlet } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatError, MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { DateDistancePipe, GetValuePipe, TimeDistancePipe } from '@dereekb/dbx-core';\nimport { MatDividerModule } from '@angular/material/divider';\n\nexport enum DbxDateTimeFieldTimeMode {\n /**\n * Time is required.\n */\n REQUIRED = 'required',\n /**\n * Time is optional.\n */\n OPTIONAL = 'optional',\n /**\n * Time is permenantly off.\n */\n NONE = 'none'\n}\n\n/**\n * Picker configuration for the date-time field, derived from {@link DateTimeMinuteConfig} without the `date` property.\n */\nexport type DbxDateTimePickerConfiguration = Omit<DateTimeMinuteConfig, 'date'>;\n\n/**\n * Direction of synchronization between date-time fields.\n */\nexport type DbxDateTimeFieldSyncType = 'before' | 'after';\n\n/**\n * Configuration for synchronizing this date-time field with another field in the same form.\n */\nexport interface DbxDateTimeFieldSyncField {\n /**\n * Field key/path to sync with/against.\n */\n readonly syncWith: string;\n /**\n * How to sync against the other field.\n */\n readonly syncType: DbxDateTimeFieldSyncType;\n}\n\n/**\n * Configuration for the time date field that has a reference and optional map function to map the value.\n */\nexport interface DbxDateTimeFieldTimeDateConfig<I = unknown> {\n readonly path: FormControlPath;\n readonly mapValue?: MapFunction<I, Maybe<DateOrDayString>>;\n}\n\n/**\n * Type guard that checks whether the input is a {@link DbxDateTimeFieldTimeDateConfig}.\n */\nexport function isDbxDateTimeFieldTimeDateConfig(input: unknown): input is DbxDateTimeFieldTimeDateConfig {\n return input != null && typeof input === 'object' && typeof (input as DbxDateTimeFieldTimeDateConfig).path === 'string';\n}\n\nexport interface DbxDateTimeFieldProps extends FormlyFieldProps {\n /**\n * Custom date label.\n *\n * Defaults to Date\n */\n readonly dateLabel?: string;\n\n /**\n * Custom time label.\n *\n * Defaults to Time\n */\n readonly timeLabel?: string;\n\n /**\n * Label to use for the date hint for \"All Day\". Defaults to \"All Day\".\n */\n readonly allDayLabel?: string;\n\n /**\n * Label to use for the date hint for \"At\". Defaults to \"At\".\n */\n readonly atTimeLabel?: string;\n\n /**\n * Value mode.\n *\n * Defaults to DATE\n */\n readonly valueMode?: DbxDateTimeValueMode;\n\n /**\n * Whether or not the date is hidden, and automatically uses today/input date.\n */\n readonly timeOnly?: boolean;\n\n /**\n * Only applicable when timeOnly is false.\n *\n * Whether or not to always show the date input even when there is only a single date that can be selected.\n *\n * Defaults to true.\n */\n readonly alwaysShowDateInput?: boolean;\n\n /**\n * Whether or not to autofill the date when time is picked.\n *\n * Defaults to false.\n */\n readonly autofillDateWhenTimeIsPicked?: boolean;\n\n /**\n * Whether or not the time can be added/removed optionally.\n *\n * This is ignored if timeOnly is specified.\n */\n readonly timeMode?: DbxDateTimeFieldTimeMode;\n\n /**\n * Other form control for enabling/disabling whether or not it is a full day.\n *\n * This field is only used if time is optional.\n *\n * When time is off, the field is set to true.\n */\n readonly fullDayFieldName?: string;\n\n /**\n * Whether or not to pass the date value as a UTC date, or a date in the current timezone.\n */\n readonly fullDayInUTC?: boolean;\n\n /**\n * Whether or not ot hide the date hint info content.\n *\n * False by default\n */\n readonly hideDateHint?: boolean;\n\n /**\n * Whether or not to hide the date/calendar picker.\n */\n readonly hideDatePicker?: boolean;\n\n /**\n * Custom picker configuration\n */\n readonly pickerConfig?: ObservableOrValueGetter<DbxDateTimePickerConfiguration>;\n\n /**\n * Used for syncing with one or more fields with a Date value.\n */\n readonly getSyncFieldsObs?: () => Observable<ArrayOrValue<DbxDateTimeFieldSyncField>>;\n\n /**\n * (Optional) The input timezone to default to.\n *\n * Ignored if fullDayInUTC is true.\n */\n readonly timezone?: Maybe<ObservableOrValueGetter<Maybe<TimezoneString>>>;\n\n /**\n * (Optional) The date to apply the time to.\n *\n * The timezone abbrviation will also use this date when using the time-only mode.\n */\n readonly timeDate?: Maybe<ObservableOrValueGetter<Maybe<DbxDateTimeFieldTimeDateConfig | FormControlPath | DateOrDayString>>>;\n\n /**\n * Whether or not to display the timezone. True by default.\n */\n readonly showTimezone?: Maybe<boolean>;\n\n /**\n * Custom presets to show in the dropdown.\n */\n readonly presets?: ObservableOrValueGetter<DateTimePresetConfiguration[]>;\n\n /**\n * The time in ms to prevent output from going out when the input value changes.\n */\n readonly inputOutputDebounceTime?: Milliseconds;\n\n /**\n * Whether or not to display the clear date button. True by default.\n */\n readonly showClearButton?: Maybe<boolean>;\n\n /**\n * The number of minutes to add/subtract when using the arrow keys.\n */\n readonly minuteStep?: Maybe<number>;\n}\n\n/**\n * A parsed sync field configuration with a resolved form control reference.\n */\nexport interface DbxDateTimeFieldSyncParsedField extends Pick<DbxDateTimeFieldSyncField, 'syncType'> {\n readonly control: AbstractControl<Maybe<Date | ISO8601DateString>>;\n}\n\n/**\n * Creates an observable that emits the current Date value from a synced field control\n * matching the specified sync type ('before' or 'after').\n *\n * @param parseConfigsObs - Observable of parsed sync field configurations\n * @param type - The sync direction to filter for\n * @returns Observable of the synced date value, or null if no matching sync config\n */\nexport function syncConfigValueObs(parseConfigsObs: Observable<DbxDateTimeFieldSyncParsedField[]>, type: DbxDateTimeFieldSyncType): Observable<Date | null> {\n return parseConfigsObs.pipe(\n switchMap((x) => {\n const config = x.find((y) => y.syncType === type);\n let result: Observable<Date | null>;\n\n if (config) {\n const { control } = config;\n result = control.valueChanges.pipe(\n startWith(control.value),\n map((x) => safeToJsDate(x) ?? null)\n );\n } else {\n result = of(null);\n }\n\n return result;\n }),\n distinctUntilChanged(),\n shareReplay(1)\n );\n}\n\nconst TIME_OUTPUT_THROTTLE_TIME: Milliseconds = 10;\n\n/**\n * Error code used when the selected date is not in the schedule.\n */\nexport const DBX_DATE_TIME_FIELD_DATE_NOT_IN_SCHEDULE_ERROR = 'dateTimeFieldDateNotInSchedule';\n\n/**\n * Error code used when the selected time/time input is not in the limited range.\n */\nexport const DBX_DATE_TIME_FIELD_TIME_NOT_IN_RANGE_ERROR = 'dateTimeFieldTimeNotInRange';\n\n/**\n * Formly custom field type for date and time selection.\n *\n * Supports date-only, time-only, and combined date-time modes. Handles timezone conversion,\n * sync with other date fields, configurable presets, and keyboard navigation (arrow keys for\n * incrementing date/time).\n *\n * Registered as Formly type `'datetime'`.\n */\n@Component({\n templateUrl: 'datetime.field.component.html',\n imports: [FlexLayoutModule, NgTemplateOutlet, MatButtonModule, MatError, MatFormFieldModule, MatDatepickerModule, MatInputModule, FormsModule, ReactiveFormsModule, MatIconModule, MatMenuModule, MatFormFieldModule, GetValuePipe, DatePipe, DateDistancePipe, TimeDistancePipe, MatDividerModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxDateTimeFieldComponent extends FieldType<FieldTypeConfig<DbxDateTimeFieldProps>> implements OnInit, OnDestroy {\n private readonly dbxDateTimeFieldConfigService = inject(DbxDateTimeFieldMenuPresetsService);\n\n private readonly _sub = new SubscriptionObject();\n private readonly _valueSub = new SubscriptionObject();\n private readonly _autoFillDateSync = new SubscriptionObject();\n\n private readonly _config = new BehaviorSubject<Maybe<Observable<DbxDateTimePickerConfiguration>>>(undefined);\n readonly latestConfig$ = this._config.pipe(switchMapMaybeDefault(), distinctUntilChanged(), shareReplay(1));\n\n private readonly _syncConfigObs = new BehaviorSubject<Maybe<Observable<ArrayOrValue<DbxDateTimeFieldSyncField>>>>(undefined);\n\n private readonly _defaultTimezone = new BehaviorSubject<Maybe<Observable<Maybe<TimezoneString>>>>(undefined);\n private readonly _timeDate = new BehaviorSubject<Maybe<Observable<Maybe<DbxDateTimeFieldTimeDateConfig | FormControlPath | DateOrDayString>>>>(undefined);\n private readonly _presets = new BehaviorSubject<Observable<DateTimePresetConfiguration[]>>(of([]));\n\n /**\n * Alternative/backup full day control if not defined in the Formly form.\n */\n private readonly _fullDayInputCtrl = new FormControl(false);\n private readonly _fullDayControlObs = new BehaviorSubject<Maybe<AbstractControl<boolean>>>(undefined);\n readonly fullDayControl$ = this._fullDayControlObs.pipe(filterMaybe());\n\n private readonly _offset = new BehaviorSubject<number>(0);\n private readonly _formControlObs = new BehaviorSubject<Maybe<AbstractControl<Maybe<Date>>>>(undefined);\n readonly formControl$ = this._formControlObs.pipe(filterMaybe());\n\n private readonly _cleared = new Subject<void>();\n private readonly _updateTime = new Subject<void>();\n\n private readonly _resyncTimeInputSub = new SubscriptionObject();\n private readonly _resyncTimeInput = new Subject<void>();\n\n readonly timeErrorStateMatcher: ErrorStateMatcher = {\n isErrorState: (control: AbstractControl | null, form) => {\n if (control) {\n return (control.invalid && (control.dirty || control.touched)) || this.errorStateMatcher.isErrorState(this.formControl, form);\n } else {\n return false;\n }\n }\n };\n\n readonly resyncTimeInput$ = this._resyncTimeInput.pipe(debounceTime(200), shareReplay(1));\n\n private readonly _configUpdateTimeSync = new SubscriptionObject(\n this.latestConfig$.pipe(skip(1)).subscribe((x) => {\n this._updateTime.next();\n })\n );\n\n readonly timezone$: Observable<Maybe<TimezoneString>> = this._defaultTimezone.pipe(switchMapMaybeDefault(), distinctUntilChanged()).pipe(\n map((defaultTimezone) => {\n return defaultTimezone ?? guessCurrentTimezone();\n }),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly timezoneInstance$: Observable<Maybe<DateTimezoneUtcNormalInstance>> = this.timezone$.pipe(\n map((timezone) => (timezone ? dateTimezoneUtcNormal({ timezone }) : undefined)),\n shareReplay(1)\n );\n\n readonly timeDate$: Observable<Maybe<Date>> = this._timeDate.pipe(\n switchMapMaybeDefault(),\n switchMap((x) => {\n let obs: Observable<Maybe<Date>>;\n\n if (x) {\n // if the string is not a date string, then treat it as a path\n if ((typeof x === 'string' && !isISO8601DayStringStart(x)) || isDbxDateTimeFieldTimeDateConfig(x)) {\n const { path, mapValue }: DbxDateTimeFieldTimeDateConfig = typeof x === 'string' ? { path: x } : x;\n obs =\n streamValueFromControl<DateOrDayString>(this.form, path)?.pipe(\n map(mapValue ?? mapIdentityFunction()),\n map((x) => (x ? toJsDayDate(x) : undefined))\n ) ?? of(undefined);\n } else {\n obs = of(toJsDayDate(x));\n }\n } else {\n obs = of(undefined);\n }\n\n return obs;\n }),\n distinctUntilChanged(isSameDateDay),\n shareReplay(1)\n );\n\n readonly valueInSystemTimezone$: Observable<Maybe<Date>> = this.formControl$.pipe(\n map((control) => control.valueChanges.pipe(startWith<Maybe<Date | ISO8601DayString | MinuteOfDay | UnixDateTimeMillisecondsNumber>>(control.value), shareReplay(1))),\n combineLatestWith(this.timezoneInstance$),\n switchMap(([x, timezoneInstance]) => {\n return x.pipe(map(dbxDateTimeInputValueParseFactory(this.valueMode, timezoneInstance)));\n }),\n throttleTime(20, undefined, { leading: true, trailing: true }), // throttle incoming values and timezone changes\n distinctUntilChanged(isSameDateHoursAndMinutes),\n shareReplay(1)\n );\n\n readonly refreshInteral$ = interval(10 * 1000);\n\n /**\n * Used to trigger/display visual updates (specifically on timeDistance, etc.).\n */\n readonly displayValue$ = this.refreshInteral$.pipe(\n // every 10 seconds, refresh w/interval\n startWith(0),\n map(() => new Date().getMinutes()),\n distinctUntilChanged(),\n switchMap(() => this.valueInSystemTimezone$),\n shareReplay(1)\n );\n\n readonly timeString$: Observable<ReadableTimeString | ''> = this.valueInSystemTimezone$.pipe(\n map((x) => (x ? toLocalReadableTimeString(x) : '')),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly dateInputCtrl = new FormControl<Maybe<Date>>(null, {\n validators: []\n });\n\n readonly timeInputCtrl = new FormControl<Maybe<ReadableTimeString>>(null, {\n validators: [Validators.pattern(/^(now)$|^([0-9]|(0[0-9])|(1[0-9])|(2[0-3]))(:)?([0-5][0-9])?(\\s)?([apAP][Mm])?(\\\\s)*$/)]\n });\n\n get dateLabel(): string {\n return this.props.dateLabel ?? 'Date';\n }\n\n get timeLabel(): string {\n return this.props.timeLabel ?? 'Time';\n }\n\n get allDayLabel(): string {\n return this.props.allDayLabel ?? 'All Day';\n }\n\n get atTimeLabel(): string {\n return this.props.atTimeLabel ?? 'At';\n }\n\n get dateOnly(): boolean {\n return this.timeMode === DbxDateTimeFieldTimeMode.NONE;\n }\n\n get dateTimeField(): DbxDateTimeFieldProps {\n return this.field.props;\n }\n\n get timeOnly(): Maybe<boolean> {\n const timeValuesOnly = this.valueMode === DbxDateTimeValueMode.MINUTE_OF_DAY;\n\n if (timeValuesOnly) {\n return true;\n } else {\n return this.dateTimeField.timeOnly;\n }\n }\n\n get alwaysShowDateInput(): boolean {\n return this.props.alwaysShowDateInput ?? true;\n }\n\n get autofillDateWhenTimeIsPicked(): boolean {\n return this.props.autofillDateWhenTimeIsPicked ?? this.alwaysShowDateInput === false;\n }\n\n get showDateInput(): boolean {\n return !this.timeOnly;\n }\n\n get valueMode(): DbxDateTimeValueMode {\n return this.field.props.valueMode ?? DbxDateTimeValueMode.DATE;\n }\n\n get timeMode(): DbxDateTimeFieldTimeMode {\n const dateValuesOnly = this.valueMode === DbxDateTimeValueMode.DAY_STRING;\n\n if (dateValuesOnly) {\n return DbxDateTimeFieldTimeMode.NONE;\n } else {\n return this.timeOnly ? DbxDateTimeFieldTimeMode.REQUIRED : (this.dateTimeField.timeMode ?? DbxDateTimeFieldTimeMode.REQUIRED);\n }\n }\n\n get isDateRequired(): boolean {\n return this.props.required ?? false;\n }\n\n get isTimeRequired(): boolean {\n return this.isDateRequired && this.timeMode === DbxDateTimeFieldTimeMode.REQUIRED;\n }\n\n get description(): Maybe<string> {\n return this.field.props.description;\n }\n\n get hideDateHint(): boolean {\n return this.field.props.hideDateHint ?? false;\n }\n\n get hideDatePicker(): boolean {\n return this.field.props.hideDatePicker ?? false;\n }\n\n get timezone() {\n return this.field.props.timezone;\n }\n\n get timeDate() {\n return this.field.props.timeDate;\n }\n\n get showTimezone() {\n return this.field.props.showTimezone ?? true;\n }\n\n get presets() {\n return this.field.props.presets;\n }\n\n get showClearButton() {\n return this.field.props.showClearButton;\n }\n\n get minuteStep() {\n return this.field.props.minuteStep ?? this.field.props.step ?? 5;\n }\n\n readonly fullDay$: Observable<boolean> = this.fullDayControl$.pipe(\n switchMap((control) => control.valueChanges.pipe(startWith(control.value))),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly showTimeInput$: Observable<boolean> = this.fullDay$.pipe(map((x) => !x && this.timeMode !== DbxDateTimeFieldTimeMode.NONE));\n\n readonly showAddTime$ = this.showTimeInput$.pipe(\n map((x) => !x && this.timeMode === DbxDateTimeFieldTimeMode.OPTIONAL),\n shareReplay(1)\n );\n\n readonly currentDate$ = this.dateInputCtrl.valueChanges.pipe(startWith(this.dateInputCtrl.value), shareReplay(1));\n readonly date$ = this.currentDate$.pipe(filterMaybe(), shareReplay(1));\n\n readonly timezoneAbbreviation$ = combineLatest([this.currentDate$, this.timezone$, this.timeDate$]).pipe(\n map(([date, timezone, timeDate]) => getTimezoneAbbreviation(timezone, timeDate ?? date ?? new Date())),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly dateValue$: Observable<Maybe<Date>> = merge(this.date$, this.valueInSystemTimezone$.pipe(skipAllInitialMaybe())).pipe(\n map((x: Maybe<Date>) => (x ? startOfDay(x) : null)),\n distinctUntilChanged<Maybe<Date>>(isSameDateDay),\n shareReplay(1)\n );\n\n readonly timeInput$: Observable<ReadableTimeString> = this._updateTime.pipe(\n debounceTime(5),\n map(() => this.timeInputCtrl.value || ''),\n distinctUntilChanged()\n );\n\n readonly syncConfigObs$ = this._syncConfigObs.pipe(switchMapMaybeDefault(), shareReplay(1));\n\n readonly parsedSyncConfigs$: Observable<DbxDateTimeFieldSyncParsedField[]> = this.syncConfigObs$.pipe(\n map((x) => {\n let parsed: DbxDateTimeFieldSyncParsedField[];\n\n if (x) {\n parsed = filterMaybeArrayValues(\n asArray(x).map((y) => {\n const control = this.form.get(y.syncWith);\n\n if (control) {\n return {\n control,\n ...y\n };\n } else {\n return undefined;\n }\n })\n );\n } else {\n parsed = [];\n }\n\n return parsed;\n }),\n shareReplay(1)\n );\n\n readonly syncConfigBeforeValue$: Observable<Date | null> = syncConfigValueObs(this.parsedSyncConfigs$, 'before');\n readonly syncConfigAfterValue$: Observable<Date | null> = syncConfigValueObs(this.parsedSyncConfigs$, 'after');\n\n readonly isTimeCleared$ = combineLatest([this.currentDate$, this._timeDate.pipe(startWith(null))]).pipe(\n switchMap(([date, time]) => {\n const isTimeCleared = Boolean(!date && !time);\n return this._cleared.pipe(\n map(() => true),\n startWith(isTimeCleared)\n );\n }),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n protected readonly _rawDateTimeDateValue$: Observable<Maybe<Date>> = this._config.pipe(\n first(),\n switchMap(() => (this.timeOnly ? of(null) : this.dateValue$))\n );\n protected readonly _rawDateTimeTimeValue$: Observable<Maybe<ReadableTimeString>> = this.timeInput$.pipe(startWith(null));\n\n readonly rawDateTime$: Observable<Maybe<Date>> = combineLatest([this._rawDateTimeDateValue$, this._rawDateTimeTimeValue$, this.fullDay$, this.timeDate$, this.isTimeCleared$]).pipe(\n map(([date, timeString, fullDay, timeDate, isTimeCleared]) => {\n let result: Maybe<Date>;\n\n if (!isTimeCleared) {\n if (!date || this.timeOnly) {\n date = timeDate ?? new Date(); // use the time date, or default to the current day\n }\n\n if (date) {\n if (fullDay) {\n if (this.dateTimeField.fullDayInUTC) {\n result = utcDayForDate(date);\n } else {\n result = startOfDay(date);\n }\n } else if (timeString) {\n result =\n readableTimeStringToDate(timeString, {\n date,\n useSystemTimezone: true\n }) ?? date;\n } else if (!this.timeOnly) {\n if (this.timeMode !== DbxDateTimeFieldTimeMode.REQUIRED) {\n // only autofill the date if the time is marked as required (and the time string is empty)\n result = date;\n }\n }\n }\n }\n\n return result;\n }),\n distinctUntilChanged(isSameDateHoursAndMinutes),\n shareReplay(1)\n );\n\n readonly dateTimePickerConfig$: Observable<Maybe<DbxDateTimePickerConfiguration>> = combineLatest([this._config.pipe(switchMapFilterMaybe()), this.syncConfigBeforeValue$, this.syncConfigAfterValue$]).pipe(\n map(([x, dateInputMin, dateInputMax]) => {\n let result: Maybe<DbxDateTimePickerConfiguration> = x;\n\n if (dateInputMin != null || dateInputMax != null) {\n const { min: limitMin, max: limitMax } = x?.limits ?? {};\n const min = findMinDate([dateInputMin, dateFromLogicalDate(limitMin)]);\n const max = findMaxDate([dateInputMax, dateFromLogicalDate(limitMax)]);\n\n result = {\n ...x,\n limits: {\n ...x?.limits,\n min,\n max\n }\n };\n }\n\n return result;\n }),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly dateInputMin$: Observable<Date | null> = this.dateTimePickerConfig$.pipe(\n map((x) => (x?.limits?.min ?? null) as Date | null),\n distinctUntilChanged<Date | null>(isSameDate),\n shareReplay(1)\n );\n\n readonly dateInputMax$: Observable<Date | null> = this.dateTimePickerConfig$.pipe(\n map((x) => (x?.limits?.max ?? null) as Date | null),\n distinctUntilChanged<Date | null>(isSameDate),\n shareReplay(1)\n );\n\n /**\n * Whether or not there is a limited min/max date range applied/available.\n */\n readonly hasRestrictedDateRange$: Observable<boolean> = combineLatest([this.dateInputMin$, this.dateInputMax$]).pipe(\n map(([a, b]) => Boolean(a || b)),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly dateMinAndMaxIsSameDay$: Observable<boolean> = combineLatest([this.dateInputMin$, this.dateInputMax$]).pipe(\n map(([a, b]) => Boolean(a && b) && isSameDateDay(a, b)),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly pickerFilter$: Observable<DecisionFunction<Date | null>> = this.dateTimePickerConfig$.pipe(\n distinctUntilChanged(),\n map((x) => {\n if (x) {\n const filter = dateTimeMinuteWholeDayDecisionFunction(x, false);\n return (x: Date | null) => (x != null ? filter(x) : true);\n } else {\n return () => true;\n }\n }),\n shareReplay(1)\n );\n\n readonly defaultPickerFilter: DecisionFunction<Date | null> = () => true;\n\n readonly timeOutput$: Observable<Maybe<Date>> = combineLatest([this.rawDateTime$, this._offset, this.dateTimePickerConfig$]).pipe(\n throttleTime(TIME_OUTPUT_THROTTLE_TIME, undefined, { leading: false, trailing: true }),\n distinctUntilChanged((current, next) => current[0] === next[0] && next[1] === 0 && current[2] === next[2]),\n tap(([, stepsOffset]) => (stepsOffset ? this._offset.next(0) : 0)),\n map(([date, stepsOffset, config]) => {\n if (date != null) {\n const instance = new DateTimeMinuteInstance({\n date,\n ...config,\n roundDownToMinute: true\n });\n\n // only clamp when the steps offset is set\n if (stepsOffset) {\n date = instance.clamp(date);\n\n const minutes = stepsOffset * this.minuteStep;\n\n if (minutes != 0) {\n date = addMinutes(date, minutes);\n date = instance.clamp(date); // clamp the date again\n }\n }\n }\n\n return date;\n }),\n distinctUntilChanged(isSameDateHoursAndMinutes),\n shareReplay(1)\n );\n\n readonly dateTimePickerInstance$ = this.dateTimePickerConfig$.pipe(\n map((config) => {\n return new DateTimeMinuteInstance({\n ...config,\n roundDownToMinute: true\n });\n }),\n shareReplay(1)\n );\n\n readonly hasEmptyDisplayValue$ = this.displayValue$.pipe(\n map((x) => !x),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly allPresets$: Observable<DateTimePreset[]> = this._presets.pipe(\n switchMapFilterMaybe(),\n map((x: DateTimePresetConfiguration[]) => x.map(dateTimePreset)),\n shareReplay(1)\n );\n\n readonly _presetsPickerFilter$ = this.dateTimePickerConfig$.pipe(\n map((config) => {\n if (config) {\n const filter = dateTimeMinuteDecisionFunction(config); // filter that the date must be in the given range\n return (x: Date | null) => (x != null ? filter(x) : true);\n } else {\n return () => true;\n }\n })\n );\n\n readonly presets$: Observable<DateTimePreset[]> = combineLatest([this.allPresets$, this.fullDay$]).pipe(\n switchMap(([x, fullDay]) => {\n let result: Observable<DateTimePreset[]>;\n\n if (this.timeOnly) {\n result = of(x); // do not filter based on the date\n } else if (fullDay) {\n result = of([]);\n } else {\n result = combineLatest([this._rawDateTimeDateValue$.pipe(throttleTime(1000, undefined, { leading: true, trailing: true })), this._presetsPickerFilter$]).pipe(\n map(([selectedDate, isAllowedDate]) => {\n const allowedPresets: DateTimePreset[] = [];\n\n if (selectedDate) {\n // iterate each preset and check if it is allowed\n x.forEach((preset) => {\n const value = preset.value();\n let presetDate: Maybe<Date>;\n\n if (value.logicalDate) {\n presetDate = dateFromLogicalDate(value.logicalDate);\n } else if (value.timeString) {\n presetDate = readableTimeStringToDate(value.timeString, {\n date: selectedDate,\n useSystemTimezone: true\n });\n }\n\n // the computed date should be within the allowed range\n if (presetDate && isAllowedDate(presetDate)) {\n allowedPresets.push(preset);\n }\n });\n }\n\n return allowedPresets;\n })\n );\n }\n\n return result;\n }),\n shareReplay(1)\n );\n\n readonly showClearButton$: Observable<boolean> = this.hasEmptyDisplayValue$.pipe(\n map((x) => Boolean(this.showClearButton && !x)),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly canAutofillDateWithOnlyAvailableDate$: Observable<boolean> = this.dateMinAndMaxIsSameDay$;\n\n readonly showDateInput$: Observable<boolean> = this.dateMinAndMaxIsSameDay$.pipe(\n map((dateMinAndMaxIsSameDay) => {\n return this.showDateInput && (this.alwaysShowDateInput || !dateMinAndMaxIsSameDay);\n }),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly currentErrorMessage$ = this.formControl$.pipe(\n switchMap((formControl) =>\n formControl.statusChanges.pipe(\n filter((x) => x === 'INVALID' || x === 'VALID'),\n map((x) => {\n let currentErrorMessage: string | undefined;\n\n if (x === 'INVALID') {\n if (this.formControl.hasError('required')) {\n currentErrorMessage = 'Date is required';\n } else if (this.formControl.hasError(DBX_DATE_TIME_FIELD_DATE_NOT_IN_SCHEDULE_ERROR)) {\n currentErrorMessage = 'Date does not fall on an available dates in schedule.';\n } else if (this.formControl.hasError(DBX_DATE_TIME_FIELD_TIME_NOT_IN_RANGE_ERROR)) {\n currentErrorMessage = 'Time is not valid for the given date.';\n } else {\n currentErrorMessage = 'The given date and time is invalid.';\n }\n }\n\n return currentErrorMessage;\n })\n )\n ),\n startWith(undefined),\n shareReplay(1)\n );\n\n readonly hasError$ = this.currentErrorMessage$.pipe(\n map((x) => Boolean(x)),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly dateValueSignal = toSignal(this.dateValue$);\n readonly displayValueSignal = toSignal(this.displayValue$);\n readonly pickerFilterSignal = toSignal(this.pickerFilter$, { initialValue: this.defaultPickerFilter });\n readonly dateInputMinSignal = toSignal(this.dateInputMin$, { initialValue: null });\n readonly dateInputMaxSignal = toSignal(this.dateInputMax$, { initialValue: null });\n readonly showDateInputSignal = toSignal(this.showDateInput$);\n readonly showTimeInputSignal = toSignal(this.showTimeInput$);\n readonly showAddTimeSignal = toSignal(this.showAddTime$);\n readonly fullDaySignal = toSignal(this.fullDay$);\n readonly timezoneAbbreviationSignal = toSignal(this.timezoneAbbreviation$);\n readonly hasEmptyDisplayValueSignal = toSignal(this.hasEmptyDisplayValue$);\n readonly currentErrorMessageSignal = toSignal(this.currentErrorMessage$);\n readonly showClearButtonSignal = toSignal(this.showClearButton$);\n readonly presetsSignal = toSignal(this.presets$);\n readonly hasErrorSignal = toSignal(this.hasError$);\n\n ngOnInit(): void {\n this._formControlObs.next(this.formControl);\n\n const inputPickerConfig = this.dateTimeField.pickerConfig;\n this._config.next(inputPickerConfig ? asObservableFromGetter(inputPickerConfig) : of({}));\n this._syncConfigObs.next(this.dateTimeField.getSyncFieldsObs?.());\n\n this._sub.subscription = this.valueInSystemTimezone$\n .pipe(\n combineLatestWith(this.timezoneInstance$.pipe(map((timezoneInstance) => dbxDateTimeOutputValueFactory(this.valueMode, timezoneInstance)))),\n throttleTime(TIME_OUTPUT_THROTTLE_TIME, undefined, { leading: false, trailing: true }),\n switchMap(([currentValue, valueFactory]) => {\n return this.timeOutput$.pipe(\n throttleTime(TIME_OUTPUT_THROTTLE_TIME * 2, undefined, { leading: false, trailing: true }),\n skipAllInitialMaybe(),\n distinctUntilChanged(isSameDateHoursAndMinutes),\n map((x) => valueFactory(x)),\n filter((x) => !dbxDateTimeIsSameDateTimeFieldValue(x, currentValue))\n );\n })\n )\n .subscribe((value) => {\n this.formControl.setValue(value);\n this.formControl.markAsDirty();\n this.formControl.markAsTouched();\n });\n\n let hasSetMidnightFromInput = false;\n\n /*\n this._valueSub.subscription = this.timeString$.subscribe((x) => {\n this.setTime(x);\n });\n */\n\n if (this.autofillDateWhenTimeIsPicked) {\n this._autoFillDateSync.subscription = this.canAutofillDateWithOnlyAvailableDate$\n .pipe(\n switchMap((canAutofill) => {\n if (canAutofill) {\n // when the time updates the first time, set the current min date\n return this._updateTime.pipe(\n debounceTime(200),\n switchMap((x) => this.dateInputMin$),\n filterMaybe()\n );\n } else {\n return of(null); // don't show anything\n }\n })\n )\n .subscribe((autoDate) => {\n if (autoDate != null) {\n this.dateInputCtrl.setValue(autoDate);\n }\n });\n }\n\n this._valueSub.subscription = this.valueInSystemTimezone$\n .pipe(\n map((x) => (x ? isSameDate(x, startOfDay(x)) : false)),\n distinctUntilChanged(),\n switchMap((isInputValueAtMidnight) => {\n hasSetMidnightFromInput = false;\n return this.timeString$.pipe(\n // skip(1),\n map((timeString) => [timeString, isInputValueAtMidnight] as [string, boolean])\n );\n })\n )\n .subscribe(([x, isInputValueAtMidnight]) => {\n // Skip events where the timeInput value is cleared, unless the input value is at midnight and we've already processed it being at midnight\n if (!this.timeInputCtrl.value && x === '12:00AM' && (!isInputValueAtMidnight || (isInputValueAtMidnight && hasSetMidnightFromInput))) {\n return;\n }\n\n // update the has set flag\n if (x === '12:00AM' && isInputValueAtMidnight) {\n hasSetMidnightFromInput = true;\n }\n\n this.setTime(x);\n });\n\n // Set default timezone if provided.\n if (this.timezone && !this.dateTimeField.fullDayInUTC) {\n this._defaultTimezone.next(asObservableFromGetter(this.timezone));\n }\n\n this._timeDate.next(asObservableFromGetter(this.timeDate));\n\n // Watch for disabled changes so we can propogate them properly.\n this.formControl.registerOnDisabledChange((isDisabled) => {\n toggleDisableFormControl(this.dateInputCtrl, isDisabled);\n toggleDisableFormControl(this.timeInputCtrl, isDisabled);\n });\n\n const isFullDayField = this.dateTimeField.fullDayFieldName;\n let fullDayFieldCtrl: Maybe<AbstractControl>;\n\n if (isFullDayField) {\n fullDayFieldCtrl = this.form.get(isFullDayField);\n }\n\n if (!fullDayFieldCtrl) {\n const isFullDay = this.timeMode === DbxDateTimeFieldTimeMode.NONE;\n this._fullDayInputCtrl.setValue(isFullDay);\n\n // Set the control in the form too if the name is defined.\n if (isFullDayField) {\n (this.form as FormGroup).addControl(isFullDayField, this._fullDayInputCtrl);\n }\n\n fullDayFieldCtrl = this._fullDayInputCtrl;\n }\n\n this._fullDayControlObs.next(fullDayFieldCtrl);\n\n switch (this.timeMode) {\n case DbxDateTimeFieldTimeMode.OPTIONAL:\n break;\n case DbxDateTimeFieldTimeMode.NONE:\n this.removeTime();\n break;\n case DbxDateTimeFieldTimeMode.REQUIRED:\n this.addTime();\n break;\n }\n\n if (this.presets != null) {\n this._presets.next(asObservableFromGetter(this.presets));\n } else {\n this._presets.next(this.dbxDateTimeFieldConfigService.configurations$);\n }\n\n this._resyncTimeInputSub.subscription = this.resyncTimeInput$.pipe(switchMap((x) => combineLatest([this.currentDate$, this.timeString$]).pipe(first()))).subscribe(([currentDate, timeString]) => {\n // only resync when the current date is set, otherwise do not change the time string.\n // This helps in cases where the user picks a time first and we don't want it to be cleared.\n if (currentDate != null) {\n this.timeInputCtrl.setValue(timeString, { emitEvent: false });\n }\n });\n\n // add validators/errors for the form\n this.formControl.addAsyncValidators([\n (x) => {\n const formValue = x.value as Maybe<Date>;\n let obs: Observable<ValidationErrors>;\n\n if (formValue != null) {\n obs = combineLatest([this.timezoneInstance$, this.dateTimePickerInstance$]).pipe(\n map(([timezoneInstance, x]) => {\n // the form value is going to be in the output form, so we need to parse it back to the \"input\" date before evaluating it\n const formValueInSystemTimezone = dbxDateTimeInputValueParseFactory(this.valueMode, timezoneInstance)(formValue);\n\n let errors: ValidationErrors = {\n ...this.timeInputCtrl.errors\n };\n\n if (formValueInSystemTimezone) {\n if (x.dateIsInSchedule(formValueInSystemTimezone)) {\n if (!x.isInValidRange(formValueInSystemTimezone)) {\n errors = {\n [DBX_DATE_TIME_FIELD_TIME_NOT_IN_RANGE_ERROR]: true\n };\n }\n } else {\n errors = {\n [DBX_DATE_TIME_FIELD_DATE_NOT_IN_SCHEDULE_ERROR]: true\n };\n }\n }\n\n return errors;\n }),\n first()\n );\n } else {\n obs = of({});\n }\n\n return obs;\n }\n ]);\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._sub.destroy();\n this._valueSub.destroy();\n this._config.complete();\n this._configUpdateTimeSync.destroy();\n this._defaultTimezone.complete();\n this._resyncTimeInputSub.destroy();\n this._autoFillDateSync.destroy();\n this._timeDate.complete();\n this._presets.complete();\n this._fullDayControlObs.complete();\n this._offset.complete();\n this._formControlObs.complete();\n this._updateTime.complete();\n this._cleared.complete();\n this._resyncTimeInput.complete();\n this._syncConfigObs.complete();\n }\n\n selectPreset(preset: DateTimePreset): void {\n const value = preset.value();\n\n if (value.logicalDate) {\n this.setLogicalTime(value.logicalDate);\n } else if (value.timeString) {\n this.setTime(value.timeString);\n }\n }\n\n datePicked(event: MatDatepickerInputEvent<Date>): void {\n const date = event.value;\n\n if (date) {\n this.setDateInputValue(date);\n }\n }\n\n setLogicalTime(time: LogicalDate): void {\n const date = dateFromLogicalDate(time);\n\n if (date) {\n this.setTimeFromDate(date);\n }\n }\n\n setDateInputValue(date: Date) {\n this.dateInputCtrl.setValue(date);\n this._updateTime.next();\n }\n\n setTimeFromDate(timeDate: Date): void {\n const timeString = toLocalReadableTimeString(timeDate);\n this.setTime(timeString);\n }\n\n setTime(time: ReadableTimeString): void {\n if (this.timeInputCtrl.value !== time) {\n this.timeInputCtrl.setValue(time);\n this._offset.next(0);\n this._updateTime.next();\n }\n }\n\n keydownOnDateInput(event: KeyboardEvent): void {\n let direction = 0;\n\n switch (event.key?.toLowerCase()) {\n case 'arrowup':\n direction = 1;\n break;\n case 'arrowdown':\n direction = -1;\n break;\n }\n\n let offset = 1;\n\n if (event.ctrlKey && event.shiftKey) {\n offset = 365;\n } else if (event.ctrlKey) {\n offset = 30;\n } else if (event.shiftKey) {\n offset = 7;\n }\n\n if (direction !== 0) {\n combineLatest([this.date$, this.dateTimePickerConfig$])\n .pipe(first())\n .subscribe(([date, config]) => {\n const newDate = startOfDay(addDays(date, offset * direction));\n const instance = new DateTimeMinuteInstance({\n date: newDate,\n ...config\n });\n\n const nextDate = instance.isInSchedule(newDate) ? newDate : instance.findNextAvailableDayInSchedule(newDate, direction === 1 ? 'future' : 'past');\n\n if (nextDate != null) {\n this.setDateInputValue(instance.clampToLimit(nextDate));\n }\n });\n }\n }\n\n keydownOnTimeInput(event: KeyboardEvent): void {\n let direction = 0;\n\n switch (event.key?.toLowerCase()) {\n case 'arrowup':\n direction = 1;\n break;\n case 'arrowdown':\n direction = -1;\n break;\n }\n\n let offset = 1;\n\n if (event.altKey && event.shiftKey) {\n offset = 300;\n } else if (event.altKey) {\n offset = 60;\n } else if (event.shiftKey) {\n offset = 5;\n }\n\n if (direction !== 0) {\n this._offset.next(this._offset.value + offset * direction);\n this._updateTime.next();\n }\n }\n\n focusTime(): void {\n // do nothing\n }\n\n focusOutTime(): void {\n // only refresh when there is not a pattern error\n if (!this.timeInputCtrl.hasError('pattern')) {\n this._updateTime.next();\n this._resyncTimeInput.next();\n }\n }\n\n addTime(): void {\n this.setFullDay(false);\n }\n\n removeTime(): void {\n this.setFullDay(true);\n }\n\n setFullDay(fullDay: boolean): void {\n this.fullDayControl$.pipe(first()).subscribe((x) => {\n x.setValue(fullDay);\n });\n }\n\n clearValue(): void {\n this._cleared.next();\n }\n}\n","<div class=\"dbx-datetime-field\" fxLayout=\"row wrap\" fxLayout.xs=\"column wrap\" fxLayoutGap=\"6px grid\" fxLayoutAlign=\"space-evenly stretch\">\n <!-- Date -->\n @if (showDateInputSignal()) {\n <div class=\"dbx-datetime-row\" fxFlex.lt-sm=\"100\" [fxFlex]=\"dateOnly ? '100' : '50'\">\n <ng-container [ngTemplateOutlet]=\"dateInputTemplate\"></ng-container>\n </div>\n }\n <!-- Time -->\n @if (showTimeInputSignal() || showAddTimeSignal()) {\n <!-- Only show flex if there is content to be displayed. -->\n <div class=\"dbx-datetime-row\" fxFlex.lt-sm=\"100\" [fxFlex]=\"showDateInputSignal() ? '50' : '100'\">\n @if (showTimeInputSignal()) {\n <ng-container [ngTemplateOutlet]=\"timeMenuAndInputTemplate\"></ng-container>\n }\n @if (showAddTimeSignal()) {\n <div class=\"add-time-button-wrapper\">\n <button mat-button class=\"mat-datepicker-button-highlight dbx-button-spacer add-time-button\" ngClass.lt-sm=\"add-time-button-full\" (click)=\"addTime()\">\n <mat-icon>timer</mat-icon>\n Add Time\n </button>\n </div>\n }\n </div>\n }\n <!-- Date Hint -->\n @switch (hasErrorSignal()) {\n @case (false) {\n @if (!hideDateHint) {\n <div class=\"dbx-datetime-row dbx-datetime-hint-row\" fxFlex=\"100\">\n <div class=\"dbx-hint\">\n @switch (hasEmptyDisplayValueSignal()) {\n @case (true) {\n <span class=\"dbx-small\">No date/time set</span>\n }\n @case (false) {\n @switch (fullDaySignal()) {\n @case (true) {\n <small>\n <b class=\"dbx-ok\">{{ allDayLabel }}</b>\n {{ displayValueSignal() | date: 'fullDate' }} {{ timezoneAbbreviationSignal() }} ({{ displayValueSignal() | dateDistance }})\n </small>\n }\n @case (false) {\n <small>\n @if (displayValueSignal()) {\n <b class=\"dbx-ok\">{{ atTimeLabel }}</b>\n {{ displayValueSignal() | date: 'medium' }} {{ timezoneAbbreviationSignal() }} ({{ displayValueSignal() | timeDistance }})\n }\n </small>\n }\n }\n }\n }\n </div>\n </div>\n }\n }\n @case (true) {\n @if (currentErrorMessageSignal()) {\n <mat-error>{{ currentErrorMessageSignal() }}</mat-error>\n }\n }\n }\n</div>\n\n<!-- Date Input Template -->\n<ng-template #dateInputTemplate>\n <mat-form-field class=\"dbx-datetime-row-field\">\n <mat-label>{{ dateLabel }}</mat-label>\n <input #dateInput matInput [disabled]=\"disabled\" [required]=\"isDateRequired\" [min]=\"dateInputMinSignal()\" [max]=\"dateInputMaxSignal()\" [matDatepicker]=\"picker\" [matDatepickerFilter]=\"pickerFilterSignal()\" (dateChange)=\"datePicked($event)\" [value]=\"dateValueSignal()\" (keydown)=\"keydownOnDateInput($event)\" />\n <mat-datepicker #picker></mat-datepicker>\n @if (!hideDatePicker) {\n <button matPrefix class=\"dbx-datetime-row-button\" mat-icon-button (click)=\"picker.open()\" [disabled]=\"disabled\">\n <mat-icon>calendar_today</mat-icon>\n </button>\n }\n @if (showClearButtonSignal()) {\n <button matSuffix class=\"dbx-datetime-clear-button\" mat-icon-button aria-label=\"clears the date and time menu\" [disabled]=\"disabled\" (click)=\"clearValue()\">\n <mat-icon>clear</mat-icon>\n </button>\n }\n @if (!showTimeInputSignal()) {\n <span matTextSuffix>\n <ng-container [ngTemplateOutlet]=\"timezoneSuffixTemplate\"></ng-container>\n </span>\n }\n </mat-form-field>\n</ng-template>\n\n<!-- Time Menu/Input Template -->\n<ng-template #timeMenuAndInputTemplate>\n <mat-menu #timemenu=\"matMenu\">\n @if (timeMode === 'optional') {\n <button mat-menu-item (click)=\"removeTime()\">\n <span>Remove Time</span>\n </button>\n <mat-divider></mat-divider>\n }\n @for (preset of presetsSignal(); track preset) {\n <button mat-menu-item (click)=\"selectPreset(preset)\">{{ preset.label | getValue }}</button>\n }\n </mat-menu>\n <mat-form-field class=\"dbx-datetime-row-field\">\n <mat-label>{{ timeLabel }}</mat-label>\n <input #timeInput [errorStateMatcher]=\"timeErrorStateMatcher\" matInput [required]=\"isTimeRequired\" [formControl]=\"timeInputCtrl\" (focus)=\"focusTime()\" (focusout)=\"focusOutTime()\" (keydown)=\"keydownOnTimeInput($event)\" />\n <button matPrefix class=\"dbx-datetime-row-button\" mat-icon-button [matMenuTriggerFor]=\"timemenu\" aria-label=\"opens the time menu\" [disabled]=\"disabled\">\n <mat-icon>timer</mat-icon>\n </button>\n <span matTextSuffix>\n <ng-container [ngTemplateOutlet]=\"timezoneSuffixTemplate\"></ng-container>\n </span>\n @if (timeInputCtrl.hasError('pattern')) {\n <mat-error>The input time is not recognizable.</mat-error>\n }\n </mat-form-field>\n</ng-template>\n\n<!-- Timezone Suffix -->\n<ng-template #timezoneSuffixTemplate>\n @if (showTimezone) {\n <span class=\"dbx-datetime-timezone dbx-faint\">{{ timezoneAbbreviationSignal() }}</span>\n }\n</ng-template>\n","import { type Maybe, type DecisionFunction, type Milliseconds, type TimezoneString, type DateMonth, type DayOfMonth, type YearNumber, isMonthDaySlashDate, MS_IN_MINUTE } from '@dereekb/util';\nimport { guessCurrentTimezone, type DateTimezoneUtcNormalInstance, dateTimezoneUtcNormal, type DateRangeInput, type DateRange, isSameDateDayRange, type DateRangeWithDateOrStringValue, type DateTimeMinuteConfig, dateRange, isDateInDateRange, clampDateRangeToDateRange, isSameDateRange, isSameDateDay, limitDateTimeInstance, dateTimeMinuteWholeDayDecisionFunction } from '@dereekb/date';\nimport { switchMap, shareReplay, map, startWith, distinctUntilChanged, debounceTime, throttleTime, BehaviorSubject, type Observable, Subject, of, combineLatestWith, filter, combineLatest, scan, first, timer } from 'rxjs';\nimport { ChangeDetectionStrategy, Component, ElementRef, Injectable, type OnDestroy, type OnInit, forwardRef, inject, signal, viewChild } from '@angular/core';\nimport { type AbstractControl, FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { FieldType } from '@ngx-formly/material';\nimport { type FieldTypeConfig, type FormlyFieldProps } from '@ngx-formly/core';\nimport { type MatDateRangeSelectionStrategy, MAT_DATE_RANGE_SELECTION_STRATEGY, DateRange as DatePickerDateRange, MatCalendar, MatDatepickerModule } from '@angular/material/datepicker';\nimport { asObservableFromGetter, filterMaybe, type ObservableOrValueGetter, skipAllInitialMaybe, SubscriptionObject, switchMapMaybeDefault } from '@dereekb/rxjs';\nimport { DbxDateTimeValueMode, dbxDateRangeIsSameDateRangeFieldValue, dbxDateTimeInputValueParseFactory, dbxDateTimeOutputValueFactory } from './date.value';\nimport { type DateTimePresetConfiguration } from './datetime';\nimport { DbxDateTimeFieldMenuPresetsService } from './datetime.field.service';\nimport { DateAdapter } from '@angular/material/core';\nimport { isBefore } from 'date-fns';\nimport { MatError, MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { NgClass } from '@angular/common';\n\n/**\n * Date range input configuration without the `date` property, which is set by user selection.\n */\nexport type DbxFixedDateRangeDateRangeInput = Omit<DateRangeInput, 'date'>;\n\n/**\n * Picker configuration for the fixed date range field.\n */\nexport type DbxFixedDateRangePickerConfiguration = Omit<DateTimeMinuteConfig, 'date'>;\n\n/**\n * Selection mode for the fixed date range picker.\n *\n * - `'single'` — Picks one date, range is computed from the date range input config.\n * - `'normal'` — Standard start/end range picking with two clicks.\n * - `'arbitrary'` — Free-form range selection within a boundary.\n * - `'arbitrary_quick'` — Like arbitrary, but immediately sets the value on first click.\n */\nexport type DbxFixedDateRangeSelectionMode = 'single' | 'normal' | 'arbitrary' | 'arbitrary_quick';\n\n/** Whether the user is currently picking the start or end of a range. */\nexport type DbxFixedDateRangePicking = 'start' | 'end';\n\nexport interface DbxFixedDateRangeFieldProps extends FormlyFieldProps {\n /**\n * Date range input to build the date range.\n */\n readonly dateRangeInput: ObservableOrValueGetter<DbxFixedDateRangeDateRangeInput>;\n\n /**\n * Selection mode to use when picking dates on the calendar.\n */\n readonly selectionMode?: Maybe<ObservableOrValueGetter<DbxFixedDateRangeSelectionMode>>;\n\n /**\n * Value mode for the dates in the output DateRange.\n *\n * Defaults to DATE\n */\n readonly valueMode?: DbxDateTimeValueMode;\n\n /**\n * Whether or not to pass the date value as a UTC date, or a date in the current timezone.\n */\n readonly fullDayInUTC?: boolean;\n\n /**\n * Custom picker configuration\n */\n readonly pickerConfig?: ObservableOrValueGetter<DbxFixedDateRangePickerConfiguration>;\n\n /**\n * (Optional) The input timezone to default to.\n *\n * Ignored if fullDayInUTC is true.\n */\n readonly timezone?: Maybe<ObservableOrValueGetter<Maybe<TimezoneString>>>;\n\n /**\n * Whether or not to display the timezone. True by default.\n */\n readonly showTimezone?: boolean;\n\n /**\n * Custom presets to show in the dropdown.\n */\n readonly presets?: ObservableOrValueGetter<DateTimePresetConfiguration[]>;\n\n /**\n * Whether or not to show the range input. Defaults to true.\n */\n readonly showRangeInput?: boolean;\n}\n\nfunction dbxFixedDateRangeInputValueFactory(mode: DbxDateTimeValueMode, timezoneInstance: Maybe<DateTimezoneUtcNormalInstance>): (input: Maybe<DateRangeWithDateOrStringValue>) => Maybe<DateRange> {\n const dateInputTransformer = dbxDateTimeInputValueParseFactory(mode, timezoneInstance);\n\n return (y) => {\n let result: Maybe<DateRange>;\n\n if (y) {\n result = {\n start: dateInputTransformer(y.start) as Date,\n end: dateInputTransformer(y.end) as Date\n };\n }\n\n return result;\n };\n}\n\nfunction dbxFixedDateRangeOutputValueFactory(mode: DbxDateTimeValueMode, timezoneInstance: Maybe<DateTimezoneUtcNormalInstance>): (date: Maybe<DateRange>) => Maybe<DateRangeWithDateOrStringValue> {\n const dateOutputTransformer = dbxDateTimeOutputValueFactory(mode, timezoneInstance);\n\n return (y) => {\n let result: Maybe<DateRange>;\n\n if (y) {\n result = {\n start: dateOutputTransformer(y.start) as Date,\n end: dateOutputTransformer(y.end) as Date\n };\n }\n\n return result;\n };\n}\n\nconst TIME_OUTPUT_THROTTLE_TIME: Milliseconds = 10;\n\n/** Type of the most recent date range pick action. */\nexport type FixedDateRangeScanType = 'start' | 'end' | 'startRepeat';\n\n/**\n * Internal scan state used to track the progressive date range selection process.\n */\nexport interface FixedDateRangeScan {\n /**\n * Picked the start or end of the range on the last pick.\n */\n readonly lastPickType?: Maybe<FixedDateRangeScanType>;\n /**\n * The latest date passed, if applicable.\n */\n readonly lastDateRange?: Maybe<Partial<DateRange>>;\n /**\n * The generated boundary range.\n */\n readonly boundary?: DateRange;\n /**\n * New Date Range\n */\n readonly range?: DateRange;\n}\n\ntype SelectedDateEventType = 'calendar' | 'input';\n\ninterface SelectedDateEvent {\n readonly type: SelectedDateEventType;\n readonly range?: Maybe<Partial<DateRange>>;\n}\n\n/**\n * Formly custom field type for selecting a fixed date range using an inline calendar.\n *\n * Supports multiple selection modes (single date, normal range, arbitrary range),\n * timezone conversion, date range input configuration, and optional text inputs for\n * start/end dates.\n *\n * Registered as Formly type `'fixeddaterange'`.\n */\n@Component({\n templateUrl: 'fixeddaterange.field.component.html',\n providers: [\n {\n provide: MAT_DATE_RANGE_SELECTION_STRATEGY,\n useClass: forwardRef(() => DbxFixedDateRangeFieldSelectionStrategy)\n }\n ],\n imports: [MatDatepickerModule, MatFormFieldModule, FormsModule, ReactiveFormsModule, MatInputModule, MatError, NgClass],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFixedDateRangeFieldComponent extends FieldType<FieldTypeConfig<DbxFixedDateRangeFieldProps>> implements OnInit, OnDestroy {\n private readonly dbxDateTimeFieldMenuPresetsService = inject(DbxDateTimeFieldMenuPresetsService);\n\n readonly calendar = viewChild.required<MatCalendar<Date>>(MatCalendar);\n readonly startDateInputElement = viewChild<string, ElementRef>('startDateInput', { read: ElementRef });\n readonly endDateInputElement = viewChild<string, ElementRef>('endDateInput', { read: ElementRef });\n\n readonly currentDateRangeInputSignal = signal<Maybe<DbxFixedDateRangeDateRangeInput>>(undefined);\n readonly currentSelectionModeSignal = signal<DbxFixedDateRangeSelectionMode>('single');\n\n private readonly _sub = new SubscriptionObject();\n\n private readonly _inputRangeFormSub = new SubscriptionObject();\n private readonly _inputRangeFormValueSub = new SubscriptionObject();\n\n private readonly _dateRangeInputSub = new SubscriptionObject();\n private readonly _currentSelectionModeSub = new SubscriptionObject();\n private readonly _latestBoundarySub = new SubscriptionObject();\n private readonly _disableEndSub = new SubscriptionObject();\n private readonly _activeDateSub = new SubscriptionObject();\n\n private readonly _config = new BehaviorSubject<Maybe<Observable<DbxFixedDateRangePickerConfiguration>>>(undefined);\n private readonly _selectionMode = new BehaviorSubject<Maybe<Observable<DbxFixedDateRangeSelectionMode>>>(undefined);\n private readonly _dateRangeInput = new BehaviorSubject<Maybe<Observable<DbxFixedDateRangeDateRangeInput>>>(undefined);\n\n private readonly _timezone = new BehaviorSubject<Maybe<Observable<Maybe<TimezoneString>>>>(undefined);\n private readonly _presets = new BehaviorSubject<Observable<DateTimePresetConfiguration[]>>(of([]));\n\n private readonly _selectionEvent = new Subject<SelectedDateEvent>();\n readonly selectedDateRange$: Observable<Maybe<Partial<DateRange>>> = this._selectionEvent.pipe(map((x) => x.range));\n\n private readonly _formControlObs = new BehaviorSubject<Maybe<AbstractControl<Maybe<DateRange>>>>(undefined);\n readonly formControl$ = this._formControlObs.pipe(filterMaybe());\n\n readonly config$: Observable<DbxFixedDateRangePickerConfiguration> = this._config.pipe(\n filterMaybe(),\n switchMap((x) => x),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly limitDateTimeInstance$ = this.config$.pipe(map(limitDateTimeInstance), shareReplay(1));\n\n readonly selectionMode$: Observable<DbxFixedDateRangeSelectionMode> = this._selectionMode.pipe(\n switchMapMaybeDefault<DbxFixedDateRangeSelectionMode>('single'),\n map((x) => x ?? 'single'),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly dateRangeInput$ = this._dateRangeInput.pipe(switchMapMaybeDefault(), shareReplay(1));\n\n readonly timezone$: Observable<Maybe<TimezoneString>> = this._timezone.pipe(switchMapMaybeDefault(), distinctUntilChanged()).pipe(\n map((defaultTimezone) => {\n return defaultTimezone ?? guessCurrentTimezone();\n }),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly timezoneInstance$: Observable<Maybe<DateTimezoneUtcNormalInstance>> = this.timezone$.pipe(\n map((timezone) => (timezone ? dateTimezoneUtcNormal({ timezone }) : undefined)),\n shareReplay(1)\n );\n\n readonly valueInSystemTimezone$: Observable<Maybe<DateRange>> = this.formControl$.pipe(\n map((control) => control.valueChanges.pipe(startWith<Maybe<DateRangeWithDateOrStringValue>>(control.value), shareReplay(1))),\n combineLatestWith(this.timezoneInstance$),\n switchMap(([x, timezoneInstance]) => {\n return x.pipe(map(dbxFixedDateRangeInputValueFactory(this.valueMode, timezoneInstance)));\n }),\n throttleTime(20, undefined, { leading: false, trailing: true }), // throttle incoming values and timezone changes\n distinctUntilChanged<Maybe<DateRange>>(isSameDateDayRange),\n shareReplay(1)\n );\n\n dateRangeSelectionForMode(mode: DbxFixedDateRangeSelectionMode) {\n const result: Observable<Maybe<DateRange>> = combineLatest([this.dateRangeInput$, this.limitDateTimeInstance$]).pipe(\n switchMap(([dateRangeInput, limitInstance]) => {\n const hasDateRangeConfiguration = Boolean(dateRangeInput);\n const minMaxClamp = (dateRange: DateRange) => limitInstance.clampDateRange(dateRange);\n\n if (mode === 'single') {\n // only use the start date.\n return this.selectedDateRange$.pipe(\n distinctUntilChanged(isSameDateDayRange),\n map((inputDateRange) => {\n const date = inputDateRange?.start;\n return date ? (minMaxClamp(dateRange({ ...dateRangeInput, date } as DateRangeInput)) as DateRange) : null;\n })\n );\n } else {\n // take the first date, then wait unless the date is outside of the range.\n return this.selectedDateRange$.pipe(\n scan((acc: FixedDateRangeScan, nextDateRange: Maybe<Partial<DateRange>>) => {\n let result: FixedDateRangeScan;\n let pickType: Maybe<FixedDateRangeScanType> = 'start';\n\n if (nextDateRange && nextDateRange.start != null) {\n const { start: startOrNextDate, end } = nextDateRange;\n const potentialBoundary = dateRange({ ...dateRangeInput, date: startOrNextDate } as DateRangeInput);\n\n // only comes through when passed by the text inputs\n if (startOrNextDate && end) {\n const range = clampDateRangeToDateRange(nextDateRange, potentialBoundary) as DateRange;\n result = {\n lastDateRange: nextDateRange,\n boundary: range,\n range\n };\n\n // for normal mode we want to protect against \"start\" being input, then the output being passed,\n // and then the next click being treated as another \"start\" instead of an \"end\".\n if (mode === 'normal' && acc.lastPickType === 'start' && isSameDateDay(startOrNextDate, end)) {\n if (isSameDateDay(startOrNextDate, acc.lastDateRange?.start)) {\n pickType = 'startRepeat';\n }\n }\n } else {\n let range: Maybe<DateRange> = undefined;\n let boundary: Maybe<DateRange> = potentialBoundary;\n\n if (mode === 'normal') {\n if (!hasDateRangeConfiguration) {\n // if there is no configured range/boundary, then just set the pick type based on the last type\n boundary = undefined;\n pickType = acc.lastPickType === 'start' ? 'end' : 'start';\n } else if (acc.lastPickType === 'startRepeat') {\n pickType = 'end';\n } else {\n // if the pick is outside the boundary, then consider it a start pick type.\n pickType = acc.lastPickType === 'start' && acc.boundary && isDateInDateRange(startOrNextDate, acc.boundary) ? 'end' : 'start';\n }\n\n // react based on how this\n switch (pickType) {\n case 'end':\n const lastStart = acc.lastDateRange?.start as Date;\n\n let boundaryToCheck: DateRange;\n const selectionIsBeforePreviousSelection = !lastStart || isBefore(startOrNextDate, lastStart);\n\n let nextStart: Date;\n let nextEnd: Date;\n\n if (selectionIsBeforePreviousSelection) {\n nextStart = startOrNextDate;\n nextEnd = lastStart;\n boundaryToCheck = potentialBoundary;\n } else {\n nextStart = lastStart;\n nextEnd = startOrNextDate;\n boundaryToCheck = dateRange({ ...dateRangeInput, date: nextStart } as DateRangeInput);\n }\n\n // Recalculate the boundary using the next start date. If it is outside the selectable range, then it becomes a \"start\" pick type.\n if (isBefore(boundaryToCheck.end, nextEnd)) {\n // TODO: Allow changing the behavior to fill the entire range instead of just resetting it entirely\n\n nextStart = startOrNextDate;\n nextEnd = startOrNextDate;\n pickType = 'start';\n boundary = boundaryToCheck;\n } else {\n boundary = range;\n }\n\n // if we're picking the end then set the range.\n range = {\n start: nextStart,\n end: nextEnd\n };\n break;\n case 'start':\n // retain the boundary as potential boundary, and set our new range from the single date.\n range = {\n start: startOrNextDate as Date,\n end: startOrNextDate as Date\n };\n break;\n }\n } else if (acc.boundary && isDateInDateRange(startOrNextDate, acc.boundary)) {\n // if in the date range, uses the pick as the last date.\n range = {\n start: acc.boundary.start,\n end: startOrNextDate\n };\n\n if (mode === 'arbitrary_quick') {\n // modify boundary to match range\n if (isSameDateRange(acc.range, range) && isSameDateDay(range.end, startOrNextDate)) {\n // if we clicked on the end range, then expand the boundary again to the full range.\n range = dateRange({ ...dateRangeInput, date: range.start } as DateRangeInput);\n boundary = range;\n } else {\n boundary = range;\n }\n } else {\n // retain same boundary\n boundary = acc.boundary;\n }\n } else if (mode === 'arbitrary_quick') {\n range = potentialBoundary;\n }\n\n result = {\n lastDateRange: nextDateRange,\n boundary,\n range\n };\n }\n } else {\n result = {\n lastDateRange: nextDateRange\n };\n }\n\n if (result) {\n result = {\n lastPickType: pickType,\n lastDateRange: result.lastDateRange,\n boundary: result.boundary ? (minMaxClamp(result.boundary) as DateRange) : undefined,\n range: result.range ? (minMaxClamp(result.range) as DateRange) : undefined\n };\n }\n\n return result;\n }, {}),\n filter((x) => !x.lastDateRange || x.range != null), // pass through null/date clearings or ranges\n map((x) => x.range ?? null) // return the range\n );\n }\n })\n );\n\n return result;\n }\n\n readonly fullBoundary$: Observable<Maybe<DateRange>> = this.dateRangeSelectionForMode('single').pipe(shareReplay(1));\n readonly latestBoundary$: Observable<Maybe<DateRange>> = this.selectionMode$.pipe(\n switchMap((mode) => {\n if (mode === 'arbitrary_quick') {\n // in arbitrary_quick mode, the latest value is the boundary, since we always set the value immediately.\n return this.valueInSystemTimezone$;\n } else {\n return this.fullBoundary$;\n }\n })\n );\n\n /**\n * Focuses on the date any time the selection event from the picker occured, otherwise use the system value\n */\n readonly calendarFocusDate$: Observable<Date> = this._selectionEvent.pipe(startWith(null)).pipe(\n switchMap((selectionEvent) => {\n if (selectionEvent && selectionEvent.type === 'calendar' && selectionEvent.range?.start) {\n return of(selectionEvent.range.start);\n } else {\n return this.fullBoundary$.pipe(\n first(),\n map((fullBoundary) => {\n return fullBoundary?.start ?? selectionEvent?.range?.start;\n })\n );\n }\n }),\n filterMaybe(),\n shareReplay(1)\n );\n\n readonly dateRangeSelection$: Observable<Maybe<DateRange>> = this.selectionMode$.pipe(switchMap((mode) => this.dateRangeSelectionForMode(mode)));\n\n readonly calendarSelection$: Observable<DatePickerDateRange<Date> | null> = this.valueInSystemTimezone$.pipe(\n map((x) => (x ? new DatePickerDateRange<Date>(x.start, x.end) : null)),\n shareReplay(1)\n );\n\n readonly endDisabled$ = this.selectionMode$.pipe(\n map((x) => x === 'single'),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly inputRangeForm = new FormGroup({\n start: new FormControl<Maybe<Date>>(null),\n end: new FormControl<Maybe<Date>>(null)\n });\n\n get fixedDateRangeField(): DbxFixedDateRangeFieldProps {\n return this.field.props;\n }\n\n get selectionMode() {\n return this.field.props.selectionMode;\n }\n\n get valueMode(): DbxDateTimeValueMode {\n return this.field.props.valueMode ?? DbxDateTimeValueMode.DATE;\n }\n\n get description(): Maybe<string> {\n return this.field.props.description;\n }\n\n get timezone() {\n return this.field.props.timezone;\n }\n\n get showTimezone() {\n return this.field.props.showTimezone ?? true;\n }\n\n get presets() {\n return this.field.props.presets;\n }\n\n get showRangeInput() {\n return this.field.props.showRangeInput ?? true;\n }\n\n readonly minMaxRange$ = this.limitDateTimeInstance$.pipe(\n combineLatestWith(timer(MS_IN_MINUTE)), // refresh every minute\n map(([x]) => x.dateRange()),\n distinctUntilChanged(isSameDateDayRange),\n shareReplay(1)\n );\n\n readonly min$ = this.minMaxRange$.pipe(\n map((x) => x?.start ?? null),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly max$ = this.minMaxRange$.pipe(\n map((x) => x?.end ?? null),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly pickerFilter$: Observable<DecisionFunction<Date | null>> = this.config$.pipe(\n distinctUntilChanged(),\n map((x) => {\n if (x) {\n const filter = dateTimeMinuteWholeDayDecisionFunction(x, false);\n return (x: Date | null) => (x != null ? filter(x) : true);\n } else {\n return () => true;\n }\n }),\n shareReplay(1)\n );\n\n readonly defaultPickerFilter: DecisionFunction<Date | null> = () => true;\n\n readonly minDateSignal = toSignal(this.min$, { initialValue: null });\n readonly maxDateSignal = toSignal(this.max$, { initialValue: null });\n readonly endDisabledSignal = toSignal(this.endDisabled$);\n readonly latestBoundarySignal = toSignal(this.latestBoundary$);\n readonly calendarSelectionSignal = toSignal(this.calendarSelection$, { initialValue: null });\n readonly pickerFilterSignal = toSignal(this.pickerFilter$, { initialValue: this.defaultPickerFilter });\n\n ngOnInit(): void {\n this._formControlObs.next(this.formControl);\n\n const dateRangeSelection = this.dateRangeSelection$.pipe(shareReplay(1));\n\n const setInputFormValue = (value: Maybe<DateRange>) => {\n if (!isSameDateDayRange(value, this.inputRangeForm.value as Partial<DateRange>)) {\n this.inputRangeForm.setValue({\n start: value?.start ?? null,\n end: value?.end ?? null\n });\n }\n };\n\n this._sub.subscription = this.valueInSystemTimezone$\n .pipe(\n combineLatestWith(this.timezoneInstance$.pipe(map((timezoneInstance) => dbxFixedDateRangeOutputValueFactory(this.valueMode, timezoneInstance)))),\n throttleTime(TIME_OUTPUT_THROTTLE_TIME, undefined, { leading: false, trailing: true }),\n switchMap(([currentValue, valueFactory]) => {\n return dateRangeSelection.pipe(\n skipAllInitialMaybe(),\n distinctUntilChanged<Maybe<DateRange>>(isSameDateDayRange),\n map((x) => [x, currentValue, valueFactory] as [typeof x, typeof currentValue, typeof valueFactory])\n );\n })\n )\n .subscribe(([rawValue, currentValue, valueFactory]) => {\n const value = rawValue ? valueFactory(rawValue) : null;\n const isSameRange = dbxDateRangeIsSameDateRangeFieldValue(value, currentValue);\n\n if (!isSameRange) {\n this.formControl.setValue(value);\n this.formControl.markAsDirty();\n this.formControl.markAsTouched();\n } else if (rawValue != null) {\n // update the input text again\n setInputFormValue(rawValue);\n }\n });\n\n if (this.selectionMode) {\n this._selectionMode.next(asObservableFromGetter(this.selectionMode));\n }\n\n this._currentSelectionModeSub.subscription = this.selectionMode$.subscribe((x) => this.currentSelectionModeSignal.set(x));\n this._dateRangeInputSub.subscription = this.dateRangeInput$.subscribe((x) => this.currentDateRangeInputSignal.set(x));\n\n this._inputRangeFormSub.subscription = this.valueInSystemTimezone$.subscribe((x: Maybe<DateRange>) => {\n setInputFormValue(x);\n });\n\n if (this.showRangeInput) {\n this._inputRangeFormValueSub.subscription = this.valueInSystemTimezone$\n .pipe(\n throttleTime(100), // throttle to prevent the value from changing too fast\n switchMap(() => {\n return this.inputRangeForm.valueChanges.pipe(\n debounceTime(500),\n filter(() => {\n const startString = this.startDateInputElement()?.nativeElement?.value;\n let valid = isMonthDaySlashDate(startString);\n\n if (valid && this.currentSelectionModeSignal() !== 'single') {\n const endString = this.endDateInputElement()?.nativeElement?.value;\n valid = isMonthDaySlashDate(endString);\n }\n\n return valid; // must be a valid text input\n }),\n map((x) => x as Maybe<Partial<DateRange>>)\n );\n }),\n distinctUntilChanged(isSameDateRange)\n )\n .subscribe((x: Maybe<Partial<DateRange>>) => {\n const currentSelectionMode = this.currentSelectionModeSignal();\n\n if (currentSelectionMode === 'single') {\n this.setDateRange(x?.start ? { start: x.start } : null, 'input');\n } else {\n let rangeToSet: Maybe<Partial<DateRange>> = x;\n\n const latestBoundary = this.latestBoundarySignal();\n\n if (currentSelectionMode === 'arbitrary_quick' && latestBoundary && x?.start && x?.end) {\n if (!isDateInDateRange(x.start, latestBoundary)) {\n // if the end date it outside of the current range (i.e. a range was typed in only to the start date) then set the end to the boundary end\n const boundary = dateRange({ ...this.currentDateRangeInputSignal(), date: x.start } as DateRangeInput);\n rangeToSet = { start: x.start, end: boundary.end };\n }\n }\n\n this.setDateRange(rangeToSet, 'input');\n }\n });\n }\n\n this._dateRangeInput.next(asObservableFromGetter(this.fixedDateRangeField.dateRangeInput));\n\n this._disableEndSub.subscription = this.endDisabled$.subscribe((disabled) => {\n const end = this.inputRangeForm.get('end');\n\n if (end) {\n if (disabled) {\n end.disable();\n } else {\n end.enable();\n }\n }\n });\n\n const inputPickerConfig = this.fixedDateRangeField.pickerConfig;\n this._config.next(inputPickerConfig ? asObservableFromGetter(inputPickerConfig) : undefined);\n\n // Set default timezone if provided.\n if (this.timezone && !this.fixedDateRangeField.fullDayInUTC) {\n this._timezone.next(asObservableFromGetter(this.timezone));\n }\n\n // Watch for disabled changes so we can propogate them properly.\n this.formControl.registerOnDisabledChange((disabled) => {\n if (disabled) {\n this.inputRangeForm.disable();\n } else {\n this.inputRangeForm.enable();\n\n this.endDisabled$.pipe(first()).subscribe((disabled) => {\n const end = this.inputRangeForm.get('end');\n\n if (end) {\n if (disabled) {\n end.disable();\n } else {\n end.enable();\n }\n }\n });\n }\n });\n\n if (this.presets != null) {\n this._presets.next(asObservableFromGetter(this.presets));\n } else {\n this._presets.next(this.dbxDateTimeFieldMenuPresetsService.configurations$);\n }\n\n this._activeDateSub.subscription = this.calendarFocusDate$.subscribe((x) => {\n this.calendar().activeDate = x;\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._sub.destroy();\n this._inputRangeFormSub.destroy();\n this._inputRangeFormValueSub.destroy();\n this._dateRangeInputSub.destroy();\n this._currentSelectionModeSub.destroy();\n this._latestBoundarySub.destroy();\n this._disableEndSub.destroy();\n this._activeDateSub.destroy();\n this._config.complete();\n this._selectionMode.complete();\n this._dateRangeInput.complete();\n this._timezone.complete();\n this._presets.complete();\n this._selectionEvent.complete();\n this._formControlObs.complete();\n }\n\n selectedChange(date: Maybe<Date>): void {\n this.setDateRange(date ? { start: date } : null, 'calendar');\n }\n\n setDateRange(range: Maybe<Partial<DateRange>>, type: SelectedDateEventType) {\n this._selectionEvent.next({ type, range });\n }\n\n _createDateRange(date: Maybe<Date>): Maybe<DateRange> {\n return date ? dateRange({ ...this.currentDateRangeInputSignal(), date } as DateRangeInput) : undefined;\n }\n}\n\n/**\n * Custom Material date range selection strategy for the fixed date range field.\n *\n * Provides preview highlighting on the calendar based on the current selection mode\n * and boundary constraints.\n */\n@Injectable()\nexport class DbxFixedDateRangeFieldSelectionStrategy<D> implements MatDateRangeSelectionStrategy<D> {\n private readonly _dateAdapter = inject(DateAdapter<D>);\n readonly dbxFixedDateRangeFieldComponent = inject(DbxFixedDateRangeFieldComponent);\n\n selectionFinished(date: D | null, currentRange: DatePickerDateRange<D>, event: Event): DatePickerDateRange<D> {\n // unused\n return currentRange;\n }\n\n createPreview(activeDate: D | null, currentRange: DatePickerDateRange<D>, event: Event): DatePickerDateRange<D> {\n const { currentSelectionModeSignal, latestBoundarySignal } = this.dbxFixedDateRangeFieldComponent;\n const currentSelectionMode = currentSelectionModeSignal();\n\n if (activeDate != null && currentSelectionMode !== 'single') {\n const latestBoundary = latestBoundarySignal();\n const date = this.dateFromAdapterDate(activeDate);\n\n if (latestBoundary && (currentSelectionMode === 'normal' || isDateInDateRange(date, latestBoundary))) {\n const exampleDateRange = this._createDateRange(latestBoundary);\n return exampleDateRange;\n }\n }\n\n return this._createDateRangeWithDate(activeDate);\n }\n\n private _createDateRangeWithDate(input: D | null): DatePickerDateRange<D> {\n let dateRange: Maybe<DateRange>;\n\n if (input) {\n const date = this.dateFromAdapterDate(input);\n dateRange = this.dbxFixedDateRangeFieldComponent._createDateRange(date);\n }\n\n return this._createDateRange(dateRange);\n }\n\n private _createDateRange(input: Maybe<DateRange>): DatePickerDateRange<D> {\n if (input) {\n return new DatePickerDateRange<D>(this.adapterDateFromDate(input.start), this.adapterDateFromDate(input.end));\n } else {\n return new DatePickerDateRange<D>(null, null);\n }\n }\n\n dateFromAdapterDate(input: D) {\n const day: DayOfMonth = this._dateAdapter.getDate(input);\n const monthIndex: DateMonth = this._dateAdapter.getMonth(input);\n const year: YearNumber = this._dateAdapter.getYear(input);\n return new Date(year, monthIndex, day);\n }\n\n adapterDateFromDate(date: Date): D {\n const day: DayOfMonth = date.getDate();\n const monthIndex: DateMonth = date.getMonth();\n const year: YearNumber = date.getFullYear();\n\n return this._dateAdapter.createDate(year, monthIndex, day);\n }\n}\n","<div class=\"dbx-fixeddaterange-field\">\n <mat-calendar #calendarView [selected]=\"calendarSelectionSignal()\" [dateFilter]=\"pickerFilterSignal()\" [minDate]=\"minDateSignal()\" [maxDate]=\"maxDateSignal()\" (selectedChange)=\"selectedChange($event)\"></mat-calendar>\n <mat-form-field class=\"dbx-fixeddaterange-field-input\" appearance=\"fill\">\n @if (showRangeInput) {\n <mat-date-range-input [formGroup]=\"inputRangeForm\">\n <input #startDateInput matStartDate formControlName=\"start\" placeholder=\"Start date\" />\n <input #endDateInput [ngClass]=\"endDisabledSignal() ? 'dbx-fixeddaterange-field-input-end' : ''\" [attr.tabindex]=\"endDisabledSignal() ? -1 : 0\" matEndDate formControlName=\"end\" placeholder=\"End date\" />\n </mat-date-range-input>\n }\n </mat-form-field>\n @if (formControl.hasError('required')) {\n <mat-error>Date range is required</mat-error>\n }\n</div>\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxDateTimeFieldComponent } from './datetime.field.component';\nimport { DbxFormFormlyWrapperModule } from '../../wrapper/wrapper.module';\nimport { DbxFixedDateRangeFieldComponent } from './fixeddaterange.field.component';\n\nconst importsAndExports = [DbxDateTimeFieldComponent, DbxFixedDateRangeFieldComponent, DbxFormFormlyWrapperModule];\n\n/** Registers the `datetime` and `fixeddaterange` Formly field types with style and form-field wrappers. */\n@NgModule({\n imports: [\n ...importsAndExports,\n FormlyModule.forChild({\n types: [\n //\n { name: 'datetime', component: DbxDateTimeFieldComponent, wrappers: ['style', 'form-field'] },\n { name: 'fixeddaterange', component: DbxFixedDateRangeFieldComponent, wrappers: ['style', 'form-field'] }\n ]\n })\n ],\n exports: importsAndExports\n})\nexport class DbxFormFormlyDateFieldModule {}\n","import { type DbxFormStyleWrapperConfig } from './style.wrapper.component';\nimport { type DbxFlexWrapperConfig } from './flex.wrapper.component';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type DbxFormToggleWrapperConfig } from './toggle.wrapper.component';\nimport { type DbxFormSectionConfig } from './section.wrapper.component';\nimport { type DbxFormSubsectionConfig } from './subsection.wrapper.component';\nimport { type DbxFormInfoConfig } from './info.wrapper.component';\nimport { type DbxFormExpandWrapperConfig } from './expand.wrapper.component';\nimport { type DbxFlexSize } from '@dereekb/dbx-web';\nimport { type DbxFormWorkingWrapperConfig } from './working.wrapper.component';\nimport { AUTO_TOUCH_WRAPPER_KEY, EXPAND_WRAPPER_KEY, TOGGLE_WRAPPER_KEY, SECTION_WRAPPER_KEY, SUBSECTION_WRAPPER_KEY, INFO_WRAPPER_KEY, STYLE_WRAPPER_KEY, WORKING_WRAPPER_KEY } from './wrapper.key';\n\n/**\n * A {@link FormlyFieldConfig} that wraps a child field config with a named wrapper and associated props.\n *\n * @typeParam P - Wrapper props type\n * @typeParam C - Child field config type\n */\nexport type WrapperFormlyFieldConfig<P, C extends FormlyFieldConfig> = FormlyFieldConfig<P> & {\n wrappers: string[];\n props: P;\n fieldGroup: [C];\n};\n\n/**\n * Wraps a Formly field config with a named wrapper and its associated props.\n *\n * @param fieldConfig - The field config to wrap\n * @param wrapperKey - The registered wrapper key\n * @param wrapperProps - Configuration props for the wrapper\n * @returns A new field config with the wrapper applied\n *\n * @example\n * ```typescript\n * const wrapped = addWrapperToFormlyFieldConfig(myField, 'section', { header: 'Details' });\n * ```\n */\nexport function addWrapperToFormlyFieldConfig<C extends FormlyFieldConfig, P extends object>(fieldConfig: C, wrapperKey: string, wrapperProps: P): WrapperFormlyFieldConfig<P, C> {\n return {\n wrappers: [wrapperKey],\n props: wrapperProps,\n fieldGroup: [fieldConfig]\n };\n}\n\n/**\n * Wraps a field with the auto-touch wrapper that marks the control as touched on value change.\n */\nexport function autoTouchWrapper<T extends object, C extends FormlyFieldConfig>(fieldConfig: C, autoTouchWrapper: DbxFormExpandWrapperConfig<T> = {}) {\n return addWrapperToFormlyFieldConfig<C, DbxFormExpandWrapperConfig<T>>(fieldConfig, AUTO_TOUCH_WRAPPER_KEY, autoTouchWrapper);\n}\n\n/**\n * Wraps a field with the expand wrapper that shows/hides the field based on value or user click.\n */\nexport function expandWrapper<T extends object, C extends FormlyFieldConfig>(fieldConfig: C, expandWrapper: DbxFormExpandWrapperConfig<T> = {}) {\n return addWrapperToFormlyFieldConfig<C, DbxFormExpandWrapperConfig<T>>(fieldConfig, EXPAND_WRAPPER_KEY, expandWrapper);\n}\n\n/**\n * Wraps a field with the toggle wrapper that uses a slide toggle to show/hide content.\n */\nexport function toggleWrapper<C extends FormlyFieldConfig>(fieldConfig: C, toggleWrapper: DbxFormToggleWrapperConfig = {}) {\n return addWrapperToFormlyFieldConfig<C, DbxFormToggleWrapperConfig>(fieldConfig, TOGGLE_WRAPPER_KEY, toggleWrapper);\n}\n\n/**\n * Wraps a field group in a section layout with an optional header and hint.\n */\nexport function sectionWrapper<C extends FormlyFieldConfig>(fieldConfig: C, sectionWrapper: DbxFormSectionConfig = {}) {\n return addWrapperToFormlyFieldConfig<C, DbxFormSectionConfig>(fieldConfig, SECTION_WRAPPER_KEY, sectionWrapper);\n}\n\n/**\n * Wraps a field group in a subsection layout with an optional header and hint.\n */\nexport function subsectionWrapper<C extends FormlyFieldConfig>(fieldConfig: C, subsectionWrapper: DbxFormSubsectionConfig = {}) {\n return addWrapperToFormlyFieldConfig<C, DbxFormSubsectionConfig>(fieldConfig, SUBSECTION_WRAPPER_KEY, subsectionWrapper);\n}\n\n/**\n * Wraps a field with an info button that triggers a callback when clicked.\n */\nexport function infoWrapper<C extends FormlyFieldConfig>(fieldConfig: C, infoWrapper: DbxFormInfoConfig) {\n return addWrapperToFormlyFieldConfig<C, DbxFormInfoConfig>(fieldConfig, INFO_WRAPPER_KEY, infoWrapper);\n}\n\n/**\n * Wraps a field with dynamic CSS class and style bindings.\n */\nexport function styleWrapper<C extends FormlyFieldConfig>(fieldConfig: C, styleWrapper: DbxFormStyleWrapperConfig) {\n return addWrapperToFormlyFieldConfig<C, DbxFormStyleWrapperConfig>(fieldConfig, STYLE_WRAPPER_KEY, styleWrapper);\n}\n\n/**\n * Wraps a field with a loading indicator that shows during async validation.\n */\nexport function workingWrapper<C extends FormlyFieldConfig>(fieldConfig: C, workingWrapper: DbxFormWorkingWrapperConfig = {}) {\n return addWrapperToFormlyFieldConfig<C, DbxFormWorkingWrapperConfig>(fieldConfig, WORKING_WRAPPER_KEY, workingWrapper);\n}\n\n/**\n * Configuration for a single field within a flex layout wrapper group,\n * pairing a field config with an optional flex size.\n */\nexport interface DbxFlexLayoutWrapperGroupFieldConfig {\n field: FormlyFieldConfig;\n /**\n * Flex space sizing for the field. If undefined it will default to the provided default size.\n */\n size?: DbxFlexSize;\n}\n\n/**\n * Default configuration for a flex layout group, combining flex wrapper settings\n * with a default size for fields that don't specify their own.\n */\nexport interface DbxFlexLayoutWrapperGroupFieldConfigDefaults extends DbxFlexWrapperConfig, Omit<DbxFlexLayoutWrapperGroupFieldConfig, 'field'> {}\n\n/**\n * Type guard that checks if the input is a {@link DbxFlexLayoutWrapperGroupFieldConfig}\n * (has a `field` property) rather than a plain {@link FormlyFieldConfig}.\n */\nexport function checkIsFieldFlexLayoutGroupFieldConfig(input: FormlyFieldConfig | DbxFlexLayoutWrapperGroupFieldConfig): input is DbxFlexLayoutWrapperGroupFieldConfig {\n if ((input as DbxFlexLayoutWrapperGroupFieldConfig).field != null) {\n return true;\n } else {\n return false;\n }\n}\n\n/**\n * Creates a flex-layout-wrapped field group that arranges child fields horizontally\n * with configurable sizing, breakpoints, and responsive behavior.\n *\n * @param fieldConfigs - Array of field configs or field config pairs with size overrides\n * @param options - Flex layout defaults including breakpoint, relative sizing, and default size\n * @returns A {@link FormlyFieldConfig} with flex wrapper applied\n *\n * @example\n * ```typescript\n * const layout = flexLayoutWrapper([\n * { field: textField({ key: 'first' }), size: 2 },\n * { field: textField({ key: 'last' }), size: 2 }\n * ], { relative: true });\n * ```\n */\nexport function flexLayoutWrapper(fieldConfigs: (FormlyFieldConfig | DbxFlexLayoutWrapperGroupFieldConfig)[], { relative, breakpoint, breakToColumn, size: defaultSize = 2 }: DbxFlexLayoutWrapperGroupFieldConfigDefaults = {}): FormlyFieldConfig<DbxFlexWrapperConfig> {\n return {\n wrappers: ['flex'],\n fieldGroupClassName: 'dbx-flex-group',\n // fieldGroupClassName: 'field-layout-group',\n props: {\n breakpoint,\n breakToColumn,\n relative\n },\n fieldGroup: fieldConfigs.map((inputConfig) => {\n const fieldConfig: DbxFlexLayoutWrapperGroupFieldConfig = checkIsFieldFlexLayoutGroupFieldConfig(inputConfig)\n ? inputConfig\n : {\n field: inputConfig\n };\n\n const { field, size = defaultSize } = fieldConfig;\n const className = `dbx-flex-${size}`;\n\n return {\n ...field,\n className\n };\n })\n };\n}\n\n// TODO: Add addon wrapper/extension from this demo:\n// https://formly.dev/docs/examples/other/material-prefix-suffix\n\n/*\nexport interface NumberFieldAddon {\n readonly text?: Maybe<string>;\n readonly icon?: Maybe<string>;\n}\n \nreadonly addonLeft?: Maybe<NumberFieldAddon>;\nreadonly addonRight?: Maybe<NumberFieldAddon>;\n*/\n","import { type Observable, of } from 'rxjs';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig, type DescriptionFieldConfig, type MaterialFormFieldConfig } from '../../field';\nimport { type DbxDateTimeFieldProps, DbxDateTimeFieldTimeMode, type DbxDateTimePickerConfiguration } from './datetime.field.component';\nimport { flexLayoutWrapper } from '../../wrapper/wrapper';\nimport { type Maybe } from '@dereekb/util';\nimport { type DbxFixedDateRangeFieldProps } from './fixeddaterange.field.component';\n\n/**\n * Full configuration for a date-time picker field combining date and time selection.\n */\nexport interface DateTimeFieldConfig extends LabeledFieldConfig, DescriptionFieldConfig, DbxDateTimeFieldProps, MaterialFormFieldConfig {}\n\n/**\n * Configuration for a time-only field (date selection is hidden).\n */\nexport type TimeFieldConfig = Omit<DateTimeFieldConfig, 'showDate' | 'timeOnly'>;\n\n/**\n * Factory that returns an observable of a date-time picker configuration\n * that automatically selects the next upcoming time, rounded down to the nearest minute.\n */\nexport const TAKE_NEXT_UPCOMING_TIME_CONFIG_OBS: () => Observable<DbxDateTimePickerConfiguration> = () =>\n of({\n takeNextUpcomingTime: true,\n roundDownToMinute: true\n });\n\n/**\n * Same as DateTime field but with the Date input hidden by default.\n */\nexport function timeOnlyField(config: Partial<TimeFieldConfig> = {}): FormlyFieldConfig {\n return dateTimeField({\n ...config,\n timeMode: DbxDateTimeFieldTimeMode.REQUIRED,\n timeOnly: true\n });\n}\n\n/**\n * Creates a Formly field configuration for a date-time picker with optional time selection,\n * timezone awareness, and preset values.\n *\n * @param config - Optional overrides; defaults to key `'date'`, time mode `REQUIRED`\n * @returns A validated {@link FormlyFieldConfig} with type `'datetime'`\n *\n * @example\n * ```typescript\n * const field = dateTimeField({ key: 'startDate', label: 'Start', required: true });\n * ```\n */\nexport function dateTimeField(config: Partial<DateTimeFieldConfig> = {}) {\n const { key = 'date', showClearButton, dateLabel, timeLabel, allDayLabel, atTimeLabel, timeDate, timezone, minuteStep, showTimezone, timeMode = DbxDateTimeFieldTimeMode.REQUIRED, valueMode, alwaysShowDateInput, autofillDateWhenTimeIsPicked, fullDayInUTC, fullDayFieldName, pickerConfig, getSyncFieldsObs, hideDatePicker, hideDateHint, timeOnly = false, presets, materialFormField } = config;\n\n const classGetter = 'dbx-mat-form-field-disable-underline dbx-mat-form-date-time-field-wrapper';\n const fieldConfig: FormlyFieldConfig<DbxDateTimeFieldProps> = formlyField({\n key,\n type: 'datetime',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n showClearButton,\n classGetter,\n dateLabel,\n timeLabel,\n allDayLabel,\n atTimeLabel,\n valueMode,\n timeOnly,\n presets,\n minuteStep,\n timeMode: timeOnly ? DbxDateTimeFieldTimeMode.REQUIRED : timeMode,\n alwaysShowDateInput,\n autofillDateWhenTimeIsPicked,\n timezone,\n timeDate,\n showTimezone,\n fullDayFieldName,\n fullDayInUTC,\n hideDatePicker,\n hideDateHint,\n pickerConfig,\n getSyncFieldsObs\n })\n });\n\n return fieldConfig;\n}\n\n/** Configuration for a single date within a date range (no time mode or sync). */\nexport type DateDateRangeFieldDateConfig = Omit<DateTimeFieldConfig, 'dateLabel' | 'timeOnly' | 'timeMode' | 'getSyncFieldsObs'>;\n\n/**\n * Configuration for a date range field with separate start and end date pickers.\n */\nexport interface DateDateRangeFieldConfig extends Pick<DateTimeFieldConfig, 'timeDate' | 'timezone' | 'showTimezone' | 'presets' | 'valueMode' | 'minuteStep'> {\n required?: boolean;\n start?: Partial<DateDateRangeFieldDateConfig>;\n end?: Partial<DateDateRangeFieldDateConfig>;\n}\n\n/**\n * Creates a pair of date pickers for selecting a date range (start and end dates)\n * arranged in a flex layout. The pickers are synchronized so the start date stays before the end date.\n *\n * @param config - Date range configuration with optional start/end overrides\n * @returns A {@link FormlyFieldConfig} containing the start and end date field pair\n *\n * @example\n * ```typescript\n * const field = dateRangeField({ required: true, start: { key: 'from' }, end: { key: 'to' } });\n * ```\n */\nexport function dateRangeField(config: DateDateRangeFieldConfig = {}): FormlyFieldConfig {\n const { required: inputRequired, start, end, timeDate, timezone, showTimezone, presets, valueMode, minuteStep } = config;\n const required = inputRequired ?? start?.required ?? false;\n\n const startFieldKey = start?.key ?? 'start';\n const endFieldKey = end?.key ?? 'end';\n\n const startField = dateTimeField({\n dateLabel: 'Start',\n timeMode: DbxDateTimeFieldTimeMode.NONE,\n getSyncFieldsObs: () => of([{ syncWith: endFieldKey, syncType: 'after' }]),\n presets,\n allDayLabel: '',\n timeDate,\n timezone,\n showTimezone,\n valueMode,\n minuteStep,\n ...start,\n required,\n key: startFieldKey\n });\n\n const endField = dateTimeField({\n dateLabel: 'End',\n timeMode: DbxDateTimeFieldTimeMode.NONE,\n getSyncFieldsObs: () => of([{ syncWith: startFieldKey, syncType: 'before' }]),\n presets,\n allDayLabel: '',\n timeDate,\n timezone,\n showTimezone,\n valueMode,\n minuteStep,\n ...end,\n required,\n key: endFieldKey\n });\n\n return {\n key: undefined,\n fieldGroup: [flexLayoutWrapper([startField, endField], { relative: true, breakToColumn: true, breakpoint: 'large' })]\n };\n}\n\n/** Configuration for a single time within a date-time range (no full-day options). */\nexport type DateTimeRangeFieldTimeConfig = Omit<DateDateRangeFieldDateConfig, 'allDayLabel' | 'fullDayFieldName' | 'fullDayInUTC'>;\n\n/**\n * Configuration for a date-time range field with separate start and end time pickers.\n */\nexport interface DateDateTimeRangeFieldConfig extends Pick<DateTimeFieldConfig, 'timeDate' | 'timezone' | 'showTimezone' | 'presets' | 'valueMode' | 'minuteStep'> {\n required?: boolean;\n start?: Partial<DateTimeRangeFieldTimeConfig>;\n end?: Partial<DateTimeRangeFieldTimeConfig>;\n}\n\n/**\n * Creates a pair of time-only pickers for selecting a time range (start and end times)\n * arranged in a flex layout.\n *\n * @param inputConfig - Time range configuration with optional start/end overrides\n * @returns A {@link FormlyFieldConfig} containing the start and end time field pair\n *\n * @example\n * ```typescript\n * const field = dateTimeRangeField({ required: true });\n * ```\n */\nexport function dateTimeRangeField(inputConfig: DateDateTimeRangeFieldConfig = {}): FormlyFieldConfig {\n const { required = false, start: inputStart, end: inputEnd, timezone, timeDate, showTimezone, presets, valueMode, minuteStep } = inputConfig;\n\n function dateTimeRangeFieldConfig(config: Maybe<Partial<DateTimeRangeFieldTimeConfig>>): Partial<DateTimeFieldConfig> {\n return {\n valueMode,\n minuteStep,\n ...config,\n required,\n timeMode: DbxDateTimeFieldTimeMode.REQUIRED,\n getSyncFieldsObs: undefined,\n timeOnly: true,\n hideDateHint: true\n };\n }\n\n const startKey = inputStart?.key ?? 'start';\n const endKey = inputEnd?.key ?? 'end';\n\n const start: Partial<DateTimeFieldConfig> = {\n label: 'Start Time',\n ...dateTimeRangeFieldConfig(inputStart),\n key: startKey\n };\n\n const end: Partial<DateTimeFieldConfig> = {\n label: 'End Time',\n ...dateTimeRangeFieldConfig(inputEnd),\n key: endKey\n };\n\n const config = {\n timezone,\n timeDate,\n showTimezone,\n presets,\n start,\n end\n };\n\n return dateRangeField(config);\n}\n\n// MARK: FixedDateRange\n/**\n * Configuration for a fixed date range field that uses a calendar-style range picker.\n */\nexport interface FixedDateRangeFieldConfig extends LabeledFieldConfig, DescriptionFieldConfig, DbxFixedDateRangeFieldProps, MaterialFormFieldConfig {}\n\n/**\n * Creates a Formly field configuration for a fixed date range picker.\n *\n * @param config - Optional overrides; defaults to key `'dateRange'`\n * @returns A validated {@link FormlyFieldConfig} with type `'fixeddaterange'`\n *\n * @example\n * ```typescript\n * const field = fixedDateRangeField({ key: 'eventDates', required: true });\n * ```\n */\nexport function fixedDateRangeField(config: Partial<FixedDateRangeFieldConfig> = {}) {\n const { key = 'dateRange', dateRangeInput, pickerConfig, timezone, selectionMode, showTimezone, valueMode, fullDayInUTC, presets, showRangeInput, materialFormField } = config;\n\n const classGetter = 'dbx-mat-form-field-disable-underline dbx-form-fixed-date-range-field-wrapper';\n const fieldConfig: FormlyFieldConfig<DbxDateTimeFieldProps> = formlyField({\n key,\n type: 'fixeddaterange',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n classGetter,\n dateRangeInput,\n pickerConfig,\n valueMode,\n presets,\n timezone,\n selectionMode,\n showTimezone,\n fullDayInUTC,\n showRangeInput\n })\n });\n\n return fieldConfig;\n}\n","import { type DateTimePresetConfiguration } from './datetime';\n\nexport const DEFAULT_DATE_TIME_FIELD_MENU_PRESETS_PRESETS: DateTimePresetConfiguration[] = [\n {\n label: '6:00AM',\n timeString: '6:00AM'\n },\n {\n label: '8:00AM',\n timeString: '8:00AM'\n },\n {\n label: '10:00AM',\n timeString: '10:00AM'\n },\n {\n label: 'Noon',\n timeString: '12:00PM'\n },\n {\n label: '2:00PM',\n timeString: '2:00PM'\n },\n {\n label: '5:00PM',\n timeString: '5:00PM'\n },\n {\n label: 'Midnight',\n timeString: '12:00AM'\n }\n];\n","import { type AbstractControl, type ValidationErrors, type ValidatorFn } from '@angular/forms';\n\nexport function isTruthy(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const value: boolean | undefined = control.value;\n\n if (!value) {\n return {\n isTruthy: value\n };\n }\n\n return {};\n };\n}\n","import { Validators, type ValidatorFn } from '@angular/forms';\nimport { HAS_WEBSITE_DOMAIN_NAME_REGEX } from '@dereekb/util';\n\nexport function isDomain(): ValidatorFn {\n return Validators.pattern(HAS_WEBSITE_DOMAIN_NAME_REGEX);\n}\n","import { type AbstractControl, type ValidatorFn } from '@angular/forms';\nimport { type KeyValueTupleFilter, allObjectsAreEqual, type EqualityComparatorFunction, KeyValueTypleValueFilter, type ObjectMap, valuesFromPOJO } from '@dereekb/util';\n\nexport const FIELD_VALUES_ARE_EQUAL_VALIDATION_KEY = 'fieldValuesAreEqual';\n\nexport interface FieldValuesAreEqualValidatorConfig<T extends object = object> {\n /**\n * Keys of the value to match on.\n *\n * If none are defined, then all fields from the control are matched.\n */\n keysFilter?: (keyof T)[];\n\n /**\n * Full filter to use, if defined.\n */\n valuesFilter?: KeyValueTupleFilter<T>;\n\n /**\n * Optional equivalence comparator.\n */\n isEqual?: EqualityComparatorFunction<T>;\n\n /**\n * Custom message for this validator.\n */\n message?: string;\n}\n\n/**\n * Validator for validating all values within an object.\n *\n * This is useful for validating a control group where two or more values are expected to be the same, such as a password and a password verification field.\n *\n * @param config\n * @returns\n */\nexport function fieldValuesAreEqualValidator<T extends object = object>(config: FieldValuesAreEqualValidatorConfig<T> = {}): ValidatorFn {\n const { keysFilter, valuesFilter: inputValuesFilter, isEqual = (a, b) => a === b, message = 'Field values are not equal.' } = config;\n\n const valuesFilter: KeyValueTupleFilter<T, keyof T> = inputValuesFilter ?? {\n valueFilter: KeyValueTypleValueFilter.NONE, // keep all values. Null/undefined should be processed.\n keysFilter\n };\n\n return (control: AbstractControl) => {\n const object: ObjectMap<T> = control.value;\n const values: T[] = valuesFromPOJO(object as T, valuesFilter);\n const isValid = allObjectsAreEqual(values, isEqual);\n\n if (isValid) {\n return null;\n } else {\n return {\n [FIELD_VALUES_ARE_EQUAL_VALIDATION_KEY]: { message }\n };\n }\n };\n}\n","import { type AbstractControl, type ValidationErrors, type ValidatorFn, Validators } from '@angular/forms';\nimport { isNumberDivisibleBy, nearestDivisibleValues } from '@dereekb/util';\n\n/**\n * Merges the use of the min and max validator.\n *\n * @param min\n * @param max\n * @returns\n */\nexport function isInRange(min: number = Number.MIN_SAFE_INTEGER, max: number = Number.MAX_SAFE_INTEGER): ValidatorFn {\n const minFn = Validators.min(min);\n const maxFn = Validators.max(max);\n\n return (control: AbstractControl): ValidationErrors | null => {\n const minError = minFn(control);\n const maxError = maxFn(control);\n\n let errors: ValidationErrors | null = null;\n\n if (minError || maxError) {\n errors = {\n ...minError,\n ...maxError\n };\n }\n\n return errors;\n };\n}\n\nexport const IS_DIVISIBLE_BY_VALIDATION_KEY = 'isDivisibleBy';\n\nexport interface IsDivisibleByError {\n value: number;\n nearest: number;\n divisor: number;\n message: string;\n}\n\n/**\n * Angular Form ValidationFn for checking isDivisibleBy the input divisor.\n *\n * @param divisor\n * @returns\n */\nexport function isDivisibleBy(divisor: number): ValidatorFn {\n if (divisor === 0) {\n throw new Error('Divisior must be greater than zero.');\n }\n\n return (control: AbstractControl): ValidationErrors | null => {\n const value: number | undefined = control.value;\n\n if (value != null && !isNumberDivisibleBy(value, divisor)) {\n const nearest = nearestDivisibleValues(value, divisor);\n return {\n [IS_DIVISIBLE_BY_VALIDATION_KEY]: {\n value,\n divisor,\n nearest,\n message: `Number must by divisible by ${divisor}. The two nearest valid values are ${nearest.nearestFloor} and ${nearest.nearestCeil}.`\n }\n };\n }\n\n return {};\n };\n}\n","import { first, switchMap, map, type Observable, of, catchError } from 'rxjs';\nimport { type AbstractControl, type AsyncValidatorFn } from '@angular/forms';\nimport { asyncPusherCache } from '@dereekb/rxjs';\n\nexport const FIELD_VALUE_IS_AVAILABLE_VALIDATION_KEY = 'fieldValueIsAvailable';\nexport const FIELD_VALUE_IS_AVAILABLE_ERROR_VALIDATION_KEY = 'fieldValueIsAvailableError';\n\nexport type FieldValueIsAvailableValidatorFunction<T> = (value: T) => Observable<boolean>;\n\nexport interface FieldValueIsAvailableValidatorConfig<T> {\n /**\n * How long to wait in between value changes.\n */\n throttle?: number;\n\n /**\n * Returns an observable that checks whether or not the value is currently available.\n *\n * @param value\n */\n readonly checkValueIsAvailable: FieldValueIsAvailableValidatorFunction<T>;\n\n /**\n * Custom message for this validator.\n */\n message?: string;\n}\n\n/**\n * Validator for validating all values within an object.\n *\n * This is useful for validating a control group where two or more values are expected to be the same, such as a password and a password verification field.\n *\n * @param config\n * @returns\n */\nexport function fieldValueIsAvailableValidator<T>(config: FieldValueIsAvailableValidatorConfig<T>): AsyncValidatorFn {\n const { throttle = 400, checkValueIsAvailable, message = 'This value is not available.' } = config;\n\n const pusher = asyncPusherCache<T>({\n throttle\n });\n\n return (control: AbstractControl) =>\n pusher(control.valueChanges)(control.value as T).pipe(\n switchMap((x) => checkValueIsAvailable(x)),\n map((isAvailable) => {\n if (isAvailable) {\n return null;\n } else {\n return {\n [FIELD_VALUE_IS_AVAILABLE_VALIDATION_KEY]: { message }\n };\n }\n }),\n catchError(() =>\n of({\n [FIELD_VALUE_IS_AVAILABLE_ERROR_VALIDATION_KEY]: { message: 'An error occured.' }\n })\n ),\n first()\n );\n}\n","import { type AbstractControl, type ValidationErrors, type ValidatorFn } from '@angular/forms';\nimport { e164PhoneNumberExtensionPair, isE164PhoneNumber as isE164PhoneNumberFunction, isValidPhoneExtensionNumber } from '@dereekb/util';\nimport { INVALID_PHONE_NUMBER_EXTENSION_MESSAGE, INVALID_PHONE_NUMBER_MESSAGE } from '../formly/config/validation';\n\n/**\n * Angular Form ValidationFn for checking isE164PhoneNumber the input divisor.\n *\n * @param divisor\n * @returns\n */\nexport function isE164PhoneNumber(allowExtension: boolean): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const value: string | undefined = control.value;\n\n if (value != null && !isE164PhoneNumberFunction(value, allowExtension)) {\n return {\n [INVALID_PHONE_NUMBER_MESSAGE.name]: true\n };\n }\n\n return {};\n };\n}\n\n/**\n * Angular Form ValidationFn for checking the input is a valid phone extension. Empty values return true.\n *\n * @param divisor\n * @returns\n */\nexport function isPhoneExtension(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const value: string | number | undefined = control.value;\n\n if (value != null) {\n const asString = value.toString();\n\n if (asString.length > 0 && !isValidPhoneExtensionNumber(asString)) {\n return {\n [INVALID_PHONE_NUMBER_EXTENSION_MESSAGE.name]: true\n };\n }\n }\n\n return {};\n };\n}\n\nexport function isE164PhoneNumberWithValidExtension(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const value: string | undefined = control.value;\n\n if (value != null) {\n if (isE164PhoneNumberFunction(value, true)) {\n const pair = e164PhoneNumberExtensionPair(value);\n\n if (pair.extension && !isValidPhoneExtensionNumber(pair.extension)) {\n return {\n [INVALID_PHONE_NUMBER_EXTENSION_MESSAGE.name]: true\n };\n }\n } else {\n return {\n [INVALID_PHONE_NUMBER_MESSAGE.name]: true\n };\n }\n }\n\n return {};\n };\n}\n","import { type AbstractControl, type ValidationErrors, type ValidatorFn } from '@angular/forms';\nimport { type ArrayOrValue, type Maybe, type WebsiteDomain, type WebsiteUrlDetails, asArray, isWebsiteUrlWithPrefix, websiteUrlDetails } from '@dereekb/util';\n\nexport const IS_NOT_WEBSITE_URL_VALIDATION_KEY = 'isNotWebsiteUrl';\nexport const IS_NOT_WEBSITE_URL_WITH_PREFIX_VALIDATION_KEY = 'isNotWebsiteUrlWithPrefix';\nexport const IS_NOT_WEBSITE_URL_WITH_EXPECTED_DOMAIN_VALIDATION_KEY = 'isNotWebsiteUrlWithExpectedDomain';\n\nexport interface IsNotWebsiteUrlErrorData {\n readonly value: string;\n readonly isPrefixRequired: boolean;\n readonly message: string;\n}\n\nexport interface IsWebsiteUrlValidatorConfig {\n /**\n * Whether or not to require an http/https prefix.\n *\n * Defaults to true.\n */\n readonly requirePrefix?: Maybe<boolean>;\n /**\n * Whether or not to allow URLs with a port number but no TLD (e.g. http://localhost:9010/path).\n *\n * Defaults to false.\n */\n readonly allowPorts?: Maybe<boolean>;\n /**\n * Valid domains to accept.\n *\n * Defaults to undefined.\n */\n readonly validDomains?: Maybe<ArrayOrValue<WebsiteDomain>>;\n}\n\n/**\n * Angular Form ValidationFn for checking isDivisibleBy the input divisor.\n *\n * @param divisor\n * @returns\n */\nexport function isWebsiteUrlValidator(config?: IsWebsiteUrlValidatorConfig): ValidatorFn {\n const { requirePrefix, allowPorts, validDomains: inputValidDomains } = config ?? {};\n const isPrefixRequired = requirePrefix ?? true;\n const isAllowPorts = allowPorts ?? false;\n const validDomains = asArray(inputValidDomains);\n const validDomainsSet = new Set(validDomains);\n const validateDomains = validDomainsSet.size > 0;\n\n function isValidUrl(details: WebsiteUrlDetails): boolean {\n if (isPrefixRequired) {\n if (isWebsiteUrlWithPrefix(details.input)) {\n return true;\n }\n } else if (details.isWebsiteUrl) {\n return true;\n }\n\n if (isAllowPorts && details.hasPortNumber) {\n return isPrefixRequired ? details.hasHttpPrefix : true;\n }\n\n return false;\n }\n\n const portNumbersMessagePart = isAllowPorts ? '' : ' Urls with port numbers (e.g. localhost:8080) are not allowed.';\n\n const validateWebsiteValue: (details: WebsiteUrlDetails) => ValidationErrors | null = isPrefixRequired\n ? (details: WebsiteUrlDetails) => {\n return isValidUrl(details)\n ? null\n : {\n [IS_NOT_WEBSITE_URL_WITH_PREFIX_VALIDATION_KEY]: {\n value: details.input,\n isPrefixRequired,\n message: `Value is not a website url with an http/https prefix.${portNumbersMessagePart}`\n }\n };\n }\n : (details: WebsiteUrlDetails) => {\n return isValidUrl(details)\n ? null\n : {\n [IS_NOT_WEBSITE_URL_VALIDATION_KEY]: {\n value: details.input,\n isPrefixRequired,\n message: `Value is not a valid website url.${portNumbersMessagePart}`\n }\n };\n };\n\n const validateWebsiteDomain: (details: WebsiteUrlDetails) => ValidationErrors | null = (details: WebsiteUrlDetails) => {\n let pass = validDomainsSet.size === 0 ? true : false;\n\n if (details.hasWebsiteDomain && validateDomains) {\n pass = validDomainsSet.has(details.domain);\n }\n\n return pass\n ? null\n : {\n [IS_NOT_WEBSITE_URL_WITH_EXPECTED_DOMAIN_VALIDATION_KEY]: {\n value: details.input,\n isPrefixRequired,\n validDomains,\n message: `Value is not a website url with one of the expected domains: ${validDomains.join(', ')}.`\n }\n };\n };\n\n return (control: AbstractControl): ValidationErrors | null => {\n const value: string | undefined = control.value;\n\n if (value != null) {\n const details = websiteUrlDetails(value);\n\n return {\n ...validateWebsiteValue(details),\n ...validateWebsiteDomain(details)\n };\n }\n\n return {};\n };\n}\n","import { type ValidatorFn } from '@angular/forms';\nimport { concatArrays, type TransformNumberFunctionConfigRef, transformNumberFunction, mapMaybeFunction, DOLLAR_AMOUNT_PRECISION } from '@dereekb/util';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { isDivisibleBy } from '../../../../validator';\nimport { type AttributesFieldConfig, type LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig, type DescriptionFieldConfig, validatorsForFieldConfig, type FieldConfigParsersRef, type FormlyValueParser, type MaterialFormFieldConfig } from '../../field';\n\n// MARK: Number Field\n/**\n * Numeric constraint configuration for number fields.\n */\nexport interface NumberFieldNumberConfig {\n readonly min?: number;\n readonly max?: number;\n /** Step increment for the input. */\n readonly step?: number;\n /** When true, adds a validator that enforces the value is divisible by `step`. */\n readonly enforceStep?: boolean;\n}\n\n/** HTML input type for number fields. */\nexport type NumberFieldInputType = 'number';\n\n/**\n * Full configuration for a numeric input field.\n *\n * Combines labeling, numeric constraints (min/max/step), number transformation,\n * and Material form field styling.\n */\nexport interface NumberFieldConfig extends LabeledFieldConfig, DescriptionFieldConfig, NumberFieldNumberConfig, AttributesFieldConfig, Partial<TransformNumberFunctionConfigRef>, MaterialFormFieldConfig {\n readonly inputType?: NumberFieldInputType;\n}\n\n/**\n * Builds an array of value parsers for a number field, incorporating any configured\n * number transformation (e.g., precision, rounding) as a parser prepended to existing parsers.\n *\n * @param config - Parser and transform configuration\n * @returns Array of value parsers, or undefined if none configured\n *\n * @example\n * ```typescript\n * const parsers = numberFieldTransformParser({ transform: { precision: 2 } });\n * ```\n */\nexport function numberFieldTransformParser(config: Partial<FieldConfigParsersRef> & Partial<TransformNumberFunctionConfigRef>) {\n const { parsers: inputParsers, transform } = config;\n let parsers: FormlyValueParser[] | undefined;\n\n if (inputParsers) {\n parsers = inputParsers;\n }\n\n if (transform) {\n const transformParser: FormlyValueParser = mapMaybeFunction(transformNumberFunction(transform));\n parsers = concatArrays([transformParser], parsers);\n }\n\n return parsers;\n}\n\n/**\n * Creates a Formly field configuration for a numeric input.\n *\n * Adds a divisibility validator when both `step` and `enforceStep` are set.\n *\n * @param config - Number field configuration\n * @returns A validated {@link FormlyFieldConfig} with type `'input'` and input type `'number'`\n *\n * @example\n * ```typescript\n * const field = numberField({ key: 'quantity', label: 'Quantity', min: 1, max: 100, step: 1 });\n * ```\n */\nexport function numberField(config: NumberFieldConfig): FormlyFieldConfig {\n const { key, min, max, step, enforceStep, inputType: type = 'number', materialFormField } = config;\n const parsers = numberFieldTransformParser(config);\n\n const validators: ValidatorFn[] = [];\n\n if (step && enforceStep) {\n validators.push(isDivisibleBy(step));\n }\n\n return formlyField({\n key,\n type: 'input',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n type,\n min,\n max,\n step\n }),\n ...validatorsForFieldConfig({\n validators\n }),\n parsers\n });\n}\n\n// MARK: Number Slider\nexport interface NumberSliderFieldConfig extends NumberFieldConfig {\n /**\n * Max value. Required for the slider.\n */\n readonly max: number;\n /**\n * Whether or not to show the thumb label while sliding.\n *\n * Defaults to true.\n *\n * Corresponds to \"discrete\" in Material.\n */\n readonly thumbLabel?: boolean;\n /**\n * Whether or not to invert the selection line.\n */\n readonly invertSelectionColoring?: boolean;\n /**\n * Tick interval. If not provided defaults to the step value, if provided. If false, the ticks are disabled.\n *\n * The tick interval is the number of \"steps\" to show between ticks.\n *\n * For example, a tick interval of 5 show a tick every 5 steps. If steps are 10, it will show a tick at every number divisible by 50 (5 * 10).\n */\n readonly tickInterval?: false | number;\n /**\n * Custom display with function for the thumbLabel.\n */\n readonly displayWith?: (value: number) => string;\n}\n\n/**\n * Creates a Formly field configuration for a Material slider input.\n *\n * @param config - Slider field configuration including max (required), thumb label, and tick interval\n * @returns A validated {@link FormlyFieldConfig} with type `'slider'`\n *\n * @example\n * ```typescript\n * const field = numberSliderField({ key: 'rating', label: 'Rating', min: 0, max: 10, step: 1 });\n * ```\n */\nexport function numberSliderField(config: NumberSliderFieldConfig): FormlyFieldConfig {\n const { key, min, max, step, enforceStep, inputType: type = 'number', materialFormField, thumbLabel: inputThumbLabel, tickInterval: inputTickInterval, invertSelectionColoring: invertedSelectionColoring = false, displayWith } = config;\n const parsers = numberFieldTransformParser(config);\n\n const validators: ValidatorFn[] = [];\n let tickIntervalFromSteps: number | undefined;\n\n if (step) {\n tickIntervalFromSteps = 1;\n\n if (enforceStep) {\n validators.push(isDivisibleBy(step));\n }\n }\n\n const tickInterval: number | undefined = inputTickInterval === false ? undefined : (inputTickInterval ?? tickIntervalFromSteps ?? undefined);\n return formlyField({\n key,\n type: 'slider',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n type,\n min,\n max,\n step,\n inverted: invertedSelectionColoring,\n discrete: inputThumbLabel ?? true,\n showTickMarks: Boolean(tickInterval),\n tickInterval,\n displayWith\n }),\n ...validatorsForFieldConfig({\n validators\n }),\n parsers\n });\n}\n\n// MARK: Dollar Amount Field\n/** Configuration for a dollar amount field, which enforces cent-level precision. */\nexport type DollarAmountFieldConfig = Omit<NumberFieldConfig, 'roundToStep' | 'precision'>;\n\n/**\n * Creates a number field pre-configured for dollar amount input with cent-level precision.\n *\n * @param config - Number field configuration (precision is overridden to dollar amount precision)\n * @returns A {@link FormlyFieldConfig} for dollar amount input\n *\n * @example\n * ```typescript\n * const field = dollarAmountField({ key: 'price', label: 'Price', min: 0, required: true });\n * ```\n */\nexport function dollarAmountField(config: DollarAmountFieldConfig) {\n return numberField({ ...config, transform: { ...config.transform, precision: config.transform?.precision ?? DOLLAR_AMOUNT_PRECISION } }); // TODO: Add wrapper addon, addonLeft: { text: '$' }\n}\n","import { FormlyMaterialModule } from '@ngx-formly/material';\nimport { FormlyMatSliderModule } from '@ngx-formly/material/slider';\nimport { NgModule } from '@angular/core';\n\nconst importsAndExports = [FormlyMaterialModule, FormlyMatSliderModule];\n\n/** Provides Formly Material number input and slider support. */\n@NgModule({\n imports: importsAndExports,\n exports: importsAndExports\n})\nexport class DbxFormFormlyNumberFieldModule {}\n","import { Component, type OnInit, type OnDestroy, ChangeDetectionStrategy } from '@angular/core';\nimport { FieldType } from '@ngx-formly/material'; // extend FieldType from Material, not core!\nimport { type FieldTypeConfig, type FormlyFieldProps } from '@ngx-formly/core';\nimport { isPhoneExtension } from '../../../../validator/phone';\nimport { type E164PhoneNumber, type E164PhoneNumberExtensionPair, type Maybe, e164PhoneNumberExtensionPair, e164PhoneNumberFromE164PhoneNumberExtensionPair, objectHasNoKeys } from '@dereekb/util';\nimport { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { SubscriptionObject } from '@dereekb/rxjs';\nimport { combineLatest, distinctUntilChanged, map, startWith } from 'rxjs';\n\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\nimport { FormlyMatFormFieldModule } from '@ngx-formly/material/form-field';\nimport { NgxMatInputTelComponent } from 'ngx-mat-input-tel';\n\n/**\n * Formly field props for the international phone number component.\n */\nexport interface InternationalPhoneFormlyFieldProps extends FormlyFieldProps {\n /** ISO country codes for countries shown first in the dropdown. */\n readonly preferredCountries?: Maybe<string[]>;\n /** ISO country codes to restrict the dropdown to. */\n readonly onlyCountries?: Maybe<string[]>;\n /**\n * Whether or not to enable the search feature. True by default.\n */\n readonly enableSearch?: boolean;\n /**\n * Whether or not to allow adding an extension. False by default.\n */\n readonly allowExtension?: boolean;\n}\n\n/** Default preferred countries shown at the top of the phone country dropdown. */\nexport const DEFAULT_PREFERRED_COUNTRIES = ['us'];\n\n/**\n * Formly custom field type for international phone number input with optional extension support.\n *\n * Uses ngx-mat-input-tel for the country-aware phone input and manages E.164 phone number\n * formatting. Supports splitting phone + extension pairs for storage and display.\n *\n * Registered as Formly type `'intphone'`.\n */\n@Component({\n templateUrl: 'phone.field.component.html',\n imports: [MatInputModule, MatFormFieldModule, FormsModule, ReactiveFormsModule, MatIconModule, FlexLayoutModule, FormlyMatFormFieldModule, NgxMatInputTelComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxPhoneFieldComponent extends FieldType<FieldTypeConfig<InternationalPhoneFormlyFieldProps>> implements OnInit, OnDestroy {\n readonly inputSync = new SubscriptionObject();\n readonly outputSync = new SubscriptionObject();\n readonly extensionErrorSync = new SubscriptionObject();\n readonly phoneErrorSync = new SubscriptionObject();\n\n readonly phoneCtrl = new FormControl<string>('');\n readonly extensionCtrl = new FormControl<string>('', {\n validators: [isPhoneExtension()]\n });\n\n readonly inputFormGroup = new FormGroup({\n phone: this.phoneCtrl,\n extension: this.extensionCtrl\n });\n\n get enableSearch(): boolean {\n return this.props.enableSearch ?? true;\n }\n\n get preferredCountries(): string[] {\n return this.props.preferredCountries ?? DEFAULT_PREFERRED_COUNTRIES;\n }\n\n get onlyCountries(): string[] {\n return this.props.onlyCountries ?? [];\n }\n\n get allowExtension(): boolean {\n return this.props.allowExtension ?? false;\n }\n\n ngOnInit(): void {\n this.inputSync.subscription = this.formControl.valueChanges.pipe(startWith(this.formControl.value), distinctUntilChanged()).subscribe((inputValue) => {\n let phone: Maybe<string>;\n let extension: Maybe<string>;\n\n if (inputValue) {\n const pair = e164PhoneNumberExtensionPair(inputValue);\n phone = pair.number;\n extension = pair.extension;\n }\n\n // do not clear/reset if phone is undefined and the phone value is currently null\n if (phone || (!phone && this.phoneCtrl.value !== null)) {\n this.phoneCtrl.setValue(phone || '');\n this.extensionCtrl.setValue(extension || '');\n }\n });\n\n this.outputSync.subscription = combineLatest([this.phoneCtrl.valueChanges.pipe(distinctUntilChanged()), this.extensionCtrl.valueChanges.pipe(startWith(this.extensionCtrl.value), distinctUntilChanged())])\n .pipe(\n map(([phone, extension]) => {\n if (phone) {\n if (this.allowExtension) {\n return e164PhoneNumberFromE164PhoneNumberExtensionPair({\n number: phone as E164PhoneNumber,\n extension\n } as E164PhoneNumberExtensionPair);\n } else {\n return phone;\n }\n } else {\n return undefined;\n }\n }),\n distinctUntilChanged()\n )\n .subscribe((x) => {\n this.formControl.setValue(x);\n });\n\n /*\n * The phoneCtrl's errors are being used to drive the error matcher for this. Sync any invalid states with errors to phoneCtrl.\n * PhoneCtrl updates when the input is updated so it works.\n */\n this.extensionErrorSync.subscription = this.extensionCtrl.statusChanges.subscribe((x) => {\n if (x === 'INVALID') {\n this.phoneCtrl.setErrors(this.formControl.errors, { emitEvent: true });\n }\n });\n\n // sync any phoneCtrl errors with the errors of the form control.\n this.phoneErrorSync.subscription = this.inputFormGroup.statusChanges.subscribe((x) => {\n const errors = { ...this.phoneCtrl.errors, ...this.extensionCtrl.errors };\n this.formControl.setErrors(objectHasNoKeys(errors) ? null : errors, { emitEvent: true });\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this.inputSync.destroy();\n this.outputSync.destroy();\n this.extensionErrorSync.destroy();\n this.phoneErrorSync.destroy();\n }\n}\n","<div class=\"dbx-form-phone-field\" [formGroup]=\"inputFormGroup\">\n <ngx-mat-input-tel name=\"phone\" class=\"dbx-form-phone-field-phone-content\" [required]=\"required\" [enableSearch]=\"enableSearch\" [preferredCountries]=\"preferredCountries\" [enablePlaceholder]=\"false\" [formControl]=\"phoneCtrl\"></ngx-mat-input-tel>\n @if (allowExtension) {\n <div class=\"dbx-form-phone-field-extension-content\">\n <span class=\"dbx-hint dbx-button-spacer\">Ext.</span>\n <input name=\"phone-extension\" class=\"dbx-form-phone-field-extension-input\" placeholder=\"123\" minlength=\"0\" maxlength=\"6\" #extensionInput [formControl]=\"extensionCtrl\" />\n </div>\n }\n</div>\n","import { NgModule } from '@angular/core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxPhoneFieldComponent } from './phone.field.component';\n\nconst importsAndExports = [DbxPhoneFieldComponent];\n\n/** Registers the `intphone` Formly field type for international phone number input. */\n@NgModule({\n imports: [\n ...importsAndExports,\n FormlyModule.forChild({\n types: [{ name: 'intphone', component: DbxPhoneFieldComponent, wrappers: ['form-field'] }]\n })\n ],\n exports: importsAndExports\n})\nexport class DbxFormFormlyPhoneFieldModule {}\n","import { concatArrays, mapMaybeFunction, transformStringFunction, type TransformStringFunctionConfig, type TransformStringFunctionConfigRef } from '@dereekb/util';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type AttributesFieldConfig, type LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig, type DescriptionFieldConfig, type FormlyValueParser, type FieldConfigParsersRef, type MaterialFormFieldConfig } from '../../field';\n\n/**\n * Configuration for minimum and maximum text length constraints.\n */\nexport interface TextFieldLengthConfig {\n minLength?: number;\n maxLength?: number;\n}\n\n/**\n * Configuration for regex pattern validation on a text field.\n */\nexport interface TextFieldPatternConfig {\n pattern?: string | RegExp;\n}\n\n/**\n * HTML input type for a text field.\n */\nexport type TextFieldInputType = 'text' | 'password' | 'email';\n\n/**\n * Full configuration for a single-line text input field.\n *\n * Combines labeling, validation (pattern, length), string transformation,\n * and Material form field styling into one config object.\n */\nexport interface TextFieldConfig extends LabeledFieldConfig, DescriptionFieldConfig, TextFieldPatternConfig, TextFieldLengthConfig, AttributesFieldConfig, Partial<TransformStringFunctionConfigRef>, MaterialFormFieldConfig {\n /** HTML input type. Defaults to `'text'`. */\n inputType?: TextFieldInputType;\n /** String transformation applied as a value parser (e.g., trim, uppercase). */\n transform?: TransformStringFunctionConfig;\n}\n\n/**\n * Builds an array of value parsers for a text field, incorporating any configured\n * string transformation (e.g., trim, lowercase) as a parser prepended to existing parsers.\n *\n * @param config - Parser and transform configuration\n * @returns Array of value parsers, or undefined if none configured\n *\n * @example\n * ```typescript\n * const parsers = textFieldTransformParser({ transform: { trim: true, toLowercase: true } });\n * ```\n */\nexport function textFieldTransformParser(config: Partial<FieldConfigParsersRef> & Partial<TransformStringFunctionConfigRef>) {\n const { parsers: inputParsers, transform } = config;\n let parsers: FormlyValueParser[] | undefined;\n\n if (inputParsers) {\n parsers = inputParsers;\n }\n\n if (transform) {\n const transformParser: FormlyValueParser = mapMaybeFunction(transformStringFunction(transform));\n parsers = concatArrays([transformParser], parsers);\n }\n\n return parsers;\n}\n\n/**\n * Creates a Formly field configuration for a single-line text input.\n *\n * @param config - Text field configuration including key, label, validation, and transform options\n * @returns A validated {@link FormlyFieldConfig} with type `'input'`\n *\n * @example\n * ```typescript\n * const field = textField({ key: 'username', label: 'Username', maxLength: 50, required: true });\n * ```\n */\nexport function textField(config: TextFieldConfig): FormlyFieldConfig {\n const { transform, key, pattern, minLength, maxLength, inputType: type = 'text', materialFormField } = config;\n const parsers = textFieldTransformParser(config);\n\n return formlyField({\n key,\n type: 'input',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n type,\n minLength,\n maxLength,\n pattern\n }),\n parsers\n });\n}\n\n/**\n * Configuration for a multi-line textarea input field.\n */\nexport interface TextAreaFieldConfig extends LabeledFieldConfig, DescriptionFieldConfig, TextFieldPatternConfig, TextFieldLengthConfig, AttributesFieldConfig, Partial<TransformStringFunctionConfigRef>, MaterialFormFieldConfig {\n /** Number of visible text rows. Defaults to 3. */\n rows?: number;\n}\n\n/**\n * Creates a Formly field configuration for a multi-line textarea input.\n *\n * @param config - Textarea field configuration including key, label, rows, and validation options\n * @returns A validated {@link FormlyFieldConfig} with type `'textarea'`\n *\n * @example\n * ```typescript\n * const field = textAreaField({ key: 'bio', label: 'Biography', rows: 5, maxLength: 500 });\n * ```\n */\nexport function textAreaField(config: TextAreaFieldConfig): FormlyFieldConfig {\n const { key, rows = 3, pattern, minLength, maxLength, materialFormField } = config;\n const parsers = textFieldTransformParser(config);\n\n return formlyField({\n key,\n type: 'textarea',\n ...propsAndConfigForFieldConfig(config, {\n ...materialFormField,\n rows,\n minLength,\n maxLength,\n pattern\n }),\n parsers\n });\n}\n","import { type DbxFormSectionConfig } from '../../wrapper/section.wrapper.component';\nimport { sectionWrapper, flexLayoutWrapper } from '../../wrapper/wrapper';\nimport { textField, type TextFieldConfig } from '../text/text.field';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig, validatorsForFieldConfig } from '../../field';\nimport { type InternationalPhoneFormlyFieldProps } from './phone.field.component';\nimport { repeatArrayField, type RepeatArrayFieldConfig } from '../array/array.field';\nimport { isE164PhoneNumber } from '../../../../validator/phone';\n\n/**\n * Configuration for an international phone number input field.\n */\nexport interface InternationalPhoneFieldConfig extends LabeledFieldConfig, InternationalPhoneFormlyFieldProps {}\n\n/**\n * Creates a Formly field configuration for an international phone number input\n * with E.164 validation.\n *\n * @param config - Optional overrides; defaults to key `'phone'`, label `'Phone Number'`\n * @returns A validated {@link FormlyFieldConfig} with type `'intphone'`\n *\n * @example\n * ```typescript\n * const field = phoneField({ preferredCountries: ['us', 'ca'], required: true });\n * ```\n */\nexport function phoneField(config: Partial<InternationalPhoneFieldConfig> = {}): FormlyFieldConfig<InternationalPhoneFormlyFieldProps> {\n const { key = 'phone', label = 'Phone Number', preferredCountries, enableSearch, onlyCountries, allowExtension: inputAllowExtension } = config;\n const allowExtension = inputAllowExtension ?? false;\n\n const fieldConfig = formlyField({\n key,\n type: 'intphone',\n ...propsAndConfigForFieldConfig(config, {\n label,\n preferredCountries,\n onlyCountries,\n enableSearch,\n allowExtension\n }),\n ...validatorsForFieldConfig({\n validators: [isE164PhoneNumber(allowExtension)]\n })\n });\n\n return fieldConfig;\n}\n\n/**\n * Configuration for a phone number field paired with a text label field.\n */\nexport interface WrappedPhoneAndLabelFieldConfig {\n readonly phoneField?: Partial<InternationalPhoneFieldConfig>;\n readonly labelField?: TextFieldConfig;\n}\n\n/**\n * Creates a flex-layout-wrapped pair of a phone number field and a label text field,\n * useful for collecting named phone numbers (e.g., \"Work\", \"Home\").\n *\n * @param config - Optional phone and label field configurations\n * @returns A flex-layout-wrapped {@link FormlyFieldConfig}\n *\n * @example\n * ```typescript\n * const field = wrappedPhoneAndLabelField({ phoneField: { required: true } });\n * ```\n */\nexport function wrappedPhoneAndLabelField({ phoneField: phone, labelField: label }: WrappedPhoneAndLabelFieldConfig = {}): FormlyFieldConfig {\n return flexLayoutWrapper(\n [\n {\n field: phoneField(phone),\n size: 2\n },\n {\n field: textField({\n key: 'label',\n label: 'Label',\n autocomplete: 'phone-label',\n ...label\n }),\n size: 4\n }\n ],\n { relative: true }\n );\n}\n\n/**\n * Configuration for a section-wrapped phone + label field pair.\n */\nexport interface PhoneAndLabelFieldSectionConfig extends DbxFormSectionConfig, WrappedPhoneAndLabelFieldConfig {\n readonly key?: string;\n}\n\n/**\n * Creates a section-wrapped phone + label field pair with a configurable header.\n *\n * @param config - Optional overrides; defaults to header `'Phone Number'`\n * @returns A section-wrapped {@link FormlyFieldConfig}\n *\n * @example\n * ```typescript\n * const field = phoneAndLabelSectionField({ header: 'Contact Phone' });\n * ```\n */\nexport function phoneAndLabelSectionField({ key, header = 'Phone Number', hint, phoneField, labelField }: PhoneAndLabelFieldSectionConfig = {}): FormlyFieldConfig {\n return sectionWrapper(\n {\n key,\n fieldGroup: [wrappedPhoneAndLabelField({ phoneField, labelField })]\n },\n {\n header,\n hint\n }\n );\n}\n\n/**\n * Configuration for a repeatable list of phone + label field pairs.\n */\nexport interface PhoneListFieldConfig extends Omit<RepeatArrayFieldConfig, 'repeatFieldGroup'> {\n phoneAndLabel?: WrappedPhoneAndLabelFieldConfig;\n repeatFieldGroup?: FormlyFieldConfig[];\n}\n\n/**\n * Creates a repeat-array field that allows the user to add multiple phone number entries.\n *\n * @param repeatConfig - Optional overrides; defaults to key `'phones'`, label `'Phone Numbers'`\n * @returns A {@link FormlyFieldConfig} with repeat-array type for multiple phone entries\n *\n * @example\n * ```typescript\n * const field = phoneListField({ phoneAndLabel: { phoneField: { preferredCountries: ['us'] } } });\n * ```\n */\nexport function phoneListField(repeatConfig: Partial<PhoneListFieldConfig> = {}): FormlyFieldConfig {\n const { key = 'phones', label = 'Phone Numbers', addText = 'Add Phone Number', removeText = 'Remove Phone Number', repeatFieldGroup, phoneAndLabel } = repeatConfig;\n\n return repeatArrayField({\n ...repeatConfig,\n key,\n label,\n addText,\n removeText,\n repeatFieldGroup: repeatFieldGroup ?? [wrappedPhoneAndLabelField(phoneAndLabel)]\n });\n}\n","import { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { Validators, type AbstractControl } from '@angular/forms';\nimport { type TextFieldConfig, textField } from './text.field';\nimport { type LabeledFieldConfig, type DescriptionFieldConfig, validatorsForFieldConfig } from '../../field';\nimport { LAT_LNG_PATTERN, US_STATE_CODE_STRING_REGEX, ZIP_CODE_STRING_REGEX } from '@dereekb/util';\nimport { ADDRESS_CITY_MAX_LENGTH, ADDRESS_STATE_CODE_MAX_LENGTH, ADDRESS_STATE_MAX_LENGTH, ADDRESS_COUNTRY_MAX_LENGTH, ADDRESS_ZIP_MAX_LENGTH } from '@dereekb/model';\n\n/** Maximum character length for a phone label field. */\nexport const PHONE_LABEL_MAX_LENGTH = 100;\n\n/** Maximum character length for a generic label string field. */\nexport const LABEL_STRING_MAX_LENGTH = 100;\n/** Maximum character length for a search string field. */\nexport const SEARCH_STRING_MAX_LENGTH = 100;\n\n// MARK: Name Field\n/**\n * Creates a text field pre-configured for a person's full name.\n *\n * @param config - Optional overrides; defaults to key `'name'`, label `'Name'`\n * @returns A {@link FormlyFieldConfig} for name input\n *\n * @example\n * ```typescript\n * const field = nameField({ required: true });\n * ```\n */\nexport function nameField(config: Partial<TextFieldConfig> = {}): FormlyFieldConfig {\n const { key = 'name', label = 'Name', placeholder = 'John Doe', required = false, minLength, maxLength, attributes } = config;\n\n return textField({\n ...config,\n key,\n label,\n placeholder,\n required,\n minLength,\n maxLength,\n attributes\n });\n}\n\n// MARK: Email Field\n/**\n * Configuration for an email address input field.\n */\nexport interface EmailFieldConfig extends Partial<LabeledFieldConfig>, DescriptionFieldConfig {\n readonly rows?: number;\n}\n\n/**\n * Creates a text field pre-configured for email address input with built-in email validation.\n *\n * @param config - Optional overrides; defaults to key `'email'`, label `'Email Address'`\n * @returns A {@link FormlyFieldConfig} with email validation\n *\n * @example\n * ```typescript\n * const field = emailField({ required: true });\n * ```\n */\nexport function emailField(config: EmailFieldConfig = {}): FormlyFieldConfig {\n const { key = 'email', label = 'Email Address', placeholder = 'you@example.com' } = config;\n const emailFieldConfig = textField({\n ...config,\n key,\n label,\n placeholder,\n inputType: 'email'\n });\n\n emailFieldConfig.validators = {\n email: {\n expression: (c: AbstractControl) => !Validators.email(c),\n message: () => `Not a valid email address.`\n }\n };\n\n return emailFieldConfig;\n}\n\n// MARK: City Field\n/** Configuration for a city input field. */\nexport type CityFieldConfig = Partial<TextFieldConfig>;\n\n/**\n * Creates a text field pre-configured for city name input with autocomplete support.\n *\n * @param config - Optional overrides; defaults to key `'city'`, label `'City'`\n * @returns A {@link FormlyFieldConfig} for city input\n *\n * @example\n * ```typescript\n * const field = cityField({ required: true });\n * ```\n */\nexport function cityField(config: CityFieldConfig = {}): FormlyFieldConfig {\n const { key = 'city', placeholder = '', label = 'City', autocomplete = 'city', maxLength = ADDRESS_CITY_MAX_LENGTH, required = false } = config;\n return textField({\n ...config,\n key,\n placeholder,\n label,\n autocomplete,\n required,\n maxLength\n });\n}\n\n// MARK: State Field\n/**\n * Configuration for a US state input field.\n */\nexport interface StateFieldConfig extends Partial<TextFieldConfig> {\n /** When true, validates and formats as a 2-letter state code (e.g., `'CA'`). */\n readonly asCode?: boolean;\n}\n\n/**\n * Creates a text field pre-configured for US state input with optional state code validation.\n *\n * When `asCode` is true, enforces the 2-letter state code pattern and auto-uppercases input.\n *\n * @param config - Optional overrides; defaults to key `'state'`, label `'State'`\n * @returns A {@link FormlyFieldConfig} for state input\n *\n * @example\n * ```typescript\n * const field = stateField({ asCode: true, required: true });\n * ```\n */\nexport function stateField(config: StateFieldConfig = {}): FormlyFieldConfig {\n const { asCode = false, pattern = asCode ? US_STATE_CODE_STRING_REGEX : undefined, key = 'state', placeholder = '', label = 'State', autocomplete = 'state', maxLength = asCode ? ADDRESS_STATE_CODE_MAX_LENGTH : ADDRESS_STATE_MAX_LENGTH, transform, required = false } = config;\n return textField({\n ...config,\n key,\n placeholder,\n label,\n pattern,\n autocomplete,\n required,\n maxLength,\n transform: {\n ...transform,\n toUppercase: asCode || transform?.toUppercase\n }\n });\n}\n\n// MARK: Country Field\n/** Configuration for a country input field. */\nexport type CountryFieldConfig = Partial<TextFieldConfig>;\n\n/**\n * Creates a text field pre-configured for country name input with autocomplete support.\n *\n * @param config - Optional overrides; defaults to key `'country'`, label `'Country'`\n * @returns A {@link FormlyFieldConfig} for country input\n *\n * @example\n * ```typescript\n * const field = countryField({ required: true });\n * ```\n */\nexport function countryField(config: CountryFieldConfig = {}): FormlyFieldConfig {\n const { key = 'country', placeholder = '', label = 'Country', autocomplete = 'country', maxLength = ADDRESS_COUNTRY_MAX_LENGTH, required = false } = config;\n return textField({\n ...config,\n key,\n placeholder,\n label,\n autocomplete,\n required,\n maxLength\n });\n}\n\n// MARK: Zip Code Field\n/** Configuration for a zip/postal code input field. */\nexport type ZipCodeFieldConfig = Partial<TextFieldConfig>;\n\n/**\n * Creates a text field pre-configured for US zip code input with pattern validation.\n *\n * @param config - Optional overrides; defaults to key `'zip'`, label `'Zip Code'`\n * @returns A {@link FormlyFieldConfig} for zip code input\n *\n * @example\n * ```typescript\n * const field = zipCodeField({ required: true });\n * ```\n */\nexport function zipCodeField(config: ZipCodeFieldConfig = {}): FormlyFieldConfig {\n const { key = 'zip', placeholder = '', label = 'Zip Code', autocomplete = 'postal-code', pattern = ZIP_CODE_STRING_REGEX, maxLength = ADDRESS_ZIP_MAX_LENGTH, required = false } = config;\n return textField({\n ...config,\n key,\n placeholder,\n label,\n pattern,\n autocomplete,\n required,\n maxLength\n });\n}\n\n// MARK: LatLng Text Field\n/** Default placeholder text for a latitude/longitude text field. */\nexport const DEFAULT_LAT_LNG_TEXT_FIELD_PLACEHOLDER = '12.345,-67.8910';\n/** Default validation error message for invalid coordinate input. */\nexport const DEFAULT_LAT_LNG_TEXT_FIELD_PATTERN_MESSAGE = `Invalid/unknown coordinates`;\n\n/**\n * Creates a text field pre-configured for latitude/longitude coordinate input with pattern validation.\n *\n * @param config - Optional overrides; defaults to key `'latLng'`\n * @returns A {@link FormlyFieldConfig} for coordinate input\n *\n * @example\n * ```typescript\n * const field = latLngTextField();\n * ```\n */\nexport function latLngTextField({ key = 'latLng' }: Partial<TextFieldConfig> = {}): FormlyFieldConfig {\n const field = {\n ...textField({\n key,\n label: 'Coordinates',\n placeholder: DEFAULT_LAT_LNG_TEXT_FIELD_PLACEHOLDER,\n pattern: LAT_LNG_PATTERN,\n autocomplete: false\n }),\n ...validatorsForFieldConfig({\n messages: {\n pattern: DEFAULT_LAT_LNG_TEXT_FIELD_PATTERN_MESSAGE\n }\n })\n };\n\n return field;\n}\n","import { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { textField, type TextFieldConfig } from './text.field';\nimport { cityField, type CityFieldConfig, countryField, type CountryFieldConfig, stateField, type StateFieldConfig, zipCodeField, type ZipCodeFieldConfig } from './text.additional.field';\nimport { flexLayoutWrapper, sectionWrapper } from '../../wrapper/wrapper';\nimport { type FieldConfig } from '../../field';\nimport { repeatArrayField } from '../array/array.field';\nimport { type DbxFormSectionConfig } from '../../wrapper/section.wrapper.component';\nimport { ADDRESS_LINE_MAX_LENGTH } from '@dereekb/model';\n\n// MARK: Address Config\n/**\n * Configuration for a group of address-related form fields (lines, city, state, zip, country).\n */\nexport interface AddressFormlyFieldsConfig {\n readonly line1Field?: CityFieldConfig;\n readonly line2Field?: CityFieldConfig;\n readonly cityField?: CityFieldConfig;\n readonly stateField?: StateFieldConfig;\n readonly zipCodeField?: ZipCodeFieldConfig;\n readonly countryField?: CountryFieldConfig;\n /**\n * Whether or not to make required fields required.\n *\n * True by default.\n */\n readonly required?: boolean;\n /**\n * Whether or not to include the second address line.\n *\n * True by default.\n */\n readonly includeLine2?: boolean;\n /**\n * Whether or not to include the country.\n *\n * True by default.\n */\n readonly includeCountry?: boolean;\n}\n\n/**\n * Configuration for a single address line field.\n */\nexport interface AddressLineFieldConfig extends Partial<TextFieldConfig> {\n /** Address line number: 0 for single \"Street\" line, 1 for \"Line 1\", 2 for \"Line 2\". */\n readonly line?: 0 | 1 | 2;\n}\n\n/**\n * Creates a text field for a single address line with autocomplete support.\n *\n * @param config - Optional overrides; line number determines key and label\n * @returns A {@link FormlyFieldConfig} for address line input\n *\n * @example\n * ```typescript\n * const line1 = addressLineField({ line: 1, required: true });\n * const line2 = addressLineField({ line: 2 });\n * ```\n */\nexport function addressLineField(config: AddressLineFieldConfig = {}): FormlyFieldConfig {\n const { line = 1 } = config;\n const lineCode = Math.max(1, line); // minimum of line 1\n\n const { key = `line${lineCode}`, placeholder = '', label = line ? `Line ${line}` : 'Street', autocomplete = `address-line${lineCode}`, maxLength = ADDRESS_LINE_MAX_LENGTH, required = false } = config;\n return textField({\n ...config,\n key,\n placeholder,\n label,\n autocomplete,\n required,\n maxLength\n });\n}\n\n/**\n * Creates the full set of address form fields (lines, city, state, zip, and optionally country)\n * arranged in a flex layout.\n *\n * @param config - Address fields configuration\n * @returns Array of {@link FormlyFieldConfig} for a complete address form section\n *\n * @example\n * ```typescript\n * const fields = addressFormlyFields({ required: true, includeCountry: false });\n * ```\n */\nexport function addressFormlyFields(config: AddressFormlyFieldsConfig = {}): FormlyFieldConfig[] {\n const { required = true, includeLine2 = true, includeCountry = true } = config;\n\n const singleLineFields = [\n {\n field: cityField({ required, ...config.cityField })\n },\n {\n field: stateField({ required, ...config.stateField })\n },\n {\n field: zipCodeField({ required, ...config.zipCodeField })\n }\n ];\n\n if (includeCountry) {\n singleLineFields.push({\n field: countryField({ required, ...config.countryField })\n });\n }\n\n let lines: FormlyFieldConfig[];\n\n if (includeLine2) {\n lines = [addressLineField({ required, ...config.line1Field, line: 1 }), addressLineField({ ...config.line2Field, line: 2 })];\n } else {\n lines = [addressLineField({ required, ...config.line1Field, line: 0 })];\n }\n\n return [...lines, flexLayoutWrapper(singleLineFields, { size: 1, relative: true })];\n}\n\n// MARK: Address\n/**\n * Configuration for a complete address section field wrapped in a form section.\n */\nexport interface AddressFieldConfig extends Readonly<FieldConfig>, DbxFormSectionConfig, AddressFormlyFieldsConfig {}\n\n/**\n * Creates a section-wrapped address field group containing all address sub-fields.\n *\n * @param config - Optional overrides; defaults to key `'address'`, header `'Address'`\n * @returns A section-wrapped {@link FormlyFieldConfig} containing address fields\n *\n * @example\n * ```typescript\n * const field = addressField({ required: true, includeCountry: true });\n * ```\n */\nexport function addressField(config: Partial<AddressFieldConfig> = {}): FormlyFieldConfig {\n const { key = 'address', header = 'Address', hint, required = false } = config;\n\n return sectionWrapper(\n {\n ...config,\n key,\n fieldGroup: addressFormlyFields(config),\n required\n },\n {\n ...config,\n header,\n hint\n }\n );\n}\n\n// MARK: Address List\n/**\n * Configuration for a repeatable list of address field groups.\n */\nexport interface AddressListFieldConfig extends Readonly<FieldConfig>, AddressFormlyFieldsConfig {\n /** Maximum number of addresses allowed. Defaults to 6. */\n readonly maxAddresses?: number;\n}\n\n/**\n * Creates a repeat-array field that allows the user to add multiple addresses.\n *\n * @param config - Optional overrides; defaults to key `'addresses'`, max 6 entries\n * @returns A {@link FormlyFieldConfig} with repeat-array type for multiple addresses\n *\n * @example\n * ```typescript\n * const field = addressListField({ maxAddresses: 3, required: true });\n * ```\n */\nexport function addressListField(config: Partial<AddressListFieldConfig> = {}): FormlyFieldConfig {\n const { key = 'addresses', required = false, maxAddresses = 6 } = config;\n return repeatArrayField({\n key,\n required,\n label: 'Addresses',\n labelForField: 'Address',\n addText: 'Add Address',\n removeText: 'Remove Address',\n maxLength: maxAddresses,\n repeatFieldGroup: addressFormlyFields(config)\n });\n}\n","import { FormlyMaterialModule } from '@ngx-formly/material';\nimport { NgModule } from '@angular/core';\nimport { DbxFormFormlyWrapperModule } from '../../wrapper/wrapper.module';\nimport { FormlyMatInputModule } from '@ngx-formly/material/input';\nimport { DbxFormFormlyArrayFieldModule } from '../array/array.field.module';\n\nconst importsAndExports = [DbxFormFormlyArrayFieldModule, FormlyMaterialModule, FormlyMatInputModule, DbxFormFormlyWrapperModule];\n\n/** Aggregates Formly Material input, array field, and wrapper modules for text field support. */\n@NgModule({\n imports: importsAndExports,\n exports: importsAndExports\n})\nexport class DbxFormFormlyTextFieldModule {}\n","import { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type LabeledFieldConfig, formlyField } from '../field';\n\n/**\n * Configuration for a hidden form field that is not visible to the user.\n */\nexport type HiddenFieldConfig = Pick<LabeledFieldConfig, 'key' | 'required'>;\n\n/**\n * Creates a Formly field configuration for a hidden field with no visual representation.\n *\n * Useful for passing programmatic values through the form model without user interaction.\n *\n * @param config - Key and optional required flag\n * @returns A validated {@link FormlyFieldConfig} with no visible type\n *\n * @example\n * ```typescript\n * const field = hiddenField({ key: 'userId', required: true });\n * ```\n */\nexport function hiddenField({ key, required = false }: HiddenFieldConfig): FormlyFieldConfig {\n return formlyField({\n key,\n props: { required }\n });\n}\n","import { DbxFormFormlyTextEditorFieldModule } from './texteditor/texteditor.field.module';\nimport { NgModule } from '@angular/core';\nimport { DbxFormFormlyChecklistItemFieldModule } from './checklist/checklist.item.field.module';\nimport { DbxFormFormlyComponentFieldModule } from './component/component.field.module';\nimport { DbxFormFormlyWrapperModule } from './wrapper/wrapper.module';\n\nconst importsAndExports = [DbxFormFormlyChecklistItemFieldModule, DbxFormFormlyComponentFieldModule, DbxFormFormlyTextEditorFieldModule, DbxFormFormlyWrapperModule];\n\n/** Aggregates all custom Formly field type modules (checklist, component, texteditor) and wrappers. */\n@NgModule({\n imports: importsAndExports,\n exports: importsAndExports\n})\nexport class DbxFormFormlyFieldModule {}\n","import { type Maybe } from '@dereekb/util';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type MaterialFormFieldConfig, textField } from '../field';\n\nexport interface DbxFormSearchFormFieldsValue {\n readonly search: string;\n}\n\nexport interface DbxFormSearchFormFieldsConfig extends MaterialFormFieldConfig {\n readonly label?: string;\n readonly placeholder?: string;\n}\n\nexport function dbxFormSearchFormFields(config: Maybe<DbxFormSearchFormFieldsConfig>): FormlyFieldConfig[] {\n const { label, placeholder = 'Search', materialFormField } = config || {};\n\n return [\n textField({\n key: 'search',\n label,\n placeholder,\n autocomplete: false,\n materialFormField: {\n ...materialFormField,\n hideLabel: !label\n }\n })\n ];\n}\n","import { filterMaybe, type MaybeObservableOrValue, maybeValueFromObservableOrValue } from '@dereekb/rxjs';\nimport { type Observable, shareReplay, distinctUntilChanged } from 'rxjs';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type OnInit, Directive, inject, input, effect } from '@angular/core';\nimport { DbxFormlyContext } from './formly.context';\nimport { type Maybe } from '@dereekb/util';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { type DbxFormDisabledKey } from '../form/form';\nimport { cleanSubscription } from '@dereekb/dbx-core';\n\n/**\n * Abstract component for wrapping a DbxFormlyContext.\n *\n * The implementing component should use provideFormlyContext() to provide the DbxFormlyContext specific to this directive. The context is injected using only self.\n */\n@Directive()\nexport abstract class AbstractFormlyFormDirective<T> {\n readonly context = inject(DbxFormlyContext<T>, { self: true });\n\n readonly disabled = input<boolean>(false);\n\n protected readonly _disabledEffect = effect(() => this.context.setDisabled(undefined, this.disabled()));\n\n // Utility Functions\n getValue(): Observable<T> {\n return this.context.getValue();\n }\n\n setValue(value: Partial<T>): void {\n this.context.setValue(value);\n }\n\n resetForm(): void {\n this.context.resetForm();\n }\n\n clearValue(): void {\n this.setValue({});\n }\n\n setDisabled(key?: DbxFormDisabledKey, disabled?: boolean): void {\n this.context.setDisabled(key, disabled);\n }\n}\n\n/**\n * Abstract component for wrapping a form.\n */\n@Directive()\nexport abstract class AbstractSyncFormlyFormDirective<T> extends AbstractFormlyFormDirective<T> implements OnInit {\n abstract fields: FormlyFieldConfig[];\n\n ngOnInit(): void {\n this.context.fields = this.fields;\n }\n}\n\n/**\n * Abstract component for wrapping an asyncrhronously-configured form.\n */\n@Directive()\nexport abstract class AbstractAsyncFormlyFormDirective<T> extends AbstractFormlyFormDirective<T> implements OnInit {\n /**\n * Used to provide fields to the context.\n */\n abstract readonly fields$: Observable<Maybe<FormlyFieldConfig[]>>;\n\n protected readonly _fieldSub = cleanSubscription();\n\n ngOnInit(): void {\n // fields$ is only available after initialization.\n this._fieldSub.setSub(\n this.fields$.pipe(distinctUntilChanged()).subscribe((fields) => {\n this.context.fields = fields;\n })\n );\n }\n}\n\n@Directive()\nexport abstract class AbstractConfigAsyncFormlyFormDirective<T, C> extends AbstractAsyncFormlyFormDirective<T> {\n readonly config = input<MaybeObservableOrValue<C>>(undefined);\n\n readonly currentConfig$ = toObservable(this.config).pipe(maybeValueFromObservableOrValue());\n readonly config$ = this.currentConfig$.pipe(filterMaybe(), shareReplay(1));\n}\n","import { NgModule } from '@angular/core';\nimport { provideFormlyContext } from './formly.context';\nimport { DbxFormlyComponent } from './formly.form.component';\n\n/**\n * Default template for a view that extends AbstractFormlyFormDirective.\n */\nexport const DBX_FORMLY_FORM_COMPONENT_TEMPLATE = `<dbx-formly></dbx-formly>`;\n\n/**\n * Default providers for a view that extends AbstractFormlyFormDirective.\n */\nexport const dbxFormlyFormComponentProviders = provideFormlyContext;\n\nconst dbxFormlyFormComponentImports = [DbxFormlyComponent];\n\n/**\n * Default imports module for a view that extends AbstractFormlyFormDirective.\n */\n@NgModule({\n imports: dbxFormlyFormComponentImports,\n exports: dbxFormlyFormComponentImports\n})\nexport class DbxFormlyFormComponentImportsModule {}\n","import { Component, output } from '@angular/core';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { map, type Observable } from 'rxjs';\nimport { AbstractConfigAsyncFormlyFormDirective } from '../formly.directive';\nimport { dbxFormSearchFormFields, type DbxFormSearchFormFieldsConfig, type DbxFormSearchFormFieldsValue } from './form.form';\nimport { DbxFormlyFormComponentImportsModule, dbxFormlyFormComponentProviders } from '../formly.component.template';\nimport { DbxFormValueChangeDirective } from '../../form/io/form.change.directive';\n\n@Component({\n selector: 'dbx-form-search-form',\n template: `\n <dbx-formly (dbxFormValueChange)=\"searchChanged($event)\"></dbx-formly>\n `,\n providers: dbxFormlyFormComponentProviders(),\n imports: [DbxFormlyFormComponentImportsModule, DbxFormValueChangeDirective],\n standalone: true,\n host: {\n class: 'd-block dbx-form-search-form'\n }\n})\nexport class DbxFormSearchFormComponent extends AbstractConfigAsyncFormlyFormDirective<DbxFormSearchFormFieldsValue, DbxFormSearchFormFieldsConfig> {\n readonly search = output<string>();\n\n readonly fields$: Observable<FormlyFieldConfig[]> = this.currentConfig$.pipe(map(dbxFormSearchFormFields));\n\n searchChanged(value: DbxFormSearchFormFieldsValue) {\n this.search.emit(value.search ?? '');\n }\n}\n","import { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type FieldValueIsAvailableValidatorConfig, fieldValueIsAvailableValidator } from '../../validator/available';\nimport { textField, type TextFieldConfig } from '../field/value/text/text.field';\nimport { workingWrapper } from '../field/wrapper/wrapper';\n\n/**\n * Configuration for a text field that includes an async availability check.\n *\n * Extends {@link TextFieldConfig} with availability validation options, allowing consumers\n * to verify that a text value (e.g., a username) is available before submission.\n */\nexport interface TextAvailableFieldConfig extends TextFieldConfig, Omit<FieldValueIsAvailableValidatorConfig<string>, 'message'> {\n /**\n * Custom error message displayed when the value is not available.\n */\n readonly isNotAvailableErrorMessage?: string;\n}\n\n/**\n * Creates a text field with an async validator that checks whether the entered value is available.\n *\n * The field is wrapped in a working wrapper to display a loading indicator during the async check.\n *\n * @param config - Configuration for the text field and availability validation.\n * @returns A Formly field configuration with async availability validation.\n *\n * @example\n * ```ts\n * const usernameField = textIsAvailableField({\n * key: 'username',\n * label: 'Username',\n * isAvailable: (value) => checkUsernameAvailable(value),\n * isNotAvailableErrorMessage: 'Username is already taken'\n * });\n * ```\n */\nexport function textIsAvailableField(config: TextAvailableFieldConfig): FormlyFieldConfig {\n const field = textField(config);\n\n field.asyncValidators = {\n validation: [\n {\n expression: fieldValueIsAvailableValidator({\n ...config,\n message: config?.isNotAvailableErrorMessage\n })\n }\n ]\n };\n\n return workingWrapper(field, {});\n}\n","import { NgModule } from '@angular/core';\nimport { DbxFormFormlyTextFieldModule } from '../field/value/text/text.field.module';\nimport { DbxFormFormlyWrapperModule } from '../field/wrapper/wrapper.module';\n\nconst importsAndExports = [DbxFormFormlyTextFieldModule, DbxFormFormlyWrapperModule];\n\n/**\n * Angular module that provides the dependencies needed for the text availability field template.\n *\n * Imports and re-exports the text field and wrapper modules required by {@link textIsAvailableField}.\n */\n@NgModule({\n imports: importsAndExports,\n exports: importsAndExports\n})\nexport class DbxFormTextAvailableFieldModule {}\n","import { type TextFieldConfig, textField } from '../field/value/text/text.field';\nimport { type EmailFieldConfig, emailField } from '../field/value/text/text.additional.field';\nimport { fieldValuesAreEqualValidator } from '../../validator/field';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { capitalizeFirstLetter, type Maybe } from '@dereekb/util';\n\n/**\n * Convenience interface for the password parameters configuration for a TextPasswordField.\n */\nexport type TextPasswordFieldPasswordParameters = Partial<Pick<TextFieldConfig, 'maxLength' | 'minLength' | 'pattern'>>;\n\n/**\n * textPasswordField() configuration.\n */\nexport interface TextPasswordFieldConfig extends Omit<TextFieldConfig, 'inputType' | 'key'>, Partial<Pick<TextFieldConfig, 'key' | 'materialFormField'>> {}\n\n/**\n * Creates a simple text password field with the input type set to `'password'`.\n *\n * Defaults to the key `'password'` and label `'Password'` unless overridden.\n *\n * @param config - Optional configuration for the password field.\n * @returns A Formly field configuration for a password input.\n */\nexport function textPasswordField(config?: TextPasswordFieldConfig): FormlyFieldConfig {\n return textField({\n key: 'password',\n ...config,\n label: config?.label ?? 'Password',\n inputType: 'password',\n required: true\n });\n}\n\n/**\n * Creates a verify/confirm password field, typically used alongside a primary password field.\n *\n * Defaults to the key `'verifyPassword'` and label `'Verify Password'` unless overridden.\n *\n * @param config - Optional configuration for the verify password field.\n * @returns A Formly field configuration for a verify password input.\n */\nexport function textVerifyPasswordField(config?: TextPasswordFieldConfig): FormlyFieldConfig {\n return textPasswordField({\n key: 'verifyPassword',\n label: 'Verify Password',\n ...config,\n required: true\n });\n}\n\n/**\n * Configuration for a password field group that includes a verification (confirm) password field.\n */\nexport interface TextPasswordWithVerifyFieldConfig {\n /**\n * Optional configuration for the primary password field.\n */\n readonly password?: TextPasswordFieldConfig;\n /**\n * Optional configuration for the verify/confirm password field.\n */\n readonly verifyPassword?: TextPasswordFieldConfig;\n}\n\n/**\n * Creates a Formly field group containing a password field and a verify password field\n * with a cross-field validator that ensures both values match.\n *\n * @param config - Configuration for the password and verify password fields.\n * @returns A Formly field group configuration with password matching validation.\n */\nexport function textPasswordWithVerifyFieldGroup(config: TextPasswordWithVerifyFieldConfig): FormlyFieldConfig {\n const passwordFieldConfig = textPasswordField(config.password);\n const verifyPasswordFieldKey = config.verifyPassword?.key ?? `verify${capitalizeFirstLetter(String(passwordFieldConfig.key))}`;\n const verifyPasswordField = textVerifyPasswordField({\n ...config.password,\n ...config.verifyPassword,\n label: config.verifyPassword?.label ?? `Verify ${passwordFieldConfig.props?.label}`,\n key: verifyPasswordFieldKey\n });\n\n const validators = {\n validation: [\n {\n errorPath: verifyPasswordFieldKey,\n expression: fieldValuesAreEqualValidator({ keysFilter: [passwordFieldConfig.key, verifyPasswordField.key] as string[], message: 'The passwords do not match.' })\n }\n ]\n };\n\n const groupFieldConfig: FormlyFieldConfig = {\n validators,\n fieldGroup: [passwordFieldConfig, verifyPasswordField]\n };\n\n return groupFieldConfig;\n}\n\n/**\n * Configuration for the username field in a login form, supporting either email or text input.\n */\nexport interface UsernameLoginFieldUsernameConfig {\n /**\n * Configuration for an email-based username field.\n */\n readonly email?: Omit<EmailFieldConfig, 'key'>;\n /**\n * Configuration for a plain text username field.\n */\n readonly username?: Omit<TextFieldConfig, 'key'>;\n}\n\n/**\n * Input type for the username field configuration.\n *\n * Can be the string `'email'` or `'username'` for quick defaults, or a full {@link UsernameLoginFieldUsernameConfig} object for custom configuration.\n */\nexport type UsernameLoginFieldUsernameConfigInput = 'email' | 'username' | UsernameLoginFieldUsernameConfig;\n\n/**\n * usernamePasswordLoginFields() configuration.\n */\nexport interface UsernameLoginFieldsConfig {\n /**\n * Username field configuration. Use `'email'` or `'username'` for defaults, or provide a custom config.\n */\n readonly username: UsernameLoginFieldUsernameConfigInput;\n /**\n * Optional configuration for the password field.\n */\n readonly password?: TextPasswordFieldConfig;\n /**\n * Whether to include a verify password field, or a custom configuration for it.\n * Set to `true` for defaults, `false`/`undefined` to omit, or pass a config object.\n */\n readonly verifyPassword?: Maybe<boolean | TextPasswordFieldConfig>;\n}\n\n/**\n * Value type exported by usernameLoginFields()\n */\nexport interface DefaultUsernameLoginFieldsValue extends DefaultUsernameLoginFieldValue {\n readonly password: string;\n readonly verifyPassword?: string;\n}\n\n/**\n * Template for login field that takes in a username and password.\n *\n * @param param0\n * @returns\n */\nexport function usernamePasswordLoginFields({ username, password, verifyPassword }: UsernameLoginFieldsConfig): FormlyFieldConfig[] {\n const usernameField = usernameLoginField(username);\n const passwordField = verifyPassword ? textPasswordWithVerifyFieldGroup({ password, verifyPassword: verifyPassword === true ? undefined : verifyPassword }) : textPasswordField(password);\n\n return [usernameField, passwordField];\n}\n\n/**\n * Value type exported by usernameLoginField()\n */\nexport interface DefaultUsernameLoginFieldValue {\n readonly username: string;\n}\n\n/**\n * Creates a single username field for a login form. Supports email or plain text input\n * based on the provided configuration.\n *\n * @param username - Either `'email'`, `'username'`, or a full {@link UsernameLoginFieldUsernameConfig}.\n * @returns A Formly field configuration for the username input.\n */\nexport function usernameLoginField(username: UsernameLoginFieldUsernameConfigInput): FormlyFieldConfig {\n let usernameField: FormlyFieldConfig;\n let usernameFieldConfig: UsernameLoginFieldUsernameConfig = username as UsernameLoginFieldUsernameConfig;\n\n const defaultUsernameFieldConfig = { key: 'username', required: true };\n\n if (typeof username === 'string') {\n if (username === 'email') {\n usernameFieldConfig = {\n email: defaultUsernameFieldConfig\n };\n } else {\n usernameFieldConfig = {\n username: defaultUsernameFieldConfig\n };\n }\n }\n\n if (usernameFieldConfig.email) {\n usernameField = emailField({ ...usernameFieldConfig.email, ...defaultUsernameFieldConfig });\n } else {\n usernameField = textField({ ...usernameFieldConfig.username, ...defaultUsernameFieldConfig });\n }\n\n return usernameField;\n}\n","import { NgModule } from '@angular/core';\nimport { DbxFormFormlyTextFieldModule } from '../field/value/text/text.field.module';\n\nconst importsAndExports = [DbxFormFormlyTextFieldModule];\n\n/**\n * Angular module that provides the dependencies needed for login form field templates.\n *\n * Imports and re-exports the text field module required by the username/password login field functions.\n */\n@NgModule({\n imports: importsAndExports,\n exports: importsAndExports\n})\nexport class DbxFormLoginFieldModule {}\n","import { type TimezoneString } from '@dereekb/util';\nimport { allTimezoneInfos, searchTimezoneInfos, type TimezoneInfo, timezoneInfoForSystem } from '@dereekb/date';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type Observable, of } from 'rxjs';\nimport { type SearchableValueFieldStringSearchFn, type SearchableValueFieldValue, type SearchableValueFieldDisplayFn, type SearchableValueFieldDisplayValue } from '../field/selection/searchable';\nimport { searchableTextField, type SearchableTextFieldConfig } from '../field/selection/searchable/searchable.field';\n\n/**\n * A function that takes a search string and returns matching string results.\n */\nexport type TestStringSearchFunction = (text: string) => string[];\n\n/**\n * Creates a search function for timezone strings that searches across all known timezone infos.\n *\n * When the search string is empty, the system timezone is returned first, followed by all timezones.\n *\n * @returns A {@link SearchableValueFieldStringSearchFn} for searching timezone values.\n */\nexport function timezoneStringSearchFunction(): SearchableValueFieldStringSearchFn<string, TimezoneInfo> {\n const timezoneInfos = allTimezoneInfos();\n\n return (search: string) => {\n let searchResults;\n\n if (search.length === 0) {\n searchResults = [timezoneInfoForSystem()].concat(timezoneInfos);\n } else {\n searchResults = searchTimezoneInfos(search, timezoneInfos);\n }\n\n return of(searchResults.map((meta) => ({ value: meta.timezone, meta })));\n };\n}\n\n/**\n * Display function for timezone string values in a searchable field.\n *\n * Maps each timezone value to a display object with the timezone name as the label\n * and its abbreviation as the sublabel.\n */\nexport const DISPLAY_FOR_TIMEZONE_STRING_VALUE: SearchableValueFieldDisplayFn<string, TimezoneInfo> = (values: SearchableValueFieldValue<string, TimezoneInfo>[]) => {\n const timezoneInfos = allTimezoneInfos();\n\n const displayValues: SearchableValueFieldDisplayValue<string, TimezoneInfo>[] = values.map((x) => {\n const meta = x.meta ?? timezoneInfos.find((y) => x.value === y.timezone); // attempt to find the metadata in the timeInfos if it isn't provided.\n return { ...x, label: x.value, sublabel: meta?.abbreviation ?? 'Unknown' };\n });\n\n const obs: Observable<SearchableValueFieldDisplayValue<string, TimezoneInfo>[]> = of(displayValues);\n return obs;\n};\n\n/**\n * Configuration for a timezone string searchable field.\n *\n * Omits search-related properties that are internally configured by {@link timezoneStringField}.\n */\nexport interface TimezoneStringFieldConfig extends Omit<SearchableTextFieldConfig<TimezoneString, TimezoneInfo>, 'inputType' | 'searchOnEmptyText' | 'search' | 'displayForValue' | 'key'>, Partial<Pick<SearchableTextFieldConfig<TimezoneString, TimezoneInfo>, 'key' | 'materialFormField'>> {}\n\n/**\n * Creates a searchable text field for selecting a timezone.\n *\n * Defaults to the key `'timezone'` and label `'Timezone'`. Searches all known timezones\n * and displays the timezone name with its abbreviation.\n *\n * @param config - Optional configuration overrides for the timezone field.\n * @returns A Formly field configuration for timezone selection.\n */\nexport function timezoneStringField(config: TimezoneStringFieldConfig = {}): FormlyFieldConfig {\n return searchableTextField({\n key: 'timezone',\n label: 'Timezone',\n asArrayValue: false,\n required: false,\n ...config,\n searchOnEmptyText: true,\n allowStringValues: false,\n showClearValue: true,\n search: timezoneStringSearchFunction(),\n displayForValue: DISPLAY_FOR_TIMEZONE_STRING_VALUE\n });\n}\n","import { NgModule } from '@angular/core';\nimport { DbxFormFormlySearchableFieldModule } from '../field/selection/searchable/searchable.field.module';\n\nconst importsAndExports = [DbxFormFormlySearchableFieldModule];\n\n/**\n * Angular module that provides the dependencies needed for the timezone string field template.\n *\n * Imports and re-exports the searchable field module required by {@link timezoneStringField}.\n */\n@NgModule({\n imports: importsAndExports,\n exports: importsAndExports\n})\nexport class DbxFormTimezoneStringFieldModule {}\n","import { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { type TextFieldConfig, textField } from '../field/value/text';\nimport { validatorsForFieldConfig } from '../field/field';\nimport { type ValidatorFn } from '@angular/forms';\nimport { isWebsiteUrlValidator, type IsWebsiteUrlValidatorConfig } from '../../validator/website';\n\n/**\n * Configuration for a website URL text field.\n *\n * Extends {@link TextFieldConfig} with URL validation options from {@link IsWebsiteUrlValidatorConfig}.\n */\nexport interface WebsiteUrlFieldConfig extends Omit<TextFieldConfig, 'inputType' | 'key'>, Partial<Pick<TextFieldConfig, 'key' | 'materialFormField'>>, IsWebsiteUrlValidatorConfig {}\n\n/**\n * Creates a text field configured for website URL input with URL validation.\n *\n * Defaults to the key `'website'` and label `'Website Url'` unless overridden in the config.\n *\n * @param config - Optional configuration for the website URL field.\n * @returns A Formly field configuration with website URL validation.\n */\nexport function websiteUrlField(config?: WebsiteUrlFieldConfig): FormlyFieldConfig {\n const validators: ValidatorFn[] = [isWebsiteUrlValidator(config)];\n\n const field = {\n ...textField({\n key: 'website',\n ...config,\n label: config?.label ?? 'Website Url',\n inputType: 'text'\n }),\n ...validatorsForFieldConfig({\n validators\n })\n };\n\n return field;\n}\n","import { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { Directive, input } from '@angular/core';\nimport { provideFormlyContext } from './formly.context';\nimport { AbstractAsyncFormlyFormDirective } from './formly.directive';\nimport { type Maybe } from '@dereekb/util';\nimport { toObservable } from '@angular/core/rxjs-interop';\n\n/**\n * Provides an DbxFormlyContext and has an input for fields.\n */\n@Directive({\n selector: '[dbxFormlyFields]',\n providers: provideFormlyContext(),\n standalone: true\n})\nexport class DbxFormlyFieldsContextDirective<T = unknown> extends AbstractAsyncFormlyFormDirective<T> {\n readonly fields = input<Maybe<FormlyFieldConfig[]>>(undefined, { alias: 'dbxFormlyFields' });\n readonly fields$ = toObservable(this.fields);\n}\n","import { importProvidersFrom } from '@angular/core';\nimport { DbxFormFormlyArrayFieldModule, DbxFormFormlyBooleanFieldModule, DbxFormFormlyDateFieldModule, DbxFormFormlyDbxListFieldModule, DbxFormFormlyNumberFieldModule, DbxFormFormlyPhoneFieldModule, DbxFormFormlyPickableFieldModule, DbxFormFormlySearchableFieldModule, DbxFormFormlySourceSelectModule, DbxFormFormlyTextEditorFieldModule, DbxFormFormlyTextFieldModule, DbxFormFormlyWrapperModule } from './field';\nimport { FormlyMaterialModule } from '@ngx-formly/material';\nimport { FormlyModule } from '@ngx-formly/core';\n\nexport function provideDbxFormFormlyFieldDeclarations() {\n return importProvidersFrom([DbxFormFormlyArrayFieldModule, DbxFormFormlyBooleanFieldModule, DbxFormFormlyDateFieldModule, DbxFormFormlyDbxListFieldModule, DbxFormFormlyNumberFieldModule, DbxFormFormlyPhoneFieldModule, DbxFormFormlyPickableFieldModule, DbxFormFormlySearchableFieldModule, DbxFormFormlySourceSelectModule, DbxFormFormlyTextEditorFieldModule, DbxFormFormlyTextFieldModule, DbxFormFormlyWrapperModule, FormlyModule, FormlyMaterialModule]);\n}\n","import { Directive } from '@angular/core';\n\n/**\n * Provides vertical spacing after a form.\n *\n * Can be used as an element (`<dbx-form-spacer>`), attribute (`[dbxFormSpacer]`), or CSS class (`.dbx-form-spacer`).\n *\n * @selector `dbx-form-spacer,[dbxFormSpacer],.dbx-form-spacer`\n */\n@Directive({\n selector: 'dbx-form-spacer,[dbxFormSpacer],.dbx-form-spacer',\n host: {\n class: 'd-block dbx-form-spacer'\n },\n standalone: true\n})\nexport class DbxFormSpacerDirective {}\n","import { NgModule } from '@angular/core';\nimport { DbxFormModule } from './form/form.module';\nimport { DbxFormFormlyFieldModule } from './formly/field/form.field.module';\n\n@NgModule({\n exports: [DbxFormModule, DbxFormFormlyFieldModule]\n})\nexport class DbxFormExtensionModule {}\n","import { type EnvironmentProviders, makeEnvironmentProviders, type Provider } from '@angular/core';\nimport { provideDateFnsAdapter } from '@angular/material-date-fns-adapter';\nimport { MAT_DATE_LOCALE } from '@angular/material/core';\nimport { MAT_FORM_FIELD_DEFAULT_OPTIONS } from '@angular/material/form-field';\nimport { enUS } from 'date-fns/locale';\nimport { type DateTimePresetConfiguration, DBX_DATE_TIME_FIELD_MENU_PRESETS_TOKEN, DEFAULT_DATE_TIME_FIELD_MENU_PRESETS_PRESETS } from './formly';\nimport { type Maybe } from '@dereekb/util';\n\nexport interface ProvideDbxFormConfigurationConfig {\n readonly provideDateAdapter?: boolean;\n readonly defaultDateTimePresets?: Maybe<DateTimePresetConfiguration[]>;\n}\n\nexport function provideDbxFormConfiguration(config?: ProvideDbxFormConfigurationConfig): EnvironmentProviders {\n const { provideDateAdapter, defaultDateTimePresets } = config ?? {};\n\n const providers: Provider[] = [\n {\n provide: MAT_FORM_FIELD_DEFAULT_OPTIONS,\n useValue: {\n subscriptSizing: 'dynamic',\n floatLabel: 'always',\n appearance: 'outline'\n }\n },\n {\n provide: DBX_DATE_TIME_FIELD_MENU_PRESETS_TOKEN,\n useValue: defaultDateTimePresets ?? DEFAULT_DATE_TIME_FIELD_MENU_PRESETS_PRESETS\n }\n ];\n\n if (provideDateAdapter !== false) {\n providers.push(provideDateFnsAdapter());\n providers.push({\n provide: MAT_DATE_LOCALE,\n useValue: enUS\n });\n }\n\n return makeEnvironmentProviders(providers);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i1","importsAndExports","FieldType","i3","i4","TIME_OUTPUT_THROTTLE_TIME","i5","i6","i9","DatePickerDateRange","isE164PhoneNumberFunction"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA;;AAEG;IACS;AAAZ,CAAA,UAAY,YAAY,EAAA;AACtB;;AAEG;AACH,IAAA,YAAA,CAAA,YAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,CAAA,GAAA,cAAiB;AACjB;;AAEG;AACH,IAAA,YAAA,CAAA,YAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS;AACT;;AAEG;AACH,IAAA,YAAA,CAAA,YAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ;AACV,CAAC,EAbW,YAAY,KAAZ,YAAY,GAAA,EAAA,CAAA,CAAA;AAoBxB;;AAEG;AACI,MAAM,yBAAyB,GAAG;AA6BzC;;AAEG;MACmB,OAAO,CAAA;AAY5B;AAED;;;;AAIG;AACG,MAAgB,cAA4B,SAAQ,OAAU,CAAA;AA6BnE;AAED;;;;;AAKG;AACG,SAAU,cAAc,CAAoB,UAAmB,EAAA;AACnE,IAAA,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,UAAU,CAAC,EAAE,CAAC;AAC1E;AAEA;;;;;AAKG;AACG,SAAU,qBAAqB,CAA2B,UAAmB,EAAA;IACjF,OAAO,CAAC,GAAG,cAAc,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,UAAU,CAAC,EAAE,CAAC;AAChH;AAEA;;;;;;AAMG;SACa,wBAAwB,CAAC,IAA0B,EAAE,UAAmB,EAAE,MAAkD,EAAA;IAC1I,IAAI,UAAU,EAAE;AACd,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IACtB;SAAO;AACL,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IACrB;AACF;;AC1IA;;AAEG;AACI,MAAM,4BAA4B,GAAG;AAS5C;;;;;;;;;;;AAWG;MAKU,sBAAsB,CAAA;AACxB,IAAA,IAAI,GAAG,MAAM,EAAC,cAAiB,GAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAChD,IAAA,MAAM,GAAG,MAAM,EAAC,mCAA+C,EAAC;IAEhE,OAAO,GAAG,YAAY,CAAC;QAC9B,SAAS,EAAE,MAAK;AACd,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,4BAA4B,CAAC;QAClD,CAAC;QACD,gBAAgB,EAAE,MAAK;AACrB,YAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;AAC5B,YAAA,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;AAC7B,YAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;YAC5B,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,4BAA4B,EAAE,KAAK,CAAC;QAC5D;AACD,KAAA,CAAC;AAEF;;;;AAIG;AACM,IAAA,8BAA8B,GAAG,KAAK,CAAiB,IAAI,0EAAC;AAErE;;;AAGG;IACM,oBAAoB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,sBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAA6B;AAElE;;AAEG;IACM,oBAAoB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,sBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAA6B;AAElE;;;;AAIG;IACM,uBAAuB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,yBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAgC;AAExE;;AAEG;IACM,qBAAqB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAA8C;AAE3E,IAAA,+BAA+B,GAAG,YAAY,CAAC,IAAI,CAAC,8BAA8B,CAAC;AAEnF,IAAA,gBAAgB,GAAG,YAAY,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,IAAI,CACtE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EACjC,WAAW,CAAC,CAAC,CAAC,CACf;IACQ,mBAAmB,GAAsC,gCAAgC,CAAC;AACjG,QAAA,UAAU,EAAE,YAAY,CAAC,IAAI,CAAC,uBAAuB,CAAC;AACtD,QAAA,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,oBAAoB;KAChD,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAEd,IAAA,iBAAiB,GAA2D,YAAY,CAAC,IAAI,CAAC,qBAAqB,CAAC;AAE5G,IAAA,aAAa,GAAG,IAAI,kBAAkB,EAAE;AACxC,IAAA,cAAc,GAAG,IAAI,kBAAkB,EAAE;AACzC,IAAA,aAAa,GAAG,IAAI,kBAAkB,EAAE;AAEzD,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACrB,YAAA,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;QACzD;AAEA,QAAA,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC7D;IAEA,QAAQ,GAAA;;QAEN,IAAI,CAAC,aAAa,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC;aAC3C,IAAI,CACH,SAAS,CAAC,MACR,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CACpB,KAAK,EAAE,EACP,UAAU,CAAC,CAAC,MAAM,KAAI;AACpB,YAAA,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM;AAC7B,YAAA,MAAM,SAAS,GAAG,EAAE,CAAC;AAErB,YAAA,IAAI,GAA8C;YAElD,IAAI,UAAU,EAAE;AACd,gBAAA,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAC7B,KAAK,EAAE,EACP,UAAU,CAAC,CAAC,KAAK,KACf,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,IAAI,CACjC,KAAK,EAAE,EACP,SAAS,CAAC,CAAC,WAAW,KAAI;oBACxB,IAAI,WAAW,EAAE;AACf,wBAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;oBAC7C;yBAAO;AACL,wBAAA,OAAO,EAAE,CAAC,SAAS,CAAC;oBACtB;gBACF,CAAC,CAAC,EACF,UAAU,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAC7C,CACF,CACF;YACH;iBAAO;AACL,gBAAA,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC;YACrB;AAEA,YAAA,OAAO,GAAG;QACZ,CAAC,CAAC,CACH,CACF;AAEF,aAAA,SAAS,CAAC,CAAC,MAAqC,KAAI;AACnD,YAAA,IAAI,MAAM,CAAC,MAAM,EAAE;gBACjB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;YACnC;AAAO,iBAAA,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE;gBAC/B,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC;YACtC;iBAAO;;YAEP;AACF,QAAA,CAAC,CAAC;;QAGJ,IAAI,CAAC,cAAc,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC;aAC1C,IAAI,CACH,KAAK,CAAC,CAAC,CAAC,EACR,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,YAAY,CAAC,EACpD,SAAS,CAAC,CAAC,KAAK,KAAI;AAClB,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAC9B,KAAK,EAAE,EACP,UAAU,CAAC,CAAC,KAAK,KAAI;;;;;AAKnB,gBAAA,MAAM,iBAAiB,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;;gBAGvI,MAAM,mBAAmB,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC;AAE3C,gBAAA,MAAM,eAAe,GAAG,KAAK,CAAC,UAAU;gBACxC,MAAM,eAAe,GAA8B,eAAe,GAAG,SAAS,GAAG,mBAAmB;gBAEpG,MAAM,oBAAoB,GAAG,KAAK,CAAC,QAAQ,KAAK,KAAK,IAAI,iBAAiB;gBAC1E,MAAM,kBAAkB,GAAiC,oBAAoB,GAAG,SAAS,GAAG,mBAAmB;AAE/G,gBAAA,OAAO,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,EAAE,eAAe,EAAE,kBAAkB,EAAE,CAAC,CAAC,IAAI,CACxF,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAqB,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,EACnF,KAAK,EAAE,CACR;YACH,CAAC,CAAC,CACH;AACH,QAAA,CAAC,CAAC;aAEH,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,sBAAsB,KAAI;;;AAIrD,YAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC;;YAGnC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,4BAA4B,EAAE,KAAK,CAAC;AACzD,QAAA,CAAC,CAAC;;AAGJ,QAAA,IAAI,CAAC,aAAa,CAAC,YAAY,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,+BAA+B,CAAC;aAC3G,IAAI,CACH,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,uBAAuB,CAA4B,KAAK,uBAAuB,KAAK,KAAK,IAAI,SAAS,CAAC,EACxH,oBAAoB,EAAE;AAEvB,aAAA,SAAS,CAAC,CAAC,OAAO,KAAI;YACrB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,4BAA4B,EAAE,OAAO,CAAC;AAC9D,QAAA,CAAC,CAAC;IACN;AAEA;;;;;;AAMG;IACH,yBAAyB,CAAC,KAAQ,EAAE,SAA6C,EAAA;AAC/E,QAAA,MAAM,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,eAAe,EAAE,uBAAuB,EAAE,GAAG,SAAS,IAAI,EAAE;AACpH,QAAA,MAAM,kBAAkB,GAAG,uBAAuB,IAAI,IAAI,GAAG,EAAE,CAAC,uBAAuB,CAAC,GAAG,IAAI,CAAC,gBAAgB;AAChH,QAAA,MAAM,qBAAqB,GAAG,0BAA0B,IAAI,IAAI,GAAG,EAAE,CAAC,0BAA0B,CAAC,GAAG,IAAI,CAAC,mBAAmB;QAE5H,OAAO,aAAa,CAAC,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,CAAC,CAAC,IAAI,CACpE,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,KAAI;AAClC,YAAA,OAAO,aAAa,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAuB,CAAC,CAAC;QACrI,CAAC,CAAC,CACH;IACH;AAEA;;;;;AAKG;AACO,IAAA,kBAAkB,CAAC,KAAQ,EAAA;AACnC,QAAA,OAAO,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC;IAC9C;AAEA;;;;;AAKG;AACO,IAAA,UAAU,CAAC,KAAQ,EAAA;QAC3B,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAChC,SAAS,CAAC,CAAC,WAAW,KAAI;YACxB,IAAI,WAAW,EAAE;AACf,gBAAA,OAAO,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACzC;iBAAO;gBACL,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,KAAqB,EAAE,CAAC;YAC7C;QACF,CAAC,CAAC,CACH;IACH;uGA1NW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,8BAAA,EAAA,EAAA,iBAAA,EAAA,gCAAA,EAAA,UAAA,EAAA,gCAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,uBAAA,EAAA,EAAA,iBAAA,EAAA,yBAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAJlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE;AACb,iBAAA;;;AC/BD;;;;;;;;;;;AAWG;AAKG,MAAO,4BAAmC,SAAQ,kCAAwC,CAAA;AACrF,IAAA,aAAa,GAAG,MAAM,EAAC,sBAAyB,GAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAE1E;;;;AAIG;AACM,IAAA,mBAAmB,GAAG,KAAK,CAAgC,MAAM,+DAAC;AAExD,IAAA,gCAAgC,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,4EAAC;AAElG,IAAA,yBAAyB,CAAC,UAAsB,EAAA;AACjE,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,EAAE;AACzC,QAAA,OAAO,KAAK,CAAC,yBAAyB,CAAC,UAAU,CAAC;IACpD;uGAfW,4BAA4B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA5B,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA5B,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAJxC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACGD;;AAEG;SACa,oBAAoB,GAAA;IAClC,OAAO,CAAC,gBAAgB,EAAE,GAAG,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;AACvE;AAEA;;AAEG;MAEU,gBAAgB,CAAA;AACnB,IAAA,OAAO,aAAa,GAAiB,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE;AAE9G,IAAA,OAAO,GAAG,IAAI,OAAO,EAAE;AAEf,IAAA,OAAO,GAAG,IAAI,eAAe,CAA6B,SAAS,CAAC;AACpE,IAAA,aAAa,GAAG,IAAI,eAAe,CAAoB,SAAS,CAAC;AACjE,IAAA,SAAS,GAAG,IAAI,eAAe,CAAwB,SAAS,CAAC;AACjE,IAAA,SAAS,GAAG,IAAI,eAAe,CAAqC,SAAS,CAAC;AAEtF,IAAA,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AAC1D,IAAA,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AAC9D,IAAA,OAAO,GAA6B,IAAI,CAAC,SAAS,CAAC,IAAI,CAC9D,oBAAoB,EAAE,EACtB,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,GAAG,EAAE,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC,EACtE,WAAW,CAAC,CAAC,CAAC,CACf;IAED,WAAW,GAAA;QACT,IAAI,CAAC,OAAO,EAAE;IAChB;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,MAAK;AACpC,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AACvB,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;AAC7B,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;AAC3B,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,WAAW,CAAC,QAAsC,EAAA;QAChD,IAAI,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AACrC,YAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;gBACpB,QAAQ,CAAC,IAAI,CAAC;oBACZ,MAAM,EAAE,IAAI,CAAC,OAAO;oBACpB,eAAe,EAAE,IAAI,CAAC,QAAQ;AAC9B,oBAAA,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC;AAClC,iBAAA,CAAC;YACJ;AAEA,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC/B;IACF;AAEA,IAAA,aAAa,CAAC,QAAqC,EAAA;QACjD,IAAI,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AACrC,YAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;QAC7B;IACF;AAEA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK;IAC3B;IAEA,IAAI,MAAM,CAAC,MAAkC,EAAA;AAC3C,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;IAC3B;;IAGA,QAAQ,GAAA;QACN,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CACxB,WAAW,EAAE,EACb,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,EAC9B,WAAW,CAAC,CAAC,CAAC,CACf;IACH;AAEA,IAAA,QAAQ,CAAC,KAAiB,EAAA;AACxB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;AAE9B,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;YACxB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QACtC;IACF;IAEA,UAAU,GAAA;QACR,OAAO,4BAA4B,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC3D;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK;IAC7B;IAEA,WAAW,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;IACtC;AAEA,IAAA,WAAW,CAAC,GAAwB,EAAE,QAAQ,GAAG,IAAI,EAAA;AACnD,QAAA,MAAM,YAAY,GAAG,4BAA4B,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,yBAAyB,EAAE,QAAQ,CAAC;AAChH,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC;AAEjC,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;YACxB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC;QACjD;IACF;IAEA,SAAS,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AACxB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE;QAClC;IACF;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AACxB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,eAAe,EAAE;QACxC;IACF;uGA3GW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAhB,gBAAgB,EAAA,CAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B;;;AChBD;;AAEG;MAiBU,kBAAkB,CAAA;AACZ,IAAA,iBAAiB,GAAG,MAAM,EAAC,gBAAmB,EAAC;AAEvD,IAAA,UAAU,GAAG,SAAS,CAAC,UAAU,sDAAC;AAE1B,IAAA,OAAO,GAAG,IAAI,eAAe,CAAyC,SAAS,CAAC;IAChF,OAAO,GAAG,IAAI,eAAe,CAAe,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AACvH,IAAA,SAAS,GAAG,IAAI,eAAe,CAAwB,SAAS,CAAC;IAEjE,MAAM,GAAG,IAAI,eAAe,CAAO,IAAI,IAAI,EAAE,CAAC;AAC9C,IAAA,YAAY,GAAG,IAAI,OAAO,EAAQ;AAElC,IAAA,YAAY,GAAG,IAAI,kBAAkB,EAAE;AACvC,IAAA,mBAAmB,GAAG,IAAI,kBAAkB,EAAE;AAEtD,IAAA,IAAI,GAAG,IAAI,SAAS,CAAC,EAAE,CAAC;AACxB,IAAA,WAAW,GAAG,MAAM,CAAI,EAAO,uDAAC;IAEhC,OAAO,GAAsB,EAAE;AAE/B,IAAA,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,oBAAoB,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAE3F,OAAO,GAA6B,IAAI,CAAC,MAAM,CAAC,IAAI,CAC3D,SAAS,CAAC,CAAC,WAAW,KACpB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CACzB,SAAS,CAAC,CAAC,CAAC,EACZ,oBAAoB,EAAE,EACtB,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAC9D,SAAS,CAAC,CAAC,CAAC,CAAC;;IAEb,SAAS,CAAC,CAAC,qBAAqB,KAAK,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,oBAAoB,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,qBAAqB,CAAC,CAAC,CAAC,EAC9J,GAAG,CAAC,CAAC,0BAAkC,MAAM;QAC3C,0BAA0B;AAC1B,QAAA,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK;AAC9D,QAAA,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC;KAC3B,CAAC,CAAC,EACH,IAAI,CACF,CAAC,GAAuB,EAAE,IAAwB,KAAI;;;QAGpD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,cAAc,IAAI,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,0BAA0B,GAAG,CAAC,CAAC;QAEhH,OAAO;YACL,0BAA0B,EAAE,IAAI,CAAC,0BAA0B;AAC3D,YAAA,WAAW,EAAE,KAAK;YAClB,cAAc,EAAE,IAAI,CAAC;SACtB;AACH,IAAA,CAAC,EACD;AACE,QAAA,0BAA0B,EAAE,CAAC;AAC7B,QAAA,WAAW,EAAE,KAAK;AAClB,QAAA,cAAc,EAAE;AACjB,KAAA,CACF,EACD,SAAS,CAAC,CAAC,EAAE,0BAA0B,EAAE,WAAW,EAAE,cAAc,EAAE,KAAI;QACxE,MAAM,SAAS,GAAG,MAAK;AACrB,YAAA,MAAM,OAAO,GAAG,0BAA0B,IAAI,CAAC,CAAC;YAChD,MAAM,QAAQ,GAAG,WAAW;AAE5B,YAAA,MAAM,SAAS,GAAiB;AAC9B,gBAAA,UAAU,EAAE,QAAQ;AACpB,gBAAA,KAAK,EAAE,OAAO,GAAG,YAAY,CAAC,KAAK,GAAG,YAAY,CAAC,IAAI;AACvD,gBAAA,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM;AACxB,gBAAA,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS;AAC9B,gBAAA,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ;AAC5B,gBAAA,YAAY,EAAE,0BAA0B;gBACxC,WAAW;gBACX,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,gBAAA,UAAU,EAAE;aACb;AAED,YAAA,OAAO,SAAS;AAClB,QAAA,CAAC;AAED,QAAA,MAAM,KAAK,GAAG,SAAS,EAAE;QAEzB,IAAI,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACtC,YAAA,OAAO,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI;;AAEzB,YAAA,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAC/B,GAAG,CAAC,MAAM,SAAS,EAAE,CAAC;;AAEtB,YAAA,KAAK,EAAE;;AAEP,YAAA,SAAS,CAAC,KAAK,CAAC,CACjB;QACH;aAAO;AACL,YAAA,OAAO,EAAE,CAAC,KAAK,CAAC;QAClB;IACF,CAAC,CAAC,CACH,CACF,EACD,WAAW,CAAC,CAAC,CAAC,CACf;AAEgB,IAAA,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;AAE3E,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,wDAAC;AAElE,IAAA,WAAA,GAAA;QACE,gBAAgB,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAK;AACpD,YAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,IAAI,CAAC;AAC1C,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AACvB,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AACvB,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;AACtB,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;AAC5B,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;AACzB,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;AAC3B,YAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE;AACpC,QAAA,CAAC,CAAC;IACJ;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,IAAI,CAAC;QAExC,MAAM,mBAAmB,GAAG,MAAK;AAC/B,YAAA,MAAM,UAAU,GAAG,4BAA4B,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YAC5E,IAAI,MAAM,GAAG,KAAK;YAElB,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,UAAU,EAAE;AACrC,gBAAA,wBAAwB,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;gBACpE,MAAM,GAAG,IAAI;YACf;AAEA,YAAA,OAAO,MAAM;AACf,QAAA,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,oBAAoB,CAAC,yBAAyB,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AACnH,YAAA,mBAAmB,EAAE;AACvB,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,CAAC,mBAAmB,CAAC,YAAY,GAAG,KAAK,CAAC;AAC5C,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,GAAG,CAAC,MAAM,OAAO,CAAC,EAClB,KAAK,CAAC,EAAE,CAAC,CACV;YACD,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC5F,SAAA,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AACtB,YAAA,mBAAmB,EAAE;AACvB,QAAA,CAAC,CAAC;IACJ;;AAGA,IAAA,IAAI,CAAC,UAAkC,EAAA;QACrC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QACpC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC;IACjD;IAEA,QAAQ,GAAA;QACN,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAU,CAAC;IACjC;AAEA,IAAA,QAAQ,CAAC,KAAQ,EAAA;QACf,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,CAAM,CAAC;AAEjD,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE;AACnC,YAAA,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE;AACjC,YAAA,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI;QAC7B;;AAGA,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;;;QAI1B,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACvB,gBAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YAC5B;QACF,CAAC,EAAE,GAAG,CAAC;;QAGP,IAAI,CAAC,SAAS,EAAE;IAClB;IAEA,SAAS,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;AAC3B,YAAA,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;QAC3B;QAEA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;IAC9B;AAEA,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,4BAA4B,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC3D;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK;IAC7B;IAEA,WAAW,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;IACtC;AAEA,IAAA,WAAW,CAAC,GAAwB,EAAE,QAAQ,GAAG,IAAI,EAAA;AACnD,QAAA,MAAM,IAAI,GAAG,4BAA4B,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,yBAAyB,EAAE,QAAQ,CAAC;AACxG,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;IAC3B;;IAGA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAC1B;uGA7MW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,iGALlB,qBAAqB,CAAC,kBAAkB,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAQpB,UAAU,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhBhC;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAKS,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAI7C,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAhB9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,QAAQ,EAAE,QAAQ;AAClB,oBAAA,QAAQ,EAAE;;;;AAIT,EAAA,CAAA;AACD,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE;AACR,qBAAA;oBACD,SAAS,EAAE,qBAAqB,CAAA,kBAAA,CAAoB;AACpD,oBAAA,OAAO,EAAE,CAAC,WAAW,EAAE,mBAAmB,EAAE,YAAY,CAAC;oBACzD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE;AACb,iBAAA;sHAIiC,UAAU,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AChC5C;;;;;;;;;;AAUG;SACa,uBAAuB,CAAI,IAAoB,EAAE,QAA8B,EAAE,OAA+C,EAAA;IAC9I,OAAO,iCAAiC,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC;AAC3E;AAEA;;;;;;;;;;;AAWG;SACa,iCAAiC,CAAI,SAAsC,EAAE,QAA8B,EAAE,OAAsD,EAAA;AACjL,IAAA,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3D,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAC3B,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EACnB,oBAAoB,EAAE,CACvB;AAED,IAAA,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAEhE,IAAA,OAAO,aAAa,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CACxC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAChB,oBAAoB,EAAE,EACtB,SAAS,CAAC,CAAC,IAAgC,KAAI;AAC7C,QAAA,IAAI,IAAI,KAAK,OAAO,EAAE;;YAEpB,OAAO,MAAM,CAAC,IAAI,CAChB,UAAU,CAAC,CAAC,KAAmB,KAAI;AACjC,gBAAA,IAAI,KAAK,KAAK,YAAY,CAAC,KAAK,EAAE;oBAChC,IAAI,cAAc,GAAG,KAAK;AAC1B,oBAAA,MAAM,WAAW,GAAG,IAAI,OAAO,EAAE;oBAEjC,OAAO,aAAa,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CACzC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,KAAI;wBACrB,IAAI,CAAC,cAAc,IAAI,KAAK,KAAK,YAAY,CAAC,KAAK,EAAE;AACnD,4BAAA,OAAO,CAAC,KAAK,EAAE,IAAI,CAAiB,CAAC;wBACvC;6BAAO;AACL,4BAAA,OAAO,CAAC,KAAK,EAAE,KAAK,CAAiB;wBACvC;oBACF,CAAC,CAAC,EACF,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAI;wBAChB,cAAc,GAAG,IAAI;wBACrB,IAAI,CAAC,IAAI,EAAE;AACT,4BAAA,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;wBAC7B;AACF,oBAAA,CAAC,CAAC,EACF,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,EAC3B,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,EAC1B,SAAS,CAAC,WAAW,CAAC,EACtB,OAAO,CAAC,MAAK;wBACX,WAAW,CAAC,QAAQ,EAAE;oBACxB,CAAC,CAAC,CACH;gBACH;qBAAO;AACL,oBAAA,OAAO,KAAK;gBACd;YACF,CAAC,CAAC,CACH;QACH;aAAO;;YAEL,OAAO,MAAM,CAAC,IAAI,CAChB,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,YAAY,CAAC,YAAY,CAAC,EAC3C,oBAAoB,EAAE,EACtB,SAAS,CAAC,CAAC,YAAqB,KAAI;gBAClC,IAAI,YAAY,EAAE;AAChB,oBAAA,OAAO,KAAK;gBACd;qBAAO;oBACL,IAAI,QAAQ,GAAG,MAAM;AAErB,oBAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;wBACrB,QAAQ,GAAG,QAAQ,CAAC,IAAI,CACtB,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAC9D,wBAAwB,CAAC;AACvB,4BAAA,MAAM,EAAE,IAAI;AACZ,4BAAA,qBAAqB,EAAE,EAAE;4BACzB,OAAO,EAAE,MAAK;AACZ,gCAAA,OAAO,CAAC,KAAK,CAAC,kTAAkT,CAAC;4BACnU;AACD,yBAAA,CAAC,CACH;oBACH;AAEA,oBAAA,OAAO,QAAQ;gBACjB;YACF,CAAC,CAAC,CACH;QACH;IACF,CAAC,CAAC,CACH;AACH;AAWA;;;;;;;;;;;AAWG;MAKU,sBAAsB,CAAA;AACxB,IAAA,IAAI,GAAG,MAAM,EAAC,cAAiB,GAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAEzD;;AAEG;IACM,iBAAiB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAqC;AAEvE;;AAEG;IACM,aAAa,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,eAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAA+C;IAE1D,UAAU,GAAG,iBAAiB,EAAE;AAChC,IAAA,8BAA8B,GAAG,MAAM,CAAC,MAAK;AAC9D,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE;QACvC,MAAM,IAAI,GAA+B,IAAI,CAAC,iBAAiB,EAAE,IAAI,OAAO;AAE5E,QAAA,IAAI,YAAiC;QAErC,IAAI,UAAU,EAAE;AACd,YAAA,YAAY,GAAG,iCAAiC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AACpG,gBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AACvB,YAAA,CAAC,CAAC;QACJ;AAEA,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC;AACtC,IAAA,CAAC,0EAAC;uGA3BS,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAJlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACzFD;;;;;;;;;AASG;AAgBG,MAAO,4BAAgC,SAAQ,uBAAiE,CAAA;IACnG,UAAU,GAAG,iBAAiB,EAAE;AAExC,IAAA,OAAO,GAAG,MAAM,EAAC,gBAAmB,GAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACrD,OAAO,GAAG,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IAClD,aAAa,GAAG,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;AAE9D,IAAA,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM;AAEzB,IAAA,kBAAkB,GAAG;AAC5B,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,GAAG,IAAI,CAAC,IAAI,CAAC;KACd;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,UAAU,CAAC,MAAM,CACpB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AAC7D,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM;QAC9B,CAAC,CAAC,CACH;IACH;AAEA;;AAEG;AACM,IAAA,iBAAiB,GAAwB,CAAC,KAAK,EAAE,OAAO,KAAI;QACnE,OAAO,CAAC,OAAO,EAAE;AACjB,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AACnB,IAAA,CAAC;AAED;;;;;;AAMG;AACH,IAAA,OAAO,kBAAkB,CAAI,SAAoB,EAAE,MAA6C,EAAA;QAC9F,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,EAAC,4BAA+B,GAAE;AAChE,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,SAAS,EAAE,OAAO;AAClB,YAAA,QAAQ,EAAE,OAAO;YACjB,GAAG,MAAM,CAAC,MAAM;AAChB,YAAA,IAAI,EAAE;AACP,SAAA,CAAC;AAEF,QAAA,OAAO,SAAS;IAClB;uGA/CW,4BAA4B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA5B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,SAAA,EAH5B,CAAC,oBAAoB,EAAE,CAAC,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAXzB;;;;;;;;;AAST,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAGS,yBAAyB,EAAA,QAAA,EAAA,2DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,CAAA,QAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,aAAA,EAAA,OAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,OAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,KAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,8BAA8B,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,QAAA,EAAA,YAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,gCAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,yBAAA,EAAA,uBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAE9J,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAfxC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;;;;;;;;;AAST,EAAA,CAAA;AACD,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,SAAS,EAAE,CAAC,oBAAoB,EAAE,CAAC;AACnC,oBAAA,OAAO,EAAE,CAAC,yBAAyB,EAAE,eAAe,EAAE,eAAe,EAAE,8BAA8B,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,kBAAkB;AAC9L,iBAAA;;;ACjED;;AAEG;AACH,MAAM,8CAA8C,GAA+B,OAAO;AAE1F;;;;;;;;;AASG;MAKU,6BAA6B,CAAA;AAC/B,IAAA,IAAI,GAAG,MAAM,EAAC,cAAiB,GAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAEzD;;;;AAIG;AACM,IAAA,wBAAwB,GAAG,KAAK,CAAgE,8CAA8C,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,0BAAA,EAAA,GAAA,EAAA,CAAA,EAAI,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,8CAA8C,GAAG;AAEnO;;AAEG;IACM,oBAAoB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,sBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAA2C;AAEvE,IAAA,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,wBAAwB,CAAC;AACnD,IAAA,OAAO,GAAyB,YAAY,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,+BAA+B,EAAE,EAAE,WAAW,EAAE,EAAE,6BAA6B,EAAE,CAAC;AAExK,IAAA,WAAA,GAAA;QACE,iBAAiB,CACf,iCAAiC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AAC7F,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QACvB,CAAC,CAAC,CACH;IACH;uGAxBW,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA7B,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,wBAAA,EAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,UAAA,EAAA,0BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA7B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAJzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,wBAAwB;AAClC,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACrBD;;;;;;;;;AASG;MAKU,2BAA2B,CAAA;AAC7B,IAAA,IAAI,GAAG,MAAM,EAAC,OAAU,GAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAElD;;AAEG;IACM,kBAAkB,GAAG,MAAM,EAAY;IAE7B,IAAI,GAAG,iBAAiB,EAAE;IAE7C,QAAQ,GAAA;;QAEN,IAAI,CAAC,IAAI,CAAC,MAAM,CACd,IAAI,CAAC,IAAI,CAAC;aACP,IAAI,CACH,QAAQ,CAAC,CAAC,CAAC,KACT,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CACvB,KAAK,EAAE,EACP,GAAG,CAAC,CAAC,KAAK,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,CACtD,CACF,EACD,KAAK,CAAC,CAAC,CAAC;aAET,SAAS,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,KAAI;YACnC,IAAI,UAAU,EAAE;AACd,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC;YACrC;iBAAO;AACL,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC;YACzC;QACF,CAAC,CAAC,CACL;IACH;uGA/BW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,OAAA,EAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAJvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACVD;;;;;;;;;;;;;AAaG;AACG,SAAU,sBAAsB,CAAI,WAA4B,EAAE,IAAsB,EAAA;AAC5F,IAAA,MAAM,OAAO,GAAG,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,WAAW;AAC1D,IAAA,OAAO,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC7D;;ACxBA;;;;;AAKG;MAIU,aAAa,CAAA;uGAAb,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAAb,aAAa,EAAA,CAAA;wGAAb,aAAa,EAAA,CAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;AACV,iBAAA;;;ACPD;;;;;;AAMG;AACG,SAAU,0BAA0B,CAAC,GAAY,EAAE,KAAsB,EAAA;AAC7E,IAAA,OAAO,uBAAuB,KAAK,CAAC,KAAK,CAAC,SAAS,cAAc;AACnE;AAEA;;;;;;AAMG;AACG,SAAU,0BAA0B,CAAC,GAAY,EAAE,KAAsB,EAAA;AAC7E,IAAA,OAAO,kCAAkC,KAAK,CAAC,KAAK,CAAC,SAAS,cAAc;AAC9E;AAEA;;;;;;AAMG;AACG,SAAU,oBAAoB,CAAC,GAAY,EAAE,KAAsB,EAAA;AACvE,IAAA,OAAO,8CAA8C,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG;AACzE;AAEA;;;;;;AAMG;AACG,SAAU,oBAAoB,CAAC,GAAY,EAAE,KAAsB,EAAA;AACvE,IAAA,OAAO,8CAA8C,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG;AACzE;AAEA;;AAEG;AACI,MAAM,2BAA2B,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,yBAAyB;AAEjG;;AAEG;AACI,MAAM,6BAA6B,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,0BAA0B;AAErG;;AAEG;AACI,MAAM,6BAA6B,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,0BAA0B;AAErG;;AAEG;AACI,MAAM,sBAAsB,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,oBAAoB;AAElF;;AAEG;AACI,MAAM,sBAAsB,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,oBAAoB;AAElF;;AAEG;AACI,MAAM,4BAA4B,GAAG,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,mCAAmC;AAEvH;;AAEG;AACI,MAAM,sCAAsC,GAAG,EAAE,IAAI,EAAE,8BAA8B,EAAE,OAAO,EAAE,6CAA6C;AAEpJ;;;;;;AAMG;SACa,yBAAyB,GAAA;AACvC,IAAA,OAAO,CAAC,2BAA2B,EAAE,6BAA6B,EAAE,6BAA6B,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,4BAA4B,EAAE,sCAAsC,CAAC;AAC1N;;ACvFA;AACA;;;;AAIG;MAqBU,4CAA4C,CAAA;AAC9C,IAAA,qBAAqB,GAAG,MAAM,CAAwC,SAAS,iEAAC;AAChF,IAAA,oBAAoB,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE;AAEvE,IAAA,iBAAiB,CAAC,cAA8C,EAAA;AAC9D,QAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,cAAc,CAAC;IAChD;uGANW,4CAA4C,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA5C,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4CAA4C,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAnB7C;;;;;;;;;;;;;;AAcT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAKU,4CAA4C,EAAA,UAAA,EAAA,CAAA;kBApBxD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;AAcT,EAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE;AACV,iBAAA;;;ACdD;;;AAGG;MAUU,gCAAgC,CAAA;AAClC,IAAA,2BAA2B,GAAG,MAAM,EAAC,8BAAiC,EAAC;AAEvE,IAAA,MAAM,GAAuE;AACpF,QAAA,cAAc,EAAE,IAAI,CAAC,2BAA2B,CAAC,cAAc;AAC/D,QAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,YAAA,iBAAiB,CACf,IAAI,CAAC,2BAA2B,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,OAAuC,KAAI;AACrG,gBAAA,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC;YACrC,CAAC,CAAC,CACH;QACH;KACD;uGAZU,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gCAAgC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAPjC;;AAET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAGS,qBAAqB,EAAA,QAAA,EAAA,gDAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAEpB,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAT5C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sCAAsC;AAChD,oBAAA,QAAQ,EAAE;;AAET,EAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,qBAAqB;AAChC,iBAAA;;AA+BD;;;;;;AAMG;AAOG,MAAO,8BAA4C,SAAQ,SAAyD,CAAA;AACvG,IAAA,kBAAkB,GAAG,MAAM,CAAoD,SAAS,8DAAC;IAEjG,eAAe,GAA+C,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,oBAAoB,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAExK,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAC1C,GAAG,CAAC,CAAC,CAAiC,KAAK,CAAC,CAAC,MAAM,CAAC,EACpD,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAClD,GAAG,CAAC,CAAC,CAAiC,KAAK,CAAC,CAAC,MAAM,KAAK,KAAK,KAAK,CAAC,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAClG,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AACrC,IAAA,oBAAoB,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;AAEvF,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,IAAiB;IAC/B;AAEA,IAAA,IAAI,eAAe,GAAA;QACjB,OAAO,IAAI,CAAC,GAAa;IAC3B;AAEA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK;IACzB;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW;IAC/B;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ;IAC5B;AAEA,IAAA,IAAI,cAAc,GAAA;QAChB,OAAO,IAAI,CAAC,KAAK;IACnB;AAEA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,MAAM;IACvC;AAEA,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,cAAc,IAAI,4CAA4C;IAC3F;IAEA,QAAQ,GAAA;;QAEN,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC;IACjE;uGAtDW,8BAA8B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA9B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvE3C,66BAwBA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED6CY,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,WAAA,EAAA,IAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,kBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,sLAzCzF,gCAAgC,EAAA,QAAA,EAAA,sCAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FA2ChC,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAN1C,SAAS;AAES,YAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,EAAA,OAAA,EACP,CAAC,mBAAmB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,eAAe,EAAE,aAAa,EAAE,gCAAgC,CAAC,EAAA,QAAA,EAAA,66BAAA,EAAA;;;AExDzI;;;;;AAKG;AAkBG,MAAO,2BAA4B,SAAQ,YAAkD,CAAA;AACjG,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,KAAK;IACnB;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;IAChC;uGAPW,2BAA2B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhB5B;;;;;;;;;;;GAWT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACS,aAAa,sKAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAI3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAjBvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;;;;;;;;;;;AAWT,EAAA,CAAA;AACD,oBAAA,OAAO,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC;oBACvC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACzBD;;;;;;;AAOG;AAYG,MAAO,8BAA+B,SAAQ,YAAqD,CAAA;AACvG,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,KAAK;IACnB;uGAHW,8BAA8B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA9B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAT/B;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACS,sBAAsB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIrB,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAX1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,0BAA0B;AACpC,oBAAA,QAAQ,EAAE;;;;AAIT,EAAA,CAAA;oBACD,OAAO,EAAE,CAAC,sBAAsB,CAAC;oBACjC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACLD;;;;;AAKG;AAWG,MAAO,2BAA4B,SAAQ,YAAqD,CAAA;AACpG,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,KAAK;IACnB;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU;IACpC;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,IAAI,KAAK;IAC3C;AAEA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,IAAI,KAAK;IAChD;uGAfW,2BAA2B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAT5B;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACS,qBAAqB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIpB,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAVvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;;;;AAIT,EAAA,CAAA;oBACD,OAAO,EAAE,CAAC,qBAAqB,CAAC;oBAChC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE;AACb,iBAAA;;;AC5BD;;;;;;;AAOG;AAYG,MAAO,iCAAkC,SAAQ,YAAsD,CAAA;AAC3G,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,KAAK;IACnB;uGAHW,iCAAiC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iCAAiC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EATlC;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACS,sBAAsB,EAAA,QAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIrB,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAX7C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,6BAA6B;AACvC,oBAAA,QAAQ,EAAE;;;;AAIT,EAAA,CAAA;oBACD,OAAO,EAAE,CAAC,sBAAsB,CAAC;oBACjC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACLD;;AAEG;AACI,MAAM,oBAAoB,GAAG,CAAC,CAAS,KAAK,CAAC,aAAa,CAAC,CAAC;AAEnE;;;;;;AAMG;AAEG,MAAO,yCAAwJ,SAAQ,YAAkC,CAAA;AAC1L,IAAA,eAAe,GAAG,IAAI,eAAe,CAAyB,SAAS,CAAC;AACxE,IAAA,WAAW,GAAG,IAAI,eAAe,CAAiB,SAAS,CAAC;IAEtE,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAEvD,IAAA,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CACpC,SAAS,CAAC,CAAC,UAA0B,KAAI;AACvC,QAAA,IAAI,UAAU,IAAI,IAAI,EAAE;AACtB,YAAA,OAAO,EAAE,CAAC,UAAU,CAAC;QACvB;aAAO;YACL,OAAO,IAAI,CAAC,SAAS;QACvB;IACF,CAAC,CAAC,EACF,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CACzC,SAAS,CAAC,CAAC,CAAC,KACV,CAAC,CAAC,YAAY,CAAC,IAAI,CACjB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,EAClB,GAAG,CAAC,CAAC,KAAK,KAAI;AACZ,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;IAC/B,CAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf,CACF,CACF;AAEQ,IAAA,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;AAC1D,IAAA,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;AAE3E,IAAA,IAAI,aAAa,GAAA;QACf,OAAO,IAAI,CAAC,KAAK;IACnB;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,IAAK,oBAA8C;IACzF;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,IAAI,KAAK,GAAkB,IAAI,CAAC,aAAa,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK;AAEpF,QAAA,IAAI,KAAK,IAAI,IAAI,EAAE;YACjB,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC;YAElD,IAAI,eAAe,EAAE;gBACnB,KAAK,GAAG,eAAe,CAAC,KAAK,EAAE,KAAK,IAAK,eAAe,CAAC,GAAc;YACzE;QACF;AAEA,QAAA,OAAO,KAAK;IACd;IAEA,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7B;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;IAC7C;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;AAC3B,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;IACjC;uGAlEW,yCAAyC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAzC,yCAAyC,EAAA,YAAA,EAAA,IAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAzC,yCAAyC,EAAA,UAAA,EAAA,CAAA;kBADrD;;;ACpBD;;AAEG;AAYG,MAAO,6BAAyD,SAAQ,yCAA2E,CAAA;AACvJ,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,IAAI,QAAQ;IAClD;uGAHW,6BAA6B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA7B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAV9B;;;;;;AAMT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIU,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAXzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;;;;;;AAMT,EAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACxBD;;AAEG;AAQG,MAAO,8BAA+B,SAAQ,YAA6B,CAAA;IAC/E,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AAC5D,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE;AAC5D,gBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE;AAChC,gBAAA,IAAI,CAAC,WAAW,CAAC,sBAAsB,EAAE;YAC3C;AACF,QAAA,CAAC,CAAC;IACJ;uGARW,8BAA8B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA9B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAN/B;;AAET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIU,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAP1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;;AAET,EAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACID;;AAEG;AAgBG,MAAO,6BAAyD,SAAQ,yCAAwE,CAAA;AAC3I,IAAA,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1C,SAAS,CAAC,CAAC,CAAC,KAAI;AACd,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,cAAc,EAAE;YACtC,OAAO,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC,CAAC;QAC9C;aAAO;AACL,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC;QAC7B;AACF,IAAA,CAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IAE5E,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;YAC1C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;AAC9B,QAAA,CAAC,CAAC;IACJ;uGAlBW,6BAA6B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA7B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAd9B;;;;;;;;;AAST,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACS,cAAc,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,OAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,SAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIb,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAfzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;;;;;;;;;AAST,EAAA,CAAA;oBACD,OAAO,EAAE,CAAC,cAAc,CAAC;oBACzB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACbD;;;;;;AAMG;AAWG,MAAO,4BAA6B,SAAQ,YAA0D,CAAA;AACzF,IAAA,MAAM,GAAG,IAAI,eAAe,CAAwC,SAAS,CAAC;AAC9E,IAAA,MAAM,GAAG,IAAI,eAAe,CAA4B,SAAS,CAAC;AAE1E,IAAA,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AACpE,IAAA,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AAEpE,IAAA,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;AACnC,IAAA,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;AAE5C,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW;IAC/B;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW;IAC/B;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAClD;AAEA,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAClD;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;AACtB,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;IACxB;uGA/BW,4BAA4B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA5B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAT7B;;;;GAIT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACS,OAAO,oFAAE,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIf,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAVxC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;;;;AAIT,EAAA,CAAA;AACD,oBAAA,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;oBAC3B,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE;AACb,iBAAA;;;AC3BD;;;;AAIG;AAYG,MAAO,8BAA+B,SAAQ,YAA4D,CAAA;AACrG,IAAA,GAAG,GAAG,IAAI,kBAAkB,EAAE;AAC9B,IAAA,cAAc,GAAG,IAAI,oBAAoB,CAAC,KAAK,CAAC;IAEzD,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,SAAS,CAAC;AAChE,YAAA,IAAI,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,KAAK,SAAS;AAC5D,SAAA,CAAC;IACJ;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;AAC7B,QAAA,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;IACpB;uGAbW,8BAA8B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA9B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAV/B;;;;;AAKT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACS,mBAAmB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIlB,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAX1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;;;;;AAKT,EAAA,CAAA;oBACD,OAAO,EAAE,CAAC,mBAAmB,CAAC;oBAC9B,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACzBD;AACO,MAAM,sBAAsB,GAAG,WAAW;AACjD;AACO,MAAM,kBAAkB,GAAG,QAAQ;AAC1C;AACO,MAAM,mBAAmB,GAAG,SAAS;AAC5C;AACO,MAAM,sBAAsB,GAAG,YAAY;AAClD;AACO,MAAM,gBAAgB,GAAG,MAAM;AACtC;AACO,MAAM,gBAAgB,GAAG,MAAM;AACtC;AACO,MAAM,iBAAiB,GAAG,OAAO;AACxC;AACO,MAAM,mBAAmB,GAAG,SAAS;AAC5C;AACO,MAAM,kBAAkB,GAAG,QAAQ;;ACH1C,MAAMC,mBAAiB,GAAG;IACxB,8BAA8B;IAC9B,8BAA8B;IAC9B,iCAAiC;IACjC,2BAA2B;IAC3B,6BAA6B;IAC7B,6BAA6B;IAC7B,2BAA2B;IAC3B,4BAA4B;IAC5B,8BAA8B;;IAE9B,YAAY;IACZ;CACD;AAED;MAoBa,0BAA0B,CAAA;uGAA1B,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,YAlCrC,8BAA8B;YAC9B,8BAA8B;YAC9B,iCAAiC;YACjC,2BAA2B;YAC3B,6BAA6B;YAC7B,6BAA6B;YAC7B,2BAA2B;YAC3B,4BAA4B;YAC5B,8BAA8B;;YAE9B,YAAY;AACZ,YAAA,oBAAoB,gCAXpB,8BAA8B;YAC9B,8BAA8B;YAC9B,iCAAiC;YACjC,2BAA2B;YAC3B,6BAA6B;YAC7B,6BAA6B;YAC7B,2BAA2B;YAC3B,4BAA4B;YAC5B,8BAA8B;;YAE9B,YAAY;YACZ,oBAAoB,CAAA,EAAA,CAAA;AAuBT,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,YAjCrC,8BAA8B;YAC9B,iCAAiC;YACjC,2BAA2B;YAE3B,6BAA6B;YAG7B,8BAA8B;;YAE9B,YAAY;AACZ,YAAA,oBAAoB,EAOlB,YAAY,CAAC,QAAQ,CAAC;AACpB,gBAAA,QAAQ,EAAE;AACR,oBAAA,EAAE,IAAI,EAAE,sBAAsB,EAAE,SAAS,EAAE,8BAA8B,EAAE;AAC3E,oBAAA,EAAE,IAAI,EAAE,kBAAkB,EAAE,SAAS,EAAE,6BAA6B,EAAE;AACtE,oBAAA,EAAE,IAAI,EAAE,kBAAkB,EAAE,SAAS,EAAE,6BAA6B,EAAE;AACtE,oBAAA,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,8BAA8B,EAAE;AACxE,oBAAA,EAAE,IAAI,EAAE,sBAAsB,EAAE,SAAS,EAAE,iCAAiC,EAAE;AAC9E,oBAAA,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,2BAA2B,EAAE;AAClE,oBAAA,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,2BAA2B,EAAE;AAClE,oBAAA,EAAE,IAAI,EAAE,iBAAiB,EAAE,SAAS,EAAE,4BAA4B,EAAE;AACpE,oBAAA,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,8BAA8B;AACvE;aACF,CAAC;;YApBJ,YAAY;YACZ,oBAAoB,CAAA,EAAA,CAAA;;2FAuBT,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAnBtC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;AACP,wBAAA,GAAGA,mBAAiB;wBACpB,YAAY,CAAC,QAAQ,CAAC;AACpB,4BAAA,QAAQ,EAAE;AACR,gCAAA,EAAE,IAAI,EAAE,sBAAsB,EAAE,SAAS,EAAE,8BAA8B,EAAE;AAC3E,gCAAA,EAAE,IAAI,EAAE,kBAAkB,EAAE,SAAS,EAAE,6BAA6B,EAAE;AACtE,gCAAA,EAAE,IAAI,EAAE,kBAAkB,EAAE,SAAS,EAAE,6BAA6B,EAAE;AACtE,gCAAA,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,8BAA8B,EAAE;AACxE,gCAAA,EAAE,IAAI,EAAE,sBAAsB,EAAE,SAAS,EAAE,iCAAiC,EAAE;AAC9E,gCAAA,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,2BAA2B,EAAE;AAClE,gCAAA,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,2BAA2B,EAAE;AAClE,gCAAA,EAAE,IAAI,EAAE,iBAAiB,EAAE,SAAS,EAAE,4BAA4B,EAAE;AACpE,gCAAA,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,8BAA8B;AACvE;yBACF;AACF,qBAAA;AACD,oBAAA,OAAO,EAAEA;AACV,iBAAA;;;AC1CD,MAAMA,mBAAiB,GAAG,CAAC,8BAA8B,EAAE,gCAAgC,EAAE,4CAA4C,CAAC;AAE1I;MAWa,qCAAqC,CAAA;uGAArC,qCAAqC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAArC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qCAAqC,EAAA,OAAA,EAAA,CAbvB,8BAA8B,EAAE,gCAAgC,EAAE,4CAA4C,EAMrI,0BAA0B,EAAAD,IAAA,CAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CANH,8BAA8B,EAAE,gCAAgC,EAAE,4CAA4C,CAAA,EAAA,CAAA;AAa5H,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qCAAqC,EAAA,OAAA,EAAA,CAbvB,8BAA8B,EAAE,gCAAgC,EAMvF,0BAA0B;YAC1B,YAAY,CAAC,QAAQ,CAAC;gBACpB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,8BAA8B,EAAE;aAC7E,CAAC,CAAA,EAAA,CAAA;;2FAIO,qCAAqC,EAAA,UAAA,EAAA,CAAA;kBAVjD,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;AACP,wBAAA,GAAGC,mBAAiB;wBACpB,0BAA0B;wBAC1B,YAAY,CAAC,QAAQ,CAAC;4BACpB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,8BAA8B,EAAE;yBAC7E;AACF,qBAAA;AACD,oBAAA,OAAO,EAAEA;AACV,iBAAA;;;AC+DD;;AAEG;AACG,SAAU,WAAW,CAAkD,WAAc,EAAA;AACzF,IAAA,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE;AACpB,QAAA,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC;AAC1B,QAAA,MAAM,IAAI,KAAK,CAAC,CAAA,qBAAA,CAAuB,CAAC;IAC1C;AAEA,IAAA,OAAO,WAAW;AACpB;AAEA;;;;;;AAMG;AACG,SAAU,4BAA4B,CAA4B,WAAkI,EAAE,QAA0C,EAAA;AACpP,IAAA,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,WAAW;IAC5C,MAAM,KAAK,GAAG,wBAAwB,CAAC,WAAW,EAAE,QAAQ,CAAC;IAE7D,OAAO;QACL,KAAK;QACL,WAAW;QACX;KACD;AACH;AAEA;AACO,MAAM,+BAA+B,GAA0C,CAAC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc;AACpK;AACO,MAAM,qCAAqC,GAA2D;AAC3G,IAAA,UAAU,EAAE;;AAGd;MACa,sBAAsB,GAAG,oBAAoB,CAA8B,qCAAqC;AAE7H;AACO,MAAM,iDAAiD,GAAG,sBAAsB,CAA8B;AACnH,IAAA,MAAM,EAAE;AACT,CAAA;AAED;;;;;;;;;AASG;AACG,SAAU,wBAAwB,CAAwD,WAAwC,EAAE,QAA0C,EAAA;IAClL,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,sBAAsB,CAAC,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;AAC7H,IAAA,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,WAAW,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IAE/E,MAAM,MAAM,GAAG,cAAc,CAAC;AAC5B,QAAA,GAAG,QAAQ;QACX,KAAK;QACL,WAAW;QACX,QAAQ;QACR,QAAQ;QACR,WAAW;QACX;AACD,KAAA,CAAU;;AAGX,IAAA,IAAI,YAAY,IAAI,IAAI,EAAE;AACxB,QAAA,IAAI,YAAY,KAAK,KAAK,EAAE;YAC1B,MAAM,CAAC,UAAU,GAAG;gBAClB,GAAG,MAAM,CAAC,UAAU;AACpB,gBAAA,GAAG,oCAAoC;aACxC;QACH;aAAO;AAEH,YAAA,MAAM,CAAC,UAGR,CAAC,cAAc,CAAC,GAAG,YAAY;QAClC;IACF;AAEA,IAAA,OAAO,MAAM;AACf;AAEA;;AAEG;SACa,oCAAoC,GAAA;;IAElD,OAAO;AACL,QAAA,IAAI,EAAE,UAAU;AAChB,QAAA,YAAY,EAAE;KACf;AACH;AAmCA;;;;;;;;;;;;;;AAcG;AACG,SAAU,wBAAwB,CAAC,KAAoC,EAAA;IAC3E,MAAM,UAAU,GAAkB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC;IAC3D,MAAM,eAAe,GAAuB,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC;AAC1E,IAAA,MAAM,QAAQ,GAAmC,KAAK,CAAC,QAAQ;AAC/D,IAAA,IAAI,MAAuC;IAE3C,IAAI,QAAQ,IAAI,UAAU,CAAC,MAAM,IAAI,eAAe,CAAC,MAAM,EAAE;QAC3D,MAAM,GAAG,EAAE;AAEX,QAAA,IAAI,UAAU,CAAC,MAAM,EAAE;YACrB,MAAM,CAAC,UAAU,GAAG;AAClB,gBAAA,UAAU,EAAE;aACb;QACH;AAEA,QAAA,IAAI,eAAe,CAAC,MAAM,EAAE;YAC1B,MAAM,CAAC,UAAU,GAAG;AAClB,gBAAA,UAAU,EAAE;aACb;QACH;QAEA,IAAI,QAAQ,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE;YAC1C,MAAM,CAAC,UAAU,GAAG;gBAClB;aACD;QACH;IACF;AAEA,IAAA,OAAO,MAAM;AACf;;AClPA;;;;;;;;;;;;;;AAcG;AACG,SAAU,kBAAkB,CAAc,MAAyC,EAAA;IACvF,MAAM,EAAE,GAAG,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,MAAM;IAEtD,MAAM,WAAW,GAAG,WAAW,CAAC;QAC9B,GAAG;AACH,QAAA,IAAI,EAAE,eAAe;QACrB,GAAG,4BAA4B,CAAC,MAAM,EAAE;YACtC,cAAc;YACd;SACD;AACF,KAAA,CAAC;AAEF,IAAA,OAAO,WAAW;AACpB;;ACbA;;AAEG;MACU,gCAAgC,CAAA;AAC1B,IAAA,OAAO,GAAG,IAAI,GAAG,EAA4F;AAErH,IAAA,QAAQ;AAEjB,IAAA,WAAA,CAAY,OAAsB,EAAA;AAChC,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;IACzB;AAEA;;;;AAIG;IACH,KAAK,CAAI,GAAyC,EAAE,MAAkD,EAAA;QACpG,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,KAAK;AACvD,QAAA,MAAM,YAAY,GAA8D;AAC9E,YAAA,GAAG,YAAY;AACf,YAAA,GAAG,MAAM;YACT;SACM;QAER,IAAI,YAAY,CAAC,cAAc,IAAI,MAAM,CAAC,cAAc,EAAE;YACxD,YAAY,CAAC,cAAc,GAAG,aAAa,CAAC,CAAC,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CACpG,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAI;AACb,gBAAA,MAAM,MAAM,GAAG;AACb,oBAAA,GAAG,CAAC;AACJ,oBAAA,GAAG;iBACJ;;AAGD,gBAAA,OAAO,MAAM;AACf,YAAA,CAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf;QACH;;AAIA,QAAA,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;IAC1B;IAEA,QAAQ,CAAI,GAAyC,EAAE,MAAkD,EAAA;QACvG,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC;QAEjD,IAAI,CAAC,KAAK,CAAC;YACT,GAAG,YAAY,CAAC,KAAK;AACrB,YAAA,GAAG,MAAM;YACT;AACD,SAAA,CAAC;IACJ;AAEA,IAAA,kBAAkB,CAAC,GAAyC,EAAA;QAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;QAE1C,IAAI,CAAC,YAAY,EAAE;AACjB,YAAA,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,CAAA,qCAAA,CAAuC,CAAC;QACzF;AAEA,QAAA,OAAO,YAAY;IACrB;IAEA,wBAAwB,CAA0E,GAAyC,EAAE,MAA6D,EAAA;QACxM,OAAO,IAAI,CAAC,KAAK,CAAC;AAChB,YAAA,cAAc,EAAE,IAAI,CAAC,+BAA+B,CAAC,GAAG,EAAE,CAAC,CAAI,KAAK,qBAAqB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACrG,YAAA,GAAG,MAAM;YACT;AACD,SAAA,CAAC;IACJ;AAEA,IAAA,cAAc,CAAwG,GAAyC,EAAE,MAA6D,EAAE,OAAA,GAAuC,CAAC,CAAI,KAAM,CAAyC,EAAE,QAAQ,EAAE,EAAA;QACrU,OAAO,IAAI,CAAC,KAAK,CAAC;YAChB,cAAc,EAAE,IAAI,CAAC,+BAA+B,CAAC,GAAG,EAAE,OAAO,CAAC;AAClE,YAAA,GAAG,MAAM;YACT;AACD,SAAA,CAAC;IACJ;AAEA,IAAA,KAAK,CAAI,MAAmD,EAAA;AAC1D,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG;AAEtB,QAAA,MAAM,KAAK,GAAuD;YAChE,GAAG;AACH,YAAA,KAAK,EAAE;SACR;QAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;IAC9B;;IAGA,KAAK,GAAA;AACH,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAI;AACzD,YAAA,OAAO,kBAAkB,CAAC,KAAK,CAAC;AAClC,QAAA,CAAC,CAAC;IACJ;;AAGA,IAAA,qBAAqB,CAAwG,KAAkD,EAAA;QAC7K,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvC;IAEA,wBAAwB,CAAqI,GAAM,EAAE,SAAwD,EAAA;AAC3N,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,CAAC,IAAI,KAAI;AACzC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAiB;AACtC,YAAA,MAAM,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC;YAEjC,OAAO;gBACL,IAAI;AACJ,gBAAA,GAAG;aACJ;AACH,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,+BAA+B,CAAwG,GAAyC,EAAE,OAAA,GAAuC,CAAC,CAAI,KAAM,CAAyC,EAAE,QAAQ,EAAE,EAAA;QACvR,SAAS,aAAa,CAAC,KAAoB,EAAA;YACzC,OAAO,KAAK,IAAI,KAAK;QACvB;QAEA,OAAO,IAAI,CAAC,wBAAwB,CAAC,GAAG,EAAE,CAAC,KAAQ,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IACrG;AACD;;AC7ID;;;;;AAKG;AASG,MAAO,8BAA4C,SAAQ,SAA+C,CAAA;AAC9G,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc;IAClC;uGAHW,8BAA8B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA9B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAP/B;;AAET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACS,qBAAqB,EAAA,QAAA,EAAA,gDAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIpB,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAR1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;;AAET,EAAA,CAAA;oBACD,OAAO,EAAE,CAAC,qBAAqB,CAAC;oBAChC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACrBD,MAAMA,mBAAiB,GAAG,CAAC,8BAA8B,CAAC;AAE1D;MAUa,iCAAiC,CAAA;uGAAjC,iCAAiC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAAjC,iCAAiC,EAAA,OAAA,EAAA,CAZnB,8BAA8B,EAAAD,IAAA,CAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAA9B,8BAA8B,CAAA,EAAA,CAAA;AAY5C,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iCAAiC,YAPvCC,mBAAiB,EACpB,YAAY,CAAC,QAAQ,CAAC;gBACpB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,8BAA8B,EAAE;aACzE,CAAC,CAAA,EAAA,CAAA;;2FAIO,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAT7C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;AACP,wBAAA,GAAGA,mBAAiB;wBACpB,YAAY,CAAC,QAAQ,CAAC;4BACpB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,8BAA8B,EAAE;yBACzE;AACF,qBAAA;AACD,oBAAA,OAAO,EAAEA;AACV,iBAAA;;;ACVD;;;;;;;;;;AAUG;AACG,SAAU,cAAc,CAAc,MAA+B,EAAA;IACzE,OAAO;AACL,QAAA,IAAI,EAAE,WAAW;AACjB,QAAA,cAAc,EAAE;KACjB;AACH;;ACVA;;;;;;;;;;;;;;;AAeG;AACG,SAAU,YAAY,CAA0J,MAAmC,EAAA;AACvN,IAAA,MAAM,EAAE,GAAG,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM;AACrE,IAAA,OAAO,WAAW,CAAC;QACjB,GAAG;AACH,QAAA,IAAI,EAAE,cAAc;QACpB,GAAG,4BAA4B,CAAC,MAAM,EAAE;YACtC,kBAAkB;YAClB,OAAO;YACP,MAAM;YACN;SACD;AACF,KAAA,CAAC;AACJ;;ACLA;;;;;AAKG;AAOG,MAAO,yBAAmL,SAAQ,SAA0D,CAAA;AAC/O,IAAA,kBAAkB,GAAG,IAAI,kBAAkB,EAAE;AAC7C,IAAA,YAAY,GAAG,IAAI,kBAAkB,EAAE;AAEvC,IAAA,eAAe,GAAG,IAAI,eAAe,CAAyB,SAAS,CAAC;IAChF,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAEvD,IAAA,kBAAkB,GAA2B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChK,IAAA,OAAO,GAAoB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AAEzF,IAAA,sBAAsB,GAAG,IAAI,eAAe,CAA6B,SAAS,CAAC;IAC3F,mBAAmB,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAE9E,IAAA,OAAO,GAA+C,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAC1F,GAAG,CAAC,CAAC,cAAc,KAAI;AACrB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC9B,QAAA,MAAM,MAAM,GAAmC;YAC7C,cAAc;AACd,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;gBACpC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;AAE1C,gBAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AACpB,oBAAA,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,QAAQ,EAAE,CAAC;gBAChF;;gBAGA,IAAI,CAAC,kBAAkB,CAAC,YAAY,GAAG,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;YAC9G;SACD;AAED,QAAA,OAAO,MAAM;IACf,CAAC,CAAC,CACH;AAEQ,IAAA,2BAA2B,GAAoD,IAAI,CAAC,OAAO,CAAC,IAAI,CACvG,+BAA+B,EAAE,EACjC,GAAG,CAAC,CAAC,MAAM,KAAI;AACb,QAAA,OAAO,gCAAgC,CAAC,iCAAiC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;AAC/G,IAAA,CAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AACrC,IAAA,gCAAgC,GAAG,QAAQ,CAAC,IAAI,CAAC,2BAA2B,CAAC;AAEtF,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK;IAC/B;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW;IACrC;AAEA,IAAA,IAAI,kBAAkB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,kBAAkB;IAC5C;AAEA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO;IACjC;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ;IAClC;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;QAC3C,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC;IAC3D;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;AAC/B,QAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE;AACjC,QAAA,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE;IACxC;AAEA,IAAA,kBAAkB,CAAC,IAA2B,EAAA;AAC5C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;QAC1E,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;AAChD,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;IACxB;AAEA,IAAA,SAAS,CAAC,MAAkB,EAAA;AAC1B,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK;QAE5C,IAAI,aAAa,IAAI,IAAI,IAAI,kBAAkB,CAAC,aAAa,EAAE,MAAM,CAAC,EAAE;AACtE,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC;AACjC,YAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;AAC9B,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE;QAClC;IACF;uGA3FW,yBAAyB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,+FC9CtC,ydAYA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED8BY,qBAAqB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,iCAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,sCAAA,EAAA,QAAA,EAAA,+DAAA,EAAA,MAAA,EAAA,CAAA,+BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,qBAAqB,0HAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAI7D,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;8BAEC,CAAC,qBAAqB,EAAE,qBAAqB,EAAE,gBAAgB,CAAC,EAAA,eAAA,EACxD,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,EAAA,QAAA,EAAA,ydAAA,EAAA;;;AExClB,MAAME,mBAAiB,GAAG,CAAC,yBAAyB,CAAC;AAErD;MAUa,+BAA+B,CAAA;uGAA/B,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAA/B,+BAA+B,EAAA,OAAA,EAAA,CAZjB,yBAAyB,EAAAD,IAAA,CAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAzB,yBAAyB,CAAA,EAAA,CAAA;AAYvC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,+BAA+B,YAPrCC,mBAAiB,EACpB,YAAY,CAAC,QAAQ,CAAC;gBACpB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,yBAAyB,EAAE;aACvE,CAAC,CAAA,EAAA,CAAA;;2FAIO,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAT3C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;AACP,wBAAA,GAAGA,mBAAiB;wBACpB,YAAY,CAAC,QAAQ,CAAC;4BACpB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,yBAAyB,EAAE;yBACvE;AACF,qBAAA;AACD,oBAAA,OAAO,EAAEA;AACV,iBAAA;;;AC8FD;;;;;AAKG;AAEG,MAAO,qCAA6F,SAAQC,WAAkE,CAAA;IACzK,cAAc,GAAG,SAAS,CAAmB,UAAU,2DAAI,IAAI,EAAE,QAAQ,EAAA,CAAG;AAE5E,IAAA,SAAS,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC;AAEvB,IAAA,eAAe,GAAG,IAAI,eAAe,CAAyB,SAAS,CAAC;IAChF,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAE/C,IAAA,uBAAuB,GAAG,IAAI,kBAAkB,EAAE;IAClD,eAAe,GAAG,IAAI,eAAe,CAA+C,IAAI,GAAG,EAAE,CAAC;AAEtG,IAAA,iBAAiB,GAA8B,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACrG,uBAAuB,GAA8B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,oBAAoB,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAE3I,8BAA8B,GAAgF,IAAI,CAAC,YAAY,CAAC,IAAI,CAC3I,KAAK,EAAE,EACP,SAAS,CAAC,MACR,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CACtB,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,+BAA+B,CAAC,CAAC,CAAC,CAAC,EACzD,qBAAqB,EAAE,CACxB,CACF,EACD,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,kBAAkB,GAAwB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7J,yBAAyB,GAAkE,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;AAExK;;AAEG;AACM,IAAA,OAAO,GAAoB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AAE1G;;AAEG;IACM,mBAAmB,GAAgF,aAAa,CAAC,CAAC,IAAI,CAAC,yBAAyB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAC5K,SAAS,CAAC,CAAC,CAAC,aAAa,EAAE,aAAa,CAAC,KAAI;QAC3C,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,aAAa,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC7F,MAAM,qBAAqB,GAAQ,EAAE;AAErC,QAAA,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;YAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AAChC,YAAA,MAAM,YAAY,GAA2D,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAE3G,IAAI,CAAC,YAAY,EAAE;AACjB,gBAAA,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC;YAC/B;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,qBAAqB,CAAC,MAAM,EAAE;AAChC,YAAA,OAAO,IAAI,CAAC,0BAA0B,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAChE,GAAG,CAAC,CAAC,CAAC,KACJ,sBAAsB,CAAC,CAAC,EAAE;AACxB,gBAAA,QAAQ,EAAE,CAAC,YAA6E,KAAI;oBAC1F,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC;AACjE,oBAAA,OAAO,CAAC,GAAG,aAAa,EAAE,GAAG,YAAY,CAAC;gBAC5C;aACD,CAAC,CACH,CACF;QACH;aAAO;AACL,YAAA,OAAO,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;QACzC;IACF,CAAC,CAAC,CACH;AAED;;AAEG;AACM,IAAA,2BAA2B,GAAgF,IAAI,CAAC,yBAAyB,CAAC,IAAI,CACrJ,SAAS,CAAC,CAAC,MAAM,KACf,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAC/B,SAAS,CAAC,CAAC,IAAI,KACb,aAAa,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAC9E,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,YAAY,CAAC,KACzB,sBAAsB,CAAC,YAAY,EAAE;AACnC,QAAA,QAAQ,EAAE,CAAC,aAAgE,KAAI;YAC7E,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;YACrE,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC/E;AACD,KAAA,CAAC,CACH,EACD,qBAAqB,EAAE,CACxB,CACF,CACF,CACF,EACD,WAAW,CAAC,CAAC,CAAC,CACf;IAEQ,sBAAsB,GAAkE,IAAI,CAAC,2BAA2B,CAAC,IAAI,CACpI,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,EACpB,WAAW,EAAE,EACb,WAAW,CAAC,CAAC,CAAC,CACf;IAEQ,MAAM,GAA8C,aAAa,CAAC,CAAC,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAC1H,GAAG,CAAC,CAAC,CAAC,aAAa,EAAE,MAAM,CAAC,KAAI;QAC9B,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9E,QAAA,IAAI,KAAK,GAAkC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAErI,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QAC/B;AAEA,QAAA,OAAO,KAAK;AACd,IAAA,CAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf;IAEQ,kBAAkB,GAAyD,IAAI,CAAC,yBAAyB,CAAC,IAAI,CACrH,SAAS,CAAC,MACR,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,KAAK,EAAE,EACP,GAAG,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC,EAC5B,qBAAqB,EAAE,EACvB,WAAW,CAAC,CAAC,CAAC,CACf,CACF,CACF;AAED;;AAEG;AACM,IAAA,OAAO,GAAG,uBAAuB,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,kBAAkB,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC;AAEhG,IAAA,wBAAwB,GAAyD,IAAI,CAAC,MAAM,CAAC,IAAI,CACxG,GAAG,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC,EAC5B,qBAAqB,EAAE,EACvB,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,iBAAiB,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,mCAAmC,EAAE,EAAE,oBAAoB,EAAE,CAAC;AAE9H;;AAEG;AACM,IAAA,oBAAoB,GAAG,uBAAuB,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,2BAA2B,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC;AAErH,IAAA,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;AACnC,IAAA,sBAAsB,GAAG,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC;AAElE;;AAEG;AACM,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;AACzC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;QAChC,OAAO,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;AAC5E,IAAA,CAAC,6DAAC;AAEF,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ;IAC5B;AAEA,IAAA,IAAI,oBAAoB,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ;IACvC;AAEA,IAAA,IAAI,aAAa,GAAA;QACf,OAAO,IAAI,CAAC,KAAK;IACnB;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,IAAI,IAAI;IAC/C;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,IAAI,IAAI;IAChD;AAEA,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,YAAY,KAAK,KAAK,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK;IAClE;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW;IACvC;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,IAAK,IAAI,CAAC,GAAc,CAAC;IACzE;AAEA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK;IACzB;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,QAAQ,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,cAAc,CAAC,IAAI,IAAI,CAAC,GAAG;IAC7D;AAEA,IAAA,IAAI,mCAAmC,GAAA;AACrC,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,mCAAmC,IAAI,KAAK;IACxE;AAEA,IAAA,IAAI,mBAAmB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,mBAAmB,IAAI,KAAK;IACxD;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS;IACrC;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,KAAK,CAAC,CAAC,KAAK,CAAiB,CAAC;IACtE;AAEA,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,eAAe;IAC3C;AAEA,IAAA,IAAI,eAAe,GAAA;QACjB,OAAO,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC;IACjD;AAEA,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACjF;AAEA,IAAA,IAAI,mBAAmB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,mBAAmB,IAAI,IAAI;IACvD;AAEA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,IAAI,EAA0C;AAE9C,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5B,YAAA,EAAE,GAAG,CAAC,UAAyB,EAAE,MAA8C,KAAqB;AAClG,gBAAA,IAAI,MAAuB;gBAE3B,IAAI,UAAU,EAAE;oBACd,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC;gBAClD;qBAAO;AACL,oBAAA,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;gBACzC;AAEA,gBAAA,OAAO,MAAM;AACf,YAAA,CAAC;QACH;aAAO;AACL,YAAA,EAAE,GAAG,IAAI,CAAC,cAAc;QAC1B;AAEA,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC;IACtF;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU;IACtC;AAEA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE;IAClE;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY;IACxC;AAEA,IAAA,IAAI,qBAAqB,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,qBAAqB;IACjD;AAEA,IAAA,0BAA0B,CAAC,MAAW,EAAA;QACpC,OAAO,IAAI,CAAC,+BAA+B,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACjF;AAEA,IAAA,+BAA+B,CAAC,MAAuC,EAAA;AACrE,QAAA,OAAO,IAAI,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC,IAAI,CACrD,GAAG,CAAC,CAAC,aAAgE,KAAK,aAAa,CAAC,aAAa,CAAC,CAAC,EACvG,qBAAqB,EAAE,EACvB,WAAW,CAAC,CAAC,CAAC,CACf;IACH;AAEA,IAAA,8BAA8B,CAAC,MAAuC,EAAA;QACpE,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAC9B,QAAQ,CAAC,CAAC,UAAU,KAAI;YACtB,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAuC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAgG,CAAC;YAEvQ,MAAM;;YAEJ,QAAQ,EAAE,UAAU,EACpB,QAAQ,EAAE,YAAY,EACvB,GAAG,cAAc,CAAC,aAAa,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEvD,YAAA,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;;gBAE3B,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE5E,gBAAA,OAAO,gBAAgB,CAAC,IAAI,CAC1B,KAAK,EAAE,EACP,GAAG,CAAC,CAAC,cAAc,KAAI;oBACrB,MAAM,sBAAsB,GAAsD,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;wBACxG,CAAqD,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC;AACzF,wBAAA,OAAO,CAAoD;AAC7D,oBAAA,CAAC,CAAC;;AAGF,oBAAA,MAAM,qBAAqB,GAA2D,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;oBACrI,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;;oBAGtF,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;;oBAGrE,MAAM,gBAAgB,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;AAGtF,oBAAA,OAAO,gBAAgB;gBACzB,CAAC,CAAC,CACH;YACH;iBAAO;;AAEL,gBAAA,OAAO,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAkE;YACzG;QACF,CAAC,CAAC,CACH;IACH;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;AAE3C,QAAA,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,EAAE;YACtC,IAAI,CAAC,uBAAuB,CAAC,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QAC9H;;QAGA,IAAI,CAAC,OAAO,CAAC;AACV,aAAA,IAAI,CACH,KAAK,CAAC,EAAE,CAAC,EACT,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAChB,KAAK,EAAE;aAER,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE;AAChC,QAAA,CAAC,CAAC;IACN;IAES,WAAW,GAAA;QAClB,KAAK,CAAC,WAAW,EAAE;AACnB,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;AAC/B,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;AAC/B,QAAA,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE;AACtC,QAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE;IACrC;AAEU,IAAA,sBAAsB,CAAC,kBAAmC,EAAA;QAClE,MAAM,KAAK,GAAQ,kBAAkB,IAAI,IAAI,GAAI,EAAU,CAAC,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC;AAC5F,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,QAAQ,CAAC,KAAQ,EAAA;AACf,QAAA,IAAI,SAAc;AAElB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,SAAS,GAAG,CAAC,KAAK,CAAC;QACrB;aAAO;YACL,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;QACrC;AAEA,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;IAC3B;AAEA,IAAA,WAAW,CAAC,KAAQ,EAAA;QAClB,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC;AAC/E,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;IACxB;AAEA;;AAEG;IACH,SAAS,GAAA;QACP,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE;AACtC,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC;AAChF,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;IAC3B;AAEA;;AAEG;IACH,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;IACpB;AAEA;;AAEG;IACH,SAAS,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE;YAC5B,IAAI,CAAC,WAAW,EAAE;QACpB;aAAO;YACL,IAAI,CAAC,SAAS,EAAE;QAClB;IACF;AAEA,IAAA,SAAS,CAAC,MAAW,EAAA;;AAEnB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,MAAM,GAAG,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC;QACxD;AAEA,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;QAC/C;AAEA,QAAA,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC;IACrC;;AAGU,IAAA,sBAAsB,CAAC,MAAW,EAAA;QAC1C,IAAI,QAAQ,GAAY,MAAM;AAE9B,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;QACpD;AAEA,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACnC,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE;AAChC,QAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;IAChC;uGAxaW,qCAAqC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qCAAqC,qIAC0B,QAAQ,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FADvE,qCAAqC,EAAA,UAAA,EAAA,CAAA;kBADjD;AAEuD,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,UAAU,EAAA,EAAA,GAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AC1GtF;;;;AAIG;AAOG,MAAO,iCAAqC,SAAQ,qCAAwC,CAAA;AAChG,IAAA,WAAW,CAAC,IAA8B,EAAA;QACxC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;AAChD,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YACxC;iBAAO;gBACL,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YACrC;QACF;IACF;uGATW,iCAAiC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iCAAiC,+FCtB9C,m/DA2CA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDzBY,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,oFAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,mJAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,qLAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,UAAU,uFAAE,qBAAqB,EAAA,QAAA,EAAA,gDAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIxJ,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAN7C,SAAS;8BAEC,CAAC,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAE,mBAAmB,EAAE,aAAa,EAAE,cAAc,EAAE,mBAAmB,EAAE,UAAU,EAAE,qBAAqB,CAAC,mBACnJ,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,EAAA,QAAA,EAAA,m/DAAA,EAAA;;;AENlB;AACA;;AAEG;AASG,MAAO,qCAAyC,SAAQ,wCAAkE,CAAA;AAC9H,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,CAAC;AACJ,YAAA,cAAc,EAAE;AACjB,SAAA,CAAC;IACJ;uGALW,qCAAqC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qCAAqC,qFAHrC,yBAAyB,CAAC,qCAAqC,CAAC,6jBAFjE,oCAAoC,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,eAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAKnC,qCAAqC,EAAA,UAAA,EAAA,CAAA;kBARjD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,wCAAwC;AAClD,oBAAA,QAAQ,EAAE,qDAAqD;oBAC/D,OAAO,EAAE,CAAC,oCAAoC,CAAC;oBAC/C,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,SAAS,EAAE,yBAAyB,CAAA,qCAAA,CAAuC;AAC3E,oBAAA,UAAU,EAAE;AACb,iBAAA;;AASD;;;;AAIG;AASG,MAAO,yCAA6C,SAAQ,qCAA0C,CAAA;AACjG,IAAA,6BAA6B,GAAG,MAAM,EAAC,6BAAgC,EAAC;;AAIxE,IAAA,MAAM,GAAgC;AAC7C,QAAA,cAAc,EAAE;KACjB;AAED,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,WAAW;IACxD;AAEA,IAAA,IAAI,aAAa,GAAA;QACf,IAAI,aAAa,GAAgC,QAAQ;AAEzD,QAAA,IAAI,IAAI,CAAC,6BAA6B,CAAC,QAAQ,IAAI,IAAI,CAAC,6BAA6B,CAAC,mCAAmC,EAAE;YACzH,aAAa,GAAG,MAAM;QACxB;AAEA,QAAA,OAAO,aAAa;IACtB;AAES,IAAA,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI;;IAEjC,GAAG,CAAC,CAAC,CAAC,KAAK,yBAAyB,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EACrD,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;uGA7BjC,yCAAyC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yCAAyC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,SAAA,EAJzC,kBAAkB,CAAC,yCAAyC,CAAC,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAH9D;;AAET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAES,yCAAyC,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAGxC,yCAAyC,EAAA,UAAA,EAAA,CAAA;kBARrD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;;AAET,EAAA,CAAA;oBACD,SAAS,EAAE,kBAAkB,CAAA,yCAAA,CAA2C;oBACxE,OAAO,EAAE,CAAC,yCAAyC,CAAC;AACpD,oBAAA,UAAU,EAAE;AACb,iBAAA;;AAiDK,MAAO,6CAAiD,SAAQ,qCAAwE,CAAA;AACnI,IAAA,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK;AAC5B,IAAA,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ;AAClC,IAAA,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI;uGAHxB,6CAA6C,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA7C,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6CAA6C,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAf9C;;;;;;;;;;AAUT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACS,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIZ,6CAA6C,EAAA,UAAA,EAAA,CAAA;kBAhBzD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;;;;;;;;;;AAUT,EAAA,CAAA;oBACD,OAAO,EAAE,CAAC,aAAa,CAAC;oBACxB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE;AACb,iBAAA;;AAOD;AACA;;;;;AAKG;AAOG,MAAO,6BAAiC,SAAQ,qCAAwC,CAAA;AAC5F,IAAA,iBAAiB,CAAC,KAAc,EAAA;AAC9B,QAAA,MAAM,KAAK,GAAI,KAA+D,CAAC,KAAK;AACpF,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC;AAClD,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;IACxB;uGALW,6BAA6B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA7B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6BAA6B,+FClH1C,0uCA4BA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDFa,qCAAqC,EAAA,QAAA,EAAA,wCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAoFC,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,iNAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,UAAU,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,mBAAmB,mKAAE,qBAAqB,EAAA,QAAA,EAAA,gDAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIhK,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBANzC,SAAS;8BAEC,CAAC,qCAAqC,EAAE,gBAAgB,EAAE,WAAW,EAAE,mBAAmB,EAAE,cAAc,EAAE,UAAU,EAAE,mBAAmB,EAAE,qBAAqB,CAAC,mBAC3J,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,EAAA,QAAA,EAAA,0uCAAA,EAAA;;;AE3GlB,MAAMF,mBAAiB,GAAG,CAAC,iCAAiC,EAAE,6BAA6B,EAAE,qCAAqC,EAAE,yCAAyC,EAAE,6CAA6C,CAAC;AAE7N;MAaa,gCAAgC,CAAA;uGAAhC,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAhC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gCAAgC,YAflB,iCAAiC,EAAE,6BAA6B,EAAE,qCAAqC,EAAE,yCAAyC,EAAE,6CAA6C,EAAAD,IAAA,CAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAjM,iCAAiC,EAAE,6BAA6B,EAAE,qCAAqC,EAAE,yCAAyC,EAAE,6CAA6C,CAAA,EAAA,CAAA;AAe/M,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gCAAgC,YAVtCC,mBAAiB,EACpB,YAAY,CAAC,QAAQ,CAAC;AACpB,gBAAA,KAAK,EAAE;AACL,oBAAA,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,iCAAiC,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE;AACrG,oBAAA,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,6BAA6B,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC;AAChG;aACF,CAAC,CAAA,EAAA,CAAA;;2FAIO,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAZ5C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;AACP,wBAAA,GAAGA,mBAAiB;wBACpB,YAAY,CAAC,QAAQ,CAAC;AACpB,4BAAA,KAAK,EAAE;AACL,gCAAA,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,iCAAiC,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE;AACrG,gCAAA,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,6BAA6B,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC;AAChG;yBACF;AACF,qBAAA;AACD,oBAAA,OAAO,EAAEA;AACV,iBAAA;;;ACTD;;;;;;;;;;;;;;;;AAgBG;AACG,SAAU,qBAAqB,CAA2B,MAAqC,EAAA;AACnG,IAAA,MAAM,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,MAAM;AACzC,IAAA,OAAO,WAAW,CAAC;QACjB,GAAG;AACH,QAAA,IAAI,EAAE,mBAAmB;QACzB,GAAG,4BAA4B,CAAC,MAAM,EAAE;AACtC,YAAA,GAAG,iBAAiB;AACpB,YAAA,GAAG,MAAM;AACT,YAAA,YAAY,EAAE;SACf;AACF,KAAA,CAAC;AACJ;AAEA;;;;;;;;;;;;;;;;AAgBG;AACG,SAAU,qBAAqB,CAA2B,MAAqC,EAAA;AACnG,IAAA,MAAM,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,MAAM;AACzC,IAAA,OAAO,WAAW,CAAC;QACjB,GAAG;AACH,QAAA,IAAI,EAAE,mBAAmB;QACzB,GAAG,4BAA4B,CAAC,MAAM,EAAE;AACtC,YAAA,GAAG,iBAAiB;AACpB,YAAA,GAAG,MAAM;AACT,YAAA,YAAY,EAAE;SACf;AACF,KAAA,CAAC;AACJ;;AC/DA;AACO,MAAM,kDAAkD,GAAoE,0BAA0B,CAAC;IAC5J,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AAC7B,IAAA,eAAe,EAAE;AAClB,CAAA;AAED;;;;;;;;AAQG;AACG,SAAU,oCAAoC,CAAI,UAAyB,EAAE,MAA2C,EAAA;AAC5H,IAAA,IAAI,cAAmD;IAEvD,IAAI,UAAU,EAAE;AACd,QAAA,cAAc,GAAG,kDAAkD,CAAC,UAAU,EAAE,MAAM,CAAC;IACzF;SAAO;QACL,cAAc,GAAG,MAAM;IACzB;AAEA,IAAA,OAAO,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;AAC/C;AAEA;AACO,MAAM,sCAAsC,GAAG,oBAAoB,CAA6B,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,KAAK;AAE/H;;;;;AAKG;AACG,SAAU,wBAAwB,CAAI,KAAiC,EAAA;AAC3E,IAAA,OAAO,KAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC;AAC3D;AAYA;;;;;;;;;;;;;;;AAeG;AACG,SAAU,oDAAoD,CAA+B,KAA6E,EAAA;IAC9K,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,KAAK;IACnE,MAAM,EAAE,UAAU,EAAE,kBAAkB,GAAG,SAAS,EAAE,GAAG,MAAM;IAC7D,MAAM,MAAM,GAAoC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACvG,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAE/D,OAAO;AACL,QAAA,UAAU,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC;QAC5B,YAAY,EAAE,oCAAoC;AAClD,QAAA,eAAe,EAAE,CAAC,MAAuC,KACvD,EAAE,CACA,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AACf,YAAA,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;AAC9C,YAAA,OAAO,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,kBAAkB,EAAE;AACjE,QAAA,CAAC,CAAC;KAEP;AACH;;ACjFA;MACa,yCAAyC,GAAG,IAAI,cAAc,CAAC,oBAAoB;AAEhG;;;;;AAKG;MAYU,2CAA2C,CAAA;AAC7C,IAAA,YAAY,GAAG,KAAK,CAAC,QAAQ,uDAAiD;AAE9E,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AACpC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;AACxC,QAAA,MAAM,MAAM,GAAgC;YAC1C,GAAG,YAAY,CAAC,OAAO;YACvB,SAAS,EAAE,oBAAoB,CAC7B;AACE,gBAAA;AACE,oBAAA,OAAO,EAAE,yCAAyC;AAClD,oBAAA,QAAQ,EAAE;AACX;AACF,aAAA,EACD,YAAY,CAAC,OAAO,CAAC,SAAS;SAEjC;AAED,QAAA,OAAO,MAAM;AACf,IAAA,CAAC,wDAAC;AAEO,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,wDAAC;uGArBvD,2CAA2C,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3C,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2CAA2C,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wCAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAT5C;;;;GAIT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACS,kBAAkB,wFAAE,qBAAqB,EAAA,QAAA,EAAA,gDAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIxC,2CAA2C,EAAA,UAAA,EAAA,CAAA;kBAXvD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,wCAAwC;AAClD,oBAAA,QAAQ,EAAE;;;;AAIT,EAAA,CAAA;AACD,oBAAA,OAAO,EAAE,CAAC,kBAAkB,EAAE,qBAAqB,CAAC;oBACpD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE;AACb,iBAAA;;AAyBD;AACA;;;;;AAKG;MAEmB,0CAA0C,CAAA;AACrD,IAAA,YAAY,GAAG,MAAM,CAAgD,yCAAyC,CAAC;uGADpG,0CAA0C,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA1C,0CAA0C,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA1C,0CAA0C,EAAA,UAAA,EAAA,CAAA;kBAD/D;;AAKD;;;;AAIG;AAkBG,MAAO,yCAA6C,SAAQ,0CAA6C,CAAA;AACpG,IAAA,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI;uGAD3B,yCAAyC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yCAAyC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAf1C;;;;;;;;;;AAUT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACS,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIZ,yCAAyC,EAAA,UAAA,EAAA,CAAA;kBAjBrD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sCAAsC;AAChD,oBAAA,QAAQ,EAAE;;;;;;;;;;AAUT,EAAA,CAAA;oBACD,OAAO,EAAE,CAAC,aAAa,CAAC;oBACxB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACMD,MAAM,gCAAgC,GAAG,gBAAgB;AAEzD,MAAM,gCAAgC,GAAyC;AAC7E,IAAA,cAAc,EAAE;CACjB;AAED;;;;AAIG;AAEG,MAAgB,wCAA+L,SAAQE,WAA6B,CAAA;AAMxP;;AAEG;IACH,qBAAqB,GAAG,KAAK;AAE7B;;AAEG;IACH,6BAA6B,GAAmB,gCAAgC;IAEvE,SAAS,GAAG,SAAS,CAAuC,WAAW,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,WAAA,EAAA,GAAA,EAAA,CAAA,EAAI,IAAI,GAAE,UAA4B,CAAA,EAAA,CAAG;AAEhH,IAAA,SAAS,GAAG,IAAI,WAAW,CAAS,EAAE,CAAC;AAE/B,IAAA,eAAe,GAAG,IAAI,eAAe,CAAyB,SAAS,CAAC;IAChF,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAE/C,IAAA,uBAAuB,GAAG,IAAI,kBAAkB,EAAE;IAClD,eAAe,GAAG,IAAI,eAAe,CAA2D,IAAI,GAAG,EAAE,CAAC;AAElH,IAAA,WAAW,GAAuB,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CACzE,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAC/B,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CACpB;AAEQ,IAAA,iBAAiB,GAAuB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAExG,mBAAmB,GAAiF,IAAI,CAAC,iBAAiB,CAAC,IAAI,CACtI,SAAS,CAAC,CAAC,IAAI,KACb,CAAC,IAAI,IAAI,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CACtE,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,+BAA+B,CAAC,CAAC,CAAC,CAAC;;IAEzD,qBAAqB,EAAE,CACxB,CACF,EACD,WAAW,CAAC,CAAC,CAAC,CACf;AAEgB,IAAA,mBAAmB,GAAG,IAAI,kBAAkB,EAAE;AAEtD,IAAA,aAAa,GAAG,uBAAuB,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,mBAAmB,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC;IACvG,cAAc,GAAmE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CACrH,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,EAC1B,WAAW,CAAC,CAAC,CAAC,CACf;IACQ,uBAAuB,GAAwB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,4BAA4B,CAAC,EAAE,oBAAoB,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AAEvJ,IAAA,kBAAkB,GAAwB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE7J,IAAA,OAAO,GAAoB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AAEjG,IAAA,mBAAmB,GAAiF,IAAI,CAAC,OAAO,CAAC,IAAI,CAC5H,oBAAoB,EAAE,EACtB,SAAS,CAAC,CAAC,MAAW,KAAK,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC,EACnE,WAAW,CAAC,CAAC,CAAC,CACf;IAEQ,cAAc,GAAmE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;AAE1I,IAAA,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;AAC7C,IAAA,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC;AACnD,IAAA,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC;AAEnD,IAAA,4BAA4B,GAAG,QAAQ,CAAC,IAAI,CAAC,uBAAuB,CAAC;AAE9E,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,IAAK,IAAI,CAAC,GAAc,CAAC;IACzE;AAEA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK;IACzB;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ;IAC5B;AAEA,IAAA,IAAI,oBAAoB,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ;IACvC;AAEA,IAAA,IAAI,eAAe,GAAA;QACjB,OAAO,IAAI,CAAC,KAAK;IACnB;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,YAAY,IAAI,IAAI;IAClD;AAEA,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,YAAY,KAAK,KAAK,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK;IAClE;AAEA,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,iBAAiB,IAAI,KAAK;IACxD;AAEA,IAAA,IAAI,sBAAsB,GAAA;AACxB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB;AAC5C,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW;AACpD,QAAA,MAAM,IAAI,GAAG,WAAW,KAAK,aAAa,GAAG,SAAS,GAAG,IAAI,CAAC,6BAA6B,CAAC,IAAI,EAAE;AAClG,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,QAAQ,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,cAAc,CAAC,IAAI,IAAI,CAAC,GAAG;IAC7D;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,YAAY,KAAK,CAAC,CAAC,KAAK,CAAiB,CAAC;IACxE;AAEA,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,eAAe;IAC7C;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS;IACvC;AAEA,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,cAAc;IAC5C;AAEA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO;IACrC;AAEA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM;IACpC;AAEA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE;IAClE;AAEA,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC;IACnF;AAEA,IAAA,IAAI,kBAAkB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,kBAAkB;IAChD;AAEA,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,cAAc,IAAI,IAAI;IACpD;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,WAAW,IAAI,QAAQ;IACrD;AAEA,IAAA,IAAI,qBAAqB,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,qBAAqB;IACnD;AAEA,IAAA,0BAA0B,CAAC,MAAW,EAAA;QACpC,OAAO,IAAI,CAAC,+BAA+B,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACjF;AAEA,IAAA,+BAA+B,CAAC,MAAyC,EAAA;AACvE,QAAA,OAAO,IAAI,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC,IAAI,CACrD,GAAG,CAAC,CAAC,aAAiE,KAAK,aAAa,CAAC,aAAa,CAAC,CAAC,EACxG,qBAAqB,EAAE,EACvB,WAAW,CAAC,CAAC,CAAC,CACf;IACH;AAEA,IAAA,8BAA8B,CAAC,MAAyC,EAAA;QACtE,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAC9B,QAAQ,CAAC,CAAC,UAAU,KAAI;YACtB,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAyC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAmG,CAAC;YAE5Q,MAAM;;YAEJ,QAAQ,EAAE,UAAU,EACpB,QAAQ,EAAE,YAAY,EACvB,GAAG,cAAc,CAAC,aAAa,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEvD,YAAA,IAAI,GAAmE;AAEvE,YAAA,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;;gBAE3B,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5E,gBAAA,MAAM,cAAc,GAAG,iCAAiC,CAAC,CAAC,gCAAgC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBAE1G,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,cAAc;AAE5D,gBAAA,GAAG,GAAG,gBAAgB,CAAC,IAAI,CACzB,KAAK,EAAE,EACP,GAAG,CAAC,CAAC,cAAc,KAAI;;AAEpB,oBAAA,cAAyE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AACvF,wBAAA,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE;AACd,4BAAA,CAAC,CAAC,OAAO,GAAG,cAAc;wBAC5B;6BAAO;AACL,4BAAA,CAAC,CAAC,OAAO,GAAG,iCAAiC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;wBAC5E;AAEA,wBAAA,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,cAAc,EAAE;AAC/B,4BAAA,CAAC,CAAC,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC;wBAC9B;AACF,oBAAA,CAAC,CAAC;;oBAGF,MAAM,qBAAqB,GAA6D,cAAqE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;oBACzM,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;;oBAGtF,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;;oBAGrE,MAAM,gBAAgB,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;AAGtF,oBAAA,OAAO,gBAAgB;gBACzB,CAAC,CAAC,CACH;YACH;iBAAO;;AAEL,gBAAA,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACvC;AAEA,YAAA,OAAO,GAAG;QACZ,CAAC,CAAC,CACH;IACH;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;AAE3C,QAAA,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,EAAE;YACtC,IAAI,CAAC,uBAAuB,CAAC,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QAC9H;AAEA,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,kBAAkB,EAAE;YAC3C,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC;QACvE;QAEA,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE;AAC5D,YAAA,IAAI,CAAC,mBAAmB,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AAC1E,gBAAA,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;oBACR,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7B;AACF,YAAA,CAAC,CAAC;QACJ;IACF;IAES,WAAW,GAAA;QAClB,KAAK,CAAC,WAAW,EAAE;AACnB,QAAA,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE;AACtC,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;AAC/B,QAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE;AAClC,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;AAC/B,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;IAC9B;AAEA;;;;AAIG;AACO,IAAA,gBAAgB,CAAC,KAA0C,EAAA;QACnE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;IACtC;AAEU,IAAA,iBAAiB,CAAC,IAAY,EAAA;AACtC,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE;YAC3C;QACF;QAEA,IAAI,IAAI,EAAE;YACR,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE;YAC1B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACtC;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE;YAC9B;QACF;QAEA,IAAI,IAAI,EAAE;AACR,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAI,IAAqB;AAC9F,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QACtB;IACF;AAEA;;AAEG;AACH,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM;QAEpC,IAAI,MAAM,EAAE;YACV,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AACrC,gBAAA,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC;AAEzB,gBAAA,IAAI,KAAK,EAAE,OAAO,EAAE;oBAClB,OAAO,KAAK,CAAC,OAAO;gBACtB;YACF;QACF;AAEA,QAAA,OAAO,SAAS;IAClB;AAEA,IAAA,mBAAmB,CAAC,YAAiD,EAAA;AACnE,QAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC;IACnC;AAEA,IAAA,sBAAsB,CAAC,YAAiD,EAAA;AACtE,QAAA,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC;IACtC;IAEA,wBAAwB,GAAA;QACtB,IAAI,UAAU,GAAG,KAAK;AAEtB,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;YAExC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE;AACxB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;gBAC7B,UAAU,GAAG,IAAI;YACnB;QACF;AAEA,QAAA,OAAO,UAAU;IACnB;AAEA,IAAA,QAAQ,CAAC,KAAQ,EAAA;AACf,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;QAElC,IAAI,SAAS,EAAE;AACb,YAAA,SAAS,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE;QACpC;AAEA,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACzC;AAEA,IAAA,WAAW,CAAC,KAAQ,EAAA;AAClB,QAAA,IAAI,MAAM;AAEV,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;YAC7C,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC;QAC3E;aAAO;AACL,YAAA,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC;QACjD;AAEA,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;IACxB;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;IACpB;AAEA,IAAA,SAAS,CAAC,MAAW,EAAA;;AAEnB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,MAAM,GAAG,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC;QACxD;AAEA,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,MAAM,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;QACvD;AAEA,QAAA,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC;IACrC;;AAGU,IAAA,sBAAsB,CAAC,kBAAmC,EAAA;AAClE,QAAA,MAAM,KAAK,GAAQ,kBAAkB,IAAI,IAAI,GAAG,OAAO,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC;AACjF,QAAA,OAAO,KAAK;IACd;AAEU,IAAA,sBAAsB,CAAC,MAAW,EAAA;QAC1C,IAAI,QAAQ,GAAY,MAAM;AAE9B,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;QACpD;AAEA,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACnC,QAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;AAC9B,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE;IAClC;uGAxYoB,wCAAwC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wCAAwC,iIAgB8B,UAAU,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAhBhF,wCAAwC,EAAA,UAAA,EAAA,CAAA;kBAD7D;AAiBsE,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,WAAW,OAAE,EAAE,IAAI,GAAE,UAA4B,CAAA,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AC3F1H;;;;;;AAMG;AAOG,MAAO,+BAAuF,SAAQ,wCAA+F,CAAA;AACzM,IAAA,IAAa,WAAW,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI;IACvC;AAEiB,IAAA,KAAK,GAAG,IAAI,OAAO,EAAQ;AAC3B,IAAA,QAAQ,GAAG,IAAI,kBAAkB,EAAE;AAE3C,IAAA,kBAAkB,GAAa,CAAC,KAAK,EAAE,KAAK,CAAC;AAEtD,IAAA,QAAQ,CAAC,KAAmC,EAAA;QAC1C,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;IAC9C;AAEA,IAAA,iBAAiB,CAAC,KAAoB,EAAA;QACpC,IAAI,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,KAAK,EAAE;AACvC,YAAA,IAAI,IAAI,CAAC,wBAAwB,EAAE,EAAE;gBACnC,KAAK,CAAC,cAAc,EAAE;gBACtB,KAAK,CAAC,wBAAwB,EAAE;AAChC,gBAAA,OAAO,KAAK;YACd;QACF;AAEA,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,OAAO,CAAC,KAAwB,EAAA;QAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK;AAChD,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;IACrC;AAEmB,IAAA,gBAAgB,CAAC,KAA0C,EAAA;;IAE9E;IAES,QAAQ,GAAA;QACf,KAAK,CAAC,QAAQ,EAAE;;QAGhB,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;YACpH,IAAI,CAAC,wBAAwB,EAAE;AACjC,QAAA,CAAC,CAAC;IACJ;IAES,WAAW,GAAA;QAClB,KAAK,CAAC,WAAW,EAAE;AACnB,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;IACzB;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;IACnB;uGApDW,+BAA+B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA/B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,+BAA+B,+FCxC5C,41DAmCA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDCY,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,OAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,uBAAA,EAAA,+BAAA,EAAA,aAAA,EAAA,IAAA,EAAA,UAAA,EAAA,UAAA,EAAA,iCAAA,CAAA,EAAA,OAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,wEAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,iNAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,qBAAqB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,wBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,eAAA,EAAA,OAAA,EAAA,8BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,mDAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,yBAAA,EAAA,4BAAA,EAAA,cAAA,EAAA,yBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,+BAAE,2CAA2C,EAAA,QAAA,EAAA,wCAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIrK,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAN3C,SAAS;8BAEC,CAAC,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,eAAe,EAAE,2CAA2C,CAAC,mBAChK,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,EAAA,QAAA,EAAA,41DAAA,EAAA;;;AE9BlB;;;;;AAKG;SACa,2CAA2C,CAA2D,EAAE,iBAAiB,EAAE,oBAAoB,EAAkP,EAAA;IAC/Y,OAAO,CAAC,MAAyC,KAAI;QACnD,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAClG,QAAA,IAAI,SAAwD;AAE5D,QAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1B,YAAA,MAAM,aAAa,GAAG,iBAAiB,CAAC,WAAW,CAAC;YACpD,SAAS,GAAG,aAAa,CAAC,IAAI,CAC5B,GAAG,CAAC,CAAC,MAAM,KAAI;AACb,gBAAA,MAAM,SAAS,GAAmD,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;gBAEpG,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AAC3C,oBAAA,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK;oBAClB,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;oBACpC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,UAAU,EAAE,MAAM;AAC7C,oBAAA,MAAM,IAAI,GAAa,UAAU,EAAE,IAAI;oBAEvC,OAAO;AACL,wBAAA,GAAG,CAAC;wBACJ,MAAM;wBACN;qBACD;AACH,gBAAA,CAAC,CAAC;AAEF,gBAAA,OAAO,cAAc;AACvB,YAAA,CAAC,CAAC,EACF,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CACxC;QACH;aAAO;AACL,YAAA,SAAS,GAAG,EAAE,CAAC,MAAM,CAAC;QACxB;QAEA,OAAO,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;AACxD,IAAA,CAAC;AACH;AAMA;;;;;;;;;;AAUG;AACG,SAAU,yBAAyB,CAAc,MAA0C,EAAA;AAC/F,IAAA,OAAO,mBAAmB,CAAC;AACzB,QAAA,GAAG,MAAM;AACT,QAAA,iBAAiB,EAAE;AACpB,KAAA,CAAC;AACJ;AAQA;;;;;;;;;;;AAWG;AACG,SAAU,mBAAmB,CAAwD,MAA0C,EAAA;IACnI,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,iBAAiB,EAAE,GAAG,MAAM;AACtD,IAAA,OAAO,WAAW,CAAC;QACjB,GAAG;AACH,QAAA,IAAI,EAAE,qBAAqB;QAC3B,GAAG,4BAA4B,CAAC,MAAM,EAAE;AACtC,YAAA,GAAG,iBAAiB;AACpB,YAAA,GAAG,MAAM;YACT,WAAW,EAAE,WAAW,IAAI,QAAQ;AACpC,YAAA,YAAY,EAAE;SACf;AACF,KAAA,CAAC;AACJ;AAQA;;;;;;;;;;;AAWG;AACG,SAAU,mBAAmB,CAAwD,MAA0C,EAAA;AACnI,IAAA,MAAM,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,MAAM;AACzC,IAAA,OAAO,WAAW,CAAC;QACjB,GAAG;AACH,QAAA,IAAI,EAAE,qBAAqB;QAC3B,GAAG,4BAA4B,CAAC,MAAM,EAAE;AACtC,YAAA,GAAG,iBAAiB;AACpB,YAAA,GAAG,MAAM;AACT,YAAA,YAAY,EAAE;SACf;AACF,KAAA,CAAC;AACJ;;AC7GA;;;;;AAKG;AAOG,MAAO,+BAAuF,SAAQ,wCAA+F,CAAA;IAChM,qBAAqB,GAAG,IAAI;IAE5B,qBAAqB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CACvD,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAChB,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,0BAA0B,GAAG,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC;AACjE,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC,0DAAC;AAC3E,IAAA,8BAA8B,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,cAAc,EAAE,0EAAC;AAEzG,IAAA,IAAa,eAAe,GAAA;QAC1B,OAAO,IAAI,CAAC,KAAK;IACnB;AAEA,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;IAC3E;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,KAAK;IACd;AAEA;;;;;;;;;;;;;;;;;AAiBE;AAEF,IAAA,QAAQ,CAAC,KAAmC,EAAA;AAC1C,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAqF;AAEhH,QAAA,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC;AAE9B,QAAA,IAAK,KAAa,CAAC,MAAM,EAAE;YACzB,IAAI,CAAC,WAAW,EAAE;QACpB;AAAO,aAAA,IAAI,CAAE,KAAa,CAAC,OAAO,EAAE;AAClC,YAAA,IAAI,CAAC,mBAAmB,CAAC,KAA4C,CAAC;QACxE;IACF;uGArDW,+BAA+B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA/B,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpC5C,swEAmDA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDnBY,WAAW,uZAAE,QAAQ,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,iNAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,qBAAqB,urBAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,2CAA2C,EAAA,QAAA,EAAA,wCAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIxL,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAN3C,SAAS;8BAEC,CAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,eAAe,EAAE,qBAAqB,EAAE,cAAc,EAAE,aAAa,EAAE,2CAA2C,CAAC,EAAA,eAAA,EACnL,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,EAAA,QAAA,EAAA,swEAAA,EAAA;;;AE5BlB,MAAMF,mBAAiB,GAAG,CAAC,+BAA+B,EAAE,+BAA+B,EAAE,2CAA2C,EAAE,yCAAyC,CAAC;AAEpL;MAaa,kCAAkC,CAAA;uGAAlC,kCAAkC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAlC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kCAAkC,EAAA,OAAA,EAAA,CAfpB,+BAA+B,EAAE,+BAA+B,EAAE,2CAA2C,EAAE,yCAAyC,EAAAD,IAAA,CAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAxJ,+BAA+B,EAAE,+BAA+B,EAAE,2CAA2C,EAAE,yCAAyC,CAAA,EAAA,CAAA;AAetK,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kCAAkC,YAVxCC,mBAAiB,EACpB,YAAY,CAAC,QAAQ,CAAC;AACpB,gBAAA,KAAK,EAAE;AACL,oBAAA,EAAE,IAAI,EAAE,qBAAqB,EAAE,SAAS,EAAE,+BAA+B,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE;AACrG,oBAAA,EAAE,IAAI,EAAE,qBAAqB,EAAE,SAAS,EAAE,+BAA+B,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC;AACpG;aACF,CAAC,CAAA,EAAA,CAAA;;2FAIO,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAZ9C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;AACP,wBAAA,GAAGA,mBAAiB;wBACpB,YAAY,CAAC,QAAQ,CAAC;AACpB,4BAAA,KAAK,EAAE;AACL,gCAAA,EAAE,IAAI,EAAE,qBAAqB,EAAE,SAAS,EAAE,+BAA+B,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE;AACrG,gCAAA,EAAE,IAAI,EAAE,qBAAqB,EAAE,SAAS,EAAE,+BAA+B,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC;AACpG;yBACF;AACF,qBAAA;AACD,oBAAA,OAAO,EAAEA;AACV,iBAAA;;;ACND;;;;;;;;;;;AAWG;AACG,SAAU,aAAa,CAAC,MAA2B,EAAA;IACvD,MAAM,kBAAkB,GAAG,MAAM,CAAC,aAAa,GAAG,CAAC,CAAS,KAAK,CAAC,GAAG,CAAC,CAAS,KAAK,CAAC,EAAE,WAAW,EAAE;AAEpG,IAAA,OAAO,mBAAmB,CAAC;QACzB,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AACpB,QAAA,GAAG,MAAM;AACT,QAAA,iBAAiB,EAAE,IAAI;QACvB,kBAAkB;AAClB,QAAA,eAAe,EAAE,CAAC,MAA2C,KAAI;YAC/D,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC1D;AACD,KAAA,CAAC;AACJ;;ACoBA;;;;;;AAMG;AAQG,MAAO,iCAAsF,SAAQC,WAAwD,CAAA;AAChJ,IAAA,aAAa,GAAG,IAAI,kBAAkB,EAAE;AACxC,IAAA,uBAAuB,GAAG,IAAI,kBAAkB,EAAE;IAClD,iBAAiB,GAAG,IAAI,eAAe,CAAkC,IAAI,GAAG,EAAE,CAAC;IACnF,eAAe,GAAG,IAAI,eAAe,CAAyC,IAAI,GAAG,EAAE,CAAC;AAExF,IAAA,eAAe,GAAG,IAAI,eAAe,CAA8B,SAAS,CAAC;AAC7E,IAAA,eAAe,GAAG,IAAI,eAAe,CAAiC,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;AAC3G,IAAA,YAAY,GAAG,IAAI,eAAe,CAAiD,SAAS,CAAC;IAErG,aAAa,GAAG,SAAS,CAAkC,QAAQ,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,eAAA,EAAA,GAAA,EAAA,CAAA,EAAI,IAAI,GAAE,UAAuB,CAAA,EAAA,CAAG;IAEvG,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAEvD,IAAA,wBAAwB,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CACxD,SAAS,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAC3E,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,OAAO,GAAoB,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AAEvG,IAAA,sBAAsB,GAAoB,IAAI,CAAC,OAAO,CAAC,IAAI,CAClE,IAAI,CAAC,CAAC,GAAG,EAAE,MAAM,KAAI;QACnB,IAAI,MAAM,GAAW,GAAG;QAExB,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE;AACtC,YAAA,MAAM,GAAG,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC;QACpC;AAEA,QAAA,OAAO,MAAM;AACf,IAAA,CAAC,EAAE,IAAI,GAAG,EAAK,CAAC,EAChB,oBAAoB,EAAE,EACtB,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EACzB,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,kCAAkC,GAAwD,IAAI,CAAC,sBAAsB,CAAC,IAAI,CACjI,oBAAoB,EAAE,EACtB,SAAS,CAAC,CAAC,MAAW,KAAK,IAAI,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC,EACvE,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,YAAY,GAA6D,IAAI,CAAC,YAAY,CAAC,IAAI,CACtG,WAAW,EAAE,EACb,SAAS,CAAC,CAAC,UAAU,KAAI;AACvB,QAAA,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI;QAE5B,OAAO,UAAU,CAAC,IAAI,CACpB,SAAS,CAAC,CAAC,OAAoC,KAAI;AACjD,YAAA,MAAM,SAAS,GAAwD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AAE9J,YAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1B,gBAAA,OAAO,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YAC9B;iBAAO;AACL,gBAAA,OAAO,aAAa,CAAC,SAAS,CAAC,CAAC,IAAI,CAClC,GAAG,CAAC,CAAC,CAAC,KAAI;AACR,oBAAA,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,8BAA8B,CAAC,CAAC,CAAC,CAAC;oBAC3E,MAAM,OAAO,GAAG,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;oBACzD,MAAM,KAAK,GAAmC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AACvE,wBAAA,MAAM,KAAK,GAAiC;4BAC1C,KAAK,EAAE,CAAC,CAAC,KAAK;4BACd,MAAM,EAAG,CAAC,CAAC,KAAa,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;yBAC5E;AAED,wBAAA,OAAO,KAAK;AACd,oBAAA,CAAC,CAAC;oBAEF,OAAO;wBACL,OAAO;wBACP;qBACD;gBACH,CAAC,CAAC,CACH;YACH;QACF,CAAC,CAAC,CACH;IACH,CAAC,CAAC,CACH;AAEQ,IAAA,eAAe,GAA6C,IAAI,CAAC,eAAe,CAAC,IAAI,CAC5F,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,iBAAiB,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAC3E,GAAG,CAAC,CAAC,CAAC,KAAI;AACR,QAAA,MAAM,KAAK,GAAiC;AAC1C,YAAA,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,CAAC,CAAC;SACX;AAED,QAAA,OAAO,KAAK;AACd,IAAA,CAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf;IAEQ,4BAA4B,GAA6E,aAAa,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAC7K,GAAG,CAAC,CAAC,CAAC,mBAAmB,EAAE,WAAW,CAAC,KAAI;AACzC,QAAA,MAAM,gBAAgB,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAChD,MAAM,KAAK,GAAmC,CAAC,mBAAmB,EAAE,GAAG,gBAAgB,CAAC;AAExF,QAAA,MAAM,MAAM,GAAiE;YAC3E,OAAO,EAAE,WAAW,CAAC,OAAO;YAC5B;SACD;AAED,QAAA,OAAO,MAAM;AACf,IAAA,CAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,oBAAoB,GAA6D,IAAI,CAAC,kCAAkC,CAAC,IAAI,CACpI,SAAS,CAAC,CAAC,4BAAqE,KAAI;AAClF,QAAA,IAAI,8BAA8B,CAAC,4BAA4B,CAAC,EAAE;AAChE,YAAA,MAAM,qBAAqB,GAAiC;AAC1D,gBAAA,KAAK,EAAE,EAAE;gBACT,MAAM,EAAE,4BAA4B,CAAC;aACtC;YAED,OAAO,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAC3C,GAAG,CAAC,CAAC,YAAY,KAAI;gBACnB,MAAM,SAAS,GAAmC,CAAC,qBAAqB,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC;AAEhG,gBAAA,MAAM,MAAM,GAAiD;AAC3D,oBAAA,OAAO,EAAE,4BAA4B,CAAC,OAAO,IAAI,YAAY,CAAC,OAAO;AACrE,oBAAA,KAAK,EAAE;iBACR;AAED,gBAAA,OAAO,MAAM;YACf,CAAC,CAAC,CACH;QACH;aAAO;AACL,YAAA,OAAO,EAAE,CAAC,YAAY,CAAiC,EAAE,CAAC,CAAC;QAC7D;AACF,IAAA,CAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,qBAAqB,GAAoE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAC9H,gCAAgC,CAC9B,SAAS,CAAC,CAAC,MAAsC,KAAI;AACnD,QAAA,MAAM,uBAAuB,GAAG,kBAAkB,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAgD;AAEzH,QAAA,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAK;QACtC,MAAM,eAAe,GAA8B,EAAE;QAErD,MAAM,sBAAsB,GAAmC,EAAE;;AAGjE,QAAA,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE;AACzC,aAAA,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aACtC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAI;YAC3B,MAAM,MAAM,GAA8B,EAAE;AAE5C,YAAA,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;gBACvB,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,KAAI;oBACnC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;AAC7C,wBAAA,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;AACxB,wBAAA,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC;AACjC,wBAAA,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC;oBAC1C;AACF,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC,CAAC;AAEF,YAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;gBACrB,sBAAsB,CAAC,IAAI,CAAC;oBAC1B,KAAK;oBACL;AACD,iBAAA,CAAC;YACJ;AACF,QAAA,CAAC,CAAC;AAEJ,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,+BAA+B,CAAC,eAAe,CAAC,CAAC,IAAI,CACpE,GAAG,CAAC,CAAC,aAAa,KAAI;YACpB,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YAExE,MAAM,aAAa,GAA0C,sBAAsB,CAAC,GAAG,CAAC,CAAC,UAAU,KAAI;gBACrG,MAAM,MAAM,GAAG,sBAAsB,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;gBAElG,OAAO;oBACL,KAAK,EAAE,UAAU,CAAC,KAAK;oBACvB;iBACD;AACH,YAAA,CAAC,CAAC;AAEF,YAAA,OAAO,aAAa;QACtB,CAAC,CAAC,CACH;AAED,QAAA,OAAO,GAAG;IACZ,CAAC,CAAC,CACH,EACD,WAAW,CAAC,CAAC,CAAC,CACf;IAEQ,gBAAgB,GAAsD,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAC5G,6BAA6B,EAAE,EAC/B,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EACnB,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,QAAQ,GAA0C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CACnF,GAAG,CAAC,CAAC,CAAC,KAAI;QACR,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAEzG,QAAA,MAAM,MAAM,GAA8B;YACxC,gBAAgB,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,EAAE;YAClD;SACD;AAED,QAAA,OAAO,MAAM;AACf,IAAA,CAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,gBAAgB,CAAC,CAAC;AACtE,IAAA,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,CAAC;AAEjE,IAAA,sBAAsB,GAAG,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC;AACzD,IAAA,oBAAoB,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC;AAE9D,IAAA,IAAI,iBAAiB,GAAA;QACnB,OAAO,IAAI,CAAC,KAAK;IACnB;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU;IAC9B;AAEA,IAAA,IAAI,oBAAoB,GAAA;AACtB,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;IACjC;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW;IAC/B;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW;IAC/B;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU;IAC9B;AAEA,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,eAAe;IACnC;AAEA,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,KAAK;IAC7C;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK;IACrC;AAEA,IAAA,IAAI,qBAAqB,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,qBAAqB;IACzC;AAEA,IAAA,8BAA8B,CAAC,MAAW,EAAA;AACxC,QAAA,OAAO,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC,IAAI,CACpD,GAAG,CAAC,CAAC,kBAA6C,KAAK,aAAa,CAAC,kBAAkB,CAAC,CAAC,EACzF,qBAAqB,EAAE,EACvB,WAAW,CAAC,CAAC,CAAC,CACf;IACH;AAEA,IAAA,6BAA6B,CAAC,MAAW,EAAA;AACvC,QAAA,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI;QAE5B,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAChC,QAAQ,CAAC,CAAC,OAAO,KAAI;YACnB,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAyC,CAAC;YAEnH,MAAM;;YAEJ,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,SAAS,EACpB,GAAG,cAAc,CAAC,aAAa,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEvD,YAAA,IAAI,GAA0C;AAE9C,YAAA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;;gBAExB,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEjE,gBAAA,GAAG,GAAG,aAAa,CAAC,IAAI,CACtB,KAAK,EAAE,EACP,GAAG,CAAC,CAAC,WAAW,KAAI;oBAClB,MAAM,kBAAkB,GAA8B,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACrH,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;;AAG9E,oBAAA,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;;oBAG1D,MAAM,gBAAgB,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;AAGtF,oBAAA,OAAO,gBAAgB;gBACzB,CAAC,CAAC,CACH;YACH;iBAAO;;AAEL,gBAAA,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACpC;AAEA,YAAA,OAAO,GAAG;QACZ,CAAC,CAAC,CACH;IACH;AAEA,IAAA,gCAAgC,CAAC,MAAiC,EAAA;AAChE,QAAA,OAAO,IAAI,CAAC,+BAA+B,CAAC,MAAM,CAAC,CAAC,IAAI,CACtD,GAAG,CAAC,CAAC,aAA+C,KAAK,aAAa,CAAC,aAAa,CAAC,CAAC,EACtF,qBAAqB,EAAE,EACvB,WAAW,CAAC,CAAC,CAAC,CACf;IACH;AAEA,IAAA,+BAA+B,CAAC,MAAiC,EAAA;QAC/D,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAC9B,QAAQ,CAAC,CAAC,OAAO,KAAI;YACnB,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAiC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAyE,CAAC;AAEpN,YAAA,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7D,YAAA,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,YAAA,IAAI,GAAiD;AAErD,YAAA,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;;gBAE3B,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE5E,gBAAA,GAAG,GAAG,gBAAgB,CAAC,IAAI,CACzB,KAAK,EAAE,EACP,GAAG,CAAC,CAAC,cAAc,KAAI;AACrB,oBAAA,MAAM,qBAAqB,GAA2C,cAAmD,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;oBAClJ,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;;oBAGtF,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;;oBAGlE,MAAM,gBAAgB,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;AAGtF,oBAAA,OAAO,gBAAgB;gBACzB,CAAC,CAAC,CACH;YACH;iBAAO;;AAEL,gBAAA,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACvC;AAEA,YAAA,OAAO,GAAG;QACZ,CAAC,CAAC,CACH;IACH;IAES,OAAO,GAAG,mBAAmB,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,qBAAqB,EAAE,CAAC;IAE3E,QAAQ,GAAA;AACN,QAAA,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI;AAE5B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;AAEjD,QAAA,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,EAAE;YACtC,IAAI,CAAC,uBAAuB,CAAC,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QAC9H;QAEA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;;AAG3C,QAAA,IAAI,CAAC,aAAa,CAAC,YAAY,GAAG,IAAI,CAAC,4BAA4B,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AAClF,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK;AAC5C,YAAA,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1E,QAAA,CAAC,CAAC;IACJ;IAES,WAAW,GAAA;QAClB,KAAK,CAAC,WAAW,EAAE;AACnB,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;AAC5B,QAAA,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE;AACtC,QAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE;AACjC,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;AAC/B,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;AAC/B,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;AAC/B,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;AAC5B,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;IACxB;AAES,IAAA,mBAAmB,GAA8B,CAAC,CAAC,EAAE,OAAO,KAAI;AACvE,QAAA,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI;AAC3B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE;AAEnC,QAAA,IAAI,UAAU,IAAI,MAAM,EAAE;YACxB,MAAM,SAAS,GAAG,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;AACxC,YAAA,OAAO,CAAC,0BAA0B,CAChC,SAAS,CAAC,IAAI,CACZ,KAAK,EAAE,EACP,GAAG,CAAC,CAAC,MAAuC,KAAI;AAC9C,gBAAA,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;AAEhE,gBAAA,IAAI,WAAW,CAAC,MAAM,EAAE;AACtB,oBAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC;gBACtC;AAEA,gBAAA,IAAI,MAAM,CAAC,GAAG,EAAE;oBACd,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClE;AAAO,qBAAA,IAAI,MAAM,CAAC,MAAM,EAAE;oBACxB,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvE;YACF,CAAC,CAAC,CACH,CACF;QACH;aAAO;YACL,OAAO,CAAC,MAAM,EAAE;QAClB;AACF,IAAA,CAAC;AAEO,IAAA,kBAAkB,CAAC,KAAU,EAAA;AACnC,QAAA,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI;AAC5B,QAAA,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK;QAE7E,MAAM,gBAAgB,GAA8B,EAAE;AACtD,QAAA,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC;AAExC,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AAClB,YAAA,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC;YAE5B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;gBACzB,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;AACzC,gBAAA,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;YACtB;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACxB,gBAAA,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,gBAAgB,CAAC;AACtC,gBAAA,SAAS,EAAE;AACZ,aAAA,CAAC;QACJ;IACF;AAEQ,IAAA,iBAAiB,CAAC,MAAW,EAAA;QACnC,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;QACpD,MAAM,aAAa,GAAG,CAAC,GAAG,YAAY,EAAE,GAAG,MAAM,CAAC;AAClD,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC;IACrC;AAEQ,IAAA,eAAe,CAAC,aAAkB,EAAA;AACxC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,GAAG,aAAa,GAAG,SAAS,CAAC,aAAa,CAAC,CAAC;AACvE,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC;AAChC,QAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;AAC9B,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE;IAClC;uGArcW,iCAAiC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAjC,iCAAiC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAU0C,UAAU,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClFlG,0uCA2BA,4CD0CY,SAAS,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,YAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,SAAS,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,sIAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,aAAA,EAAA,OAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,OAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,KAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,WAAW,mHAAE,wBAAwB,EAAA,QAAA,EAAA,qCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,CAAA,QAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAGtJ,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAP7C,SAAS;+BACE,4BAA4B,EAAA,eAAA,EAErB,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,WAAW,EAAE,wBAAwB,EAAE,eAAe,EAAE,mBAAmB,CAAC,EAAA,UAAA,EACtJ,IAAI,EAAA,QAAA,EAAA,0uCAAA,EAAA;AAYoD,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,QAAQ,OAAE,EAAE,IAAI,GAAE,UAAuB,CAAA,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEvEjH;;;;;;;;;;;;;;;;AAgBG;AACG,SAAU,iBAAiB,CAAqD,MAAqC,EAAA;AACzH,IAAA,MAAM,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,MAAM;AACzC,IAAA,OAAO,WAAW,CAAC;QACjB,GAAG;AACH,QAAA,IAAI,EAAE,mBAAmB;QACzB,GAAG,4BAA4B,CAAC,MAAM,EAAE;AACtC,YAAA,GAAG,iBAAiB;AACpB,YAAA,GAAG,MAAM;AACT,YAAA,YAAY,EAAE;SACf;AACF,KAAA,CAAC;AACJ;;ACnCA;MAUa,+BAA+B,CAAA;uGAA/B,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAA/B,+BAA+B,EAAA,OAAA,EAAA,CAPxC,iCAAiC,EAAAF,IAAA,CAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAKzB,iCAAiC,CAAA,EAAA,CAAA;AAEhC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,+BAA+B,YAPxC,iCAAiC;YACjC,YAAY,CAAC,QAAQ,CAAC;AACpB,gBAAA,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,iCAAiC,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE;aAC9G,CAAC,CAAA,EAAA,CAAA;;2FAIO,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAT3C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,iCAAiC;wBACjC,YAAY,CAAC,QAAQ,CAAC;AACpB,4BAAA,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,iCAAiC,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE;yBAC9G;AACF,qBAAA;oBACD,OAAO,EAAE,CAAC,iCAAiC;AAC5C,iBAAA;;;ACsCD;;;;;;;;;;;;;;;AAeG;AACG,SAAU,mBAAmB,CAAI,MAAoC,EAAA;IACzE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,KAAK,EAAE,cAAc,GAAG,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,GAAG,MAAM;AAC/I,IAAA,IAAI,qBAAyD;IAE7D,IAAI,oBAAoB,EAAE;AACxB,QAAA,qBAAqB,GAAG;AACtB,YAAA,eAAe,EAAE,OAAO,oBAAoB,KAAK,SAAS,GAAG,YAAY,GAAI;SAC9E;IACH;AAEA,IAAA,MAAM,OAAO,GAAG,cAAc,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,+BAA+B,CAAC,OAAO,cAAc,KAAK,QAAQ,GAAG,cAAc,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,YAAY;IACtL,IAAI,OAAO,GAAoC,SAAS;AAExD,IAAA,OAAO,GAAG,MAAM,CAAC,QAAQ,KAAK,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,mBAAmB,CAAC;AAEzE,IAAA,OAAO,WAAW,CAAC;QACjB,GAAG;QACH,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,QAAQ;QACzC,GAAG,4BAA4B,CAAC,MAAM,EAAE;AACtC,YAAA,GAAG,iBAAiB;YACpB,OAAO;YACP,QAAQ,EAAE,MAAM,CAAC,QAAQ;AACzB,YAAA,GAAG;SACJ,CAAC;QACF;AACD,KAAA,CAAC;AACJ;AAEA;;;;;;AAMG;AACG,SAAU,+BAA+B,CAAI,KAA0B,EAAA;IAC3E,OAAO,CAAC,OAAkC,KAAI;AAC5C,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,KAAM,CAA+B,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAExF,IAAI,QAAQ,EAAE;AACZ,YAAA,OAAO,OAAO;QAChB;aAAO;AACL,YAAA,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC;QAC7C;AACF,IAAA,CAAC;AACH;;ACjGA;;;;;AAKG;AAsBG,MAAO,2BAAqG,SAAQE,WAA6B,CAAA;IACpI,oBAAoB,GAAG,MAAM,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAE/E,IAAA,OAAO;AACE,IAAA,IAAI,GAAG,IAAI,kBAAkB,EAAE;IAEvC,aAAa,GAAG,iBAAiB,CAAC,IAAI,CAAC,oBAAoB,EAAE,KAAK,EAAE;AAC3E,QAAA,OAAO,EAAE;AACV,KAAA,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAEb,IAAA,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;AAEhF,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAa;IACjC;AAEA,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,IAAiB;IAC/B;AAEA,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,OAAO;IACrB;AAEA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK;IAChC;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW;IAC/B;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,OAAO,GAAG,IAAI,MAAM,CAAC,EAAE,CAAC;;;;QAO7B,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC;aAClC,IAAI,CACH,YAAY,CAAC,EAAE,CAAC,EAChB,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;aAE1C,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,WAAW,CAAC,sBAAsB,EAAE;AACzC,YAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;AAChC,QAAA,CAAC,CAAC;IACN;IAES,WAAW,GAAA;QAClB,KAAK,CAAC,WAAW,EAAE;AAEnB,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE;AACxB,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;QACxB;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;IACrB;uGA3DW,2BAA2B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApB5B;;;;;;;;;;;;;;;AAeT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACS,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,cAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,UAAA,EAAA,QAAA,EAAA,eAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,8SAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIzD,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBArBvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;AAeT,EAAA,CAAA;oBACD,OAAO,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,mBAAmB,CAAC;oBACrE,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACrCD,MAAME,mBAAiB,GAAG,CAAC,2BAA2B,CAAC;AAEvD;MAUa,kCAAkC,CAAA;uGAAlC,kCAAkC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAAlC,kCAAkC,EAAA,OAAA,EAAA,CAZpB,2BAA2B,EAAAD,IAAA,CAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAA3B,2BAA2B,CAAA,EAAA,CAAA;AAYzC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kCAAkC,YAPxCC,mBAAiB,EACpB,YAAY,CAAC,QAAQ,CAAC;gBACpB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,2BAA2B,EAAE;aACvE,CAAC,CAAA,EAAA,CAAA;;2FAIO,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAT9C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;AACP,wBAAA,GAAGA,mBAAiB;wBACpB,YAAY,CAAC,QAAQ,CAAC;4BACpB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,2BAA2B,EAAE;yBACvE;AACF,qBAAA;AACD,oBAAA,OAAO,EAAEA;AACV,iBAAA;;;ACND;;;;;;;;;;;;AAYG;AACG,SAAU,eAAe,CAAC,MAA6B,EAAA;IAC3D,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,iBAAiB,EAAE,GAAG,MAAM;IAC/D,MAAM,WAAW,GAAsB,WAAW,CAAC;QACjD,GAAG;AACH,QAAA,IAAI,EAAE,YAAY;QAClB,YAAY,EAAE,EAAE;AAChB,QAAA,YAAY,EAAE;;;AAGZ,YAAA,QAAQ,EAAE;AACX,SAAA;QACD,GAAG,4BAA4B,CAAC,MAAM,EAAE;AACtC,YAAA,GAAG,iBAAiB;YACpB,SAAS;YACT;SACD;AACF,KAAA,CAAC;AAEF,IAAA,OAAO,WAAW;AACpB;;ACoCA;;;;;;;AAOG;AA6CG,MAAO,+BAA6C,SAAQ,cAA8D,CAAA;AAC7G,IAAA,cAAc,GAAG,YAAY,CAAC,MAAK;AAClD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa;AAEjD,QAAA,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;AAC/B,YAAA,OAAO,KAAK;QACd;aAAO;AACL,YAAA,OAAO,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC;QAChC;AACF,IAAA,CAAC,CAAC;AAEe,IAAA,YAAY,GAAwD,YAAY,CAAC,MAAK;AACrG,QAAA,OAAO,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC;AAC/D,IAAA,CAAC,CAAC;AAEe,IAAA,eAAe,GAAwD,YAAY,CAAC,MAAK;AACxG,QAAA,OAAO,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,IAAI,KAAK,EAAE,KAAK,CAAC;AAC5E,IAAA,CAAC,CAAC;AAEF,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK;IACzB;AAEA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,IAAK,IAAI,CAAC,KAAK,CAAC,GAAc;IAC7D;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW;IACrC;AAEA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,IAAI,WAAW;IACrD;AAEA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,IAAI,KAAK;IAC/C;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,WAAW;IAC1C;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,IAAI,QAAQ;IACrD;AAEA,IAAA,IAAI,GAAG,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS;IACnC;AAEA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC;IAC3C;AAEA,IAAA,IAAI,gBAAgB,GAAA;QAClB,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC;IACnD;AAEA,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI;IAC1C;AAEA,IAAA,IAAI,iBAAiB,GAAA;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,iBAAiB,IAAI,KAAK;IACpD;AAEA,IAAA,WAAW,CAAC,CAAS,EAAA;AACnB,QAAA,MAAM,KAAK,GAAc,IAAI,CAAC,KAAK;AACnC,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAkB;AACvC,QAAA,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;YACzB,CAAC;YACD;AACD,SAAA,CAAC;IACJ;AAEA,IAAA,cAAc,CAAC,CAAS,EAAA;AACtB,QAAA,MAAM,KAAK,GAAc,IAAI,CAAC,KAAK;AACnC,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAM;AAC3B,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC;YAC5B,CAAC;YACD;AACD,SAAA,CAAC;IACJ;AAEA,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,CAAC,IAAI,CAAC,UAAU;IACzB;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG;AAEpB,QAAA,IAAI,GAAG,IAAI,IAAI,EAAE;AACf,YAAA,OAAO,IAAI;QACb;aAAO;AACL,YAAA,OAAO,IAAI,CAAC,KAAK,GAAG,GAAG;QACzB;IACF;AAEA;;;;AAIG;AACH,IAAA,MAAM,CAAC,KAAa,EAAA;AAClB,QAAA,IAAI,KAAK,KAAK,CAAC,EAAE;YACf;QACF;QAEA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC;IACpC;AAEA,IAAA,QAAQ,CAAC,KAAa,EAAA;QACpB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC;IACpC;IAEA,UAAU,GAAA;AACR,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW;AACpC,QAAA,MAAM,QAAQ,GAAG,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,SAAS;AAClE,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC;IAC/B;AAEA,IAAA,SAAS,CAAC,KAAa,EAAA;AACrB,QAAA,MAAM,KAAK,GAAc,IAAI,CAAC,KAAK;AACnC,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC;QAEhC,IAAI,CAAC,WAAW,EAAE;YAChB;QACF;AAEA,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK;AACjE,QAAA,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,WAAW,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAC3D;IAEA,WAAW,CAAC,YAAoB,EAAE,WAAmB,EAAA;AACnD,QAAA,MAAM,KAAK,GAAc,IAAI,CAAC,KAAK;AACnC,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC;QAEvC,IAAI,CAAC,WAAW,EAAE;YAChB;QACF;AAEA,QAAA,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;AACzB,QAAA,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,WAAW,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AACzD,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE;IAClC;AAEA,IAAA,IAAI,CAAC,KAA2B,EAAA;QAC9B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,YAAY,CAAC;IAC3D;IAEA,YAAY,CAAC,WAA8B,EAAE,CAAS,EAAA;AACpD,QAAA,MAAM,KAAK,GAAc,IAAI,CAAC,KAAK;AACnC,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAM;AAE3B,QAAA,OAAO,kBAAkB,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE;YAC/C,CAAC;YACD,KAAK;YACL;AACD,SAAA,CAAC;IACJ;uGAhKW,+BAA+B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA/B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA3ChC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACS,sBAAsB,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,gFAAE,kBAAkB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,aAAA,EAAA,OAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,OAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,KAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,4BAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,+BAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,sBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,sLAAE,wBAAwB,EAAA,QAAA,EAAA,qCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,8BAAE,mBAAmB,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIvL,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBA5C3C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCT,EAAA,CAAA;oBACD,OAAO,EAAE,CAAC,sBAAsB,EAAE,eAAe,EAAE,kBAAkB,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,WAAW,EAAE,mBAAmB,CAAC;oBACnM,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE;AACb,iBAAA;;;AC5HD,MAAME,mBAAiB,GAAG,CAAC,+BAA+B,CAAC;AAE3D;MAUa,6BAA6B,CAAA;uGAA7B,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAA7B,6BAA6B,EAAA,OAAA,EAAA,CAZf,+BAA+B,EAAAD,IAAA,CAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAA/B,+BAA+B,CAAA,EAAA,CAAA;AAY7C,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,6BAA6B,YAPnCC,mBAAiB,EACpB,YAAY,CAAC,QAAQ,CAAC;gBACpB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,+BAA+B,EAAE;aAC5E,CAAC,CAAA,EAAA,CAAA;;2FAIO,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBATzC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;AACP,wBAAA,GAAGA,mBAAiB;wBACpB,YAAY,CAAC,QAAQ,CAAC;4BACpB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,+BAA+B,EAAE;yBAC5E;AACF,qBAAA;AACD,oBAAA,OAAO,EAAEA;AACV,iBAAA;;;ACDD;;;;;;;;;;;;;;;;;;AAkBG;AACG,SAAU,gBAAgB,CAAc,MAAiC,EAAA;AAC7E,IAAA,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,iBAAiB,EAAE,GAAG,MAAM;AAEnN,IAAA,OAAO,WAAW,CAAC;QACjB,GAAG;AACH,QAAA,IAAI,EAAE,aAAa;QACnB,GAAG,4BAA4B,CAAC,MAAM,EAAE;YACtC,KAAK;YACL,WAAW;YACX,SAAS;YACT,aAAa;YACb,OAAO;YACP,WAAW;YACX,UAAU;YACV,aAAa;YACb,gBAAgB;YAChB,QAAQ;YACR,WAAW;YACX,cAAc;YACd;SACD,CAAC;AACF,QAAA,UAAU,EAAE;AACV,YAAA,UAAU,EAAE,OAAO,CAAC,gBAAgB;AACrC;AACF,KAAA,CAAC;AACJ;;ACrDA,MAAMA,mBAAiB,GAAG,CAAC,oBAAoB,EAAE,uBAAuB,EAAE,qBAAqB,CAAC;AAEhG;MAKa,+BAA+B,CAAA;uGAA/B,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAA/B,+BAA+B,EAAA,OAAA,EAAA,CAPjB,oBAAoB,EAAE,uBAAuB,EAAE,qBAAqB,CAAA,EAAA,OAAA,EAAA,CAApE,oBAAoB,EAAE,uBAAuB,EAAE,qBAAqB,CAAA,EAAA,CAAA;AAOlF,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,+BAA+B,YAHjCA,mBAAiB,EAJD,oBAAoB,EAAE,uBAAuB,EAAE,qBAAqB,CAAA,EAAA,CAAA;;2FAOlF,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAJ3C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAEA,mBAAiB;AAC1B,oBAAA,OAAO,EAAEA;AACV,iBAAA;;;ACFD;;;;;;;;;;;;AAYG;AACG,SAAU,WAAW,CAAC,MAAyB,EAAA;IACnD,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,iBAAiB,EAAE,GAAG,MAAM;IAEvD,MAAM,WAAW,GAAG,mCAAmC;AACvD,IAAA,OAAO,WAAW,CAAC;QACjB,GAAG;AACH,QAAA,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,CAAC,sBAAsB,EAAE,iBAAiB,EAAE,YAAY,CAAC;QACnE,YAAY,EAAE,YAAY,IAAI,KAAK;QACnC,GAAG,4BAA4B,CAAC,MAAM,EAAE;YACtC,WAAW;AACX,YAAA,GAAG;SACJ;AACF,KAAA,CAAC;AACJ;AAOA;;;;;;;;;;;;AAYG;AACG,SAAU,aAAa,CAAC,MAA2B,EAAA;IACvD,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,iBAAiB,EAAE,GAAG,MAAM;IAEvD,MAAM,WAAW,GAAG,qCAAqC;AACzD,IAAA,OAAO,WAAW,CAAC;QACjB,GAAG;AACH,QAAA,IAAI,EAAE,UAAU;AAChB,QAAA,QAAQ,EAAE,CAAC,iBAAiB,EAAE,YAAY,CAAC;QAC3C,YAAY,EAAE,YAAY,IAAI,KAAK;QACnC,GAAG,4BAA4B,CAAC,MAAM,EAAE;YACtC,WAAW;AACX,YAAA,GAAG;SACJ;AACF,KAAA,CAAC;AACJ;AAEA;;;;;;;;;;;;;;;;;;;AAmBE;;ACrCF;;;;AAIG;AACG,SAAU,cAAc,CAAC,MAAmC,EAAA;AAChE,IAAA,IAAI,KAAkC;AAEtC,IAAA,IAAI,MAAM,CAAC,WAAW,EAAE;AACtB,QAAA,KAAK,GAAG,OAAO,EAAE,WAAW,EAAE,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;IACzE;AAAO,SAAA,IAAI,MAAM,CAAC,UAAU,EAAE;AAC5B,QAAA,KAAK,GAAG,OAAO,EAAE,UAAU,EAAE,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;IACvE;SAAO;QACL,KAAK,GAAG,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IACxC;AAEA,IAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;QACnB,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAC5B;IAEA,OAAO;AACL,QAAA,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;QAC7B;KACD;AACH;;ACzEA;;AAEG;MACU,sCAAsC,GAAG,IAAI,cAAc,CAAC,2CAA2C;AAEpH;;;;;;;;AAQG;MAIU,kCAAkC,CAAA;AAC5B,IAAA,eAAe,GAAG,IAAI,eAAe,CAAgC,MAAM,CAAuC,sCAAsC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;AAE5L,IAAA,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;AAE9D,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK;IACnC;IAEA,IAAI,cAAc,CAAC,cAA6C,EAAA;AAC9D,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC;IAC3C;uGAXW,kCAAkC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAlC,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kCAAkC,cAFjC,MAAM,EAAA,CAAA;;2FAEP,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAH9C,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;IClBW;AAAZ,CAAA,UAAY,oBAAoB,EAAA;AAC9B;;AAEG;AACH,IAAA,oBAAA,CAAA,oBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ;AACR;;AAEG;AACH,IAAA,oBAAA,CAAA,oBAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,GAAA,aAAe;AACf;;AAEG;AACH,IAAA,oBAAA,CAAA,oBAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAc;AACd;;AAEG;AACH,IAAA,oBAAA,CAAA,oBAAA,CAAA,gBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,gBAAkB;AAClB;;AAEG;AACH,IAAA,oBAAA,CAAA,oBAAA,CAAA,eAAA,CAAA,GAAA,CAAA,CAAA,GAAA,eAAiB;AACjB;;AAEG;AACH,IAAA,oBAAA,CAAA,oBAAA,CAAA,sBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,sBAAwB;AAC1B,CAAC,EAzBW,oBAAoB,KAApB,oBAAoB,GAAA,EAAA,CAAA,CAAA;AA2BhC;;;;;;;;;;;;;;;AAeG;AACG,SAAU,iCAAiC,CAAC,IAA0B,EAAE,gBAAsD,EAAA;AAClI,IAAA,IAAI,OAA6D;IACjE,IAAI,mBAAmB,GAAG,IAAI;IAE9B,QAAQ,IAAI;QACV,KAAK,oBAAoB,CAAC,UAAU;AAClC,YAAA,OAAO,GAAG,CAAC,CAAC,KAAI;AACd,gBAAA,IAAI,MAAmB;gBAEvB,QAAQ,OAAO,CAAC;AACd,oBAAA,KAAK,QAAQ;AACX,wBAAA,MAAM,GAAG,2BAA2B,CAAC,CAAC,CAAC;wBACvC;AACF,oBAAA,KAAK,QAAQ;AACX,wBAAA,MAAM,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC;wBACpB;AACF,oBAAA;wBACE,MAAM,GAAG,CAAC;wBACV;;AAGJ,gBAAA,OAAO,MAAM;AACf,YAAA,CAAC;AACD,YAAA,mBAAmB,GAAG,KAAK,CAAC;YAC5B;QACF,KAAK,oBAAoB,CAAC,oBAAoB;QAC9C,KAAK,oBAAoB,CAAC,aAAa;AACrC,YAAA,OAAO,GAAG,CAAC,CAAC,KAAI;AACd,gBAAA,IAAI,MAAmB;gBAEvB,QAAQ,OAAO,CAAC;AACd,oBAAA,KAAK,QAAQ;AACX,wBAAA,MAAM,GAAG,mBAAmB,CAAC,CAAC,CAAC;wBAC/B;AACF,oBAAA,KAAK,QAAQ;AACX,wBAAA,MAAM,GAAG,iBAAiB,CAAC,CAAC,CAAC;wBAC7B;AACF,oBAAA;wBACE,MAAM,GAAG,CAAC;wBACV;;AAGJ,gBAAA,OAAO,MAAM;AACf,YAAA,CAAC;AAED,YAAA,IAAI,IAAI,KAAK,oBAAoB,CAAC,oBAAoB,EAAE;gBACtD,mBAAmB,GAAG,KAAK;YAC7B;YAEA;QACF,KAAK,oBAAoB,CAAC,cAAc;QACxC,KAAK,oBAAoB,CAAC,WAAW;QACrC,KAAK,oBAAoB,CAAC,IAAI;AAC9B,QAAA;YACE,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,QAAQ,CAAC,CAA2B,CAAC,GAAG,CAAC,CAAC;YACxE;;AAGJ,IAAA,IAAI,gBAAgB,IAAI,mBAAmB,EAAE;QAC3C,MAAM,eAAe,GAAG,OAAO;AAE/B,QAAA,OAAO,GAAG,CAAC,KAAK,KAAI;AAClB,YAAA,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC;AACnC,YAAA,MAAM,MAAM,GAAG,IAAI,GAAG,gBAAgB,CAAC,sBAAsB,CAAC,IAAI,CAAC,GAAG,IAAI;AAC1E,YAAA,OAAO,MAAM;AACf,QAAA,CAAC;IACH;AAEA,IAAA,OAAO,OAAO;AAChB;AAEA;;;;;;;;;;;;;;;AAeG;AACG,SAAU,6BAA6B,CAAC,IAA0B,EAAE,gBAAsD,EAAA;AAC9H,IAAA,IAAI,OAA6D;IACjE,IAAI,mBAAmB,GAAG,IAAI;IAE9B,QAAQ,IAAI;QACV,KAAK,oBAAoB,CAAC,UAAU;YAClC,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,iCAAiC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACvE,YAAA,mBAAmB,GAAG,KAAK,CAAC;YAC5B;QACF,KAAK,oBAAoB,CAAC,WAAW;YACnC,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,yBAAyB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAC/D;QACF,KAAK,oBAAoB,CAAC,cAAc;YACtC,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC9C;QACF,KAAK,oBAAoB,CAAC,oBAAoB;QAC9C,KAAK,oBAAoB,CAAC,aAAa;YACrC,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAEvD,YAAA,IAAI,IAAI,KAAK,oBAAoB,CAAC,oBAAoB,EAAE;gBACtD,mBAAmB,GAAG,KAAK;YAC7B;YACA;QACF,KAAK,oBAAoB,CAAC,IAAI;AAC9B,QAAA;AACE,YAAA,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC;YAClB;;AAGJ,IAAA,IAAI,gBAAgB,IAAI,mBAAmB,EAAE;QAC3C,MAAM,eAAe,GAAG,OAAO;AAE/B,QAAA,OAAO,GAAG,CAAC,KAAK,KAAI;AAClB,YAAA,MAAM,IAAI,GAAG,KAAK,GAAG,gBAAgB,CAAC,sBAAsB,CAAC,KAAK,CAAC,GAAG,KAAK;AAC3E,YAAA,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC;AACpC,YAAA,OAAO,MAAM;AACf,QAAA,CAAC;IACH;AAEA,IAAA,OAAO,OAAO;AAChB;AAEA;;;;;;;;AAQG;AACG,SAAU,mCAAmC,CAAC,CAA0C,EAAE,CAA0C,EAAA;AACxI,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC;AACxB,IAAA,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,QAAQ,GAAG,CAAC,KAAK,CAAC,GAAG,yBAAyB,CAAC,CAAS,EAAE,CAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AACrI;AAEA;;;;;;AAMG;AACG,SAAU,qCAAqC,CAAC,CAAwC,EAAE,CAAwC,EAAA;AACtI,IAAA,OAAO,CAAC,IAAI,CAAC,GAAG,mCAAmC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,mCAAmC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;AACrI;;IC3KY;AAAZ,CAAA,UAAY,wBAAwB,EAAA;AAClC;;AAEG;AACH,IAAA,wBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB;;AAEG;AACH,IAAA,wBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB;;AAEG;AACH,IAAA,wBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACf,CAAC,EAbW,wBAAwB,KAAxB,wBAAwB,GAAA,EAAA,CAAA,CAAA;AA+CpC;;AAEG;AACG,SAAU,gCAAgC,CAAC,KAAc,EAAA;AAC7D,IAAA,OAAO,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAQ,KAAwC,CAAC,IAAI,KAAK,QAAQ;AACzH;AAiJA;;;;;;;AAOG;AACG,SAAU,kBAAkB,CAAC,eAA8D,EAAE,IAA8B,EAAA;IAC/H,OAAO,eAAe,CAAC,IAAI,CACzB,SAAS,CAAC,CAAC,CAAC,KAAI;AACd,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC;AACjD,QAAA,IAAI,MAA+B;QAEnC,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM;AAC1B,YAAA,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAChC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,EACxB,GAAG,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CACpC;QACH;aAAO;AACL,YAAA,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC;QACnB;AAEA,QAAA,OAAO,MAAM;IACf,CAAC,CAAC,EACF,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;AACH;AAEA,MAAMI,2BAAyB,GAAiB,EAAE;AAElD;;AAEG;AACI,MAAM,8CAA8C,GAAG;AAE9D;;AAEG;AACI,MAAM,2CAA2C,GAAG;AAE3D;;;;;;;;AAQG;AAOG,MAAO,yBAA0B,SAAQH,WAAiD,CAAA;AAC7E,IAAA,6BAA6B,GAAG,MAAM,CAAC,kCAAkC,CAAC;AAE1E,IAAA,IAAI,GAAG,IAAI,kBAAkB,EAAE;AAC/B,IAAA,SAAS,GAAG,IAAI,kBAAkB,EAAE;AACpC,IAAA,iBAAiB,GAAG,IAAI,kBAAkB,EAAE;AAE5C,IAAA,OAAO,GAAG,IAAI,eAAe,CAAoD,SAAS,CAAC;AACnG,IAAA,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,oBAAoB,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AAE1F,IAAA,cAAc,GAAG,IAAI,eAAe,CAA6D,SAAS,CAAC;AAE3G,IAAA,gBAAgB,GAAG,IAAI,eAAe,CAA2C,SAAS,CAAC;AAC3F,IAAA,SAAS,GAAG,IAAI,eAAe,CAA+F,SAAS,CAAC;IACxI,QAAQ,GAAG,IAAI,eAAe,CAA4C,EAAE,CAAC,EAAE,CAAC,CAAC;AAElG;;AAEG;AACc,IAAA,iBAAiB,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC;AAC1C,IAAA,kBAAkB,GAAG,IAAI,eAAe,CAAkC,SAAS,CAAC;IAC5F,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAErD,IAAA,OAAO,GAAG,IAAI,eAAe,CAAS,CAAC,CAAC;AACxC,IAAA,eAAe,GAAG,IAAI,eAAe,CAAsC,SAAS,CAAC;IAC7F,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAE/C,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;AAC9B,IAAA,WAAW,GAAG,IAAI,OAAO,EAAQ;AAEjC,IAAA,mBAAmB,GAAG,IAAI,kBAAkB,EAAE;AAC9C,IAAA,gBAAgB,GAAG,IAAI,OAAO,EAAQ;AAE9C,IAAA,qBAAqB,GAAsB;AAClD,QAAA,YAAY,EAAE,CAAC,OAA+B,EAAE,IAAI,KAAI;YACtD,IAAI,OAAO,EAAE;AACX,gBAAA,OAAO,CAAC,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC;YAC/H;iBAAO;AACL,gBAAA,OAAO,KAAK;YACd;QACF;KACD;AAEQ,IAAA,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAExE,qBAAqB,GAAG,IAAI,kBAAkB,CAC7D,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AAC/C,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;IACzB,CAAC,CAAC,CACH;IAEQ,SAAS,GAAsC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,oBAAoB,EAAE,CAAC,CAAC,IAAI,CACtI,GAAG,CAAC,CAAC,eAAe,KAAI;AACtB,QAAA,OAAO,eAAe,IAAI,oBAAoB,EAAE;IAClD,CAAC,CAAC,EACF,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,iBAAiB,GAAqD,IAAI,CAAC,SAAS,CAAC,IAAI,CAChG,GAAG,CAAC,CAAC,QAAQ,MAAM,QAAQ,GAAG,qBAAqB,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,EAC/E,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,SAAS,GAA4B,IAAI,CAAC,SAAS,CAAC,IAAI,CAC/D,qBAAqB,EAAE,EACvB,SAAS,CAAC,CAAC,CAAC,KAAI;AACd,QAAA,IAAI,GAA4B;QAEhC,IAAI,CAAC,EAAE;;AAEL,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,KAAK,gCAAgC,CAAC,CAAC,CAAC,EAAE;gBACjG,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAmC,OAAO,CAAC,KAAK,QAAQ,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC;gBAClG,GAAG;oBACD,sBAAsB,CAAkB,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAC5D,GAAG,CAAC,QAAQ,IAAI,mBAAmB,EAAE,CAAC,EACtC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAC7C,IAAI,EAAE,CAAC,SAAS,CAAC;YACtB;iBAAO;gBACL,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAC1B;QACF;aAAO;AACL,YAAA,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC;QACrB;AAEA,QAAA,OAAO,GAAG;AACZ,IAAA,CAAC,CAAC,EACF,oBAAoB,CAAC,aAAa,CAAC,EACnC,WAAW,CAAC,CAAC,CAAC,CACf;IAEQ,sBAAsB,GAA4B,IAAI,CAAC,YAAY,CAAC,IAAI,CAC/E,GAAG,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAgF,OAAO,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EACpK,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC,EACzC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,KAAI;AAClC,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,iCAAiC,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC;AACzF,IAAA,CAAC,CAAC,EACF,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC9D,oBAAoB,CAAC,yBAAyB,CAAC,EAC/C,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,eAAe,GAAG,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC;AAE9C;;AAEG;AACM,IAAA,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI;;AAEhD,IAAA,SAAS,CAAC,CAAC,CAAC,EACZ,GAAG,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC,EAClC,oBAAoB,EAAE,EACtB,SAAS,CAAC,MAAM,IAAI,CAAC,sBAAsB,CAAC,EAC5C,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,WAAW,GAAwC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAC1F,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,yBAAyB,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EACnD,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,aAAa,GAAG,IAAI,WAAW,CAAc,IAAI,EAAE;AAC1D,QAAA,UAAU,EAAE;AACb,KAAA,CAAC;AAEO,IAAA,aAAa,GAAG,IAAI,WAAW,CAA4B,IAAI,EAAE;QACxE,UAAU,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,uFAAuF,CAAC;AACzH,KAAA,CAAC;AAEF,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,MAAM;IACvC;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,MAAM;IACvC;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,SAAS;IAC5C;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI;IACvC;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,QAAQ,KAAK,wBAAwB,CAAC,IAAI;IACxD;AAEA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK;IACzB;AAEA,IAAA,IAAI,QAAQ,GAAA;QACV,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,KAAK,oBAAoB,CAAC,aAAa;QAE5E,IAAI,cAAc,EAAE;AAClB,YAAA,OAAO,IAAI;QACb;aAAO;AACL,YAAA,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ;QACpC;IACF;AAEA,IAAA,IAAI,mBAAmB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,mBAAmB,IAAI,IAAI;IAC/C;AAEA,IAAA,IAAI,4BAA4B,GAAA;QAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,4BAA4B,IAAI,IAAI,CAAC,mBAAmB,KAAK,KAAK;IACtF;AAEA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,CAAC,IAAI,CAAC,QAAQ;IACvB;AAEA,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,IAAI,oBAAoB,CAAC,IAAI;IAChE;AAEA,IAAA,IAAI,QAAQ,GAAA;QACV,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,KAAK,oBAAoB,CAAC,UAAU;QAEzE,IAAI,cAAc,EAAE;YAClB,OAAO,wBAAwB,CAAC,IAAI;QACtC;aAAO;YACL,OAAO,IAAI,CAAC,QAAQ,GAAG,wBAAwB,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,IAAI,wBAAwB,CAAC,QAAQ,CAAC;QAC/H;IACF;AAEA,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK;IACrC;AAEA,IAAA,IAAI,cAAc,GAAA;QAChB,OAAO,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,QAAQ,KAAK,wBAAwB,CAAC,QAAQ;IACnF;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW;IACrC;AAEA,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,IAAI,KAAK;IAC/C;AAEA,IAAA,IAAI,cAAc,GAAA;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,IAAI,KAAK;IACjD;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ;IAClC;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ;IAClC;AAEA,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI;IAC9C;AAEA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO;IACjC;AAEA,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe;IACzC;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;IAClE;AAES,IAAA,QAAQ,GAAwB,IAAI,CAAC,eAAe,CAAC,IAAI,CAChE,SAAS,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAC3E,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;IAEQ,cAAc,GAAwB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,KAAK,wBAAwB,CAAC,IAAI,CAAC,CAAC;AAE3H,IAAA,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAC9C,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,KAAK,wBAAwB,CAAC,QAAQ,CAAC,EACrE,WAAW,CAAC,CAAC,CAAC,CACf;IAEQ,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AACxG,IAAA,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAE7D,qBAAqB,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CACtG,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,EACtG,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;IAEQ,UAAU,GAA4B,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC,IAAI,CAC5H,GAAG,CAAC,CAAC,CAAc,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EACnD,oBAAoB,CAAc,aAAa,CAAC,EAChD,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,UAAU,GAAmC,IAAI,CAAC,WAAW,CAAC,IAAI,CACzE,YAAY,CAAC,CAAC,CAAC,EACf,GAAG,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,EAAE,CAAC,EACzC,oBAAoB,EAAE,CACvB;AAEQ,IAAA,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AAElF,IAAA,kBAAkB,GAAkD,IAAI,CAAC,cAAc,CAAC,IAAI,CACnG,GAAG,CAAC,CAAC,CAAC,KAAI;AACR,QAAA,IAAI,MAAyC;QAE7C,IAAI,CAAC,EAAE;AACL,YAAA,MAAM,GAAG,sBAAsB,CAC7B,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AACnB,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;gBAEzC,IAAI,OAAO,EAAE;oBACX,OAAO;wBACL,OAAO;AACP,wBAAA,GAAG;qBACJ;gBACH;qBAAO;AACL,oBAAA,OAAO,SAAS;gBAClB;YACF,CAAC,CAAC,CACH;QACH;aAAO;YACL,MAAM,GAAG,EAAE;QACb;AAEA,QAAA,OAAO,MAAM;AACf,IAAA,CAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf;IAEQ,sBAAsB,GAA4B,kBAAkB,CAAC,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC;IACvG,qBAAqB,GAA4B,kBAAkB,CAAC,IAAI,CAAC,kBAAkB,EAAE,OAAO,CAAC;AAErG,IAAA,cAAc,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CACrG,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,KAAI;QACzB,MAAM,aAAa,GAAG,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC;AAC7C,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CACvB,GAAG,CAAC,MAAM,IAAI,CAAC,EACf,SAAS,CAAC,aAAa,CAAC,CACzB;IACH,CAAC,CAAC,EACF,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;AAEkB,IAAA,sBAAsB,GAA4B,IAAI,CAAC,OAAO,CAAC,IAAI,CACpF,KAAK,EAAE,EACP,SAAS,CAAC,OAAO,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAC9D;AACkB,IAAA,sBAAsB,GAA0C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAE/G,IAAA,YAAY,GAA4B,aAAa,CAAC,CAAC,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CACjL,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,CAAC,KAAI;AAC3D,QAAA,IAAI,MAAmB;QAEvB,IAAI,CAAC,aAAa,EAAE;AAClB,YAAA,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;gBAC1B,IAAI,GAAG,QAAQ,IAAI,IAAI,IAAI,EAAE,CAAC;YAChC;YAEA,IAAI,IAAI,EAAE;gBACR,IAAI,OAAO,EAAE;AACX,oBAAA,IAAI,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;AACnC,wBAAA,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC;oBAC9B;yBAAO;AACL,wBAAA,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC;oBAC3B;gBACF;qBAAO,IAAI,UAAU,EAAE;oBACrB,MAAM;wBACJ,wBAAwB,CAAC,UAAU,EAAE;4BACnC,IAAI;AACJ,4BAAA,iBAAiB,EAAE;yBACpB,CAAC,IAAI,IAAI;gBACd;AAAO,qBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;oBACzB,IAAI,IAAI,CAAC,QAAQ,KAAK,wBAAwB,CAAC,QAAQ,EAAE;;wBAEvD,MAAM,GAAG,IAAI;oBACf;gBACF;YACF;QACF;AAEA,QAAA,OAAO,MAAM;AACf,IAAA,CAAC,CAAC,EACF,oBAAoB,CAAC,yBAAyB,CAAC,EAC/C,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,qBAAqB,GAAsD,aAAa,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,EAAE,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAC1M,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,YAAY,CAAC,KAAI;QACtC,IAAI,MAAM,GAA0C,CAAC;QAErD,IAAI,YAAY,IAAI,IAAI,IAAI,YAAY,IAAI,IAAI,EAAE;AAChD,YAAA,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE,MAAM,IAAI,EAAE;AACxD,YAAA,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,YAAY,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC;AACtE,YAAA,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,YAAY,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC;AAEtE,YAAA,MAAM,GAAG;AACP,gBAAA,GAAG,CAAC;AACJ,gBAAA,MAAM,EAAE;oBACN,GAAG,CAAC,EAAE,MAAM;oBACZ,GAAG;oBACH;AACD;aACF;QACH;AAEA,QAAA,OAAO,MAAM;IACf,CAAC,CAAC,EACF,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,aAAa,GAA4B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAC/E,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,IAAI,CAAgB,CAAC,EACnD,oBAAoB,CAAc,UAAU,CAAC,EAC7C,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,aAAa,GAA4B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAC/E,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,IAAI,CAAgB,CAAC,EACnD,oBAAoB,CAAc,UAAU,CAAC,EAC7C,WAAW,CAAC,CAAC,CAAC,CACf;AAED;;AAEG;AACM,IAAA,uBAAuB,GAAwB,aAAa,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAClH,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAChC,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;IAEQ,uBAAuB,GAAwB,aAAa,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAClH,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EACvD,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,aAAa,GAA8C,IAAI,CAAC,qBAAqB,CAAC,IAAI,CACjG,oBAAoB,EAAE,EACtB,GAAG,CAAC,CAAC,CAAC,KAAI;QACR,IAAI,CAAC,EAAE;YACL,MAAM,MAAM,GAAG,sCAAsC,CAAC,CAAC,EAAE,KAAK,CAAC;YAC/D,OAAO,CAAC,CAAc,MAAM,CAAC,IAAI,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QAC3D;aAAO;AACL,YAAA,OAAO,MAAM,IAAI;QACnB;AACF,IAAA,CAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,mBAAmB,GAAkC,MAAM,IAAI;IAE/D,WAAW,GAA4B,aAAa,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAC/H,YAAY,CAACG,2BAAyB,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EACtF,oBAAoB,CAAC,CAAC,OAAO,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,EAC1G,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAClE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,KAAI;AAClC,QAAA,IAAI,IAAI,IAAI,IAAI,EAAE;AAChB,YAAA,MAAM,QAAQ,GAAG,IAAI,sBAAsB,CAAC;gBAC1C,IAAI;AACJ,gBAAA,GAAG,MAAM;AACT,gBAAA,iBAAiB,EAAE;AACpB,aAAA,CAAC;;YAGF,IAAI,WAAW,EAAE;AACf,gBAAA,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;AAE3B,gBAAA,MAAM,OAAO,GAAG,WAAW,GAAG,IAAI,CAAC,UAAU;AAE7C,gBAAA,IAAI,OAAO,IAAI,CAAC,EAAE;AAChB,oBAAA,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC;oBAChC,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC9B;YACF;QACF;AAEA,QAAA,OAAO,IAAI;AACb,IAAA,CAAC,CAAC,EACF,oBAAoB,CAAC,yBAAyB,CAAC,EAC/C,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,uBAAuB,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAChE,GAAG,CAAC,CAAC,MAAM,KAAI;QACb,OAAO,IAAI,sBAAsB,CAAC;AAChC,YAAA,GAAG,MAAM;AACT,YAAA,iBAAiB,EAAE;AACpB,SAAA,CAAC;AACJ,IAAA,CAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf;IAEQ,qBAAqB,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CACtD,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EACd,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,WAAW,GAAiC,IAAI,CAAC,QAAQ,CAAC,IAAI,CACrE,oBAAoB,EAAE,EACtB,GAAG,CAAC,CAAC,CAAgC,KAAK,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,EAChE,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAC9D,GAAG,CAAC,CAAC,MAAM,KAAI;QACb,IAAI,MAAM,EAAE;YACV,MAAM,MAAM,GAAG,8BAA8B,CAAC,MAAM,CAAC,CAAC;YACtD,OAAO,CAAC,CAAc,MAAM,CAAC,IAAI,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QAC3D;aAAO;AACL,YAAA,OAAO,MAAM,IAAI;QACnB;IACF,CAAC,CAAC,CACH;IAEQ,QAAQ,GAAiC,aAAa,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CACrG,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,KAAI;AACzB,QAAA,IAAI,MAAoC;AAExC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACjB;aAAO,IAAI,OAAO,EAAE;AAClB,YAAA,MAAM,GAAG,EAAE,CAAC,EAAE,CAAC;QACjB;aAAO;YACL,MAAM,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAC3J,GAAG,CAAC,CAAC,CAAC,YAAY,EAAE,aAAa,CAAC,KAAI;gBACpC,MAAM,cAAc,GAAqB,EAAE;gBAE3C,IAAI,YAAY,EAAE;;AAEhB,oBAAA,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AACnB,wBAAA,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE;AAC5B,wBAAA,IAAI,UAAuB;AAE3B,wBAAA,IAAI,KAAK,CAAC,WAAW,EAAE;AACrB,4BAAA,UAAU,GAAG,mBAAmB,CAAC,KAAK,CAAC,WAAW,CAAC;wBACrD;AAAO,6BAAA,IAAI,KAAK,CAAC,UAAU,EAAE;AAC3B,4BAAA,UAAU,GAAG,wBAAwB,CAAC,KAAK,CAAC,UAAU,EAAE;AACtD,gCAAA,IAAI,EAAE,YAAY;AAClB,gCAAA,iBAAiB,EAAE;AACpB,6BAAA,CAAC;wBACJ;;AAGA,wBAAA,IAAI,UAAU,IAAI,aAAa,CAAC,UAAU,CAAC,EAAE;AAC3C,4BAAA,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC;wBAC7B;AACF,oBAAA,CAAC,CAAC;gBACJ;AAEA,gBAAA,OAAO,cAAc;YACvB,CAAC,CAAC,CACH;QACH;AAEA,QAAA,OAAO,MAAM;AACf,IAAA,CAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,gBAAgB,GAAwB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAC9E,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC,CAAC,CAAC,EAC/C,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,qCAAqC,GAAwB,IAAI,CAAC,uBAAuB;AAEzF,IAAA,cAAc,GAAwB,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAC9E,GAAG,CAAC,CAAC,sBAAsB,KAAI;AAC7B,QAAA,OAAO,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,mBAAmB,IAAI,CAAC,sBAAsB,CAAC;IACpF,CAAC,CAAC,EACF,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,oBAAoB,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CACpD,SAAS,CAAC,CAAC,WAAW,KACpB,WAAW,CAAC,aAAa,CAAC,IAAI,CAC5B,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,OAAO,CAAC,EAC/C,GAAG,CAAC,CAAC,CAAC,KAAI;AACR,QAAA,IAAI,mBAAuC;AAE3C,QAAA,IAAI,CAAC,KAAK,SAAS,EAAE;YACnB,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;gBACzC,mBAAmB,GAAG,kBAAkB;YAC1C;iBAAO,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,8CAA8C,CAAC,EAAE;gBACpF,mBAAmB,GAAG,uDAAuD;YAC/E;iBAAO,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,2CAA2C,CAAC,EAAE;gBACjF,mBAAmB,GAAG,uCAAuC;YAC/D;iBAAO;gBACL,mBAAmB,GAAG,qCAAqC;YAC7D;QACF;AAEA,QAAA,OAAO,mBAAmB;AAC5B,IAAA,CAAC,CAAC,CACH,CACF,EACD,SAAS,CAAC,SAAS,CAAC,EACpB,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CACjD,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,EACtB,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,eAAe,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;AAC3C,IAAA,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC;AACjD,IAAA,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC7F,IAAA,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AACzE,IAAA,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AACzE,IAAA,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC;AACnD,IAAA,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC;AACnD,IAAA,iBAAiB,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;AAC/C,IAAA,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;AACvC,IAAA,0BAA0B,GAAG,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC;AACjE,IAAA,0BAA0B,GAAG,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC;AACjE,IAAA,yBAAyB,GAAG,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC;AAC/D,IAAA,qBAAqB,GAAG,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC;AACvD,IAAA,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;AACvC,IAAA,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;IAElD,QAAQ,GAAA;QACN,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;AAE3C,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY;QACzD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,GAAG,sBAAsB,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;AACzF,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,IAAI,CAAC;AAEjE,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;aAC3B,IAAI,CACH,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,gBAAgB,KAAK,6BAA6B,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAC1I,YAAY,CAACA,2BAAyB,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EACtF,SAAS,CAAC,CAAC,CAAC,YAAY,EAAE,YAAY,CAAC,KAAI;AACzC,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1B,YAAY,CAACA,2BAAyB,GAAG,CAAC,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAC1F,mBAAmB,EAAE,EACrB,oBAAoB,CAAC,yBAAyB,CAAC,EAC/C,GAAG,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,EAC3B,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CACrE;AACH,QAAA,CAAC,CAAC;AAEH,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC;AAChC,YAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;AAC9B,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE;AAClC,QAAA,CAAC,CAAC;QAEJ,IAAI,uBAAuB,GAAG,KAAK;AAEnC;;;;AAIE;AAEF,QAAA,IAAI,IAAI,CAAC,4BAA4B,EAAE;AACrC,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,GAAG,IAAI,CAAC;AACxC,iBAAA,IAAI,CACH,SAAS,CAAC,CAAC,WAAW,KAAI;gBACxB,IAAI,WAAW,EAAE;;oBAEf,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1B,YAAY,CAAC,GAAG,CAAC,EACjB,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,aAAa,CAAC,EACpC,WAAW,EAAE,CACd;gBACH;qBAAO;AACL,oBAAA,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;gBAClB;AACF,YAAA,CAAC,CAAC;AAEH,iBAAA,SAAS,CAAC,CAAC,QAAQ,KAAI;AACtB,gBAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AACpB,oBAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBACvC;AACF,YAAA,CAAC,CAAC;QACN;AAEA,QAAA,IAAI,CAAC,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC;AAChC,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EACtD,oBAAoB,EAAE,EACtB,SAAS,CAAC,CAAC,sBAAsB,KAAI;YACnC,uBAAuB,GAAG,KAAK;AAC/B,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI;;AAE1B,YAAA,GAAG,CAAC,CAAC,UAAU,KAAK,CAAC,UAAU,EAAE,sBAAsB,CAAsB,CAAC,CAC/E;AACH,QAAA,CAAC,CAAC;aAEH,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,sBAAsB,CAAC,KAAI;;YAEzC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC,KAAK,SAAS,KAAK,CAAC,sBAAsB,KAAK,sBAAsB,IAAI,uBAAuB,CAAC,CAAC,EAAE;gBACpI;YACF;;AAGA,YAAA,IAAI,CAAC,KAAK,SAAS,IAAI,sBAAsB,EAAE;gBAC7C,uBAAuB,GAAG,IAAI;YAChC;AAEA,YAAA,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AACjB,QAAA,CAAC,CAAC;;QAGJ,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;AACrD,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnE;AAEA,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;QAG1D,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC,UAAU,KAAI;AACvD,YAAA,wBAAwB,CAAC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;AACxD,YAAA,wBAAwB,CAAC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;AAC1D,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB;AAC1D,QAAA,IAAI,gBAAwC;QAE5C,IAAI,cAAc,EAAE;YAClB,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC;QAClD;QAEA,IAAI,CAAC,gBAAgB,EAAE;YACrB,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,KAAK,wBAAwB,CAAC,IAAI;AACjE,YAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,SAAS,CAAC;;YAG1C,IAAI,cAAc,EAAE;gBACjB,IAAI,CAAC,IAAkB,CAAC,UAAU,CAAC,cAAc,EAAE,IAAI,CAAC,iBAAiB,CAAC;YAC7E;AAEA,YAAA,gBAAgB,GAAG,IAAI,CAAC,iBAAiB;QAC3C;AAEA,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,gBAAgB,CAAC;AAE9C,QAAA,QAAQ,IAAI,CAAC,QAAQ;YACnB,KAAK,wBAAwB,CAAC,QAAQ;gBACpC;YACF,KAAK,wBAAwB,CAAC,IAAI;gBAChC,IAAI,CAAC,UAAU,EAAE;gBACjB;YACF,KAAK,wBAAwB,CAAC,QAAQ;gBACpC,IAAI,CAAC,OAAO,EAAE;gBACd;;AAGJ,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE;AACxB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1D;aAAO;YACL,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,eAAe,CAAC;QACxE;QAEA,IAAI,CAAC,mBAAmB,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,UAAU,CAAC,KAAI;;;AAG/L,YAAA,IAAI,WAAW,IAAI,IAAI,EAAE;AACvB,gBAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;YAC/D;AACF,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC;YAClC,CAAC,CAAC,KAAI;AACJ,gBAAA,MAAM,SAAS,GAAG,CAAC,CAAC,KAAoB;AACxC,gBAAA,IAAI,GAAiC;AAErC,gBAAA,IAAI,SAAS,IAAI,IAAI,EAAE;oBACrB,GAAG,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,IAAI,CAC9E,GAAG,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,KAAI;;AAE5B,wBAAA,MAAM,yBAAyB,GAAG,iCAAiC,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC,SAAS,CAAC;AAEhH,wBAAA,IAAI,MAAM,GAAqB;AAC7B,4BAAA,GAAG,IAAI,CAAC,aAAa,CAAC;yBACvB;wBAED,IAAI,yBAAyB,EAAE;AAC7B,4BAAA,IAAI,CAAC,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,EAAE;gCACjD,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,yBAAyB,CAAC,EAAE;AAChD,oCAAA,MAAM,GAAG;wCACP,CAAC,2CAA2C,GAAG;qCAChD;gCACH;4BACF;iCAAO;AACL,gCAAA,MAAM,GAAG;oCACP,CAAC,8CAA8C,GAAG;iCACnD;4BACH;wBACF;AAEA,wBAAA,OAAO,MAAM;AACf,oBAAA,CAAC,CAAC,EACF,KAAK,EAAE,CACR;gBACH;qBAAO;AACL,oBAAA,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC;gBACd;AAEA,gBAAA,OAAO,GAAG;YACZ;AACD,SAAA,CAAC;IACJ;IAES,WAAW,GAAA;QAClB,KAAK,CAAC,WAAW,EAAE;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACnB,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AACxB,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AACvB,QAAA,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE;AACpC,QAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE;AAChC,QAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE;AAClC,QAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE;AAChC,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;AACxB,QAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE;AAClC,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AACvB,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;AAC/B,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;AAC3B,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;AACxB,QAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE;AAChC,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;IAChC;AAEA,IAAA,YAAY,CAAC,MAAsB,EAAA;AACjC,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE;AAE5B,QAAA,IAAI,KAAK,CAAC,WAAW,EAAE;AACrB,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,WAAW,CAAC;QACxC;AAAO,aAAA,IAAI,KAAK,CAAC,UAAU,EAAE;AAC3B,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC;QAChC;IACF;AAEA,IAAA,UAAU,CAAC,KAAoC,EAAA;AAC7C,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK;QAExB,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;QAC9B;IACF;AAEA,IAAA,cAAc,CAAC,IAAiB,EAAA;AAC9B,QAAA,MAAM,IAAI,GAAG,mBAAmB,CAAC,IAAI,CAAC;QAEtC,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;QAC5B;IACF;AAEA,IAAA,iBAAiB,CAAC,IAAU,EAAA;AAC1B,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC;AACjC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;IACzB;AAEA,IAAA,eAAe,CAAC,QAAc,EAAA;AAC5B,QAAA,MAAM,UAAU,GAAG,yBAAyB,CAAC,QAAQ,CAAC;AACtD,QAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;IAC1B;AAEA,IAAA,OAAO,CAAC,IAAwB,EAAA;QAC9B,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,KAAK,IAAI,EAAE;AACrC,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC;AACjC,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AACpB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;QACzB;IACF;AAEA,IAAA,kBAAkB,CAAC,KAAoB,EAAA;QACrC,IAAI,SAAS,GAAG,CAAC;AAEjB,QAAA,QAAQ,KAAK,CAAC,GAAG,EAAE,WAAW,EAAE;AAC9B,YAAA,KAAK,SAAS;gBACZ,SAAS,GAAG,CAAC;gBACb;AACF,YAAA,KAAK,WAAW;gBACd,SAAS,GAAG,CAAC,CAAC;gBACd;;QAGJ,IAAI,MAAM,GAAG,CAAC;QAEd,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE;YACnC,MAAM,GAAG,GAAG;QACd;AAAO,aAAA,IAAI,KAAK,CAAC,OAAO,EAAE;YACxB,MAAM,GAAG,EAAE;QACb;AAAO,aAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;YACzB,MAAM,GAAG,CAAC;QACZ;AAEA,QAAA,IAAI,SAAS,KAAK,CAAC,EAAE;YACnB,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,qBAAqB,CAAC;iBACnD,IAAI,CAAC,KAAK,EAAE;iBACZ,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,KAAI;AAC5B,gBAAA,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAC7D,gBAAA,MAAM,QAAQ,GAAG,IAAI,sBAAsB,CAAC;AAC1C,oBAAA,IAAI,EAAE,OAAO;AACb,oBAAA,GAAG;AACJ,iBAAA,CAAC;AAEF,gBAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,QAAQ,CAAC,8BAA8B,CAAC,OAAO,EAAE,SAAS,KAAK,CAAC,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEjJ,gBAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;oBACpB,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gBACzD;AACF,YAAA,CAAC,CAAC;QACN;IACF;AAEA,IAAA,kBAAkB,CAAC,KAAoB,EAAA;QACrC,IAAI,SAAS,GAAG,CAAC;AAEjB,QAAA,QAAQ,KAAK,CAAC,GAAG,EAAE,WAAW,EAAE;AAC9B,YAAA,KAAK,SAAS;gBACZ,SAAS,GAAG,CAAC;gBACb;AACF,YAAA,KAAK,WAAW;gBACd,SAAS,GAAG,CAAC,CAAC;gBACd;;QAGJ,IAAI,MAAM,GAAG,CAAC;QAEd,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE;YAClC,MAAM,GAAG,GAAG;QACd;AAAO,aAAA,IAAI,KAAK,CAAC,MAAM,EAAE;YACvB,MAAM,GAAG,EAAE;QACb;AAAO,aAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;YACzB,MAAM,GAAG,CAAC;QACZ;AAEA,QAAA,IAAI,SAAS,KAAK,CAAC,EAAE;AACnB,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;AAC1D,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;QACzB;IACF;IAEA,SAAS,GAAA;;IAET;IAEA,YAAY,GAAA;;QAEV,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AAC3C,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;AACvB,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;QAC9B;IACF;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;IACxB;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;IACvB;AAEA,IAAA,UAAU,CAAC,OAAgB,EAAA;AACzB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AACjD,YAAA,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;AACrB,QAAA,CAAC,CAAC;IACJ;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;IACtB;uGAh7BW,yBAAyB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1RtC,kvKA2HA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED2JY,gBAAgB,81FAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,QAAQ,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,KAAA,EAAA,KAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,qLAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAkF,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAA5E,YAAY,EAAA,IAAA,EAAA,UAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,QAAQ,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,gBAAgB,gDAAE,gBAAgB,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIrQ,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;AAEC,YAAA,IAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,QAAQ,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,cAAc,EAAE,WAAW,EAAE,mBAAmB,EAAE,aAAa,EAAE,aAAa,EAAE,kBAAkB,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,EAAA,eAAA,EAClR,uBAAuB,CAAC,MAAM,cACnC,IAAI,EAAA,QAAA,EAAA,kvKAAA,EAAA;;;AE3LlB,SAAS,kCAAkC,CAAC,IAA0B,EAAE,gBAAsD,EAAA;IAC5H,MAAM,oBAAoB,GAAG,iCAAiC,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAEtF,OAAO,CAAC,CAAC,KAAI;AACX,QAAA,IAAI,MAAwB;QAE5B,IAAI,CAAC,EAAE;AACL,YAAA,MAAM,GAAG;AACP,gBAAA,KAAK,EAAE,oBAAoB,CAAC,CAAC,CAAC,KAAK,CAAS;AAC5C,gBAAA,GAAG,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG;aAChC;QACH;AAEA,QAAA,OAAO,MAAM;AACf,IAAA,CAAC;AACH;AAEA,SAAS,mCAAmC,CAAC,IAA0B,EAAE,gBAAsD,EAAA;IAC7H,MAAM,qBAAqB,GAAG,6BAA6B,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAEnF,OAAO,CAAC,CAAC,KAAI;AACX,QAAA,IAAI,MAAwB;QAE5B,IAAI,CAAC,EAAE;AACL,YAAA,MAAM,GAAG;AACP,gBAAA,KAAK,EAAE,qBAAqB,CAAC,CAAC,CAAC,KAAK,CAAS;AAC7C,gBAAA,GAAG,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG;aACjC;QACH;AAEA,QAAA,OAAO,MAAM;AACf,IAAA,CAAC;AACH;AAEA,MAAM,yBAAyB,GAAiB,EAAE;AAkClD;;;;;;;;AAQG;AAaG,MAAO,+BAAgC,SAAQN,WAAuD,CAAA;AACzF,IAAA,kCAAkC,GAAG,MAAM,CAAC,kCAAkC,CAAC;AAEvF,IAAA,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAoB,WAAW,CAAC;IAC7D,qBAAqB,GAAG,SAAS,CAAqB,gBAAgB,kEAAI,IAAI,EAAE,UAAU,EAAA,CAAG;IAC7F,mBAAmB,GAAG,SAAS,CAAqB,cAAc,gEAAI,IAAI,EAAE,UAAU,EAAA,CAAG;AAEzF,IAAA,2BAA2B,GAAG,MAAM,CAAyC,SAAS,uEAAC;AACvF,IAAA,0BAA0B,GAAG,MAAM,CAAiC,QAAQ,sEAAC;AAErE,IAAA,IAAI,GAAG,IAAI,kBAAkB,EAAE;AAE/B,IAAA,kBAAkB,GAAG,IAAI,kBAAkB,EAAE;AAC7C,IAAA,uBAAuB,GAAG,IAAI,kBAAkB,EAAE;AAElD,IAAA,kBAAkB,GAAG,IAAI,kBAAkB,EAAE;AAC7C,IAAA,wBAAwB,GAAG,IAAI,kBAAkB,EAAE;AACnD,IAAA,kBAAkB,GAAG,IAAI,kBAAkB,EAAE;AAC7C,IAAA,cAAc,GAAG,IAAI,kBAAkB,EAAE;AACzC,IAAA,cAAc,GAAG,IAAI,kBAAkB,EAAE;AAEzC,IAAA,OAAO,GAAG,IAAI,eAAe,CAA0D,SAAS,CAAC;AACjG,IAAA,cAAc,GAAG,IAAI,eAAe,CAAoD,SAAS,CAAC;AAClG,IAAA,eAAe,GAAG,IAAI,eAAe,CAAqD,SAAS,CAAC;AAEpG,IAAA,SAAS,GAAG,IAAI,eAAe,CAA2C,SAAS,CAAC;IACpF,QAAQ,GAAG,IAAI,eAAe,CAA4C,EAAE,CAAC,EAAE,CAAC,CAAC;AAEjF,IAAA,eAAe,GAAG,IAAI,OAAO,EAAqB;AAC1D,IAAA,kBAAkB,GAA0C,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;AAElG,IAAA,eAAe,GAAG,IAAI,eAAe,CAA2C,SAAS,CAAC;IAClG,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAEvD,IAAA,OAAO,GAAqD,IAAI,CAAC,OAAO,CAAC,IAAI,CACpF,WAAW,EAAE,EACb,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EACnB,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,sBAAsB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AAEtF,IAAA,cAAc,GAA+C,IAAI,CAAC,cAAc,CAAC,IAAI,CAC5F,qBAAqB,CAAiC,QAAQ,CAAC,EAC/D,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,EACzB,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAEpF,SAAS,GAAsC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,oBAAoB,EAAE,CAAC,CAAC,IAAI,CAC/H,GAAG,CAAC,CAAC,eAAe,KAAI;AACtB,QAAA,OAAO,eAAe,IAAI,oBAAoB,EAAE;IAClD,CAAC,CAAC,EACF,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,iBAAiB,GAAqD,IAAI,CAAC,SAAS,CAAC,IAAI,CAChG,GAAG,CAAC,CAAC,QAAQ,MAAM,QAAQ,GAAG,qBAAqB,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,EAC/E,WAAW,CAAC,CAAC,CAAC,CACf;IAEQ,sBAAsB,GAAiC,IAAI,CAAC,YAAY,CAAC,IAAI,CACpF,GAAG,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAwC,OAAO,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAC5H,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC,EACzC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,KAAI;AAClC,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,kCAAkC,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC;AAC1F,IAAA,CAAC,CAAC,EACF,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC/D,oBAAoB,CAAmB,kBAAkB,CAAC,EAC1D,WAAW,CAAC,CAAC,CAAC,CACf;AAED,IAAA,yBAAyB,CAAC,IAAoC,EAAA;QAC5D,MAAM,MAAM,GAAiC,aAAa,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAClH,SAAS,CAAC,CAAC,CAAC,cAAc,EAAE,aAAa,CAAC,KAAI;AAC5C,YAAA,MAAM,yBAAyB,GAAG,OAAO,CAAC,cAAc,CAAC;AACzD,YAAA,MAAM,WAAW,GAAG,CAAC,SAAoB,KAAK,aAAa,CAAC,cAAc,CAAC,SAAS,CAAC;AAErF,YAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;;AAErB,gBAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CACjC,oBAAoB,CAAC,kBAAkB,CAAC,EACxC,GAAG,CAAC,CAAC,cAAc,KAAI;AACrB,oBAAA,MAAM,IAAI,GAAG,cAAc,EAAE,KAAK;oBAClC,OAAO,IAAI,GAAI,WAAW,CAAC,SAAS,CAAC,EAAE,GAAG,cAAc,EAAE,IAAI,EAAoB,CAAC,CAAe,GAAG,IAAI;gBAC3G,CAAC,CAAC,CACH;YACH;iBAAO;;AAEL,gBAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CACjC,IAAI,CAAC,CAAC,GAAuB,EAAE,aAAwC,KAAI;AACzE,oBAAA,IAAI,MAA0B;oBAC9B,IAAI,QAAQ,GAAkC,OAAO;oBAErD,IAAI,aAAa,IAAI,aAAa,CAAC,KAAK,IAAI,IAAI,EAAE;wBAChD,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,GAAG,aAAa;AACrD,wBAAA,MAAM,iBAAiB,GAAG,SAAS,CAAC,EAAE,GAAG,cAAc,EAAE,IAAI,EAAE,eAAe,EAAoB,CAAC;;AAGnG,wBAAA,IAAI,eAAe,IAAI,GAAG,EAAE;4BAC1B,MAAM,KAAK,GAAG,yBAAyB,CAAC,aAAa,EAAE,iBAAiB,CAAc;AACtF,4BAAA,MAAM,GAAG;AACP,gCAAA,aAAa,EAAE,aAAa;AAC5B,gCAAA,QAAQ,EAAE,KAAK;gCACf;6BACD;;;AAID,4BAAA,IAAI,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,YAAY,KAAK,OAAO,IAAI,aAAa,CAAC,eAAe,EAAE,GAAG,CAAC,EAAE;gCAC5F,IAAI,aAAa,CAAC,eAAe,EAAE,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,EAAE;oCAC5D,QAAQ,GAAG,aAAa;gCAC1B;4BACF;wBACF;6BAAO;4BACL,IAAI,KAAK,GAAqB,SAAS;4BACvC,IAAI,QAAQ,GAAqB,iBAAiB;AAElD,4BAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;gCACrB,IAAI,CAAC,yBAAyB,EAAE;;oCAE9B,QAAQ,GAAG,SAAS;AACpB,oCAAA,QAAQ,GAAG,GAAG,CAAC,YAAY,KAAK,OAAO,GAAG,KAAK,GAAG,OAAO;gCAC3D;AAAO,qCAAA,IAAI,GAAG,CAAC,YAAY,KAAK,aAAa,EAAE;oCAC7C,QAAQ,GAAG,KAAK;gCAClB;qCAAO;;oCAEL,QAAQ,GAAG,GAAG,CAAC,YAAY,KAAK,OAAO,IAAI,GAAG,CAAC,QAAQ,IAAI,iBAAiB,CAAC,eAAe,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,KAAK,GAAG,OAAO;gCAC/H;;gCAGA,QAAQ,QAAQ;AACd,oCAAA,KAAK,KAAK;AACR,wCAAA,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,EAAE,KAAa;AAElD,wCAAA,IAAI,eAA0B;wCAC9B,MAAM,kCAAkC,GAAG,CAAC,SAAS,IAAI,QAAQ,CAAC,eAAe,EAAE,SAAS,CAAC;AAE7F,wCAAA,IAAI,SAAe;AACnB,wCAAA,IAAI,OAAa;wCAEjB,IAAI,kCAAkC,EAAE;4CACtC,SAAS,GAAG,eAAe;4CAC3B,OAAO,GAAG,SAAS;4CACnB,eAAe,GAAG,iBAAiB;wCACrC;6CAAO;4CACL,SAAS,GAAG,SAAS;4CACrB,OAAO,GAAG,eAAe;AACzB,4CAAA,eAAe,GAAG,SAAS,CAAC,EAAE,GAAG,cAAc,EAAE,IAAI,EAAE,SAAS,EAAoB,CAAC;wCACvF;;wCAGA,IAAI,QAAQ,CAAC,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE;;4CAG1C,SAAS,GAAG,eAAe;4CAC3B,OAAO,GAAG,eAAe;4CACzB,QAAQ,GAAG,OAAO;4CAClB,QAAQ,GAAG,eAAe;wCAC5B;6CAAO;4CACL,QAAQ,GAAG,KAAK;wCAClB;;AAGA,wCAAA,KAAK,GAAG;AACN,4CAAA,KAAK,EAAE,SAAS;AAChB,4CAAA,GAAG,EAAE;yCACN;wCACD;AACF,oCAAA,KAAK,OAAO;;AAEV,wCAAA,KAAK,GAAG;AACN,4CAAA,KAAK,EAAE,eAAuB;AAC9B,4CAAA,GAAG,EAAE;yCACN;wCACD;;4BAEN;AAAO,iCAAA,IAAI,GAAG,CAAC,QAAQ,IAAI,iBAAiB,CAAC,eAAe,EAAE,GAAG,CAAC,QAAQ,CAAC,EAAE;;AAE3E,gCAAA,KAAK,GAAG;AACN,oCAAA,KAAK,EAAE,GAAG,CAAC,QAAQ,CAAC,KAAK;AACzB,oCAAA,GAAG,EAAE;iCACN;AAED,gCAAA,IAAI,IAAI,KAAK,iBAAiB,EAAE;;AAE9B,oCAAA,IAAI,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,eAAe,CAAC,EAAE;;AAElF,wCAAA,KAAK,GAAG,SAAS,CAAC,EAAE,GAAG,cAAc,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAoB,CAAC;wCAC7E,QAAQ,GAAG,KAAK;oCAClB;yCAAO;wCACL,QAAQ,GAAG,KAAK;oCAClB;gCACF;qCAAO;;AAEL,oCAAA,QAAQ,GAAG,GAAG,CAAC,QAAQ;gCACzB;4BACF;AAAO,iCAAA,IAAI,IAAI,KAAK,iBAAiB,EAAE;gCACrC,KAAK,GAAG,iBAAiB;4BAC3B;AAEA,4BAAA,MAAM,GAAG;AACP,gCAAA,aAAa,EAAE,aAAa;gCAC5B,QAAQ;gCACR;6BACD;wBACH;oBACF;yBAAO;AACL,wBAAA,MAAM,GAAG;AACP,4BAAA,aAAa,EAAE;yBAChB;oBACH;oBAEA,IAAI,MAAM,EAAE;AACV,wBAAA,MAAM,GAAG;AACP,4BAAA,YAAY,EAAE,QAAQ;4BACtB,aAAa,EAAE,MAAM,CAAC,aAAa;AACnC,4BAAA,QAAQ,EAAE,MAAM,CAAC,QAAQ,GAAI,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAe,GAAG,SAAS;AACnF,4BAAA,KAAK,EAAE,MAAM,CAAC,KAAK,GAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAe,GAAG;yBAClE;oBACH;AAEA,oBAAA,OAAO,MAAM;gBACf,CAAC,EAAE,EAAE,CAAC,EACN,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC;AAClD,gBAAA,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC;iBAC5B;YACH;QACF,CAAC,CAAC,CACH;AAED,QAAA,OAAO,MAAM;IACf;AAES,IAAA,aAAa,GAAiC,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAC3G,IAAA,eAAe,GAAiC,IAAI,CAAC,cAAc,CAAC,IAAI,CAC/E,SAAS,CAAC,CAAC,IAAI,KAAI;AACjB,QAAA,IAAI,IAAI,KAAK,iBAAiB,EAAE;;YAE9B,OAAO,IAAI,CAAC,sBAAsB;QACpC;aAAO;YACL,OAAO,IAAI,CAAC,aAAa;QAC3B;IACF,CAAC,CAAC,CACH;AAED;;AAEG;IACM,kBAAkB,GAAqB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAC7F,SAAS,CAAC,CAAC,cAAc,KAAI;AAC3B,QAAA,IAAI,cAAc,IAAI,cAAc,CAAC,IAAI,KAAK,UAAU,IAAI,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE;YACvF,OAAO,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC;QACvC;aAAO;AACL,YAAA,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAC5B,KAAK,EAAE,EACP,GAAG,CAAC,CAAC,YAAY,KAAI;gBACnB,OAAO,YAAY,EAAE,KAAK,IAAI,cAAc,EAAE,KAAK,EAAE,KAAK;YAC5D,CAAC,CAAC,CACH;QACH;IACF,CAAC,CAAC,EACF,WAAW,EAAE,EACb,WAAW,CAAC,CAAC,CAAC,CACf;IAEQ,mBAAmB,GAAiC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC;AAEvI,IAAA,kBAAkB,GAAiD,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAC1G,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAIO,SAAmB,CAAO,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,EACtE,WAAW,CAAC,CAAC,CAAC,CACf;IAEQ,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAC9C,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,EAC1B,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;IAEQ,cAAc,GAAG,IAAI,SAAS,CAAC;AACtC,QAAA,KAAK,EAAE,IAAI,WAAW,CAAc,IAAI,CAAC;AACzC,QAAA,GAAG,EAAE,IAAI,WAAW,CAAc,IAAI;AACvC,KAAA,CAAC;AAEF,IAAA,IAAI,mBAAmB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK;IACzB;AAEA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa;IACvC;AAEA,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,IAAI,oBAAoB,CAAC,IAAI;IAChE;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW;IACrC;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ;IAClC;AAEA,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI;IAC9C;AAEA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO;IACjC;AAEA,IAAA,IAAI,cAAc,GAAA;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,IAAI,IAAI;IAChD;AAES,IAAA,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CACtD,iBAAiB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACtC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC,EAC3B,oBAAoB,CAAC,kBAAkB,CAAC,EACxC,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CACpC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,EAC5B,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CACpC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,EAC1B,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,aAAa,GAA8C,IAAI,CAAC,OAAO,CAAC,IAAI,CACnF,oBAAoB,EAAE,EACtB,GAAG,CAAC,CAAC,CAAC,KAAI;QACR,IAAI,CAAC,EAAE;YACL,MAAM,MAAM,GAAG,sCAAsC,CAAC,CAAC,EAAE,KAAK,CAAC;YAC/D,OAAO,CAAC,CAAc,MAAM,CAAC,IAAI,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QAC3D;aAAO;AACL,YAAA,OAAO,MAAM,IAAI;QACnB;AACF,IAAA,CAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf;AAEQ,IAAA,mBAAmB,GAAkC,MAAM,IAAI;AAE/D,IAAA,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AAC3D,IAAA,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AAC3D,IAAA,iBAAiB,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;AAC/C,IAAA,oBAAoB,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC;AACrD,IAAA,uBAAuB,GAAG,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AACnF,IAAA,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAEtG,QAAQ,GAAA;QACN,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;AAE3C,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAExE,QAAA,MAAM,iBAAiB,GAAG,CAAC,KAAuB,KAAI;AACpD,YAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,KAA2B,CAAC,EAAE;AAC/E,gBAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;AAC3B,oBAAA,KAAK,EAAE,KAAK,EAAE,KAAK,IAAI,IAAI;AAC3B,oBAAA,GAAG,EAAE,KAAK,EAAE,GAAG,IAAI;AACpB,iBAAA,CAAC;YACJ;AACF,QAAA,CAAC;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;aAC3B,IAAI,CACH,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,gBAAgB,KAAK,mCAAmC,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAChJ,YAAY,CAAC,yBAAyB,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EACtF,SAAS,CAAC,CAAC,CAAC,YAAY,EAAE,YAAY,CAAC,KAAI;AACzC,YAAA,OAAO,kBAAkB,CAAC,IAAI,CAC5B,mBAAmB,EAAE,EACrB,oBAAoB,CAAmB,kBAAkB,CAAC,EAC1D,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,EAAE,YAAY,CAAyD,CAAC,CACpG;AACH,QAAA,CAAC,CAAC;aAEH,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,YAAY,EAAE,YAAY,CAAC,KAAI;AACpD,YAAA,MAAM,KAAK,GAAG,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC,GAAG,IAAI;YACtD,MAAM,WAAW,GAAG,qCAAqC,CAAC,KAAK,EAAE,YAAY,CAAC;YAE9E,IAAI,CAAC,WAAW,EAAE;AAChB,gBAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC;AAChC,gBAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;AAC9B,gBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE;YAClC;AAAO,iBAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;;gBAE3B,iBAAiB,CAAC,QAAQ,CAAC;YAC7B;AACF,QAAA,CAAC,CAAC;AAEJ,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACtE;QAEA,IAAI,CAAC,wBAAwB,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACzH,IAAI,CAAC,kBAAkB,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAErH,QAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,CAAmB,KAAI;YACnG,iBAAiB,CAAC,CAAC,CAAC;AACtB,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,IAAI,CAAC,uBAAuB,CAAC,YAAY,GAAG,IAAI,CAAC;AAC9C,iBAAA,IAAI,CACH,YAAY,CAAC,GAAG,CAAC;YACjB,SAAS,CAAC,MAAK;AACb,gBAAA,OAAO,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAC1C,YAAY,CAAC,GAAG,CAAC,EACjB,MAAM,CAAC,MAAK;oBACV,MAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,EAAE,EAAE,aAAa,EAAE,KAAK;AACtE,oBAAA,IAAI,KAAK,GAAG,mBAAmB,CAAC,WAAW,CAAC;oBAE5C,IAAI,KAAK,IAAI,IAAI,CAAC,0BAA0B,EAAE,KAAK,QAAQ,EAAE;wBAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,EAAE,EAAE,aAAa,EAAE,KAAK;AAClE,wBAAA,KAAK,GAAG,mBAAmB,CAAC,SAAS,CAAC;oBACxC;oBAEA,OAAO,KAAK,CAAC;AACf,gBAAA,CAAC,CAAC,EACF,GAAG,CAAC,CAAC,CAAC,KAAK,CAA8B,CAAC,CAC3C;AACH,YAAA,CAAC,CAAC,EACF,oBAAoB,CAAC,eAAe,CAAC;AAEtC,iBAAA,SAAS,CAAC,CAAC,CAA4B,KAAI;AAC1C,gBAAA,MAAM,oBAAoB,GAAG,IAAI,CAAC,0BAA0B,EAAE;AAE9D,gBAAA,IAAI,oBAAoB,KAAK,QAAQ,EAAE;oBACrC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,IAAI,EAAE,OAAO,CAAC;gBAClE;qBAAO;oBACL,IAAI,UAAU,GAA8B,CAAC;AAE7C,oBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,EAAE;AAElD,oBAAA,IAAI,oBAAoB,KAAK,iBAAiB,IAAI,cAAc,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,GAAG,EAAE;wBACtF,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC,EAAE;;AAE/C,4BAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,2BAA2B,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,EAAoB,CAAC;AACtG,4BAAA,UAAU,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE;wBACpD;oBACF;AAEA,oBAAA,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC;gBACxC;AACF,YAAA,CAAC,CAAC;QACN;AAEA,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC;AAE1F,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,QAAQ,KAAI;YAC1E,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;YAE1C,IAAI,GAAG,EAAE;gBACP,IAAI,QAAQ,EAAE;oBACZ,GAAG,CAAC,OAAO,EAAE;gBACf;qBAAO;oBACL,GAAG,CAAC,MAAM,EAAE;gBACd;YACF;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY;AAC/D,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,GAAG,sBAAsB,CAAC,iBAAiB,CAAC,GAAG,SAAS,CAAC;;QAG5F,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE;AAC3D,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5D;;QAGA,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC,QAAQ,KAAI;YACrD,IAAI,QAAQ,EAAE;AACZ,gBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;YAC/B;iBAAO;AACL,gBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;AAE5B,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,KAAI;oBACrD,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;oBAE1C,IAAI,GAAG,EAAE;wBACP,IAAI,QAAQ,EAAE;4BACZ,GAAG,CAAC,OAAO,EAAE;wBACf;6BAAO;4BACL,GAAG,CAAC,MAAM,EAAE;wBACd;oBACF;AACF,gBAAA,CAAC,CAAC;YACJ;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE;AACxB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1D;aAAO;YACL,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,kCAAkC,CAAC,eAAe,CAAC;QAC7E;AAEA,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AACzE,YAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,UAAU,GAAG,CAAC;AAChC,QAAA,CAAC,CAAC;IACJ;IAES,WAAW,GAAA;QAClB,KAAK,CAAC,WAAW,EAAE;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACnB,QAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE;AACjC,QAAA,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE;AACtC,QAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE;AACjC,QAAA,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE;AACvC,QAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE;AACjC,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;AAC7B,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;AAC7B,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AACvB,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;AAC9B,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;AAC/B,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;AACxB,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;AAC/B,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;IACjC;AAEA,IAAA,cAAc,CAAC,IAAiB,EAAA;AAC9B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,UAAU,CAAC;IAC9D;IAEA,YAAY,CAAC,KAAgC,EAAE,IAA2B,EAAA;QACxE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAC5C;AAEA,IAAA,gBAAgB,CAAC,IAAiB,EAAA;QAChC,OAAO,IAAI,GAAG,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,2BAA2B,EAAE,EAAE,IAAI,EAAoB,CAAC,GAAG,SAAS;IACxG;uGA7hBW,+BAA+B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA/B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,SAAA,EAV/B;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iCAAiC;AAC1C,gBAAA,QAAQ,EAAE,UAAU,CAAC,MAAM,uCAAuC;AACnE;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAQyD,WAAW,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EACoB,UAAU,8HACd,UAAU,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3LjG,o6BAcA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDoKY,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAT,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,YAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,yBAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,KAAA,EAAA,KAAA,EAAA,UAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,kBAAkB,sUAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,cAAc,+BAAY,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAI3G,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAZ3C,SAAS;AAEG,YAAA,IAAA,EAAA,CAAA,EAAA,SAAA,EAAA;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iCAAiC;AAC1C,4BAAA,QAAQ,EAAE,UAAU,CAAC,MAAM,uCAAuC;AACnE;qBACF,EAAA,OAAA,EACQ,CAAC,mBAAmB,EAAE,kBAAkB,EAAE,WAAW,EAAE,mBAAmB,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAA,eAAA,EACtG,uBAAuB,CAAC,MAAM,cACnC,IAAI,EAAA,QAAA,EAAA,o6BAAA,EAAA;AAK0C,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,WAAW,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,qBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACN,gBAAgB,EAAA,EAAA,GAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,mBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACxC,cAAc,EAAA,EAAA,GAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;AA2hBnG;;;;;AAKG;MAEU,uCAAuC,CAAA;AACjC,IAAA,YAAY,GAAG,MAAM,EAAC,WAAc,EAAC;AAC7C,IAAA,+BAA+B,GAAG,MAAM,CAAC,+BAA+B,CAAC;AAElF,IAAA,iBAAiB,CAAC,IAAc,EAAE,YAAoC,EAAE,KAAY,EAAA;;AAElF,QAAA,OAAO,YAAY;IACrB;AAEA,IAAA,aAAa,CAAC,UAAoB,EAAE,YAAoC,EAAE,KAAY,EAAA;QACpF,MAAM,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,GAAG,IAAI,CAAC,+BAA+B;AACjG,QAAA,MAAM,oBAAoB,GAAG,0BAA0B,EAAE;QAEzD,IAAI,UAAU,IAAI,IAAI,IAAI,oBAAoB,KAAK,QAAQ,EAAE;AAC3D,YAAA,MAAM,cAAc,GAAG,oBAAoB,EAAE;YAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC;AAEjD,YAAA,IAAI,cAAc,KAAK,oBAAoB,KAAK,QAAQ,IAAI,iBAAiB,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,EAAE;gBACpG,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC;AAC9D,gBAAA,OAAO,gBAAgB;YACzB;QACF;AAEA,QAAA,OAAO,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC;IAClD;AAEQ,IAAA,wBAAwB,CAAC,KAAe,EAAA;AAC9C,QAAA,IAAI,SAA2B;QAE/B,IAAI,KAAK,EAAE;YACT,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;YAC5C,SAAS,GAAG,IAAI,CAAC,+BAA+B,CAAC,gBAAgB,CAAC,IAAI,CAAC;QACzE;AAEA,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;IACzC;AAEQ,IAAA,gBAAgB,CAAC,KAAuB,EAAA;QAC9C,IAAI,KAAK,EAAE;YACT,OAAO,IAAIM,SAAmB,CAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/G;aAAO;AACL,YAAA,OAAO,IAAIA,SAAmB,CAAI,IAAI,EAAE,IAAI,CAAC;QAC/C;IACF;AAEA,IAAA,mBAAmB,CAAC,KAAQ,EAAA;QAC1B,MAAM,GAAG,GAAe,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC;QACxD,MAAM,UAAU,GAAc,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC/D,MAAM,IAAI,GAAe,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC;QACzD,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC;IACxC;AAEA,IAAA,mBAAmB,CAAC,IAAU,EAAA;AAC5B,QAAA,MAAM,GAAG,GAAe,IAAI,CAAC,OAAO,EAAE;AACtC,QAAA,MAAM,UAAU,GAAc,IAAI,CAAC,QAAQ,EAAE;AAC7C,QAAA,MAAM,IAAI,GAAe,IAAI,CAAC,WAAW,EAAE;AAE3C,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC;IAC5D;uGA1DW,uCAAuC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAvC,uCAAuC,EAAA,CAAA;;2FAAvC,uCAAuC,EAAA,UAAA,EAAA,CAAA;kBADnD;;;AEttBD,MAAMR,mBAAiB,GAAG,CAAC,yBAAyB,EAAE,+BAA+B,EAAE,0BAA0B,CAAC;AAElH;MAca,4BAA4B,CAAA;uGAA5B,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAA5B,4BAA4B,EAAA,OAAA,EAAA,CAhBd,yBAAyB,EAAE,+BAA+B,EAAE,0BAA0B,EAAAD,IAAA,CAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAtF,yBAAyB,EAAE,+BAA+B,EAAE,0BAA0B,CAAA,EAAA,CAAA;AAgBpG,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,4BAA4B,YAXlCC,mBAAiB,EACpB,YAAY,CAAC,QAAQ,CAAC;AACpB,gBAAA,KAAK,EAAE;;AAEL,oBAAA,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,yBAAyB,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE;AAC7F,oBAAA,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,+BAA+B,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC;AACxG;AACF,aAAA,CAAC,EAZiF,0BAA0B,CAAA,EAAA,CAAA;;2FAgBpG,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAbxC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;AACP,wBAAA,GAAGA,mBAAiB;wBACpB,YAAY,CAAC,QAAQ,CAAC;AACpB,4BAAA,KAAK,EAAE;;AAEL,gCAAA,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,yBAAyB,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE;AAC7F,gCAAA,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,+BAA+B,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC;AACxG;yBACF;AACF,qBAAA;AACD,oBAAA,OAAO,EAAEA;AACV,iBAAA;;;ACGD;;;;;;;;;;;;AAYG;SACa,6BAA6B,CAAgD,WAAc,EAAE,UAAkB,EAAE,YAAe,EAAA;IAC9I,OAAO;QACL,QAAQ,EAAE,CAAC,UAAU,CAAC;AACtB,QAAA,KAAK,EAAE,YAAY;QACnB,UAAU,EAAE,CAAC,WAAW;KACzB;AACH;AAEA;;AAEG;SACa,gBAAgB,CAAgD,WAAc,EAAE,mBAAkD,EAAE,EAAA;IAClJ,OAAO,6BAA6B,CAAmC,WAAW,EAAE,sBAAsB,EAAE,gBAAgB,CAAC;AAC/H;AAEA;;AAEG;SACa,aAAa,CAAgD,WAAc,EAAE,gBAA+C,EAAE,EAAA;IAC5I,OAAO,6BAA6B,CAAmC,WAAW,EAAE,kBAAkB,EAAE,aAAa,CAAC;AACxH;AAEA;;AAEG;SACa,aAAa,CAA8B,WAAc,EAAE,gBAA4C,EAAE,EAAA;IACvH,OAAO,6BAA6B,CAAgC,WAAW,EAAE,kBAAkB,EAAE,aAAa,CAAC;AACrH;AAEA;;AAEG;SACa,cAAc,CAA8B,WAAc,EAAE,iBAAuC,EAAE,EAAA;IACnH,OAAO,6BAA6B,CAA0B,WAAW,EAAE,mBAAmB,EAAE,cAAc,CAAC;AACjH;AAEA;;AAEG;SACa,iBAAiB,CAA8B,WAAc,EAAE,oBAA6C,EAAE,EAAA;IAC5H,OAAO,6BAA6B,CAA6B,WAAW,EAAE,sBAAsB,EAAE,iBAAiB,CAAC;AAC1H;AAEA;;AAEG;AACG,SAAU,WAAW,CAA8B,WAAc,EAAE,WAA8B,EAAA;IACrG,OAAO,6BAA6B,CAAuB,WAAW,EAAE,gBAAgB,EAAE,WAAW,CAAC;AACxG;AAEA;;AAEG;AACG,SAAU,YAAY,CAA8B,WAAc,EAAE,YAAuC,EAAA;IAC/G,OAAO,6BAA6B,CAA+B,WAAW,EAAE,iBAAiB,EAAE,YAAY,CAAC;AAClH;AAEA;;AAEG;SACa,cAAc,CAA8B,WAAc,EAAE,iBAA8C,EAAE,EAAA;IAC1H,OAAO,6BAA6B,CAAiC,WAAW,EAAE,mBAAmB,EAAE,cAAc,CAAC;AACxH;AAoBA;;;AAGG;AACG,SAAU,sCAAsC,CAAC,KAA+D,EAAA;AACpH,IAAA,IAAK,KAA8C,CAAC,KAAK,IAAI,IAAI,EAAE;AACjE,QAAA,OAAO,IAAI;IACb;SAAO;AACL,QAAA,OAAO,KAAK;IACd;AACF;AAEA;;;;;;;;;;;;;;;AAeG;SACa,iBAAiB,CAAC,YAA0E,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,GAAG,CAAC,KAAmD,EAAE,EAAA;IAC7N,OAAO;QACL,QAAQ,EAAE,CAAC,MAAM,CAAC;AAClB,QAAA,mBAAmB,EAAE,gBAAgB;;AAErC,QAAA,KAAK,EAAE;YACL,UAAU;YACV,aAAa;YACb;AACD,SAAA;QACD,UAAU,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,KAAI;AAC3C,YAAA,MAAM,WAAW,GAAyC,sCAAsC,CAAC,WAAW;AAC1G,kBAAE;AACF,kBAAE;AACE,oBAAA,KAAK,EAAE;iBACR;YAEL,MAAM,EAAE,KAAK,EAAE,IAAI,GAAG,WAAW,EAAE,GAAG,WAAW;AACjD,YAAA,MAAM,SAAS,GAAG,CAAA,SAAA,EAAY,IAAI,EAAE;YAEpC,OAAO;AACL,gBAAA,GAAG,KAAK;gBACR;aACD;AACH,QAAA,CAAC;KACF;AACH;AAEA;AACA;AAEA;;;;;;;;AAQE;;ACxKF;;;AAGG;MACU,kCAAkC,GAAqD,MAClG,EAAE,CAAC;AACD,IAAA,oBAAoB,EAAE,IAAI;AAC1B,IAAA,iBAAiB,EAAE;AACpB,CAAA;AAEH;;AAEG;AACG,SAAU,aAAa,CAAC,MAAA,GAAmC,EAAE,EAAA;AACjE,IAAA,OAAO,aAAa,CAAC;AACnB,QAAA,GAAG,MAAM;QACT,QAAQ,EAAE,wBAAwB,CAAC,QAAQ;AAC3C,QAAA,QAAQ,EAAE;AACX,KAAA,CAAC;AACJ;AAEA;;;;;;;;;;;AAWG;AACG,SAAU,aAAa,CAAC,MAAA,GAAuC,EAAE,EAAA;IACrE,MAAM,EAAE,GAAG,GAAG,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,GAAG,wBAAwB,CAAC,QAAQ,EAAE,SAAS,EAAE,mBAAmB,EAAE,4BAA4B,EAAE,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,YAAY,EAAE,QAAQ,GAAG,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,GAAG,MAAM;IAEtY,MAAM,WAAW,GAAG,2EAA2E;IAC/F,MAAM,WAAW,GAA6C,WAAW,CAAC;QACxE,GAAG;AACH,QAAA,IAAI,EAAE,UAAU;QAChB,GAAG,4BAA4B,CAAC,MAAM,EAAE;AACtC,YAAA,GAAG,iBAAiB;YACpB,eAAe;YACf,WAAW;YACX,SAAS;YACT,SAAS;YACT,WAAW;YACX,WAAW;YACX,SAAS;YACT,QAAQ;YACR,OAAO;YACP,UAAU;YACV,QAAQ,EAAE,QAAQ,GAAG,wBAAwB,CAAC,QAAQ,GAAG,QAAQ;YACjE,mBAAmB;YACnB,4BAA4B;YAC5B,QAAQ;YACR,QAAQ;YACR,YAAY;YACZ,gBAAgB;YAChB,YAAY;YACZ,cAAc;YACd,YAAY;YACZ,YAAY;YACZ;SACD;AACF,KAAA,CAAC;AAEF,IAAA,OAAO,WAAW;AACpB;AAcA;;;;;;;;;;;AAWG;AACG,SAAU,cAAc,CAAC,MAAA,GAAmC,EAAE,EAAA;IAClE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,MAAM;IACxH,MAAM,QAAQ,GAAG,aAAa,IAAI,KAAK,EAAE,QAAQ,IAAI,KAAK;AAE1D,IAAA,MAAM,aAAa,GAAG,KAAK,EAAE,GAAG,IAAI,OAAO;AAC3C,IAAA,MAAM,WAAW,GAAG,GAAG,EAAE,GAAG,IAAI,KAAK;IAErC,MAAM,UAAU,GAAG,aAAa,CAAC;AAC/B,QAAA,SAAS,EAAE,OAAO;QAClB,QAAQ,EAAE,wBAAwB,CAAC,IAAI;AACvC,QAAA,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1E,OAAO;AACP,QAAA,WAAW,EAAE,EAAE;QACf,QAAQ;QACR,QAAQ;QACR,YAAY;QACZ,SAAS;QACT,UAAU;AACV,QAAA,GAAG,KAAK;QACR,QAAQ;AACR,QAAA,GAAG,EAAE;AACN,KAAA,CAAC;IAEF,MAAM,QAAQ,GAAG,aAAa,CAAC;AAC7B,QAAA,SAAS,EAAE,KAAK;QAChB,QAAQ,EAAE,wBAAwB,CAAC,IAAI;AACvC,QAAA,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC7E,OAAO;AACP,QAAA,WAAW,EAAE,EAAE;QACf,QAAQ;QACR,QAAQ;QACR,YAAY;QACZ,SAAS;QACT,UAAU;AACV,QAAA,GAAG,GAAG;QACN,QAAQ;AACR,QAAA,GAAG,EAAE;AACN,KAAA,CAAC;IAEF,OAAO;AACL,QAAA,GAAG,EAAE,SAAS;QACd,UAAU,EAAE,CAAC,iBAAiB,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;KACrH;AACH;AAcA;;;;;;;;;;;AAWG;AACG,SAAU,kBAAkB,CAAC,WAAA,GAA4C,EAAE,EAAA;IAC/E,MAAM,EAAE,QAAQ,GAAG,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,WAAW;IAE5I,SAAS,wBAAwB,CAAC,MAAoD,EAAA;QACpF,OAAO;YACL,SAAS;YACT,UAAU;AACV,YAAA,GAAG,MAAM;YACT,QAAQ;YACR,QAAQ,EAAE,wBAAwB,CAAC,QAAQ;AAC3C,YAAA,gBAAgB,EAAE,SAAS;AAC3B,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,YAAY,EAAE;SACf;IACH;AAEA,IAAA,MAAM,QAAQ,GAAG,UAAU,EAAE,GAAG,IAAI,OAAO;AAC3C,IAAA,MAAM,MAAM,GAAG,QAAQ,EAAE,GAAG,IAAI,KAAK;AAErC,IAAA,MAAM,KAAK,GAAiC;AAC1C,QAAA,KAAK,EAAE,YAAY;QACnB,GAAG,wBAAwB,CAAC,UAAU,CAAC;AACvC,QAAA,GAAG,EAAE;KACN;AAED,IAAA,MAAM,GAAG,GAAiC;AACxC,QAAA,KAAK,EAAE,UAAU;QACjB,GAAG,wBAAwB,CAAC,QAAQ,CAAC;AACrC,QAAA,GAAG,EAAE;KACN;AAED,IAAA,MAAM,MAAM,GAAG;QACb,QAAQ;QACR,QAAQ;QACR,YAAY;QACZ,OAAO;QACP,KAAK;QACL;KACD;AAED,IAAA,OAAO,cAAc,CAAC,MAAM,CAAC;AAC/B;AAQA;;;;;;;;;;AAUG;AACG,SAAU,mBAAmB,CAAC,MAAA,GAA6C,EAAE,EAAA;IACjF,MAAM,EAAE,GAAG,GAAG,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,GAAG,MAAM;IAE9K,MAAM,WAAW,GAAG,8EAA8E;IAClG,MAAM,WAAW,GAA6C,WAAW,CAAC;QACxE,GAAG;AACH,QAAA,IAAI,EAAE,gBAAgB;QACtB,GAAG,4BAA4B,CAAC,MAAM,EAAE;AACtC,YAAA,GAAG,iBAAiB;YACpB,WAAW;YACX,cAAc;YACd,YAAY;YACZ,SAAS;YACT,OAAO;YACP,QAAQ;YACR,aAAa;YACb,YAAY;YACZ,YAAY;YACZ;SACD;AACF,KAAA,CAAC;AAEF,IAAA,OAAO,WAAW;AACpB;;ACtQO,MAAM,4CAA4C,GAAkC;AACzF,IAAA;AACE,QAAA,KAAK,EAAE,QAAQ;AACf,QAAA,UAAU,EAAE;AACb,KAAA;AACD,IAAA;AACE,QAAA,KAAK,EAAE,QAAQ;AACf,QAAA,UAAU,EAAE;AACb,KAAA;AACD,IAAA;AACE,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,UAAU,EAAE;AACb,KAAA;AACD,IAAA;AACE,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,UAAU,EAAE;AACb,KAAA;AACD,IAAA;AACE,QAAA,KAAK,EAAE,QAAQ;AACf,QAAA,UAAU,EAAE;AACb,KAAA;AACD,IAAA;AACE,QAAA,KAAK,EAAE,QAAQ;AACf,QAAA,UAAU,EAAE;AACb,KAAA;AACD,IAAA;AACE,QAAA,KAAK,EAAE,UAAU;AACjB,QAAA,UAAU,EAAE;AACb;;;SC5Ba,QAAQ,GAAA;IACtB,OAAO,CAAC,OAAwB,KAA6B;AAC3D,QAAA,MAAM,KAAK,GAAwB,OAAO,CAAC,KAAK;QAEhD,IAAI,CAAC,KAAK,EAAE;YACV,OAAO;AACL,gBAAA,QAAQ,EAAE;aACX;QACH;AAEA,QAAA,OAAO,EAAE;AACX,IAAA,CAAC;AACH;;SCXgB,QAAQ,GAAA;AACtB,IAAA,OAAO,UAAU,CAAC,OAAO,CAAC,6BAA6B,CAAC;AAC1D;;ACFO,MAAM,qCAAqC,GAAG;AA0BrD;;;;;;;AAOG;AACG,SAAU,4BAA4B,CAA4B,MAAA,GAAgD,EAAE,EAAA;IACxH,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,iBAAiB,EAAE,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,6BAA6B,EAAE,GAAG,MAAM;IAEpI,MAAM,YAAY,GAAoC,iBAAiB,IAAI;AACzE,QAAA,WAAW,EAAE,wBAAwB,CAAC,IAAI;QAC1C;KACD;IAED,OAAO,CAAC,OAAwB,KAAI;AAClC,QAAA,MAAM,MAAM,GAAiB,OAAO,CAAC,KAAK;QAC1C,MAAM,MAAM,GAAQ,cAAc,CAAC,MAAW,EAAE,YAAY,CAAC;QAC7D,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC;QAEnD,IAAI,OAAO,EAAE;AACX,YAAA,OAAO,IAAI;QACb;aAAO;YACL,OAAO;AACL,gBAAA,CAAC,qCAAqC,GAAG,EAAE,OAAO;aACnD;QACH;AACF,IAAA,CAAC;AACH;;ACvDA;;;;;;AAMG;AACG,SAAU,SAAS,CAAC,GAAA,GAAc,MAAM,CAAC,gBAAgB,EAAE,GAAA,GAAc,MAAM,CAAC,gBAAgB,EAAA;IACpG,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;IACjC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;IAEjC,OAAO,CAAC,OAAwB,KAA6B;AAC3D,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC;AAC/B,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC;QAE/B,IAAI,MAAM,GAA4B,IAAI;AAE1C,QAAA,IAAI,QAAQ,IAAI,QAAQ,EAAE;AACxB,YAAA,MAAM,GAAG;AACP,gBAAA,GAAG,QAAQ;AACX,gBAAA,GAAG;aACJ;QACH;AAEA,QAAA,OAAO,MAAM;AACf,IAAA,CAAC;AACH;AAEO,MAAM,8BAA8B,GAAG;AAS9C;;;;;AAKG;AACG,SAAU,aAAa,CAAC,OAAe,EAAA;AAC3C,IAAA,IAAI,OAAO,KAAK,CAAC,EAAE;AACjB,QAAA,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC;IACxD;IAEA,OAAO,CAAC,OAAwB,KAA6B;AAC3D,QAAA,MAAM,KAAK,GAAuB,OAAO,CAAC,KAAK;AAE/C,QAAA,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE;YACzD,MAAM,OAAO,GAAG,sBAAsB,CAAC,KAAK,EAAE,OAAO,CAAC;YACtD,OAAO;gBACL,CAAC,8BAA8B,GAAG;oBAChC,KAAK;oBACL,OAAO;oBACP,OAAO;oBACP,OAAO,EAAE,CAAA,4BAAA,EAA+B,OAAO,CAAA,mCAAA,EAAsC,OAAO,CAAC,YAAY,CAAA,KAAA,EAAQ,OAAO,CAAC,WAAW,CAAA,CAAA;AACrI;aACF;QACH;AAEA,QAAA,OAAO,EAAE;AACX,IAAA,CAAC;AACH;;AChEO,MAAM,uCAAuC,GAAG;AAChD,MAAM,6CAA6C,GAAG;AAuB7D;;;;;;;AAOG;AACG,SAAU,8BAA8B,CAAI,MAA+C,EAAA;AAC/F,IAAA,MAAM,EAAE,QAAQ,GAAG,GAAG,EAAE,qBAAqB,EAAE,OAAO,GAAG,8BAA8B,EAAE,GAAG,MAAM;IAElG,MAAM,MAAM,GAAG,gBAAgB,CAAI;QACjC;AACD,KAAA,CAAC;AAEF,IAAA,OAAO,CAAC,OAAwB,KAC9B,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,KAAU,CAAC,CAAC,IAAI,CACnD,SAAS,CAAC,CAAC,CAAC,KAAK,qBAAqB,CAAC,CAAC,CAAC,CAAC,EAC1C,GAAG,CAAC,CAAC,WAAW,KAAI;QAClB,IAAI,WAAW,EAAE;AACf,YAAA,OAAO,IAAI;QACb;aAAO;YACL,OAAO;AACL,gBAAA,CAAC,uCAAuC,GAAG,EAAE,OAAO;aACrD;QACH;IACF,CAAC,CAAC,EACF,UAAU,CAAC,MACT,EAAE,CAAC;AACD,QAAA,CAAC,6CAA6C,GAAG,EAAE,OAAO,EAAE,mBAAmB;AAChF,KAAA,CAAC,CACH,EACD,KAAK,EAAE,CACR;AACL;;AC1DA;;;;;AAKG;AACG,SAAU,iBAAiB,CAAC,cAAuB,EAAA;IACvD,OAAO,CAAC,OAAwB,KAA6B;AAC3D,QAAA,MAAM,KAAK,GAAuB,OAAO,CAAC,KAAK;AAE/C,QAAA,IAAI,KAAK,IAAI,IAAI,IAAI,CAACS,mBAAyB,CAAC,KAAK,EAAE,cAAc,CAAC,EAAE;YACtE,OAAO;AACL,gBAAA,CAAC,4BAA4B,CAAC,IAAI,GAAG;aACtC;QACH;AAEA,QAAA,OAAO,EAAE;AACX,IAAA,CAAC;AACH;AAEA;;;;;AAKG;SACa,gBAAgB,GAAA;IAC9B,OAAO,CAAC,OAAwB,KAA6B;AAC3D,QAAA,MAAM,KAAK,GAAgC,OAAO,CAAC,KAAK;AAExD,QAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,YAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE;AAEjC,YAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC,EAAE;gBACjE,OAAO;AACL,oBAAA,CAAC,sCAAsC,CAAC,IAAI,GAAG;iBAChD;YACH;QACF;AAEA,QAAA,OAAO,EAAE;AACX,IAAA,CAAC;AACH;SAEgB,mCAAmC,GAAA;IACjD,OAAO,CAAC,OAAwB,KAA6B;AAC3D,QAAA,MAAM,KAAK,GAAuB,OAAO,CAAC,KAAK;AAE/C,QAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,YAAA,IAAIA,mBAAyB,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE;AAC1C,gBAAA,MAAM,IAAI,GAAG,4BAA4B,CAAC,KAAK,CAAC;AAEhD,gBAAA,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;oBAClE,OAAO;AACL,wBAAA,CAAC,sCAAsC,CAAC,IAAI,GAAG;qBAChD;gBACH;YACF;iBAAO;gBACL,OAAO;AACL,oBAAA,CAAC,4BAA4B,CAAC,IAAI,GAAG;iBACtC;YACH;QACF;AAEA,QAAA,OAAO,EAAE;AACX,IAAA,CAAC;AACH;;ACnEO,MAAM,iCAAiC,GAAG;AAC1C,MAAM,6CAA6C,GAAG;AACtD,MAAM,sDAAsD,GAAG;AA6BtE;;;;;AAKG;AACG,SAAU,qBAAqB,CAAC,MAAoC,EAAA;AACxE,IAAA,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,iBAAiB,EAAE,GAAG,MAAM,IAAI,EAAE;AACnF,IAAA,MAAM,gBAAgB,GAAG,aAAa,IAAI,IAAI;AAC9C,IAAA,MAAM,YAAY,GAAG,UAAU,IAAI,KAAK;AACxC,IAAA,MAAM,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC;AAC/C,IAAA,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC;AAC7C,IAAA,MAAM,eAAe,GAAG,eAAe,CAAC,IAAI,GAAG,CAAC;IAEhD,SAAS,UAAU,CAAC,OAA0B,EAAA;QAC5C,IAAI,gBAAgB,EAAE;AACpB,YAAA,IAAI,sBAAsB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACzC,gBAAA,OAAO,IAAI;YACb;QACF;AAAO,aAAA,IAAI,OAAO,CAAC,YAAY,EAAE;AAC/B,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,YAAY,IAAI,OAAO,CAAC,aAAa,EAAE;YACzC,OAAO,gBAAgB,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI;QACxD;AAEA,QAAA,OAAO,KAAK;IACd;IAEA,MAAM,sBAAsB,GAAG,YAAY,GAAG,EAAE,GAAG,gEAAgE;IAEnH,MAAM,oBAAoB,GAA4D;AACpF,UAAE,CAAC,OAA0B,KAAI;YAC7B,OAAO,UAAU,CAAC,OAAO;AACvB,kBAAE;AACF,kBAAE;oBACE,CAAC,6CAA6C,GAAG;wBAC/C,KAAK,EAAE,OAAO,CAAC,KAAK;wBACpB,gBAAgB;wBAChB,OAAO,EAAE,CAAA,qDAAA,EAAwD,sBAAsB,CAAA;AACxF;iBACF;QACP;AACF,UAAE,CAAC,OAA0B,KAAI;YAC7B,OAAO,UAAU,CAAC,OAAO;AACvB,kBAAE;AACF,kBAAE;oBACE,CAAC,iCAAiC,GAAG;wBACnC,KAAK,EAAE,OAAO,CAAC,KAAK;wBACpB,gBAAgB;wBAChB,OAAO,EAAE,CAAA,iCAAA,EAAoC,sBAAsB,CAAA;AACpE;iBACF;AACP,QAAA,CAAC;AAEL,IAAA,MAAM,qBAAqB,GAA4D,CAAC,OAA0B,KAAI;AACpH,QAAA,IAAI,IAAI,GAAG,eAAe,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,GAAG,KAAK;AAEpD,QAAA,IAAI,OAAO,CAAC,gBAAgB,IAAI,eAAe,EAAE;YAC/C,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;QAC5C;AAEA,QAAA,OAAO;AACL,cAAE;AACF,cAAE;gBACE,CAAC,sDAAsD,GAAG;oBACxD,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,gBAAgB;oBAChB,YAAY;oBACZ,OAAO,EAAE,gEAAgE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAA;AACjG;aACF;AACP,IAAA,CAAC;IAED,OAAO,CAAC,OAAwB,KAA6B;AAC3D,QAAA,MAAM,KAAK,GAAuB,OAAO,CAAC,KAAK;AAE/C,QAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,YAAA,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,CAAC;YAExC,OAAO;gBACL,GAAG,oBAAoB,CAAC,OAAO,CAAC;gBAChC,GAAG,qBAAqB,CAAC,OAAO;aACjC;QACH;AAEA,QAAA,OAAO,EAAE;AACX,IAAA,CAAC;AACH;;AC3FA;;;;;;;;;;;AAWG;AACG,SAAU,0BAA0B,CAAC,MAAkF,EAAA;IAC3H,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,MAAM;AACnD,IAAA,IAAI,OAAwC;IAE5C,IAAI,YAAY,EAAE;QAChB,OAAO,GAAG,YAAY;IACxB;IAEA,IAAI,SAAS,EAAE;QACb,MAAM,eAAe,GAAsB,gBAAgB,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;QAC/F,OAAO,GAAG,YAAY,CAAC,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACpD;AAEA,IAAA,OAAO,OAAO;AAChB;AAEA;;;;;;;;;;;;AAYG;AACG,SAAU,WAAW,CAAC,MAAyB,EAAA;IACnD,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,GAAG,QAAQ,EAAE,iBAAiB,EAAE,GAAG,MAAM;AAClG,IAAA,MAAM,OAAO,GAAG,0BAA0B,CAAC,MAAM,CAAC;IAElD,MAAM,UAAU,GAAkB,EAAE;AAEpC,IAAA,IAAI,IAAI,IAAI,WAAW,EAAE;QACvB,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACtC;AAEA,IAAA,OAAO,WAAW,CAAC;QACjB,GAAG;AACH,QAAA,IAAI,EAAE,OAAO;QACb,GAAG,4BAA4B,CAAC,MAAM,EAAE;AACtC,YAAA,GAAG,iBAAiB;YACpB,IAAI;YACJ,GAAG;YACH,GAAG;YACH;SACD,CAAC;AACF,QAAA,GAAG,wBAAwB,CAAC;YAC1B;SACD,CAAC;QACF;AACD,KAAA,CAAC;AACJ;AAkCA;;;;;;;;;;AAUG;AACG,SAAU,iBAAiB,CAAC,MAA+B,EAAA;AAC/D,IAAA,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,GAAG,QAAQ,EAAE,iBAAiB,EAAE,UAAU,EAAE,eAAe,EAAE,YAAY,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,yBAAyB,GAAG,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM;AACzO,IAAA,MAAM,OAAO,GAAG,0BAA0B,CAAC,MAAM,CAAC;IAElD,MAAM,UAAU,GAAkB,EAAE;AACpC,IAAA,IAAI,qBAAyC;IAE7C,IAAI,IAAI,EAAE;QACR,qBAAqB,GAAG,CAAC;QAEzB,IAAI,WAAW,EAAE;YACf,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACtC;IACF;AAEA,IAAA,MAAM,YAAY,GAAuB,iBAAiB,KAAK,KAAK,GAAG,SAAS,IAAI,iBAAiB,IAAI,qBAAqB,IAAI,SAAS,CAAC;AAC5I,IAAA,OAAO,WAAW,CAAC;QACjB,GAAG;AACH,QAAA,IAAI,EAAE,QAAQ;QACd,GAAG,4BAA4B,CAAC,MAAM,EAAE;AACtC,YAAA,GAAG,iBAAiB;YACpB,IAAI;YACJ,GAAG;YACH,GAAG;YACH,IAAI;AACJ,YAAA,QAAQ,EAAE,yBAAyB;YACnC,QAAQ,EAAE,eAAe,IAAI,IAAI;AACjC,YAAA,aAAa,EAAE,OAAO,CAAC,YAAY,CAAC;YACpC,YAAY;YACZ;SACD,CAAC;AACF,QAAA,GAAG,wBAAwB,CAAC;YAC1B;SACD,CAAC;QACF;AACD,KAAA,CAAC;AACJ;AAMA;;;;;;;;;;AAUG;AACG,SAAU,iBAAiB,CAAC,MAA+B,EAAA;AAC/D,IAAA,OAAO,WAAW,CAAC,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,EAAE,GAAG,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,SAAS,IAAI,uBAAuB,EAAE,EAAE,CAAC,CAAC;AAC3I;;AClMA,MAAMT,mBAAiB,GAAG,CAAC,oBAAoB,EAAE,qBAAqB,CAAC;AAEvE;MAKa,8BAA8B,CAAA;uGAA9B,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAA9B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,8BAA8B,YAPhB,oBAAoB,EAAE,qBAAqB,CAAA,EAAA,OAAA,EAAA,CAA3C,oBAAoB,EAAE,qBAAqB,CAAA,EAAA,CAAA;AAOzD,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,8BAA8B,EAAA,OAAA,EAAA,CAHhCA,mBAAiB,EAJD,oBAAoB,EAAE,qBAAqB,CAAA,EAAA,CAAA;;2FAOzD,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAJ1C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAEA,mBAAiB;AAC1B,oBAAA,OAAO,EAAEA;AACV,iBAAA;;;ACwBD;AACO,MAAM,2BAA2B,GAAG,CAAC,IAAI;AAEhD;;;;;;;AAOG;AAOG,MAAO,sBAAuB,SAAQC,WAA8D,CAAA;AAC/F,IAAA,SAAS,GAAG,IAAI,kBAAkB,EAAE;AACpC,IAAA,UAAU,GAAG,IAAI,kBAAkB,EAAE;AACrC,IAAA,kBAAkB,GAAG,IAAI,kBAAkB,EAAE;AAC7C,IAAA,cAAc,GAAG,IAAI,kBAAkB,EAAE;AAEzC,IAAA,SAAS,GAAG,IAAI,WAAW,CAAS,EAAE,CAAC;AACvC,IAAA,aAAa,GAAG,IAAI,WAAW,CAAS,EAAE,EAAE;AACnD,QAAA,UAAU,EAAE,CAAC,gBAAgB,EAAE;AAChC,KAAA,CAAC;IAEO,cAAc,GAAG,IAAI,SAAS,CAAC;QACtC,KAAK,EAAE,IAAI,CAAC,SAAS;QACrB,SAAS,EAAE,IAAI,CAAC;AACjB,KAAA,CAAC;AAEF,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI;IACxC;AAEA,IAAA,IAAI,kBAAkB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,kBAAkB,IAAI,2BAA2B;IACrE;AAEA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,EAAE;IACvC;AAEA,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,KAAK;IAC3C;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,oBAAoB,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,KAAI;AACnJ,YAAA,IAAI,KAAoB;AACxB,YAAA,IAAI,SAAwB;YAE5B,IAAI,UAAU,EAAE;AACd,gBAAA,MAAM,IAAI,GAAG,4BAA4B,CAAC,UAAU,CAAC;AACrD,gBAAA,KAAK,GAAG,IAAI,CAAC,MAAM;AACnB,gBAAA,SAAS,GAAG,IAAI,CAAC,SAAS;YAC5B;;AAGA,YAAA,IAAI,KAAK,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,KAAK,IAAI,CAAC,EAAE;gBACtD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;gBACpC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC;YAC9C;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,UAAU,CAAC,YAAY,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,oBAAoB,EAAE,CAAC,CAAC;aACvM,IAAI,CACH,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,KAAI;YACzB,IAAI,KAAK,EAAE;AACT,gBAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,oBAAA,OAAO,+CAA+C,CAAC;AACrD,wBAAA,MAAM,EAAE,KAAwB;wBAChC;AAC+B,qBAAA,CAAC;gBACpC;qBAAO;AACL,oBAAA,OAAO,KAAK;gBACd;YACF;iBAAO;AACL,gBAAA,OAAO,SAAS;YAClB;AACF,QAAA,CAAC,CAAC,EACF,oBAAoB,EAAE;AAEvB,aAAA,SAAS,CAAC,CAAC,CAAC,KAAI;AACf,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC9B,QAAA,CAAC,CAAC;AAEJ;;;AAGG;AACH,QAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AACtF,YAAA,IAAI,CAAC,KAAK,SAAS,EAAE;AACnB,gBAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;YACxE;AACF,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AACnF,YAAA,MAAM,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;YACzE,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC1F,QAAA,CAAC,CAAC;IACJ;IAES,WAAW,GAAA;QAClB,KAAK,CAAC,WAAW,EAAE;AACnB,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AACxB,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;AACzB,QAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE;AACjC,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;IAC/B;uGA/FW,sBAAsB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,+FCnDnC,srBASA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDsCY,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,4EAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,4EAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,kWAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,wBAAwB,+BAAE,uBAAuB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,WAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,MAAA,EAAA,aAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIvJ,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBANlC,SAAS;8BAEC,CAAC,cAAc,EAAE,kBAAkB,EAAE,WAAW,EAAE,mBAAmB,EAAE,aAAa,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,uBAAuB,CAAC,mBAClJ,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,EAAA,QAAA,EAAA,srBAAA,EAAA;;;AE7ClB,MAAMD,mBAAiB,GAAG,CAAC,sBAAsB,CAAC;AAElD;MAUa,6BAA6B,CAAA;uGAA7B,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAA7B,6BAA6B,EAAA,OAAA,EAAA,CAZf,sBAAsB,EAAAD,IAAA,CAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAtB,sBAAsB,CAAA,EAAA,CAAA;AAYpC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,6BAA6B,YAPnCC,mBAAiB,EACpB,YAAY,CAAC,QAAQ,CAAC;AACpB,gBAAA,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,sBAAsB,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE;aAC1F,CAAC,CAAA,EAAA,CAAA;;2FAIO,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBATzC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;AACP,wBAAA,GAAGA,mBAAiB;wBACpB,YAAY,CAAC,QAAQ,CAAC;AACpB,4BAAA,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,sBAAsB,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE;yBAC1F;AACF,qBAAA;AACD,oBAAA,OAAO,EAAEA;AACV,iBAAA;;;ACsBD;;;;;;;;;;;AAWG;AACG,SAAU,wBAAwB,CAAC,MAAkF,EAAA;IACzH,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,MAAM;AACnD,IAAA,IAAI,OAAwC;IAE5C,IAAI,YAAY,EAAE;QAChB,OAAO,GAAG,YAAY;IACxB;IAEA,IAAI,SAAS,EAAE;QACb,MAAM,eAAe,GAAsB,gBAAgB,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;QAC/F,OAAO,GAAG,YAAY,CAAC,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACpD;AAEA,IAAA,OAAO,OAAO;AAChB;AAEA;;;;;;;;;;AAUG;AACG,SAAU,SAAS,CAAC,MAAuB,EAAA;IAC/C,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,GAAG,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM;AAC7G,IAAA,MAAM,OAAO,GAAG,wBAAwB,CAAC,MAAM,CAAC;AAEhD,IAAA,OAAO,WAAW,CAAC;QACjB,GAAG;AACH,QAAA,IAAI,EAAE,OAAO;QACb,GAAG,4BAA4B,CAAC,MAAM,EAAE;AACtC,YAAA,GAAG,iBAAiB;YACpB,IAAI;YACJ,SAAS;YACT,SAAS;YACT;SACD,CAAC;QACF;AACD,KAAA,CAAC;AACJ;AAUA;;;;;;;;;;AAUG;AACG,SAAU,aAAa,CAAC,MAA2B,EAAA;AACvD,IAAA,MAAM,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,iBAAiB,EAAE,GAAG,MAAM;AAClF,IAAA,MAAM,OAAO,GAAG,wBAAwB,CAAC,MAAM,CAAC;AAEhD,IAAA,OAAO,WAAW,CAAC;QACjB,GAAG;AACH,QAAA,IAAI,EAAE,UAAU;QAChB,GAAG,4BAA4B,CAAC,MAAM,EAAE;AACtC,YAAA,GAAG,iBAAiB;YACpB,IAAI;YACJ,SAAS;YACT,SAAS;YACT;SACD,CAAC;QACF;AACD,KAAA,CAAC;AACJ;;ACnHA;;;;;;;;;;;AAWG;AACG,SAAU,UAAU,CAAC,MAAA,GAAiD,EAAE,EAAA;IAC5E,MAAM,EAAE,GAAG,GAAG,OAAO,EAAE,KAAK,GAAG,cAAc,EAAE,kBAAkB,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,mBAAmB,EAAE,GAAG,MAAM;AAC9I,IAAA,MAAM,cAAc,GAAG,mBAAmB,IAAI,KAAK;IAEnD,MAAM,WAAW,GAAG,WAAW,CAAC;QAC9B,GAAG;AACH,QAAA,IAAI,EAAE,UAAU;QAChB,GAAG,4BAA4B,CAAC,MAAM,EAAE;YACtC,KAAK;YACL,kBAAkB;YAClB,aAAa;YACb,YAAY;YACZ;SACD,CAAC;AACF,QAAA,GAAG,wBAAwB,CAAC;AAC1B,YAAA,UAAU,EAAE,CAAC,iBAAiB,CAAC,cAAc,CAAC;SAC/C;AACF,KAAA,CAAC;AAEF,IAAA,OAAO,WAAW;AACpB;AAUA;;;;;;;;;;;AAWG;AACG,SAAU,yBAAyB,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAA,GAAsC,EAAE,EAAA;AACtH,IAAA,OAAO,iBAAiB,CACtB;AACE,QAAA;AACE,YAAA,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC;AACxB,YAAA,IAAI,EAAE;AACP,SAAA;AACD,QAAA;YACE,KAAK,EAAE,SAAS,CAAC;AACf,gBAAA,GAAG,EAAE,OAAO;AACZ,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,YAAY,EAAE,aAAa;AAC3B,gBAAA,GAAG;aACJ,CAAC;AACF,YAAA,IAAI,EAAE;AACP;AACF,KAAA,EACD,EAAE,QAAQ,EAAE,IAAI,EAAE,CACnB;AACH;AASA;;;;;;;;;;AAUG;SACa,yBAAyB,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,cAAc,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,KAAsC,EAAE,EAAA;AAC5I,IAAA,OAAO,cAAc,CACnB;QACE,GAAG;QACH,UAAU,EAAE,CAAC,yBAAyB,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;KACnE,EACD;QACE,MAAM;QACN;AACD,KAAA,CACF;AACH;AAUA;;;;;;;;;;AAUG;AACG,SAAU,cAAc,CAAC,YAAA,GAA8C,EAAE,EAAA;IAC7E,MAAM,EAAE,GAAG,GAAG,QAAQ,EAAE,KAAK,GAAG,eAAe,EAAE,OAAO,GAAG,kBAAkB,EAAE,UAAU,GAAG,qBAAqB,EAAE,gBAAgB,EAAE,aAAa,EAAE,GAAG,YAAY;AAEnK,IAAA,OAAO,gBAAgB,CAAC;AACtB,QAAA,GAAG,YAAY;QACf,GAAG;QACH,KAAK;QACL,OAAO;QACP,UAAU;QACV,gBAAgB,EAAE,gBAAgB,IAAI,CAAC,yBAAyB,CAAC,aAAa,CAAC;AAChF,KAAA,CAAC;AACJ;;AC/IA;AACO,MAAM,sBAAsB,GAAG;AAEtC;AACO,MAAM,uBAAuB,GAAG;AACvC;AACO,MAAM,wBAAwB,GAAG;AAExC;AACA;;;;;;;;;;AAUG;AACG,SAAU,SAAS,CAAC,MAAA,GAAmC,EAAE,EAAA;IAC7D,MAAM,EAAE,GAAG,GAAG,MAAM,EAAE,KAAK,GAAG,MAAM,EAAE,WAAW,GAAG,UAAU,EAAE,QAAQ,GAAG,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,MAAM;AAE7H,IAAA,OAAO,SAAS,CAAC;AACf,QAAA,GAAG,MAAM;QACT,GAAG;QACH,KAAK;QACL,WAAW;QACX,QAAQ;QACR,SAAS;QACT,SAAS;QACT;AACD,KAAA,CAAC;AACJ;AAUA;;;;;;;;;;AAUG;AACG,SAAU,UAAU,CAAC,MAAA,GAA2B,EAAE,EAAA;AACtD,IAAA,MAAM,EAAE,GAAG,GAAG,OAAO,EAAE,KAAK,GAAG,eAAe,EAAE,WAAW,GAAG,iBAAiB,EAAE,GAAG,MAAM;IAC1F,MAAM,gBAAgB,GAAG,SAAS,CAAC;AACjC,QAAA,GAAG,MAAM;QACT,GAAG;QACH,KAAK;QACL,WAAW;AACX,QAAA,SAAS,EAAE;AACZ,KAAA,CAAC;IAEF,gBAAgB,CAAC,UAAU,GAAG;AAC5B,QAAA,KAAK,EAAE;AACL,YAAA,UAAU,EAAE,CAAC,CAAkB,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AACxD,YAAA,OAAO,EAAE,MAAM,CAAA,0BAAA;AAChB;KACF;AAED,IAAA,OAAO,gBAAgB;AACzB;AAMA;;;;;;;;;;AAUG;AACG,SAAU,SAAS,CAAC,MAAA,GAA0B,EAAE,EAAA;IACpD,MAAM,EAAE,GAAG,GAAG,MAAM,EAAE,WAAW,GAAG,EAAE,EAAE,KAAK,GAAG,MAAM,EAAE,YAAY,GAAG,MAAM,EAAE,SAAS,GAAG,uBAAuB,EAAE,QAAQ,GAAG,KAAK,EAAE,GAAG,MAAM;AAC/I,IAAA,OAAO,SAAS,CAAC;AACf,QAAA,GAAG,MAAM;QACT,GAAG;QACH,WAAW;QACX,KAAK;QACL,YAAY;QACZ,QAAQ;QACR;AACD,KAAA,CAAC;AACJ;AAWA;;;;;;;;;;;;AAYG;AACG,SAAU,UAAU,CAAC,MAAA,GAA2B,EAAE,EAAA;IACtD,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,0BAA0B,GAAG,SAAS,EAAE,GAAG,GAAG,OAAO,EAAE,WAAW,GAAG,EAAE,EAAE,KAAK,GAAG,OAAO,EAAE,YAAY,GAAG,OAAO,EAAE,SAAS,GAAG,MAAM,GAAG,6BAA6B,GAAG,wBAAwB,EAAE,SAAS,EAAE,QAAQ,GAAG,KAAK,EAAE,GAAG,MAAM;AAClR,IAAA,OAAO,SAAS,CAAC;AACf,QAAA,GAAG,MAAM;QACT,GAAG;QACH,WAAW;QACX,KAAK;QACL,OAAO;QACP,YAAY;QACZ,QAAQ;QACR,SAAS;AACT,QAAA,SAAS,EAAE;AACT,YAAA,GAAG,SAAS;AACZ,YAAA,WAAW,EAAE,MAAM,IAAI,SAAS,EAAE;AACnC;AACF,KAAA,CAAC;AACJ;AAMA;;;;;;;;;;AAUG;AACG,SAAU,YAAY,CAAC,MAAA,GAA6B,EAAE,EAAA;IAC1D,MAAM,EAAE,GAAG,GAAG,SAAS,EAAE,WAAW,GAAG,EAAE,EAAE,KAAK,GAAG,SAAS,EAAE,YAAY,GAAG,SAAS,EAAE,SAAS,GAAG,0BAA0B,EAAE,QAAQ,GAAG,KAAK,EAAE,GAAG,MAAM;AAC3J,IAAA,OAAO,SAAS,CAAC;AACf,QAAA,GAAG,MAAM;QACT,GAAG;QACH,WAAW;QACX,KAAK;QACL,YAAY;QACZ,QAAQ;QACR;AACD,KAAA,CAAC;AACJ;AAMA;;;;;;;;;;AAUG;AACG,SAAU,YAAY,CAAC,MAAA,GAA6B,EAAE,EAAA;AAC1D,IAAA,MAAM,EAAE,GAAG,GAAG,KAAK,EAAE,WAAW,GAAG,EAAE,EAAE,KAAK,GAAG,UAAU,EAAE,YAAY,GAAG,aAAa,EAAE,OAAO,GAAG,qBAAqB,EAAE,SAAS,GAAG,sBAAsB,EAAE,QAAQ,GAAG,KAAK,EAAE,GAAG,MAAM;AACzL,IAAA,OAAO,SAAS,CAAC;AACf,QAAA,GAAG,MAAM;QACT,GAAG;QACH,WAAW;QACX,KAAK;QACL,OAAO;QACP,YAAY;QACZ,QAAQ;QACR;AACD,KAAA,CAAC;AACJ;AAEA;AACA;AACO,MAAM,sCAAsC,GAAG;AACtD;AACO,MAAM,0CAA0C,GAAG;AAE1D;;;;;;;;;;AAUG;AACG,SAAU,eAAe,CAAC,EAAE,GAAG,GAAG,QAAQ,KAA+B,EAAE,EAAA;AAC/E,IAAA,MAAM,KAAK,GAAG;AACZ,QAAA,GAAG,SAAS,CAAC;YACX,GAAG;AACH,YAAA,KAAK,EAAE,aAAa;AACpB,YAAA,WAAW,EAAE,sCAAsC;AACnD,YAAA,OAAO,EAAE,eAAe;AACxB,YAAA,YAAY,EAAE;SACf,CAAC;AACF,QAAA,GAAG,wBAAwB,CAAC;AAC1B,YAAA,QAAQ,EAAE;AACR,gBAAA,OAAO,EAAE;AACV;SACF;KACF;AAED,IAAA,OAAO,KAAK;AACd;;AChMA;;;;;;;;;;;AAWG;AACG,SAAU,gBAAgB,CAAC,MAAA,GAAiC,EAAE,EAAA;AAClE,IAAA,MAAM,EAAE,IAAI,GAAG,CAAC,EAAE,GAAG,MAAM;AAC3B,IAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAEnC,IAAA,MAAM,EAAE,GAAG,GAAG,OAAO,QAAQ,CAAA,CAAE,EAAE,WAAW,GAAG,EAAE,EAAE,KAAK,GAAG,IAAI,GAAG,QAAQ,IAAI,CAAA,CAAE,GAAG,QAAQ,EAAE,YAAY,GAAG,CAAA,YAAA,EAAe,QAAQ,CAAA,CAAE,EAAE,SAAS,GAAG,uBAAuB,EAAE,QAAQ,GAAG,KAAK,EAAE,GAAG,MAAM;AACvM,IAAA,OAAO,SAAS,CAAC;AACf,QAAA,GAAG,MAAM;QACT,GAAG;QACH,WAAW;QACX,KAAK;QACL,YAAY;QACZ,QAAQ;QACR;AACD,KAAA,CAAC;AACJ;AAEA;;;;;;;;;;;AAWG;AACG,SAAU,mBAAmB,CAAC,MAAA,GAAoC,EAAE,EAAA;AACxE,IAAA,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,YAAY,GAAG,IAAI,EAAE,cAAc,GAAG,IAAI,EAAE,GAAG,MAAM;AAE9E,IAAA,MAAM,gBAAgB,GAAG;AACvB,QAAA;YACE,KAAK,EAAE,SAAS,CAAC,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,SAAS,EAAE;AACnD,SAAA;AACD,QAAA;YACE,KAAK,EAAE,UAAU,CAAC,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE;AACrD,SAAA;AACD,QAAA;YACE,KAAK,EAAE,YAAY,CAAC,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,YAAY,EAAE;AACzD;KACF;IAED,IAAI,cAAc,EAAE;QAClB,gBAAgB,CAAC,IAAI,CAAC;YACpB,KAAK,EAAE,YAAY,CAAC,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,YAAY,EAAE;AACzD,SAAA,CAAC;IACJ;AAEA,IAAA,IAAI,KAA0B;IAE9B,IAAI,YAAY,EAAE;AAChB,QAAA,KAAK,GAAG,CAAC,gBAAgB,CAAC,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,gBAAgB,CAAC,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9H;SAAO;AACL,QAAA,KAAK,GAAG,CAAC,gBAAgB,CAAC,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACzE;AAEA,IAAA,OAAO,CAAC,GAAG,KAAK,EAAE,iBAAiB,CAAC,gBAAgB,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AACrF;AAQA;;;;;;;;;;AAUG;AACG,SAAU,YAAY,CAAC,MAAA,GAAsC,EAAE,EAAA;AACnE,IAAA,MAAM,EAAE,GAAG,GAAG,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,QAAQ,GAAG,KAAK,EAAE,GAAG,MAAM;AAE9E,IAAA,OAAO,cAAc,CACnB;AACE,QAAA,GAAG,MAAM;QACT,GAAG;AACH,QAAA,UAAU,EAAE,mBAAmB,CAAC,MAAM,CAAC;QACvC;KACD,EACD;AACE,QAAA,GAAG,MAAM;QACT,MAAM;QACN;AACD,KAAA,CACF;AACH;AAWA;;;;;;;;;;AAUG;AACG,SAAU,gBAAgB,CAAC,MAAA,GAA0C,EAAE,EAAA;AAC3E,IAAA,MAAM,EAAE,GAAG,GAAG,WAAW,EAAE,QAAQ,GAAG,KAAK,EAAE,YAAY,GAAG,CAAC,EAAE,GAAG,MAAM;AACxE,IAAA,OAAO,gBAAgB,CAAC;QACtB,GAAG;QACH,QAAQ;AACR,QAAA,KAAK,EAAE,WAAW;AAClB,QAAA,aAAa,EAAE,SAAS;AACxB,QAAA,OAAO,EAAE,aAAa;AACtB,QAAA,UAAU,EAAE,gBAAgB;AAC5B,QAAA,SAAS,EAAE,YAAY;AACvB,QAAA,gBAAgB,EAAE,mBAAmB,CAAC,MAAM;AAC7C,KAAA,CAAC;AACJ;;ACrLA,MAAMA,mBAAiB,GAAG,CAAC,6BAA6B,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,0BAA0B,CAAC;AAEjI;MAKa,4BAA4B,CAAA;uGAA5B,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAA5B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,4BAA4B,EAAA,OAAA,EAAA,CAPd,6BAA6B,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,0BAA0B,CAAA,EAAA,OAAA,EAAA,CAArG,6BAA6B,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,0BAA0B,CAAA,EAAA,CAAA;wGAOnH,4BAA4B,EAAA,OAAA,EAAA,CAH9BA,mBAAiB,EAJD,6BAA6B,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,0BAA0B,CAAA,EAAA,CAAA;;2FAOnH,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAJxC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAEA,mBAAiB;AAC1B,oBAAA,OAAO,EAAEA;AACV,iBAAA;;;ACJD;;;;;;;;;;;;AAYG;AACG,SAAU,WAAW,CAAC,EAAE,GAAG,EAAE,QAAQ,GAAG,KAAK,EAAqB,EAAA;AACtE,IAAA,OAAO,WAAW,CAAC;QACjB,GAAG;QACH,KAAK,EAAE,EAAE,QAAQ;AAClB,KAAA,CAAC;AACJ;;ACpBA,MAAMA,mBAAiB,GAAG,CAAC,qCAAqC,EAAE,iCAAiC,EAAE,kCAAkC,EAAE,0BAA0B,CAAC;AAEpK;MAKa,wBAAwB,CAAA;uGAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,OAAA,EAAA,CAPV,qCAAqC,EAAE,iCAAiC,EAAE,kCAAkC,EAAE,0BAA0B,CAAA,EAAA,OAAA,EAAA,CAAxI,qCAAqC,EAAE,iCAAiC,EAAE,kCAAkC,EAAE,0BAA0B,CAAA,EAAA,CAAA;wGAOtJ,wBAAwB,EAAA,OAAA,EAAA,CAH1BA,mBAAiB,EAJD,qCAAqC,EAAE,iCAAiC,EAAE,kCAAkC,EAAE,0BAA0B,CAAA,EAAA,CAAA;;2FAOtJ,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAJpC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAEA,mBAAiB;AAC1B,oBAAA,OAAO,EAAEA;AACV,iBAAA;;;ACCK,SAAU,uBAAuB,CAAC,MAA4C,EAAA;AAClF,IAAA,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,QAAQ,EAAE,iBAAiB,EAAE,GAAG,MAAM,IAAI,EAAE;IAEzE,OAAO;AACL,QAAA,SAAS,CAAC;AACR,YAAA,GAAG,EAAE,QAAQ;YACb,KAAK;YACL,WAAW;AACX,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,iBAAiB,EAAE;AACjB,gBAAA,GAAG,iBAAiB;gBACpB,SAAS,EAAE,CAAC;AACb;SACF;KACF;AACH;;AClBA;;;;AAIG;MAEmB,2BAA2B,CAAA;AACtC,IAAA,OAAO,GAAG,MAAM,EAAC,gBAAmB,GAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAErD,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,oDAAC;IAEtB,eAAe,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,2DAAC;;IAGvG,QAAQ,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;IAChC;AAEA,IAAA,QAAQ,CAAC,KAAiB,EAAA;AACxB,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;IAC9B;IAEA,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;IAC1B;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;IACnB;IAEA,WAAW,CAAC,GAAwB,EAAE,QAAkB,EAAA;QACtD,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC;IACzC;uGA1BoB,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBADhD;;AA8BD;;AAEG;AAEG,MAAgB,+BAAmC,SAAQ,2BAA8B,CAAA;IAG7F,QAAQ,GAAA;QACN,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;IACnC;uGALoB,+BAA+B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA/B,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA/B,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBADpD;;AASD;;AAEG;AAEG,MAAgB,gCAAoC,SAAQ,2BAA8B,CAAA;IAM3E,SAAS,GAAG,iBAAiB,EAAE;IAElD,QAAQ,GAAA;;QAEN,IAAI,CAAC,SAAS,CAAC,MAAM,CACnB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AAC7D,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM;QAC9B,CAAC,CAAC,CACH;IACH;uGAfoB,gCAAgC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAhC,gCAAgC,EAAA,YAAA,EAAA,IAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAhC,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBADrD;;AAoBK,MAAgB,sCAA6C,SAAQ,gCAAmC,CAAA;AACnG,IAAA,MAAM,GAAG,KAAK,CAA4B,SAAS,kDAAC;AAEpD,IAAA,cAAc,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,+BAA+B,EAAE,CAAC;AAClF,IAAA,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;uGAJtD,sCAAsC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAtC,sCAAsC,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAtC,sCAAsC,EAAA,UAAA,EAAA,CAAA;kBAD3D;;;AC3ED;;AAEG;AACI,MAAM,kCAAkC,GAAG;AAElD;;AAEG;AACI,MAAM,+BAA+B,GAAG;AAE/C,MAAM,6BAA6B,GAAG,CAAC,kBAAkB,CAAC;AAE1D;;AAEG;MAKU,mCAAmC,CAAA;uGAAnC,mCAAmC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAAnC,mCAAmC,EAAA,OAAA,EAAA,CATT,kBAAkB,CAAA,EAAA,OAAA,EAAA,CAAlB,kBAAkB,CAAA,EAAA,CAAA;AAS5C,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mCAAmC,YAHrC,6BAA6B,CAAA,EAAA,CAAA;;2FAG3B,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAJ/C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,6BAA6B;AACtC,oBAAA,OAAO,EAAE;AACV,iBAAA;;;ACFK,MAAO,0BAA2B,SAAQ,sCAAmG,CAAA;IACxI,MAAM,GAAG,MAAM,EAAU;AAEzB,IAAA,OAAO,GAAoC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;AAE1G,IAAA,aAAa,CAAC,KAAmC,EAAA;QAC/C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;IACtC;uGAPW,0BAA0B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,8BAAA,EAAA,EAAA,SAAA,EAP1B,+BAA+B,EAAE,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAHlC;;GAET,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAES,mCAAmC,8HAAE,2BAA2B,EAAA,QAAA,EAAA,sBAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAM/D,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAZtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,QAAQ,EAAE;;AAET,EAAA,CAAA;oBACD,SAAS,EAAE,+BAA+B,EAAE;AAC5C,oBAAA,OAAO,EAAE,CAAC,mCAAmC,EAAE,2BAA2B,CAAC;AAC3E,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE;AACR;AACF,iBAAA;;;ACDD;;;;;;;;;;;;;;;;;AAiBG;AACG,SAAU,oBAAoB,CAAC,MAAgC,EAAA;AACnE,IAAA,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC;IAE/B,KAAK,CAAC,eAAe,GAAG;AACtB,QAAA,UAAU,EAAE;AACV,YAAA;gBACE,UAAU,EAAE,8BAA8B,CAAC;AACzC,oBAAA,GAAG,MAAM;oBACT,OAAO,EAAE,MAAM,EAAE;iBAClB;AACF;AACF;KACF;AAED,IAAA,OAAO,cAAc,CAAC,KAAK,EAAE,EAAE,CAAC;AAClC;;AC/CA,MAAMA,mBAAiB,GAAG,CAAC,4BAA4B,EAAE,0BAA0B,CAAC;AAEpF;;;;AAIG;MAKU,+BAA+B,CAAA;uGAA/B,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAA/B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,+BAA+B,YAXjB,4BAA4B,EAAE,0BAA0B,CAAA,EAAA,OAAA,EAAA,CAAxD,4BAA4B,EAAE,0BAA0B,CAAA,EAAA,CAAA;AAWtE,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,+BAA+B,EAAA,OAAA,EAAA,CAHjCA,mBAAiB,EARD,4BAA4B,EAAE,0BAA0B,CAAA,EAAA,CAAA;;2FAWtE,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAJ3C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAEA,mBAAiB;AAC1B,oBAAA,OAAO,EAAEA;AACV,iBAAA;;;ACED;;;;;;;AAOG;AACG,SAAU,iBAAiB,CAAC,MAAgC,EAAA;AAChE,IAAA,OAAO,SAAS,CAAC;AACf,QAAA,GAAG,EAAE,UAAU;AACf,QAAA,GAAG,MAAM;AACT,QAAA,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,UAAU;AAClC,QAAA,SAAS,EAAE,UAAU;AACrB,QAAA,QAAQ,EAAE;AACX,KAAA,CAAC;AACJ;AAEA;;;;;;;AAOG;AACG,SAAU,uBAAuB,CAAC,MAAgC,EAAA;AACtE,IAAA,OAAO,iBAAiB,CAAC;AACvB,QAAA,GAAG,EAAE,gBAAgB;AACrB,QAAA,KAAK,EAAE,iBAAiB;AACxB,QAAA,GAAG,MAAM;AACT,QAAA,QAAQ,EAAE;AACX,KAAA,CAAC;AACJ;AAgBA;;;;;;AAMG;AACG,SAAU,gCAAgC,CAAC,MAAyC,EAAA;IACxF,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC9D,IAAA,MAAM,sBAAsB,GAAG,MAAM,CAAC,cAAc,EAAE,GAAG,IAAI,CAAA,MAAA,EAAS,qBAAqB,CAAC,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,EAAE;IAC9H,MAAM,mBAAmB,GAAG,uBAAuB,CAAC;QAClD,GAAG,MAAM,CAAC,QAAQ;QAClB,GAAG,MAAM,CAAC,cAAc;AACxB,QAAA,KAAK,EAAE,MAAM,CAAC,cAAc,EAAE,KAAK,IAAI,CAAA,OAAA,EAAU,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAA,CAAE;AACnF,QAAA,GAAG,EAAE;AACN,KAAA,CAAC;AAEF,IAAA,MAAM,UAAU,GAAG;AACjB,QAAA,UAAU,EAAE;AACV,YAAA;AACE,gBAAA,SAAS,EAAE,sBAAsB;gBACjC,UAAU,EAAE,4BAA4B,CAAC,EAAE,UAAU,EAAE,CAAC,mBAAmB,CAAC,GAAG,EAAE,mBAAmB,CAAC,GAAG,CAAa,EAAE,OAAO,EAAE,6BAA6B,EAAE;AAChK;AACF;KACF;AAED,IAAA,MAAM,gBAAgB,GAAsB;QAC1C,UAAU;AACV,QAAA,UAAU,EAAE,CAAC,mBAAmB,EAAE,mBAAmB;KACtD;AAED,IAAA,OAAO,gBAAgB;AACzB;AAkDA;;;;;AAKG;AACG,SAAU,2BAA2B,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAA6B,EAAA;AAC3G,IAAA,MAAM,aAAa,GAAG,kBAAkB,CAAC,QAAQ,CAAC;AAClD,IAAA,MAAM,aAAa,GAAG,cAAc,GAAG,gCAAgC,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,KAAK,IAAI,GAAG,SAAS,GAAG,cAAc,EAAE,CAAC,GAAG,iBAAiB,CAAC,QAAQ,CAAC;AAEzL,IAAA,OAAO,CAAC,aAAa,EAAE,aAAa,CAAC;AACvC;AASA;;;;;;AAMG;AACG,SAAU,kBAAkB,CAAC,QAA+C,EAAA;AAChF,IAAA,IAAI,aAAgC;IACpC,IAAI,mBAAmB,GAAqC,QAA4C;IAExG,MAAM,0BAA0B,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE;AAEtE,IAAA,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;AAChC,QAAA,IAAI,QAAQ,KAAK,OAAO,EAAE;AACxB,YAAA,mBAAmB,GAAG;AACpB,gBAAA,KAAK,EAAE;aACR;QACH;aAAO;AACL,YAAA,mBAAmB,GAAG;AACpB,gBAAA,QAAQ,EAAE;aACX;QACH;IACF;AAEA,IAAA,IAAI,mBAAmB,CAAC,KAAK,EAAE;AAC7B,QAAA,aAAa,GAAG,UAAU,CAAC,EAAE,GAAG,mBAAmB,CAAC,KAAK,EAAE,GAAG,0BAA0B,EAAE,CAAC;IAC7F;SAAO;AACL,QAAA,aAAa,GAAG,SAAS,CAAC,EAAE,GAAG,mBAAmB,CAAC,QAAQ,EAAE,GAAG,0BAA0B,EAAE,CAAC;IAC/F;AAEA,IAAA,OAAO,aAAa;AACtB;;ACpMA,MAAMA,mBAAiB,GAAG,CAAC,4BAA4B,CAAC;AAExD;;;;AAIG;MAKU,uBAAuB,CAAA;uGAAvB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAAvB,uBAAuB,EAAA,OAAA,EAAA,CAXT,4BAA4B,CAAA,EAAA,OAAA,EAAA,CAA5B,4BAA4B,CAAA,EAAA,CAAA;wGAW1C,uBAAuB,EAAA,OAAA,EAAA,CAHzBA,mBAAiB,EARD,4BAA4B,CAAA,EAAA,CAAA;;2FAW1C,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAJnC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAEA,mBAAiB;AAC1B,oBAAA,OAAO,EAAEA;AACV,iBAAA;;;ACDD;;;;;;AAMG;SACa,4BAA4B,GAAA;AAC1C,IAAA,MAAM,aAAa,GAAG,gBAAgB,EAAE;IAExC,OAAO,CAAC,MAAc,KAAI;AACxB,QAAA,IAAI,aAAa;AAEjB,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YACvB,aAAa,GAAG,CAAC,qBAAqB,EAAE,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC;QACjE;aAAO;AACL,YAAA,aAAa,GAAG,mBAAmB,CAAC,MAAM,EAAE,aAAa,CAAC;QAC5D;QAEA,OAAO,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC1E,IAAA,CAAC;AACH;AAEA;;;;;AAKG;AACI,MAAM,iCAAiC,GAAwD,CAAC,MAAyD,KAAI;AAClK,IAAA,MAAM,aAAa,GAAG,gBAAgB,EAAE;IAExC,MAAM,aAAa,GAA6D,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;QAC/F,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC;AACzE,QAAA,OAAO,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,IAAI,SAAS,EAAE;AAC5E,IAAA,CAAC,CAAC;AAEF,IAAA,MAAM,GAAG,GAAyE,EAAE,CAAC,aAAa,CAAC;AACnG,IAAA,OAAO,GAAG;AACZ;AASA;;;;;;;;AAQG;AACG,SAAU,mBAAmB,CAAC,MAAA,GAAoC,EAAE,EAAA;AACxE,IAAA,OAAO,mBAAmB,CAAC;AACzB,QAAA,GAAG,EAAE,UAAU;AACf,QAAA,KAAK,EAAE,UAAU;AACjB,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,GAAG,MAAM;AACT,QAAA,iBAAiB,EAAE,IAAI;AACvB,QAAA,iBAAiB,EAAE,KAAK;AACxB,QAAA,cAAc,EAAE,IAAI;QACpB,MAAM,EAAE,4BAA4B,EAAE;AACtC,QAAA,eAAe,EAAE;AAClB,KAAA,CAAC;AACJ;;AC/EA,MAAM,iBAAiB,GAAG,CAAC,kCAAkC,CAAC;AAE9D;;;;AAIG;MAKU,gCAAgC,CAAA;uGAAhC,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAAhC,gCAAgC,EAAA,OAAA,EAAA,CAXlB,kCAAkC,CAAA,EAAA,OAAA,EAAA,CAAlC,kCAAkC,CAAA,EAAA,CAAA;wGAWhD,gCAAgC,EAAA,OAAA,EAAA,CAHlC,iBAAiB,EARD,kCAAkC,CAAA,EAAA,CAAA;;2FAWhD,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAJ5C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,iBAAiB;AAC1B,oBAAA,OAAO,EAAE;AACV,iBAAA;;;ACAD;;;;;;;AAOG;AACG,SAAU,eAAe,CAAC,MAA8B,EAAA;IAC5D,MAAM,UAAU,GAAkB,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;AAEjE,IAAA,MAAM,KAAK,GAAG;AACZ,QAAA,GAAG,SAAS,CAAC;AACX,YAAA,GAAG,EAAE,SAAS;AACd,YAAA,GAAG,MAAM;AACT,YAAA,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,aAAa;AACrC,YAAA,SAAS,EAAE;SACZ,CAAC;AACF,QAAA,GAAG,wBAAwB,CAAC;YAC1B;SACD;KACF;AAED,IAAA,OAAO,KAAK;AACd;;AC9BA;;AAEG;AAMG,MAAO,+BAA6C,SAAQ,gCAAmC,CAAA;IAC1F,MAAM,GAAG,KAAK,CAA6B,SAAS,mDAAI,KAAK,EAAE,iBAAiB,EAAA,CAAG;AACnF,IAAA,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;uGAFjC,+BAA+B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA/B,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAH/B,oBAAoB,EAAE,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAGtB,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAL3C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;oBAC7B,SAAS,EAAE,oBAAoB,EAAE;AACjC,oBAAA,UAAU,EAAE;AACb,iBAAA;;;SCTe,qCAAqC,GAAA;AACnD,IAAA,OAAO,mBAAmB,CAAC,CAAC,6BAA6B,EAAE,+BAA+B,EAAE,4BAA4B,EAAE,+BAA+B,EAAE,8BAA8B,EAAE,6BAA6B,EAAE,gCAAgC,EAAE,kCAAkC,EAAE,+BAA+B,EAAE,kCAAkC,EAAE,4BAA4B,EAAE,0BAA0B,EAAE,YAAY,EAAE,oBAAoB,CAAC,CAAC;AACrc;;ACLA;;;;;;AAMG;MAQU,sBAAsB,CAAA;uGAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kDAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,yBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAPlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kDAAkD;AAC5D,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE;AACR,qBAAA;AACD,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCRY,sBAAsB,CAAA;uGAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAAtB,sBAAsB,EAAA,OAAA,EAAA,CAFvB,aAAa,EAAE,wBAAwB,CAAA,EAAA,CAAA;wGAEtC,sBAAsB,EAAA,OAAA,EAAA,CAFvB,aAAa,EAAE,wBAAwB,CAAA,EAAA,CAAA;;2FAEtC,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,CAAC,aAAa,EAAE,wBAAwB;AAClD,iBAAA;;;ACOK,SAAU,2BAA2B,CAAC,MAA0C,EAAA;IACpF,MAAM,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,GAAG,MAAM,IAAI,EAAE;AAEnE,IAAA,MAAM,SAAS,GAAe;AAC5B,QAAA;AACE,YAAA,OAAO,EAAE,8BAA8B;AACvC,YAAA,QAAQ,EAAE;AACR,gBAAA,eAAe,EAAE,SAAS;AAC1B,gBAAA,UAAU,EAAE,QAAQ;AACpB,gBAAA,UAAU,EAAE;AACb;AACF,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,sCAAsC;YAC/C,QAAQ,EAAE,sBAAsB,IAAI;AACrC;KACF;AAED,IAAA,IAAI,kBAAkB,KAAK,KAAK,EAAE;AAChC,QAAA,SAAS,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;QACvC,SAAS,CAAC,IAAI,CAAC;AACb,YAAA,OAAO,EAAE,eAAe;AACxB,YAAA,QAAQ,EAAE;AACX,SAAA,CAAC;IACJ;AAEA,IAAA,OAAO,wBAAwB,CAAC,SAAS,CAAC;AAC5C;;ACxCA;;AAEG;;;;"}