@dereekb/dbx-form 11.0.21 → 11.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/calendar/lib/calendar.schedule.selection.dialog.button.component.d.ts +1 -1
  2. package/calendar/lib/calendar.schedule.selection.range.component.d.ts +1 -1
  3. package/calendar/lib/calendar.schedule.selection.toggle.button.component.d.ts +1 -1
  4. package/calendar/lib/field/schedule/calendar.schedule.field.component.d.ts +1 -1
  5. package/esm2022/calendar/lib/calendar.schedule.selection.dialog.button.component.mjs +1 -1
  6. package/esm2022/calendar/lib/calendar.schedule.selection.range.component.mjs +1 -1
  7. package/esm2022/calendar/lib/calendar.schedule.selection.toggle.button.component.mjs +1 -1
  8. package/esm2022/calendar/lib/field/schedule/calendar.schedule.field.component.mjs +1 -1
  9. package/esm2022/lib/form/form.angular.util.mjs +1 -1
  10. package/esm2022/lib/form/form.mjs +1 -1
  11. package/esm2022/lib/form/io/form.changes.directive.mjs +1 -1
  12. package/esm2022/lib/form/io/form.input.directive.mjs +1 -1
  13. package/esm2022/lib/formly/field/checklist/checklist.field.mjs +1 -1
  14. package/esm2022/lib/formly/field/checklist/checklist.item.field.component.mjs +1 -1
  15. package/esm2022/lib/formly/field/checklist/checklist.item.mjs +1 -1
  16. package/esm2022/lib/formly/field/selection/pickable/pickable.list.field.component.mjs +1 -1
  17. package/esm2022/lib/formly/field/selection/selection.field.mjs +1 -1
  18. package/esm2022/lib/formly/field/selection/sourceselect/sourceselect.field.component.mjs +3 -3
  19. package/esm2022/lib/formly/field/texteditor/texteditor.field.component.mjs +1 -1
  20. package/esm2022/lib/formly/field/value/array/array.field.component.mjs +1 -1
  21. package/esm2022/lib/formly/field/value/date/datetime.field.component.mjs +3 -3
  22. package/esm2022/lib/formly/field/value/date/datetime.field.mjs +1 -1
  23. package/esm2022/lib/formly/field/value/date/datetime.field.service.mjs +1 -1
  24. package/esm2022/lib/formly/field/wrapper/section.wrapper.component.mjs +1 -1
  25. package/esm2022/lib/formly/field/wrapper/style.wrapper.component.mjs +1 -1
  26. package/esm2022/lib/formly/field/wrapper/subsection.wrapper.component.mjs +1 -1
  27. package/esm2022/lib/formly/field/wrapper/toggle.wrapper.component.mjs +1 -1
  28. package/esm2022/lib/formly/form/form.form.mjs +1 -1
  29. package/esm2022/lib/formly/formly.context.directive.mjs +1 -1
  30. package/esm2022/lib/formly/formly.context.mjs +1 -1
  31. package/esm2022/lib/formly/formly.directive.mjs +1 -1
  32. package/esm2022/lib/formly/formly.form.component.mjs +1 -1
  33. package/esm2022/lib/formly/template/login.mjs +1 -1
  34. package/esm2022/mapbox/lib/field/latlng/latlng.field.marker.component.mjs +1 -1
  35. package/fesm2022/dereekb-dbx-form-calendar.mjs.map +1 -1
  36. package/fesm2022/dereekb-dbx-form-mapbox.mjs.map +1 -1
  37. package/fesm2022/dereekb-dbx-form.mjs +3 -3
  38. package/fesm2022/dereekb-dbx-form.mjs.map +1 -1
  39. package/lib/form/form.angular.util.d.ts +1 -1
  40. package/lib/form/form.d.ts +1 -1
  41. package/lib/form/io/form.changes.directive.d.ts +1 -1
  42. package/lib/form/io/form.input.directive.d.ts +1 -1
  43. package/lib/formly/field/checklist/checklist.field.d.ts +1 -1
  44. package/lib/formly/field/checklist/checklist.item.d.ts +1 -1
  45. package/lib/formly/field/checklist/checklist.item.field.component.d.ts +1 -1
  46. package/lib/formly/field/selection/pickable/pickable.list.field.component.d.ts +1 -1
  47. package/lib/formly/field/texteditor/texteditor.field.component.d.ts +1 -1
  48. package/lib/formly/field/value/array/array.field.component.d.ts +1 -1
  49. package/lib/formly/field/wrapper/section.wrapper.component.d.ts +1 -1
  50. package/lib/formly/field/wrapper/style.wrapper.component.d.ts +1 -1
  51. package/lib/formly/field/wrapper/subsection.wrapper.component.d.ts +1 -1
  52. package/lib/formly/field/wrapper/toggle.wrapper.component.d.ts +1 -1
  53. package/lib/formly/form/form.form.d.ts +1 -1
  54. package/lib/formly/formly.context.d.ts +1 -1
  55. package/lib/formly/formly.context.directive.d.ts +1 -1
  56. package/lib/formly/formly.directive.d.ts +1 -1
  57. package/lib/formly/template/login.d.ts +1 -1
  58. package/mapbox/esm2022/lib/field/latlng/latlng.field.marker.component.mjs +1 -1
  59. package/mapbox/fesm2022/dereekb-dbx-form-mapbox.mjs.map +1 -1
  60. package/mapbox/lib/field/latlng/latlng.field.marker.component.d.ts +1 -1
  61. package/mapbox/package.json +1 -1
  62. package/package.json +1 -1
@@ -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/form/action/transition/form.action.transition.module.ts","../../../../packages/dbx-form/src/lib/form/action/form.action.module.ts","../../../../packages/dbx-form/src/lib/form/io/form.input.directive.ts","../../../../packages/dbx-form/src/lib/form/io/form.loading.directive.ts","../../../../packages/dbx-form/src/lib/form/io/form.changes.directive.ts","../../../../packages/dbx-form/src/lib/form/io/form.io.module.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/form.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/selection/selection.module.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/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/value/value.module.ts","../../../../packages/dbx-form/src/lib/formly/field/form.field.module.ts","../../../../packages/dbx-form/src/lib/formly/formly.context.ts","../../../../packages/dbx-form/src/lib/formly/formly.directive.ts","../../../../packages/dbx-form/src/lib/formly/form/form.form.ts","../../../../packages/dbx-form/src/lib/formly/formly.form.component.ts","../../../../packages/dbx-form/src/lib/formly/form/search.form.component.ts","../../../../packages/dbx-form/src/lib/formly/formly.context.directive.ts","../../../../packages/dbx-form/src/lib/formly/formly.module.ts","../../../../packages/dbx-form/src/lib/formly/form/form.form.module.ts","../../../../packages/dbx-form/src/lib/formly/template/login.ts","../../../../packages/dbx-form/src/lib/formly/template/available.ts","../../../../packages/dbx-form/src/lib/formly/template/timezone.ts","../../../../packages/dbx-form/src/lib/layout/form.spacer.component.ts","../../../../packages/dbx-form/src/lib/layout/form.layout.module.ts","../../../../packages/dbx-form/src/lib/form.module.ts","../../../../packages/dbx-form/src/dereekb-dbx-form.ts"],"sourcesContent":["import { forwardRef, Provider, Type } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { LockSet } from '@dereekb/rxjs';\nimport { BooleanStringKeyArray, Maybe } from '@dereekb/util';\nimport { AbstractControl, 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, OnInit, OnDestroy, Input, inject } from '@angular/core';\nimport { addSeconds, isPast } from 'date-fns';\nimport { Observable, of, combineLatest, exhaustMap, catchError, delay, filter, first, map, switchMap, BehaviorSubject, distinctUntilChanged } from 'rxjs';\nimport { DbxActionContextStoreSourceInstance, DbxActionValueOnTriggerResult } from '@dereekb/dbx-core';\nimport { SubscriptionObject, LockSet, IsModifiedFunction, IsValidFunction, ObservableOrValue, asObservable } from '@dereekb/rxjs';\nimport { DbxFormState, DbxMutableForm } from '../../form/form';\nimport { MapFunction } from '@dereekb/util';\n\nexport const APP_ACTION_FORM_DISABLED_KEY = 'dbx_action_form';\n\nexport type DbxActionFormMapValueFunction<T, O> = MapFunction<T, ObservableOrValue<DbxActionValueOnTriggerResult<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})\nexport class DbxActionFormDirective<T = object, O = T> implements OnInit, OnDestroy {\n readonly form = inject(DbxMutableForm<T>, { host: true });\n readonly source = inject(DbxActionContextStoreSourceInstance<O, unknown>);\n\n readonly lockSet = new LockSet();\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 @Input()\n dbxActionFormValidator?: IsValidFunction<T>;\n\n /**\n * Optional function that checks whether or not the value has been modified.\n */\n @Input()\n dbxActionFormModified?: IsModifiedFunction<T>;\n\n /**\n * Optional function that maps the form's value to the source's value.\n */\n @Input()\n dbxActionFormMapValue?: DbxActionFormMapValueFunction<T, O>;\n\n private _formDisabledWhileWorking = new BehaviorSubject<boolean>(true);\n\n private _triggeredSub = new SubscriptionObject();\n private _isCompleteSub = new SubscriptionObject();\n private _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 @Input()\n get formDisabledOnWorking() {\n return this._formDisabledWhileWorking.value;\n }\n\n set formDisabledOnWorking(formDisabledOnWorking: boolean) {\n this._formDisabledWhileWorking.next(Boolean(formDisabledOnWorking ?? true));\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<DbxActionValueOnTriggerResult<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: DbxActionValueOnTriggerResult<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 let validatorObs: Observable<boolean>;\n\n const initialIsValidCheck = event.isComplete;\n if (initialIsValidCheck) {\n validatorObs = this.dbxActionFormValidator ? this.dbxActionFormValidator(value) : of(true);\n } else {\n validatorObs = of(false);\n }\n\n let modifiedObs: Observable<boolean>;\n\n const isConsideredModified = event.pristine === false && isProbablyTouched;\n if (isConsideredModified) {\n modifiedObs = this.dbxActionFormModified ? this.dbxActionFormModified(value) : of(true);\n } else {\n modifiedObs = of(false);\n }\n\n return combineLatest([validatorObs, modifiedObs]).pipe(\n first(),\n map(([valid, modified]: [boolean, boolean]) => ({ valid, modified, value, event }))\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._formDisabledWhileWorking])\n .pipe(\n map(([isWorking, lockOnWorking]: [boolean, boolean]) => lockOnWorking && isWorking),\n distinctUntilChanged()\n )\n .subscribe((disable) => {\n this.form.setDisabled(APP_ACTION_FORM_DISABLED_KEY, disable);\n });\n }\n\n ngOnDestroy(): void {\n this.source.enable(APP_ACTION_FORM_DISABLED_KEY);\n this.lockSet.destroyOnNextUnlock(() => {\n this._triggeredSub.destroy();\n this._isCompleteSub.destroy();\n this._isWorkingSub.destroy();\n this._formDisabledWhileWorking.complete();\n this.form.setDisabled(APP_ACTION_FORM_DISABLED_KEY, false);\n });\n }\n\n protected preCheckReadyValue(value: T): Observable<boolean> {\n const validatorObs: Observable<boolean> = this.dbxActionFormValidator ? this.dbxActionFormValidator(value) : of(true);\n const modifiedObs: Observable<boolean> = this.dbxActionFormModified ? this.dbxActionFormModified(value) : of(true);\n\n return combineLatest([validatorObs, modifiedObs]).pipe(\n first(),\n map(([valid, modified]: [boolean, boolean]) => valid && modified)\n );\n }\n\n protected readyValue(value: T): Observable<DbxActionValueOnTriggerResult<O>> {\n if (this.dbxActionFormMapValue) {\n return asObservable(this.dbxActionFormMapValue(value));\n } else {\n return of({ value: value as unknown as O });\n }\n }\n}\n","import { Directive, Input, inject } from '@angular/core';\nimport { HookResult, Transition } from '@uirouter/core';\nimport { 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})\nexport class DbxActionFormSafetyDirective<T, O> extends DbxActionTransitionSafetyDirective<T, O> {\n readonly dbxActionForm = inject(DbxActionFormDirective<T>, { host: true });\n\n @Input('dbxActionFormSafety')\n override inputSafetyType?: DbxActionTransitionSafetyType = 'auto';\n\n protected override _handleOnBeforeTransition(transition: Transition): HookResult {\n this.dbxActionForm.form.forceFormUpdate();\n return super._handleOnBeforeTransition(transition);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DbxActionFormSafetyDirective } from './form.action.transition.safety.directive';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [DbxActionFormSafetyDirective],\n exports: [DbxActionFormSafetyDirective]\n})\nexport class DbxFormActionTransitionModule {}\n","import { MatDialogModule } from '@angular/material/dialog';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DbxActionFormDirective } from './form.action.directive';\n\n@NgModule({\n imports: [CommonModule, MatDialogModule],\n declarations: [DbxActionFormDirective],\n exports: [DbxActionFormDirective]\n})\nexport class DbxFormActionModule {}\n","import { distinctUntilChanged, filter, map, switchMap, combineLatest, BehaviorSubject, Observable, EMPTY, exhaustMap, takeUntil, Subject, tap, shareReplay, throttleTime } from 'rxjs';\nimport { Directive, Input, OnDestroy, inject } from '@angular/core';\nimport { AbstractSubscriptionDirective } from '@dereekb/dbx-core';\nimport { DbxFormState, DbxFormStateRef, DbxMutableForm } from '../form';\nimport { Maybe } from '@dereekb/util';\nimport { asObservable, ObservableOrValue, cleanup, errorOnEmissionsInPeriod } from '@dereekb/rxjs';\n\nexport function dbxFormSourceObservable<T>(form: DbxMutableForm, inputObs: ObservableOrValue<T>, mode$: Observable<DbxFormSourceDirectiveMode>): Observable<T> {\n return dbxFormSourceObservableFromStream(form.stream$, inputObs, mode$);\n}\n\nexport function dbxFormSourceObservableFromStream<T>(stream$: Observable<DbxFormStateRef>, inputObs: ObservableOrValue<T>, mode$: Observable<DbxFormSourceDirectiveMode>): Observable<T> {\n const value$ = asObservable(inputObs).pipe(shareReplay(1)); // catch/share the latest emission\n\n const state$ = stream$.pipe(\n map((x) => x.state),\n distinctUntilChanged()\n );\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(([value, send]) => {\n firstValueSent = true;\n if (!send) {\n doneSubject.next(undefined);\n }\n }),\n filter(([value, send]) => send),\n map((x) => x[0]),\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})\nexport class DbxFormSourceDirective<T> extends AbstractSubscriptionDirective implements OnDestroy {\n readonly form = inject(DbxMutableForm<T>, { host: true });\n\n private readonly _mode = new BehaviorSubject<DbxFormSourceDirectiveMode>('reset');\n\n @Input('dbxFormSourceMode')\n get mode(): DbxFormSourceDirectiveMode {\n return this._mode.value;\n }\n\n set mode(mode: DbxFormSourceDirectiveMode) {\n this._mode.next(mode);\n }\n\n @Input('dbxFormSource')\n set obs(obs: Maybe<ObservableOrValue<Maybe<Partial<T>>>>) {\n this.setObs(obs);\n }\n\n private setObs(inputObs: Maybe<ObservableOrValue<Maybe<Partial<T>>>>): void {\n let subscription;\n\n if (inputObs) {\n subscription = dbxFormSourceObservableFromStream(this.form.stream$, inputObs, this._mode).subscribe((x) => {\n this.form.setValue(x);\n });\n }\n\n this.sub = subscription;\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._mode.complete();\n }\n}\n","import { Observable, BehaviorSubject } from 'rxjs';\nimport { Directive, Input, OnDestroy, inject } from '@angular/core';\nimport { AbstractSubscriptionDirective } from '@dereekb/dbx-core';\nimport { DbxMutableForm } from '../../form/form';\nimport { LoadingState, isLoadingStateFinishedLoading } from '@dereekb/rxjs';\nimport { dbxFormSourceObservableFromStream, DbxFormSourceDirectiveMode } from './form.input.directive';\n\n/**\n * Used with a FormComponent to set the value from a LoadingState when the value is available.\n */\n@Directive({\n selector: '[dbxFormLoadingSource]'\n})\nexport class DbxFormLoadingSourceDirective<T extends object = object> extends AbstractSubscriptionDirective implements OnDestroy {\n readonly form = inject(DbxMutableForm<T>, { host: true });\n\n private readonly _mode = new BehaviorSubject<DbxFormSourceDirectiveMode>('reset');\n\n @Input('dbxFormLoadingSourceMode')\n get mode(): DbxFormSourceDirectiveMode {\n return this._mode.value;\n }\n\n set mode(mode: DbxFormSourceDirectiveMode) {\n this._mode.next(mode);\n }\n\n /**\n * Sets a LoadingContext that is watched for the loading state.\n */\n @Input('dbxFormLoadingSource')\n set obs(obs: Observable<LoadingState<T>>) {\n this._setObs(obs);\n }\n\n private _setObs(inputObs: Observable<LoadingState<T>>): void {\n let subscription;\n\n if (inputObs) {\n subscription = dbxFormSourceObservableFromStream(this.form.stream$, inputObs, this._mode).subscribe((x) => {\n if (isLoadingStateFinishedLoading(x)) {\n this.form.setValue(x.value);\n }\n });\n }\n\n this.sub = subscription;\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._mode.complete();\n }\n}\n","import { Directive, EventEmitter, Output, OnInit, OnDestroy, inject } from '@angular/core';\nimport { AbstractSubscriptionDirective } from '@dereekb/dbx-core';\nimport { 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})\nexport class DbxFormValueChangesDirective<T> extends AbstractSubscriptionDirective implements OnInit, OnDestroy {\n readonly form = inject(DbxForm<T>, { host: true });\n\n @Output()\n readonly dbxFormValueChange = new EventEmitter<Maybe<T>>();\n\n ngOnInit(): void {\n this.sub = 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.next(value);\n } else {\n this.dbxFormValueChange.next(undefined);\n }\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this.dbxFormValueChange.complete();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DbxFormValueChangesDirective } from './form.changes.directive';\nimport { DbxFormSourceDirective } from './form.input.directive';\nimport { DbxFormLoadingSourceDirective } from './form.loading.directive';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [DbxFormSourceDirective, DbxFormValueChangesDirective, DbxFormLoadingSourceDirective],\n exports: [DbxFormSourceDirective, DbxFormValueChangesDirective, DbxFormLoadingSourceDirective]\n})\nexport class DbxFormIoModule {}\n","import { AbstractControl } from '@angular/forms';\nimport { Maybe } from '@dereekb/util';\nimport { 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 { DbxFormIoModule } from './io/form.io.module';\nimport { DbxFormActionModule } from './action/form.action.module';\nimport { DbxFormActionTransitionModule } from './action/transition/form.action.transition.module';\nimport { NgModule } from '@angular/core';\n\n@NgModule({\n exports: [DbxFormActionTransitionModule, DbxFormActionModule, DbxFormIoModule]\n})\nexport class DbxFormModule {}\n","import { FieldTypeConfig } from '@ngx-formly/core';\nimport { ValidationMessageOption } from '@ngx-formly/core/lib/models';\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 { Component, Input } from '@angular/core';\nimport { ChecklistItemDisplayContent, ChecklistItemFieldDisplayComponent } from './checklist.item';\n\n// MARK: Default\n@Component({\n template: `\n <div *ngIf=\"displayContent\" class=\"dbx-default-checklist-item-field\">\n <div *ngIf=\"label\" class=\"item-label\">{{ label }}</div>\n <div *ngIf=\"sublabel\" class=\"item-sublabel\">{{ sublabel }}</div>\n <div *ngIf=\"description\" class=\"dbx-hint item-description\">{{ description }}</div>\n </div>\n `\n})\nexport class DbxDefaultChecklistItemFieldDisplayComponent<T = unknown> implements ChecklistItemFieldDisplayComponent<T> {\n @Input()\n displayContent!: ChecklistItemDisplayContent<T>;\n\n get label() {\n return this.displayContent?.label;\n }\n\n get sublabel() {\n return this.displayContent?.sublabel;\n }\n\n get description() {\n return this.displayContent?.description;\n }\n}\n","import { ChangeDetectorRef, Component, OnDestroy, OnInit, Type, inject } from '@angular/core';\nimport { DbxInjectionComponentConfig, AbstractSubscriptionDirective, safeDetectChanges } from '@dereekb/dbx-core';\nimport { switchMapMaybeObs } from '@dereekb/rxjs';\nimport { shareReplay, distinctUntilChanged, map, BehaviorSubject } from 'rxjs';\nimport { ValidationErrors, FormGroup } from '@angular/forms';\nimport { FieldType, FieldTypeConfig, FormlyFieldProps } from '@ngx-formly/core';\nimport { ChecklistItemFieldDisplayComponent, ChecklistItemFieldDisplayContentObs } from './checklist.item';\nimport { DbxDefaultChecklistItemFieldDisplayComponent } from './checklist.item.field.content.default.component';\nimport { Maybe } from '@dereekb/util';\n\nexport interface DbxChecklistItemFieldProps<T = unknown> extends FormlyFieldProps {\n /**\n * Observable used to retrieve content to display for the item.\n */\n displayContentObs: ChecklistItemFieldDisplayContentObs<T>;\n /**\n * Custom component class to use by default.\n */\n componentClass?: Type<ChecklistItemFieldDisplayComponent<T>>;\n}\n\n@Component({\n templateUrl: 'checklist.item.field.component.html'\n})\nexport class DbxChecklistItemFieldComponent<T = unknown> extends FieldType<FieldTypeConfig<DbxChecklistItemFieldProps<T>>> implements OnInit, OnDestroy {\n private readonly _displayContent = new BehaviorSubject<Maybe<ChecklistItemFieldDisplayContentObs<T>>>(undefined);\n readonly displayContent$ = this._displayContent.pipe(switchMapMaybeObs(), distinctUntilChanged(), shareReplay(1));\n\n readonly anchor$ = this.displayContent$.pipe(\n map((x) => x.anchor),\n shareReplay(1)\n );\n\n readonly rippleDisabled$ = this.displayContent$.pipe(\n map((x) => x.ripple === false || (x.ripple !== true && !x.anchor)),\n distinctUntilChanged(),\n shareReplay(1)\n );\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 this._displayContent.next(this.checklistField.displayContentObs);\n }\n\n ngOnDestroy() {\n this._displayContent.complete();\n }\n}\n\n@Component({\n selector: 'dbx-checklist-item-content-component',\n template: `\n <dbx-injection [config]=\"config\"></dbx-injection>\n `\n})\nexport class DbxChecklistItemContentComponent<T = unknown> extends AbstractSubscriptionDirective {\n readonly cdRef = inject(ChangeDetectorRef);\n readonly checklistItemFieldComponent = inject(DbxChecklistItemFieldComponent<T>);\n\n readonly config: DbxInjectionComponentConfig<ChecklistItemFieldDisplayComponent<T>> = {\n componentClass: this.checklistItemFieldComponent.componentClass,\n init: (instance) => {\n this.sub = this.checklistItemFieldComponent.displayContent$.subscribe((x) => {\n instance.displayContent = x;\n safeDetectChanges(this.cdRef);\n });\n }\n };\n}\n","<div class=\"dbx-checklist-item-wrapper\" [formGroup]=\"formGroup\">\n <div *ngIf=\"label\" class=\"dbx-checklist-item-label\">{{ label }}</div>\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]=\"anchor$ | async\">\n <div class=\"dbx-checklist-item-content\" matRipple [matRippleDisabled]=\"(rippleDisabled$ | async) ?? false\">\n <dbx-checklist-item-content-component></dbx-checklist-item-content-component>\n <span class=\"spacer\"></span>\n <mat-icon *ngIf=\"(rippleDisabled$ | async) !== true\">navigate_next</mat-icon>\n </div>\n </dbx-anchor>\n </div>\n </div>\n <div *ngIf=\"description\" class=\"dbx-hint\">{{ description }}</div>\n</div>\n","import { Component } from '@angular/core';\nimport { FieldWrapper, FormlyFieldConfig, FormlyFieldProps } from '@ngx-formly/core';\n\nexport interface DbxFormInfoConfig extends FormlyFieldProps {\n onInfoClick: () => void;\n}\n\n@Component({\n template: `\n <div class=\"dbx-form-info-wrapper\" fxLayout=\"row\">\n <div class=\"dbx-form-info-wrapper-content\" fxFlex=\"grow\">\n <ng-container #fieldComponent></ng-container>\n </div>\n <div class=\"dbx-form-info-wrapper-info\" fxFlex=\"noshrink\" fxLayout=\"column\" fxLayoutAlign=\"center 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})\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 { Component } from '@angular/core';\nimport { DbxSectionHeaderConfig } from '@dereekb/dbx-web';\nimport { Maybe } from '@dereekb/util';\nimport { FieldWrapper, 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})\nexport class DbxFormSectionWrapperComponent extends FieldWrapper<FormlyFieldConfig<DbxFormSectionConfig>> {\n get headerConfig(): Maybe<DbxSectionHeaderConfig> {\n return this.props;\n }\n}\n","import { Component } from '@angular/core';\nimport { ScreenMediaWidthType } from '@dereekb/dbx-web';\nimport { FieldWrapper, FormlyFieldConfig } from '@ngx-formly/core';\n\nexport interface DbxFlexWrapperConfig {\n /**\n * Breakpoint based on the screen width.\n */\n breakpoint?: ScreenMediaWidthType;\n /**\n * Whether or not to use relative sizing.\n */\n relative?: boolean;\n /**\n * Whether or not to break to a new column when the breakpoint is reached.\n */\n 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})\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 { Component } from '@angular/core';\nimport { DbxSectionHeaderConfig } from '@dereekb/dbx-web';\nimport { Maybe } from '@dereekb/util';\nimport { 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})\nexport class DbxFormSubsectionWrapperComponent extends FieldWrapper<FieldTypeConfig<DbxFormSubsectionConfig>> {\n get headerConfig(): Maybe<DbxSectionHeaderConfig> {\n return this.props;\n }\n}\n","import { Maybe, objectIsEmpty } from '@dereekb/util';\nimport { FieldWrapper, FormlyFieldProps, FormlyFieldConfig } from '@ngx-formly/core';\nimport { map, shareReplay, startWith, switchMap, BehaviorSubject, of, distinctUntilChanged } from 'rxjs';\nimport { Directive, OnDestroy, OnInit } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\nimport { filterMaybe } from '@dereekb/rxjs';\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 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 { Component } from '@angular/core';\nimport { AbstractFormExpandSectionWrapperDirective, 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 <ng-container [ngSwitch]=\"show$ | async\">\n <ng-container *ngSwitchCase=\"true\">\n <ng-container #fieldComponent></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"false\">\n <span class=\"dbx-form-expand-wrapper-button\" (click)=\"open()\">{{ expandLabel }}</span>\n </ng-container>\n </ng-container>\n `\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 { Component, OnInit } from '@angular/core';\nimport { 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})\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 { Component } from '@angular/core';\nimport { Maybe } from '@dereekb/util';\nimport { first, shareReplay, switchMap, Observable, of } from 'rxjs';\nimport { AbstractFormExpandSectionConfig, AbstractFormExpandSectionWrapperDirective } from './expand.wrapper.delegate';\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\" [ngSwitch]=\"show$ | async\">\n <div class=\"dbx-form-toggle-wrapper-toggle\">\n <mat-slide-toggle [checked]=\"show$ | async\" (toggleChange)=\"onToggleChange()\">{{ slideLabel$ | async }}</mat-slide-toggle>\n </div>\n <ng-container *ngSwitchCase=\"true\">\n <ng-container #fieldComponent></ng-container>\n </ng-container>\n </div>\n `\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 onToggleChange(): void {\n this.show$.pipe(first()).subscribe((show) => {\n this._toggleOpen.next(!show);\n });\n }\n}\n","import { OnInit, OnDestroy, Component } from '@angular/core';\nimport { asObservable, ObservableOrValue, switchMapMaybeDefault } from '@dereekb/rxjs';\nimport { Maybe } from '@dereekb/util';\nimport { FieldWrapper, FormlyFieldConfig } from '@ngx-formly/core';\nimport { BehaviorSubject, 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]=\"(class$ | async) ?? ''\" [ngStyle]=\"(style$ | async) ?? {}\">\n <ng-container #fieldComponent></ng-container>\n </div>\n `\n})\nexport class DbxFormStyleWrapperComponent extends FieldWrapper<FormlyFieldConfig<DbxFormStyleWrapperConfig>> implements OnInit, OnDestroy {\n private _style = new BehaviorSubject<Maybe<Observable<DbxFormStyleObject>>>(undefined);\n private _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 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 { OnInit, OnDestroy, Component } from '@angular/core';\nimport { SimpleLoadingContext, SubscriptionObject } from '@dereekb/rxjs';\nimport { FieldWrapper, 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 asynchronos 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})\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 { MatButtonModule } from '@angular/material/button';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxFormInfoWrapperComponent } from './info.wrapper.component';\nimport { DbxFormSectionWrapperComponent } from './section.wrapper.component';\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\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 { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { DbxSectionLayoutModule, DbxTextModule, DbxFlexLayoutModule, DbxLoadingModule } from '@dereekb/dbx-web';\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';\n\n@NgModule({\n imports: [\n CommonModule,\n DbxTextModule,\n DbxLoadingModule,\n DbxFlexLayoutModule,\n DbxSectionLayoutModule,\n MatButtonModule,\n MatSlideToggleModule,\n MatIconModule,\n FlexLayoutModule,\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 declarations: [AutoTouchFieldWrapperComponent, DbxFormSectionWrapperComponent, DbxFormSubsectionWrapperComponent, DbxFormInfoWrapperComponent, DbxFormExpandWrapperComponent, DbxFormToggleWrapperComponent, DbxFormFlexWrapperComponent, DbxFormStyleWrapperComponent, DbxFormWorkingWrapperComponent],\n exports: []\n})\nexport class DbxFormFormlyWrapperModule {}\n","import { DbxInjectionComponentModule } from '@dereekb/dbx-core';\nimport { MatRippleModule } from '@angular/material/core';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { DbxDefaultChecklistItemFieldDisplayComponent } from './checklist.item.field.content.default.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { DbxRouterAnchorModule, DbxTextModule } from '@dereekb/dbx-web';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxFormFormlyWrapperModule } from '../wrapper/form.wrapper.module';\nimport { DbxChecklistItemContentComponent, DbxChecklistItemFieldComponent } from './checklist.item.field.component';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\n@NgModule({\n imports: [\n CommonModule,\n DbxTextModule,\n FormsModule,\n ReactiveFormsModule,\n MatRippleModule,\n MatCheckboxModule,\n MatButtonModule,\n MatIconModule,\n DbxRouterAnchorModule,\n DbxInjectionComponentModule,\n DbxFormFormlyWrapperModule,\n FormlyModule.forChild({\n types: [{ name: 'checklistitem', component: DbxChecklistItemFieldComponent }]\n })\n ],\n declarations: [DbxChecklistItemFieldComponent, DbxChecklistItemContentComponent, DbxDefaultChecklistItemFieldDisplayComponent],\n exports: [DbxFormFormlyWrapperModule]\n})\nexport class DbxFormFormlyChecklistItemFieldModule {}\n","import { AsyncValidatorFn, ValidatorFn } from '@angular/forms';\nimport { mergeObjects, filterFromPOJO, mergeObjectsFunction, filterFromPOJOFunction, FilterKeyValueTuplesInput, GeneralFilterFromPOJOFunction, ArrayOrValue, Maybe, asArray, objectHasNoKeys, MapFunction } from '@dereekb/util';\nimport { FormlyFieldConfig, FormlyFieldProps } from '@ngx-formly/core';\nimport { ValidationMessageOption } from '@ngx-formly/core/lib/models';\nimport { 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 materialFormField?: Pick<MaterialFormlyFormFieldProps, 'prefix' | 'suffix' | 'hideLabel' | 'hideRequiredMarker' | 'hideFieldUnderline' | 'floatLabel' | 'appearance' | 'color' | 'hintStart' | 'hintEnd'>;\n}\n","import { FormlyFieldConfig } from '@ngx-formly/core';\nimport { LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig } from '../field';\nimport { 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' | 'displayContentObs'>;\n\nexport function checklistItemField<T = unknown>(config: ChecklistItemFieldBuilderInput<T>): FormlyFieldConfig<DbxChecklistItemFieldProps<T>> {\n const { key, displayContentObs, componentClass } = config;\n\n const fieldConfig = formlyField({\n key,\n type: 'checklistitem',\n ...propsAndConfigForFieldConfig(config, {\n displayContentObs,\n componentClass\n })\n });\n\n return fieldConfig;\n}\n","import { Observable, combineLatest, map, shareReplay } from 'rxjs';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { ChecklistItemDisplayContent, ChecklistItemFieldDisplayContentObs } from './checklist.item';\nimport { KeyValueTransformMap, addPlusPrefixToNumber, Maybe } from '@dereekb/util';\nimport { checklistItemField, 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 key: ChecklistItemFieldDataSetFieldKey<T>;\n /**\n * Base field configuration to use.\n */\n 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 _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: ChecklistItemFieldDataSetBuilderInput<D, T> = {\n ...currentField,\n ...config,\n key\n } as any;\n\n if (currentField.displayContentObs && config.displayContentObs) {\n mergedConfig.displayContentObs = combineLatest([currentField.displayContentObs, config.displayContentObs]).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 displayContentObs: 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 displayContentObs: 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>): ChecklistItemFieldDisplayContentObs<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>): ChecklistItemFieldDisplayContentObs<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()): ChecklistItemFieldDisplayContentObs<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 } from '@angular/core';\nimport { DbxInjectionComponentConfig } from '@dereekb/dbx-core';\nimport { FieldType, 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})\nexport class DbxFormComponentFieldComponent<T = unknown> extends FieldType<DbxFormComponentFormlyFieldConfig<T>> {\n get config(): DbxInjectionComponentConfig<T> {\n return this.field.componentField;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { DbxInjectionComponentModule } from '@dereekb/dbx-core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxFormComponentFieldComponent } from './component.field.component';\n\n@NgModule({\n imports: [\n CommonModule,\n DbxInjectionComponentModule,\n FormlyModule.forChild({\n types: [{ name: 'component', component: DbxFormComponentFieldComponent }]\n })\n ],\n declarations: [DbxFormComponentFieldComponent],\n exports: [DbxFormComponentFieldComponent]\n})\nexport class DbxFormFormlyComponentFieldModule {}\n","import { DbxFormComponentFieldConfig, 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 { FormlyFieldConfig } from '@ngx-formly/core';\nimport { LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig } from '../../field';\nimport { DbxItemListFieldProps } from './list.field.component';\nimport { AbstractDbxSelectionListWrapperDirective } from '@dereekb/dbx-web';\nimport { 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 { Component, OnDestroy, OnInit, Type } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\nimport { DbxInjectionComponentConfig } from '@dereekb/dbx-core';\nimport { AbstractDbxSelectionListWrapperDirective, ListSelectionState, DbxValueListItemDecisionFunction, dbxValueListItemDecisionFunction } from '@dereekb/dbx-web';\nimport { distinctUntilHasDifferentValues, filterMaybe, ListLoadingState, SubscriptionObject, switchMapMaybeObs } from '@dereekb/rxjs';\nimport { convertMaybeToArray, hasDifferentValues, isSelectedDecisionFunctionFactory, Maybe, PrimativeKey, ReadKeyFunction, readKeysFrom } from '@dereekb/util';\nimport { FormlyFieldProps, FieldType, FieldTypeConfig } from '@ngx-formly/core';\nimport { map, 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})\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 _selectionEventSub = new SubscriptionObject();\n private _loadMoreSub = new SubscriptionObject();\n\n private _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 _listComponentClassObs = new BehaviorSubject<Maybe<Observable<Type<C>>>>(undefined);\n readonly listComponentClass$ = this._listComponentClassObs.pipe(switchMapMaybeObs());\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.selectionMode = 'select'; // always enable select\n\n listView.state$ = 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 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]=\"isSelectedModifierFunction$ | async\">\n <span class=\"dbx-label dbx-label-padded\" *ngIf=\"label\">{{ label }}</span>\n <div class=\"dbx-list-item-field-content\">\n <dbx-injection [config]=\"config$ | async\"></dbx-injection>\n </div>\n <mat-divider></mat-divider>\n <div class=\"dbx-form-description\" *ngIf=\"description\">{{ description }}</div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { DbxInjectionComponentModule } from '@dereekb/dbx-core';\nimport { DbxTextModule, DbxLoadingModule, DbxButtonModule, DbxListLayoutModule } from '@dereekb/dbx-web';\nimport { DbxItemListFieldComponent } from './list.field.component';\nimport { MatDividerModule } from '@angular/material/divider';\n\n@NgModule({\n imports: [\n CommonModule,\n DbxTextModule,\n DbxLoadingModule,\n DbxButtonModule,\n FormsModule,\n MatDividerModule,\n MatButtonModule,\n MatInputModule,\n MatFormFieldModule,\n ReactiveFormsModule,\n MatAutocompleteModule,\n MatIconModule,\n DbxInjectionComponentModule,\n DbxListLayoutModule,\n FormlyModule.forChild({\n types: [{ name: 'dbxlistfield', component: DbxItemListFieldComponent }]\n })\n ],\n declarations: [DbxItemListFieldComponent],\n exports: [DbxItemListFieldComponent]\n})\nexport class DbxFormFormlyDbxListFieldModule {}\n","import { DbxInjectionComponentConfig } from '@dereekb/dbx-core';\nimport { LoadingState, successResult, mapLoadingStateResults, filterMaybe, ListLoadingStateContextInstance, mapIsListLoadingStateWithEmptyValue, startWithBeginLoading, SubscriptionObject } from '@dereekb/rxjs';\nimport { PrimativeKey, convertMaybeToArray, makeValuesGroupMap, Maybe, ArrayOrValue, separateValues, filterUniqueValues } from '@dereekb/util';\nimport { Directive, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { FormControl, AbstractControl } from '@angular/forms';\nimport { MatInput } from '@angular/material/input';\nimport { FieldTypeConfig, FormlyFieldProps } from '@ngx-formly/core';\nimport { FieldType } from '@ngx-formly/material';\nimport { BehaviorSubject, combineLatest, Observable, of, filter, map, debounceTime, distinctUntilChanged, switchMap, startWith, shareReplay, mergeMap, first, delay } from 'rxjs';\nimport { PickableValueFieldDisplayFunction, PickableValueFieldDisplayValue, PickableValueFieldFilterFunction, PickableValueFieldHashFunction, PickableValueFieldLoadValuesFunction, PickableValueFieldValue } from './pickable';\nimport { DbxValueListItem } from '@dereekb/dbx-web';\nimport { camelCase } from 'change-case';\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 loadValues: PickableValueFieldLoadValuesFunction<T, M>;\n /**\n * Used for building a display value given the input.\n */\n 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 hashForValue?: PickableValueFieldHashFunction<T, H>;\n /**\n * Used for filtering values via the search text.\n */\n 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 sortItems?: PickableItemFieldItemSortFn<T, M>;\n /**\n * Whether or not to allow multiple items to be selected.\n */\n 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 asArrayValue?: boolean;\n /**\n * Whether or not to show the text filter. True by default if filterValues is provided.\n */\n showTextFilter?: boolean;\n /**\n * Whether or not to skip the filter function when the input is empty.\n *\n * True by default.\n */\n skipFilterFnOnEmpty?: boolean;\n /**\n * Filter Label\n */\n filterLabel?: string;\n /**\n * The maximum number of values that can be picked\n */\n maxPicks?: number;\n /**\n * Optional description/hint to display.\n */\n description?: string;\n /**\n * Footer Display\n */\n footerConfig?: DbxInjectionComponentConfig;\n /**\n * Changes the selection mode of the list to \"view\" mode on disabled, hiding the selection boxes.\n */\n changeSelectionModeToViewOnDisabled?: boolean;\n /**\n * (Optional) observable that will trigger the clearing of all cached display values.\n */\n 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 @ViewChild('filterMatInput', { static: true })\n filterMatInput!: MatInput;\n\n readonly inputCtrl = new FormControl('');\n\n private _formControlObs = new BehaviorSubject<Maybe<AbstractControl>>(undefined);\n readonly formControl$ = this._formControlObs.pipe(filterMaybe());\n\n private _clearDisplayHashMapSub = new SubscriptionObject();\n private _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: 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 = new ListLoadingStateContextInstance({ 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 /**\n * Context used for searching/filtering.\n */\n readonly filterResultsContext = new ListLoadingStateContextInstance({ obs: this.filteredSearchResultsState$, showLoadingOnNoValue: true });\n\n readonly noItemsAvailable$ = this.filterItemsLoadingState$.pipe(mapIsListLoadingStateWithEmptyValue(), distinctUntilChanged());\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 { Component } from '@angular/core';\nimport { AbstractDbxPickableItemFieldDirective, PickableItemFieldItem } from './pickable.field.directive';\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})\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 <ng-container *ngIf=\"showFilterInput\">\n <ng-container *ngTemplateOutlet=\"filterTemplate\"></ng-container>\n </ng-container>\n <!-- Content -->\n <div class=\"dbx-pickable-item-field-chips\">\n <mat-chip-listbox [multiple]=\"multiSelect\" [required]=\"required\" [selectable]=\"!isReadonlyOrDisabled\" [disabled]=\"readonly\" #chipList>\n <mat-chip-option *ngFor=\"let item of items$ | async\" (click)=\"itemClicked(item)\" [selected]=\"item.selected\" [disabled]=\"isReadonlyOrDisabled || item.disabled\">\n <mat-icon matChipAvatar *ngIf=\"item.itemValue.icon\">{{ item.itemValue.icon }}</mat-icon>\n <span class=\"dbx-chip-label\">{{ item.itemValue.label }}</span>\n <span class=\"dbx-chip-sublabel\" *ngIf=\"item.itemValue.sublabel\">{{ item.itemValue.sublabel }}</span>\n </mat-chip-option>\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 <p *ngIf=\"noItemsAvailable$ | async\" class=\"dbx-label\">No items match this filter.</p>\n </div>\n</ng-template>\n","import { Component, inject } from '@angular/core';\nimport { DbxInjectionComponentConfig } from '@dereekb/dbx-core';\nimport { DEFAULT_LIST_WRAPPER_DIRECTIVE_TEMPLATE, AbstractDbxSelectionListWrapperDirective, provideDbxListView, AbstractDbxSelectionListViewDirective, AbstractDbxValueListViewItemComponent, ListSelectionState, addConfigToValueListItems, DbxListSelectionMode } from '@dereekb/dbx-web';\nimport { Maybe } from '@dereekb/util';\nimport { map, shareReplay } from 'rxjs';\nimport { PickableValueFieldDisplayValue } from './pickable';\nimport { AbstractDbxPickableItemFieldDirective, PickableItemFieldItem } from './pickable.field.directive';\n\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})\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\n// MARK: Selection List\n@Component({\n selector: 'dbx-form-pickable-item-field-item-list',\n template: DEFAULT_LIST_WRAPPER_DIRECTIVE_TEMPLATE\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]=\"items$ | async\"></dbx-selection-list-view-content>\n `,\n providers: provideDbxListView(DbxPickableListFieldItemListViewComponent)\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\n@Component({\n template: `\n <div class=\"dbx-default-pickable-item-field-list-item dbx-flex-bar\">\n <mat-icon class=\"dbx-icon-spacer\" *ngIf=\"icon\">{{ icon }}</mat-icon>\n <span class=\"dbx-chip-label\">{{ label }}</span>\n <span class=\"dbx-chip-sublabel\" *ngIf=\"sublabel\">({{ sublabel }})</span>\n </div>\n `\n})\nexport class DbxPickableListFieldItemListViewItemComponent<T> extends AbstractDbxValueListViewItemComponent<PickableValueFieldDisplayValue<T>> {\n get label(): string {\n return this.itemValue.label;\n }\n\n get sublabel() {\n return this.itemValue.sublabel;\n }\n\n get icon() {\n return this.itemValue.icon;\n }\n}\n","<div class=\"dbx-pickable-item-field\">\n <dbx-loading [context]=\"context\">\n <ng-container *ngIf=\"showFilterInput\">\n <ng-container *ngTemplateOutlet=\"filterTemplate\"></ng-container>\n </ng-container>\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 <p *ngIf=\"noItemsAvailable$ | async\" class=\"dbx-label\">No items match this filter.</p>\n </div>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatListModule } from '@angular/material/list';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { DbxPickableChipListFieldComponent } from './pickable.chip.field.component';\nimport { DbxPickableListFieldComponent, DbxPickableListFieldItemListComponent, DbxPickableListFieldItemListViewComponent, DbxPickableListFieldItemListViewItemComponent } from './pickable.list.field.component';\nimport { DbxDatePipeModule, DbxInjectionComponentModule } from '@dereekb/dbx-core';\nimport { DbxRouterAnchorModule, DbxTextModule, DbxLoadingModule, DbxButtonModule, DbxListLayoutModule } from '@dereekb/dbx-web';\n\n@NgModule({\n imports: [\n CommonModule,\n DbxTextModule,\n DbxLoadingModule,\n DbxButtonModule,\n FormsModule,\n MatButtonModule,\n MatInputModule,\n MatFormFieldModule,\n ReactiveFormsModule,\n MatAutocompleteModule,\n MatListModule,\n DbxDatePipeModule,\n DbxRouterAnchorModule,\n MatChipsModule,\n MatIconModule,\n DbxInjectionComponentModule,\n DbxListLayoutModule,\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 declarations: [DbxPickableChipListFieldComponent, DbxPickableListFieldComponent, DbxPickableListFieldItemListComponent, DbxPickableListFieldItemListViewComponent, DbxPickableListFieldItemListViewItemComponent],\n exports: []\n})\nexport class DbxFormFormlyPickableFieldModule {}\n","import { FormlyFieldConfig } from '@ngx-formly/core';\nimport { LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig, MaterialFormFieldConfig } from '../../field';\nimport { PickableItemFieldItem, 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, LabeledValue, Maybe, SearchStringFilterFunction, searchStringFilterFunction, sortByStringFunction } from '@dereekb/util';\nimport { Observable, of } from 'rxjs';\nimport { PickableValueFieldDisplayValue, PickableValueFieldValue } from './pickable';\nimport { PickableItemFieldItem, 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 { filterMaybe } from '@dereekb/rxjs';\nimport { BehaviorSubject, map, Observable, shareReplay } from 'rxjs';\nimport { Component, Directive, inject, InjectionToken, Input, OnDestroy } from '@angular/core';\nimport { ConfiguredSearchableValueFieldDisplayValue } from './searchable';\nimport { Maybe, mergeArraysIntoArray } from '@dereekb/util';\nimport { DbxInjectionComponentConfig } from '@dereekb/dbx-core';\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]=\"anchor$ | async\">\n <dbx-injection [config]=\"config$ | async\"></dbx-injection>\n </dbx-anchor>\n `\n})\nexport class DbxSearchableFieldAutocompleteItemComponent<T> implements OnDestroy {\n private _displayValue = new BehaviorSubject<Maybe<ConfiguredSearchableValueFieldDisplayValue<T>>>(undefined);\n readonly displayValue$ = this._displayValue.pipe(filterMaybe(), shareReplay(1));\n\n readonly config$: Observable<DbxInjectionComponentConfig> = this.displayValue$.pipe(\n map((x) => {\n const config: DbxInjectionComponentConfig = {\n ...x.display,\n providers: mergeArraysIntoArray(\n [\n {\n provide: DBX_SEARCHABLE_FIELD_COMPONENT_DATA_TOKEN,\n useValue: x\n }\n ],\n x.display.providers\n )\n };\n\n return config;\n })\n );\n\n readonly anchor$ = this.displayValue$.pipe(map((x) => x.anchor));\n\n @Input()\n set displayValue(displayValue: ConfiguredSearchableValueFieldDisplayValue<T>) {\n this._displayValue.next(displayValue);\n }\n\n ngOnDestroy(): void {\n this._displayValue.complete();\n }\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 <mat-icon class=\"dbx-icon-spacer\" *ngIf=\"icon\">{{ icon }}</mat-icon>\n <span class=\"dbx-chip-label\">{{ displayValue.label }}</span>\n <span class=\"dbx-chip-sublabel\" *ngIf=\"displayValue.sublabel\">({{ displayValue.sublabel }})</span>\n </div>\n `\n})\nexport class DbxDefaultSearchableFieldDisplayComponent<T> extends AbstractDbxSearchableFieldDisplayDirective<T> {\n get icon() {\n return this.displayValue.icon;\n }\n}\n","import { ArrayOrValue, Maybe, convertMaybeToArray, lastValue, PrimativeKey, separateValues, asArray, filterUniqueValues } from '@dereekb/util';\nimport { DbxInjectionComponentConfig, mergeDbxInjectionComponentConfigs } from '@dereekb/dbx-core';\nimport { filterMaybe, SubscriptionObject, LoadingState, LoadingStateContextInstance, successResult, startWithBeginLoading } from '@dereekb/rxjs';\nimport { ChangeDetectorRef, Directive, ElementRef, OnDestroy, OnInit, ViewChild, inject } from '@angular/core';\nimport { AbstractControl, FormControl, ValidatorFn } from '@angular/forms';\nimport { FieldTypeConfig, FormlyFieldProps } from '@ngx-formly/core';\nimport { FieldType } from '@ngx-formly/material';\nimport { debounceTime, distinctUntilChanged, first, map, mergeMap, shareReplay, startWith, switchMap, BehaviorSubject, of, Observable } from 'rxjs';\nimport { SearchableValueFieldHashFn, SearchableValueFieldStringSearchFn, SearchableValueFieldDisplayFn, SearchableValueFieldDisplayValue, SearchableValueFieldValue, SearchableValueFieldAnchorFn, ConfiguredSearchableValueFieldDisplayValue } from './searchable';\nimport { DbxDefaultSearchableFieldDisplayComponent } from './searchable.field.autocomplete.item.component';\nimport { camelCase } from 'change-case';\n\nexport interface StringValueFieldsFieldProps extends FormlyFieldProps {\n /**\n * Custom input validators.\n */\n 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 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 asArrayValue?: boolean;\n /**\n * Optional conversion function. If provided, allowStringValues is considered true.\n */\n 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 hashForValue?: SearchableValueFieldHashFn<T, H>;\n /**\n * Performs a search.\n */\n search: SearchableValueFieldStringSearchFn<T, M>;\n /**\n * Whether or not to allow searches on empty text. Is false by default.\n */\n searchOnEmptyText?: boolean;\n /**\n * Default injected config to use for display values.\n */\n display?: Partial<DbxInjectionComponentConfig>;\n /**\n * Used for building a display value given the input.\n */\n 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 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 anchorForValue?: SearchableValueFieldAnchorFn<T, M>;\n /**\n * Whether or not to show \"Clear\" in the autcomplete list.\n */\n showClearValue?: boolean;\n /**\n * Label for the search input.\n *\n * Defaults to \"Search\"\n */\n searchLabel?: string;\n /**\n * (Optional) observable that will trigger the clearing of all cached display values.\n */\n refreshDisplayValues$?: Observable<unknown>;\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 readonly cdRef = inject(ChangeDetectorRef);\n\n /**\n * Whether or not to allow syncing to\n */\n allowSyncValueToInput = false;\n\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 picking a default display for this directive.\n */\n defaultDisplay?: DbxInjectionComponentConfig;\n\n @ViewChild('textInput')\n textInput!: 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 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 _singleValueSyncSubscription = new SubscriptionObject();\n\n readonly searchContext = new LoadingStateContextInstance({ obs: this.searchResultsState$, showLoadingOnNoValue: false });\n\n readonly searchResults$: Observable<ConfiguredSearchableValueFieldDisplayValue<T, M>[]> = this.searchResultsState$.pipe(map((x) => x?.value ?? []));\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 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 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([this.defaultDisplay, this.display]);\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.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.defaultDisplay?.componentClass) {\n this.defaultDisplay = {\n ...this.defaultDisplay,\n componentClass: DbxDefaultSearchableFieldDisplayComponent\n };\n }\n\n if (this.allowSyncValueToInput && this.multiSelect === false) {\n this._singleValueSyncSubscription.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._singleValueSyncSubscription.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 // console.log('Add: ', text, this.inputCtrl.valid);\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 this.textInput.nativeElement.value = '';\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 } from '@dereekb/rxjs';\nimport { Subject } from 'rxjs';\nimport { Component, OnDestroy, OnInit } from '@angular/core';\nimport { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';\nimport { MatChipInputEvent } from '@angular/material/chips';\nimport { AbstractDbxSearchableValueFieldDirective, SearchableValueFieldsFieldProps } from './searchable.field.directive';\nimport { COMMA, ENTER } from '@angular/cdk/keycodes';\nimport { skipUntilTimeElapsedAfterLastEmission } from '@dereekb/date';\nimport { PrimativeKey } from '@dereekb/util';\nimport { SearchableValueFieldDisplayValue } from './searchable';\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})\nexport class DbxSearchableChipFieldComponent<T, M = unknown, H extends PrimativeKey = PrimativeKey> extends AbstractDbxSearchableValueFieldDirective<T, M, H, SearchableChipValueFieldsFieldProps<T, M, H>> implements OnInit, OnDestroy {\n private _blur = new Subject<void>();\n private _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 override get multiSelect(): boolean {\n return this.props.multiSelect ?? true;\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 <mat-chip-row *ngFor=\"let displayValue of displayValues$ | async\" [removable]=\"true\" (removed)=\"removeWithDisplayValue(displayValue)\">\n <mat-icon matChipAvatar *ngIf=\"displayValue.icon\">{{ displayValue.icon }}</mat-icon>\n <span class=\"dbx-chip-label\">{{ displayValue.label }}</span>\n <span class=\"dbx-chip-sublabel\" *ngIf=\"displayValue.sublabel\">{{ displayValue.sublabel }}</span>\n <mat-icon matChipRemove *ngIf=\"!readonly\">cancel</mat-icon>\n </mat-chip-row>\n <input #textInput [name]=\"name\" [placeholder]=\"placeholder\" [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 <mat-option *ngFor=\"let displayValue of searchResults$ | async\" [value]=\"displayValue\">\n <dbx-searchable-field-autocomplete-item [displayValue]=\"displayValue\"></dbx-searchable-field-autocomplete-item>\n </mat-option>\n</mat-autocomplete>\n","import { arrayToMap, Maybe, PrimativeKey, separateValues } from '@dereekb/util';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { Observable, of, switchMap, map } from 'rxjs';\nimport { LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig, DescriptionFieldConfig, MaterialFormFieldConfig } from '../../field';\nimport { SearchableValueFieldDisplayFn, SearchableValueFieldDisplayValue, SearchableValueFieldValue } from './searchable';\nimport { SearchableChipValueFieldsFieldProps } from './searchable.chip.field.component';\nimport { 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 { SubscriptionObject } from '@dereekb/rxjs';\nimport { Component, OnDestroy, OnInit } from '@angular/core';\nimport { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';\nimport { AbstractDbxSearchableValueFieldDirective, SearchableValueFieldsFieldProps } from './searchable.field.directive';\nimport { map, shareReplay, skipWhile, distinctUntilChanged } from 'rxjs';\nimport { tapDetectChanges } from '@dereekb/dbx-core';\nimport { PrimativeKey } from '@dereekb/util';\n\nexport interface SearchableTextValueFieldsFieldProps<T, M = unknown, H extends PrimativeKey = PrimativeKey> extends SearchableValueFieldsFieldProps<T, M, H> {\n 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})\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 tapDetectChanges(this.cdRef)\n );\n\n readonly hasValue$ = this.selectedDisplayValue$.pipe(map((x) => Boolean(x)));\n readonly showSelectedDisplayValue$ = this.selectedDisplayValue$.pipe(\n map((x) => this.showSelectedValue && Boolean(x)),\n distinctUntilChanged(),\n shareReplay(1),\n tapDetectChanges(this.cdRef)\n );\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 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 selected(event: MatAutocompleteSelectedEvent): void {\n this.addWithDisplayValue(event.option.value);\n }\n}\n","<div class=\"dbx-searchable-text-field\" [ngClass]=\"{ 'dbx-searchable-text-field-has-value': (hasValue$ | async), 'dbx-searchable-text-field-show-value': showSelectedValue }\">\n <!-- Result View -->\n <div class=\"dbx-searchable-text-field-value mat-option mat-option-text\" *ngIf=\"showSelectedDisplayValue$ | async\">\n <dbx-searchable-field-autocomplete-item [displayValue]=\"(selectedDisplayValue$ | async)!\"></dbx-searchable-field-autocomplete-item>\n </div>\n <div class=\"dbx-searchable-text-field-input\">\n <div *ngIf=\"searchLabel\" class=\"dbx-label\">{{ searchLabel }}</div>\n <!-- View -->\n <input type=\"search\" [name]=\"name\" matInput #textInput [placeholder]=\"placeholder\" [formControl]=\"inputCtrl\" [matAutocomplete]=\"auto\" [matAutocompleteDisabled]=\"readonly\" 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 <mat-option *ngFor=\"let displayValue of searchResults$ | async\" [value]=\"displayValue\">\n <dbx-searchable-field-autocomplete-item [displayValue]=\"displayValue\"></dbx-searchable-field-autocomplete-item>\n </mat-option>\n <!-- Add/Pick String Value -->\n <mat-option *ngIf=\"allowStringValues && (inputValue$ | async)\" [value]=\"{ value: (inputValue$ | async) }\">\n <p class=\"dbx-clear-hint text-center\">\"{{ inputValue$ | async }}\"</p>\n </mat-option>\n <!-- Show clear value -->\n <mat-option *ngIf=\"showClearValue && (hasValue$ | async)\" value=\"\">\n <p class=\"dbx-clear-hint text-center\">Clear</p>\n </mat-option>\n</mat-autocomplete>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatListModule } from '@angular/material/list';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxSearchableChipFieldComponent } from './searchable.chip.field.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { DbxDefaultSearchableFieldDisplayComponent, DbxSearchableFieldAutocompleteItemComponent } from './searchable.field.autocomplete.item.component';\nimport { DbxSearchableTextFieldComponent } from './searchable.text.field.component';\nimport { DbxDatePipeModule, DbxInjectionComponentModule } from '@dereekb/dbx-core';\nimport { DbxRouterAnchorModule, DbxTextModule, DbxLoadingModule, DbxButtonModule } from '@dereekb/dbx-web';\n\n@NgModule({\n imports: [\n CommonModule,\n DbxTextModule,\n DbxLoadingModule,\n DbxButtonModule,\n FormsModule,\n MatButtonModule,\n MatInputModule,\n MatFormFieldModule,\n ReactiveFormsModule,\n MatAutocompleteModule,\n MatListModule,\n DbxDatePipeModule,\n DbxRouterAnchorModule,\n MatChipsModule,\n MatIconModule,\n DbxInjectionComponentModule,\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 declarations: [DbxSearchableChipFieldComponent, DbxSearchableTextFieldComponent, DbxSearchableFieldAutocompleteItemComponent, DbxDefaultSearchableFieldDisplayComponent],\n exports: [DbxSearchableChipFieldComponent, DbxSearchableTextFieldComponent]\n})\nexport class DbxFormFormlySearchableFieldModule {}\n","import { of } from 'rxjs';\nimport { LabeledFieldConfig } from '../../field';\nimport { SearchableValueFieldValue } from './searchable';\nimport { searchableChipField } from './searchable.field';\nimport { 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, LoadingState, isLoadingStateWithDefinedValue, isLoadingStateLoading, LoadingStateWithDefinedValue, startWithBeginLoading, SubscriptionObject, successResult, beginLoading, mapLoadingStateValueWithOperator, loadingStateContext, valueFromLoadingState, WorkUsingContext } from '@dereekb/rxjs';\nimport { Component, ElementRef, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { distinctUntilChanged, map, switchMap, shareReplay, startWith, mergeMap, scan, BehaviorSubject, tap, first, Observable, combineLatest, of } from 'rxjs';\nimport { addToSetCopy, asArray, convertMaybeToArray, filterMaybeValues, lastValue, makeValuesGroupMap, Maybe, mergeArrays, PrimativeKey, separateValues, setContainsAllValues, setsAreEquivalent, sortByStringFunction } from '@dereekb/util';\nimport { FieldType, FormlyFieldProps } from '@ngx-formly/material/form-field';\nimport { FieldTypeConfig } from '@ngx-formly/core';\nimport { SourceSelectValueMetaLoader, SourceSelectMetaValueReader, SourceSelectOpenFunction, SourceSelectLoadSourcesFunction, SourceSelectLoadSource, SourceSelectLoadSourceLoadingState, SourceSelectDisplayValue, SourceSelectValue, SourceSelectDisplayFunction, SourceSelectDisplayValueGroup, SourceSelectValueGroup, SourceSelectOptions, SourceSelectOpenSourceResult } from './sourceselect';\nimport { AbstractControl } from '@angular/forms';\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 templateUrl: 'sourceselect.field.component.html'\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 @ViewChild('button', { read: ElementRef, static: false })\n buttonElement!: ElementRef;\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 = filterMaybeValues(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(valueFromLoadingState(), shareReplay(1));\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 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\n if (openSource) {\n const origin = this.buttonElement.nativeElement;\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 <mat-option *ngFor=\"let value of nonGroupedValues$ | async\" [value]=\"value.value\">\n {{ value.label }}\n </mat-option>\n <mat-optgroup *ngFor=\"let optionGroup of groupedOptions$ | async\" [label]=\"optionGroup.label\">\n <mat-option *ngFor=\"let value of optionGroup.values\" [value]=\"value.value\">\n {{ value.label }}\n </mat-option>\n </mat-optgroup>\n </mat-select>\n <ng-container *ngIf=\"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 [iconOnly]=\"true\" [icon]=\"selectButtonIcon\"></dbx-button>\n </dbx-action>\n </ng-container>\n </div>\n <dbx-loading class=\"dbx-source-select-field-loading\" [linear]=\"true\" [context]=\"context\"></dbx-loading>\n</div>\n","import { PrimativeKey } from '@dereekb/util';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig, DescriptionFieldConfig, MaterialFormFieldConfig } from '../../field';\nimport { 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 { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxDatePipeModule } from '@dereekb/dbx-core';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatNativeDateModule } from '@angular/material/core';\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { DbxFormSourceSelectFieldComponent } from './sourceselect.field.component';\nimport { MatSelectModule } from '@angular/material/select';\nimport { DbxActionModule, DbxButtonModule, DbxLoadingModule } from '@dereekb/dbx-web';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n MatInputModule,\n MatDividerModule,\n MatFormFieldModule,\n MatSelectModule,\n MatButtonModule,\n MatDatepickerModule,\n MatNativeDateModule,\n MatMenuModule,\n ReactiveFormsModule,\n DbxDatePipeModule,\n DbxLoadingModule,\n DbxButtonModule,\n DbxActionModule,\n MatChipsModule,\n MatIconModule,\n FlexLayoutModule,\n FormlyModule.forChild({\n types: [{ name: 'sourceselectfield', component: DbxFormSourceSelectFieldComponent, wrappers: ['form-field'] }]\n })\n ],\n declarations: [DbxFormSourceSelectFieldComponent],\n exports: [DbxFormSourceSelectFieldComponent]\n})\nexport class DbxFormFormlySourceSelectModule {}\n","import { asObservable, ObservableOrValue } from '@dereekb/rxjs';\nimport { convertMaybeToArray, firstValue, LabeledValue, Maybe } from '@dereekb/util';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { map } from 'rxjs';\nimport { DescriptionFieldConfig, formlyField, FormlyValueParser, LabeledFieldConfig, 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 { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DbxFormFormlyPickableFieldModule } from './pickable/pickable.field.module';\nimport { DbxFormFormlySearchableFieldModule } from './searchable/searchable.field.module';\nimport { DbxFormFormlyDbxListFieldModule } from './list/list.field.module';\nimport { DbxFormFormlySourceSelectModule } from './sourceselect/sourceselect.field.module';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [],\n exports: [DbxFormFormlyDbxListFieldModule, DbxFormFormlyPickableFieldModule, DbxFormFormlySearchableFieldModule, DbxFormFormlySourceSelectModule]\n})\nexport class DbxFormFormlySelectionModule {}\n","import { FormGroup } from '@angular/forms';\nimport { CompactContextStore, mapCompactModeObs } from '@dereekb/dbx-web';\nimport { Component, OnDestroy, OnInit, inject } from '@angular/core';\nimport { FieldTypeConfig, FormlyFieldProps } from '@ngx-formly/core';\nimport { FieldType } from '@ngx-formly/material';\nimport { Editor } from 'ngx-editor';\nimport { debounceTime, filter } from 'rxjs';\nimport { SubscriptionObject } from '@dereekb/rxjs';\nimport { Maybe } from '@dereekb/util';\n\nexport type TextEditorComponentFieldProps = FormlyFieldProps;\n\n@Component({\n template: `\n <div class=\"dbx-texteditor-field\" [ngClass]=\"(compactClass$ | async) ?? ''\" [formGroup]=\"formGroup\">\n <span class=\"dbx-label\" *ngIf=\"label\">{{ label }}</span>\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 <div class=\"dbx-form-description\" *ngIf=\"description\">{{ description }}</div>\n </div>\n `\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 _sub = new SubscriptionObject();\n\n readonly compactClass$ = mapCompactModeObs(this._compactContextStore?.mode$, {\n compact: 'dbx-texteditor-field-compact'\n });\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 as 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 // Watch for value changes every second and update the pristine level.\n this._sub.subscription = this.editor.valueChanges\n .pipe(\n debounceTime(100),\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) {\n this.editor.destroy();\n delete this._editor;\n }\n this._sub.destroy();\n }\n}\n","import { DbxTextModule } from '@dereekb/dbx-web';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { NgxEditorModule } from 'ngx-editor';\nimport { DbxTextEditorFieldComponent } from './texteditor.field.component';\n\n@NgModule({\n imports: [\n CommonModule,\n DbxTextModule,\n FormsModule,\n ReactiveFormsModule,\n NgxEditorModule,\n MatFormFieldModule,\n MatInputModule,\n FormlyModule.forChild({\n types: [{ name: 'texteditor', component: DbxTextEditorFieldComponent }]\n })\n ],\n declarations: [DbxTextEditorFieldComponent],\n exports: []\n})\nexport class DbxFormFormlyTextEditorFieldModule {}\n","import { DescriptionFieldConfig, MaterialFormFieldConfig } from './../field';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig } from '../field';\nimport { 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 { CdkDragDrop } from '@angular/cdk/drag-drop';\nimport { Component, TrackByFunction } from '@angular/core';\nimport { asDecisionFunction, cachedGetter, DecisionFunction, FactoryWithRequiredInput, Getter, getValueFromGetter, IndexRef, makeGetter, Maybe } from '@dereekb/util';\nimport { FieldArrayTypeConfig, FieldArrayType, FormlyFieldConfig, FormlyFieldProps } from '@ngx-formly/core';\n\nexport interface DbxFormRepeatArrayPair<T = unknown> extends IndexRef {\n value?: T | undefined;\n}\n\nexport interface DbxFormRepeatArrayFieldConfigPair<T = unknown> extends Partial<DbxFormRepeatArrayPair<T>> {\n 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 labelForField?: string | FactoryWithRequiredInput<string, DbxFormRepeatArrayFieldConfigPair<T>>;\n /**\n * Text for the add button.\n */\n addText?: string;\n /**\n * Optional template function to create a new template when using the add button.\n */\n addTemplate?: DbxFormRepeatArrayAddTemplateFunction<T>;\n /**\n * Text for the duplicate button.\n */\n duplicateText?: string;\n /**\n * Text for the remove button.\n */\n removeText?: string;\n /**\n * Whethe or not to disable rearranging items.\n *\n * False by default.\n */\n disableRearrange?: boolean;\n /**\n * Wether or not to show the add button.\n *\n * True by default.\n */\n 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 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 allowRemove?: boolean | DecisionFunction<DbxFormRepeatArrayPair<T>>;\n /**\n * Adds the duplicate to the end of the values\n */\n 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 <div class=\"dbx-form-repeat-array-field\" cdkDrag cdkDragLockAxis=\"y\" *ngFor=\"let field of field.fieldGroup; trackBy: trackByFunction; let i = index; let last = last\">\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 <button class=\"dbx-form-repeat-array-drag-button\" *ngIf=\"!disableRearrange\" cdkDragHandle mat-stroked-button><mat-icon>drag_handle</mat-icon></button>\n <dbx-button-spacer></dbx-button-spacer>\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 <dbx-button *ngIf=\"allowDuplicate(i)\" [stroked]=\"true\" [text]=\"duplicateText\" (buttonClick)=\"duplicate(i)\"></dbx-button>\n <dbx-button-spacer></dbx-button-spacer>\n <dbx-button *ngIf=\"allowRemove(i)\" color=\"warn\" [stroked]=\"true\" [text]=\"removeText\" (buttonClick)=\"remove(i)\"></dbx-button>\n </dbx-bar>\n <formly-field class=\"dbx-form-repeat-array-field-content\" [field]=\"field\"></formly-field>\n </div>\n </div>\n <!-- Add Button -->\n <div class=\"dbx-form-repeat-array-footer\">\n <dbx-button *ngIf=\"allowAdd\" [raised]=\"true\" [disabled]=\"addItemDisabled\" [text]=\"addText\" (buttonClick)=\"addClicked()\"></dbx-button>\n </div>\n </dbx-subsection>\n </div>\n `\n})\nexport class DbxFormRepeatArrayTypeComponent<T = unknown> extends FieldArrayType<FieldArrayTypeConfig<DbxFormRepeatArrayConfig>> {\n private _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 _allowRemove: Getter<DecisionFunction<DbxFormRepeatArrayPair<T>>> = cachedGetter(() => {\n return asDecisionFunction(this.field.props.allowRemove, true);\n });\n\n private _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 readonly trackByFunction: TrackByFunction<FormlyFieldConfig> = (i, x) => {\n return x.key;\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 { MatIconModule } from '@angular/material/icon';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxFormRepeatArrayTypeComponent } from './array.field.component';\nimport { DbxButtonModule, DbxSectionLayoutModule, DbxBarLayoutModule } from '@dereekb/dbx-web';\nimport { MatButtonModule } from '@angular/material/button';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\n\n@NgModule({\n imports: [\n CommonModule,\n MatFormFieldModule,\n ReactiveFormsModule,\n MatDividerModule,\n MatButtonModule,\n MatIconModule,\n DragDropModule,\n DbxSectionLayoutModule,\n DbxBarLayoutModule,\n DbxButtonModule,\n FormlyModule.forChild({\n types: [{ name: 'repeatarray', component: DbxFormRepeatArrayTypeComponent }]\n })\n ],\n declarations: [DbxFormRepeatArrayTypeComponent],\n exports: []\n})\nexport class DbxFormFormlyArrayFieldModule {}\n","import { ArrayOrValue, asArray } from '@dereekb/util';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { FieldConfig, formlyField, propsAndConfigForFieldConfig } from '../../field';\nimport { 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';\n\n@NgModule({\n imports: [],\n declarations: [],\n exports: []\n})\nexport class DbxFormFormlyBooleanFieldModule {}\n","import { FormlyFieldConfig } from '@ngx-formly/core';\nimport { LabeledFieldConfig, formlyField, DefaultValueFieldConfig, DescriptionFieldConfig, propsAndConfigForFieldConfig, 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 { Getter, GetterOrValue, LogicalDate, Maybe, 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 { DateTimePresetConfiguration } from './datetime';\nimport { Injectable, InjectionToken, inject } from '@angular/core';\nimport { 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 _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 { DateTimezoneUtcNormalInstance, parseISO8601DayStringToDate, toJsDate, formatToISO8601DayStringForSystem, formatToISO8601DateString, isSameDateHoursAndMinutes, DateRangeWithDateOrStringValue, parseJsDateString } from '@dereekb/date';\nimport { ISO8601DayString, 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, filterMaybeValues, type DecisionFunction, type Milliseconds, type TimezoneString, type LogicalDate, type DateOrDayString, isISO8601DayStringStart, type MapFunction, mapIdentityFunction, MinuteOfDay, UnixDateTimeNumber, ISO8601DayString } from '@dereekb/util';\nimport { dateFromLogicalDate, DateTimeMinuteConfig, DateTimeMinuteInstance, guessCurrentTimezone, readableTimeStringToDate, toLocalReadableTimeString, utcDayForDate, safeToJsDate, findMinDate, findMaxDate, isSameDateHoursAndMinutes, getTimezoneAbbreviation, isSameDateDay, dateTimezoneUtcNormal, DateTimezoneUtcNormalInstance, toJsDayDate, isSameDate, dateTimeMinuteWholeDayDecisionFunction } from '@dereekb/date';\nimport { switchMap, shareReplay, map, startWith, tap, first, distinctUntilChanged, debounceTime, throttleTime, BehaviorSubject, Observable, combineLatest, Subject, merge, interval, of, combineLatestWith, filter, skip } from 'rxjs';\nimport { ChangeDetectorRef, Component, OnDestroy, OnInit, inject } from '@angular/core';\nimport { AbstractControl, FormControl, Validators, FormGroup, ValidationErrors } from '@angular/forms';\nimport { FieldType } from '@ngx-formly/material';\nimport { FieldTypeConfig, FormlyFieldProps } from '@ngx-formly/core';\nimport { MatDatepickerInputEvent } from '@angular/material/datepicker';\nimport { addMinutes, startOfDay, addDays } from 'date-fns';\nimport { asObservableFromGetter, filterMaybe, ObservableOrValueGetter, skipFirstMaybe, SubscriptionObject, switchMapMaybeDefault, switchMapMaybeObs } from '@dereekb/rxjs';\nimport { DateTimePreset, DateTimePresetConfiguration, dateTimePreset } from './datetime';\nimport { DbxDateTimeFieldMenuPresetsService } from './datetime.field.service';\nimport { DbxDateTimeValueMode, dbxDateTimeInputValueParseFactory, dbxDateTimeIsSameDateTimeFieldValue, dbxDateTimeOutputValueFactory } from './date.value';\nimport { FormControlPath, streamValueFromControl } from '../../../../form/form.angular.util';\nimport { toggleDisableFormControl } from '../../../../form/form';\nimport { ErrorStateMatcher } from '@angular/material/core';\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 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})\nexport class DbxDateTimeFieldComponent extends FieldType<FieldTypeConfig<DbxDateTimeFieldProps>> implements OnInit, OnDestroy {\n private readonly cdRef = inject(ChangeDetectorRef);\n private readonly dbxDateTimeFieldConfigService = inject(DbxDateTimeFieldMenuPresetsService);\n\n private _sub = new SubscriptionObject();\n private _valueSub = new SubscriptionObject();\n private _autoFillDateSync = new SubscriptionObject();\n\n private _config = new BehaviorSubject<Maybe<Observable<DbxDateTimePickerConfiguration>>>(undefined);\n readonly latestConfig$ = this._config.pipe(switchMapMaybeDefault(), distinctUntilChanged(), shareReplay(1));\n\n private _syncConfigObs = new BehaviorSubject<Maybe<Observable<ArrayOrValue<DbxDateTimeFieldSyncField>>>>(undefined);\n\n private _defaultTimezone = new BehaviorSubject<Maybe<Observable<Maybe<TimezoneString>>>>(undefined);\n private _timeDate = new BehaviorSubject<Maybe<Observable<Maybe<DbxDateTimeFieldTimeDateConfig | FormControlPath | DateOrDayString>>>>(undefined);\n private _presets = new BehaviorSubject<Observable<DateTimePresetConfiguration[]>>(of([]));\n\n private _fullDayInputCtrl?: FormControl;\n private _fullDayControlObs = new BehaviorSubject<Maybe<AbstractControl<boolean>>>(undefined);\n readonly fullDayControl$ = this._fullDayControlObs.pipe(filterMaybe());\n\n private _offset = new BehaviorSubject<number>(0);\n private _formControlObs = new BehaviorSubject<Maybe<AbstractControl<Maybe<Date>>>>(undefined);\n readonly formControl$ = this._formControlObs.pipe(filterMaybe());\n\n private _cleared = new Subject<void>();\n private _updateTime = new Subject<void>();\n\n private _resyncTimeInputSub = new SubscriptionObject();\n private _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 _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 | UnixDateTimeNumber>>(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 tap(() => this.cdRef.markForCheck()),\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(skipFirstMaybe())).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 = filterMaybeValues(\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 readonly rawDateTime$: Observable<Maybe<Date>> = combineLatest([\n this._config.pipe(\n first(),\n switchMap(() => (this.timeOnly ? of(null) : this.dateValue$))\n ),\n this.timeInput$.pipe(startWith(null)),\n this.fullDay$,\n this.timeDate$,\n this.isTimeCleared$\n ]).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(switchMapMaybeObs()), 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 presets$: Observable<DateTimePreset[]> = this._presets.pipe(\n switchMapMaybeObs(),\n map((x: DateTimePresetConfiguration[]) => x.map(dateTimePreset)),\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 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 skipFirstMaybe(),\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 = new FormControl(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 <div class=\"dbx-datetime-row\" fxFlex.lt-sm=\"100\" [fxFlex]=\"dateOnly ? '100' : '50'\" *ngIf=\"showDateInput$ | async\">\n <ng-container *ngTemplateOutlet=\"dateInputTemplate\"></ng-container>\n </div>\n <!-- Time -->\n <div class=\"dbx-datetime-row\" fxFlex.lt-sm=\"100\" [fxFlex]=\"(showDateInput$ | async) ? '50' : '100'\">\n <ng-container *ngIf=\"showTimeInput$ | async\">\n <ng-container *ngTemplateOutlet=\"timeMenuAndInputTemplate\"></ng-container>\n </ng-container>\n <div *ngIf=\"showAddTime$ | async\" 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 </div>\n <!-- Date Hint -->\n <ng-container [ngSwitch]=\"hasError$ | async\">\n <ng-container *ngSwitchCase=\"false\">\n <div *ngIf=\"!hideDateHint\" class=\"dbx-datetime-row dbx-datetime-hint-row\" fxFlex=\"100\">\n <div class=\"dbx-hint\">\n <ng-container [ngSwitch]=\"hasEmptyDisplayValue$ | async\">\n <ng-container *ngSwitchCase=\"true\">\n <span class=\"dbx-small\">No date/time set</span>\n </ng-container>\n <ng-container *ngSwitchCase=\"false\">\n <ng-container [ngSwitch]=\"fullDay$ | async\">\n <small *ngSwitchCase=\"true\">\n <b class=\"dbx-ok\">{{ allDayLabel }}</b>\n {{ displayValue$ | async | date: 'fullDate' }} {{ timezoneAbbreviation$ | async }} ({{ displayValue$ | async | dateDistance }})\n </small>\n <small *ngSwitchCase=\"false\">\n <ng-container *ngIf=\"displayValue$ | async\">\n <b class=\"dbx-ok\">{{ atTimeLabel }}</b>\n {{ displayValue$ | async | date: 'medium' }} {{ timezoneAbbreviation$ | async }} ({{ displayValue$ | async | timeDistance }})\n </ng-container>\n </small>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"true\">\n <mat-error *ngIf=\"currentErrorMessage$ | async\">{{ currentErrorMessage$ | async }}</mat-error>\n </ng-container>\n </ng-container>\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]=\"dateInputMin$ | async\" [max]=\"dateInputMax$ | async\" [matDatepicker]=\"picker\" [matDatepickerFilter]=\"(pickerFilter$ | async) || defaultPickerFilter\" (dateChange)=\"datePicked($event)\" [value]=\"dateValue$ | async\" (keydown)=\"keydownOnDateInput($event)\" />\n <mat-datepicker #picker></mat-datepicker>\n <button matPrefix class=\"dbx-datetime-row-button\" *ngIf=\"!hideDatePicker\" mat-icon-button (click)=\"picker.open()\" [disabled]=\"disabled\">\n <mat-icon>calendar_today</mat-icon>\n </button>\n <button matSuffix *ngIf=\"showClearButton$ | async\" 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 <span matTextSuffix *ngIf=\"!(showTimeInput$ | async)\">\n <ng-container *ngTemplateOutlet=\"timezoneSuffixTemplate\"></ng-container>\n </span>\n </mat-form-field>\n</ng-template>\n\n<!-- Time Menu/Input Template -->\n<ng-template #timeMenuAndInputTemplate>\n <mat-menu #timemenu=\"matMenu\">\n <ng-container *ngIf=\"timeMode === 'optional'\">\n <button mat-menu-item (click)=\"removeTime()\">\n <span>Remove Time</span>\n </button>\n <mat-divider></mat-divider>\n </ng-container>\n <ng-container *ngFor=\"let preset of presets$ | async\">\n <button mat-menu-item (click)=\"selectPreset(preset)\">{{ preset.label | getValue }}</button>\n </ng-container>\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 <mat-error *ngIf=\"timeInputCtrl.hasError('pattern')\">The input time is not recognizable.</mat-error>\n </mat-form-field>\n</ng-template>\n\n<!-- Timezone Suffix -->\n<ng-template #timezoneSuffixTemplate>\n <span *ngIf=\"showTimezone\" class=\"dbx-datetime-timezone dbx-faint\">{{ timezoneAbbreviation$ | async }}</span>\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, DateTimezoneUtcNormalInstance, dateTimezoneUtcNormal, DateRangeInput, DateRange, isSameDateDayRange, DateRangeWithDateOrStringValue, DateTimeMinuteConfig, dateRange, isDateInDateRange, clampDateRangeToDateRange, isSameDateRange, isSameDateDay, limitDateTimeInstance, dateTimeMinuteWholeDayDecisionFunction } from '@dereekb/date';\nimport { switchMap, shareReplay, map, startWith, distinctUntilChanged, debounceTime, throttleTime, BehaviorSubject, Observable, Subject, of, combineLatestWith, filter, combineLatest, scan, first, timer } from 'rxjs';\nimport { Component, ElementRef, Injectable, OnDestroy, OnInit, ViewChild, forwardRef, inject } from '@angular/core';\nimport { AbstractControl, FormControl, FormGroup } from '@angular/forms';\nimport { FieldType } from '@ngx-formly/material';\nimport { FieldTypeConfig, FormlyFieldProps } from '@ngx-formly/core';\nimport { MatDateRangeSelectionStrategy, MAT_DATE_RANGE_SELECTION_STRATEGY, DateRange as DatePickerDateRange, MatCalendar } from '@angular/material/datepicker';\nimport { asObservableFromGetter, filterMaybe, ObservableOrValueGetter, skipFirstMaybe, SubscriptionObject, switchMapMaybeDefault } from '@dereekb/rxjs';\nimport { DbxDateTimeValueMode, dbxDateRangeIsSameDateRangeFieldValue, dbxDateTimeInputValueParseFactory, dbxDateTimeOutputValueFactory } from './date.value';\nimport { DateTimePresetConfiguration } from './datetime';\nimport { DbxDateTimeFieldMenuPresetsService } from './datetime.field.service';\nimport { DateAdapter } from '@angular/material/core';\nimport { isBefore } from 'date-fns';\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 dateRangeInput: ObservableOrValueGetter<DbxFixedDateRangeDateRangeInput>;\n\n /**\n * Selection mode to use when picking dates on the calendar.\n */\n selectionMode?: Maybe<ObservableOrValueGetter<DbxFixedDateRangeSelectionMode>>;\n\n /**\n * Value mode for the dates in the output DateRange.\n *\n * Defaults to DATE\n */\n 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 fullDayInUTC?: boolean;\n\n /**\n * Custom picker configuration\n */\n pickerConfig?: ObservableOrValueGetter<DbxFixedDateRangePickerConfiguration>;\n\n /**\n * (Optional) The input timezone to default to.\n *\n * Ignored if fullDayInUTC is true.\n */\n timezone?: Maybe<ObservableOrValueGetter<Maybe<TimezoneString>>>;\n\n /**\n * Whether or not to display the timezone. True by default.\n */\n showTimezone?: boolean;\n\n /**\n * Custom presets to show in the dropdown.\n */\n presets?: ObservableOrValueGetter<DateTimePresetConfiguration[]>;\n\n /**\n * Whether or not to show the range input. Defaults to true.\n */\n 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 lastPickType?: Maybe<FixedDateRangeScanType>;\n /**\n * The latest date passed, if applicable.\n */\n lastDateRange?: Maybe<Partial<DateRange>>;\n /**\n * The generated boundary range.\n */\n boundary?: DateRange;\n /**\n * New Date Range\n */\n range?: DateRange;\n}\n\ntype SelectedDateEventType = 'calendar' | 'input';\n\ninterface SelectedDateEvent {\n type: SelectedDateEventType;\n 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})\nexport class DbxFixedDateRangeFieldComponent extends FieldType<FieldTypeConfig<DbxFixedDateRangeFieldProps>> implements OnInit, OnDestroy {\n private readonly dbxDateTimeFieldMenuPresetsService = inject(DbxDateTimeFieldMenuPresetsService);\n\n private _sub = new SubscriptionObject();\n\n private _inputRangeFormSub = new SubscriptionObject();\n private _inputRangeFormValueSub = new SubscriptionObject();\n\n private _dateRangeInputSub = new SubscriptionObject();\n private _currentSelectionModeSub = new SubscriptionObject();\n private _latestBoundarySub = new SubscriptionObject();\n private _disableEndSub = new SubscriptionObject();\n private _activeDateSub = new SubscriptionObject();\n\n private _currentDateRangeInput: Maybe<DbxFixedDateRangeDateRangeInput> = {};\n private _currentSelectionMode: DbxFixedDateRangeSelectionMode = 'single';\n private _latestBoundary: Maybe<DateRange> = null;\n\n private _config = new BehaviorSubject<Maybe<Observable<DbxFixedDateRangePickerConfiguration>>>(undefined);\n private _selectionMode = new BehaviorSubject<Maybe<Observable<DbxFixedDateRangeSelectionMode>>>(undefined);\n private _dateRangeInput = new BehaviorSubject<Maybe<Observable<DbxFixedDateRangeDateRangeInput>>>(undefined);\n\n private _timezone = new BehaviorSubject<Maybe<Observable<Maybe<TimezoneString>>>>(undefined);\n private _presets = new BehaviorSubject<Observable<DateTimePresetConfiguration[]>>(of([]));\n\n private _selectionEvent = new Subject<SelectedDateEvent>();\n readonly selectedDateRange$: Observable<Maybe<Partial<DateRange>>> = this._selectionEvent.pipe(map((x) => x.range));\n\n private _formControlObs = new BehaviorSubject<Maybe<AbstractControl<Maybe<DateRange>>>>(undefined);\n readonly formControl$ = this._formControlObs.pipe(filterMaybe());\n\n @ViewChild(MatCalendar)\n calendar!: MatCalendar<Date>;\n\n @ViewChild('startDateInput', { read: ElementRef })\n startDateInputElement!: ElementRef;\n\n @ViewChild('endDateInput', { read: ElementRef })\n endDateInputElement!: ElementRef;\n\n get currentDateRangeInput() {\n return this._currentDateRangeInput;\n }\n\n get currentSelectionMode() {\n return this._currentSelectionMode;\n }\n\n get latestBoundary() {\n return this._latestBoundary;\n }\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 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 skipFirstMaybe(),\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._currentSelectionMode = x));\n this._dateRangeInputSub.subscription = this.dateRangeInput$.subscribe((x) => (this._currentDateRangeInput = 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._currentSelectionMode !== '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 if (this._currentSelectionMode === 'single') {\n this.setDateRange(x?.start ? { start: x.start } : null, 'input');\n } else {\n let rangeToSet: Maybe<Partial<DateRange>> = x;\n\n if (this._currentSelectionMode === 'arbitrary_quick' && this._latestBoundary && x?.start && x?.end) {\n if (!isDateInDateRange(x.start, this._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._currentDateRangeInput, 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._latestBoundarySub.subscription = this.latestBoundary$.subscribe((x) => (this._latestBoundary = x));\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._currentDateRangeInput, 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 { currentSelectionMode } = this.dbxFixedDateRangeFieldComponent;\n if (activeDate != null && currentSelectionMode !== 'single') {\n const latestBoundary = this.dbxFixedDateRangeFieldComponent.latestBoundary;\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]=\"calendarSelection$ | async\" [dateFilter]=\"(pickerFilter$ | async) || defaultPickerFilter\" [minDate]=\"min$ | async\" [maxDate]=\"max$ | async\" (selectedChange)=\"selectedChange($event)\"></mat-calendar>\n <mat-form-field class=\"dbx-fixeddaterange-field-input\" appearance=\"fill\">\n <mat-date-range-input *ngIf=\"showRangeInput\" [formGroup]=\"inputRangeForm\">\n <input #startDateInput matStartDate formControlName=\"start\" placeholder=\"Start date\" />\n <input #endDateInput [ngClass]=\"(endDisabled$ | async) ? 'dbx-fixeddaterange-field-input-end' : ''\" [attr.tabindex]=\"(endDisabled$ | async) ? -1 : 0\" matEndDate formControlName=\"end\" placeholder=\"End date\" />\n </mat-date-range-input>\n </mat-form-field>\n <mat-error *ngIf=\"formControl.hasError('required')\">Date range is required</mat-error>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxDateTimeFieldComponent } from './datetime.field.component';\nimport { DbxDatePipeModule, DbxValuePipeModule } from '@dereekb/dbx-core';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatNativeDateModule } from '@angular/material/core';\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { DbxFormFormlyWrapperModule } from '../../wrapper/form.wrapper.module';\nimport { DbxButtonModule } from '@dereekb/dbx-web';\nimport { DbxFixedDateRangeFieldComponent } from './fixeddaterange.field.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n MatInputModule,\n MatDividerModule,\n MatFormFieldModule,\n DbxButtonModule,\n MatButtonModule,\n MatDatepickerModule,\n MatNativeDateModule,\n MatMenuModule,\n ReactiveFormsModule,\n DbxDatePipeModule,\n DbxValuePipeModule,\n MatChipsModule,\n MatIconModule,\n FlexLayoutModule,\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 declarations: [DbxDateTimeFieldComponent, DbxFixedDateRangeFieldComponent],\n exports: [DbxFormFormlyWrapperModule]\n})\nexport class DbxFormFormlyDateFieldModule {}\n","import { DbxFormStyleWrapperConfig } from './style.wrapper.component';\nimport { DbxFlexWrapperConfig } from './flex.wrapper.component';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { DbxFormToggleWrapperConfig } from './toggle.wrapper.component';\nimport { DbxFormSectionConfig } from './section.wrapper.component';\nimport { DbxFormSubsectionConfig } from './subsection.wrapper.component';\nimport { DbxFormInfoConfig } from './info.wrapper.component';\nimport { DbxFormExpandWrapperConfig } from './expand.wrapper.component';\nimport { DbxFlexSize } from '@dereekb/dbx-web';\nimport { 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","import { Observable, of } from 'rxjs';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig, DescriptionFieldConfig, MaterialFormFieldConfig } from '../../field';\nimport { DbxDateTimeFieldProps, DbxDateTimeFieldTimeMode, DbxDateTimePickerConfiguration } from './datetime.field.component';\nimport { flexLayoutWrapper } from '../../wrapper/wrapper';\nimport { Maybe } from '@dereekb/util';\nimport { 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 { 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 { AbstractControl, ValidationErrors, 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, 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 { AbstractControl, ValidatorFn } from '@angular/forms';\nimport { KeyValueTupleFilter, allObjectsAreEqual, EqualityComparatorFunction, KeyValueTypleValueFilter, 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 { AbstractControl, ValidationErrors, 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, Observable, of, catchError } from 'rxjs';\nimport { AbstractControl, 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 { AbstractControl, ValidationErrors, 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 { ValidatorFn } from '@angular/forms';\nimport { concatArrays, TransformNumberFunctionConfigRef, transformNumberFunction, mapMaybeFunction, DOLLAR_AMOUNT_PRECISION } from '@dereekb/util';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { isDivisibleBy } from '../../../../validator';\nimport { AttributesFieldConfig, LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig, DescriptionFieldConfig, validatorsForFieldConfig, FieldConfigParsersRef, FormlyValueParser, MaterialFormFieldConfig } from '../../field';\n\nexport interface NumberFieldNumberConfig {\n min?: number;\n max?: number;\n step?: number;\n enforceStep?: boolean;\n}\n\nexport type NumberFieldInputType = 'number';\n\nexport interface NumberFieldConfig extends LabeledFieldConfig, DescriptionFieldConfig, NumberFieldNumberConfig, AttributesFieldConfig, Partial<TransformNumberFunctionConfigRef>, MaterialFormFieldConfig {\n 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\nexport interface NumberSliderFieldConfig extends NumberFieldConfig {\n /**\n * Max value. Required for the slider.\n */\n max: number;\n /**\n * Whether or not to show the thumb label while sliding. Defaults to true.\n */\n thumbLabel?: boolean;\n /**\n * Whether or not to invert the selection line.\n */\n 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 tickInterval?: false | number;\n /**\n * Custom display with function for the thumbLabel.\n */\n 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\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 thumbLabel: inputThumbLabel ?? true,\n showTickMarks: Boolean(tickInterval),\n tickInterval,\n displayWith\n }),\n ...validatorsForFieldConfig({\n validators\n }),\n parsers\n });\n}\n\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 } });\n}\n","import { FormlyMaterialModule } from '@ngx-formly/material';\nimport { FormlyMatSliderModule } from '@ngx-formly/material/slider';\nimport { NgModule } from '@angular/core';\nimport { DbxFormFormlyWrapperModule } from '../../wrapper/form.wrapper.module';\n\n@NgModule({\n imports: [FormlyMaterialModule, FormlyMatSliderModule],\n declarations: [],\n exports: [DbxFormFormlyWrapperModule]\n})\nexport class DbxFormFormlyNumberFieldModule {}\n","import { Component } from '@angular/core';\nimport { FieldType } from '@ngx-formly/material'; // extend FieldType from Material, not core!\nimport { FieldTypeConfig, FormlyFieldProps } from '@ngx-formly/core';\nimport { E164PhoneNumber, E164PhoneNumberExtensionPair, Maybe, e164PhoneNumberExtensionPair, e164PhoneNumberFromE164PhoneNumberExtensionPair, objectHasNoKeys } from '@dereekb/util';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { SubscriptionObject } from '@dereekb/rxjs';\nimport { combineLatest, distinctUntilChanged, map, startWith } from 'rxjs';\nimport { isPhoneExtension } from '../../../../validator/phone';\n\nexport interface InternationalPhoneFormlyFieldProps extends FormlyFieldProps {\n preferredCountries?: Maybe<string[]>;\n onlyCountries?: Maybe<string[]>;\n /**\n * Whether or not to allow adding an extension. False by default.\n */\n allowExtension?: boolean;\n}\n\nexport const DEFAULT_PREFERRED_COUNTRIES = ['us'];\n\n@Component({\n templateUrl: 'phone.field.component.html'\n})\nexport class DbxPhoneFieldComponent extends FieldType<FieldTypeConfig<InternationalPhoneFormlyFieldProps>> {\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 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 }\n}\n","<div class=\"dbx-form-phone-field\" [formGroup]=\"inputFormGroup\">\n <ngx-mat-intl-tel-input class=\"dbx-form-phone-field-phone-content\" [required]=\"required\" [preferredCountries]=\"preferredCountries\" [enablePlaceholder]=\"false\" name=\"phone\" [formControl]=\"phoneCtrl\"></ngx-mat-intl-tel-input>\n <div *ngIf=\"allowExtension\" class=\"dbx-form-phone-field-extension-content\">\n <span class=\"dbx-hint dbx-button-spacer\">Ext.</span>\n <input class=\"dbx-form-phone-field-extension-input\" placeholder=\"123\" minlength=\"0\" maxlength=\"6\" #extensionInput [formControl]=\"extensionCtrl\" />\n </div>\n</div>\n","import { MatFormFieldModule } from '@angular/material/form-field';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxPhoneFieldComponent } from './phone.field.component';\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\nimport { FormlyMatFormFieldModule } from '@ngx-formly/material/form-field';\nimport { NgxMatIntlTelInputComponent } from 'ngx-mat-intl-tel-input';\n\n@NgModule({\n imports: [\n CommonModule,\n MatInputModule,\n MatFormFieldModule,\n FormsModule,\n ReactiveFormsModule,\n MatAutocompleteModule,\n MatChipsModule,\n MatIconModule,\n FlexLayoutModule,\n FormlyMatFormFieldModule,\n FormlyModule.forChild({\n types: [{ name: 'intphone', component: DbxPhoneFieldComponent, wrappers: ['form-field'] }]\n }),\n NgxMatIntlTelInputComponent\n ],\n declarations: [DbxPhoneFieldComponent],\n exports: []\n})\nexport class DbxFormFormlyPhoneFieldModule {}\n","import { concatArrays, mapMaybeFunction, transformStringFunction, TransformStringFunctionConfig, TransformStringFunctionConfigRef } from '@dereekb/util';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { AttributesFieldConfig, LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig, DescriptionFieldConfig, FormlyValueParser, FieldConfigParsersRef, 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 { DbxFormSectionConfig } from '../../wrapper/section.wrapper.component';\nimport { sectionWrapper, flexLayoutWrapper } from '../../wrapper/wrapper';\nimport { textField, TextFieldConfig } from '../text/text.field';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig, validatorsForFieldConfig } from '../../field';\nimport { InternationalPhoneFormlyFieldProps } from './phone.field.component';\nimport { repeatArrayField, 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, 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 allowExtension,\n preferredCountries,\n onlyCountries\n }),\n ...validatorsForFieldConfig({\n validators: [isE164PhoneNumber(allowExtension)]\n })\n });\n\n return fieldConfig;\n}\n\nexport interface WrappedPhoneAndLabelFieldConfig {\n phoneField?: Partial<InternationalPhoneFieldConfig>;\n 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 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 { FormlyFieldConfig } from '@ngx-formly/core';\nimport { Validators, AbstractControl } from '@angular/forms';\nimport { TextFieldConfig, textField } from './text.field';\nimport { LabeledFieldConfig, 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\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\nexport interface EmailFieldConfig extends Partial<LabeledFieldConfig>, DescriptionFieldConfig {\n 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\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\nexport interface StateFieldConfig extends Partial<TextFieldConfig> {\n 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\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\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\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 { FormlyFieldConfig } from '@ngx-formly/core';\nimport { textField, TextFieldConfig } from './text.field';\nimport { cityField, CityFieldConfig, countryField, CountryFieldConfig, stateField, StateFieldConfig, zipCodeField, ZipCodeFieldConfig } from './text.additional.field';\nimport { flexLayoutWrapper, sectionWrapper } from '../../wrapper/wrapper';\nimport { FieldConfig } from '../../field';\nimport { repeatArrayField } from '../array/array.field';\nimport { DbxFormSectionConfig } from '../../wrapper/section.wrapper.component';\nimport { ADDRESS_LINE_MAX_LENGTH } from '@dereekb/model';\n\nexport interface AddressFormlyFieldsConfig {\n line1Field?: CityFieldConfig;\n line2Field?: CityFieldConfig;\n cityField?: CityFieldConfig;\n stateField?: StateFieldConfig;\n zipCodeField?: ZipCodeFieldConfig;\n countryField?: CountryFieldConfig;\n /**\n * Whether or not to make required fields required.\n *\n * True by default.\n */\n requiredFields?: boolean;\n /**\n * Whether or not to include the second address line.\n *\n * True by default.\n */\n includeLine2?: boolean;\n /**\n * Whether or not to include the country.\n *\n * True by default.\n */\n includeCountry?: boolean;\n}\n\nexport interface AddressLineFieldConfig extends Partial<TextFieldConfig> {\n 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 { requiredFields = true, includeLine2 = true, includeCountry = true } = config;\n\n const singleLineFields = [\n {\n field: cityField({ required: requiredFields, ...config.cityField })\n },\n {\n field: stateField({ required: requiredFields, ...config.stateField })\n },\n {\n field: zipCodeField({ required: requiredFields, ...config.zipCodeField })\n }\n ];\n\n if (includeCountry) {\n singleLineFields.push({\n field: countryField({ required: requiredFields, ...config.countryField })\n });\n }\n\n let lines: FormlyFieldConfig[];\n\n if (includeLine2) {\n lines = [addressLineField({ required: requiredFields, ...config.line1Field, line: 1 }), addressLineField({ ...config.line2Field, line: 2 })];\n } else {\n lines = [addressLineField({ required: requiredFields, ...config.line1Field, line: 0 })];\n }\n\n return [...lines, flexLayoutWrapper(singleLineFields, { size: 1, relative: true })];\n}\n\nexport interface AddressFieldConfig extends 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\nexport interface AddressListFieldConfig extends FieldConfig, AddressFormlyFieldsConfig {\n 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/form.wrapper.module';\n\n@NgModule({\n imports: [FormlyMaterialModule],\n declarations: [],\n exports: [DbxFormFormlyWrapperModule]\n})\nexport class DbxFormFormlyTextFieldModule {}\n","import { FormlyFieldConfig } from '@ngx-formly/core';\nimport { 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 { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DbxFormFormlyArrayFieldModule } from './array/array.field.module';\nimport { DbxFormFormlyBooleanFieldModule } from './boolean/boolean.field.module';\nimport { DbxFormFormlyPhoneFieldModule } from './phone/phone.field.module';\nimport { DbxFormFormlyDateFieldModule } from './date/date.field.module';\nimport { DbxFormFormlyTextFieldModule } from './text/text.field.module';\nimport { DbxFormFormlyNumberFieldModule } from './number/number.field.module';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [],\n exports: [DbxFormFormlyArrayFieldModule, DbxFormFormlyBooleanFieldModule, DbxFormFormlyDateFieldModule, DbxFormFormlyPhoneFieldModule, DbxFormFormlyNumberFieldModule, DbxFormFormlyTextFieldModule]\n})\nexport class DbxFormFormlyValueModule {}\n","import { DbxFormFormlyTextEditorFieldModule } from './texteditor/texteditor.field.module';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DbxFormFormlyChecklistItemFieldModule } from './checklist/checklist.item.field.module';\nimport { DbxFormFormlyComponentFieldModule } from './component/component.field.module';\nimport { DbxFormFormlySelectionModule } from './selection/selection.module';\nimport { DbxFormFormlyWrapperModule } from './wrapper/form.wrapper.module';\nimport { DbxFormFormlyValueModule } from './value/value.module';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [],\n exports: [DbxFormFormlyChecklistItemFieldModule, DbxFormFormlyComponentFieldModule, DbxFormFormlySelectionModule, DbxFormFormlyTextEditorFieldModule, DbxFormFormlyValueModule, DbxFormFormlyWrapperModule]\n})\nexport class DbxFormFormlyFieldModule {}\n","import { Provider } from '@angular/core';\nimport { BehaviorSubject, Observable, of, switchMap, shareReplay, distinctUntilChanged } from 'rxjs';\nimport { DbxForm, DbxFormDisabledKey, DbxFormEvent, DbxFormState, DbxMutableForm, DEFAULT_FORM_DISABLED_KEY, provideDbxMutableForm } from '../form/form';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { LockSet, filterMaybe } from '@dereekb/rxjs';\nimport { BooleanStringKeyArray, BooleanStringKeyArrayUtility, 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 [\n {\n provide: DbxFormlyContext,\n useClass: DbxFormlyContext\n },\n ...provideDbxMutableForm(DbxFormlyContext)\n ];\n}\n\n/**\n * DbxForm Instance that registers a delegate and manages the state of that form/delegate.\n */\nexport class DbxFormlyContext<T = unknown> implements DbxForm<T> {\n private static INITIAL_STATE: DbxFormEvent = { isComplete: false, state: DbxFormState.INITIALIZING, status: 'PENDING' };\n\n readonly lockSet = new LockSet();\n\n private _fields = new BehaviorSubject<Maybe<FormlyFieldConfig[]>>(undefined);\n private _initialValue = new BehaviorSubject<Maybe<Partial<T>>>(undefined);\n private _disabled = new BehaviorSubject<BooleanStringKeyArray>(undefined);\n private _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 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 { SubscriptionObject, filterMaybe } from '@dereekb/rxjs';\nimport { Observable, BehaviorSubject, shareReplay, distinctUntilChanged } from 'rxjs';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { OnInit, OnDestroy, Directive, Input, inject } from '@angular/core';\nimport { DbxFormlyContext } from './formly.context';\nimport { Maybe } from '@dereekb/util';\nimport { DbxFormDisabledKey } from '../form/form';\n\n/**\n * Abstract component for wrapping a form.\n */\n@Directive()\nexport abstract class AbstractFormlyFormDirective<T> implements OnDestroy {\n readonly context = inject(DbxFormlyContext<T>);\n\n @Input()\n get disabled(): boolean {\n return this.context.isDisabled();\n }\n\n set disabled(disabled: boolean) {\n this.context.setDisabled(undefined, disabled);\n }\n\n ngOnDestroy(): void {\n this.context.destroy();\n }\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, OnDestroy {\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, OnDestroy {\n /**\n * Used to provide fields to the context.\n */\n abstract readonly fields$: Observable<Maybe<FormlyFieldConfig[]>>;\n\n private _fieldsSub = new SubscriptionObject();\n\n ngOnInit(): void {\n this._fieldsSub.subscription = this.fields$.pipe(distinctUntilChanged()).subscribe((fields) => {\n this.context.fields = fields;\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._fieldsSub.destroy();\n }\n}\n\n@Directive()\nexport abstract class AbstractConfigAsyncFormlyFormDirective<T, C> extends AbstractAsyncFormlyFormDirective<T> implements OnInit, OnDestroy {\n private readonly _config = new BehaviorSubject<Maybe<C>>(undefined);\n\n readonly currentConfig$ = this._config.asObservable();\n readonly config$ = this._config.pipe(filterMaybe(), shareReplay(1));\n\n @Input()\n get config(): Maybe<C> {\n return this._config.value;\n }\n\n set config(config: Maybe<C>) {\n this._config.next(config);\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._config.complete();\n }\n}\n","import { Maybe } from '@dereekb/util';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { MaterialFormFieldConfig, textField } from '../field';\n\nexport interface DbxFormSearchFormFieldsValue {\n search: string;\n}\n\nexport interface DbxFormSearchFormFieldsConfig extends MaterialFormFieldConfig {\n label?: string;\n 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 { Component, OnDestroy, OnInit, inject } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { FormlyFieldConfig, FormlyFormOptions } from '@ngx-formly/core';\nimport { distinctUntilChanged, map, throttleTime, startWith, BehaviorSubject, Observable, Subject, switchMap, shareReplay, of, scan, filter, timer, first, merge, delay } from 'rxjs';\nimport { AbstractSubscriptionDirective } from '@dereekb/dbx-core';\nimport { DbxForm, DbxFormDisabledKey, DbxFormEvent, DbxFormState, DEFAULT_FORM_DISABLED_KEY, provideDbxMutableForm, toggleDisableFormControl } from '../form/form';\nimport { DbxFormlyContext, DbxFormlyContextDelegate, DbxFormlyInitialize } from './formly.context';\nimport { scanCount, switchMapMaybeObs, SubscriptionObject } from '@dereekb/rxjs';\nimport { BooleanStringKeyArray, BooleanStringKeyArrayUtility, iterablesAreSetEquivalent, Maybe } from '@dereekb/util';\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\" [fields]=\"(fields$ | async) ?? []\" [model]=\"model\"></formly-form>\n </form>\n `,\n providers: provideDbxMutableForm(DbxFormlyFormComponent),\n host: {\n class: 'dbx-formly'\n }\n})\nexport class DbxFormlyFormComponent<T> extends AbstractSubscriptionDirective implements DbxForm, DbxFormlyContextDelegate<T>, OnInit, OnDestroy {\n private readonly _dbxFormlyContext = inject(DbxFormlyContext<T>);\n\n private _fields = new BehaviorSubject<Maybe<Observable<FormlyFieldConfig[]>>>(undefined);\n private _events = new BehaviorSubject<DbxFormEvent>({ isComplete: false, state: DbxFormState.INITIALIZING, status: 'PENDING' });\n private _disabled = new BehaviorSubject<BooleanStringKeyArray>(undefined);\n\n private _reset = new BehaviorSubject<Date>(new Date());\n private _forceUpdate = new Subject<void>();\n\n private _disabledSub = new SubscriptionObject();\n private _enforceDisabledSub = new SubscriptionObject();\n\n readonly form = new FormGroup({});\n\n model: T = {} as T;\n options: FormlyFormOptions = {};\n\n readonly fields$ = this._fields.pipe(switchMapMaybeObs(), 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 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 override ngOnDestroy(): void {\n this._dbxFormlyContext.lockSet.onNextUnlock(() => {\n super.ngOnDestroy();\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 // 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 // console.log('set value: ', value);\n this.model = 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 { Component, Output, EventEmitter, OnDestroy } from '@angular/core';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { map, Observable } from 'rxjs';\nimport { provideFormlyContext } from '../formly.context';\nimport { AbstractConfigAsyncFormlyFormDirective } from '../formly.directive';\nimport { dbxFormSearchFormFields, DbxFormSearchFormFieldsConfig, DbxFormSearchFormFieldsValue } from './form.form';\n\n@Component({\n template: `\n <dbx-formly (dbxFormValueChange)=\"searchChanged($event)\"></dbx-formly>\n `,\n selector: 'dbx-form-search-form',\n providers: [provideFormlyContext()],\n host: {\n class: 'd-block dbx-form-search-form'\n }\n})\nexport class DbxFormSearchFormComponent extends AbstractConfigAsyncFormlyFormDirective<DbxFormSearchFormFieldsValue, DbxFormSearchFormFieldsConfig> implements OnDestroy {\n @Output()\n readonly search = new EventEmitter<string>();\n\n readonly fields$: Observable<FormlyFieldConfig[]> = this.currentConfig$.pipe(map(dbxFormSearchFormFields));\n\n searchChanged(value: DbxFormSearchFormFieldsValue) {\n this.search.next(value.search ?? '');\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this.search.complete();\n }\n}\n","import { FormlyFieldConfig } from '@ngx-formly/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { Directive, OnDestroy, Input } from '@angular/core';\nimport { provideFormlyContext } from './formly.context';\nimport { AbstractAsyncFormlyFormDirective } from './formly.directive';\nimport { Maybe } from '@dereekb/util';\n\n/**\n * Provides an DbxFormlyContext and has an input for fields.\n */\n@Directive({\n selector: '[dbxFormlyFields]',\n providers: provideFormlyContext()\n})\nexport class DbxFormlyFieldsContextDirective<T = unknown> extends AbstractAsyncFormlyFormDirective<T> implements OnDestroy {\n private _fields = new BehaviorSubject<Maybe<FormlyFieldConfig[]>>(undefined);\n readonly fields$ = this._fields.asObservable();\n\n @Input('dbxFormlyFields')\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 override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._fields.complete();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { DbxFormlyFormComponent } from './formly.form.component';\nimport { FormlyMatToggleModule } from '@ngx-formly/material/toggle';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxFormlyFieldsContextDirective } from './formly.context.directive';\n\n@NgModule({\n imports: [CommonModule, FormsModule, ReactiveFormsModule, FormlyModule, FormlyMatToggleModule],\n declarations: [DbxFormlyFormComponent, DbxFormlyFieldsContextDirective],\n exports: [\n // Modules (?)\n FormsModule,\n ReactiveFormsModule,\n // Directives\n DbxFormlyFormComponent,\n DbxFormlyFieldsContextDirective\n // Helper Modules\n ]\n})\nexport class DbxFormlyModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DbxFormSearchFormComponent } from './search.form.component';\nimport { DbxFormlyModule } from '../formly.module';\nimport { DbxFormModule } from '../../form/form.module';\nimport { DbxFormFormlyFieldModule } from '../field';\n\n@NgModule({\n imports: [CommonModule, DbxFormModule, DbxFormlyModule, DbxFormFormlyFieldModule],\n declarations: [DbxFormSearchFormComponent],\n exports: [DbxFormSearchFormComponent]\n})\nexport class DbxFormFormlyFormModule {}\n","import { TextFieldConfig, textField } from '../field/value/text/text.field';\nimport { EmailFieldConfig, emailField } from '../field/value/text/text.additional.field';\nimport { fieldValuesAreEqualValidator } from '../../validator/field';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { capitalizeFirstLetter, 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 * @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 password?: TextPasswordFieldConfig;\n 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 email?: Omit<EmailFieldConfig, 'key'>;\n username?: Omit<TextFieldConfig, 'key'>;\n}\n\n/**\n * usernamePasswordLoginFields() configuration.\n */\nexport interface UsernameLoginFieldsConfig {\n username: 'email' | 'username' | UsernameLoginFieldUsernameConfig;\n password?: TextPasswordFieldConfig;\n verifyPassword?: Maybe<boolean | TextPasswordFieldConfig>;\n}\n\n/**\n * Value type exported by usernameLoginFields()\n */\nexport interface DefaultUsernameLoginFieldsValue {\n username: string;\n password: string;\n 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 let usernameField: FormlyFieldConfig;\n let usernameFieldConfig: UsernameLoginFieldUsernameConfig = username as UsernameLoginFieldUsernameConfig;\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.username, ...defaultUsernameFieldConfig });\n } else {\n usernameField = textField({ ...usernameFieldConfig.username, ...defaultUsernameFieldConfig });\n }\n\n const passwordField = verifyPassword ? textPasswordWithVerifyFieldGroup({ password, verifyPassword: verifyPassword === true ? undefined : verifyPassword }) : textPasswordField(password);\n\n return [usernameField, passwordField];\n}\n","import { FormlyFieldConfig } from '@ngx-formly/core';\nimport { FieldValueIsAvailableValidatorConfig, fieldValueIsAvailableValidator } from '../../validator/available';\nimport { textField, TextFieldConfig } from '../field/value/text/text.field';\nimport { workingWrapper } from '../field/wrapper/wrapper';\n\nexport interface TextAvailableFieldConfig extends TextFieldConfig, Omit<FieldValueIsAvailableValidatorConfig<string>, 'message'> {\n 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 { type TimezoneString } from '@dereekb/util';\nimport { allTimezoneInfos, searchTimezoneInfos, TimezoneInfo, timezoneInfoForSystem } from '@dereekb/date';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { Observable, of } from 'rxjs';\nimport { SearchableValueFieldStringSearchFn, SearchableValueFieldValue, SearchableValueFieldDisplayFn, SearchableValueFieldDisplayValue } from '../field/selection/searchable';\nimport { searchableTextField, 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 { Component } from '@angular/core';\n\n/**\n * Provides vertical spacing after a form.\n */\n@Component({\n selector: 'dbx-form-spacer',\n template: `\n <div class=\"dbx-form-spacer\"></div>\n `\n})\nexport class DbxFormSpacerComponent {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DbxFormSpacerComponent } from './form.spacer.component';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [DbxFormSpacerComponent],\n exports: [DbxFormSpacerComponent]\n})\nexport class DbxFormLayoutModule {}\n","import { NgModule } from '@angular/core';\nimport { DbxFormlyModule } from './formly/formly.module';\nimport { DbxFormModule } from './form/form.module';\nimport { DbxFormFormlyFieldModule } from './formly/field/form.field.module';\nimport { DbxFormFormlyFormModule } from './formly/form/form.form.module';\n\n@NgModule({\n exports: [DbxFormModule, DbxFormlyModule, DbxFormFormlyFieldModule, DbxFormFormlyFormModule]\n})\nexport class DbxFormExtensionModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i3","i4","i5","i6","i7","i1","i2","FieldType","i8","i8.DbxSearchableFieldAutocompleteItemComponent","i7.DbxSearchableFieldAutocompleteItemComponent","TIME_OUTPUT_THROTTLE_TIME","i9","i11","i12","DatePickerDateRange","isE164PhoneNumberFunction","i1.DbxFormValueChangesDirective","i2.DbxFormlyFormComponent"],"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/form/action/transition/form.action.transition.module.ts","../../../../packages/dbx-form/src/lib/form/action/form.action.module.ts","../../../../packages/dbx-form/src/lib/form/io/form.input.directive.ts","../../../../packages/dbx-form/src/lib/form/io/form.loading.directive.ts","../../../../packages/dbx-form/src/lib/form/io/form.changes.directive.ts","../../../../packages/dbx-form/src/lib/form/io/form.io.module.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/form.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/selection/selection.module.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/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/value/value.module.ts","../../../../packages/dbx-form/src/lib/formly/field/form.field.module.ts","../../../../packages/dbx-form/src/lib/formly/formly.context.ts","../../../../packages/dbx-form/src/lib/formly/formly.directive.ts","../../../../packages/dbx-form/src/lib/formly/form/form.form.ts","../../../../packages/dbx-form/src/lib/formly/formly.form.component.ts","../../../../packages/dbx-form/src/lib/formly/form/search.form.component.ts","../../../../packages/dbx-form/src/lib/formly/formly.context.directive.ts","../../../../packages/dbx-form/src/lib/formly/formly.module.ts","../../../../packages/dbx-form/src/lib/formly/form/form.form.module.ts","../../../../packages/dbx-form/src/lib/formly/template/login.ts","../../../../packages/dbx-form/src/lib/formly/template/available.ts","../../../../packages/dbx-form/src/lib/formly/template/timezone.ts","../../../../packages/dbx-form/src/lib/layout/form.spacer.component.ts","../../../../packages/dbx-form/src/lib/layout/form.layout.module.ts","../../../../packages/dbx-form/src/lib/form.module.ts","../../../../packages/dbx-form/src/dereekb-dbx-form.ts"],"sourcesContent":["import { forwardRef, Provider, Type } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { LockSet } from '@dereekb/rxjs';\nimport { BooleanStringKeyArray, type Maybe } from '@dereekb/util';\nimport { AbstractControl, 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, OnInit, OnDestroy, Input, inject } from '@angular/core';\nimport { addSeconds, isPast } from 'date-fns';\nimport { Observable, of, combineLatest, exhaustMap, catchError, delay, filter, first, map, switchMap, BehaviorSubject, distinctUntilChanged } from 'rxjs';\nimport { DbxActionContextStoreSourceInstance, DbxActionValueOnTriggerResult } from '@dereekb/dbx-core';\nimport { SubscriptionObject, LockSet, IsModifiedFunction, IsValidFunction, ObservableOrValue, asObservable } from '@dereekb/rxjs';\nimport { DbxFormState, DbxMutableForm } from '../../form/form';\nimport { MapFunction } from '@dereekb/util';\n\nexport const APP_ACTION_FORM_DISABLED_KEY = 'dbx_action_form';\n\nexport type DbxActionFormMapValueFunction<T, O> = MapFunction<T, ObservableOrValue<DbxActionValueOnTriggerResult<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})\nexport class DbxActionFormDirective<T = object, O = T> implements OnInit, OnDestroy {\n readonly form = inject(DbxMutableForm<T>, { host: true });\n readonly source = inject(DbxActionContextStoreSourceInstance<O, unknown>);\n\n readonly lockSet = new LockSet();\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 @Input()\n dbxActionFormValidator?: IsValidFunction<T>;\n\n /**\n * Optional function that checks whether or not the value has been modified.\n */\n @Input()\n dbxActionFormModified?: IsModifiedFunction<T>;\n\n /**\n * Optional function that maps the form's value to the source's value.\n */\n @Input()\n dbxActionFormMapValue?: DbxActionFormMapValueFunction<T, O>;\n\n private _formDisabledWhileWorking = new BehaviorSubject<boolean>(true);\n\n private _triggeredSub = new SubscriptionObject();\n private _isCompleteSub = new SubscriptionObject();\n private _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 @Input()\n get formDisabledOnWorking() {\n return this._formDisabledWhileWorking.value;\n }\n\n set formDisabledOnWorking(formDisabledOnWorking: boolean) {\n this._formDisabledWhileWorking.next(Boolean(formDisabledOnWorking ?? true));\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<DbxActionValueOnTriggerResult<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: DbxActionValueOnTriggerResult<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 let validatorObs: Observable<boolean>;\n\n const initialIsValidCheck = event.isComplete;\n if (initialIsValidCheck) {\n validatorObs = this.dbxActionFormValidator ? this.dbxActionFormValidator(value) : of(true);\n } else {\n validatorObs = of(false);\n }\n\n let modifiedObs: Observable<boolean>;\n\n const isConsideredModified = event.pristine === false && isProbablyTouched;\n if (isConsideredModified) {\n modifiedObs = this.dbxActionFormModified ? this.dbxActionFormModified(value) : of(true);\n } else {\n modifiedObs = of(false);\n }\n\n return combineLatest([validatorObs, modifiedObs]).pipe(\n first(),\n map(([valid, modified]: [boolean, boolean]) => ({ valid, modified, value, event }))\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._formDisabledWhileWorking])\n .pipe(\n map(([isWorking, lockOnWorking]: [boolean, boolean]) => lockOnWorking && isWorking),\n distinctUntilChanged()\n )\n .subscribe((disable) => {\n this.form.setDisabled(APP_ACTION_FORM_DISABLED_KEY, disable);\n });\n }\n\n ngOnDestroy(): void {\n this.source.enable(APP_ACTION_FORM_DISABLED_KEY);\n this.lockSet.destroyOnNextUnlock(() => {\n this._triggeredSub.destroy();\n this._isCompleteSub.destroy();\n this._isWorkingSub.destroy();\n this._formDisabledWhileWorking.complete();\n this.form.setDisabled(APP_ACTION_FORM_DISABLED_KEY, false);\n });\n }\n\n protected preCheckReadyValue(value: T): Observable<boolean> {\n const validatorObs: Observable<boolean> = this.dbxActionFormValidator ? this.dbxActionFormValidator(value) : of(true);\n const modifiedObs: Observable<boolean> = this.dbxActionFormModified ? this.dbxActionFormModified(value) : of(true);\n\n return combineLatest([validatorObs, modifiedObs]).pipe(\n first(),\n map(([valid, modified]: [boolean, boolean]) => valid && modified)\n );\n }\n\n protected readyValue(value: T): Observable<DbxActionValueOnTriggerResult<O>> {\n if (this.dbxActionFormMapValue) {\n return asObservable(this.dbxActionFormMapValue(value));\n } else {\n return of({ value: value as unknown as O });\n }\n }\n}\n","import { Directive, Input, inject } from '@angular/core';\nimport { HookResult, Transition } from '@uirouter/core';\nimport { 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})\nexport class DbxActionFormSafetyDirective<T, O> extends DbxActionTransitionSafetyDirective<T, O> {\n readonly dbxActionForm = inject(DbxActionFormDirective<T>, { host: true });\n\n @Input('dbxActionFormSafety')\n override inputSafetyType?: DbxActionTransitionSafetyType = 'auto';\n\n protected override _handleOnBeforeTransition(transition: Transition): HookResult {\n this.dbxActionForm.form.forceFormUpdate();\n return super._handleOnBeforeTransition(transition);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DbxActionFormSafetyDirective } from './form.action.transition.safety.directive';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [DbxActionFormSafetyDirective],\n exports: [DbxActionFormSafetyDirective]\n})\nexport class DbxFormActionTransitionModule {}\n","import { MatDialogModule } from '@angular/material/dialog';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DbxActionFormDirective } from './form.action.directive';\n\n@NgModule({\n imports: [CommonModule, MatDialogModule],\n declarations: [DbxActionFormDirective],\n exports: [DbxActionFormDirective]\n})\nexport class DbxFormActionModule {}\n","import { distinctUntilChanged, filter, map, switchMap, combineLatest, BehaviorSubject, Observable, EMPTY, exhaustMap, takeUntil, Subject, tap, shareReplay, throttleTime } from 'rxjs';\nimport { Directive, Input, OnDestroy, inject } from '@angular/core';\nimport { AbstractSubscriptionDirective } from '@dereekb/dbx-core';\nimport { DbxFormState, DbxFormStateRef, DbxMutableForm } from '../form';\nimport { type Maybe } from '@dereekb/util';\nimport { asObservable, ObservableOrValue, cleanup, errorOnEmissionsInPeriod } from '@dereekb/rxjs';\n\nexport function dbxFormSourceObservable<T>(form: DbxMutableForm, inputObs: ObservableOrValue<T>, mode$: Observable<DbxFormSourceDirectiveMode>): Observable<T> {\n return dbxFormSourceObservableFromStream(form.stream$, inputObs, mode$);\n}\n\nexport function dbxFormSourceObservableFromStream<T>(stream$: Observable<DbxFormStateRef>, inputObs: ObservableOrValue<T>, mode$: Observable<DbxFormSourceDirectiveMode>): Observable<T> {\n const value$ = asObservable(inputObs).pipe(shareReplay(1)); // catch/share the latest emission\n\n const state$ = stream$.pipe(\n map((x) => x.state),\n distinctUntilChanged()\n );\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(([value, send]) => {\n firstValueSent = true;\n if (!send) {\n doneSubject.next(undefined);\n }\n }),\n filter(([value, send]) => send),\n map((x) => x[0]),\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})\nexport class DbxFormSourceDirective<T> extends AbstractSubscriptionDirective implements OnDestroy {\n readonly form = inject(DbxMutableForm<T>, { host: true });\n\n private readonly _mode = new BehaviorSubject<DbxFormSourceDirectiveMode>('reset');\n\n @Input('dbxFormSourceMode')\n get mode(): DbxFormSourceDirectiveMode {\n return this._mode.value;\n }\n\n set mode(mode: DbxFormSourceDirectiveMode) {\n this._mode.next(mode);\n }\n\n @Input('dbxFormSource')\n set obs(obs: Maybe<ObservableOrValue<Maybe<Partial<T>>>>) {\n this.setObs(obs);\n }\n\n private setObs(inputObs: Maybe<ObservableOrValue<Maybe<Partial<T>>>>): void {\n let subscription;\n\n if (inputObs) {\n subscription = dbxFormSourceObservableFromStream(this.form.stream$, inputObs, this._mode).subscribe((x) => {\n this.form.setValue(x);\n });\n }\n\n this.sub = subscription;\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._mode.complete();\n }\n}\n","import { Observable, BehaviorSubject } from 'rxjs';\nimport { Directive, Input, OnDestroy, inject } from '@angular/core';\nimport { AbstractSubscriptionDirective } from '@dereekb/dbx-core';\nimport { DbxMutableForm } from '../../form/form';\nimport { LoadingState, isLoadingStateFinishedLoading } from '@dereekb/rxjs';\nimport { dbxFormSourceObservableFromStream, DbxFormSourceDirectiveMode } from './form.input.directive';\n\n/**\n * Used with a FormComponent to set the value from a LoadingState when the value is available.\n */\n@Directive({\n selector: '[dbxFormLoadingSource]'\n})\nexport class DbxFormLoadingSourceDirective<T extends object = object> extends AbstractSubscriptionDirective implements OnDestroy {\n readonly form = inject(DbxMutableForm<T>, { host: true });\n\n private readonly _mode = new BehaviorSubject<DbxFormSourceDirectiveMode>('reset');\n\n @Input('dbxFormLoadingSourceMode')\n get mode(): DbxFormSourceDirectiveMode {\n return this._mode.value;\n }\n\n set mode(mode: DbxFormSourceDirectiveMode) {\n this._mode.next(mode);\n }\n\n /**\n * Sets a LoadingContext that is watched for the loading state.\n */\n @Input('dbxFormLoadingSource')\n set obs(obs: Observable<LoadingState<T>>) {\n this._setObs(obs);\n }\n\n private _setObs(inputObs: Observable<LoadingState<T>>): void {\n let subscription;\n\n if (inputObs) {\n subscription = dbxFormSourceObservableFromStream(this.form.stream$, inputObs, this._mode).subscribe((x) => {\n if (isLoadingStateFinishedLoading(x)) {\n this.form.setValue(x.value);\n }\n });\n }\n\n this.sub = subscription;\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._mode.complete();\n }\n}\n","import { Directive, EventEmitter, Output, OnInit, OnDestroy, inject } from '@angular/core';\nimport { AbstractSubscriptionDirective } 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})\nexport class DbxFormValueChangesDirective<T> extends AbstractSubscriptionDirective implements OnInit, OnDestroy {\n readonly form = inject(DbxForm<T>, { host: true });\n\n @Output()\n readonly dbxFormValueChange = new EventEmitter<Maybe<T>>();\n\n ngOnInit(): void {\n this.sub = 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.next(value);\n } else {\n this.dbxFormValueChange.next(undefined);\n }\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this.dbxFormValueChange.complete();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DbxFormValueChangesDirective } from './form.changes.directive';\nimport { DbxFormSourceDirective } from './form.input.directive';\nimport { DbxFormLoadingSourceDirective } from './form.loading.directive';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [DbxFormSourceDirective, DbxFormValueChangesDirective, DbxFormLoadingSourceDirective],\n exports: [DbxFormSourceDirective, DbxFormValueChangesDirective, DbxFormLoadingSourceDirective]\n})\nexport class DbxFormIoModule {}\n","import { AbstractControl } from '@angular/forms';\nimport { type Maybe } from '@dereekb/util';\nimport { 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 { DbxFormIoModule } from './io/form.io.module';\nimport { DbxFormActionModule } from './action/form.action.module';\nimport { DbxFormActionTransitionModule } from './action/transition/form.action.transition.module';\nimport { NgModule } from '@angular/core';\n\n@NgModule({\n exports: [DbxFormActionTransitionModule, DbxFormActionModule, DbxFormIoModule]\n})\nexport class DbxFormModule {}\n","import { FieldTypeConfig } from '@ngx-formly/core';\nimport { ValidationMessageOption } from '@ngx-formly/core/lib/models';\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 { Component, Input } from '@angular/core';\nimport { ChecklistItemDisplayContent, ChecklistItemFieldDisplayComponent } from './checklist.item';\n\n// MARK: Default\n@Component({\n template: `\n <div *ngIf=\"displayContent\" class=\"dbx-default-checklist-item-field\">\n <div *ngIf=\"label\" class=\"item-label\">{{ label }}</div>\n <div *ngIf=\"sublabel\" class=\"item-sublabel\">{{ sublabel }}</div>\n <div *ngIf=\"description\" class=\"dbx-hint item-description\">{{ description }}</div>\n </div>\n `\n})\nexport class DbxDefaultChecklistItemFieldDisplayComponent<T = unknown> implements ChecklistItemFieldDisplayComponent<T> {\n @Input()\n displayContent!: ChecklistItemDisplayContent<T>;\n\n get label() {\n return this.displayContent?.label;\n }\n\n get sublabel() {\n return this.displayContent?.sublabel;\n }\n\n get description() {\n return this.displayContent?.description;\n }\n}\n","import { ChangeDetectorRef, Component, OnDestroy, OnInit, Type, inject } from '@angular/core';\nimport { DbxInjectionComponentConfig, AbstractSubscriptionDirective, safeDetectChanges } from '@dereekb/dbx-core';\nimport { switchMapMaybeObs } from '@dereekb/rxjs';\nimport { shareReplay, distinctUntilChanged, map, BehaviorSubject } from 'rxjs';\nimport { ValidationErrors, FormGroup } from '@angular/forms';\nimport { FieldType, FieldTypeConfig, FormlyFieldProps } from '@ngx-formly/core';\nimport { ChecklistItemFieldDisplayComponent, ChecklistItemFieldDisplayContentObs } from './checklist.item';\nimport { DbxDefaultChecklistItemFieldDisplayComponent } from './checklist.item.field.content.default.component';\nimport { type Maybe } from '@dereekb/util';\n\nexport interface DbxChecklistItemFieldProps<T = unknown> extends FormlyFieldProps {\n /**\n * Observable used to retrieve content to display for the item.\n */\n displayContentObs: ChecklistItemFieldDisplayContentObs<T>;\n /**\n * Custom component class to use by default.\n */\n componentClass?: Type<ChecklistItemFieldDisplayComponent<T>>;\n}\n\n@Component({\n templateUrl: 'checklist.item.field.component.html'\n})\nexport class DbxChecklistItemFieldComponent<T = unknown> extends FieldType<FieldTypeConfig<DbxChecklistItemFieldProps<T>>> implements OnInit, OnDestroy {\n private readonly _displayContent = new BehaviorSubject<Maybe<ChecklistItemFieldDisplayContentObs<T>>>(undefined);\n readonly displayContent$ = this._displayContent.pipe(switchMapMaybeObs(), distinctUntilChanged(), shareReplay(1));\n\n readonly anchor$ = this.displayContent$.pipe(\n map((x) => x.anchor),\n shareReplay(1)\n );\n\n readonly rippleDisabled$ = this.displayContent$.pipe(\n map((x) => x.ripple === false || (x.ripple !== true && !x.anchor)),\n distinctUntilChanged(),\n shareReplay(1)\n );\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 this._displayContent.next(this.checklistField.displayContentObs);\n }\n\n ngOnDestroy() {\n this._displayContent.complete();\n }\n}\n\n@Component({\n selector: 'dbx-checklist-item-content-component',\n template: `\n <dbx-injection [config]=\"config\"></dbx-injection>\n `\n})\nexport class DbxChecklistItemContentComponent<T = unknown> extends AbstractSubscriptionDirective {\n readonly cdRef = inject(ChangeDetectorRef);\n readonly checklistItemFieldComponent = inject(DbxChecklistItemFieldComponent<T>);\n\n readonly config: DbxInjectionComponentConfig<ChecklistItemFieldDisplayComponent<T>> = {\n componentClass: this.checklistItemFieldComponent.componentClass,\n init: (instance) => {\n this.sub = this.checklistItemFieldComponent.displayContent$.subscribe((x) => {\n instance.displayContent = x;\n safeDetectChanges(this.cdRef);\n });\n }\n };\n}\n","<div class=\"dbx-checklist-item-wrapper\" [formGroup]=\"formGroup\">\n <div *ngIf=\"label\" class=\"dbx-checklist-item-label\">{{ label }}</div>\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]=\"anchor$ | async\">\n <div class=\"dbx-checklist-item-content\" matRipple [matRippleDisabled]=\"(rippleDisabled$ | async) ?? false\">\n <dbx-checklist-item-content-component></dbx-checklist-item-content-component>\n <span class=\"spacer\"></span>\n <mat-icon *ngIf=\"(rippleDisabled$ | async) !== true\">navigate_next</mat-icon>\n </div>\n </dbx-anchor>\n </div>\n </div>\n <div *ngIf=\"description\" class=\"dbx-hint\">{{ description }}</div>\n</div>\n","import { Component } from '@angular/core';\nimport { FieldWrapper, FormlyFieldConfig, FormlyFieldProps } from '@ngx-formly/core';\n\nexport interface DbxFormInfoConfig extends FormlyFieldProps {\n onInfoClick: () => void;\n}\n\n@Component({\n template: `\n <div class=\"dbx-form-info-wrapper\" fxLayout=\"row\">\n <div class=\"dbx-form-info-wrapper-content\" fxFlex=\"grow\">\n <ng-container #fieldComponent></ng-container>\n </div>\n <div class=\"dbx-form-info-wrapper-info\" fxFlex=\"noshrink\" fxLayout=\"column\" fxLayoutAlign=\"center 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})\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 { Component } from '@angular/core';\nimport { DbxSectionHeaderConfig } from '@dereekb/dbx-web';\nimport { type Maybe } from '@dereekb/util';\nimport { FieldWrapper, 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})\nexport class DbxFormSectionWrapperComponent extends FieldWrapper<FormlyFieldConfig<DbxFormSectionConfig>> {\n get headerConfig(): Maybe<DbxSectionHeaderConfig> {\n return this.props;\n }\n}\n","import { Component } from '@angular/core';\nimport { ScreenMediaWidthType } from '@dereekb/dbx-web';\nimport { FieldWrapper, FormlyFieldConfig } from '@ngx-formly/core';\n\nexport interface DbxFlexWrapperConfig {\n /**\n * Breakpoint based on the screen width.\n */\n breakpoint?: ScreenMediaWidthType;\n /**\n * Whether or not to use relative sizing.\n */\n relative?: boolean;\n /**\n * Whether or not to break to a new column when the breakpoint is reached.\n */\n 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})\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 { Component } from '@angular/core';\nimport { DbxSectionHeaderConfig } from '@dereekb/dbx-web';\nimport { type Maybe } from '@dereekb/util';\nimport { 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})\nexport class DbxFormSubsectionWrapperComponent extends FieldWrapper<FieldTypeConfig<DbxFormSubsectionConfig>> {\n get headerConfig(): Maybe<DbxSectionHeaderConfig> {\n return this.props;\n }\n}\n","import { Maybe, objectIsEmpty } from '@dereekb/util';\nimport { FieldWrapper, FormlyFieldProps, FormlyFieldConfig } from '@ngx-formly/core';\nimport { map, shareReplay, startWith, switchMap, BehaviorSubject, of, distinctUntilChanged } from 'rxjs';\nimport { Directive, OnDestroy, OnInit } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\nimport { filterMaybe } from '@dereekb/rxjs';\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 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 { Component } from '@angular/core';\nimport { AbstractFormExpandSectionWrapperDirective, 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 <ng-container [ngSwitch]=\"show$ | async\">\n <ng-container *ngSwitchCase=\"true\">\n <ng-container #fieldComponent></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"false\">\n <span class=\"dbx-form-expand-wrapper-button\" (click)=\"open()\">{{ expandLabel }}</span>\n </ng-container>\n </ng-container>\n `\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 { Component, OnInit } from '@angular/core';\nimport { 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})\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 { Component } from '@angular/core';\nimport { type Maybe } from '@dereekb/util';\nimport { first, shareReplay, switchMap, Observable, of } from 'rxjs';\nimport { AbstractFormExpandSectionConfig, AbstractFormExpandSectionWrapperDirective } from './expand.wrapper.delegate';\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\" [ngSwitch]=\"show$ | async\">\n <div class=\"dbx-form-toggle-wrapper-toggle\">\n <mat-slide-toggle [checked]=\"show$ | async\" (toggleChange)=\"onToggleChange()\">{{ slideLabel$ | async }}</mat-slide-toggle>\n </div>\n <ng-container *ngSwitchCase=\"true\">\n <ng-container #fieldComponent></ng-container>\n </ng-container>\n </div>\n `\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 onToggleChange(): void {\n this.show$.pipe(first()).subscribe((show) => {\n this._toggleOpen.next(!show);\n });\n }\n}\n","import { OnInit, OnDestroy, Component } from '@angular/core';\nimport { asObservable, ObservableOrValue, switchMapMaybeDefault } from '@dereekb/rxjs';\nimport { type Maybe } from '@dereekb/util';\nimport { FieldWrapper, FormlyFieldConfig } from '@ngx-formly/core';\nimport { BehaviorSubject, 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]=\"(class$ | async) ?? ''\" [ngStyle]=\"(style$ | async) ?? {}\">\n <ng-container #fieldComponent></ng-container>\n </div>\n `\n})\nexport class DbxFormStyleWrapperComponent extends FieldWrapper<FormlyFieldConfig<DbxFormStyleWrapperConfig>> implements OnInit, OnDestroy {\n private _style = new BehaviorSubject<Maybe<Observable<DbxFormStyleObject>>>(undefined);\n private _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 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 { OnInit, OnDestroy, Component } from '@angular/core';\nimport { SimpleLoadingContext, SubscriptionObject } from '@dereekb/rxjs';\nimport { FieldWrapper, 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 asynchronos 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})\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 { MatButtonModule } from '@angular/material/button';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxFormInfoWrapperComponent } from './info.wrapper.component';\nimport { DbxFormSectionWrapperComponent } from './section.wrapper.component';\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\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 { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { DbxSectionLayoutModule, DbxTextModule, DbxFlexLayoutModule, DbxLoadingModule } from '@dereekb/dbx-web';\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';\n\n@NgModule({\n imports: [\n CommonModule,\n DbxTextModule,\n DbxLoadingModule,\n DbxFlexLayoutModule,\n DbxSectionLayoutModule,\n MatButtonModule,\n MatSlideToggleModule,\n MatIconModule,\n FlexLayoutModule,\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 declarations: [AutoTouchFieldWrapperComponent, DbxFormSectionWrapperComponent, DbxFormSubsectionWrapperComponent, DbxFormInfoWrapperComponent, DbxFormExpandWrapperComponent, DbxFormToggleWrapperComponent, DbxFormFlexWrapperComponent, DbxFormStyleWrapperComponent, DbxFormWorkingWrapperComponent],\n exports: []\n})\nexport class DbxFormFormlyWrapperModule {}\n","import { DbxInjectionComponentModule } from '@dereekb/dbx-core';\nimport { MatRippleModule } from '@angular/material/core';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { DbxDefaultChecklistItemFieldDisplayComponent } from './checklist.item.field.content.default.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { DbxRouterAnchorModule, DbxTextModule } from '@dereekb/dbx-web';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxFormFormlyWrapperModule } from '../wrapper/form.wrapper.module';\nimport { DbxChecklistItemContentComponent, DbxChecklistItemFieldComponent } from './checklist.item.field.component';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\n@NgModule({\n imports: [\n CommonModule,\n DbxTextModule,\n FormsModule,\n ReactiveFormsModule,\n MatRippleModule,\n MatCheckboxModule,\n MatButtonModule,\n MatIconModule,\n DbxRouterAnchorModule,\n DbxInjectionComponentModule,\n DbxFormFormlyWrapperModule,\n FormlyModule.forChild({\n types: [{ name: 'checklistitem', component: DbxChecklistItemFieldComponent }]\n })\n ],\n declarations: [DbxChecklistItemFieldComponent, DbxChecklistItemContentComponent, DbxDefaultChecklistItemFieldDisplayComponent],\n exports: [DbxFormFormlyWrapperModule]\n})\nexport class DbxFormFormlyChecklistItemFieldModule {}\n","import { AsyncValidatorFn, ValidatorFn } from '@angular/forms';\nimport { mergeObjects, filterFromPOJO, mergeObjectsFunction, filterFromPOJOFunction, FilterKeyValueTuplesInput, GeneralFilterFromPOJOFunction, ArrayOrValue, Maybe, asArray, objectHasNoKeys, MapFunction } from '@dereekb/util';\nimport { FormlyFieldConfig, FormlyFieldProps } from '@ngx-formly/core';\nimport { ValidationMessageOption } from '@ngx-formly/core/lib/models';\nimport { 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 materialFormField?: Pick<MaterialFormlyFormFieldProps, 'prefix' | 'suffix' | 'hideLabel' | 'hideRequiredMarker' | 'hideFieldUnderline' | 'floatLabel' | 'appearance' | 'color' | 'hintStart' | 'hintEnd'>;\n}\n","import { FormlyFieldConfig } from '@ngx-formly/core';\nimport { LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig } from '../field';\nimport { 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' | 'displayContentObs'>;\n\nexport function checklistItemField<T = unknown>(config: ChecklistItemFieldBuilderInput<T>): FormlyFieldConfig<DbxChecklistItemFieldProps<T>> {\n const { key, displayContentObs, componentClass } = config;\n\n const fieldConfig = formlyField({\n key,\n type: 'checklistitem',\n ...propsAndConfigForFieldConfig(config, {\n displayContentObs,\n componentClass\n })\n });\n\n return fieldConfig;\n}\n","import { Observable, combineLatest, map, shareReplay } from 'rxjs';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { ChecklistItemDisplayContent, ChecklistItemFieldDisplayContentObs } from './checklist.item';\nimport { KeyValueTransformMap, addPlusPrefixToNumber, type Maybe } from '@dereekb/util';\nimport { checklistItemField, 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 key: ChecklistItemFieldDataSetFieldKey<T>;\n /**\n * Base field configuration to use.\n */\n 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 _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: ChecklistItemFieldDataSetBuilderInput<D, T> = {\n ...currentField,\n ...config,\n key\n } as any;\n\n if (currentField.displayContentObs && config.displayContentObs) {\n mergedConfig.displayContentObs = combineLatest([currentField.displayContentObs, config.displayContentObs]).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 displayContentObs: 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 displayContentObs: 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>): ChecklistItemFieldDisplayContentObs<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>): ChecklistItemFieldDisplayContentObs<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()): ChecklistItemFieldDisplayContentObs<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 } from '@angular/core';\nimport { DbxInjectionComponentConfig } from '@dereekb/dbx-core';\nimport { FieldType, 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})\nexport class DbxFormComponentFieldComponent<T = unknown> extends FieldType<DbxFormComponentFormlyFieldConfig<T>> {\n get config(): DbxInjectionComponentConfig<T> {\n return this.field.componentField;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { DbxInjectionComponentModule } from '@dereekb/dbx-core';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxFormComponentFieldComponent } from './component.field.component';\n\n@NgModule({\n imports: [\n CommonModule,\n DbxInjectionComponentModule,\n FormlyModule.forChild({\n types: [{ name: 'component', component: DbxFormComponentFieldComponent }]\n })\n ],\n declarations: [DbxFormComponentFieldComponent],\n exports: [DbxFormComponentFieldComponent]\n})\nexport class DbxFormFormlyComponentFieldModule {}\n","import { DbxFormComponentFieldConfig, 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 { FormlyFieldConfig } from '@ngx-formly/core';\nimport { LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig } from '../../field';\nimport { DbxItemListFieldProps } from './list.field.component';\nimport { AbstractDbxSelectionListWrapperDirective } from '@dereekb/dbx-web';\nimport { 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 { Component, OnDestroy, OnInit, Type } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\nimport { DbxInjectionComponentConfig } from '@dereekb/dbx-core';\nimport { AbstractDbxSelectionListWrapperDirective, ListSelectionState, DbxValueListItemDecisionFunction, dbxValueListItemDecisionFunction } from '@dereekb/dbx-web';\nimport { distinctUntilHasDifferentValues, filterMaybe, ListLoadingState, SubscriptionObject, switchMapMaybeObs } from '@dereekb/rxjs';\nimport { convertMaybeToArray, hasDifferentValues, isSelectedDecisionFunctionFactory, Maybe, PrimativeKey, ReadKeyFunction, readKeysFrom } from '@dereekb/util';\nimport { FormlyFieldProps, FieldType, FieldTypeConfig } from '@ngx-formly/core';\nimport { map, 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})\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 _selectionEventSub = new SubscriptionObject();\n private _loadMoreSub = new SubscriptionObject();\n\n private _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 _listComponentClassObs = new BehaviorSubject<Maybe<Observable<Type<C>>>>(undefined);\n readonly listComponentClass$ = this._listComponentClassObs.pipe(switchMapMaybeObs());\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.selectionMode = 'select'; // always enable select\n\n listView.state$ = 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 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]=\"isSelectedModifierFunction$ | async\">\n <span class=\"dbx-label dbx-label-padded\" *ngIf=\"label\">{{ label }}</span>\n <div class=\"dbx-list-item-field-content\">\n <dbx-injection [config]=\"config$ | async\"></dbx-injection>\n </div>\n <mat-divider></mat-divider>\n <div class=\"dbx-form-description\" *ngIf=\"description\">{{ description }}</div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { DbxInjectionComponentModule } from '@dereekb/dbx-core';\nimport { DbxTextModule, DbxLoadingModule, DbxButtonModule, DbxListLayoutModule } from '@dereekb/dbx-web';\nimport { DbxItemListFieldComponent } from './list.field.component';\nimport { MatDividerModule } from '@angular/material/divider';\n\n@NgModule({\n imports: [\n CommonModule,\n DbxTextModule,\n DbxLoadingModule,\n DbxButtonModule,\n FormsModule,\n MatDividerModule,\n MatButtonModule,\n MatInputModule,\n MatFormFieldModule,\n ReactiveFormsModule,\n MatAutocompleteModule,\n MatIconModule,\n DbxInjectionComponentModule,\n DbxListLayoutModule,\n FormlyModule.forChild({\n types: [{ name: 'dbxlistfield', component: DbxItemListFieldComponent }]\n })\n ],\n declarations: [DbxItemListFieldComponent],\n exports: [DbxItemListFieldComponent]\n})\nexport class DbxFormFormlyDbxListFieldModule {}\n","import { DbxInjectionComponentConfig } from '@dereekb/dbx-core';\nimport { LoadingState, successResult, mapLoadingStateResults, filterMaybe, ListLoadingStateContextInstance, mapIsListLoadingStateWithEmptyValue, startWithBeginLoading, SubscriptionObject } from '@dereekb/rxjs';\nimport { PrimativeKey, convertMaybeToArray, makeValuesGroupMap, Maybe, ArrayOrValue, separateValues, filterUniqueValues } from '@dereekb/util';\nimport { Directive, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { FormControl, AbstractControl } from '@angular/forms';\nimport { MatInput } from '@angular/material/input';\nimport { FieldTypeConfig, FormlyFieldProps } from '@ngx-formly/core';\nimport { FieldType } from '@ngx-formly/material';\nimport { BehaviorSubject, combineLatest, Observable, of, filter, map, debounceTime, distinctUntilChanged, switchMap, startWith, shareReplay, mergeMap, first, delay } from 'rxjs';\nimport { PickableValueFieldDisplayFunction, PickableValueFieldDisplayValue, PickableValueFieldFilterFunction, PickableValueFieldHashFunction, PickableValueFieldLoadValuesFunction, PickableValueFieldValue } from './pickable';\nimport { DbxValueListItem } from '@dereekb/dbx-web';\nimport { camelCase } from 'change-case';\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 loadValues: PickableValueFieldLoadValuesFunction<T, M>;\n /**\n * Used for building a display value given the input.\n */\n 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 hashForValue?: PickableValueFieldHashFunction<T, H>;\n /**\n * Used for filtering values via the search text.\n */\n 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 sortItems?: PickableItemFieldItemSortFn<T, M>;\n /**\n * Whether or not to allow multiple items to be selected.\n */\n 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 asArrayValue?: boolean;\n /**\n * Whether or not to show the text filter. True by default if filterValues is provided.\n */\n showTextFilter?: boolean;\n /**\n * Whether or not to skip the filter function when the input is empty.\n *\n * True by default.\n */\n skipFilterFnOnEmpty?: boolean;\n /**\n * Filter Label\n */\n filterLabel?: string;\n /**\n * The maximum number of values that can be picked\n */\n maxPicks?: number;\n /**\n * Optional description/hint to display.\n */\n description?: string;\n /**\n * Footer Display\n */\n footerConfig?: DbxInjectionComponentConfig;\n /**\n * Changes the selection mode of the list to \"view\" mode on disabled, hiding the selection boxes.\n */\n changeSelectionModeToViewOnDisabled?: boolean;\n /**\n * (Optional) observable that will trigger the clearing of all cached display values.\n */\n 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 @ViewChild('filterMatInput', { static: true })\n filterMatInput!: MatInput;\n\n readonly inputCtrl = new FormControl('');\n\n private _formControlObs = new BehaviorSubject<Maybe<AbstractControl>>(undefined);\n readonly formControl$ = this._formControlObs.pipe(filterMaybe());\n\n private _clearDisplayHashMapSub = new SubscriptionObject();\n private _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: 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 = new ListLoadingStateContextInstance({ 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 /**\n * Context used for searching/filtering.\n */\n readonly filterResultsContext = new ListLoadingStateContextInstance({ obs: this.filteredSearchResultsState$, showLoadingOnNoValue: true });\n\n readonly noItemsAvailable$ = this.filterItemsLoadingState$.pipe(mapIsListLoadingStateWithEmptyValue(), distinctUntilChanged());\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 { Component } from '@angular/core';\nimport { AbstractDbxPickableItemFieldDirective, PickableItemFieldItem } from './pickable.field.directive';\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})\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 <ng-container *ngIf=\"showFilterInput\">\n <ng-container *ngTemplateOutlet=\"filterTemplate\"></ng-container>\n </ng-container>\n <!-- Content -->\n <div class=\"dbx-pickable-item-field-chips\">\n <mat-chip-listbox [multiple]=\"multiSelect\" [required]=\"required\" [selectable]=\"!isReadonlyOrDisabled\" [disabled]=\"readonly\" #chipList>\n <mat-chip-option *ngFor=\"let item of items$ | async\" (click)=\"itemClicked(item)\" [selected]=\"item.selected\" [disabled]=\"isReadonlyOrDisabled || item.disabled\">\n <mat-icon matChipAvatar *ngIf=\"item.itemValue.icon\">{{ item.itemValue.icon }}</mat-icon>\n <span class=\"dbx-chip-label\">{{ item.itemValue.label }}</span>\n <span class=\"dbx-chip-sublabel\" *ngIf=\"item.itemValue.sublabel\">{{ item.itemValue.sublabel }}</span>\n </mat-chip-option>\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 <p *ngIf=\"noItemsAvailable$ | async\" class=\"dbx-label\">No items match this filter.</p>\n </div>\n</ng-template>\n","import { Component, inject } from '@angular/core';\nimport { DbxInjectionComponentConfig } from '@dereekb/dbx-core';\nimport { DEFAULT_LIST_WRAPPER_DIRECTIVE_TEMPLATE, AbstractDbxSelectionListWrapperDirective, provideDbxListView, AbstractDbxSelectionListViewDirective, AbstractDbxValueListViewItemComponent, ListSelectionState, addConfigToValueListItems, DbxListSelectionMode } from '@dereekb/dbx-web';\nimport { type Maybe } from '@dereekb/util';\nimport { map, shareReplay } from 'rxjs';\nimport { PickableValueFieldDisplayValue } from './pickable';\nimport { AbstractDbxPickableItemFieldDirective, PickableItemFieldItem } from './pickable.field.directive';\n\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})\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\n// MARK: Selection List\n@Component({\n selector: 'dbx-form-pickable-item-field-item-list',\n template: DEFAULT_LIST_WRAPPER_DIRECTIVE_TEMPLATE\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]=\"items$ | async\"></dbx-selection-list-view-content>\n `,\n providers: provideDbxListView(DbxPickableListFieldItemListViewComponent)\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\n@Component({\n template: `\n <div class=\"dbx-default-pickable-item-field-list-item dbx-flex-bar\">\n <mat-icon class=\"dbx-icon-spacer\" *ngIf=\"icon\">{{ icon }}</mat-icon>\n <span class=\"dbx-chip-label\">{{ label }}</span>\n <span class=\"dbx-chip-sublabel\" *ngIf=\"sublabel\">({{ sublabel }})</span>\n </div>\n `\n})\nexport class DbxPickableListFieldItemListViewItemComponent<T> extends AbstractDbxValueListViewItemComponent<PickableValueFieldDisplayValue<T>> {\n get label(): string {\n return this.itemValue.label;\n }\n\n get sublabel() {\n return this.itemValue.sublabel;\n }\n\n get icon() {\n return this.itemValue.icon;\n }\n}\n","<div class=\"dbx-pickable-item-field\">\n <dbx-loading [context]=\"context\">\n <ng-container *ngIf=\"showFilterInput\">\n <ng-container *ngTemplateOutlet=\"filterTemplate\"></ng-container>\n </ng-container>\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 <p *ngIf=\"noItemsAvailable$ | async\" class=\"dbx-label\">No items match this filter.</p>\n </div>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatListModule } from '@angular/material/list';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { DbxPickableChipListFieldComponent } from './pickable.chip.field.component';\nimport { DbxPickableListFieldComponent, DbxPickableListFieldItemListComponent, DbxPickableListFieldItemListViewComponent, DbxPickableListFieldItemListViewItemComponent } from './pickable.list.field.component';\nimport { DbxDatePipeModule, DbxInjectionComponentModule } from '@dereekb/dbx-core';\nimport { DbxRouterAnchorModule, DbxTextModule, DbxLoadingModule, DbxButtonModule, DbxListLayoutModule } from '@dereekb/dbx-web';\n\n@NgModule({\n imports: [\n CommonModule,\n DbxTextModule,\n DbxLoadingModule,\n DbxButtonModule,\n FormsModule,\n MatButtonModule,\n MatInputModule,\n MatFormFieldModule,\n ReactiveFormsModule,\n MatAutocompleteModule,\n MatListModule,\n DbxDatePipeModule,\n DbxRouterAnchorModule,\n MatChipsModule,\n MatIconModule,\n DbxInjectionComponentModule,\n DbxListLayoutModule,\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 declarations: [DbxPickableChipListFieldComponent, DbxPickableListFieldComponent, DbxPickableListFieldItemListComponent, DbxPickableListFieldItemListViewComponent, DbxPickableListFieldItemListViewItemComponent],\n exports: []\n})\nexport class DbxFormFormlyPickableFieldModule {}\n","import { FormlyFieldConfig } from '@ngx-formly/core';\nimport { LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig, MaterialFormFieldConfig } from '../../field';\nimport { PickableItemFieldItem, 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, LabeledValue, Maybe, SearchStringFilterFunction, searchStringFilterFunction, sortByStringFunction } from '@dereekb/util';\nimport { Observable, of } from 'rxjs';\nimport { PickableValueFieldDisplayValue, PickableValueFieldValue } from './pickable';\nimport { PickableItemFieldItem, 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 { filterMaybe } from '@dereekb/rxjs';\nimport { BehaviorSubject, map, Observable, shareReplay } from 'rxjs';\nimport { Component, Directive, inject, InjectionToken, Input, OnDestroy } from '@angular/core';\nimport { ConfiguredSearchableValueFieldDisplayValue } from './searchable';\nimport { Maybe, mergeArraysIntoArray } from '@dereekb/util';\nimport { DbxInjectionComponentConfig } from '@dereekb/dbx-core';\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]=\"anchor$ | async\">\n <dbx-injection [config]=\"config$ | async\"></dbx-injection>\n </dbx-anchor>\n `\n})\nexport class DbxSearchableFieldAutocompleteItemComponent<T> implements OnDestroy {\n private _displayValue = new BehaviorSubject<Maybe<ConfiguredSearchableValueFieldDisplayValue<T>>>(undefined);\n readonly displayValue$ = this._displayValue.pipe(filterMaybe(), shareReplay(1));\n\n readonly config$: Observable<DbxInjectionComponentConfig> = this.displayValue$.pipe(\n map((x) => {\n const config: DbxInjectionComponentConfig = {\n ...x.display,\n providers: mergeArraysIntoArray(\n [\n {\n provide: DBX_SEARCHABLE_FIELD_COMPONENT_DATA_TOKEN,\n useValue: x\n }\n ],\n x.display.providers\n )\n };\n\n return config;\n })\n );\n\n readonly anchor$ = this.displayValue$.pipe(map((x) => x.anchor));\n\n @Input()\n set displayValue(displayValue: ConfiguredSearchableValueFieldDisplayValue<T>) {\n this._displayValue.next(displayValue);\n }\n\n ngOnDestroy(): void {\n this._displayValue.complete();\n }\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 <mat-icon class=\"dbx-icon-spacer\" *ngIf=\"icon\">{{ icon }}</mat-icon>\n <span class=\"dbx-chip-label\">{{ displayValue.label }}</span>\n <span class=\"dbx-chip-sublabel\" *ngIf=\"displayValue.sublabel\">({{ displayValue.sublabel }})</span>\n </div>\n `\n})\nexport class DbxDefaultSearchableFieldDisplayComponent<T> extends AbstractDbxSearchableFieldDisplayDirective<T> {\n get icon() {\n return this.displayValue.icon;\n }\n}\n","import { ArrayOrValue, Maybe, convertMaybeToArray, lastValue, PrimativeKey, separateValues, asArray, filterUniqueValues } from '@dereekb/util';\nimport { DbxInjectionComponentConfig, mergeDbxInjectionComponentConfigs } from '@dereekb/dbx-core';\nimport { filterMaybe, SubscriptionObject, LoadingState, LoadingStateContextInstance, successResult, startWithBeginLoading } from '@dereekb/rxjs';\nimport { ChangeDetectorRef, Directive, ElementRef, OnDestroy, OnInit, ViewChild, inject } from '@angular/core';\nimport { AbstractControl, FormControl, ValidatorFn } from '@angular/forms';\nimport { FieldTypeConfig, FormlyFieldProps } from '@ngx-formly/core';\nimport { FieldType } from '@ngx-formly/material';\nimport { debounceTime, distinctUntilChanged, first, map, mergeMap, shareReplay, startWith, switchMap, BehaviorSubject, of, Observable } from 'rxjs';\nimport { SearchableValueFieldHashFn, SearchableValueFieldStringSearchFn, SearchableValueFieldDisplayFn, SearchableValueFieldDisplayValue, SearchableValueFieldValue, SearchableValueFieldAnchorFn, ConfiguredSearchableValueFieldDisplayValue } from './searchable';\nimport { DbxDefaultSearchableFieldDisplayComponent } from './searchable.field.autocomplete.item.component';\nimport { camelCase } from 'change-case';\n\nexport interface StringValueFieldsFieldProps extends FormlyFieldProps {\n /**\n * Custom input validators.\n */\n 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 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 asArrayValue?: boolean;\n /**\n * Optional conversion function. If provided, allowStringValues is considered true.\n */\n 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 hashForValue?: SearchableValueFieldHashFn<T, H>;\n /**\n * Performs a search.\n */\n search: SearchableValueFieldStringSearchFn<T, M>;\n /**\n * Whether or not to allow searches on empty text. Is false by default.\n */\n searchOnEmptyText?: boolean;\n /**\n * Default injected config to use for display values.\n */\n display?: Partial<DbxInjectionComponentConfig>;\n /**\n * Used for building a display value given the input.\n */\n 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 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 anchorForValue?: SearchableValueFieldAnchorFn<T, M>;\n /**\n * Whether or not to show \"Clear\" in the autcomplete list.\n */\n showClearValue?: boolean;\n /**\n * Label for the search input.\n *\n * Defaults to \"Search\"\n */\n searchLabel?: string;\n /**\n * (Optional) observable that will trigger the clearing of all cached display values.\n */\n refreshDisplayValues$?: Observable<unknown>;\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 readonly cdRef = inject(ChangeDetectorRef);\n\n /**\n * Whether or not to allow syncing to\n */\n allowSyncValueToInput = false;\n\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 picking a default display for this directive.\n */\n defaultDisplay?: DbxInjectionComponentConfig;\n\n @ViewChild('textInput')\n textInput!: 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 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 _singleValueSyncSubscription = new SubscriptionObject();\n\n readonly searchContext = new LoadingStateContextInstance({ obs: this.searchResultsState$, showLoadingOnNoValue: false });\n\n readonly searchResults$: Observable<ConfiguredSearchableValueFieldDisplayValue<T, M>[]> = this.searchResultsState$.pipe(map((x) => x?.value ?? []));\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 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 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([this.defaultDisplay, this.display]);\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.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.defaultDisplay?.componentClass) {\n this.defaultDisplay = {\n ...this.defaultDisplay,\n componentClass: DbxDefaultSearchableFieldDisplayComponent\n };\n }\n\n if (this.allowSyncValueToInput && this.multiSelect === false) {\n this._singleValueSyncSubscription.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._singleValueSyncSubscription.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 // console.log('Add: ', text, this.inputCtrl.valid);\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 this.textInput.nativeElement.value = '';\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 } from '@dereekb/rxjs';\nimport { Subject } from 'rxjs';\nimport { Component, OnDestroy, OnInit } from '@angular/core';\nimport { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';\nimport { MatChipInputEvent } from '@angular/material/chips';\nimport { AbstractDbxSearchableValueFieldDirective, SearchableValueFieldsFieldProps } from './searchable.field.directive';\nimport { COMMA, ENTER } from '@angular/cdk/keycodes';\nimport { skipUntilTimeElapsedAfterLastEmission } from '@dereekb/date';\nimport { PrimativeKey } from '@dereekb/util';\nimport { SearchableValueFieldDisplayValue } from './searchable';\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})\nexport class DbxSearchableChipFieldComponent<T, M = unknown, H extends PrimativeKey = PrimativeKey> extends AbstractDbxSearchableValueFieldDirective<T, M, H, SearchableChipValueFieldsFieldProps<T, M, H>> implements OnInit, OnDestroy {\n private _blur = new Subject<void>();\n private _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 override get multiSelect(): boolean {\n return this.props.multiSelect ?? true;\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 <mat-chip-row *ngFor=\"let displayValue of displayValues$ | async\" [removable]=\"true\" (removed)=\"removeWithDisplayValue(displayValue)\">\n <mat-icon matChipAvatar *ngIf=\"displayValue.icon\">{{ displayValue.icon }}</mat-icon>\n <span class=\"dbx-chip-label\">{{ displayValue.label }}</span>\n <span class=\"dbx-chip-sublabel\" *ngIf=\"displayValue.sublabel\">{{ displayValue.sublabel }}</span>\n <mat-icon matChipRemove *ngIf=\"!readonly\">cancel</mat-icon>\n </mat-chip-row>\n <input #textInput [name]=\"name\" [placeholder]=\"placeholder\" [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 <mat-option *ngFor=\"let displayValue of searchResults$ | async\" [value]=\"displayValue\">\n <dbx-searchable-field-autocomplete-item [displayValue]=\"displayValue\"></dbx-searchable-field-autocomplete-item>\n </mat-option>\n</mat-autocomplete>\n","import { arrayToMap, Maybe, PrimativeKey, separateValues } from '@dereekb/util';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { Observable, of, switchMap, map } from 'rxjs';\nimport { LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig, DescriptionFieldConfig, MaterialFormFieldConfig } from '../../field';\nimport { SearchableValueFieldDisplayFn, SearchableValueFieldDisplayValue, SearchableValueFieldValue } from './searchable';\nimport { SearchableChipValueFieldsFieldProps } from './searchable.chip.field.component';\nimport { 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 { SubscriptionObject } from '@dereekb/rxjs';\nimport { Component, OnDestroy, OnInit } from '@angular/core';\nimport { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';\nimport { AbstractDbxSearchableValueFieldDirective, SearchableValueFieldsFieldProps } from './searchable.field.directive';\nimport { map, shareReplay, skipWhile, distinctUntilChanged } from 'rxjs';\nimport { tapDetectChanges } from '@dereekb/dbx-core';\nimport { PrimativeKey } from '@dereekb/util';\n\nexport interface SearchableTextValueFieldsFieldProps<T, M = unknown, H extends PrimativeKey = PrimativeKey> extends SearchableValueFieldsFieldProps<T, M, H> {\n 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})\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 tapDetectChanges(this.cdRef)\n );\n\n readonly hasValue$ = this.selectedDisplayValue$.pipe(map((x) => Boolean(x)));\n readonly showSelectedDisplayValue$ = this.selectedDisplayValue$.pipe(\n map((x) => this.showSelectedValue && Boolean(x)),\n distinctUntilChanged(),\n shareReplay(1),\n tapDetectChanges(this.cdRef)\n );\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 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 selected(event: MatAutocompleteSelectedEvent): void {\n this.addWithDisplayValue(event.option.value);\n }\n}\n","<div class=\"dbx-searchable-text-field\" [ngClass]=\"{ 'dbx-searchable-text-field-has-value': (hasValue$ | async), 'dbx-searchable-text-field-show-value': showSelectedValue }\">\n <!-- Result View -->\n <div class=\"dbx-searchable-text-field-value mat-option mat-option-text\" *ngIf=\"showSelectedDisplayValue$ | async\">\n <dbx-searchable-field-autocomplete-item [displayValue]=\"(selectedDisplayValue$ | async)!\"></dbx-searchable-field-autocomplete-item>\n </div>\n <div class=\"dbx-searchable-text-field-input\">\n <div *ngIf=\"searchLabel\" class=\"dbx-label\">{{ searchLabel }}</div>\n <!-- View -->\n <input type=\"search\" [name]=\"name\" matInput #textInput [placeholder]=\"placeholder\" [formControl]=\"inputCtrl\" [matAutocomplete]=\"auto\" [matAutocompleteDisabled]=\"readonly\" 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 <mat-option *ngFor=\"let displayValue of searchResults$ | async\" [value]=\"displayValue\">\n <dbx-searchable-field-autocomplete-item [displayValue]=\"displayValue\"></dbx-searchable-field-autocomplete-item>\n </mat-option>\n <!-- Add/Pick String Value -->\n <mat-option *ngIf=\"allowStringValues && (inputValue$ | async)\" [value]=\"{ value: (inputValue$ | async) }\">\n <p class=\"dbx-clear-hint text-center\">\"{{ inputValue$ | async }}\"</p>\n </mat-option>\n <!-- Show clear value -->\n <mat-option *ngIf=\"showClearValue && (hasValue$ | async)\" value=\"\">\n <p class=\"dbx-clear-hint text-center\">Clear</p>\n </mat-option>\n</mat-autocomplete>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatListModule } from '@angular/material/list';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxSearchableChipFieldComponent } from './searchable.chip.field.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { DbxDefaultSearchableFieldDisplayComponent, DbxSearchableFieldAutocompleteItemComponent } from './searchable.field.autocomplete.item.component';\nimport { DbxSearchableTextFieldComponent } from './searchable.text.field.component';\nimport { DbxDatePipeModule, DbxInjectionComponentModule } from '@dereekb/dbx-core';\nimport { DbxRouterAnchorModule, DbxTextModule, DbxLoadingModule, DbxButtonModule } from '@dereekb/dbx-web';\n\n@NgModule({\n imports: [\n CommonModule,\n DbxTextModule,\n DbxLoadingModule,\n DbxButtonModule,\n FormsModule,\n MatButtonModule,\n MatInputModule,\n MatFormFieldModule,\n ReactiveFormsModule,\n MatAutocompleteModule,\n MatListModule,\n DbxDatePipeModule,\n DbxRouterAnchorModule,\n MatChipsModule,\n MatIconModule,\n DbxInjectionComponentModule,\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 declarations: [DbxSearchableChipFieldComponent, DbxSearchableTextFieldComponent, DbxSearchableFieldAutocompleteItemComponent, DbxDefaultSearchableFieldDisplayComponent],\n exports: [DbxSearchableChipFieldComponent, DbxSearchableTextFieldComponent]\n})\nexport class DbxFormFormlySearchableFieldModule {}\n","import { of } from 'rxjs';\nimport { LabeledFieldConfig } from '../../field';\nimport { SearchableValueFieldValue } from './searchable';\nimport { searchableChipField } from './searchable.field';\nimport { 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, LoadingState, isLoadingStateWithDefinedValue, isLoadingStateLoading, LoadingStateWithDefinedValue, startWithBeginLoading, SubscriptionObject, successResult, beginLoading, mapLoadingStateValueWithOperator, loadingStateContext, valueFromLoadingState, WorkUsingContext } from '@dereekb/rxjs';\nimport { Component, ElementRef, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { distinctUntilChanged, map, switchMap, shareReplay, startWith, mergeMap, scan, BehaviorSubject, tap, first, Observable, combineLatest, of } from 'rxjs';\nimport { addToSetCopy, asArray, convertMaybeToArray, filterMaybeArrayValues, lastValue, makeValuesGroupMap, Maybe, mergeArrays, PrimativeKey, separateValues, setContainsAllValues, setsAreEquivalent, sortByStringFunction } from '@dereekb/util';\nimport { FieldType, FormlyFieldProps } from '@ngx-formly/material/form-field';\nimport { FieldTypeConfig } from '@ngx-formly/core';\nimport { SourceSelectValueMetaLoader, SourceSelectMetaValueReader, SourceSelectOpenFunction, SourceSelectLoadSourcesFunction, SourceSelectLoadSource, SourceSelectLoadSourceLoadingState, SourceSelectDisplayValue, SourceSelectValue, SourceSelectDisplayFunction, SourceSelectDisplayValueGroup, SourceSelectValueGroup, SourceSelectOptions, SourceSelectOpenSourceResult } from './sourceselect';\nimport { AbstractControl } from '@angular/forms';\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 templateUrl: 'sourceselect.field.component.html'\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 @ViewChild('button', { read: ElementRef, static: false })\n buttonElement!: ElementRef;\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(valueFromLoadingState(), shareReplay(1));\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 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\n if (openSource) {\n const origin = this.buttonElement.nativeElement;\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 <mat-option *ngFor=\"let value of nonGroupedValues$ | async\" [value]=\"value.value\">\n {{ value.label }}\n </mat-option>\n <mat-optgroup *ngFor=\"let optionGroup of groupedOptions$ | async\" [label]=\"optionGroup.label\">\n <mat-option *ngFor=\"let value of optionGroup.values\" [value]=\"value.value\">\n {{ value.label }}\n </mat-option>\n </mat-optgroup>\n </mat-select>\n <ng-container *ngIf=\"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 [iconOnly]=\"true\" [icon]=\"selectButtonIcon\"></dbx-button>\n </dbx-action>\n </ng-container>\n </div>\n <dbx-loading class=\"dbx-source-select-field-loading\" [linear]=\"true\" [context]=\"context\"></dbx-loading>\n</div>\n","import { PrimativeKey } from '@dereekb/util';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig, DescriptionFieldConfig, MaterialFormFieldConfig } from '../../field';\nimport { 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 { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxDatePipeModule } from '@dereekb/dbx-core';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatNativeDateModule } from '@angular/material/core';\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { DbxFormSourceSelectFieldComponent } from './sourceselect.field.component';\nimport { MatSelectModule } from '@angular/material/select';\nimport { DbxActionModule, DbxButtonModule, DbxLoadingModule } from '@dereekb/dbx-web';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n MatInputModule,\n MatDividerModule,\n MatFormFieldModule,\n MatSelectModule,\n MatButtonModule,\n MatDatepickerModule,\n MatNativeDateModule,\n MatMenuModule,\n ReactiveFormsModule,\n DbxDatePipeModule,\n DbxLoadingModule,\n DbxButtonModule,\n DbxActionModule,\n MatChipsModule,\n MatIconModule,\n FlexLayoutModule,\n FormlyModule.forChild({\n types: [{ name: 'sourceselectfield', component: DbxFormSourceSelectFieldComponent, wrappers: ['form-field'] }]\n })\n ],\n declarations: [DbxFormSourceSelectFieldComponent],\n exports: [DbxFormSourceSelectFieldComponent]\n})\nexport class DbxFormFormlySourceSelectModule {}\n","import { asObservable, ObservableOrValue } from '@dereekb/rxjs';\nimport { convertMaybeToArray, firstValue, LabeledValue, type Maybe } from '@dereekb/util';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { map } from 'rxjs';\nimport { DescriptionFieldConfig, formlyField, FormlyValueParser, LabeledFieldConfig, 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 { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DbxFormFormlyPickableFieldModule } from './pickable/pickable.field.module';\nimport { DbxFormFormlySearchableFieldModule } from './searchable/searchable.field.module';\nimport { DbxFormFormlyDbxListFieldModule } from './list/list.field.module';\nimport { DbxFormFormlySourceSelectModule } from './sourceselect/sourceselect.field.module';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [],\n exports: [DbxFormFormlyDbxListFieldModule, DbxFormFormlyPickableFieldModule, DbxFormFormlySearchableFieldModule, DbxFormFormlySourceSelectModule]\n})\nexport class DbxFormFormlySelectionModule {}\n","import { FormGroup } from '@angular/forms';\nimport { CompactContextStore, mapCompactModeObs } from '@dereekb/dbx-web';\nimport { Component, OnDestroy, OnInit, inject } from '@angular/core';\nimport { FieldTypeConfig, FormlyFieldProps } from '@ngx-formly/core';\nimport { FieldType } from '@ngx-formly/material';\nimport { Editor } from 'ngx-editor';\nimport { debounceTime, filter } from 'rxjs';\nimport { SubscriptionObject } from '@dereekb/rxjs';\nimport { type Maybe } from '@dereekb/util';\n\nexport type TextEditorComponentFieldProps = FormlyFieldProps;\n\n@Component({\n template: `\n <div class=\"dbx-texteditor-field\" [ngClass]=\"(compactClass$ | async) ?? ''\" [formGroup]=\"formGroup\">\n <span class=\"dbx-label\" *ngIf=\"label\">{{ label }}</span>\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 <div class=\"dbx-form-description\" *ngIf=\"description\">{{ description }}</div>\n </div>\n `\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 _sub = new SubscriptionObject();\n\n readonly compactClass$ = mapCompactModeObs(this._compactContextStore?.mode$, {\n compact: 'dbx-texteditor-field-compact'\n });\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 as 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 // Watch for value changes every second and update the pristine level.\n this._sub.subscription = this.editor.valueChanges\n .pipe(\n debounceTime(100),\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) {\n this.editor.destroy();\n delete this._editor;\n }\n this._sub.destroy();\n }\n}\n","import { DbxTextModule } from '@dereekb/dbx-web';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { NgxEditorModule } from 'ngx-editor';\nimport { DbxTextEditorFieldComponent } from './texteditor.field.component';\n\n@NgModule({\n imports: [\n CommonModule,\n DbxTextModule,\n FormsModule,\n ReactiveFormsModule,\n NgxEditorModule,\n MatFormFieldModule,\n MatInputModule,\n FormlyModule.forChild({\n types: [{ name: 'texteditor', component: DbxTextEditorFieldComponent }]\n })\n ],\n declarations: [DbxTextEditorFieldComponent],\n exports: []\n})\nexport class DbxFormFormlyTextEditorFieldModule {}\n","import { DescriptionFieldConfig, MaterialFormFieldConfig } from './../field';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig } from '../field';\nimport { 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 { CdkDragDrop } from '@angular/cdk/drag-drop';\nimport { Component, TrackByFunction } from '@angular/core';\nimport { asDecisionFunction, cachedGetter, DecisionFunction, FactoryWithRequiredInput, Getter, getValueFromGetter, IndexRef, makeGetter, type Maybe } from '@dereekb/util';\nimport { FieldArrayTypeConfig, FieldArrayType, FormlyFieldConfig, FormlyFieldProps } from '@ngx-formly/core';\n\nexport interface DbxFormRepeatArrayPair<T = unknown> extends IndexRef {\n value?: T | undefined;\n}\n\nexport interface DbxFormRepeatArrayFieldConfigPair<T = unknown> extends Partial<DbxFormRepeatArrayPair<T>> {\n 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 labelForField?: string | FactoryWithRequiredInput<string, DbxFormRepeatArrayFieldConfigPair<T>>;\n /**\n * Text for the add button.\n */\n addText?: string;\n /**\n * Optional template function to create a new template when using the add button.\n */\n addTemplate?: DbxFormRepeatArrayAddTemplateFunction<T>;\n /**\n * Text for the duplicate button.\n */\n duplicateText?: string;\n /**\n * Text for the remove button.\n */\n removeText?: string;\n /**\n * Whethe or not to disable rearranging items.\n *\n * False by default.\n */\n disableRearrange?: boolean;\n /**\n * Wether or not to show the add button.\n *\n * True by default.\n */\n 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 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 allowRemove?: boolean | DecisionFunction<DbxFormRepeatArrayPair<T>>;\n /**\n * Adds the duplicate to the end of the values\n */\n 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 <div class=\"dbx-form-repeat-array-field\" cdkDrag cdkDragLockAxis=\"y\" *ngFor=\"let field of field.fieldGroup; trackBy: trackByFunction; let i = index; let last = last\">\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 <button class=\"dbx-form-repeat-array-drag-button\" *ngIf=\"!disableRearrange\" cdkDragHandle mat-stroked-button><mat-icon>drag_handle</mat-icon></button>\n <dbx-button-spacer></dbx-button-spacer>\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 <dbx-button *ngIf=\"allowDuplicate(i)\" [stroked]=\"true\" [text]=\"duplicateText\" (buttonClick)=\"duplicate(i)\"></dbx-button>\n <dbx-button-spacer></dbx-button-spacer>\n <dbx-button *ngIf=\"allowRemove(i)\" color=\"warn\" [stroked]=\"true\" [text]=\"removeText\" (buttonClick)=\"remove(i)\"></dbx-button>\n </dbx-bar>\n <formly-field class=\"dbx-form-repeat-array-field-content\" [field]=\"field\"></formly-field>\n </div>\n </div>\n <!-- Add Button -->\n <div class=\"dbx-form-repeat-array-footer\">\n <dbx-button *ngIf=\"allowAdd\" [raised]=\"true\" [disabled]=\"addItemDisabled\" [text]=\"addText\" (buttonClick)=\"addClicked()\"></dbx-button>\n </div>\n </dbx-subsection>\n </div>\n `\n})\nexport class DbxFormRepeatArrayTypeComponent<T = unknown> extends FieldArrayType<FieldArrayTypeConfig<DbxFormRepeatArrayConfig>> {\n private _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 _allowRemove: Getter<DecisionFunction<DbxFormRepeatArrayPair<T>>> = cachedGetter(() => {\n return asDecisionFunction(this.field.props.allowRemove, true);\n });\n\n private _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 readonly trackByFunction: TrackByFunction<FormlyFieldConfig> = (i, x) => {\n return x.key;\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 { MatIconModule } from '@angular/material/icon';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxFormRepeatArrayTypeComponent } from './array.field.component';\nimport { DbxButtonModule, DbxSectionLayoutModule, DbxBarLayoutModule } from '@dereekb/dbx-web';\nimport { MatButtonModule } from '@angular/material/button';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\n\n@NgModule({\n imports: [\n CommonModule,\n MatFormFieldModule,\n ReactiveFormsModule,\n MatDividerModule,\n MatButtonModule,\n MatIconModule,\n DragDropModule,\n DbxSectionLayoutModule,\n DbxBarLayoutModule,\n DbxButtonModule,\n FormlyModule.forChild({\n types: [{ name: 'repeatarray', component: DbxFormRepeatArrayTypeComponent }]\n })\n ],\n declarations: [DbxFormRepeatArrayTypeComponent],\n exports: []\n})\nexport class DbxFormFormlyArrayFieldModule {}\n","import { ArrayOrValue, asArray } from '@dereekb/util';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { FieldConfig, formlyField, propsAndConfigForFieldConfig } from '../../field';\nimport { 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';\n\n@NgModule({\n imports: [],\n declarations: [],\n exports: []\n})\nexport class DbxFormFormlyBooleanFieldModule {}\n","import { FormlyFieldConfig } from '@ngx-formly/core';\nimport { LabeledFieldConfig, formlyField, DefaultValueFieldConfig, DescriptionFieldConfig, propsAndConfigForFieldConfig, 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 { Getter, GetterOrValue, LogicalDate, Maybe, 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 { 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 _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 { DateTimezoneUtcNormalInstance, parseISO8601DayStringToDate, toJsDate, formatToISO8601DayStringForSystem, formatToISO8601DateString, isSameDateHoursAndMinutes, DateRangeWithDateOrStringValue, parseJsDateString } from '@dereekb/date';\nimport { ISO8601DayString, 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, MinuteOfDay, UnixDateTimeNumber, ISO8601DayString } from '@dereekb/util';\nimport { dateFromLogicalDate, DateTimeMinuteConfig, DateTimeMinuteInstance, guessCurrentTimezone, readableTimeStringToDate, toLocalReadableTimeString, utcDayForDate, safeToJsDate, findMinDate, findMaxDate, isSameDateHoursAndMinutes, getTimezoneAbbreviation, isSameDateDay, dateTimezoneUtcNormal, DateTimezoneUtcNormalInstance, toJsDayDate, isSameDate, dateTimeMinuteWholeDayDecisionFunction } from '@dereekb/date';\nimport { switchMap, shareReplay, map, startWith, tap, first, distinctUntilChanged, debounceTime, throttleTime, BehaviorSubject, Observable, combineLatest, Subject, merge, interval, of, combineLatestWith, filter, skip } from 'rxjs';\nimport { ChangeDetectorRef, Component, OnDestroy, OnInit, inject } from '@angular/core';\nimport { AbstractControl, FormControl, Validators, FormGroup, ValidationErrors } from '@angular/forms';\nimport { FieldType } from '@ngx-formly/material';\nimport { FieldTypeConfig, FormlyFieldProps } from '@ngx-formly/core';\nimport { MatDatepickerInputEvent } from '@angular/material/datepicker';\nimport { addMinutes, startOfDay, addDays } from 'date-fns';\nimport { asObservableFromGetter, filterMaybe, ObservableOrValueGetter, skipFirstMaybe, SubscriptionObject, switchMapMaybeDefault, switchMapMaybeObs } from '@dereekb/rxjs';\nimport { DateTimePreset, DateTimePresetConfiguration, dateTimePreset } from './datetime';\nimport { DbxDateTimeFieldMenuPresetsService } from './datetime.field.service';\nimport { DbxDateTimeValueMode, dbxDateTimeInputValueParseFactory, dbxDateTimeIsSameDateTimeFieldValue, dbxDateTimeOutputValueFactory } from './date.value';\nimport { FormControlPath, streamValueFromControl } from '../../../../form/form.angular.util';\nimport { toggleDisableFormControl } from '../../../../form/form';\nimport { ErrorStateMatcher } from '@angular/material/core';\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 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})\nexport class DbxDateTimeFieldComponent extends FieldType<FieldTypeConfig<DbxDateTimeFieldProps>> implements OnInit, OnDestroy {\n private readonly cdRef = inject(ChangeDetectorRef);\n private readonly dbxDateTimeFieldConfigService = inject(DbxDateTimeFieldMenuPresetsService);\n\n private _sub = new SubscriptionObject();\n private _valueSub = new SubscriptionObject();\n private _autoFillDateSync = new SubscriptionObject();\n\n private _config = new BehaviorSubject<Maybe<Observable<DbxDateTimePickerConfiguration>>>(undefined);\n readonly latestConfig$ = this._config.pipe(switchMapMaybeDefault(), distinctUntilChanged(), shareReplay(1));\n\n private _syncConfigObs = new BehaviorSubject<Maybe<Observable<ArrayOrValue<DbxDateTimeFieldSyncField>>>>(undefined);\n\n private _defaultTimezone = new BehaviorSubject<Maybe<Observable<Maybe<TimezoneString>>>>(undefined);\n private _timeDate = new BehaviorSubject<Maybe<Observable<Maybe<DbxDateTimeFieldTimeDateConfig | FormControlPath | DateOrDayString>>>>(undefined);\n private _presets = new BehaviorSubject<Observable<DateTimePresetConfiguration[]>>(of([]));\n\n private _fullDayInputCtrl?: FormControl;\n private _fullDayControlObs = new BehaviorSubject<Maybe<AbstractControl<boolean>>>(undefined);\n readonly fullDayControl$ = this._fullDayControlObs.pipe(filterMaybe());\n\n private _offset = new BehaviorSubject<number>(0);\n private _formControlObs = new BehaviorSubject<Maybe<AbstractControl<Maybe<Date>>>>(undefined);\n readonly formControl$ = this._formControlObs.pipe(filterMaybe());\n\n private _cleared = new Subject<void>();\n private _updateTime = new Subject<void>();\n\n private _resyncTimeInputSub = new SubscriptionObject();\n private _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 _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 | UnixDateTimeNumber>>(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 tap(() => this.cdRef.markForCheck()),\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(skipFirstMaybe())).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 readonly rawDateTime$: Observable<Maybe<Date>> = combineLatest([\n this._config.pipe(\n first(),\n switchMap(() => (this.timeOnly ? of(null) : this.dateValue$))\n ),\n this.timeInput$.pipe(startWith(null)),\n this.fullDay$,\n this.timeDate$,\n this.isTimeCleared$\n ]).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(switchMapMaybeObs()), 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 presets$: Observable<DateTimePreset[]> = this._presets.pipe(\n switchMapMaybeObs(),\n map((x: DateTimePresetConfiguration[]) => x.map(dateTimePreset)),\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 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 skipFirstMaybe(),\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 = new FormControl(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 <div class=\"dbx-datetime-row\" fxFlex.lt-sm=\"100\" [fxFlex]=\"dateOnly ? '100' : '50'\" *ngIf=\"showDateInput$ | async\">\n <ng-container *ngTemplateOutlet=\"dateInputTemplate\"></ng-container>\n </div>\n <!-- Time -->\n <div class=\"dbx-datetime-row\" fxFlex.lt-sm=\"100\" [fxFlex]=\"(showDateInput$ | async) ? '50' : '100'\">\n <ng-container *ngIf=\"showTimeInput$ | async\">\n <ng-container *ngTemplateOutlet=\"timeMenuAndInputTemplate\"></ng-container>\n </ng-container>\n <div *ngIf=\"showAddTime$ | async\" 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 </div>\n <!-- Date Hint -->\n <ng-container [ngSwitch]=\"hasError$ | async\">\n <ng-container *ngSwitchCase=\"false\">\n <div *ngIf=\"!hideDateHint\" class=\"dbx-datetime-row dbx-datetime-hint-row\" fxFlex=\"100\">\n <div class=\"dbx-hint\">\n <ng-container [ngSwitch]=\"hasEmptyDisplayValue$ | async\">\n <ng-container *ngSwitchCase=\"true\">\n <span class=\"dbx-small\">No date/time set</span>\n </ng-container>\n <ng-container *ngSwitchCase=\"false\">\n <ng-container [ngSwitch]=\"fullDay$ | async\">\n <small *ngSwitchCase=\"true\">\n <b class=\"dbx-ok\">{{ allDayLabel }}</b>\n {{ displayValue$ | async | date: 'fullDate' }} {{ timezoneAbbreviation$ | async }} ({{ displayValue$ | async | dateDistance }})\n </small>\n <small *ngSwitchCase=\"false\">\n <ng-container *ngIf=\"displayValue$ | async\">\n <b class=\"dbx-ok\">{{ atTimeLabel }}</b>\n {{ displayValue$ | async | date: 'medium' }} {{ timezoneAbbreviation$ | async }} ({{ displayValue$ | async | timeDistance }})\n </ng-container>\n </small>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"true\">\n <mat-error *ngIf=\"currentErrorMessage$ | async\">{{ currentErrorMessage$ | async }}</mat-error>\n </ng-container>\n </ng-container>\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]=\"dateInputMin$ | async\" [max]=\"dateInputMax$ | async\" [matDatepicker]=\"picker\" [matDatepickerFilter]=\"(pickerFilter$ | async) || defaultPickerFilter\" (dateChange)=\"datePicked($event)\" [value]=\"dateValue$ | async\" (keydown)=\"keydownOnDateInput($event)\" />\n <mat-datepicker #picker></mat-datepicker>\n <button matPrefix class=\"dbx-datetime-row-button\" *ngIf=\"!hideDatePicker\" mat-icon-button (click)=\"picker.open()\" [disabled]=\"disabled\">\n <mat-icon>calendar_today</mat-icon>\n </button>\n <button matSuffix *ngIf=\"showClearButton$ | async\" 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 <span matTextSuffix *ngIf=\"!(showTimeInput$ | async)\">\n <ng-container *ngTemplateOutlet=\"timezoneSuffixTemplate\"></ng-container>\n </span>\n </mat-form-field>\n</ng-template>\n\n<!-- Time Menu/Input Template -->\n<ng-template #timeMenuAndInputTemplate>\n <mat-menu #timemenu=\"matMenu\">\n <ng-container *ngIf=\"timeMode === 'optional'\">\n <button mat-menu-item (click)=\"removeTime()\">\n <span>Remove Time</span>\n </button>\n <mat-divider></mat-divider>\n </ng-container>\n <ng-container *ngFor=\"let preset of presets$ | async\">\n <button mat-menu-item (click)=\"selectPreset(preset)\">{{ preset.label | getValue }}</button>\n </ng-container>\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 <mat-error *ngIf=\"timeInputCtrl.hasError('pattern')\">The input time is not recognizable.</mat-error>\n </mat-form-field>\n</ng-template>\n\n<!-- Timezone Suffix -->\n<ng-template #timezoneSuffixTemplate>\n <span *ngIf=\"showTimezone\" class=\"dbx-datetime-timezone dbx-faint\">{{ timezoneAbbreviation$ | async }}</span>\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, DateTimezoneUtcNormalInstance, dateTimezoneUtcNormal, DateRangeInput, DateRange, isSameDateDayRange, DateRangeWithDateOrStringValue, DateTimeMinuteConfig, dateRange, isDateInDateRange, clampDateRangeToDateRange, isSameDateRange, isSameDateDay, limitDateTimeInstance, dateTimeMinuteWholeDayDecisionFunction } from '@dereekb/date';\nimport { switchMap, shareReplay, map, startWith, distinctUntilChanged, debounceTime, throttleTime, BehaviorSubject, Observable, Subject, of, combineLatestWith, filter, combineLatest, scan, first, timer } from 'rxjs';\nimport { Component, ElementRef, Injectable, OnDestroy, OnInit, ViewChild, forwardRef, inject } from '@angular/core';\nimport { AbstractControl, FormControl, FormGroup } from '@angular/forms';\nimport { FieldType } from '@ngx-formly/material';\nimport { FieldTypeConfig, FormlyFieldProps } from '@ngx-formly/core';\nimport { MatDateRangeSelectionStrategy, MAT_DATE_RANGE_SELECTION_STRATEGY, DateRange as DatePickerDateRange, MatCalendar } from '@angular/material/datepicker';\nimport { asObservableFromGetter, filterMaybe, ObservableOrValueGetter, skipFirstMaybe, SubscriptionObject, switchMapMaybeDefault } from '@dereekb/rxjs';\nimport { DbxDateTimeValueMode, dbxDateRangeIsSameDateRangeFieldValue, dbxDateTimeInputValueParseFactory, dbxDateTimeOutputValueFactory } from './date.value';\nimport { DateTimePresetConfiguration } from './datetime';\nimport { DbxDateTimeFieldMenuPresetsService } from './datetime.field.service';\nimport { DateAdapter } from '@angular/material/core';\nimport { isBefore } from 'date-fns';\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 dateRangeInput: ObservableOrValueGetter<DbxFixedDateRangeDateRangeInput>;\n\n /**\n * Selection mode to use when picking dates on the calendar.\n */\n selectionMode?: Maybe<ObservableOrValueGetter<DbxFixedDateRangeSelectionMode>>;\n\n /**\n * Value mode for the dates in the output DateRange.\n *\n * Defaults to DATE\n */\n 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 fullDayInUTC?: boolean;\n\n /**\n * Custom picker configuration\n */\n pickerConfig?: ObservableOrValueGetter<DbxFixedDateRangePickerConfiguration>;\n\n /**\n * (Optional) The input timezone to default to.\n *\n * Ignored if fullDayInUTC is true.\n */\n timezone?: Maybe<ObservableOrValueGetter<Maybe<TimezoneString>>>;\n\n /**\n * Whether or not to display the timezone. True by default.\n */\n showTimezone?: boolean;\n\n /**\n * Custom presets to show in the dropdown.\n */\n presets?: ObservableOrValueGetter<DateTimePresetConfiguration[]>;\n\n /**\n * Whether or not to show the range input. Defaults to true.\n */\n 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 lastPickType?: Maybe<FixedDateRangeScanType>;\n /**\n * The latest date passed, if applicable.\n */\n lastDateRange?: Maybe<Partial<DateRange>>;\n /**\n * The generated boundary range.\n */\n boundary?: DateRange;\n /**\n * New Date Range\n */\n range?: DateRange;\n}\n\ntype SelectedDateEventType = 'calendar' | 'input';\n\ninterface SelectedDateEvent {\n type: SelectedDateEventType;\n 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})\nexport class DbxFixedDateRangeFieldComponent extends FieldType<FieldTypeConfig<DbxFixedDateRangeFieldProps>> implements OnInit, OnDestroy {\n private readonly dbxDateTimeFieldMenuPresetsService = inject(DbxDateTimeFieldMenuPresetsService);\n\n private _sub = new SubscriptionObject();\n\n private _inputRangeFormSub = new SubscriptionObject();\n private _inputRangeFormValueSub = new SubscriptionObject();\n\n private _dateRangeInputSub = new SubscriptionObject();\n private _currentSelectionModeSub = new SubscriptionObject();\n private _latestBoundarySub = new SubscriptionObject();\n private _disableEndSub = new SubscriptionObject();\n private _activeDateSub = new SubscriptionObject();\n\n private _currentDateRangeInput: Maybe<DbxFixedDateRangeDateRangeInput> = {};\n private _currentSelectionMode: DbxFixedDateRangeSelectionMode = 'single';\n private _latestBoundary: Maybe<DateRange> = null;\n\n private _config = new BehaviorSubject<Maybe<Observable<DbxFixedDateRangePickerConfiguration>>>(undefined);\n private _selectionMode = new BehaviorSubject<Maybe<Observable<DbxFixedDateRangeSelectionMode>>>(undefined);\n private _dateRangeInput = new BehaviorSubject<Maybe<Observable<DbxFixedDateRangeDateRangeInput>>>(undefined);\n\n private _timezone = new BehaviorSubject<Maybe<Observable<Maybe<TimezoneString>>>>(undefined);\n private _presets = new BehaviorSubject<Observable<DateTimePresetConfiguration[]>>(of([]));\n\n private _selectionEvent = new Subject<SelectedDateEvent>();\n readonly selectedDateRange$: Observable<Maybe<Partial<DateRange>>> = this._selectionEvent.pipe(map((x) => x.range));\n\n private _formControlObs = new BehaviorSubject<Maybe<AbstractControl<Maybe<DateRange>>>>(undefined);\n readonly formControl$ = this._formControlObs.pipe(filterMaybe());\n\n @ViewChild(MatCalendar)\n calendar!: MatCalendar<Date>;\n\n @ViewChild('startDateInput', { read: ElementRef })\n startDateInputElement!: ElementRef;\n\n @ViewChild('endDateInput', { read: ElementRef })\n endDateInputElement!: ElementRef;\n\n get currentDateRangeInput() {\n return this._currentDateRangeInput;\n }\n\n get currentSelectionMode() {\n return this._currentSelectionMode;\n }\n\n get latestBoundary() {\n return this._latestBoundary;\n }\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 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 skipFirstMaybe(),\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._currentSelectionMode = x));\n this._dateRangeInputSub.subscription = this.dateRangeInput$.subscribe((x) => (this._currentDateRangeInput = 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._currentSelectionMode !== '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 if (this._currentSelectionMode === 'single') {\n this.setDateRange(x?.start ? { start: x.start } : null, 'input');\n } else {\n let rangeToSet: Maybe<Partial<DateRange>> = x;\n\n if (this._currentSelectionMode === 'arbitrary_quick' && this._latestBoundary && x?.start && x?.end) {\n if (!isDateInDateRange(x.start, this._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._currentDateRangeInput, 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._latestBoundarySub.subscription = this.latestBoundary$.subscribe((x) => (this._latestBoundary = x));\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._currentDateRangeInput, 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 { currentSelectionMode } = this.dbxFixedDateRangeFieldComponent;\n if (activeDate != null && currentSelectionMode !== 'single') {\n const latestBoundary = this.dbxFixedDateRangeFieldComponent.latestBoundary;\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]=\"calendarSelection$ | async\" [dateFilter]=\"(pickerFilter$ | async) || defaultPickerFilter\" [minDate]=\"min$ | async\" [maxDate]=\"max$ | async\" (selectedChange)=\"selectedChange($event)\"></mat-calendar>\n <mat-form-field class=\"dbx-fixeddaterange-field-input\" appearance=\"fill\">\n <mat-date-range-input *ngIf=\"showRangeInput\" [formGroup]=\"inputRangeForm\">\n <input #startDateInput matStartDate formControlName=\"start\" placeholder=\"Start date\" />\n <input #endDateInput [ngClass]=\"(endDisabled$ | async) ? 'dbx-fixeddaterange-field-input-end' : ''\" [attr.tabindex]=\"(endDisabled$ | async) ? -1 : 0\" matEndDate formControlName=\"end\" placeholder=\"End date\" />\n </mat-date-range-input>\n </mat-form-field>\n <mat-error *ngIf=\"formControl.hasError('required')\">Date range is required</mat-error>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxDateTimeFieldComponent } from './datetime.field.component';\nimport { DbxDatePipeModule, DbxValuePipeModule } from '@dereekb/dbx-core';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatNativeDateModule } from '@angular/material/core';\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { DbxFormFormlyWrapperModule } from '../../wrapper/form.wrapper.module';\nimport { DbxButtonModule } from '@dereekb/dbx-web';\nimport { DbxFixedDateRangeFieldComponent } from './fixeddaterange.field.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n MatInputModule,\n MatDividerModule,\n MatFormFieldModule,\n DbxButtonModule,\n MatButtonModule,\n MatDatepickerModule,\n MatNativeDateModule,\n MatMenuModule,\n ReactiveFormsModule,\n DbxDatePipeModule,\n DbxValuePipeModule,\n MatChipsModule,\n MatIconModule,\n FlexLayoutModule,\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 declarations: [DbxDateTimeFieldComponent, DbxFixedDateRangeFieldComponent],\n exports: [DbxFormFormlyWrapperModule]\n})\nexport class DbxFormFormlyDateFieldModule {}\n","import { DbxFormStyleWrapperConfig } from './style.wrapper.component';\nimport { DbxFlexWrapperConfig } from './flex.wrapper.component';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { DbxFormToggleWrapperConfig } from './toggle.wrapper.component';\nimport { DbxFormSectionConfig } from './section.wrapper.component';\nimport { DbxFormSubsectionConfig } from './subsection.wrapper.component';\nimport { DbxFormInfoConfig } from './info.wrapper.component';\nimport { DbxFormExpandWrapperConfig } from './expand.wrapper.component';\nimport { DbxFlexSize } from '@dereekb/dbx-web';\nimport { 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","import { Observable, of } from 'rxjs';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig, DescriptionFieldConfig, MaterialFormFieldConfig } from '../../field';\nimport { DbxDateTimeFieldProps, DbxDateTimeFieldTimeMode, DbxDateTimePickerConfiguration } from './datetime.field.component';\nimport { flexLayoutWrapper } from '../../wrapper/wrapper';\nimport { type Maybe } from '@dereekb/util';\nimport { 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 { 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 { AbstractControl, ValidationErrors, 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, 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 { AbstractControl, ValidatorFn } from '@angular/forms';\nimport { KeyValueTupleFilter, allObjectsAreEqual, EqualityComparatorFunction, KeyValueTypleValueFilter, 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 { AbstractControl, ValidationErrors, 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, Observable, of, catchError } from 'rxjs';\nimport { AbstractControl, 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 { AbstractControl, ValidationErrors, 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 { ValidatorFn } from '@angular/forms';\nimport { concatArrays, TransformNumberFunctionConfigRef, transformNumberFunction, mapMaybeFunction, DOLLAR_AMOUNT_PRECISION } from '@dereekb/util';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { isDivisibleBy } from '../../../../validator';\nimport { AttributesFieldConfig, LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig, DescriptionFieldConfig, validatorsForFieldConfig, FieldConfigParsersRef, FormlyValueParser, MaterialFormFieldConfig } from '../../field';\n\nexport interface NumberFieldNumberConfig {\n min?: number;\n max?: number;\n step?: number;\n enforceStep?: boolean;\n}\n\nexport type NumberFieldInputType = 'number';\n\nexport interface NumberFieldConfig extends LabeledFieldConfig, DescriptionFieldConfig, NumberFieldNumberConfig, AttributesFieldConfig, Partial<TransformNumberFunctionConfigRef>, MaterialFormFieldConfig {\n 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\nexport interface NumberSliderFieldConfig extends NumberFieldConfig {\n /**\n * Max value. Required for the slider.\n */\n max: number;\n /**\n * Whether or not to show the thumb label while sliding. Defaults to true.\n */\n thumbLabel?: boolean;\n /**\n * Whether or not to invert the selection line.\n */\n 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 tickInterval?: false | number;\n /**\n * Custom display with function for the thumbLabel.\n */\n 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\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 thumbLabel: inputThumbLabel ?? true,\n showTickMarks: Boolean(tickInterval),\n tickInterval,\n displayWith\n }),\n ...validatorsForFieldConfig({\n validators\n }),\n parsers\n });\n}\n\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 } });\n}\n","import { FormlyMaterialModule } from '@ngx-formly/material';\nimport { FormlyMatSliderModule } from '@ngx-formly/material/slider';\nimport { NgModule } from '@angular/core';\nimport { DbxFormFormlyWrapperModule } from '../../wrapper/form.wrapper.module';\n\n@NgModule({\n imports: [FormlyMaterialModule, FormlyMatSliderModule],\n declarations: [],\n exports: [DbxFormFormlyWrapperModule]\n})\nexport class DbxFormFormlyNumberFieldModule {}\n","import { Component } from '@angular/core';\nimport { FieldType } from '@ngx-formly/material'; // extend FieldType from Material, not core!\nimport { FieldTypeConfig, FormlyFieldProps } from '@ngx-formly/core';\nimport { E164PhoneNumber, E164PhoneNumberExtensionPair, Maybe, e164PhoneNumberExtensionPair, e164PhoneNumberFromE164PhoneNumberExtensionPair, objectHasNoKeys } from '@dereekb/util';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { SubscriptionObject } from '@dereekb/rxjs';\nimport { combineLatest, distinctUntilChanged, map, startWith } from 'rxjs';\nimport { isPhoneExtension } from '../../../../validator/phone';\n\nexport interface InternationalPhoneFormlyFieldProps extends FormlyFieldProps {\n preferredCountries?: Maybe<string[]>;\n onlyCountries?: Maybe<string[]>;\n /**\n * Whether or not to allow adding an extension. False by default.\n */\n allowExtension?: boolean;\n}\n\nexport const DEFAULT_PREFERRED_COUNTRIES = ['us'];\n\n@Component({\n templateUrl: 'phone.field.component.html'\n})\nexport class DbxPhoneFieldComponent extends FieldType<FieldTypeConfig<InternationalPhoneFormlyFieldProps>> {\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 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 }\n}\n","<div class=\"dbx-form-phone-field\" [formGroup]=\"inputFormGroup\">\n <ngx-mat-intl-tel-input class=\"dbx-form-phone-field-phone-content\" [required]=\"required\" [preferredCountries]=\"preferredCountries\" [enablePlaceholder]=\"false\" name=\"phone\" [formControl]=\"phoneCtrl\"></ngx-mat-intl-tel-input>\n <div *ngIf=\"allowExtension\" class=\"dbx-form-phone-field-extension-content\">\n <span class=\"dbx-hint dbx-button-spacer\">Ext.</span>\n <input class=\"dbx-form-phone-field-extension-input\" placeholder=\"123\" minlength=\"0\" maxlength=\"6\" #extensionInput [formControl]=\"extensionCtrl\" />\n </div>\n</div>\n","import { MatFormFieldModule } from '@angular/material/form-field';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxPhoneFieldComponent } from './phone.field.component';\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\nimport { FormlyMatFormFieldModule } from '@ngx-formly/material/form-field';\nimport { NgxMatIntlTelInputComponent } from 'ngx-mat-intl-tel-input';\n\n@NgModule({\n imports: [\n CommonModule,\n MatInputModule,\n MatFormFieldModule,\n FormsModule,\n ReactiveFormsModule,\n MatAutocompleteModule,\n MatChipsModule,\n MatIconModule,\n FlexLayoutModule,\n FormlyMatFormFieldModule,\n FormlyModule.forChild({\n types: [{ name: 'intphone', component: DbxPhoneFieldComponent, wrappers: ['form-field'] }]\n }),\n NgxMatIntlTelInputComponent\n ],\n declarations: [DbxPhoneFieldComponent],\n exports: []\n})\nexport class DbxFormFormlyPhoneFieldModule {}\n","import { concatArrays, mapMaybeFunction, transformStringFunction, TransformStringFunctionConfig, TransformStringFunctionConfigRef } from '@dereekb/util';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { AttributesFieldConfig, LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig, DescriptionFieldConfig, FormlyValueParser, FieldConfigParsersRef, 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 { DbxFormSectionConfig } from '../../wrapper/section.wrapper.component';\nimport { sectionWrapper, flexLayoutWrapper } from '../../wrapper/wrapper';\nimport { textField, TextFieldConfig } from '../text/text.field';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { LabeledFieldConfig, formlyField, propsAndConfigForFieldConfig, validatorsForFieldConfig } from '../../field';\nimport { InternationalPhoneFormlyFieldProps } from './phone.field.component';\nimport { repeatArrayField, 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, 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 allowExtension,\n preferredCountries,\n onlyCountries\n }),\n ...validatorsForFieldConfig({\n validators: [isE164PhoneNumber(allowExtension)]\n })\n });\n\n return fieldConfig;\n}\n\nexport interface WrappedPhoneAndLabelFieldConfig {\n phoneField?: Partial<InternationalPhoneFieldConfig>;\n 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 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 { FormlyFieldConfig } from '@ngx-formly/core';\nimport { Validators, AbstractControl } from '@angular/forms';\nimport { TextFieldConfig, textField } from './text.field';\nimport { LabeledFieldConfig, 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\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\nexport interface EmailFieldConfig extends Partial<LabeledFieldConfig>, DescriptionFieldConfig {\n 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\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\nexport interface StateFieldConfig extends Partial<TextFieldConfig> {\n 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\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\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\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 { FormlyFieldConfig } from '@ngx-formly/core';\nimport { textField, TextFieldConfig } from './text.field';\nimport { cityField, CityFieldConfig, countryField, CountryFieldConfig, stateField, StateFieldConfig, zipCodeField, ZipCodeFieldConfig } from './text.additional.field';\nimport { flexLayoutWrapper, sectionWrapper } from '../../wrapper/wrapper';\nimport { FieldConfig } from '../../field';\nimport { repeatArrayField } from '../array/array.field';\nimport { DbxFormSectionConfig } from '../../wrapper/section.wrapper.component';\nimport { ADDRESS_LINE_MAX_LENGTH } from '@dereekb/model';\n\nexport interface AddressFormlyFieldsConfig {\n line1Field?: CityFieldConfig;\n line2Field?: CityFieldConfig;\n cityField?: CityFieldConfig;\n stateField?: StateFieldConfig;\n zipCodeField?: ZipCodeFieldConfig;\n countryField?: CountryFieldConfig;\n /**\n * Whether or not to make required fields required.\n *\n * True by default.\n */\n requiredFields?: boolean;\n /**\n * Whether or not to include the second address line.\n *\n * True by default.\n */\n includeLine2?: boolean;\n /**\n * Whether or not to include the country.\n *\n * True by default.\n */\n includeCountry?: boolean;\n}\n\nexport interface AddressLineFieldConfig extends Partial<TextFieldConfig> {\n 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 { requiredFields = true, includeLine2 = true, includeCountry = true } = config;\n\n const singleLineFields = [\n {\n field: cityField({ required: requiredFields, ...config.cityField })\n },\n {\n field: stateField({ required: requiredFields, ...config.stateField })\n },\n {\n field: zipCodeField({ required: requiredFields, ...config.zipCodeField })\n }\n ];\n\n if (includeCountry) {\n singleLineFields.push({\n field: countryField({ required: requiredFields, ...config.countryField })\n });\n }\n\n let lines: FormlyFieldConfig[];\n\n if (includeLine2) {\n lines = [addressLineField({ required: requiredFields, ...config.line1Field, line: 1 }), addressLineField({ ...config.line2Field, line: 2 })];\n } else {\n lines = [addressLineField({ required: requiredFields, ...config.line1Field, line: 0 })];\n }\n\n return [...lines, flexLayoutWrapper(singleLineFields, { size: 1, relative: true })];\n}\n\nexport interface AddressFieldConfig extends 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\nexport interface AddressListFieldConfig extends FieldConfig, AddressFormlyFieldsConfig {\n 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/form.wrapper.module';\n\n@NgModule({\n imports: [FormlyMaterialModule],\n declarations: [],\n exports: [DbxFormFormlyWrapperModule]\n})\nexport class DbxFormFormlyTextFieldModule {}\n","import { FormlyFieldConfig } from '@ngx-formly/core';\nimport { 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 { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DbxFormFormlyArrayFieldModule } from './array/array.field.module';\nimport { DbxFormFormlyBooleanFieldModule } from './boolean/boolean.field.module';\nimport { DbxFormFormlyPhoneFieldModule } from './phone/phone.field.module';\nimport { DbxFormFormlyDateFieldModule } from './date/date.field.module';\nimport { DbxFormFormlyTextFieldModule } from './text/text.field.module';\nimport { DbxFormFormlyNumberFieldModule } from './number/number.field.module';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [],\n exports: [DbxFormFormlyArrayFieldModule, DbxFormFormlyBooleanFieldModule, DbxFormFormlyDateFieldModule, DbxFormFormlyPhoneFieldModule, DbxFormFormlyNumberFieldModule, DbxFormFormlyTextFieldModule]\n})\nexport class DbxFormFormlyValueModule {}\n","import { DbxFormFormlyTextEditorFieldModule } from './texteditor/texteditor.field.module';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DbxFormFormlyChecklistItemFieldModule } from './checklist/checklist.item.field.module';\nimport { DbxFormFormlyComponentFieldModule } from './component/component.field.module';\nimport { DbxFormFormlySelectionModule } from './selection/selection.module';\nimport { DbxFormFormlyWrapperModule } from './wrapper/form.wrapper.module';\nimport { DbxFormFormlyValueModule } from './value/value.module';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [],\n exports: [DbxFormFormlyChecklistItemFieldModule, DbxFormFormlyComponentFieldModule, DbxFormFormlySelectionModule, DbxFormFormlyTextEditorFieldModule, DbxFormFormlyValueModule, DbxFormFormlyWrapperModule]\n})\nexport class DbxFormFormlyFieldModule {}\n","import { Provider } from '@angular/core';\nimport { BehaviorSubject, Observable, of, switchMap, shareReplay, distinctUntilChanged } from 'rxjs';\nimport { DbxForm, DbxFormDisabledKey, DbxFormEvent, DbxFormState, DbxMutableForm, DEFAULT_FORM_DISABLED_KEY, provideDbxMutableForm } from '../form/form';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { LockSet, filterMaybe } from '@dereekb/rxjs';\nimport { BooleanStringKeyArray, BooleanStringKeyArrayUtility, 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 [\n {\n provide: DbxFormlyContext,\n useClass: DbxFormlyContext\n },\n ...provideDbxMutableForm(DbxFormlyContext)\n ];\n}\n\n/**\n * DbxForm Instance that registers a delegate and manages the state of that form/delegate.\n */\nexport class DbxFormlyContext<T = unknown> implements DbxForm<T> {\n private static INITIAL_STATE: DbxFormEvent = { isComplete: false, state: DbxFormState.INITIALIZING, status: 'PENDING' };\n\n readonly lockSet = new LockSet();\n\n private _fields = new BehaviorSubject<Maybe<FormlyFieldConfig[]>>(undefined);\n private _initialValue = new BehaviorSubject<Maybe<Partial<T>>>(undefined);\n private _disabled = new BehaviorSubject<BooleanStringKeyArray>(undefined);\n private _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 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 { SubscriptionObject, filterMaybe } from '@dereekb/rxjs';\nimport { Observable, BehaviorSubject, shareReplay, distinctUntilChanged } from 'rxjs';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { OnInit, OnDestroy, Directive, Input, inject } from '@angular/core';\nimport { DbxFormlyContext } from './formly.context';\nimport { type Maybe } from '@dereekb/util';\nimport { DbxFormDisabledKey } from '../form/form';\n\n/**\n * Abstract component for wrapping a form.\n */\n@Directive()\nexport abstract class AbstractFormlyFormDirective<T> implements OnDestroy {\n readonly context = inject(DbxFormlyContext<T>);\n\n @Input()\n get disabled(): boolean {\n return this.context.isDisabled();\n }\n\n set disabled(disabled: boolean) {\n this.context.setDisabled(undefined, disabled);\n }\n\n ngOnDestroy(): void {\n this.context.destroy();\n }\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, OnDestroy {\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, OnDestroy {\n /**\n * Used to provide fields to the context.\n */\n abstract readonly fields$: Observable<Maybe<FormlyFieldConfig[]>>;\n\n private _fieldsSub = new SubscriptionObject();\n\n ngOnInit(): void {\n this._fieldsSub.subscription = this.fields$.pipe(distinctUntilChanged()).subscribe((fields) => {\n this.context.fields = fields;\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._fieldsSub.destroy();\n }\n}\n\n@Directive()\nexport abstract class AbstractConfigAsyncFormlyFormDirective<T, C> extends AbstractAsyncFormlyFormDirective<T> implements OnInit, OnDestroy {\n private readonly _config = new BehaviorSubject<Maybe<C>>(undefined);\n\n readonly currentConfig$ = this._config.asObservable();\n readonly config$ = this._config.pipe(filterMaybe(), shareReplay(1));\n\n @Input()\n get config(): Maybe<C> {\n return this._config.value;\n }\n\n set config(config: Maybe<C>) {\n this._config.next(config);\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._config.complete();\n }\n}\n","import { type Maybe } from '@dereekb/util';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { MaterialFormFieldConfig, textField } from '../field';\n\nexport interface DbxFormSearchFormFieldsValue {\n search: string;\n}\n\nexport interface DbxFormSearchFormFieldsConfig extends MaterialFormFieldConfig {\n label?: string;\n 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 { Component, OnDestroy, OnInit, inject } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { FormlyFieldConfig, FormlyFormOptions } from '@ngx-formly/core';\nimport { distinctUntilChanged, map, throttleTime, startWith, BehaviorSubject, Observable, Subject, switchMap, shareReplay, of, scan, filter, timer, first, merge, delay } from 'rxjs';\nimport { AbstractSubscriptionDirective } from '@dereekb/dbx-core';\nimport { DbxForm, DbxFormDisabledKey, DbxFormEvent, DbxFormState, DEFAULT_FORM_DISABLED_KEY, provideDbxMutableForm, toggleDisableFormControl } from '../form/form';\nimport { DbxFormlyContext, DbxFormlyContextDelegate, DbxFormlyInitialize } from './formly.context';\nimport { scanCount, switchMapMaybeObs, SubscriptionObject } from '@dereekb/rxjs';\nimport { BooleanStringKeyArray, BooleanStringKeyArrayUtility, iterablesAreSetEquivalent, type Maybe } from '@dereekb/util';\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\" [fields]=\"(fields$ | async) ?? []\" [model]=\"model\"></formly-form>\n </form>\n `,\n providers: provideDbxMutableForm(DbxFormlyFormComponent),\n host: {\n class: 'dbx-formly'\n }\n})\nexport class DbxFormlyFormComponent<T> extends AbstractSubscriptionDirective implements DbxForm, DbxFormlyContextDelegate<T>, OnInit, OnDestroy {\n private readonly _dbxFormlyContext = inject(DbxFormlyContext<T>);\n\n private _fields = new BehaviorSubject<Maybe<Observable<FormlyFieldConfig[]>>>(undefined);\n private _events = new BehaviorSubject<DbxFormEvent>({ isComplete: false, state: DbxFormState.INITIALIZING, status: 'PENDING' });\n private _disabled = new BehaviorSubject<BooleanStringKeyArray>(undefined);\n\n private _reset = new BehaviorSubject<Date>(new Date());\n private _forceUpdate = new Subject<void>();\n\n private _disabledSub = new SubscriptionObject();\n private _enforceDisabledSub = new SubscriptionObject();\n\n readonly form = new FormGroup({});\n\n model: T = {} as T;\n options: FormlyFormOptions = {};\n\n readonly fields$ = this._fields.pipe(switchMapMaybeObs(), 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 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 override ngOnDestroy(): void {\n this._dbxFormlyContext.lockSet.onNextUnlock(() => {\n super.ngOnDestroy();\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 // 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 // console.log('set value: ', value);\n this.model = 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 { Component, Output, EventEmitter, OnDestroy } from '@angular/core';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { map, Observable } from 'rxjs';\nimport { provideFormlyContext } from '../formly.context';\nimport { AbstractConfigAsyncFormlyFormDirective } from '../formly.directive';\nimport { dbxFormSearchFormFields, DbxFormSearchFormFieldsConfig, DbxFormSearchFormFieldsValue } from './form.form';\n\n@Component({\n template: `\n <dbx-formly (dbxFormValueChange)=\"searchChanged($event)\"></dbx-formly>\n `,\n selector: 'dbx-form-search-form',\n providers: [provideFormlyContext()],\n host: {\n class: 'd-block dbx-form-search-form'\n }\n})\nexport class DbxFormSearchFormComponent extends AbstractConfigAsyncFormlyFormDirective<DbxFormSearchFormFieldsValue, DbxFormSearchFormFieldsConfig> implements OnDestroy {\n @Output()\n readonly search = new EventEmitter<string>();\n\n readonly fields$: Observable<FormlyFieldConfig[]> = this.currentConfig$.pipe(map(dbxFormSearchFormFields));\n\n searchChanged(value: DbxFormSearchFormFieldsValue) {\n this.search.next(value.search ?? '');\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this.search.complete();\n }\n}\n","import { FormlyFieldConfig } from '@ngx-formly/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { Directive, OnDestroy, Input } from '@angular/core';\nimport { provideFormlyContext } from './formly.context';\nimport { AbstractAsyncFormlyFormDirective } from './formly.directive';\nimport { type Maybe } from '@dereekb/util';\n\n/**\n * Provides an DbxFormlyContext and has an input for fields.\n */\n@Directive({\n selector: '[dbxFormlyFields]',\n providers: provideFormlyContext()\n})\nexport class DbxFormlyFieldsContextDirective<T = unknown> extends AbstractAsyncFormlyFormDirective<T> implements OnDestroy {\n private _fields = new BehaviorSubject<Maybe<FormlyFieldConfig[]>>(undefined);\n readonly fields$ = this._fields.asObservable();\n\n @Input('dbxFormlyFields')\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 override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._fields.complete();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { DbxFormlyFormComponent } from './formly.form.component';\nimport { FormlyMatToggleModule } from '@ngx-formly/material/toggle';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DbxFormlyFieldsContextDirective } from './formly.context.directive';\n\n@NgModule({\n imports: [CommonModule, FormsModule, ReactiveFormsModule, FormlyModule, FormlyMatToggleModule],\n declarations: [DbxFormlyFormComponent, DbxFormlyFieldsContextDirective],\n exports: [\n // Modules (?)\n FormsModule,\n ReactiveFormsModule,\n // Directives\n DbxFormlyFormComponent,\n DbxFormlyFieldsContextDirective\n // Helper Modules\n ]\n})\nexport class DbxFormlyModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DbxFormSearchFormComponent } from './search.form.component';\nimport { DbxFormlyModule } from '../formly.module';\nimport { DbxFormModule } from '../../form/form.module';\nimport { DbxFormFormlyFieldModule } from '../field';\n\n@NgModule({\n imports: [CommonModule, DbxFormModule, DbxFormlyModule, DbxFormFormlyFieldModule],\n declarations: [DbxFormSearchFormComponent],\n exports: [DbxFormSearchFormComponent]\n})\nexport class DbxFormFormlyFormModule {}\n","import { TextFieldConfig, textField } from '../field/value/text/text.field';\nimport { EmailFieldConfig, emailField } from '../field/value/text/text.additional.field';\nimport { fieldValuesAreEqualValidator } from '../../validator/field';\nimport { 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 * @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 password?: TextPasswordFieldConfig;\n 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 email?: Omit<EmailFieldConfig, 'key'>;\n username?: Omit<TextFieldConfig, 'key'>;\n}\n\n/**\n * usernamePasswordLoginFields() configuration.\n */\nexport interface UsernameLoginFieldsConfig {\n username: 'email' | 'username' | UsernameLoginFieldUsernameConfig;\n password?: TextPasswordFieldConfig;\n verifyPassword?: Maybe<boolean | TextPasswordFieldConfig>;\n}\n\n/**\n * Value type exported by usernameLoginFields()\n */\nexport interface DefaultUsernameLoginFieldsValue {\n username: string;\n password: string;\n 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 let usernameField: FormlyFieldConfig;\n let usernameFieldConfig: UsernameLoginFieldUsernameConfig = username as UsernameLoginFieldUsernameConfig;\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.username, ...defaultUsernameFieldConfig });\n } else {\n usernameField = textField({ ...usernameFieldConfig.username, ...defaultUsernameFieldConfig });\n }\n\n const passwordField = verifyPassword ? textPasswordWithVerifyFieldGroup({ password, verifyPassword: verifyPassword === true ? undefined : verifyPassword }) : textPasswordField(password);\n\n return [usernameField, passwordField];\n}\n","import { FormlyFieldConfig } from '@ngx-formly/core';\nimport { FieldValueIsAvailableValidatorConfig, fieldValueIsAvailableValidator } from '../../validator/available';\nimport { textField, TextFieldConfig } from '../field/value/text/text.field';\nimport { workingWrapper } from '../field/wrapper/wrapper';\n\nexport interface TextAvailableFieldConfig extends TextFieldConfig, Omit<FieldValueIsAvailableValidatorConfig<string>, 'message'> {\n 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 { type TimezoneString } from '@dereekb/util';\nimport { allTimezoneInfos, searchTimezoneInfos, TimezoneInfo, timezoneInfoForSystem } from '@dereekb/date';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { Observable, of } from 'rxjs';\nimport { SearchableValueFieldStringSearchFn, SearchableValueFieldValue, SearchableValueFieldDisplayFn, SearchableValueFieldDisplayValue } from '../field/selection/searchable';\nimport { searchableTextField, 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 { Component } from '@angular/core';\n\n/**\n * Provides vertical spacing after a form.\n */\n@Component({\n selector: 'dbx-form-spacer',\n template: `\n <div class=\"dbx-form-spacer\"></div>\n `\n})\nexport class DbxFormSpacerComponent {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DbxFormSpacerComponent } from './form.spacer.component';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [DbxFormSpacerComponent],\n exports: [DbxFormSpacerComponent]\n})\nexport class DbxFormLayoutModule {}\n","import { NgModule } from '@angular/core';\nimport { DbxFormlyModule } from './formly/formly.module';\nimport { DbxFormModule } from './form/form.module';\nimport { DbxFormFormlyFieldModule } from './formly/field/form.field.module';\nimport { DbxFormFormlyFormModule } from './formly/form/form.form.module';\n\n@NgModule({\n exports: [DbxFormModule, DbxFormlyModule, DbxFormFormlyFieldModule, DbxFormFormlyFormModule]\n})\nexport class DbxFormExtensionModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i3","i4","i5","i6","i7","i1","i2","FieldType","i8","i8.DbxSearchableFieldAutocompleteItemComponent","i7.DbxSearchableFieldAutocompleteItemComponent","TIME_OUTPUT_THROTTLE_TIME","i9","i11","i12","DatePickerDateRange","isE164PhoneNumberFunction","i1.DbxFormValueChangesDirective","i2.DbxFormlyFormComponent"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA;;AAEG;IACS,aAaX;AAbD,CAAA,UAAY,YAAY,EAAA;AACtB;;AAEG;AACH,IAAA,YAAA,CAAA,YAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,CAAA,GAAA,cAAiB,CAAA;AACjB;;AAEG;AACH,IAAA,YAAA,CAAA,YAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS,CAAA;AACT;;AAEG;AACH,IAAA,YAAA,CAAA,YAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACV,CAAC,EAbW,YAAY,KAAZ,YAAY,GAavB,EAAA,CAAA,CAAA,CAAA;AAOM,MAAM,yBAAyB,GAAG,oBAAoB;AA0B7D;;AAEG;MACmB,OAAO,CAAA;AAY5B,CAAA;AAEK,MAAgB,cAA4B,SAAQ,OAAU,CAAA;AA6BnE,CAAA;AAEK,SAAU,cAAc,CAAoB,UAAmB,EAAA;AACnE,IAAA,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,UAAU,CAAC,EAAE,CAAC,CAAC;AAC3E,CAAC;AAEK,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,CAAC;AACjH,CAAC;SAEe,wBAAwB,CAAC,IAA0B,EAAE,UAAmB,EAAE,MAAkD,EAAA;AAC1I,IAAA,IAAI,UAAU,EAAE;AACd,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACtB,KAAA;AAAM,SAAA;AACL,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACrB,KAAA;AACH;;AC7GO,MAAM,4BAA4B,GAAG,kBAAkB;AAI9D;;;;;;AAMG;MAIU,sBAAsB,CAAA;AACxB,IAAA,IAAI,GAAG,MAAM,EAAC,cAAiB,GAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACjD,IAAA,MAAM,GAAG,MAAM,EAAC,mCAA+C,EAAC,CAAC;AAEjE,IAAA,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAEjC;;;AAGG;AAEH,IAAA,sBAAsB,CAAsB;AAE5C;;AAEG;AAEH,IAAA,qBAAqB,CAAyB;AAE9C;;AAEG;AAEH,IAAA,qBAAqB,CAAuC;AAEpD,IAAA,yBAAyB,GAAG,IAAI,eAAe,CAAU,IAAI,CAAC,CAAC;AAE/D,IAAA,aAAa,GAAG,IAAI,kBAAkB,EAAE,CAAC;AACzC,IAAA,cAAc,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAC1C,IAAA,aAAa,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAEjD,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,CAAC;AACzD,SAAA;AAED,QAAA,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;KAC7D;AAED,IAAA,IACI,qBAAqB,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC;KAC7C;IAED,IAAI,qBAAqB,CAAC,qBAA8B,EAAA;AACtD,QAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,IAAI,IAAI,CAAC,CAAC,CAAC;KAC7E;IAED,QAAQ,GAAA;;QAEN,IAAI,CAAC,aAAa,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU;aACrD,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,CAAC;AAC9B,YAAA,MAAM,SAAS,GAAG,EAAE,CAAC;AAErB,YAAA,IAAI,GAAiD,CAAC;AAEtD,YAAA,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;AACxB,oBAAA,IAAI,WAAW,EAAE;AACf,wBAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7C,qBAAA;AAAM,yBAAA;AACL,wBAAA,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;AACtB,qBAAA;iBACF,CAAC,EACF,UAAU,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAC7C,CACF,CACF,CAAC;AACH,aAAA;AAAM,iBAAA;AACL,gBAAA,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AACrB,aAAA;AAED,YAAA,OAAO,GAAG,CAAC;SACZ,CAAC,CACH,CACF,CACF;AACA,aAAA,SAAS,CAAC,CAAC,MAAwC,KAAI;YACtD,IAAI,MAAM,CAAC,MAAM,EAAE;gBACjB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACnC,aAAA;AAAM,iBAAA,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE;gBAC/B,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACtC,aAAA;AAAM,iBAAA;;AAEN,aAAA;AACH,SAAC,CAAC,CAAC;;QAGL,IAAI,CAAC,cAAc,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO;aACjD,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,CAAC;AAExI,gBAAA,IAAI,YAAiC,CAAC;AAEtC,gBAAA,MAAM,mBAAmB,GAAG,KAAK,CAAC,UAAU,CAAC;AAC7C,gBAAA,IAAI,mBAAmB,EAAE;oBACvB,YAAY,GAAG,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;AAC5F,iBAAA;AAAM,qBAAA;AACL,oBAAA,YAAY,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;AAC1B,iBAAA;AAED,gBAAA,IAAI,WAAgC,CAAC;gBAErC,MAAM,oBAAoB,GAAG,KAAK,CAAC,QAAQ,KAAK,KAAK,IAAI,iBAAiB,CAAC;AAC3E,gBAAA,IAAI,oBAAoB,EAAE;oBACxB,WAAW,GAAG,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;AACzF,iBAAA;AAAM,qBAAA;AACL,oBAAA,WAAW,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;AACzB,iBAAA;AAED,gBAAA,OAAO,aAAa,CAAC,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CACpD,KAAK,EAAE,EACP,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAqB,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CACpF,CAAC;aACH,CAAC,CACH,CAAC;AACJ,SAAC,CAAC,CACH;aACA,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,sBAAsB,KAAI;;;AAIrD,YAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;;YAGpC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;AAC1D,SAAC,CAAC,CAAC;;AAGL,QAAA,IAAI,CAAC,aAAa,CAAC,YAAY,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC;AACtG,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,aAAa,CAAqB,KAAK,aAAa,IAAI,SAAS,CAAC,EACnF,oBAAoB,EAAE,CACvB;AACA,aAAA,SAAS,CAAC,CAAC,OAAO,KAAI;YACrB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,4BAA4B,EAAE,OAAO,CAAC,CAAC;AAC/D,SAAC,CAAC,CAAC;KACN;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC;AACjD,QAAA,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,MAAK;AACpC,YAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;AAC7B,YAAA,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;AAC9B,YAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;AAC7B,YAAA,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,CAAC;YAC1C,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;AAC7D,SAAC,CAAC,CAAC;KACJ;AAES,IAAA,kBAAkB,CAAC,KAAQ,EAAA;QACnC,MAAM,YAAY,GAAwB,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACtH,MAAM,WAAW,GAAwB,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;AAEnH,QAAA,OAAO,aAAa,CAAC,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CACpD,KAAK,EAAE,EACP,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAqB,KAAK,KAAK,IAAI,QAAQ,CAAC,CAClE,CAAC;KACH;AAES,IAAA,UAAU,CAAC,KAAQ,EAAA;QAC3B,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC9B,OAAO,YAAY,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC;AACxD,SAAA;AAAM,aAAA;YACL,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,KAAqB,EAAE,CAAC,CAAC;AAC7C,SAAA;KACF;wGA1LU,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAAtB,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC5B,iBAAA,CAAA;0EAYC,sBAAsB,EAAA,CAAA;sBADrB,KAAK;gBAON,qBAAqB,EAAA,CAAA;sBADpB,KAAK;gBAON,qBAAqB,EAAA,CAAA;sBADpB,KAAK;gBAkBF,qBAAqB,EAAA,CAAA;sBADxB,KAAK;;;ACxDR;;;;AAIG;AAIG,MAAO,4BAAmC,SAAQ,kCAAwC,CAAA;AACrF,IAAA,aAAa,GAAG,MAAM,EAAC,sBAAyB,GAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAGlE,eAAe,GAAmC,MAAM,CAAC;AAE/C,IAAA,yBAAyB,CAAC,UAAsB,EAAA;AACjE,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;AAC1C,QAAA,OAAO,KAAK,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAC;KACpD;wGATU,4BAA4B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAA5B,4BAA4B,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,eAAA,EAAA,CAAA,qBAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAA5B,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAHxC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uBAAuB;AAClC,iBAAA,CAAA;8BAKU,eAAe,EAAA,CAAA;sBADvB,KAAK;uBAAC,qBAAqB,CAAA;;;MCPjB,6BAA6B,CAAA;wGAA7B,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAA7B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,6BAA6B,EAHzB,YAAA,EAAA,CAAA,4BAA4B,CADjC,EAAA,OAAA,EAAA,CAAA,YAAY,aAEZ,4BAA4B,CAAA,EAAA,CAAA,CAAA;AAE3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,6BAA6B,YAJ9B,YAAY,CAAA,EAAA,CAAA,CAAA;;4FAIX,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBALzC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,YAAY,EAAE,CAAC,4BAA4B,CAAC;oBAC5C,OAAO,EAAE,CAAC,4BAA4B,CAAC;AACxC,iBAAA,CAAA;;;MCEY,mBAAmB,CAAA;wGAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,iBAHf,sBAAsB,CAAA,EAAA,OAAA,EAAA,CAD3B,YAAY,EAAE,eAAe,aAE7B,sBAAsB,CAAA,EAAA,CAAA,CAAA;yGAErB,mBAAmB,EAAA,OAAA,EAAA,CAJpB,YAAY,EAAE,eAAe,CAAA,EAAA,CAAA,CAAA;;4FAI5B,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,eAAe,CAAC;oBACxC,YAAY,EAAE,CAAC,sBAAsB,CAAC;oBACtC,OAAO,EAAE,CAAC,sBAAsB,CAAC;AAClC,iBAAA,CAAA;;;SCFe,uBAAuB,CAAI,IAAoB,EAAE,QAA8B,EAAE,KAA6C,EAAA;IAC5I,OAAO,iCAAiC,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC1E,CAAC;SAEe,iCAAiC,CAAI,OAAoC,EAAE,QAA8B,EAAE,KAA6C,EAAA;AACtK,IAAA,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3D,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CACzB,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EACnB,oBAAoB,EAAE,CACvB,CAAC;AAEF,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;QAC7C,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,CAAC;AAC3B,oBAAA,MAAM,WAAW,GAAG,IAAI,OAAO,EAAE,CAAC;oBAElC,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;AACtC,yBAAA;AAAM,6BAAA;AACL,4BAAA,OAAO,CAAC,KAAK,EAAE,KAAK,CAAiB,CAAC;AACvC,yBAAA;qBACF,CAAC,EACF,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,KAAI;wBACpB,cAAc,GAAG,IAAI,CAAC;wBACtB,IAAI,CAAC,IAAI,EAAE;AACT,4BAAA,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC7B,yBAAA;AACH,qBAAC,CAAC,EACF,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,EAC/B,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAChB,SAAS,CAAC,WAAW,CAAC,EACtB,OAAO,CAAC,MAAK;wBACX,WAAW,CAAC,QAAQ,EAAE,CAAC;qBACxB,CAAC,CACH,CAAC;AACH,iBAAA;AAAM,qBAAA;AACL,oBAAA,OAAO,KAAK,CAAC;AACd,iBAAA;aACF,CAAC,CACH,CAAC;AACH,SAAA;AAAM,aAAA;;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;AAClC,gBAAA,IAAI,YAAY,EAAE;AAChB,oBAAA,OAAO,KAAK,CAAC;AACd,iBAAA;AAAM,qBAAA;oBACL,IAAI,QAAQ,GAAG,MAAM,CAAC;oBAEtB,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,CAAC;6BACnU;AACF,yBAAA,CAAC,CACH,CAAC;AACH,qBAAA;AAED,oBAAA,OAAO,QAAQ,CAAC;AACjB,iBAAA;aACF,CAAC,CACH,CAAC;AACH,SAAA;KACF,CAAC,CACH,CAAC;AACJ,CAAC;AAWD;;AAEG;AAIG,MAAO,sBAA0B,SAAQ,6BAA6B,CAAA;AACjE,IAAA,IAAI,GAAG,MAAM,EAAC,cAAiB,GAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAEzC,IAAA,KAAK,GAAG,IAAI,eAAe,CAA6B,OAAO,CAAC,CAAC;AAElF,IAAA,IACI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;KACzB;IAED,IAAI,IAAI,CAAC,IAAgC,EAAA;AACvC,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACvB;IAED,IACI,GAAG,CAAC,GAAgD,EAAA;AACtD,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;KAClB;AAEO,IAAA,MAAM,CAAC,QAAqD,EAAA;AAClE,QAAA,IAAI,YAAY,CAAC;AAEjB,QAAA,IAAI,QAAQ,EAAE;YACZ,YAAY,GAAG,iCAAiC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AACxG,gBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACxB,aAAC,CAAC,CAAC;AACJ,SAAA;AAED,QAAA,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC;KACzB;IAEQ,WAAW,GAAA;QAClB,KAAK,CAAC,WAAW,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;KACvB;wGAlCU,sBAAsB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAAtB,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,CAAA,mBAAA,EAAA,MAAA,CAAA,EAAA,GAAA,EAAA,CAAA,eAAA,EAAA,KAAA,CAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC5B,iBAAA,CAAA;8BAOK,IAAI,EAAA,CAAA;sBADP,KAAK;uBAAC,mBAAmB,CAAA;gBAUtB,GAAG,EAAA,CAAA;sBADN,KAAK;uBAAC,eAAe,CAAA;;;AChHxB;;AAEG;AAIG,MAAO,6BAAyD,SAAQ,6BAA6B,CAAA;AAChG,IAAA,IAAI,GAAG,MAAM,EAAC,cAAiB,GAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAEzC,IAAA,KAAK,GAAG,IAAI,eAAe,CAA6B,OAAO,CAAC,CAAC;AAElF,IAAA,IACI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;KACzB;IAED,IAAI,IAAI,CAAC,IAAgC,EAAA;AACvC,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACvB;AAED;;AAEG;IACH,IACI,GAAG,CAAC,GAAgC,EAAA;AACtC,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;KACnB;AAEO,IAAA,OAAO,CAAC,QAAqC,EAAA;AACnD,QAAA,IAAI,YAAY,CAAC;AAEjB,QAAA,IAAI,QAAQ,EAAE;YACZ,YAAY,GAAG,iCAAiC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AACxG,gBAAA,IAAI,6BAA6B,CAAC,CAAC,CAAC,EAAE;oBACpC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAC7B,iBAAA;AACH,aAAC,CAAC,CAAC;AACJ,SAAA;AAED,QAAA,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC;KACzB;IAEQ,WAAW,GAAA;QAClB,KAAK,CAAC,WAAW,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;KACvB;wGAvCU,6BAA6B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAA7B,6BAA6B,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,CAAA,0BAAA,EAAA,MAAA,CAAA,EAAA,GAAA,EAAA,CAAA,sBAAA,EAAA,KAAA,CAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAA7B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAHzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,wBAAwB;AACnC,iBAAA,CAAA;8BAOK,IAAI,EAAA,CAAA;sBADP,KAAK;uBAAC,0BAA0B,CAAA;gBAa7B,GAAG,EAAA,CAAA;sBADN,KAAK;uBAAC,sBAAsB,CAAA;;;ACxB/B;;;;AAIG;AAIG,MAAO,4BAAgC,SAAQ,6BAA6B,CAAA;AACvE,IAAA,IAAI,GAAG,MAAM,EAAC,OAAU,GAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAG1C,IAAA,kBAAkB,GAAG,IAAI,YAAY,EAAY,CAAC;IAE3D,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO;aACzB,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,CACT;aACA,SAAS,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,KAAI;AACnC,YAAA,IAAI,UAAU,EAAE;AACd,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrC,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACzC,aAAA;AACH,SAAC,CAAC,CAAC;KACN;IAEQ,WAAW,GAAA;QAClB,KAAK,CAAC,WAAW,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CAAC;KACpC;wGA7BU,4BAA4B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAA5B,4BAA4B,EAAA,QAAA,EAAA,sBAAA,EAAA,OAAA,EAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAA5B,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAHxC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AACjC,iBAAA,CAAA;8BAKU,kBAAkB,EAAA,CAAA;sBAD1B,MAAM;;;MCNI,eAAe,CAAA;wGAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,EAHX,YAAA,EAAA,CAAA,sBAAsB,EAAE,4BAA4B,EAAE,6BAA6B,CADxF,EAAA,OAAA,EAAA,CAAA,YAAY,CAEZ,EAAA,OAAA,EAAA,CAAA,sBAAsB,EAAE,4BAA4B,EAAE,6BAA6B,CAAA,EAAA,CAAA,CAAA;AAElF,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,YAJhB,YAAY,CAAA,EAAA,CAAA,CAAA;;4FAIX,eAAe,EAAA,UAAA,EAAA,CAAA;kBAL3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,YAAY,CAAC;AACvB,oBAAA,YAAY,EAAE,CAAC,sBAAsB,EAAE,4BAA4B,EAAE,6BAA6B,CAAC;AACnG,oBAAA,OAAO,EAAE,CAAC,sBAAsB,EAAE,4BAA4B,EAAE,6BAA6B,CAAC;AAC/F,iBAAA,CAAA;;;ACDD;;;;;;AAMG;AACa,SAAA,sBAAsB,CAAI,WAA4B,EAAE,IAAsB,EAAA;AAC5F,IAAA,MAAM,OAAO,GAAG,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC;AAC3D,IAAA,OAAO,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9D;;MCXa,aAAa,CAAA;wGAAb,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,EAFd,OAAA,EAAA,CAAA,6BAA6B,EAAE,mBAAmB,EAAE,eAAe,CAAA,EAAA,CAAA,CAAA;AAElE,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,EAFd,OAAA,EAAA,CAAA,6BAA6B,EAAE,mBAAmB,EAAE,eAAe,CAAA,EAAA,CAAA,CAAA;;4FAElE,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,CAAC,6BAA6B,EAAE,mBAAmB,EAAE,eAAe,CAAC;AAC/E,iBAAA,CAAA;;;ACJe,SAAA,0BAA0B,CAAC,GAAY,EAAE,KAAsB,EAAA;AAC7E,IAAA,OAAO,uBAAuB,KAAK,CAAC,KAAK,CAAC,SAAS,cAAc,CAAC;AACpE,CAAC;AAEe,SAAA,0BAA0B,CAAC,GAAY,EAAE,KAAsB,EAAA;AAC7E,IAAA,OAAO,kCAAkC,KAAK,CAAC,KAAK,CAAC,SAAS,cAAc,CAAC;AAC/E,CAAC;AAEe,SAAA,oBAAoB,CAAC,GAAY,EAAE,KAAsB,EAAA;AACvE,IAAA,OAAO,8CAA8C,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;AAC1E,CAAC;AAEe,SAAA,oBAAoB,CAAC,GAAY,EAAE,KAAsB,EAAA;AACvE,IAAA,OAAO,8CAA8C,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;AAC1E,CAAC;AAEM,MAAM,2BAA2B,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,yBAAyB,GAAG;AAC7F,MAAM,6BAA6B,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,0BAA0B,GAA8B;AAC5H,MAAM,6BAA6B,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,0BAA0B,GAA8B;AAC5H,MAAM,sBAAsB,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,oBAAoB,GAA8B;AACzG,MAAM,sBAAsB,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,oBAAoB,GAA8B;AACzG,MAAM,4BAA4B,GAAG,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,mCAAmC,GAAG;AACnH,MAAM,sCAAsC,GAAG,EAAE,IAAI,EAAE,8BAA8B,EAAE,OAAO,EAAE,6CAA6C,GAAG;SAEvI,yBAAyB,GAAA;AACvC,IAAA,OAAO,CAAC,2BAA2B,EAAE,6BAA6B,EAAE,6BAA6B,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,4BAA4B,EAAE,sCAAsC,CAAC,CAAC;AAC3N;;AC1BA;MAUa,4CAA4C,CAAA;AAEvD,IAAA,cAAc,CAAkC;AAEhD,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC;KACnC;AAED,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC;KACtC;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC;KACzC;wGAdU,4CAA4C,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA5C,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,4CAA4C,EAR7C,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;AAMT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAEU,4CAA4C,EAAA,UAAA,EAAA,CAAA;kBATxD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,CAAA;;;;;;AAMT,EAAA,CAAA;AACF,iBAAA,CAAA;8BAGC,cAAc,EAAA,CAAA;sBADb,KAAK;;;ACUF,MAAO,8BAA4C,SAAQ,SAAyD,CAAA;AACvG,IAAA,eAAe,GAAG,IAAI,eAAe,CAAgD,SAAS,CAAC,CAAC;AACxG,IAAA,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,oBAAoB,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAEzG,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAC1C,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,EACpB,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;AAEO,IAAA,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAClD,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,KAAK,KAAK,CAAC,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAClE,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;AAEF,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,IAAiB,CAAC;KAC/B;AAED,IAAA,IAAI,eAAe,GAAA;QACjB,OAAO,IAAI,CAAC,GAAa,CAAC;KAC3B;AAED,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;KACzB;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;KAC/B;AAED,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;KAC5B;AAED,IAAA,IAAI,cAAc,GAAA;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;AAED,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC;KACvC;AAED,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,cAAc,IAAI,4CAA4C,CAAC;KAC3F;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;KAClE;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;KACjC;wGArDU,8BAA8B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAA9B,8BAA8B,EAAA,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxB3C,65BAkBA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,YAAA,EAAA,OAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,YAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,YAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,YAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,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,UAAA,CAAA,YAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,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,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,YAAA,EAAA,OAAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,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,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,YAAA,EAAA,OAAAC,IAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,YAAA,EAAA,OAAAC,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,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,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,YAAA,EAAA,OAAAC,EAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,YAAA,EAAA,ODoEa,gCAAgC,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,YAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FA9DhC,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAH1C,SAAS;;;AAiEJ,MAAO,gCAA8C,SAAQ,6BAA6B,CAAA;AACrF,IAAA,KAAK,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAClC,IAAA,2BAA2B,GAAG,MAAM,EAAC,8BAAiC,EAAC,CAAC;AAExE,IAAA,MAAM,GAAuE;AACpF,QAAA,cAAc,EAAE,IAAI,CAAC,2BAA2B,CAAC,cAAc;AAC/D,QAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,2BAA2B,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AAC1E,gBAAA,QAAQ,CAAC,cAAc,GAAG,CAAC,CAAC;AAC5B,gBAAA,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChC,aAAC,CAAC,CAAC;SACJ;KACF,CAAC;wGAZS,gCAAgC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gCAAgC,EAJjC,QAAA,EAAA,sCAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;AAET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,gDAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAEU,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAN5C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sCAAsC;AAChD,oBAAA,QAAQ,EAAE,CAAA;;AAET,EAAA,CAAA;AACF,iBAAA,CAAA;;;AEhEK,MAAO,2BAA4B,SAAQ,YAAkD,CAAA;AACjG,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;KAChC;wGAPU,2BAA2B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,EAb5B,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;AAWT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,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,WAAA,EAAA,IAAA,EAAAN,GAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,4OAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,GAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,kTAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,GAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,gNAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAEU,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAdvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;AAWT,EAAA,CAAA;AACF,iBAAA,CAAA;;;ACLK,MAAO,8BAA+B,SAAQ,YAAqD,CAAA;AACvG,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;wGAHU,8BAA8B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA9B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,8BAA8B,EAN/B,QAAA,EAAA,0BAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAEU,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAR1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,0BAA0B;AACpC,oBAAA,QAAQ,EAAE,CAAA;;;;AAIT,EAAA,CAAA;AACF,iBAAA,CAAA;;;ACYK,MAAO,2BAA4B,SAAQ,YAAqD,CAAA;AACpG,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;AAED,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;KACpC;AAED,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,IAAI,KAAK,CAAC;KAC3C;AAED,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,IAAI,KAAK,CAAC;KAChD;wGAfU,2BAA2B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,EAN5B,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAEU,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAPvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,CAAA;;;;AAIT,EAAA,CAAA;AACF,iBAAA,CAAA;;;ACVK,MAAO,iCAAkC,SAAQ,YAAsD,CAAA;AAC3G,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;wGAHU,iCAAiC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iCAAiC,EANlC,QAAA,EAAA,6BAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAEU,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAR7C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,6BAA6B;AACvC,oBAAA,QAAQ,EAAE,CAAA;;;;AAIT,EAAA,CAAA;AACF,iBAAA,CAAA;;;ACCM,MAAM,oBAAoB,GAAG,CAAC,CAAS,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE;AAG/D,MAAO,yCAAwJ,SAAQ,YAAkC,CAAA;AAC1L,IAAA,eAAe,GAAG,IAAI,eAAe,CAAyB,SAAS,CAAC,CAAC;AACzE,IAAA,WAAW,GAAG,IAAI,eAAe,CAAiB,SAAS,CAAC,CAAC;IAEvE,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AAExD,IAAA,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CACpC,SAAS,CAAC,CAAC,UAA0B,KAAI;QACvC,IAAI,UAAU,IAAI,IAAI,EAAE;AACtB,YAAA,OAAO,EAAE,CAAC,UAAU,CAAC,CAAC;AACvB,SAAA;AAAM,aAAA;YACL,OAAO,IAAI,CAAC,SAAS,CAAC;AACvB,SAAA;KACF,CAAC,EACF,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;AAEO,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,CAAC;KAC/B,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf,CACF,CACF,CAAC;AAEF,IAAA,IAAI,aAAa,GAAA;QACf,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;AAED,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,IAAK,oBAA8C,CAAC;KACzF;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,IAAI,KAAK,GAAkB,IAAI,CAAC,aAAa,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;QAErF,IAAI,KAAK,IAAI,IAAI,EAAE;YACjB,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;AAEnD,YAAA,IAAI,eAAe,EAAE;gBACnB,KAAK,GAAG,eAAe,CAAC,KAAK,EAAE,KAAK,IAAK,eAAe,CAAC,GAAc,CAAC;AACzE,aAAA;AACF,SAAA;AAED,QAAA,OAAO,KAAK,CAAC;KACd;IAED,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC7B;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;KAC7C;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;KACjC;wGA/DU,yCAAyC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAAzC,yCAAyC,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAzC,yCAAyC,EAAA,UAAA,EAAA,CAAA;kBADrD,SAAS;;;ACRV;;AAEG;AAaG,MAAO,6BAAyD,SAAQ,yCAA2E,CAAA;AACvJ,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,IAAI,QAAQ,CAAC;KAClD;wGAHU,6BAA6B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA7B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,6BAA6B,EAX9B,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;AAST,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAEU,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAZzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;AAST,EAAA,CAAA;AACF,iBAAA,CAAA;;;ACnBD;;AAEG;AAMG,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,CAAC;AACjC,gBAAA,IAAI,CAAC,WAAW,CAAC,sBAAsB,EAAE,CAAC;AAC3C,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;wGARU,8BAA8B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA9B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,8BAA8B,EAJ/B,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;AAET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;;4FAEU,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAL1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,CAAA;;AAET,EAAA,CAAA;AACF,iBAAA,CAAA;;;ACFD;;AAEG;AAaG,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,CAAC;AAC9C,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC7B,SAAA;AACH,KAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;IAEF,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,CAAC;AAC/B,SAAC,CAAC,CAAC;KACJ;wGAhBU,6BAA6B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA7B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,6BAA6B,EAX9B,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;AAST,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAEU,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAZzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;AAST,EAAA,CAAA;AACF,iBAAA,CAAA;;;ACHK,MAAO,4BAA6B,SAAQ,YAA0D,CAAA;AAClG,IAAA,MAAM,GAAG,IAAI,eAAe,CAAwC,SAAS,CAAC,CAAC;AAC/E,IAAA,MAAM,GAAG,IAAI,eAAe,CAA4B,SAAS,CAAC,CAAC;AAElE,IAAA,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AACrE,IAAA,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAE9E,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;KAC/B;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;KAC/B;IAED,QAAQ,GAAA;QACN,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;AAClD,SAAA;QAED,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;AAClD,SAAA;KACF;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;KACxB;wGA5BU,4BAA4B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA5B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,4BAA4B,EAN7B,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,6NAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,eAAA,EAAA,eAAA,EAAA,eAAA,EAAA,eAAA,EAAA,eAAA,EAAA,eAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,8NAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,eAAA,EAAA,eAAA,EAAA,eAAA,EAAA,eAAA,EAAA,eAAA,EAAA,eAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAEU,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAPxC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,CAAA;;;;AAIT,EAAA,CAAA;AACF,iBAAA,CAAA;;;ACVD;;;;AAIG;AASG,MAAO,8BAA+B,SAAQ,YAA4D,CAAA;AACrG,IAAA,GAAG,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAC/B,IAAA,cAAc,GAAG,IAAI,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAE1D,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,CAAC;AAC7D,SAAA,CAAC,CAAC;KACJ;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;AAC9B,QAAA,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;KACpB;wGAbU,8BAA8B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA9B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,8BAA8B,EAP/B,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;AAKT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,SAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAEU,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAR1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,CAAA;;;;;AAKT,EAAA,CAAA;AACF,iBAAA,CAAA;;;ACrBM,MAAM,sBAAsB,GAAG,WAAW,CAAC;AAC3C,MAAM,kBAAkB,GAAG,QAAQ,CAAC;AACpC,MAAM,mBAAmB,GAAG,SAAS,CAAC;AACtC,MAAM,sBAAsB,GAAG,YAAY,CAAC;AAC5C,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAChC,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAChC,MAAM,iBAAiB,GAAG,OAAO,CAAC;AAClC,MAAM,mBAAmB,GAAG,SAAS,CAAC;AACtC,MAAM,kBAAkB,GAAG,QAAQ;;MCuC7B,0BAA0B,CAAA;wGAA1B,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,iBAHtB,8BAA8B,EAAE,8BAA8B,EAAE,iCAAiC,EAAE,2BAA2B,EAAE,6BAA6B,EAAE,6BAA6B,EAAE,2BAA2B,EAAE,4BAA4B,EAAE,8BAA8B,aAvBpS,YAAY;YACZ,aAAa;YACb,gBAAgB;YAChB,mBAAmB;YACnB,sBAAsB;YACtB,eAAe;YACf,oBAAoB;YACpB,aAAa;YACb,gBAAgB,EAAAA,IAAA,CAAA,YAAA,CAAA,EAAA,CAAA,CAAA;AAkBP,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,YA1BnC,YAAY;YACZ,aAAa;YACb,gBAAgB;YAChB,mBAAmB;YACnB,sBAAsB;YACtB,eAAe;YACf,oBAAoB;YACpB,aAAa;YACb,gBAAgB;YAChB,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,EAAE;AACzE,iBAAA;aACF,CAAC,CAAA,EAAA,CAAA,CAAA;;4FAKO,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBA5BtC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,aAAa;wBACb,gBAAgB;wBAChB,mBAAmB;wBACnB,sBAAsB;wBACtB,eAAe;wBACf,oBAAoB;wBACpB,aAAa;wBACb,gBAAgB;wBAChB,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,EAAE;AACzE,6BAAA;yBACF,CAAC;AACH,qBAAA;AACD,oBAAA,YAAY,EAAE,CAAC,8BAA8B,EAAE,8BAA8B,EAAE,iCAAiC,EAAE,2BAA2B,EAAE,6BAA6B,EAAE,6BAA6B,EAAE,2BAA2B,EAAE,4BAA4B,EAAE,8BAA8B,CAAC;AACvS,oBAAA,OAAO,EAAE,EAAE;AACZ,iBAAA,CAAA;;;MCZY,qCAAqC,CAAA;wGAArC,qCAAqC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAArC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qCAAqC,iBAHjC,8BAA8B,EAAE,gCAAgC,EAAE,4CAA4C,aAf3H,YAAY;YACZ,aAAa;YACb,WAAW;YACX,mBAAmB;YACnB,eAAe;YACf,iBAAiB;YACjB,eAAe;YACf,aAAa;YACb,qBAAqB;YACrB,2BAA2B;AAC3B,YAAA,0BAA0B,gCAMlB,0BAA0B,CAAA,EAAA,CAAA,CAAA;AAEzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qCAAqC,YAlB9C,YAAY;YACZ,aAAa;YACb,WAAW;YACX,mBAAmB;YACnB,eAAe;YACf,iBAAiB;YACjB,eAAe;YACf,aAAa;YACb,qBAAqB;YACrB,2BAA2B;YAC3B,0BAA0B;YAC1B,YAAY,CAAC,QAAQ,CAAC;gBACpB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,8BAA8B,EAAE,CAAC;AAC9E,aAAA,CAAC,EAGM,0BAA0B,CAAA,EAAA,CAAA,CAAA;;4FAEzB,qCAAqC,EAAA,UAAA,EAAA,CAAA;kBApBjD,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,aAAa;wBACb,WAAW;wBACX,mBAAmB;wBACnB,eAAe;wBACf,iBAAiB;wBACjB,eAAe;wBACf,aAAa;wBACb,qBAAqB;wBACrB,2BAA2B;wBAC3B,0BAA0B;wBAC1B,YAAY,CAAC,QAAQ,CAAC;4BACpB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,8BAA8B,EAAE,CAAC;yBAC9E,CAAC;AACH,qBAAA;AACD,oBAAA,YAAY,EAAE,CAAC,8BAA8B,EAAE,gCAAgC,EAAE,4CAA4C,CAAC;oBAC9H,OAAO,EAAE,CAAC,0BAA0B,CAAC;AACtC,iBAAA,CAAA;;;ACmBD;;AAEG;AACG,SAAU,WAAW,CAAkD,WAAc,EAAA;AACzF,IAAA,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE;AACpB,QAAA,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;AAC3B,QAAA,MAAM,IAAI,KAAK,CAAC,CAAA,qBAAA,CAAuB,CAAC,CAAC;AAC1C,KAAA;AAED,IAAA,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;;;;AAMG;AACa,SAAA,4BAA4B,CAA4B,WAAkI,EAAE,QAA0C,EAAA;AACpP,IAAA,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,WAAW,CAAC;IAC7C,MAAM,KAAK,GAAG,wBAAwB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAE9D,OAAO;QACL,KAAK;QACL,WAAW;QACX,OAAO;KACR,CAAC;AACJ,CAAC;AAEY,MAAA,+BAA+B,GAA0C,CAAC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE;AACzJ,MAAA,qCAAqC,GAA2D;AAC3G,IAAA,UAAU,EAAE,+BAA+B;EAC3C;MAEW,sBAAsB,GAAG,oBAAoB,CAA8B,qCAAqC,EAAE;AAExH,MAAM,iDAAiD,GAAG,sBAAsB,CAA8B;AACnH,IAAA,MAAM,EAAE,qCAAqC;AAC9C,CAAA,EAAgE;AAEjD,SAAA,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,CAAC;AAC9H,IAAA,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,WAAW,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;IAEhF,MAAM,MAAM,GAAG,cAAc,CAAC;AAC5B,QAAA,GAAG,QAAQ;QACX,KAAK;QACL,WAAW;QACX,QAAQ;QACR,QAAQ;QACR,WAAW;QACX,UAAU;AACX,KAAA,CAAU,CAAC;;IAGZ,IAAI,YAAY,IAAI,IAAI,EAAE;QACxB,IAAI,YAAY,KAAK,KAAK,EAAE;YAC1B,MAAM,CAAC,UAAU,GAAG;gBAClB,GAAG,MAAM,CAAC,UAAU;AACpB,gBAAA,GAAG,oCAAoC,EAAE;aAC1C,CAAC;AACH,SAAA;AAAM,aAAA;AAEH,YAAA,MAAM,CAAC,UAGR,CAAC,cAAc,CAAC,GAAG,YAAY,CAAC;AAClC,SAAA;AACF,KAAA;AAED,IAAA,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;AAEG;SACa,oCAAoC,GAAA;;IAElD,OAAO;AACL,QAAA,IAAI,EAAE,UAAU;AAChB,QAAA,YAAY,EAAE,KAAK;KACpB,CAAC;AACJ,CAAC;AAwBK,SAAU,wBAAwB,CAAC,KAAoC,EAAA;IAC3E,MAAM,UAAU,GAAkB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC5D,MAAM,eAAe,GAAuB,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;AAC3E,IAAA,MAAM,QAAQ,GAAmC,KAAK,CAAC,QAAQ,CAAC;AAChE,IAAA,IAAI,MAAuC,CAAC;IAE5C,IAAI,QAAQ,IAAI,UAAU,CAAC,MAAM,IAAI,eAAe,CAAC,MAAM,EAAE;QAC3D,MAAM,GAAG,EAAE,CAAC;QAEZ,IAAI,UAAU,CAAC,MAAM,EAAE;YACrB,MAAM,CAAC,UAAU,GAAG;AAClB,gBAAA,UAAU,EAAE,UAAU;aACvB,CAAC;AACH,SAAA;QAED,IAAI,eAAe,CAAC,MAAM,EAAE;YAC1B,MAAM,CAAC,UAAU,GAAG;AAClB,gBAAA,UAAU,EAAE,eAAe;aAC5B,CAAC;AACH,SAAA;AAED,QAAA,IAAI,QAAQ,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE;YAC1C,MAAM,CAAC,UAAU,GAAG;gBAClB,QAAQ;aACT,CAAC;AACH,SAAA;AACF,KAAA;AAED,IAAA,OAAO,MAAM,CAAC;AAChB;;ACrLM,SAAU,kBAAkB,CAAc,MAAyC,EAAA;IACvF,MAAM,EAAE,GAAG,EAAE,iBAAiB,EAAE,cAAc,EAAE,GAAG,MAAM,CAAC;IAE1D,MAAM,WAAW,GAAG,WAAW,CAAC;QAC9B,GAAG;AACH,QAAA,IAAI,EAAE,eAAe;QACrB,GAAG,4BAA4B,CAAC,MAAM,EAAE;YACtC,iBAAiB;YACjB,cAAc;SACf,CAAC;AACH,KAAA,CAAC,CAAC;AAEH,IAAA,OAAO,WAAW,CAAC;AACrB;;ACGA;;AAEG;MACU,gCAAgC,CAAA;AACnC,IAAA,OAAO,GAAG,IAAI,GAAG,EAA4F,CAAC;AAE7G,IAAA,QAAQ,CAAgB;AAEjC,IAAA,WAAA,CAAY,OAAsB,EAAA;AAChC,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;KACzB;AAED;;;;AAIG;IACH,KAAK,CAAI,GAAyC,EAAE,MAAkD,EAAA;QACpG,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;AACxD,QAAA,MAAM,YAAY,GAAgD;AAChE,YAAA,GAAG,YAAY;AACf,YAAA,GAAG,MAAM;YACT,GAAG;SACG,CAAC;AAET,QAAA,IAAI,YAAY,CAAC,iBAAiB,IAAI,MAAM,CAAC,iBAAiB,EAAE;YAC9D,YAAY,CAAC,iBAAiB,GAAG,aAAa,CAAC,CAAC,YAAY,CAAC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAC7G,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAI;AACb,gBAAA,MAAM,MAAM,GAAG;AACb,oBAAA,GAAG,CAAC;AACJ,oBAAA,GAAG,CAAC;iBACL,CAAC;;AAGF,gBAAA,OAAO,MAAM,CAAC;AAChB,aAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;AACH,SAAA;;AAID,QAAA,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;KAC1B;IAED,QAAQ,CAAI,GAAyC,EAAE,MAAkD,EAAA;QACvG,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAElD,IAAI,CAAC,KAAK,CAAC;YACT,GAAG,YAAY,CAAC,KAAK;AACrB,YAAA,GAAG,MAAM;YACT,GAAG;AACJ,SAAA,CAAC,CAAC;KACJ;AAED,IAAA,kBAAkB,CAAC,GAAyC,EAAA;QAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAE3C,IAAI,CAAC,YAAY,EAAE;AACjB,YAAA,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,CAAA,qCAAA,CAAuC,CAAC,CAAC;AACzF,SAAA;AAED,QAAA,OAAO,YAAY,CAAC;KACrB;IAED,wBAAwB,CAA0E,GAAyC,EAAE,MAA6D,EAAA;QACxM,OAAO,IAAI,CAAC,KAAK,CAAC;AAChB,YAAA,iBAAiB,EAAE,IAAI,CAAC,+BAA+B,CAAC,GAAG,EAAE,CAAC,CAAI,KAAK,qBAAqB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACxG,YAAA,GAAG,MAAM;YACT,GAAG;AACJ,SAAA,CAAC,CAAC;KACJ;AAED,IAAA,cAAc,CAAwG,GAAyC,EAAE,MAA6D,EAAE,OAAuC,GAAA,CAAC,CAAI,KAAM,CAAyC,EAAE,QAAQ,EAAE,EAAA;QACrU,OAAO,IAAI,CAAC,KAAK,CAAC;YAChB,iBAAiB,EAAE,IAAI,CAAC,+BAA+B,CAAC,GAAG,EAAE,OAAO,CAAC;AACrE,YAAA,GAAG,MAAM;YACT,GAAG;AACJ,SAAA,CAAC,CAAC;KACJ;AAED,IAAA,KAAK,CAAI,MAAmD,EAAA;AAC1D,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;AAEvB,QAAA,MAAM,KAAK,GAAuD;YAChE,GAAG;AACH,YAAA,KAAK,EAAE,MAAqE;SAC7E,CAAC;QAEF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;KAC9B;;IAGD,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,CAAC;AACnC,SAAC,CAAC,CAAC;KACJ;;AAGD,IAAA,qBAAqB,CAAwG,KAAkD,EAAA;QAC7K,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;KACvC;IAED,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,CAAC;AACvC,YAAA,MAAM,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC;YAElC,OAAO;gBACL,IAAI;AACJ,gBAAA,GAAG,OAAO;aACX,CAAC;AACJ,SAAC,CAAC,CAAC;KACJ;AAED,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,CAAC;SACvB;QAED,OAAO,IAAI,CAAC,wBAAwB,CAAC,GAAG,EAAE,CAAC,KAAQ,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;KACrG;AACF;;ACnIK,MAAO,8BAA4C,SAAQ,SAA+C,CAAA;AAC9G,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;KAClC;wGAHU,8BAA8B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA9B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,8BAA8B,EAJ/B,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;AAET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,gDAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAEU,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAL1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,CAAA;;AAET,EAAA,CAAA;AACF,iBAAA,CAAA;;;MCGY,iCAAiC,CAAA;wGAAjC,iCAAiC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;yGAAjC,iCAAiC,EAAA,YAAA,EAAA,CAH7B,8BAA8B,CAAA,EAAA,OAAA,EAAA,CAN3C,YAAY;AACZ,YAAA,2BAA2B,gCAMnB,8BAA8B,CAAA,EAAA,CAAA,CAAA;AAE7B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iCAAiC,YAT1C,YAAY;YACZ,2BAA2B;YAC3B,YAAY,CAAC,QAAQ,CAAC;gBACpB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,8BAA8B,EAAE,CAAC;aAC1E,CAAC,CAAA,EAAA,CAAA,CAAA;;4FAKO,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAX7C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,2BAA2B;wBAC3B,YAAY,CAAC,QAAQ,CAAC;4BACpB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,8BAA8B,EAAE,CAAC;yBAC1E,CAAC;AACH,qBAAA;oBACD,YAAY,EAAE,CAAC,8BAA8B,CAAC;oBAC9C,OAAO,EAAE,CAAC,8BAA8B,CAAC;AAC1C,iBAAA,CAAA;;;ACZK,SAAU,cAAc,CAAc,MAA+B,EAAA;IACzE,OAAO;AACL,QAAA,IAAI,EAAE,WAAW;AACjB,QAAA,cAAc,EAAE,MAAM;KACvB,CAAC;AACJ;;ACDM,SAAU,YAAY,CAA0J,MAAmC,EAAA;AACvN,IAAA,MAAM,EAAE,GAAG,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;AACtE,IAAA,OAAO,WAAW,CAAC;QACjB,GAAG;AACH,QAAA,IAAI,EAAE,cAAc;QACpB,GAAG,4BAA4B,CAAC,MAAM,EAAE;YACtC,kBAAkB;YAClB,OAAO;YACP,MAAM;YACN,QAAQ;SACT,CAAC;AACH,KAAA,CAAC,CAAC;AACL;;ACQA;;AAEG;AAIG,MAAO,yBAAmL,SAAQ,SAA0D,CAAA;AACxP,IAAA,kBAAkB,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAC9C,IAAA,YAAY,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAExC,IAAA,eAAe,GAAG,IAAI,eAAe,CAAyB,SAAS,CAAC,CAAC;IACxE,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AAExD,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,CAAC;AACjK,IAAA,OAAO,GAAoB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAEnG,IAAA,sBAAsB,GAAG,IAAI,eAAe,CAA6B,SAAS,CAAC,CAAC;IACnF,mBAAmB,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;AAC5E,IAAA,OAAO,GAA+C,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAC1F,GAAG,CAAC,CAAC,cAAc,KAAI;AACrB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC/B,QAAA,MAAM,MAAM,GAAmC;YAC7C,cAAc;AACd,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,QAAQ,CAAC,aAAa,GAAG,QAAQ,CAAC;gBAElC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;gBAE1C,IAAI,QAAQ,IAAI,IAAI,EAAE;AACpB,oBAAA,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,QAAQ,EAAE,CAAC,CAAC;AAChF,iBAAA;;gBAGD,IAAI,CAAC,kBAAkB,CAAC,YAAY,GAAG,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;aAC9G;SACF,CAAC;AAEF,QAAA,OAAO,MAAM,CAAC;KACf,CAAC,CACH,CAAC;AAEO,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,CAAC;AAChH,KAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;AAEF,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;KAC/B;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC;KACrC;AAED,IAAA,IAAI,kBAAkB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC;KAC5C;AAED,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;KACjC;AAED,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;KAClC;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC5C,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;KAC3D;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;AAChC,QAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC;AAClC,QAAA,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,CAAC;KACxC;AAED,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,CAAC;QAC3E,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACjD,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;KACxB;AAED,IAAA,SAAS,CAAC,MAAkB,EAAA;AAC1B,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;QAE7C,IAAI,aAAa,IAAI,IAAI,IAAI,kBAAkB,CAAC,aAAa,EAAE,MAAM,CAAC,EAAE;AACtE,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAClC,YAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;AAC/B,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;AAClC,SAAA;KACF;wGAxFU,yBAAyB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,2EClCtC,6cAQA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,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,WAAA,EAAA,IAAA,EAAAN,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,gDAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,iCAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,sCAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,+BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FD0Ba,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,SAAS;;;;MEMG,+BAA+B,CAAA;wGAA/B,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;yGAA/B,+BAA+B,EAAA,YAAA,EAAA,CAH3B,yBAAyB,CAAA,EAAA,OAAA,EAAA,CAlBtC,YAAY;YACZ,aAAa;YACb,gBAAgB;YAChB,eAAe;YACf,WAAW;YACX,gBAAgB;YAChB,eAAe;YACf,cAAc;YACd,kBAAkB;YAClB,mBAAmB;YACnB,qBAAqB;YACrB,aAAa;YACb,2BAA2B;AAC3B,YAAA,mBAAmB,gCAMX,yBAAyB,CAAA,EAAA,CAAA,CAAA;AAExB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,+BAA+B,YArBxC,YAAY;YACZ,aAAa;YACb,gBAAgB;YAChB,eAAe;YACf,WAAW;YACX,gBAAgB;YAChB,eAAe;YACf,cAAc;YACd,kBAAkB;YAClB,mBAAmB;YACnB,qBAAqB;YACrB,aAAa;YACb,2BAA2B;YAC3B,mBAAmB;YACnB,YAAY,CAAC,QAAQ,CAAC;gBACpB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,yBAAyB,EAAE,CAAC;aACxE,CAAC,CAAA,EAAA,CAAA,CAAA;;4FAKO,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAvB3C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,aAAa;wBACb,gBAAgB;wBAChB,eAAe;wBACf,WAAW;wBACX,gBAAgB;wBAChB,eAAe;wBACf,cAAc;wBACd,kBAAkB;wBAClB,mBAAmB;wBACnB,qBAAqB;wBACrB,aAAa;wBACb,2BAA2B;wBAC3B,mBAAmB;wBACnB,YAAY,CAAC,QAAQ,CAAC;4BACpB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,yBAAyB,EAAE,CAAC;yBACxE,CAAC;AACH,qBAAA;oBACD,YAAY,EAAE,CAAC,yBAAyB,CAAC;oBACzC,OAAO,EAAE,CAAC,yBAAyB,CAAC;AACrC,iBAAA,CAAA;;;AC4DD;;AAEG;AAEG,MAAO,qCAA6F,SAAQM,WAAkE,CAAA;AAElL,IAAA,cAAc,CAAY;AAEjB,IAAA,SAAS,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;AAEjC,IAAA,eAAe,GAAG,IAAI,eAAe,CAAyB,SAAS,CAAC,CAAC;IACxE,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AAEzD,IAAA,uBAAuB,GAAG,IAAI,kBAAkB,EAAE,CAAC;IACnD,eAAe,GAAG,IAAI,eAAe,CAA+C,IAAI,GAAG,EAAE,CAAC,CAAC;AAE9F,IAAA,iBAAiB,GAA8B,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;IACtG,uBAAuB,GAA8B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,oBAAoB,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5I,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,CAAC;AAEO,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,CAAC;IAE9J,yBAAyB,GAAkE,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;AAEzK;;AAEG;AACM,IAAA,OAAO,GAAoB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAE3G;;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,CAAC;QAC9F,MAAM,qBAAqB,GAAQ,EAAE,CAAC;AAEtC,QAAA,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;YAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AACjC,YAAA,MAAM,YAAY,GAA2D,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAE5G,IAAI,CAAC,YAAY,EAAE;AACjB,gBAAA,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/B,aAAA;AACH,SAAC,CAAC,CAAC;QAEH,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,YAA+D,KAAI;oBAC5E,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,CAAC;iBAC5C;aACF,CAAC,CACH,CACF,CAAC;AACH,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC;AACzC,SAAA;KACF,CAAC,CACH,CAAC;AAEF;;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,CAAC;YACtE,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;SAC/E;AACF,KAAA,CAAC,CACH,EACD,qBAAqB,EAAE,CACxB,CACF,CACF,CACF,EACD,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;IAEO,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,CAAC;IAEO,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,CAAC;AAC/E,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,CAAC;QAEtI,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/B,SAAA;AAED,QAAA,OAAO,KAAK,CAAC;AACf,KAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;IAEO,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,CAAC;AAEF;;AAEG;AACM,IAAA,OAAO,GAAG,IAAI,+BAA+B,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,kBAAkB,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,CAAC;AAE7G,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,CAAC;AAEF;;AAEG;AACM,IAAA,oBAAoB,GAAG,IAAI,+BAA+B,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,2BAA2B,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC;AAElI,IAAA,iBAAiB,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,mCAAmC,EAAE,EAAE,oBAAoB,EAAE,CAAC,CAAC;AAE/H,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;KAC5B;AAED,IAAA,IAAI,oBAAoB,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC;KACvC;AAED,IAAA,IAAI,aAAa,GAAA;QACf,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,IAAI,IAAI,CAAC;KAC/C;AAED,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,IAAI,IAAI,CAAC;KAChD;AAED,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,YAAY,KAAK,KAAK,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,CAAC;KAClE;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;KACvC;AAED,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,IAAK,IAAI,CAAC,GAAc,CAAC,CAAC;KACzE;AAED,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;KACzB;AAED,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,QAAQ,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,cAAc,CAAC,IAAI,IAAI,CAAC,GAAG,EAAY;KACxE;AAED,IAAA,IAAI,mCAAmC,GAAA;AACrC,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,mCAAmC,IAAI,KAAK,CAAC;KACxE;AAED,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC;KACrC;AAED,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,KAAK,CAAC,CAAC,KAAK,CAAiB,CAAC,CAAC;KACtE;AAED,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC;KAC3C;AAED,IAAA,IAAI,eAAe,GAAA;QACjB,OAAO,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;KACjD;AAED,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,CAAC;KACjF;AAED,IAAA,IAAI,mBAAmB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,mBAAmB,IAAI,IAAI,CAAC;KACvD;AAED,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,IAAI,EAA0C,CAAC;QAE/C,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5B,YAAA,EAAE,GAAG,CAAC,UAAyB,EAAE,MAA8C,KAAqB;AAClG,gBAAA,IAAI,MAAuB,CAAC;AAE5B,gBAAA,IAAI,UAAU,EAAE;oBACd,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AAClD,iBAAA;AAAM,qBAAA;AACL,oBAAA,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACzC,iBAAA;AAED,gBAAA,OAAO,MAAM,CAAC;AAChB,aAAC,CAAC;AACH,SAAA;AAAM,aAAA;AACL,YAAA,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC;AAC1B,SAAA;AAED,QAAA,OAAO,EAAE,CAAC;KACX;AAED,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;KACtF;AAED,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;KACtC;AAED,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;KAClE;AAED,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC;KACxC;AAED,IAAA,IAAI,qBAAqB,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC;KACjD;AAED,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,CAAC;KACjF;AAED,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,CAAC;KACH;AAED,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,CAAC;YAExQ,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,CAAC;AAExD,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,CAAC;AAE7E,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,CAAC;AAC1F,wBAAA,OAAO,CAAoD,CAAC;AAC9D,qBAAC,CAAC,CAAC;;AAGH,oBAAA,MAAM,qBAAqB,GAA2D,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;oBACtI,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;;oBAGvF,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;;oBAGtE,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,CAAC;;AAGvF,oBAAA,OAAO,gBAAgB,CAAC;iBACzB,CAAC,CACH,CAAC;AACH,aAAA;AAAM,iBAAA;;AAEL,gBAAA,OAAO,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAkE,CAAC;AACzG,aAAA;SACF,CAAC,CACH,CAAC;KACH;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAE5C,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,CAAC;AAC9H,SAAA;;QAGD,IAAI,CAAC,OAAO,CAAC,QAAQ;AAClB,aAAA,IAAI,CACH,KAAK,CAAC,EAAE,CAAC,EACT,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAChB,KAAK,EAAE,CACR;aACA,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,CAAC;AAC/B,SAAC,CAAC,CAAC;KACN;IAEQ,WAAW,GAAA;QAClB,KAAK,CAAC,WAAW,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;AAChC,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;AAChC,QAAA,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,CAAC;AACvC,QAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,CAAC;KACrC;AAES,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,CAAC;KACd;AAED,IAAA,QAAQ,CAAC,KAAQ,EAAA;AACf,QAAA,IAAI,SAAc,CAAC;QAEnB,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,SAAS,GAAG,CAAC,KAAK,CAAC,CAAC;AACrB,SAAA;AAAM,aAAA;YACL,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACrC,SAAA;AAED,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;KAC3B;AAED,IAAA,WAAW,CAAC,KAAQ,EAAA;QAClB,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC;AAChF,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;KACxB;AAED,IAAA,SAAS,CAAC,MAAW,EAAA;;QAEnB,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,MAAM,GAAG,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AACxD,SAAA;QAED,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,CAAC;AAC/C,SAAA;AAED,QAAA,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;KACrC;;AAGS,IAAA,sBAAsB,CAAC,MAAW,EAAA;QAC1C,IAAI,QAAQ,GAAY,MAAM,CAAC;AAE/B,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,CAAC;AACpD,SAAA;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;KAChC;wGA/XU,qCAAqC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAArC,qCAAqC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAArC,qCAAqC,EAAA,UAAA,EAAA,CAAA;kBADjD,SAAS;8BAGR,cAAc,EAAA,CAAA;sBADb,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,gBAAgB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;;;AClG/C;;AAEG;AAIG,MAAO,iCAAqC,SAAQ,qCAAwC,CAAA;AAChG,IAAA,WAAW,CAAC,IAA8B,EAAA;QACxC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;YAChD,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACxC,aAAA;AAAM,iBAAA;gBACL,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACrC,aAAA;AACF,SAAA;KACF;wGATU,iCAAiC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iCAAiC,2ECT9C,upDA8BA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,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,EAAAC,IAAA,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,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,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,EAAAE,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,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,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,OAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,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,WAAA,EAAA,IAAA,EAAAK,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,gDAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDrBa,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAH7C,SAAS;;;;AEEV;;AAEG;AAIG,MAAO,6BAAiC,SAAQ,qCAAwC,CAAA;AAC5F,IAAA,iBAAiB,CAAC,KAAc,EAAA;AAC9B,QAAA,MAAM,KAAK,GAAI,KAA+D,CAAC,KAAK,CAAC;AACrF,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACnD,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;KACxB;wGALU,6BAA6B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAA7B,6BAA6B,EAAA,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECd1C,+vCA0BA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,YAAA,EAAA,OAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,YAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,YAAA,EAAA,OAAAF,EAAA,CAAA,mBAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,YAAA,EAAA,OAAAN,EAAA,CAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,YAAA,EAAA,OAAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,YAAA,EAAA,OAAAC,IAAA,CAAA,QAAA,CAAA,EAAA,CAAA,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,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,YAAA,EAAA,OAAAD,EAAA,CAAA,oBAAA,CAAA,EAAA,CAAA,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,EAAA,EAAA,CAAA,UAAA,CAAA,YAAA,EAAA,OAAAE,IAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,YAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gDAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,YAAA,EAAA,ODCa,qCAAqC,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,wCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,YAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAbrC,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAHzC,SAAS;;;AAWV;AAKM,MAAO,qCAAyC,SAAQ,wCAAkE,CAAA;AAC9H,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,CAAC;AACJ,YAAA,cAAc,EAAE,yCAAyC;AAC1D,SAAA,CAAC,CAAC;KACJ;wGALU,qCAAqC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAArC,qCAAqC,EAAA,QAAA,EAAA,wCAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,4WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAArC,qCAAqC,EAAA,UAAA,EAAA,CAAA;kBAJjD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,wCAAwC;AAClD,oBAAA,QAAQ,EAAE,uCAAuC;AAClD,iBAAA,CAAA;;AASD;;AAEG;AAOG,MAAO,yCAA6C,SAAQ,qCAA0C,CAAA;AACjG,IAAA,6BAA6B,GAAG,MAAM,EAAC,6BAAgC,EAAC,CAAC;;AAIzE,IAAA,MAAM,GAAgC;AAC7C,QAAA,cAAc,EAAE,6CAA6C;KAC9D,CAAC;AAEF,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,WAAW,CAAC;KACxD;AAED,IAAA,IAAI,aAAa,GAAA;QACf,IAAI,aAAa,GAAgC,QAAQ,CAAC;QAE1D,IAAI,IAAI,CAAC,6BAA6B,CAAC,QAAQ,IAAI,IAAI,CAAC,6BAA6B,CAAC,mCAAmC,EAAE;YACzH,aAAa,GAAG,MAAM,CAAC;AACxB,SAAA;AAED,QAAA,OAAO,aAAa,CAAC;KACtB;AAEQ,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,CAAC;wGA3BS,yCAAyC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yCAAyC,EAFzC,QAAA,EAAA,cAAA,EAAA,SAAA,EAAA,kBAAkB,CAAC,yCAAyC,CAAC,EAH9D,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;AAET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,yCAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAGU,yCAAyC,EAAA,UAAA,EAAA,CAAA;kBANrD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,CAAA;;AAET,EAAA,CAAA;oBACD,SAAS,EAAE,kBAAkB,CAA2C,yCAAA,CAAA;AACzE,iBAAA,CAAA;;AAwCK,MAAO,6CAAiD,SAAQ,qCAAwE,CAAA;AAC5I,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;KAC7B;AAED,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;KAChC;AAED,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;KAC5B;wGAXU,6CAA6C,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA7C,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,6CAA6C,EAR9C,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;AAMT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,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,CAAA,CAAA;;4FAEU,6CAA6C,EAAA,UAAA,EAAA,CAAA;kBATzD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,CAAA;;;;;;AAMT,EAAA,CAAA;AACF,iBAAA,CAAA;;;MErCY,gCAAgC,CAAA;wGAAhC,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;yGAAhC,gCAAgC,EAAA,YAAA,EAAA,CAH5B,iCAAiC,EAAE,6BAA6B,EAAE,qCAAqC,EAAE,yCAAyC,EAAE,6CAA6C,CAAA,EAAA,OAAA,EAAA,CAxB9M,YAAY;YACZ,aAAa;YACb,gBAAgB;YAChB,eAAe;YACf,WAAW;YACX,eAAe;YACf,cAAc;YACd,kBAAkB;YAClB,mBAAmB;YACnB,qBAAqB;YACrB,aAAa;YACb,iBAAiB;YACjB,qBAAqB;YACrB,cAAc;YACd,aAAa;YACb,2BAA2B;YAC3B,mBAAmB,EAAAD,IAAA,CAAA,YAAA,CAAA,EAAA,CAAA,CAAA;AAWV,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gCAAgC,YA3BzC,YAAY;YACZ,aAAa;YACb,gBAAgB;YAChB,eAAe;YACf,WAAW;YACX,eAAe;YACf,cAAc;YACd,kBAAkB;YAClB,mBAAmB;YACnB,qBAAqB;YACrB,aAAa;YACb,iBAAiB;YACjB,qBAAqB;YACrB,cAAc;YACd,aAAa;YACb,2BAA2B;YAC3B,mBAAmB;YACnB,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,EAAE;AAClG,iBAAA;aACF,CAAC,CAAA,EAAA,CAAA,CAAA;;4FAKO,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBA7B5C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,aAAa;wBACb,gBAAgB;wBAChB,eAAe;wBACf,WAAW;wBACX,eAAe;wBACf,cAAc;wBACd,kBAAkB;wBAClB,mBAAmB;wBACnB,qBAAqB;wBACrB,aAAa;wBACb,iBAAiB;wBACjB,qBAAqB;wBACrB,cAAc;wBACd,aAAa;wBACb,2BAA2B;wBAC3B,mBAAmB;wBACnB,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,EAAE;AAClG,6BAAA;yBACF,CAAC;AACH,qBAAA;oBACD,YAAY,EAAE,CAAC,iCAAiC,EAAE,6BAA6B,EAAE,qCAAqC,EAAE,yCAAyC,EAAE,6CAA6C,CAAC;AACjN,oBAAA,OAAO,EAAE,EAAE;AACZ,iBAAA,CAAA;;;ACrCK,SAAU,qBAAqB,CAA2B,MAAqC,EAAA;AACnG,IAAA,MAAM,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAAC;AAC1C,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,KAAK;SACpB,CAAC;AACH,KAAA,CAAC,CAAC;AACL,CAAC;AAEK,SAAU,qBAAqB,CAA2B,MAAqC,EAAA;AACnG,IAAA,MAAM,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAAC;AAC1C,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,KAAK;SACpB,CAAC;AACH,KAAA,CAAC,CAAC;AACL;;AC1BO,MAAM,kDAAkD,GAAoE,0BAA0B,CAAC;IAC5J,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AAC7B,IAAA,eAAe,EAAE,6CAA6C;AAC/D,CAAA,EAAE;AAEa,SAAA,oCAAoC,CAAI,UAAyB,EAAE,MAA2C,EAAA;AAC5H,IAAA,IAAI,cAAmD,CAAC;AAExD,IAAA,IAAI,UAAU,EAAE;AACd,QAAA,cAAc,GAAG,kDAAkD,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AACzF,KAAA;AAAM,SAAA;QACL,cAAc,GAAG,MAAM,CAAC;AACzB,KAAA;AAED,IAAA,OAAO,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAChD,CAAC;AAEY,MAAA,sCAAsC,GAAG,oBAAoB,CAA6B,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE;AAE3H,SAAU,wBAAwB,CAAI,KAAiC,EAAA;AAC3E,IAAA,OAAO,KAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;AAC5D,CAAC;AAUK,SAAU,oDAAoD,CAA+B,KAA6E,EAAA;IAC9K,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IACpE,MAAM,EAAE,UAAU,EAAE,kBAAkB,GAAG,SAAS,EAAE,GAAG,MAAM,CAAC;IAC9D,MAAM,MAAM,GAAoC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACxG,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAEhE,OAAO;AACL,QAAA,UAAU,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC;AAC5B,QAAA,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,CAAC;AAC/C,YAAA,OAAO,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,kBAAkB,EAAE,CAAC;AAClE,SAAC,CAAC,CACH;KACJ,CAAC;AACJ;;MC9Ca,yCAAyC,GAAG,IAAI,cAAc,CAAC,oBAAoB,EAAE;MAUrF,2CAA2C,CAAA;AAC9C,IAAA,aAAa,GAAG,IAAI,eAAe,CAAuD,SAAS,CAAC,CAAC;AACpG,IAAA,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAEvE,IAAA,OAAO,GAA4C,IAAI,CAAC,aAAa,CAAC,IAAI,CACjF,GAAG,CAAC,CAAC,CAAC,KAAI;AACR,QAAA,MAAM,MAAM,GAAgC;YAC1C,GAAG,CAAC,CAAC,OAAO;YACZ,SAAS,EAAE,oBAAoB,CAC7B;AACE,gBAAA;AACE,oBAAA,OAAO,EAAE,yCAAyC;AAClD,oBAAA,QAAQ,EAAE,CAAC;AACZ,iBAAA;AACF,aAAA,EACD,CAAC,CAAC,OAAO,CAAC,SAAS,CACpB;SACF,CAAC;AAEF,QAAA,OAAO,MAAM,CAAC;KACf,CAAC,CACH,CAAC;AAEO,IAAA,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAEjE,IACI,YAAY,CAAC,YAA2D,EAAA;AAC1E,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;KACvC;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;KAC/B;wGAhCU,2CAA2C,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3C,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2CAA2C,EAN5C,QAAA,EAAA,wCAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,gDAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAN,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAEU,2CAA2C,EAAA,UAAA,EAAA,CAAA;kBARvD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,wCAAwC;AAClD,oBAAA,QAAQ,EAAE,CAAA;;;;AAIT,EAAA,CAAA;AACF,iBAAA,CAAA;8BA2BK,YAAY,EAAA,CAAA;sBADf,KAAK;;AAUR;MAEsB,0CAA0C,CAAA;AACrD,IAAA,YAAY,GAAG,MAAM,CAAgD,yCAAyC,CAAC,CAAC;wGADrG,0CAA0C,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAA1C,0CAA0C,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAA1C,0CAA0C,EAAA,UAAA,EAAA,CAAA;kBAD/D,SAAS;;AAeJ,MAAO,yCAA6C,SAAQ,0CAA6C,CAAA;AAC7G,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;KAC/B;wGAHU,yCAAyC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yCAAyC,EAR1C,QAAA,EAAA,sCAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;AAMT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,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,CAAA,CAAA;;4FAEU,yCAAyC,EAAA,UAAA,EAAA,CAAA;kBAVrD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sCAAsC;AAChD,oBAAA,QAAQ,EAAE,CAAA;;;;;;AAMT,EAAA,CAAA;AACF,iBAAA,CAAA;;;ACeD;;;;AAIG;AAEG,MAAgB,wCAA+L,SAAQM,WAA6B,CAAA;AAC/O,IAAA,KAAK,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAE3C;;AAEG;IACH,qBAAqB,GAAG,KAAK,CAAC;AAO9B;;AAEG;AACH,IAAA,cAAc,CAA+B;AAG7C,IAAA,SAAS,CAAgC;AAEhC,IAAA,SAAS,GAAG,IAAI,WAAW,CAAS,EAAE,CAAC,CAAC;AAEhC,IAAA,eAAe,GAAG,IAAI,eAAe,CAAyB,SAAS,CAAC,CAAC;IACjF,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AAEhD,IAAA,uBAAuB,GAAG,IAAI,kBAAkB,EAAE,CAAC;IACnD,eAAe,GAAG,IAAI,eAAe,CAA2D,IAAI,GAAG,EAAE,CAAC,CAAC;AAEnH,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,CAAC;AACO,IAAA,iBAAiB,GAAuB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAEzG,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,CAAC;AAEe,IAAA,4BAA4B,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAEhE,IAAA,aAAa,GAAG,IAAI,2BAA2B,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,mBAAmB,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,CAAC;IAEhH,cAAc,GAAmE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;AAE3I,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,CAAC;AAE9J,IAAA,OAAO,GAAoB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAElG,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,CAAC;IAEO,cAAc,GAAmE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;AAEpJ,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,IAAK,IAAI,CAAC,GAAc,CAAC,CAAC;KACzE;AAED,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;KACzB;AAED,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;KAC5B;AAED,IAAA,IAAI,oBAAoB,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC;KACvC;AAED,IAAA,IAAI,eAAe,GAAA;QACjB,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;AAED,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,YAAY,IAAI,IAAI,CAAC;KAClD;AAED,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,YAAY,KAAK,KAAK,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,CAAC;KAClE;AAED,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,iBAAiB,IAAI,KAAK,CAAC;KACxD;AAED,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,QAAQ,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,cAAc,CAAC,IAAI,IAAI,CAAC,GAAG,EAAY;KACxE;AAED,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,YAAY,KAAK,CAAC,CAAC,KAAK,CAAiB,CAAC,CAAC;KACxE;AAED,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC;KAC7C;AAED,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;KACvC;AAED,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC;KAC5C;AAED,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;KACrC;AAED,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;KACpC;AAED,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;KAClE;AAED,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;KACnF;AAED,IAAA,IAAI,kBAAkB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC;KAChD;AAED,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,cAAc,IAAI,IAAI,CAAC;KACpD;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,WAAW,IAAI,QAAQ,CAAC;KACrD;AAED,IAAA,IAAI,qBAAqB,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC;KACnD;AAED,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,CAAC;KACjF;AAED,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,CAAC;KACH;AAED,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,CAAC;YAE7Q,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,CAAC;AAExD,YAAA,IAAI,GAAmE,CAAC;AAExE,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,CAAC;AAC7E,gBAAA,MAAM,cAAc,GAAG,iCAAiC,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC9F,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,cAAc,CAAC;AAE7D,gBAAA,GAAG,GAAG,gBAAgB,CAAC,IAAI,CACzB,KAAK,EAAE,EACP,GAAG,CAAC,CAAC,cAAc,KAAI;;AAErB,oBAAA,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AAC3B,wBAAA,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE;AACd,4BAAA,CAAC,CAAC,OAAO,GAAG,cAAc,CAAC;AAC5B,yBAAA;AAAM,6BAAA;AACL,4BAAA,CAAC,CAAC,OAAO,GAAG,iCAAiC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAC5E,yBAAA;AAED,wBAAA,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,cAAc,EAAE;AAC/B,4BAAA,CAAC,CAAC,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;AAC9B,yBAAA;AACH,qBAAC,CAAC,CAAC;;oBAGH,MAAM,qBAAqB,GAA6D,cAAqE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC1M,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;;oBAGvF,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;;oBAGtE,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,CAAC;;AAGvF,oBAAA,OAAO,gBAAgB,CAAC;iBACzB,CAAC,CACH,CAAC;AACH,aAAA;AAAM,iBAAA;;AAEL,gBAAA,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,aAAA;AAED,YAAA,OAAO,GAAG,CAAC;SACZ,CAAC,CACH,CAAC;KACH;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAE5C,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,CAAC;AAC9H,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,kBAAkB,EAAE;YAC3C,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC;AACvE,SAAA;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,cAAc,EAAE;YACxC,IAAI,CAAC,cAAc,GAAG;gBACpB,GAAG,IAAI,CAAC,cAAc;AACtB,gBAAA,cAAc,EAAE,yCAAyC;aAC1D,CAAC;AACH,SAAA;QAED,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE;AAC5D,YAAA,IAAI,CAAC,4BAA4B,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AACnF,gBAAA,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;oBACR,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7B,iBAAA;AACH,aAAC,CAAC,CAAC;AACJ,SAAA;KACF;IAEQ,WAAW,GAAA;QAClB,KAAK,CAAC,WAAW,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,CAAC;AACvC,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;AAChC,QAAA,IAAI,CAAC,4BAA4B,CAAC,OAAO,EAAE,CAAC;AAC5C,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;AAChC,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;KAC9B;AAED;;;;AAIG;AACO,IAAA,gBAAgB,CAAC,KAA0C,EAAA;QACnE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;KACtC;AAES,IAAA,iBAAiB,CAAC,IAAY,EAAA;AACtC,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE;YAC3C,OAAO;AACR,SAAA;AAED,QAAA,IAAI,IAAI,EAAE;YACR,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC;YAC3B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AACtC,SAAA;;AAID,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;YACzB,OAAO;AACR,SAAA;AAED,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAI,IAAqB,CAAC;AAC/F,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACtB,SAAA;KACF;AAED,IAAA,mBAAmB,CAAC,YAAiD,EAAA;AACnE,QAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;KACnC;AAED,IAAA,sBAAsB,CAAC,YAAiD,EAAA;AACtE,QAAA,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;KACtC;IAED,wBAAwB,GAAA;QACtB,IAAI,UAAU,GAAG,KAAK,CAAC;QAEvB,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC;YAEzC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE;AACxB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;gBAC9B,UAAU,GAAG,IAAI,CAAC;AACnB,aAAA;AACF,SAAA;AAED,QAAA,OAAO,UAAU,CAAC;KACnB;AAED,IAAA,QAAQ,CAAC,KAAQ,EAAA;QACf,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE,CAAC;AACxC,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC9B,QAAA,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;KACzC;AAED,IAAA,WAAW,CAAC,KAAQ,EAAA;AAClB,QAAA,IAAI,MAAM,CAAC;QAEX,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAC9C,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC;AAC3E,SAAA;AAAM,aAAA;AACL,YAAA,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC;AACjD,SAAA;AAED,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;KACxB;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;KACpB;AAED,IAAA,SAAS,CAAC,MAAW,EAAA;;QAEnB,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,MAAM,GAAG,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AACxD,SAAA;QAED,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,CAAC;AACvD,SAAA;AAED,QAAA,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;KACrC;;AAGS,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,CAAC;KACd;AAES,IAAA,sBAAsB,CAAC,MAAW,EAAA;QAC1C,IAAI,QAAQ,GAAY,MAAM,CAAC;AAE/B,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,CAAC;AACpD,SAAA;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;AAC/B,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;KAClC;wGAzWmB,wCAAwC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAAxC,wCAAwC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAxC,wCAAwC,EAAA,UAAA,EAAA,CAAA;kBAD7D,SAAS;8BAoBR,SAAS,EAAA,CAAA;sBADR,SAAS;uBAAC,WAAW,CAAA;;;ACrFlB,MAAO,+BAAuF,SAAQ,wCAA+F,CAAA;AACjM,IAAA,KAAK,GAAG,IAAI,OAAO,EAAQ,CAAC;AAC5B,IAAA,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAEnC,IAAA,kBAAkB,GAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAEvD,IAAA,QAAQ,CAAC,KAAmC,EAAA;QAC1C,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KAC9C;AAED,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,CAAC;gBACvB,KAAK,CAAC,wBAAwB,EAAE,CAAC;AACjC,gBAAA,OAAO,KAAK,CAAC;AACd,aAAA;AACF,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,OAAO,CAAC,KAAwB,EAAA;QAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AACjD,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;KACrC;AAED,IAAA,IAAa,WAAW,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC;KACvC;AAEkB,IAAA,gBAAgB,CAAC,KAA0C,EAAA;;KAE7E;IAEQ,QAAQ,GAAA;QACf,KAAK,CAAC,QAAQ,EAAE,CAAC;;QAGjB,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,CAAC;AAClC,SAAC,CAAC,CAAC;KACJ;IAEQ,WAAW,GAAA;QAClB,KAAK,CAAC,WAAW,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;KACzB;IAED,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;KACnB;wGApDU,+BAA+B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA/B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,+BAA+B,2ECrB5C,ykDAsBA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,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,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,EAAAC,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,8BAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,mDAAA,EAAA,QAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,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,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,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,OAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,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,WAAA,EAAA,IAAA,EAAAM,2CAAA,EAAA,QAAA,EAAA,wCAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDDa,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAH3C,SAAS;;;;AEVV;;;;;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,CAAC;AACnG,QAAA,IAAI,SAAwD,CAAC;AAE7D,QAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1B,YAAA,MAAM,aAAa,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;YACrD,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,CAAC;gBAErG,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AAC3C,oBAAA,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC;oBACnB,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBACrC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,UAAU,EAAE,MAAM,CAAC;AAC9C,oBAAA,MAAM,IAAI,GAAa,UAAU,EAAE,IAAI,CAAC;oBAExC,OAAO;AACL,wBAAA,GAAG,CAAC;wBACJ,MAAM;wBACN,IAAI;qBACL,CAAC;AACJ,iBAAC,CAAC,CAAC;AAEH,gBAAA,OAAO,cAAc,CAAC;AACxB,aAAC,CAAC,EACF,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CACxC,CAAC;AACH,SAAA;AAAM,aAAA;AACL,YAAA,SAAS,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC;AACxB,SAAA;QAED,OAAO,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC,CAAC;AACzD,KAAC,CAAC;AACJ,CAAC;AAKK,SAAU,yBAAyB,CAAc,MAA0C,EAAA;AAC/F,IAAA,OAAO,mBAAmB,CAAC;AACzB,QAAA,GAAG,MAAM;AACT,QAAA,iBAAiB,EAAE,IAAI;AACxB,KAAA,CAAC,CAAC;AACL,CAAC;AAIK,SAAU,mBAAmB,CAAwD,MAA0C,EAAA;IACnI,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAAC;AACvD,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,KAAK;SACpB,CAAC;AACH,KAAA,CAAC,CAAC;AACL,CAAC;AAKK,SAAU,mBAAmB,CAAwD,MAA0C,EAAA;AACnI,IAAA,MAAM,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAAC;AAC1C,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,KAAK;SACpB,CAAC;AACH,KAAA,CAAC,CAAC;AACL;;AC9EA;;AAEG;AAIG,MAAO,+BAAuF,SAAQ,wCAA+F,CAAA;IAChM,qBAAqB,GAAG,IAAI,CAAC;AAE7B,IAAA,qBAAqB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CACvD,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAChB,WAAW,CAAC,CAAC,CAAC,EACd,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAC7B,CAAC;IAEO,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpE,IAAA,yBAAyB,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAClE,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,iBAAiB,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,EAChD,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,EACd,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAC7B,CAAC;AAEF,IAAA,IAAa,eAAe,GAAA;QAC1B,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;AAED,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;KAC1E;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,KAAK,CAAC;KACd;AAEO,IAAA,cAAc,GAAG,IAAI,kBAAkB,EAAE,CAAC;IAEzC,QAAQ,GAAA;QACf,KAAK,CAAC,QAAQ,EAAE,CAAC;AAEjB,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;YAC7F,IAAI,CAAC,CAAC,EAAE;;AAEP,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;IAEQ,WAAW,GAAA;QAClB,KAAK,CAAC,WAAW,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;KAC/B;AAED,IAAA,QAAQ,CAAC,KAAmC,EAAA;QAC1C,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KAC9C;wGAhDU,+BAA+B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA/B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,+BAA+B,2EClB5C,6xDA6BA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,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,EAAAC,IAAA,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,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,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,EAAAE,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,8BAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,mDAAA,EAAA,QAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAQ,2CAAA,EAAA,QAAA,EAAA,wCAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDXa,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAH3C,SAAS;;;;ME8BG,kCAAkC,CAAA;wGAAlC,kCAAkC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;yGAAlC,kCAAkC,EAAA,YAAA,EAAA,CAH9B,+BAA+B,EAAE,+BAA+B,EAAE,2CAA2C,EAAE,yCAAyC,CAAA,EAAA,OAAA,EAAA,CAvBrK,YAAY;YACZ,aAAa;YACb,gBAAgB;YAChB,eAAe;YACf,WAAW;YACX,eAAe;YACf,cAAc;YACd,kBAAkB;YAClB,mBAAmB;YACnB,qBAAqB;YACrB,aAAa;YACb,iBAAiB;YACjB,qBAAqB;YACrB,cAAc;YACd,aAAa;YACb,2BAA2B,EAAAL,IAAA,CAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CASnB,+BAA+B,EAAE,+BAA+B,CAAA,EAAA,CAAA,CAAA;AAE/D,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kCAAkC,YA1B3C,YAAY;YACZ,aAAa;YACb,gBAAgB;YAChB,eAAe;YACf,WAAW;YACX,eAAe;YACf,cAAc;YACd,kBAAkB;YAClB,mBAAmB;YACnB,qBAAqB;YACrB,aAAa;YACb,iBAAiB;YACjB,qBAAqB;YACrB,cAAc;YACd,aAAa;YACb,2BAA2B;YAC3B,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,EAAE;AACtG,iBAAA;aACF,CAAC,CAAA,EAAA,CAAA,CAAA;;4FAKO,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBA5B9C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,aAAa;wBACb,gBAAgB;wBAChB,eAAe;wBACf,WAAW;wBACX,eAAe;wBACf,cAAc;wBACd,kBAAkB;wBAClB,mBAAmB;wBACnB,qBAAqB;wBACrB,aAAa;wBACb,iBAAiB;wBACjB,qBAAqB;wBACrB,cAAc;wBACd,aAAa;wBACb,2BAA2B;wBAC3B,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,EAAE;AACtG,6BAAA;yBACF,CAAC;AACH,qBAAA;oBACD,YAAY,EAAE,CAAC,+BAA+B,EAAE,+BAA+B,EAAE,2CAA2C,EAAE,yCAAyC,CAAC;AACxK,oBAAA,OAAO,EAAE,CAAC,+BAA+B,EAAE,+BAA+B,CAAC;AAC5E,iBAAA,CAAA;;;AClCK,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,CAAC;AAErG,IAAA,OAAO,mBAAmB,CAAC;AACzB,QAAA,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,CAAC;SAC1D;AACF,KAAA,CAAC,CAAC;AACL;;AC2BA;;AAEG;AAIG,MAAO,iCAAsF,SAAQE,WAAwD,CAAA;AAChJ,IAAA,aAAa,GAAG,IAAI,kBAAkB,EAAE,CAAC;AACzC,IAAA,uBAAuB,GAAG,IAAI,kBAAkB,EAAE,CAAC;IACnD,iBAAiB,GAAG,IAAI,eAAe,CAAkC,IAAI,GAAG,EAAE,CAAC,CAAC;IACpF,eAAe,GAAG,IAAI,eAAe,CAAyC,IAAI,GAAG,EAAE,CAAC,CAAC;AAEzF,IAAA,eAAe,GAAG,IAAI,eAAe,CAA8B,SAAS,CAAC,CAAC;AAC9E,IAAA,eAAe,GAAG,IAAI,eAAe,CAAiC,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;AAC5G,IAAA,YAAY,GAAG,IAAI,eAAe,CAAiD,SAAS,CAAC,CAAC;AAG/G,IAAA,aAAa,CAAc;IAElB,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AAExD,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,CAAC;AAEO,IAAA,OAAO,GAAoB,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAExG,IAAA,sBAAsB,GAAoB,IAAI,CAAC,OAAO,CAAC,IAAI,CAClE,IAAI,CAAC,CAAC,GAAG,EAAE,MAAM,KAAI;QACnB,IAAI,MAAM,GAAW,GAAG,CAAC;AAEzB,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE;AACtC,YAAA,MAAM,GAAG,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AACpC,SAAA;AAED,QAAA,OAAO,MAAM,CAAC;AAChB,KAAC,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,CAAC;AAEO,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,CAAC;AAEO,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,CAAC;QAE7B,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,CAAC;AAE/J,YAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1B,gBAAA,OAAO,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9B,aAAA;AAAM,iBAAA;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,CAAC;oBAC5E,MAAM,OAAO,GAAG,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC1D,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,CAAC;yBAC7E,CAAC;AAEF,wBAAA,OAAO,KAAK,CAAC;AACf,qBAAC,CAAC,CAAC;oBAEH,OAAO;wBACL,OAAO;wBACP,KAAK;qBACN,CAAC;iBACH,CAAC,CACH,CAAC;AACH,aAAA;SACF,CAAC,CACH,CAAC;KACH,CAAC,CACH,CAAC;AAEO,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,MAAM;SACjB,CAAC;AAEF,QAAA,OAAO,KAAK,CAAC;AACf,KAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;IAEO,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,CAAC;QACjD,MAAM,KAAK,GAAmC,CAAC,mBAAmB,EAAE,GAAG,gBAAgB,CAAC,CAAC;AAEzF,QAAA,MAAM,MAAM,GAAiE;YAC3E,OAAO,EAAE,WAAW,CAAC,OAAO;YAC5B,KAAK;SACN,CAAC;AAEF,QAAA,OAAO,MAAM,CAAC;AAChB,KAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;AAEO,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,KAAK;aAC3C,CAAC;YAEF,OAAO,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAC3C,GAAG,CAAC,CAAC,YAAY,KAAI;gBACnB,MAAM,SAAS,GAAmC,CAAC,qBAAqB,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;AAEjG,gBAAA,MAAM,MAAM,GAAiD;AAC3D,oBAAA,OAAO,EAAE,4BAA4B,CAAC,OAAO,IAAI,YAAY,CAAC,OAAO;AACrE,oBAAA,KAAK,EAAE,SAAS;iBACjB,CAAC;AAEF,gBAAA,OAAO,MAAM,CAAC;aACf,CAAC,CACH,CAAC;AACH,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,EAAE,CAAC,YAAY,CAAiC,EAAE,CAAC,CAAC,CAAC;AAC7D,SAAA;AACH,KAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;AAEO,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,CAAC;AAE1H,QAAA,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAK,CAAC;QACvC,MAAM,eAAe,GAA8B,EAAE,CAAC;QAEtD,MAAM,sBAAsB,GAAmC,EAAE,CAAC;;AAGlE,QAAA,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,CAAC;AAC1C,aAAA,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACvC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAI;YAC3B,MAAM,MAAM,GAA8B,EAAE,CAAC;AAE7C,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,CAAC;AACzB,wBAAA,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAClC,wBAAA,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC1C,qBAAA;AACH,iBAAC,CAAC,CAAC;AACL,aAAC,CAAC,CAAC;AAEH,YAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;gBACrB,sBAAsB,CAAC,IAAI,CAAC;oBAC1B,KAAK;oBACL,MAAM;AACP,iBAAA,CAAC,CAAC;AACJ,aAAA;AACH,SAAC,CAAC,CAAC;AAEL,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,CAAC;YAEzE,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,CAAC;gBAEnG,OAAO;oBACL,KAAK,EAAE,UAAU,CAAC,KAAK;oBACvB,MAAM;iBACP,CAAC;AACJ,aAAC,CAAC,CAAC;AAEH,YAAA,OAAO,aAAa,CAAC;SACtB,CAAC,CACH,CAAC;AAEF,QAAA,OAAO,GAAG,CAAC;KACZ,CAAC,CACH,EACD,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;AAEO,IAAA,gBAAgB,GAAsD,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAE/I,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,CAAC;AAE1G,QAAA,MAAM,MAAM,GAA8B;YACxC,gBAAgB,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,EAAE;YAClD,aAAa;SACd,CAAC;AAEF,QAAA,OAAO,MAAM,CAAC;AAChB,KAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;AAEO,IAAA,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACvE,IAAA,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;AAE3E,IAAA,IAAI,iBAAiB,GAAA;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;AAED,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;KAC9B;AAED,IAAA,IAAI,oBAAoB,GAAA;AACtB,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KACjC;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;KAC/B;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;KAC/B;AAED,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;KAC9B;AAED,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC;KACnC;AAED,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC;KAC7C;AAED,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC;KACrC;AAED,IAAA,IAAI,qBAAqB,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC;KACzC;AAED,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,CAAC;KACH;AAED,IAAA,6BAA6B,CAAC,MAAW,EAAA;AACvC,QAAA,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;QAE7B,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,CAAC;YAEpH,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,CAAC;AAExD,YAAA,IAAI,GAA0C,CAAC;AAE/C,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,CAAC;AAElE,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,CAAC;oBACtH,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;;AAG/E,oBAAA,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;;oBAG3D,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,CAAC;;AAGvF,oBAAA,OAAO,gBAAgB,CAAC;iBACzB,CAAC,CACH,CAAC;AACH,aAAA;AAAM,iBAAA;;AAEL,gBAAA,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,aAAA;AAED,YAAA,OAAO,GAAG,CAAC;SACZ,CAAC,CACH,CAAC;KACH;AAED,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,CAAC;KACH;AAED,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,CAAC;AAErN,YAAA,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9D,YAAA,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxD,YAAA,IAAI,GAAiD,CAAC;AAEtD,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,CAAC;AAE7E,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,CAAC;oBACnJ,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;;oBAGvF,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;;oBAGnE,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,CAAC;;AAGvF,oBAAA,OAAO,gBAAgB,CAAC;iBACzB,CAAC,CACH,CAAC;AACH,aAAA;AAAM,iBAAA;;AAEL,gBAAA,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,aAAA;AAED,YAAA,OAAO,GAAG,CAAC;SACZ,CAAC,CACH,CAAC;KACH;IAEQ,OAAO,GAAG,mBAAmB,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAE5E,QAAQ,GAAA;AACN,QAAA,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;AAE7B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAElD,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,CAAC;AAC9H,SAAA;QAED,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;AAG5C,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,CAAC;AAC7C,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,CAAC;AAC3E,SAAC,CAAC,CAAC;KACJ;IAEQ,WAAW,GAAA;QAClB,KAAK,CAAC,WAAW,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;AAC7B,QAAA,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,CAAC;AACvC,QAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC;AAClC,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;AAChC,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;AAChC,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;AAChC,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;AAC7B,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;KACxB;AAEQ,IAAA,mBAAmB,GAA8B,CAAC,CAAC,EAAE,OAAO,KAAI;AACvE,QAAA,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;AAE5B,QAAA,IAAI,UAAU,EAAE;AACd,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;YAChD,MAAM,SAAS,GAAG,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;AACzC,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,CAAC;gBAEjE,IAAI,WAAW,CAAC,MAAM,EAAE;AACtB,oBAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;AACtC,iBAAA;gBAED,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,CAAC;AAClE,iBAAA;qBAAM,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,CAAC;AACvE,iBAAA;aACF,CAAC,CACH,CACF,CAAC;AACH,SAAA;AAAM,aAAA;YACL,OAAO,CAAC,MAAM,EAAE,CAAC;AAClB,SAAA;AACH,KAAC,CAAC;AAEM,IAAA,kBAAkB,CAAC,KAAU,EAAA;AACnC,QAAA,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;AAC7B,QAAA,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;QAE9E,MAAM,gBAAgB,GAA8B,EAAE,CAAC;AACvD,QAAA,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;AAEzC,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AAClB,YAAA,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AAE7B,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;gBACzB,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAC1C,gBAAA,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACtB,aAAA;AACH,SAAC,CAAC,CAAC;AAEH,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,SAAS;AACrB,aAAA,CAAC,CAAC;AACJ,SAAA;KACF;AAEO,IAAA,iBAAiB,CAAC,MAAW,EAAA;QACnC,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACrD,MAAM,aAAa,GAAG,CAAC,GAAG,YAAY,EAAE,GAAG,MAAM,CAAC,CAAC;AACnD,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;KACrC;AAEO,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,CAAC;AACjC,QAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;AAC/B,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;KAClC;wGA/bU,iCAAiC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAAjC,iCAAiC,EAAA,QAAA,EAAA,cAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAUf,UAAU,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjEzC,ioCAqBA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,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,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,8BAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,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,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,SAAA,EAAA,OAAA,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,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,qCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,8DAAA,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,kBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDkCa,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAH7C,SAAS;;8BAcR,aAAa,EAAA,CAAA;sBADZ,SAAS;uBAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;;;AEzDpD,SAAU,iBAAiB,CAAqD,MAAqC,EAAA;AACzH,IAAA,MAAM,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAAC;AAC1C,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,KAAK;SACpB,CAAC;AACH,KAAA,CAAC,CAAC;AACL;;MC2Ba,+BAA+B,CAAA;wGAA/B,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;yGAA/B,+BAA+B,EAAA,YAAA,EAAA,CAH3B,iCAAiC,CAAA,EAAA,OAAA,EAAA,CAtB9C,YAAY;YACZ,WAAW;YACX,cAAc;YACd,gBAAgB;YAChB,kBAAkB;YAClB,eAAe;YACf,eAAe;YACf,mBAAmB;YACnB,mBAAmB;YACnB,aAAa;YACb,mBAAmB;YACnB,iBAAiB;YACjB,gBAAgB;YAChB,eAAe;YACf,eAAe;YACf,cAAc;YACd,aAAa;AACb,YAAA,gBAAgB,gCAMR,iCAAiC,CAAA,EAAA,CAAA,CAAA;AAEhC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,+BAA+B,YAzBxC,YAAY;YACZ,WAAW;YACX,cAAc;YACd,gBAAgB;YAChB,kBAAkB;YAClB,eAAe;YACf,eAAe;YACf,mBAAmB;YACnB,mBAAmB;YACnB,aAAa;YACb,mBAAmB;YACnB,iBAAiB;YACjB,gBAAgB;YAChB,eAAe;YACf,eAAe;YACf,cAAc;YACd,aAAa;YACb,gBAAgB;YAChB,YAAY,CAAC,QAAQ,CAAC;AACpB,gBAAA,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,iCAAiC,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC;aAC/G,CAAC,CAAA,EAAA,CAAA,CAAA;;4FAKO,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBA3B3C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBACX,cAAc;wBACd,gBAAgB;wBAChB,kBAAkB;wBAClB,eAAe;wBACf,eAAe;wBACf,mBAAmB;wBACnB,mBAAmB;wBACnB,aAAa;wBACb,mBAAmB;wBACnB,iBAAiB;wBACjB,gBAAgB;wBAChB,eAAe;wBACf,eAAe;wBACf,cAAc;wBACd,aAAa;wBACb,gBAAgB;wBAChB,YAAY,CAAC,QAAQ,CAAC;AACpB,4BAAA,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,iCAAiC,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC;yBAC/G,CAAC;AACH,qBAAA;oBACD,YAAY,EAAE,CAAC,iCAAiC,CAAC;oBACjD,OAAO,EAAE,CAAC,iCAAiC,CAAC;AAC7C,iBAAA,CAAA;;;ACHK,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,CAAC;AAChJ,IAAA,IAAI,qBAAyD,CAAC;AAE9D,IAAA,IAAI,oBAAoB,EAAE;AACxB,QAAA,qBAAqB,GAAG;AACtB,YAAA,eAAe,EAAE,OAAO,oBAAoB,KAAK,SAAS,GAAG,YAAY,GAAI,oBAA+B;SAC7G,CAAC;AACH,KAAA;AAED,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,CAAC;IACvL,IAAI,OAAO,GAAoC,SAAS,CAAC;AAEzD,IAAA,OAAO,GAAG,MAAM,CAAC,QAAQ,KAAK,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;AAE1E,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,qBAAqB;SACzB,CAAC;QACF,OAAO;AACR,KAAA,CAAC,CAAC;AACL,CAAC;AAEK,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,CAAC;AAEzF,QAAA,IAAI,QAAQ,EAAE;AACZ,YAAA,OAAO,OAAO,CAAC;AAChB,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,CAAC;AAC7C,SAAA;AACH,KAAC,CAAC;AACJ;;MCpEa,4BAA4B,CAAA;wGAA5B,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;yGAA5B,4BAA4B,EAAA,OAAA,EAAA,CAJ7B,YAAY,CAEZ,EAAA,OAAA,EAAA,CAAA,+BAA+B,EAAE,gCAAgC,EAAE,kCAAkC,EAAE,+BAA+B,CAAA,EAAA,CAAA,CAAA;yGAErI,4BAA4B,EAAA,OAAA,EAAA,CAJ7B,YAAY,EAEZ,+BAA+B,EAAE,gCAAgC,EAAE,kCAAkC,EAAE,+BAA+B,CAAA,EAAA,CAAA,CAAA;;4FAErI,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBALxC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,YAAY,CAAC;AACvB,oBAAA,YAAY,EAAE,EAAE;oBAChB,OAAO,EAAE,CAAC,+BAA+B,EAAE,gCAAgC,EAAE,kCAAkC,EAAE,+BAA+B,CAAC;AAClJ,iBAAA,CAAA;;;ACeK,MAAO,2BAAqG,SAAQA,WAA6B,CAAA;IACpI,oBAAoB,GAAG,MAAM,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAEhF,IAAA,OAAO,CAAU;AACjB,IAAA,IAAI,GAAG,IAAI,kBAAkB,EAAE,CAAC;IAE/B,aAAa,GAAG,iBAAiB,CAAC,IAAI,CAAC,oBAAoB,EAAE,KAAK,EAAE;AAC3E,QAAA,OAAO,EAAE,8BAA8B;AACxC,KAAA,CAAC,CAAC;AAEH,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAa,CAAC;KACjC;AAED,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,IAAiB,CAAC;KAC/B;AAED,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,OAAiB,CAAC;KAC/B;AAED,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;KAChC;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;KAC/B;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,OAAO,GAAG,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC;;QAG9B,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY;aAC9C,IAAI,CACH,YAAY,CAAC,GAAG,CAAC,EACjB,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAC1C;aACA,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,WAAW,CAAC,sBAAsB,EAAE,CAAC;AAC1C,YAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;AACjC,SAAC,CAAC,CAAC;KACN;IAEQ,WAAW,GAAA;QAClB,KAAK,CAAC,WAAW,EAAE,CAAC;QAEpB,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,OAAO,CAAC;AACrB,SAAA;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;KACrB;wGArDU,2BAA2B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,EAb5B,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;AAWT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,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,0FAAA,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,WAAA,EAAA,IAAA,EAAAP,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,aAAA,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,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAEU,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAdvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;AAWT,EAAA,CAAA;AACF,iBAAA,CAAA;;;MCCY,kCAAkC,CAAA;wGAAlC,kCAAkC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;yGAAlC,kCAAkC,EAAA,YAAA,EAAA,CAH9B,2BAA2B,CAAA,EAAA,OAAA,EAAA,CAXxC,YAAY;YACZ,aAAa;YACb,WAAW;YACX,mBAAmB;YACnB,eAAe;YACf,kBAAkB;YAClB,cAAc,EAAAK,IAAA,CAAA,YAAA,CAAA,EAAA,CAAA,CAAA;AAQL,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kCAAkC,YAd3C,YAAY;YACZ,aAAa;YACb,WAAW;YACX,mBAAmB;YACnB,eAAe;YACf,kBAAkB;YAClB,cAAc;YACd,YAAY,CAAC,QAAQ,CAAC;gBACpB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,2BAA2B,EAAE,CAAC;aACxE,CAAC,CAAA,EAAA,CAAA,CAAA;;4FAKO,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAhB9C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,aAAa;wBACb,WAAW;wBACX,mBAAmB;wBACnB,eAAe;wBACf,kBAAkB;wBAClB,cAAc;wBACd,YAAY,CAAC,QAAQ,CAAC;4BACpB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,2BAA2B,EAAE,CAAC;yBACxE,CAAC;AACH,qBAAA;oBACD,YAAY,EAAE,CAAC,2BAA2B,CAAC;AAC3C,oBAAA,OAAO,EAAE,EAAE;AACZ,iBAAA,CAAA;;;AClBK,SAAU,eAAe,CAAC,MAA6B,EAAA;IAC3D,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAAC;IAChE,MAAM,WAAW,GAAsB,WAAW,CAAC;QACjD,GAAG;AACH,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,YAAY,EAAE,EAAE;AAChB,QAAA,YAAY,EAAE;;;AAGZ,YAAA,QAAQ,EAAE,MAAM;AACjB,SAAA;QACD,GAAG,4BAA4B,CAAC,MAAM,EAAE;AACtC,YAAA,GAAG,iBAAiB;YACpB,SAAS;YACT,SAAS;SACV,CAAC;AACH,KAAA,CAAC,CAAC;AAEH,IAAA,OAAO,WAAW,CAAC;AACrB;;ACgEM,MAAO,+BAA6C,SAAQ,cAA8D,CAAA;AACtH,IAAA,cAAc,GAAG,YAAY,CAAC,MAAK;AACzC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC;AAElD,QAAA,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;AAC/B,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;AAChC,SAAA;AACH,KAAC,CAAC,CAAC;AAEK,IAAA,YAAY,GAAwD,YAAY,CAAC,MAAK;AAC5F,QAAA,OAAO,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;AAChE,KAAC,CAAC,CAAC;AAEK,IAAA,eAAe,GAAwD,YAAY,CAAC,MAAK;AAC/F,QAAA,OAAO,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,IAAI,KAAK,EAAE,KAAK,CAAC,CAAC;AAC7E,KAAC,CAAC,CAAC;AAEH,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;KACzB;AAED,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,IAAK,IAAI,CAAC,KAAK,CAAC,GAAc,CAAC;KAC7D;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC;KACrC;AAED,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,IAAI,WAAW,CAAC;KACrD;AAED,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,IAAI,KAAK,CAAC;KAC/C;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC;KAC1C;AAED,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,IAAI,QAAQ,CAAC;KACrD;AAED,IAAA,IAAI,GAAG,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;KACnC;AAED,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,CAAC;KAC3C;AAED,IAAA,IAAI,gBAAgB,GAAA;QAClB,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;KACnD;AAED,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC;KAC1C;AAED,IAAA,IAAI,iBAAiB,GAAA;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC;KACpD;AAED,IAAA,WAAW,CAAC,CAAS,EAAA;AACnB,QAAA,MAAM,KAAK,GAAc,IAAI,CAAC,KAAK,CAAC;AACpC,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAkB,CAAC;AACxC,QAAA,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;YACzB,CAAC;YACD,KAAK;AACN,SAAA,CAAC,CAAC;KACJ;AAED,IAAA,cAAc,CAAC,CAAS,EAAA;AACtB,QAAA,MAAM,KAAK,GAAc,IAAI,CAAC,KAAK,CAAC;AACpC,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAM,CAAC;AAC5B,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC;YAC5B,CAAC;YACD,KAAK;AACN,SAAA,CAAC,CAAC;KACJ;AAED,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;KACzB;AAED,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QAErB,IAAI,GAAG,IAAI,IAAI,EAAE;AACf,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;AACzB,SAAA;KACF;AAEQ,IAAA,eAAe,GAAuC,CAAC,CAAC,EAAE,CAAC,KAAI;QACtE,OAAO,CAAC,CAAC,GAAG,CAAC;AACf,KAAC,CAAC;AAEF;;;;AAIG;AACH,IAAA,MAAM,CAAC,KAAa,EAAA;QAClB,IAAI,KAAK,KAAK,CAAC,EAAE;YACf,OAAO;AACR,SAAA;QAED,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;KACpC;AAED,IAAA,QAAQ,CAAC,KAAa,EAAA;QACpB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;KACpC;IAED,UAAU,GAAA;AACR,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;AACrC,QAAA,MAAM,QAAQ,GAAG,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;AACnE,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;KAC/B;AAED,IAAA,SAAS,CAAC,KAAa,EAAA;AACrB,QAAA,MAAM,KAAK,GAAc,IAAI,CAAC,KAAK,CAAC;AACpC,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAEjC,IAAI,CAAC,WAAW,EAAE;YAChB,OAAO;AACR,SAAA;AAED,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;AAClE,QAAA,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,WAAW,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;KAC3D;IAED,WAAW,CAAC,YAAoB,EAAE,WAAmB,EAAA;AACnD,QAAA,MAAM,KAAK,GAAc,IAAI,CAAC,KAAK,CAAC;AACpC,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;QAExC,IAAI,CAAC,WAAW,EAAE;YAChB,OAAO;AACR,SAAA;AAED,QAAA,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,WAAW,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;AAC1D,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;KAClC;AAED,IAAA,IAAI,CAAC,KAA2B,EAAA;QAC9B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;KAC3D;IAED,YAAY,CAAC,WAA8B,EAAE,CAAS,EAAA;AACpD,QAAA,MAAM,KAAK,GAAc,IAAI,CAAC,KAAK,CAAC;AACpC,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAM,CAAC;AAE5B,QAAA,OAAO,kBAAkB,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE;YAC/C,CAAC;YACD,KAAK;YACL,WAAW;AACZ,SAAA,CAAC,CAAC;KACJ;wGApKU,+BAA+B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA/B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,+BAA+B,EA9BhC,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,EAAA,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,WAAA,EAAA,IAAA,EAAAC,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,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,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,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,qCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAEU,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBA/B3C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BT,EAAA,CAAA;AACF,iBAAA,CAAA;;;MC1DY,6BAA6B,CAAA;wGAA7B,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;yGAA7B,6BAA6B,EAAA,YAAA,EAAA,CAHzB,+BAA+B,CAAA,EAAA,OAAA,EAAA,CAd5C,YAAY;YACZ,kBAAkB;YAClB,mBAAmB;YACnB,gBAAgB;YAChB,eAAe;YACf,aAAa;YACb,cAAc;YACd,sBAAsB;YACtB,kBAAkB;YAClB,eAAe,EAAAE,IAAA,CAAA,YAAA,CAAA,EAAA,CAAA,CAAA;AAQN,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,6BAA6B,YAjBtC,YAAY;YACZ,kBAAkB;YAClB,mBAAmB;YACnB,gBAAgB;YAChB,eAAe;YACf,aAAa;YACb,cAAc;YACd,sBAAsB;YACtB,kBAAkB;YAClB,eAAe;YACf,YAAY,CAAC,QAAQ,CAAC;gBACpB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,+BAA+B,EAAE,CAAC;aAC7E,CAAC,CAAA,EAAA,CAAA,CAAA;;4FAKO,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAnBzC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,kBAAkB;wBAClB,mBAAmB;wBACnB,gBAAgB;wBAChB,eAAe;wBACf,aAAa;wBACb,cAAc;wBACd,sBAAsB;wBACtB,kBAAkB;wBAClB,eAAe;wBACf,YAAY,CAAC,QAAQ,CAAC;4BACpB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,+BAA+B,EAAE,CAAC;yBAC7E,CAAC;AACH,qBAAA;oBACD,YAAY,EAAE,CAAC,+BAA+B,CAAC;AAC/C,oBAAA,OAAO,EAAE,EAAE;AACZ,iBAAA,CAAA;;;ACrBK,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,CAAC;AAEpN,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,iBAAiB;SAClB,CAAC;AACF,QAAA,UAAU,EAAE;AACV,YAAA,UAAU,EAAE,OAAO,CAAC,gBAAgB,CAAC;AACtC,SAAA;AACF,KAAA,CAAC,CAAC;AACL;;MC3Ba,+BAA+B,CAAA;wGAA/B,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;yGAA/B,+BAA+B,EAAA,CAAA,CAAA;yGAA/B,+BAA+B,EAAA,CAAA,CAAA;;4FAA/B,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAL3C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,OAAO,EAAE,EAAE;AACZ,iBAAA,CAAA;;;ACAK,SAAU,WAAW,CAAC,MAAyB,EAAA;IACnD,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAAC;IAExD,MAAM,WAAW,GAAG,mCAAmC,CAAC;AACxD,IAAA,OAAO,WAAW,CAAC;QACjB,GAAG;AACH,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,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,iBAAiB;SACrB,CAAC;AACH,KAAA,CAAC,CAAC;AACL,CAAC;AAIK,SAAU,aAAa,CAAC,MAA2B,EAAA;IACvD,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAAC;IAExD,MAAM,WAAW,GAAG,qCAAqC,CAAC;AAC1D,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,iBAAiB;SACrB,CAAC;AACH,KAAA,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;;;;;;AAmBE;;ACLF;;;;AAIG;AACG,SAAU,cAAc,CAAC,MAAmC,EAAA;AAChE,IAAA,IAAI,KAAkC,CAAC;IAEvC,IAAI,MAAM,CAAC,WAAW,EAAE;AACtB,QAAA,KAAK,GAAG,OAAO,EAAE,WAAW,EAAE,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AACzE,KAAA;SAAM,IAAI,MAAM,CAAC,UAAU,EAAE;AAC5B,QAAA,KAAK,GAAG,OAAO,EAAE,UAAU,EAAE,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AACvE,KAAA;AAAM,SAAA;QACL,KAAK,GAAG,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;AACxC,KAAA;AAED,IAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;QACnB,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;AAC3B,KAAA;IAED,OAAO;AACL,QAAA,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;QAC7B,KAAK;KACN,CAAC;AACJ;;MCzEa,sCAAsC,GAAG,IAAI,cAAc,CAAC,2CAA2C,EAAE;MAKzG,kCAAkC,CAAA;AACrC,IAAA,eAAe,GAAG,IAAI,eAAe,CAAgC,MAAM,CAAuC,sCAAsC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AAEpL,IAAA,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;AAE/D,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;KACnC;IAED,IAAI,cAAc,CAAC,cAA6C,EAAA;AAC9D,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;KAC3C;wGAXU,kCAAkC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAlC,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kCAAkC,cAFjC,MAAM,EAAA,CAAA,CAAA;;4FAEP,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAH9C,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;ICNW,qBAyBX;AAzBD,CAAA,UAAY,oBAAoB,EAAA;AAC9B;;AAEG;AACH,IAAA,oBAAA,CAAA,oBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR;;AAEG;AACH,IAAA,oBAAA,CAAA,oBAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,GAAA,aAAe,CAAA;AACf;;AAEG;AACH,IAAA,oBAAA,CAAA,oBAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAc,CAAA;AACd;;AAEG;AACH,IAAA,oBAAA,CAAA,oBAAA,CAAA,gBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,gBAAkB,CAAA;AAClB;;AAEG;AACH,IAAA,oBAAA,CAAA,oBAAA,CAAA,eAAA,CAAA,GAAA,CAAA,CAAA,GAAA,eAAiB,CAAA;AACjB;;AAEG;AACH,IAAA,oBAAA,CAAA,oBAAA,CAAA,sBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,sBAAwB,CAAA;AAC1B,CAAC,EAzBW,oBAAoB,KAApB,oBAAoB,GAyB/B,EAAA,CAAA,CAAA,CAAA;AAEe,SAAA,iCAAiC,CAAC,IAA0B,EAAE,gBAAsD,EAAA;AAClI,IAAA,IAAI,OAA6D,CAAC;IAClE,IAAI,mBAAmB,GAAG,IAAI,CAAC;AAE/B,IAAA,QAAQ,IAAI;QACV,KAAK,oBAAoB,CAAC,UAAU;AAClC,YAAA,OAAO,GAAG,CAAC,CAAC,KAAI;AACd,gBAAA,IAAI,MAAmB,CAAC;gBAExB,QAAQ,OAAO,CAAC;AACd,oBAAA,KAAK,QAAQ;AACX,wBAAA,MAAM,GAAG,2BAA2B,CAAC,CAAC,CAAC,CAAC;wBACxC,MAAM;AACR,oBAAA,KAAK,QAAQ;AACX,wBAAA,MAAM,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;wBACrB,MAAM;AACR,oBAAA;wBACE,MAAM,GAAG,CAAC,CAAC;wBACX,MAAM;AACT,iBAAA;AAED,gBAAA,OAAO,MAAM,CAAC;AAChB,aAAC,CAAC;AACF,YAAA,mBAAmB,GAAG,KAAK,CAAC;YAC5B,MAAM;QACR,KAAK,oBAAoB,CAAC,oBAAoB,CAAC;QAC/C,KAAK,oBAAoB,CAAC,aAAa;AACrC,YAAA,OAAO,GAAG,CAAC,CAAC,KAAI;AACd,gBAAA,IAAI,MAAmB,CAAC;gBAExB,QAAQ,OAAO,CAAC;AACd,oBAAA,KAAK,QAAQ;AACX,wBAAA,MAAM,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;wBAChC,MAAM;AACR,oBAAA,KAAK,QAAQ;AACX,wBAAA,MAAM,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;wBAC9B,MAAM;AACR,oBAAA;wBACE,MAAM,GAAG,CAAC,CAAC;wBACX,MAAM;AACT,iBAAA;AAED,gBAAA,OAAO,MAAM,CAAC;AAChB,aAAC,CAAC;AAEF,YAAA,IAAI,IAAI,KAAK,oBAAoB,CAAC,oBAAoB,EAAE;gBACtD,mBAAmB,GAAG,KAAK,CAAC;AAC7B,aAAA;YAED,MAAM;QACR,KAAK,oBAAoB,CAAC,cAAc,CAAC;QACzC,KAAK,oBAAoB,CAAC,WAAW,CAAC;QACtC,KAAK,oBAAoB,CAAC,IAAI,CAAC;AAC/B,QAAA;YACE,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,QAAQ,CAAC,CAA2B,CAAC,GAAG,CAAC,CAAC,CAAC;YACzE,MAAM;AACT,KAAA;IAED,IAAI,gBAAgB,IAAI,mBAAmB,EAAE;QAC3C,MAAM,eAAe,GAAG,OAAO,CAAC;AAEhC,QAAA,OAAO,GAAG,CAAC,KAAK,KAAI;AAClB,YAAA,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;AACpC,YAAA,MAAM,MAAM,GAAG,IAAI,GAAG,gBAAgB,CAAC,sBAAsB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAC3E,YAAA,OAAO,MAAM,CAAC;AAChB,SAAC,CAAC;AACH,KAAA;AAED,IAAA,OAAO,OAAO,CAAC;AACjB,CAAC;AAEe,SAAA,6BAA6B,CAAC,IAA0B,EAAE,gBAAsD,EAAA;AAC9H,IAAA,IAAI,OAA6D,CAAC;IAClE,IAAI,mBAAmB,GAAG,IAAI,CAAC;AAE/B,IAAA,QAAQ,IAAI;QACV,KAAK,oBAAoB,CAAC,UAAU;YAClC,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,iCAAiC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACxE,YAAA,mBAAmB,GAAG,KAAK,CAAC;YAC5B,MAAM;QACR,KAAK,oBAAoB,CAAC,WAAW;YACnC,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,yBAAyB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAChE,MAAM;QACR,KAAK,oBAAoB,CAAC,cAAc;YACtC,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;YAC/C,MAAM;QACR,KAAK,oBAAoB,CAAC,oBAAoB,CAAC;QAC/C,KAAK,oBAAoB,CAAC,aAAa;YACrC,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAExD,YAAA,IAAI,IAAI,KAAK,oBAAoB,CAAC,oBAAoB,EAAE;gBACtD,mBAAmB,GAAG,KAAK,CAAC;AAC7B,aAAA;YACD,MAAM;QACR,KAAK,oBAAoB,CAAC,IAAI,CAAC;AAC/B,QAAA;AACE,YAAA,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;YACnB,MAAM;AACT,KAAA;IAED,IAAI,gBAAgB,IAAI,mBAAmB,EAAE;QAC3C,MAAM,eAAe,GAAG,OAAO,CAAC;AAEhC,QAAA,OAAO,GAAG,CAAC,KAAK,KAAI;AAClB,YAAA,MAAM,IAAI,GAAG,KAAK,GAAG,gBAAgB,CAAC,sBAAsB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;AAC5E,YAAA,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;AACrC,YAAA,OAAO,MAAM,CAAC;AAChB,SAAC,CAAC;AACH,KAAA;AAED,IAAA,OAAO,OAAO,CAAC;AACjB,CAAC;AAEe,SAAA,mCAAmC,CAAC,CAA0C,EAAE,CAA0C,EAAA;AACxI,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC;AACzB,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,CAAC;AACtI,CAAC;AAEe,SAAA,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,CAAC;AACtI;;ICrIY,yBAaX;AAbD,CAAA,UAAY,wBAAwB,EAAA;AAClC;;AAEG;AACH,IAAA,wBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB;;AAEG;AACH,IAAA,wBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB;;AAEG;AACH,IAAA,wBAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACf,CAAC,EAbW,wBAAwB,KAAxB,wBAAwB,GAanC,EAAA,CAAA,CAAA,CAAA;AAyBK,SAAU,gCAAgC,CAAC,KAAc,EAAA;AAC7D,IAAA,OAAO,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAQ,KAAwC,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC1H,CAAC;AA8Ie,SAAA,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,CAAC;AAClD,QAAA,IAAI,MAA+B,CAAC;AAEpC,QAAA,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;AAC3B,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,CAAC;AACH,SAAA;AAAM,aAAA;AACL,YAAA,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;AACnB,SAAA;AAED,QAAA,OAAO,MAAM,CAAC;KACf,CAAC,EACF,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;AACJ,CAAC;AAED,MAAMM,2BAAyB,GAAiB,EAAE,CAAC;AAEnD;;AAEG;AACI,MAAM,8CAA8C,GAAG,iCAAiC;AAE/F;;AAEG;AACI,MAAM,2CAA2C,GAAG,8BAA8B;AAKnF,MAAO,yBAA0B,SAAQJ,WAAiD,CAAA;AAC7E,IAAA,KAAK,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAClC,IAAA,6BAA6B,GAAG,MAAM,CAAC,kCAAkC,CAAC,CAAC;AAEpF,IAAA,IAAI,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAChC,IAAA,SAAS,GAAG,IAAI,kBAAkB,EAAE,CAAC;AACrC,IAAA,iBAAiB,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAE7C,IAAA,OAAO,GAAG,IAAI,eAAe,CAAoD,SAAS,CAAC,CAAC;AAC3F,IAAA,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,oBAAoB,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAEpG,IAAA,cAAc,GAAG,IAAI,eAAe,CAA6D,SAAS,CAAC,CAAC;AAE5G,IAAA,gBAAgB,GAAG,IAAI,eAAe,CAA2C,SAAS,CAAC,CAAC;AAC5F,IAAA,SAAS,GAAG,IAAI,eAAe,CAA+F,SAAS,CAAC,CAAC;IACzI,QAAQ,GAAG,IAAI,eAAe,CAA4C,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAElF,IAAA,iBAAiB,CAAe;AAChC,IAAA,kBAAkB,GAAG,IAAI,eAAe,CAAkC,SAAS,CAAC,CAAC;IACpF,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AAE/D,IAAA,OAAO,GAAG,IAAI,eAAe,CAAS,CAAC,CAAC,CAAC;AACzC,IAAA,eAAe,GAAG,IAAI,eAAe,CAAsC,SAAS,CAAC,CAAC;IACrF,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AAEzD,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;AAC/B,IAAA,WAAW,GAAG,IAAI,OAAO,EAAQ,CAAC;AAElC,IAAA,mBAAmB,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAC/C,IAAA,gBAAgB,GAAG,IAAI,OAAO,EAAQ,CAAC;AAEtC,IAAA,qBAAqB,GAAsB;AAClD,QAAA,YAAY,EAAE,CAAC,OAA+B,EAAE,IAAI,KAAI;AACtD,YAAA,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,CAAC;AAC/H,aAAA;AAAM,iBAAA;AACL,gBAAA,OAAO,KAAK,CAAC;AACd,aAAA;SACF;KACF,CAAC;AAEO,IAAA,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAElF,qBAAqB,GAAG,IAAI,kBAAkB,CACpD,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,CAAC;KACzB,CAAC,CACH,CAAC;IAEO,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,CAAC;KAClD,CAAC,EACF,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;AAEO,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,CAAC;AAEO,IAAA,SAAS,GAA4B,IAAI,CAAC,SAAS,CAAC,IAAI,CAC/D,qBAAqB,EAAE,EACvB,SAAS,CAAC,CAAC,CAAC,KAAI;AACd,QAAA,IAAI,GAA4B,CAAC;AAEjC,QAAA,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,CAAC;gBACnG,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,CAAC;AACtB,aAAA;AAAM,iBAAA;gBACL,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,aAAA;AACF,SAAA;AAAM,aAAA;AACL,YAAA,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AACrB,SAAA;AAED,QAAA,OAAO,GAAG,CAAC;AACb,KAAC,CAAC,EACF,oBAAoB,CAAC,aAAa,CAAC,EACnC,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;IAEO,sBAAsB,GAA4B,IAAI,CAAC,YAAY,CAAC,IAAI,CAC/E,GAAG,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAoE,OAAO,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EACxJ,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,CAAC;AAC1F,KAAC,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,CAAC;AAEO,IAAA,eAAe,GAAG,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;AAE/C;;AAEG;AACM,IAAA,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI;;IAEhD,SAAS,CAAC,CAAC,CAAC,EACZ,GAAG,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC,EAClC,oBAAoB,EAAE,EACtB,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,EACpC,SAAS,CAAC,MAAM,IAAI,CAAC,sBAAsB,CAAC,EAC5C,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;AAEO,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,CAAC;AAEO,IAAA,aAAa,GAAG,IAAI,WAAW,CAAc,IAAI,EAAE;AAC1D,QAAA,UAAU,EAAE,EAAE;AACf,KAAA,CAAC,CAAC;AAEM,IAAA,aAAa,GAAG,IAAI,WAAW,CAA4B,IAAI,EAAE;QACxE,UAAU,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,uFAAuF,CAAC,CAAC;AAC1H,KAAA,CAAC,CAAC;AAEH,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,MAAM,CAAC;KACvC;AAED,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,MAAM,CAAC;KACvC;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,SAAS,CAAC;KAC5C;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC;KACvC;AAED,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,QAAQ,KAAK,wBAAwB,CAAC,IAAI,CAAC;KACxD;AAED,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;KACzB;AAED,IAAA,IAAI,QAAQ,GAAA;QACV,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,KAAK,oBAAoB,CAAC,aAAa,CAAC;AAE7E,QAAA,IAAI,cAAc,EAAE;AAClB,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;AACpC,SAAA;KACF;AAED,IAAA,IAAI,mBAAmB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,mBAAmB,IAAI,IAAI,CAAC;KAC/C;AAED,IAAA,IAAI,4BAA4B,GAAA;QAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,4BAA4B,IAAI,IAAI,CAAC,mBAAmB,KAAK,KAAK,CAAC;KACtF;AAED,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;KACvB;AAED,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,IAAI,oBAAoB,CAAC,IAAI,CAAC;KAChE;AAED,IAAA,IAAI,QAAQ,GAAA;QACV,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,KAAK,oBAAoB,CAAC,UAAU,CAAC;AAE1E,QAAA,IAAI,cAAc,EAAE;YAClB,OAAO,wBAAwB,CAAC,IAAI,CAAC;AACtC,SAAA;AAAM,aAAA;YACL,OAAO,IAAI,CAAC,QAAQ,GAAG,wBAAwB,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,IAAI,wBAAwB,CAAC,QAAQ,CAAC;AAC7H,SAAA;KACF;AAED,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC;KACrC;AAED,IAAA,IAAI,cAAc,GAAA;QAChB,OAAO,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,QAAQ,KAAK,wBAAwB,CAAC,QAAQ,CAAC;KACnF;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC;KACrC;AAED,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC;KAC/C;AAED,IAAA,IAAI,cAAc,GAAA;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC;KACjD;AAED,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;KAClC;AAED,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;KAClC;AAED,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI,CAAC;KAC9C;AAED,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;KACjC;AAED,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC;KACzC;AAED,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC;KAClE;AAEQ,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,CAAC;IAEO,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,CAAC;AAE5H,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,CAAC;IAEO,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AACzG,IAAA,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9D,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,CAAC;IAEO,UAAU,GAA4B,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI,CACvH,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,CAAC;AAEO,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,CAAC;AAEO,IAAA,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAEnF,IAAA,kBAAkB,GAAkD,IAAI,CAAC,cAAc,CAAC,IAAI,CACnG,GAAG,CAAC,CAAC,CAAC,KAAI;AACR,QAAA,IAAI,MAAyC,CAAC;AAE9C,QAAA,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,CAAC;AAE1C,gBAAA,IAAI,OAAO,EAAE;oBACX,OAAO;wBACL,OAAO;AACP,wBAAA,GAAG,CAAC;qBACL,CAAC;AACH,iBAAA;AAAM,qBAAA;AACL,oBAAA,OAAO,SAAS,CAAC;AAClB,iBAAA;aACF,CAAC,CACH,CAAC;AACH,SAAA;AAAM,aAAA;YACL,MAAM,GAAG,EAAE,CAAC;AACb,SAAA;AAED,QAAA,OAAO,MAAM,CAAC;AAChB,KAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;IAEO,sBAAsB,GAA4B,kBAAkB,CAAC,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;IACxG,qBAAqB,GAA4B,kBAAkB,CAAC,IAAI,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;AAEtG,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,CAAC;AAC9C,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CACvB,GAAG,CAAC,MAAM,IAAI,CAAC,EACf,SAAS,CAAC,aAAa,CAAC,CACzB,CAAC;KACH,CAAC,EACF,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;IAEO,YAAY,GAA4B,aAAa,CAAC;AAC7D,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CACf,KAAK,EAAE,EACP,SAAS,CAAC,OAAO,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAC9D;QACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,QAAQ;AACb,QAAA,IAAI,CAAC,SAAS;AACd,QAAA,IAAI,CAAC,cAAc;AACpB,KAAA,CAAC,CAAC,IAAI,CACL,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,CAAC,KAAI;AAC3D,QAAA,IAAI,MAAmB,CAAC;QAExB,IAAI,CAAC,aAAa,EAAE;AAClB,YAAA,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;gBAC1B,IAAI,GAAG,QAAQ,IAAI,IAAI,IAAI,EAAE,CAAC;AAC/B,aAAA;AAED,YAAA,IAAI,IAAI,EAAE;AACR,gBAAA,IAAI,OAAO,EAAE;AACX,oBAAA,IAAI,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;AACnC,wBAAA,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;AAC9B,qBAAA;AAAM,yBAAA;AACL,wBAAA,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;AAC3B,qBAAA;AACF,iBAAA;AAAM,qBAAA,IAAI,UAAU,EAAE;oBACrB,MAAM;wBACJ,wBAAwB,CAAC,UAAU,EAAE;4BACnC,IAAI;AACJ,4BAAA,iBAAiB,EAAE,IAAI;yBACxB,CAAC,IAAI,IAAI,CAAC;AACd,iBAAA;AAAM,qBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AACzB,oBAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,wBAAwB,CAAC,QAAQ,EAAE;;wBAEvD,MAAM,GAAG,IAAI,CAAC;AACf,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA;AAED,QAAA,OAAO,MAAM,CAAC;AAChB,KAAC,CAAC,EACF,oBAAoB,CAAC,yBAAyB,CAAC,EAC/C,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;AAEO,IAAA,qBAAqB,GAAsD,aAAa,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,EAAE,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,CACvM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,YAAY,CAAC,KAAI;QACtC,IAAI,MAAM,GAA0C,CAAC,CAAC;AAEtD,QAAA,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,CAAC;AACzD,YAAA,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,YAAY,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACvE,YAAA,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,YAAY,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAEvE,YAAA,MAAM,GAAG;AACP,gBAAA,GAAG,CAAC;AACJ,gBAAA,MAAM,EAAE;oBACN,GAAG,CAAC,EAAE,MAAM;oBACZ,GAAG;oBACH,GAAG;AACJ,iBAAA;aACF,CAAC;AACH,SAAA;AAED,QAAA,OAAO,MAAM,CAAC;KACf,CAAC,EACF,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;AAEO,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,CAAC;AAEO,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,CAAC;AAEF;;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,CAAC;IAEO,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,CAAC;AAEO,IAAA,aAAa,GAA8C,IAAI,CAAC,qBAAqB,CAAC,IAAI,CACjG,oBAAoB,EAAE,EACtB,GAAG,CAAC,CAAC,CAAC,KAAI;AACR,QAAA,IAAI,CAAC,EAAE;YACL,MAAM,MAAM,GAAG,sCAAsC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAChE,OAAO,CAAC,CAAc,MAAM,CAAC,IAAI,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAC3D,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,MAAM,IAAI,CAAC;AACnB,SAAA;AACH,KAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;AAEO,IAAA,mBAAmB,GAAkC,MAAM,IAAI,CAAC;IAEhE,WAAW,GAA4B,aAAa,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAC/H,YAAY,CAACI,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;QAClC,IAAI,IAAI,IAAI,IAAI,EAAE;AAChB,YAAA,MAAM,QAAQ,GAAG,IAAI,sBAAsB,CAAC;gBAC1C,IAAI;AACJ,gBAAA,GAAG,MAAM;AACT,gBAAA,iBAAiB,EAAE,IAAI;AACxB,aAAA,CAAC,CAAC;;AAGH,YAAA,IAAI,WAAW,EAAE;AACf,gBAAA,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAE5B,gBAAA,MAAM,OAAO,GAAG,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC;gBAE9C,IAAI,OAAO,IAAI,CAAC,EAAE;AAChB,oBAAA,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;oBACjC,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC7B,iBAAA;AACF,aAAA;AACF,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;AACd,KAAC,CAAC,EACF,oBAAoB,CAAC,yBAAyB,CAAC,EAC/C,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;AAEO,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,IAAI;AACxB,SAAA,CAAC,CAAC;AACL,KAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;IAEO,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,CAAC;AAEO,IAAA,QAAQ,GAAiC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAClE,iBAAiB,EAAE,EACnB,GAAG,CAAC,CAAC,CAAgC,KAAK,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,EAChE,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;AAEO,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,CAAC;AAEO,IAAA,qCAAqC,GAAwB,IAAI,CAAC,uBAAuB,CAAC;AAE1F,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,CAAC;KACpF,CAAC,EACF,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;AAEO,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,CAAC;QAE5C,IAAI,CAAC,KAAK,SAAS,EAAE;YACnB,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;gBACzC,mBAAmB,GAAG,kBAAkB,CAAC;AAC1C,aAAA;iBAAM,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,8CAA8C,CAAC,EAAE;gBACpF,mBAAmB,GAAG,uDAAuD,CAAC;AAC/E,aAAA;iBAAM,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,2CAA2C,CAAC,EAAE;gBACjF,mBAAmB,GAAG,uCAAuC,CAAC;AAC/D,aAAA;AAAM,iBAAA;gBACL,mBAAmB,GAAG,qCAAqC,CAAC;AAC7D,aAAA;AACF,SAAA;AAED,QAAA,OAAO,mBAAmB,CAAC;AAC7B,KAAC,CAAC,CACH,CACF,EACD,SAAS,CAAC,SAAS,CAAC,EACpB,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;AAEO,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,CAAC;IAEF,QAAQ,GAAA;QACN,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAE5C,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC;QAC1D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,GAAG,sBAAsB,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1F,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,IAAI,CAAC,CAAC;AAElE,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,sBAAsB;aACjD,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,cAAc,EAAE,EAChB,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,CAAC;AACJ,SAAC,CAAC,CACH;AACA,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACjC,YAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;AAC/B,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;AACnC,SAAC,CAAC,CAAC;QAEL,IAAI,uBAAuB,GAAG,KAAK,CAAC;AAEpC;;;;AAIE;QAEF,IAAI,IAAI,CAAC,4BAA4B,EAAE;AACrC,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,GAAG,IAAI,CAAC,qCAAqC;AAC7E,iBAAA,IAAI,CACH,SAAS,CAAC,CAAC,WAAW,KAAI;AACxB,gBAAA,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,CAAC;AACH,iBAAA;AAAM,qBAAA;AACL,oBAAA,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;AACjB,iBAAA;AACH,aAAC,CAAC,CACH;AACA,iBAAA,SAAS,CAAC,CAAC,QAAQ,KAAI;gBACtB,IAAI,QAAQ,IAAI,IAAI,EAAE;AACpB,oBAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACvC,iBAAA;AACH,aAAC,CAAC,CAAC;AACN,SAAA;AAED,QAAA,IAAI,CAAC,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,sBAAsB;AACtD,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,CAAC;AAChC,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI;;AAE1B,YAAA,GAAG,CAAC,CAAC,UAAU,KAAK,CAAC,UAAU,EAAE,sBAAsB,CAAsB,CAAC,CAC/E,CAAC;AACJ,SAAC,CAAC,CACH;aACA,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,OAAO;AACR,aAAA;;AAGD,YAAA,IAAI,CAAC,KAAK,SAAS,IAAI,sBAAsB,EAAE;gBAC7C,uBAAuB,GAAG,IAAI,CAAC;AAChC,aAAA;AAED,YAAA,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAClB,SAAC,CAAC,CAAC;;QAGL,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,CAAC;AACnE,SAAA;AAED,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;;QAG3D,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC,UAAU,KAAI;AACvD,YAAA,wBAAwB,CAAC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;AACzD,YAAA,wBAAwB,CAAC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;AAC3D,SAAC,CAAC,CAAC;AAEH,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC;AAC3D,QAAA,IAAI,gBAAwC,CAAC;AAE7C,QAAA,IAAI,cAAc,EAAE;YAClB,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AAClD,SAAA;QAED,IAAI,CAAC,gBAAgB,EAAE;YACrB,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,KAAK,wBAAwB,CAAC,IAAI,CAAC;YAClE,IAAI,CAAC,iBAAiB,GAAG,IAAI,WAAW,CAAC,SAAS,CAAC,CAAC;;AAGpD,YAAA,IAAI,cAAc,EAAE;gBACjB,IAAI,CAAC,IAAkB,CAAC,UAAU,CAAC,cAAc,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAC7E,aAAA;AAED,YAAA,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC;AAC3C,SAAA;AAED,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAE/C,QAAQ,IAAI,CAAC,QAAQ;YACnB,KAAK,wBAAwB,CAAC,QAAQ;gBACpC,MAAM;YACR,KAAK,wBAAwB,CAAC,IAAI;gBAChC,IAAI,CAAC,UAAU,EAAE,CAAC;gBAClB,MAAM;YACR,KAAK,wBAAwB,CAAC,QAAQ;gBACpC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACf,MAAM;AACT,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE;AACxB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAC1D,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,eAAe,CAAC,CAAC;AACxE,SAAA;QAED,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;;;YAG/L,IAAI,WAAW,IAAI,IAAI,EAAE;AACvB,gBAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AAC/D,aAAA;AACH,SAAC,CAAC,CAAC;;AAGH,QAAA,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC;YAClC,CAAC,CAAC,KAAI;AACJ,gBAAA,MAAM,SAAS,GAAG,CAAC,CAAC,KAAoB,CAAC;AACzC,gBAAA,IAAI,GAAiC,CAAC;gBAEtC,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,CAAC;AAEjH,wBAAA,IAAI,MAAM,GAAqB;AAC7B,4BAAA,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM;yBAC7B,CAAC;AAEF,wBAAA,IAAI,yBAAyB,EAAE;AAC7B,4BAAA,IAAI,CAAC,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,EAAE;AACjD,gCAAA,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,yBAAyB,CAAC,EAAE;AAChD,oCAAA,MAAM,GAAG;wCACP,CAAC,2CAA2C,GAAG,IAAI;qCACpD,CAAC;AACH,iCAAA;AACF,6BAAA;AAAM,iCAAA;AACL,gCAAA,MAAM,GAAG;oCACP,CAAC,8CAA8C,GAAG,IAAI;iCACvD,CAAC;AACH,6BAAA;AACF,yBAAA;AAED,wBAAA,OAAO,MAAM,CAAC;AAChB,qBAAC,CAAC,EACF,KAAK,EAAE,CACR,CAAC;AACH,iBAAA;AAAM,qBAAA;AACL,oBAAA,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;AACd,iBAAA;AAED,gBAAA,OAAO,GAAG,CAAC;aACZ;AACF,SAAA,CAAC,CAAC;KACJ;IAEQ,WAAW,GAAA;QAClB,KAAK,CAAC,WAAW,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,CAAC;AACrC,QAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC;AACnC,QAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CAAC;AACnC,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;AAChC,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;KAChC;AAED,IAAA,YAAY,CAAC,MAAsB,EAAA;AACjC,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;QAE7B,IAAI,KAAK,CAAC,WAAW,EAAE;AACrB,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;AACxC,SAAA;aAAM,IAAI,KAAK,CAAC,UAAU,EAAE;AAC3B,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AAChC,SAAA;KACF;AAED,IAAA,UAAU,CAAC,KAAoC,EAAA;AAC7C,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;AAEzB,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAC9B,SAAA;KACF;AAED,IAAA,cAAc,CAAC,IAAiB,EAAA;AAC9B,QAAA,MAAM,IAAI,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;AAEvC,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AAC5B,SAAA;KACF;AAED,IAAA,iBAAiB,CAAC,IAAU,EAAA;AAC1B,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAClC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;KACzB;AAED,IAAA,eAAe,CAAC,QAAc,EAAA;AAC5B,QAAA,MAAM,UAAU,GAAG,yBAAyB,CAAC,QAAQ,CAAC,CAAC;AACvD,QAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;KAC1B;AAED,IAAA,OAAO,CAAC,IAAwB,EAAA;AAC9B,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,KAAK,IAAI,EAAE;AACrC,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAClC,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACrB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;AACzB,SAAA;KACF;AAED,IAAA,kBAAkB,CAAC,KAAoB,EAAA;QACrC,IAAI,SAAS,GAAG,CAAC,CAAC;AAElB,QAAA,QAAQ,KAAK,CAAC,GAAG,EAAE,WAAW,EAAE;AAC9B,YAAA,KAAK,SAAS;gBACZ,SAAS,GAAG,CAAC,CAAC;gBACd,MAAM;AACR,YAAA,KAAK,WAAW;gBACd,SAAS,GAAG,CAAC,CAAC,CAAC;gBACf,MAAM;AACT,SAAA;QAED,IAAI,MAAM,GAAG,CAAC,CAAC;AAEf,QAAA,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE;YACnC,MAAM,GAAG,GAAG,CAAC;AACd,SAAA;aAAM,IAAI,KAAK,CAAC,OAAO,EAAE;YACxB,MAAM,GAAG,EAAE,CAAC;AACb,SAAA;aAAM,IAAI,KAAK,CAAC,QAAQ,EAAE;YACzB,MAAM,GAAG,CAAC,CAAC;AACZ,SAAA;QAED,IAAI,SAAS,KAAK,CAAC,EAAE;YACnB,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;iBACpD,IAAI,CAAC,KAAK,EAAE,CAAC;iBACb,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,CAAC;AAC9D,gBAAA,MAAM,QAAQ,GAAG,IAAI,sBAAsB,CAAC;AAC1C,oBAAA,IAAI,EAAE,OAAO;AACb,oBAAA,GAAG,MAAM;AACV,iBAAA,CAAC,CAAC;AAEH,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,CAAC;gBAElJ,IAAI,QAAQ,IAAI,IAAI,EAAE;oBACpB,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;AACzD,iBAAA;AACH,aAAC,CAAC,CAAC;AACN,SAAA;KACF;AAED,IAAA,kBAAkB,CAAC,KAAoB,EAAA;QACrC,IAAI,SAAS,GAAG,CAAC,CAAC;AAElB,QAAA,QAAQ,KAAK,CAAC,GAAG,EAAE,WAAW,EAAE;AAC9B,YAAA,KAAK,SAAS;gBACZ,SAAS,GAAG,CAAC,CAAC;gBACd,MAAM;AACR,YAAA,KAAK,WAAW;gBACd,SAAS,GAAG,CAAC,CAAC,CAAC;gBACf,MAAM;AACT,SAAA;QAED,IAAI,MAAM,GAAG,CAAC,CAAC;AAEf,QAAA,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE;YAClC,MAAM,GAAG,GAAG,CAAC;AACd,SAAA;aAAM,IAAI,KAAK,CAAC,MAAM,EAAE;YACvB,MAAM,GAAG,EAAE,CAAC;AACb,SAAA;aAAM,IAAI,KAAK,CAAC,QAAQ,EAAE;YACzB,MAAM,GAAG,CAAC,CAAC;AACZ,SAAA;QAED,IAAI,SAAS,KAAK,CAAC,EAAE;AACnB,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;AAC3D,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;AACzB,SAAA;KACF;IAED,SAAS,GAAA;;KAER;IAED,YAAY,GAAA;;QAEV,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AAC3C,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;AACxB,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;AAC9B,SAAA;KACF;IAED,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;KACxB;IAED,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;KACvB;AAED,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,CAAC;AACtB,SAAC,CAAC,CAAC;KACJ;IAED,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;KACtB;wGA12BU,yBAAyB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,2EC7OtC,0uKAkGA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,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,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAX,IAAA,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,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,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,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,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,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,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,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,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,UAAA,EAAA,eAAA,EAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,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,EAAAQ,EAAA,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,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,4OAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,sRAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,kTAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,gNAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,6NAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,eAAA,EAAA,eAAA,EAAA,eAAA,EAAA,eAAA,EAAA,eAAA,EAAA,eAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,UAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FD2Ia,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,SAAS;;;;AEjKV,SAAS,kCAAkC,CAAC,IAA0B,EAAE,gBAAsD,EAAA;IAC5H,MAAM,oBAAoB,GAAG,iCAAiC,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;IAEvF,OAAO,CAAC,CAAC,KAAI;AACX,QAAA,IAAI,MAAwB,CAAC;AAE7B,QAAA,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,CAAS;aACzC,CAAC;AACH,SAAA;AAED,QAAA,OAAO,MAAM,CAAC;AAChB,KAAC,CAAC;AACJ,CAAC;AAED,SAAS,mCAAmC,CAAC,IAA0B,EAAE,gBAAsD,EAAA;IAC7H,MAAM,qBAAqB,GAAG,6BAA6B,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;IAEpF,OAAO,CAAC,CAAC,KAAI;AACX,QAAA,IAAI,MAAwB,CAAC;AAE7B,QAAA,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,CAAS;aAC1C,CAAC;AACH,SAAA;AAED,QAAA,OAAO,MAAM,CAAC;AAChB,KAAC,CAAC;AACJ,CAAC;AAED,MAAM,yBAAyB,GAAiB,EAAE,CAAC;AAuC7C,MAAO,+BAAgC,SAAQP,WAAuD,CAAA;AACzF,IAAA,kCAAkC,GAAG,MAAM,CAAC,kCAAkC,CAAC,CAAC;AAEzF,IAAA,IAAI,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAEhC,IAAA,kBAAkB,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAC9C,IAAA,uBAAuB,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAEnD,IAAA,kBAAkB,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAC9C,IAAA,wBAAwB,GAAG,IAAI,kBAAkB,EAAE,CAAC;AACpD,IAAA,kBAAkB,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAC9C,IAAA,cAAc,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAC1C,IAAA,cAAc,GAAG,IAAI,kBAAkB,EAAE,CAAC;IAE1C,sBAAsB,GAA2C,EAAE,CAAC;IACpE,qBAAqB,GAAmC,QAAQ,CAAC;IACjE,eAAe,GAAqB,IAAI,CAAC;AAEzC,IAAA,OAAO,GAAG,IAAI,eAAe,CAA0D,SAAS,CAAC,CAAC;AAClG,IAAA,cAAc,GAAG,IAAI,eAAe,CAAoD,SAAS,CAAC,CAAC;AACnG,IAAA,eAAe,GAAG,IAAI,eAAe,CAAqD,SAAS,CAAC,CAAC;AAErG,IAAA,SAAS,GAAG,IAAI,eAAe,CAA2C,SAAS,CAAC,CAAC;IACrF,QAAQ,GAAG,IAAI,eAAe,CAA4C,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAElF,IAAA,eAAe,GAAG,IAAI,OAAO,EAAqB,CAAC;AAClD,IAAA,kBAAkB,GAA0C,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAE5G,IAAA,eAAe,GAAG,IAAI,eAAe,CAA2C,SAAS,CAAC,CAAC;IAC1F,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AAGjE,IAAA,QAAQ,CAAqB;AAG7B,IAAA,qBAAqB,CAAc;AAGnC,IAAA,mBAAmB,CAAc;AAEjC,IAAA,IAAI,qBAAqB,GAAA;QACvB,OAAO,IAAI,CAAC,sBAAsB,CAAC;KACpC;AAED,IAAA,IAAI,oBAAoB,GAAA;QACtB,OAAO,IAAI,CAAC,qBAAqB,CAAC;KACnC;AAED,IAAA,IAAI,cAAc,GAAA;QAChB,OAAO,IAAI,CAAC,eAAe,CAAC;KAC7B;AAEQ,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,CAAC;AAEO,IAAA,sBAAsB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAEvF,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,CAAC;AAEO,IAAA,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAErF,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,CAAC;KAClD,CAAC,EACF,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;AAEO,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,CAAC;IAEO,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,CAAC;AAC3F,KAAC,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,CAAC;AAEF,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,CAAC;AAC1D,YAAA,MAAM,WAAW,GAAG,CAAC,SAAoB,KAAK,aAAa,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;YAEtF,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,CAAC;oBACnC,OAAO,IAAI,GAAI,WAAW,CAAC,SAAS,CAAC,EAAE,GAAG,cAAc,EAAE,IAAI,EAAoB,CAAC,CAAe,GAAG,IAAI,CAAC;iBAC3G,CAAC,CACH,CAAC;AACH,aAAA;AAAM,iBAAA;;AAEL,gBAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CACjC,IAAI,CAAC,CAAC,GAAuB,EAAE,aAAwC,KAAI;AACzE,oBAAA,IAAI,MAA0B,CAAC;oBAC/B,IAAI,QAAQ,GAAkC,OAAO,CAAC;AAEtD,oBAAA,IAAI,aAAa,IAAI,aAAa,CAAC,KAAK,IAAI,IAAI,EAAE;wBAChD,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC;AACtD,wBAAA,MAAM,iBAAiB,GAAG,SAAS,CAAC,EAAE,GAAG,cAAc,EAAE,IAAI,EAAE,eAAe,EAAoB,CAAC,CAAC;;wBAGpG,IAAI,eAAe,IAAI,GAAG,EAAE;4BAC1B,MAAM,KAAK,GAAG,yBAAyB,CAAC,aAAa,EAAE,iBAAiB,CAAc,CAAC;AACvF,4BAAA,MAAM,GAAG;AACP,gCAAA,aAAa,EAAE,aAAa;AAC5B,gCAAA,QAAQ,EAAE,KAAK;gCACf,KAAK;6BACN,CAAC;;;AAIF,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,CAAC;AAC1B,iCAAA;AACF,6BAAA;AACF,yBAAA;AAAM,6BAAA;4BACL,IAAI,KAAK,GAAqB,SAAS,CAAC;4BACxC,IAAI,QAAQ,GAAqB,iBAAiB,CAAC;4BAEnD,IAAI,IAAI,KAAK,QAAQ,EAAE;gCACrB,IAAI,CAAC,yBAAyB,EAAE;;oCAE9B,QAAQ,GAAG,SAAS,CAAC;AACrB,oCAAA,QAAQ,GAAG,GAAG,CAAC,YAAY,KAAK,OAAO,GAAG,KAAK,GAAG,OAAO,CAAC;AAC3D,iCAAA;AAAM,qCAAA,IAAI,GAAG,CAAC,YAAY,KAAK,aAAa,EAAE;oCAC7C,QAAQ,GAAG,KAAK,CAAC;AAClB,iCAAA;AAAM,qCAAA;;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,CAAC;AAC/H,iCAAA;;AAGD,gCAAA,QAAQ,QAAQ;AACd,oCAAA,KAAK,KAAK;AACR,wCAAA,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,EAAE,KAAa,CAAC;AAEnD,wCAAA,IAAI,eAA0B,CAAC;wCAC/B,MAAM,kCAAkC,GAAG,CAAC,SAAS,IAAI,QAAQ,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;AAE9F,wCAAA,IAAI,SAAe,CAAC;AACpB,wCAAA,IAAI,OAAa,CAAC;AAElB,wCAAA,IAAI,kCAAkC,EAAE;4CACtC,SAAS,GAAG,eAAe,CAAC;4CAC5B,OAAO,GAAG,SAAS,CAAC;4CACpB,eAAe,GAAG,iBAAiB,CAAC;AACrC,yCAAA;AAAM,6CAAA;4CACL,SAAS,GAAG,SAAS,CAAC;4CACtB,OAAO,GAAG,eAAe,CAAC;AAC1B,4CAAA,eAAe,GAAG,SAAS,CAAC,EAAE,GAAG,cAAc,EAAE,IAAI,EAAE,SAAS,EAAoB,CAAC,CAAC;AACvF,yCAAA;;wCAGD,IAAI,QAAQ,CAAC,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE;;4CAG1C,SAAS,GAAG,eAAe,CAAC;4CAC5B,OAAO,GAAG,eAAe,CAAC;4CAC1B,QAAQ,GAAG,OAAO,CAAC;4CACnB,QAAQ,GAAG,eAAe,CAAC;AAC5B,yCAAA;AAAM,6CAAA;4CACL,QAAQ,GAAG,KAAK,CAAC;AAClB,yCAAA;;AAGD,wCAAA,KAAK,GAAG;AACN,4CAAA,KAAK,EAAE,SAAS;AAChB,4CAAA,GAAG,EAAE,OAAO;yCACb,CAAC;wCACF,MAAM;AACR,oCAAA,KAAK,OAAO;;AAEV,wCAAA,KAAK,GAAG;AACN,4CAAA,KAAK,EAAE,eAAuB;AAC9B,4CAAA,GAAG,EAAE,eAAuB;yCAC7B,CAAC;wCACF,MAAM;AACT,iCAAA;AACF,6BAAA;AAAM,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,eAAe;iCACrB,CAAC;gCAEF,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,CAAC;wCAC9E,QAAQ,GAAG,KAAK,CAAC;AAClB,qCAAA;AAAM,yCAAA;wCACL,QAAQ,GAAG,KAAK,CAAC;AAClB,qCAAA;AACF,iCAAA;AAAM,qCAAA;;AAEL,oCAAA,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;AACzB,iCAAA;AACF,6BAAA;iCAAM,IAAI,IAAI,KAAK,iBAAiB,EAAE;gCACrC,KAAK,GAAG,iBAAiB,CAAC;AAC3B,6BAAA;AAED,4BAAA,MAAM,GAAG;AACP,gCAAA,aAAa,EAAE,aAAa;gCAC5B,QAAQ;gCACR,KAAK;6BACN,CAAC;AACH,yBAAA;AACF,qBAAA;AAAM,yBAAA;AACL,wBAAA,MAAM,GAAG;AACP,4BAAA,aAAa,EAAE,aAAa;yBAC7B,CAAC;AACH,qBAAA;AAED,oBAAA,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,SAAS;yBAC3E,CAAC;AACH,qBAAA;AAED,oBAAA,OAAO,MAAM,CAAC;iBACf,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,CAAC;AACH,aAAA;SACF,CAAC,CACH,CAAC;AAEF,QAAA,OAAO,MAAM,CAAC;KACf;AAEQ,IAAA,aAAa,GAAiC,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5G,IAAA,eAAe,GAAiC,IAAI,CAAC,cAAc,CAAC,IAAI,CAC/E,SAAS,CAAC,CAAC,IAAI,KAAI;QACjB,IAAI,IAAI,KAAK,iBAAiB,EAAE;;YAE9B,OAAO,IAAI,CAAC,sBAAsB,CAAC;AACpC,SAAA;AAAM,aAAA;YACL,OAAO,IAAI,CAAC,aAAa,CAAC;AAC3B,SAAA;KACF,CAAC,CACH,CAAC;AAEF;;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,CAAC;AACvC,SAAA;AAAM,aAAA;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,CAAC;aAC5D,CAAC,CACH,CAAC;AACH,SAAA;KACF,CAAC,EACF,WAAW,EAAE,EACb,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;IAEO,mBAAmB,GAAiC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAExI,IAAA,kBAAkB,GAAiD,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAC1G,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAIQ,SAAmB,CAAO,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,EACtE,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;IAEO,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,CAAC;IAEO,cAAc,GAAG,IAAI,SAAS,CAAC;AACtC,QAAA,KAAK,EAAE,IAAI,WAAW,CAAc,IAAI,CAAC;AACzC,QAAA,GAAG,EAAE,IAAI,WAAW,CAAc,IAAI,CAAC;AACxC,KAAA,CAAC,CAAC;AAEH,IAAA,IAAI,mBAAmB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;KACzB;AAED,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC;KACvC;AAED,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,IAAI,oBAAoB,CAAC,IAAI,CAAC;KAChE;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC;KACrC;AAED,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;KAClC;AAED,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI,CAAC;KAC9C;AAED,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;KACjC;AAED,IAAA,IAAI,cAAc,GAAA;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,IAAI,IAAI,CAAC;KAChD;AAEQ,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,CAAC;AAEO,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,CAAC;AAEO,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,CAAC;AAEO,IAAA,aAAa,GAA8C,IAAI,CAAC,OAAO,CAAC,IAAI,CACnF,oBAAoB,EAAE,EACtB,GAAG,CAAC,CAAC,CAAC,KAAI;AACR,QAAA,IAAI,CAAC,EAAE;YACL,MAAM,MAAM,GAAG,sCAAsC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAChE,OAAO,CAAC,CAAc,MAAM,CAAC,IAAI,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAC3D,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,MAAM,IAAI,CAAC;AACnB,SAAA;AACH,KAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;AAEO,IAAA,mBAAmB,GAAkC,MAAM,IAAI,CAAC;IAEzE,QAAQ,GAAA;QACN,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAE5C,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAEzE,QAAA,MAAM,iBAAiB,GAAG,CAAC,KAAuB,KAAI;YACpD,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,IAAI;AACxB,iBAAA,CAAC,CAAC;AACJ,aAAA;AACH,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,sBAAsB;aACjD,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,cAAc,EAAE,EAChB,oBAAoB,CAAmB,kBAAkB,CAAC,EAC1D,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,EAAE,YAAY,CAAyD,CAAC,CACpG,CAAC;AACJ,SAAC,CAAC,CACH;aACA,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,YAAY,EAAE,YAAY,CAAC,KAAI;AACpD,YAAA,MAAM,KAAK,GAAG,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;YACvD,MAAM,WAAW,GAAG,qCAAqC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;YAE/E,IAAI,CAAC,WAAW,EAAE;AAChB,gBAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACjC,gBAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;AAC/B,gBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;AAClC,aAAA;iBAAM,IAAI,QAAQ,IAAI,IAAI,EAAE;;gBAE3B,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AAC7B,aAAA;AACH,SAAC,CAAC,CAAC;QAEL,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;AACtE,SAAA;QAED,IAAI,CAAC,wBAAwB,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,qBAAqB,GAAG,CAAC,CAAC,CAAC,CAAC;QACpH,IAAI,CAAC,kBAAkB,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,sBAAsB,GAAG,CAAC,CAAC,CAAC,CAAC;AAEhH,QAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,CAAmB,KAAI;YACnG,iBAAiB,CAAC,CAAC,CAAC,CAAC;AACvB,SAAC,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,IAAI,CAAC,uBAAuB,CAAC,YAAY,GAAG,IAAI,CAAC,sBAAsB;AACpE,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,CAAC,aAAa,EAAE,KAAK,CAAC;AACpE,oBAAA,IAAI,KAAK,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;AAE7C,oBAAA,IAAI,KAAK,IAAI,IAAI,CAAC,qBAAqB,KAAK,QAAQ,EAAE;wBACpD,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,KAAK,CAAC;AAChE,wBAAA,KAAK,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;AACxC,qBAAA;oBAED,OAAO,KAAK,CAAC;AACf,iBAAC,CAAC,EACF,GAAG,CAAC,CAAC,CAAC,KAAK,CAA8B,CAAC,CAC3C,CAAC;AACJ,aAAC,CAAC,EACF,oBAAoB,CAAC,eAAe,CAAC,CACtC;AACA,iBAAA,SAAS,CAAC,CAAC,CAA4B,KAAI;AAC1C,gBAAA,IAAI,IAAI,CAAC,qBAAqB,KAAK,QAAQ,EAAE;oBAC3C,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AAClE,iBAAA;AAAM,qBAAA;oBACL,IAAI,UAAU,GAA8B,CAAC,CAAC;AAE9C,oBAAA,IAAI,IAAI,CAAC,qBAAqB,KAAK,iBAAiB,IAAI,IAAI,CAAC,eAAe,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,GAAG,EAAE;wBAClG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,EAAE;;AAErD,4BAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,sBAAsB,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,EAAoB,CAAC,CAAC;AAChG,4BAAA,UAAU,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC;AACpD,yBAAA;AACF,qBAAA;AAED,oBAAA,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AACxC,iBAAA;AACH,aAAC,CAAC,CAAC;AACN,SAAA;QAED,IAAI,CAAC,kBAAkB,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC;AACzG,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC,CAAC;AAE3F,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,CAAC;AAE3C,YAAA,IAAI,GAAG,EAAE;AACP,gBAAA,IAAI,QAAQ,EAAE;oBACZ,GAAG,CAAC,OAAO,EAAE,CAAC;AACf,iBAAA;AAAM,qBAAA;oBACL,GAAG,CAAC,MAAM,EAAE,CAAC;AACd,iBAAA;AACF,aAAA;AACH,SAAC,CAAC,CAAC;AAEH,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC;AAChE,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,GAAG,sBAAsB,CAAC,iBAAiB,CAAC,GAAG,SAAS,CAAC,CAAC;;QAG7F,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,CAAC;AAC5D,SAAA;;QAGD,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC,QAAQ,KAAI;AACrD,YAAA,IAAI,QAAQ,EAAE;AACZ,gBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;AAC/B,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;AAE7B,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,CAAC;AAE3C,oBAAA,IAAI,GAAG,EAAE;AACP,wBAAA,IAAI,QAAQ,EAAE;4BACZ,GAAG,CAAC,OAAO,EAAE,CAAC;AACf,yBAAA;AAAM,6BAAA;4BACL,GAAG,CAAC,MAAM,EAAE,CAAC;AACd,yBAAA;AACF,qBAAA;AACH,iBAAC,CAAC,CAAC;AACJ,aAAA;AACH,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE;AACxB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAC1D,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,kCAAkC,CAAC,eAAe,CAAC,CAAC;AAC7E,SAAA;AAED,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AACzE,YAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,CAAC,CAAC;AAC/B,SAAC,CAAC,CAAC;KACJ;IAEQ,WAAW,GAAA;QAClB,KAAK,CAAC,WAAW,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC;AAClC,QAAA,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,CAAC;AACvC,QAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC;AAClC,QAAA,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE,CAAC;AACxC,QAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC;AAClC,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;AAC9B,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;AAC9B,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;AAC/B,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;AAChC,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;AAChC,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;KACjC;AAED,IAAA,cAAc,CAAC,IAAiB,EAAA;AAC9B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC;KAC9D;IAED,YAAY,CAAC,KAAgC,EAAE,IAA2B,EAAA;QACxE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;KAC5C;AAED,IAAA,gBAAgB,CAAC,IAAiB,EAAA;AAChC,QAAA,OAAO,IAAI,GAAG,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,sBAAsB,EAAE,IAAI,EAAoB,CAAC,GAAG,SAAS,CAAC;KACjG;wGAriBU,+BAA+B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA/B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,+BAA+B,EAP/B,QAAA,EAAA,cAAA,EAAA,SAAA,EAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iCAAiC;AAC1C,gBAAA,QAAQ,EAAE,UAAU,CAAC,MAAM,uCAAuC,CAAC;AACpE,aAAA;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAiCU,WAAW,EAGe,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAA,UAAU,EAGZ,EAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAA,UAAU,oDCvL/C,q6BAUA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,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,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAf,IAAA,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,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,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,MAAA,EAAA,CAAA,mBAAA,CAAA,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,MAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,WAAA,CAAA,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,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,6NAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,eAAA,EAAA,eAAA,EAAA,eAAA,EAAA,eAAA,EAAA,eAAA,EAAA,eAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDwIa,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAT3C,SAAS;AAEG,YAAA,IAAA,EAAA,CAAA,EAAA,SAAA,EAAA;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iCAAiC;AAC1C,4BAAA,QAAQ,EAAE,UAAU,CAAC,MAAM,uCAAuC,CAAC;AACpE,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,q6BAAA,EAAA,CAAA;8BAkCD,QAAQ,EAAA,CAAA;sBADP,SAAS;uBAAC,WAAW,CAAA;gBAItB,qBAAqB,EAAA,CAAA;sBADpB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,gBAAgB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA;gBAIjD,mBAAmB,EAAA,CAAA;sBADlB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,cAAc,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA;;MAogBpC,uCAAuC,CAAA;AACjC,IAAA,YAAY,GAAG,MAAM,EAAC,WAAc,EAAC,CAAC;AAC9C,IAAA,+BAA+B,GAAG,MAAM,CAAC,+BAA+B,CAAC,CAAC;AAEnF,IAAA,iBAAiB,CAAC,IAAc,EAAE,YAAoC,EAAE,KAAY,EAAA;;AAElF,QAAA,OAAO,YAAY,CAAC;KACrB;AAED,IAAA,aAAa,CAAC,UAAoB,EAAE,YAAoC,EAAE,KAAY,EAAA;AACpF,QAAA,MAAM,EAAE,oBAAoB,EAAE,GAAG,IAAI,CAAC,+BAA+B,CAAC;AACtE,QAAA,IAAI,UAAU,IAAI,IAAI,IAAI,oBAAoB,KAAK,QAAQ,EAAE;AAC3D,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,+BAA+B,CAAC,cAAc,CAAC;YAC3E,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;AAElD,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,CAAC;AAC/D,gBAAA,OAAO,gBAAgB,CAAC;AACzB,aAAA;AACF,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC;KAClD;AAEO,IAAA,wBAAwB,CAAC,KAAe,EAAA;AAC9C,QAAA,IAAI,SAA2B,CAAC;AAEhC,QAAA,IAAI,KAAK,EAAE;YACT,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAC7C,SAAS,GAAG,IAAI,CAAC,+BAA+B,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;AACzE,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;KACzC;AAEO,IAAA,gBAAgB,CAAC,KAAuB,EAAA;AAC9C,QAAA,IAAI,KAAK,EAAE;YACT,OAAO,IAAIa,SAAmB,CAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/G,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,IAAIA,SAAmB,CAAI,IAAI,EAAE,IAAI,CAAC,CAAC;AAC/C,SAAA;KACF;AAED,IAAA,mBAAmB,CAAC,KAAQ,EAAA;QAC1B,MAAM,GAAG,GAAe,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACzD,MAAM,UAAU,GAAc,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChE,MAAM,IAAI,GAAe,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC1D,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;KACxC;AAED,IAAA,mBAAmB,CAAC,IAAU,EAAA;AAC5B,QAAA,MAAM,GAAG,GAAe,IAAI,CAAC,OAAO,EAAE,CAAC;AACvC,QAAA,MAAM,UAAU,GAAc,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC9C,QAAA,MAAM,IAAI,GAAe,IAAI,CAAC,WAAW,EAAE,CAAC;AAE5C,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;KAC5D;wGAxDU,uCAAuC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;4GAAvC,uCAAuC,EAAA,CAAA,CAAA;;4FAAvC,uCAAuC,EAAA,UAAA,EAAA,CAAA;kBADnD,UAAU;;;MEzoBE,4BAA4B,CAAA;wGAA5B,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAA5B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,4BAA4B,EAHxB,YAAA,EAAA,CAAA,yBAAyB,EAAE,+BAA+B,aAxBvE,YAAY;YACZ,WAAW;YACX,cAAc;YACd,gBAAgB;YAChB,kBAAkB;YAClB,eAAe;YACf,eAAe;YACf,mBAAmB;YACnB,mBAAmB;YACnB,aAAa;YACb,mBAAmB;YACnB,iBAAiB;YACjB,kBAAkB;YAClB,cAAc;YACd,aAAa;AACb,YAAA,gBAAgB,gCAUR,0BAA0B,CAAA,EAAA,CAAA,CAAA;AAEzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,4BAA4B,YA3BrC,YAAY;YACZ,WAAW;YACX,cAAc;YACd,gBAAgB;YAChB,kBAAkB;YAClB,eAAe;YACf,eAAe;YACf,mBAAmB;YACnB,mBAAmB;YACnB,aAAa;YACb,mBAAmB;YACnB,iBAAiB;YACjB,kBAAkB;YAClB,cAAc;YACd,aAAa;YACb,gBAAgB;YAChB,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,EAAE;AAC1G,iBAAA;AACF,aAAA,CAAC,EAGM,0BAA0B,CAAA,EAAA,CAAA,CAAA;;4FAEzB,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBA7BxC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBACX,cAAc;wBACd,gBAAgB;wBAChB,kBAAkB;wBAClB,eAAe;wBACf,eAAe;wBACf,mBAAmB;wBACnB,mBAAmB;wBACnB,aAAa;wBACb,mBAAmB;wBACnB,iBAAiB;wBACjB,kBAAkB;wBAClB,cAAc;wBACd,aAAa;wBACb,gBAAgB;wBAChB,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,EAAE;AAC1G,6BAAA;yBACF,CAAC;AACH,qBAAA;AACD,oBAAA,YAAY,EAAE,CAAC,yBAAyB,EAAE,+BAA+B,CAAC;oBAC1E,OAAO,EAAE,CAAC,0BAA0B,CAAC;AACtC,iBAAA,CAAA;;;SC9Be,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,CAAC;KAC1B,CAAC;AACJ,CAAC;SAEe,gBAAgB,CAAgD,WAAc,EAAE,mBAAkD,EAAE,EAAA;IAClJ,OAAO,6BAA6B,CAAmC,WAAW,EAAE,sBAAsB,EAAE,gBAAgB,CAAC,CAAC;AAChI,CAAC;SAEe,aAAa,CAAgD,WAAc,EAAE,gBAA+C,EAAE,EAAA;IAC5I,OAAO,6BAA6B,CAAmC,WAAW,EAAE,kBAAkB,EAAE,aAAa,CAAC,CAAC;AACzH,CAAC;SAEe,aAAa,CAA8B,WAAc,EAAE,gBAA4C,EAAE,EAAA;IACvH,OAAO,6BAA6B,CAAgC,WAAW,EAAE,kBAAkB,EAAE,aAAa,CAAC,CAAC;AACtH,CAAC;SAEe,cAAc,CAA8B,WAAc,EAAE,iBAAuC,EAAE,EAAA;IACnH,OAAO,6BAA6B,CAA0B,WAAW,EAAE,mBAAmB,EAAE,cAAc,CAAC,CAAC;AAClH,CAAC;SAEe,iBAAiB,CAA8B,WAAc,EAAE,oBAA6C,EAAE,EAAA;IAC5H,OAAO,6BAA6B,CAA6B,WAAW,EAAE,sBAAsB,EAAE,iBAAiB,CAAC,CAAC;AAC3H,CAAC;AAEe,SAAA,WAAW,CAA8B,WAAc,EAAE,WAA8B,EAAA;IACrG,OAAO,6BAA6B,CAAuB,WAAW,EAAE,gBAAgB,EAAE,WAAW,CAAC,CAAC;AACzG,CAAC;AAEe,SAAA,YAAY,CAA8B,WAAc,EAAE,YAAuC,EAAA;IAC/G,OAAO,6BAA6B,CAA+B,WAAW,EAAE,iBAAiB,EAAE,YAAY,CAAC,CAAC;AACnH,CAAC;SAEe,cAAc,CAA8B,WAAc,EAAE,iBAA8C,EAAE,EAAA;IAC1H,OAAO,6BAA6B,CAAiC,WAAW,EAAE,mBAAmB,EAAE,cAAc,CAAC,CAAC;AACzH,CAAC;AAYK,SAAU,sCAAsC,CAAC,KAA+D,EAAA;AACpH,IAAA,IAAK,KAA8C,CAAC,KAAK,IAAI,IAAI,EAAE;AACjE,QAAA,OAAO,IAAI,CAAC;AACb,KAAA;AAAM,SAAA;AACL,QAAA,OAAO,KAAK,CAAC;AACd,KAAA;AACH,CAAC;SAEe,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,QAAQ;AACT,SAAA;QACD,UAAU,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,KAAI;AAC3C,YAAA,MAAM,WAAW,GAAyC,sCAAsC,CAAC,WAAW,CAAC;AAC3G,kBAAE,WAAW;AACb,kBAAE;AACE,oBAAA,KAAK,EAAE,WAAW;iBACnB,CAAC;YAEN,MAAM,EAAE,KAAK,EAAE,IAAI,GAAG,WAAW,EAAE,GAAG,WAAW,CAAC;AAClD,YAAA,MAAM,SAAS,GAAG,CAAY,SAAA,EAAA,IAAI,EAAE,CAAC;YAErC,OAAO;AACL,gBAAA,GAAG,KAAK;gBACR,SAAS;aACV,CAAC;AACJ,SAAC,CAAC;KACH,CAAC;AACJ;;MC3Fa,kCAAkC,GAAqD,MAClG,EAAE,CAAC;AACD,IAAA,oBAAoB,EAAE,IAAI;AAC1B,IAAA,iBAAiB,EAAE,IAAI;AACxB,CAAA,EAAE;AAEL;;AAEG;AACa,SAAA,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,IAAI;AACf,KAAA,CAAC,CAAC;AACL,CAAC;AAEe,SAAA,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,CAAC;IAEvY,MAAM,WAAW,GAAG,2EAA2E,CAAC;IAChG,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,gBAAgB;SACjB,CAAC;AACH,KAAA,CAAC,CAAC;AAEH,IAAA,OAAO,WAAW,CAAC;AACrB,CAAC;AAUe,SAAA,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,CAAC;IACzH,MAAM,QAAQ,GAAG,aAAa,IAAI,KAAK,EAAE,QAAQ,IAAI,KAAK,CAAC;AAE3D,IAAA,MAAM,aAAa,GAAG,KAAK,EAAE,GAAG,IAAI,OAAO,CAAC;AAC5C,IAAA,MAAM,WAAW,GAAG,GAAG,EAAE,GAAG,IAAI,KAAK,CAAC;IAEtC,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,aAAa;AACnB,KAAA,CAAC,CAAC;IAEH,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,WAAW;AACjB,KAAA,CAAC,CAAC;IAEH,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,CAAC;KACtH,CAAC;AACJ,CAAC;AAUe,SAAA,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,CAAC;IAE7I,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,IAAI;SACnB,CAAC;KACH;AAED,IAAA,MAAM,QAAQ,GAAG,UAAU,EAAE,GAAG,IAAI,OAAO,CAAC;AAC5C,IAAA,MAAM,MAAM,GAAG,QAAQ,EAAE,GAAG,IAAI,KAAK,CAAC;AAEtC,IAAA,MAAM,KAAK,GAAiC;AAC1C,QAAA,KAAK,EAAE,YAAY;QACnB,GAAG,wBAAwB,CAAC,UAAU,CAAC;AACvC,QAAA,GAAG,EAAE,QAAQ;KACd,CAAC;AAEF,IAAA,MAAM,GAAG,GAAiC;AACxC,QAAA,KAAK,EAAE,UAAU;QACjB,GAAG,wBAAwB,CAAC,QAAQ,CAAC;AACrC,QAAA,GAAG,EAAE,MAAM;KACZ,CAAC;AAEF,IAAA,MAAM,MAAM,GAAG;QACb,QAAQ;QACR,QAAQ;QACR,YAAY;QACZ,OAAO;QACP,KAAK;QACL,GAAG;KACJ,CAAC;AAEF,IAAA,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC;AAKe,SAAA,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,CAAC;IAE/K,MAAM,WAAW,GAAG,8EAA8E,CAAC;IACnG,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,cAAc;SACf,CAAC;AACH,KAAA,CAAC,CAAC;AAEH,IAAA,OAAO,WAAW,CAAC;AACrB;;ACjMa,MAAA,4CAA4C,GAAkC;AACzF,IAAA;AACE,QAAA,KAAK,EAAE,QAAQ;AACf,QAAA,UAAU,EAAE,QAAQ;AACrB,KAAA;AACD,IAAA;AACE,QAAA,KAAK,EAAE,QAAQ;AACf,QAAA,UAAU,EAAE,QAAQ;AACrB,KAAA;AACD,IAAA;AACE,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,UAAU,EAAE,SAAS;AACtB,KAAA;AACD,IAAA;AACE,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,UAAU,EAAE,SAAS;AACtB,KAAA;AACD,IAAA;AACE,QAAA,KAAK,EAAE,QAAQ;AACf,QAAA,UAAU,EAAE,QAAQ;AACrB,KAAA;AACD,IAAA;AACE,QAAA,KAAK,EAAE,QAAQ;AACf,QAAA,UAAU,EAAE,QAAQ;AACrB,KAAA;AACD,IAAA;AACE,QAAA,KAAK,EAAE,UAAU;AACjB,QAAA,UAAU,EAAE,SAAS;AACtB,KAAA;;;SC5Ba,QAAQ,GAAA;IACtB,OAAO,CAAC,OAAwB,KAA6B;AAC3D,QAAA,MAAM,KAAK,GAAwB,OAAO,CAAC,KAAK,CAAC;QAEjD,IAAI,CAAC,KAAK,EAAE;YACV,OAAO;AACL,gBAAA,QAAQ,EAAE,KAAK;aAChB,CAAC;AACH,SAAA;AAED,QAAA,OAAO,EAAE,CAAC;AACZ,KAAC,CAAC;AACJ;;SCXgB,QAAQ,GAAA;AACtB,IAAA,OAAO,UAAU,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;AAC3D;;ACFO,MAAM,qCAAqC,GAAG,sBAAsB;AA0B3E;;;;;;;AAOG;AACa,SAAA,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,CAAC;IAErI,MAAM,YAAY,GAAoC,iBAAiB,IAAI;QACzE,WAAW,EAAE,wBAAwB,CAAC,IAAI;QAC1C,UAAU;KACX,CAAC;IAEF,OAAO,CAAC,OAAwB,KAAI;AAClC,QAAA,MAAM,MAAM,GAAiB,OAAO,CAAC,KAAK,CAAC;QAC3C,MAAM,MAAM,GAAQ,cAAc,CAAC,MAAW,EAAE,YAAY,CAAC,CAAC;QAC9D,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEpD,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAAM,aAAA;YACL,OAAO;AACL,gBAAA,CAAC,qCAAqC,GAAG,EAAE,OAAO,EAAE;aACrD,CAAC;AACH,SAAA;AACH,KAAC,CAAC;AACJ;;ACvDA;;;;;;AAMG;AACG,SAAU,SAAS,CAAC,GAAc,GAAA,MAAM,CAAC,gBAAgB,EAAE,GAAA,GAAc,MAAM,CAAC,gBAAgB,EAAA;IACpG,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAElC,OAAO,CAAC,OAAwB,KAA6B;AAC3D,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;AAChC,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;QAEhC,IAAI,MAAM,GAA4B,IAAI,CAAC;QAE3C,IAAI,QAAQ,IAAI,QAAQ,EAAE;AACxB,YAAA,MAAM,GAAG;AACP,gBAAA,GAAG,QAAQ;AACX,gBAAA,GAAG,QAAQ;aACZ,CAAC;AACH,SAAA;AAED,QAAA,OAAO,MAAM,CAAC;AAChB,KAAC,CAAC;AACJ,CAAC;AAEM,MAAM,8BAA8B,GAAG,gBAAgB;AAS9D;;;;;AAKG;AACG,SAAU,aAAa,CAAC,OAAe,EAAA;IAC3C,IAAI,OAAO,KAAK,CAAC,EAAE;AACjB,QAAA,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;AACxD,KAAA;IAED,OAAO,CAAC,OAAwB,KAA6B;AAC3D,QAAA,MAAM,KAAK,GAAuB,OAAO,CAAC,KAAK,CAAC;QAEhD,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE;YACzD,MAAM,OAAO,GAAG,sBAAsB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YACvD,OAAO;gBACL,CAAC,8BAA8B,GAAG;oBAChC,KAAK;oBACL,OAAO;oBACP,OAAO;oBACP,OAAO,EAAE,CAA+B,4BAAA,EAAA,OAAO,CAAsC,mCAAA,EAAA,OAAO,CAAC,YAAY,CAAQ,KAAA,EAAA,OAAO,CAAC,WAAW,CAAG,CAAA,CAAA;AACxI,iBAAA;aACF,CAAC;AACH,SAAA;AAED,QAAA,OAAO,EAAE,CAAC;AACZ,KAAC,CAAC;AACJ;;AChEO,MAAM,uCAAuC,GAAG,wBAAwB;AACxE,MAAM,6CAA6C,GAAG,6BAA6B;AAuB1F;;;;;;;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,CAAC;IAEnG,MAAM,MAAM,GAAG,gBAAgB,CAAI;QACjC,QAAQ;AACT,KAAA,CAAC,CAAC;AAEH,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;AAClB,QAAA,IAAI,WAAW,EAAE;AACf,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAAM,aAAA;YACL,OAAO;AACL,gBAAA,CAAC,uCAAuC,GAAG,EAAE,OAAO,EAAE;aACvD,CAAC;AACH,SAAA;KACF,CAAC,EACF,UAAU,CAAC,MACT,EAAE,CAAC;AACD,QAAA,CAAC,6CAA6C,GAAG,EAAE,OAAO,EAAE,mBAAmB,EAAE;AAClF,KAAA,CAAC,CACH,EACD,KAAK,EAAE,CACR,CAAC;AACN;;AC1DA;;;;;AAKG;AACG,SAAU,iBAAiB,CAAC,cAAuB,EAAA;IACvD,OAAO,CAAC,OAAwB,KAA6B;AAC3D,QAAA,MAAM,KAAK,GAAuB,OAAO,CAAC,KAAK,CAAC;QAEhD,IAAI,KAAK,IAAI,IAAI,IAAI,CAACC,mBAAyB,CAAC,KAAK,EAAE,cAAc,CAAC,EAAE;YACtE,OAAO;AACL,gBAAA,CAAC,4BAA4B,CAAC,IAAI,GAAG,IAAI;aAC1C,CAAC;AACH,SAAA;AAED,QAAA,OAAO,EAAE,CAAC;AACZ,KAAC,CAAC;AACJ,CAAC;AAED;;;;;AAKG;SACa,gBAAgB,GAAA;IAC9B,OAAO,CAAC,OAAwB,KAA6B;AAC3D,QAAA,MAAM,KAAK,GAAgC,OAAO,CAAC,KAAK,CAAC;QAEzD,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,YAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;YAElC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC,EAAE;gBACjE,OAAO;AACL,oBAAA,CAAC,sCAAsC,CAAC,IAAI,GAAG,IAAI;iBACpD,CAAC;AACH,aAAA;AACF,SAAA;AAED,QAAA,OAAO,EAAE,CAAC;AACZ,KAAC,CAAC;AACJ,CAAC;SAEe,mCAAmC,GAAA;IACjD,OAAO,CAAC,OAAwB,KAA6B;AAC3D,QAAA,MAAM,KAAK,GAAuB,OAAO,CAAC,KAAK,CAAC;QAEhD,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,YAAA,IAAIA,mBAAyB,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE;AAC1C,gBAAA,MAAM,IAAI,GAAG,4BAA4B,CAAC,KAAK,CAAC,CAAC;gBAEjD,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;oBAClE,OAAO;AACL,wBAAA,CAAC,sCAAsC,CAAC,IAAI,GAAG,IAAI;qBACpD,CAAC;AACH,iBAAA;AACF,aAAA;AAAM,iBAAA;gBACL,OAAO;AACL,oBAAA,CAAC,4BAA4B,CAAC,IAAI,GAAG,IAAI;iBAC1C,CAAC;AACH,aAAA;AACF,SAAA;AAED,QAAA,OAAO,EAAE,CAAC;AACZ,KAAC,CAAC;AACJ;;ACnDM,SAAU,0BAA0B,CAAC,MAAkF,EAAA;IAC3H,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;AACpD,IAAA,IAAI,OAAwC,CAAC;AAE7C,IAAA,IAAI,YAAY,EAAE;QAChB,OAAO,GAAG,YAAY,CAAC;AACxB,KAAA;AAED,IAAA,IAAI,SAAS,EAAE;QACb,MAAM,eAAe,GAAsB,gBAAgB,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAAC;QAChG,OAAO,GAAG,YAAY,CAAC,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC,CAAC;AACpD,KAAA;AAED,IAAA,OAAO,OAAO,CAAC;AACjB,CAAC;AAEK,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,CAAC;AACnG,IAAA,MAAM,OAAO,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;IAEnD,MAAM,UAAU,GAAkB,EAAE,CAAC;IAErC,IAAI,IAAI,IAAI,WAAW,EAAE;QACvB,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;AACtC,KAAA;AAED,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,IAAI;SACL,CAAC;AACF,QAAA,GAAG,wBAAwB,CAAC;YAC1B,UAAU;SACX,CAAC;QACF,OAAO;AACR,KAAA,CAAC,CAAC;AACL,CAAC;AA6BK,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,CAAC;AAC1O,IAAA,MAAM,OAAO,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;IAEnD,MAAM,UAAU,GAAkB,EAAE,CAAC;AACrC,IAAA,IAAI,qBAAyC,CAAC;AAE9C,IAAA,IAAI,IAAI,EAAE;QACR,qBAAqB,GAAG,CAAC,CAAC;AAE1B,QAAA,IAAI,WAAW,EAAE;YACf,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;AACtC,SAAA;AACF,KAAA;AAED,IAAA,MAAM,YAAY,GAAuB,iBAAiB,KAAK,KAAK,GAAG,SAAS,GAAG,iBAAiB,IAAI,qBAAqB,IAAI,SAAS,CAAC;AAE3I,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,UAAU,EAAE,eAAe,IAAI,IAAI;AACnC,YAAA,aAAa,EAAE,OAAO,CAAC,YAAY,CAAC;YACpC,YAAY;YACZ,WAAW;SACZ,CAAC;AACF,QAAA,GAAG,wBAAwB,CAAC;YAC1B,UAAU;SACX,CAAC;QACF,OAAO;AACR,KAAA,CAAC,CAAC;AACL,CAAC;AAIK,SAAU,iBAAiB,CAAC,MAA+B,EAAA;IAC/D,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;;MC1Ha,8BAA8B,CAAA;wGAA9B,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAA9B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,8BAA8B,EAJ/B,OAAA,EAAA,CAAA,oBAAoB,EAAE,qBAAqB,aAE3C,0BAA0B,CAAA,EAAA,CAAA,CAAA;AAEzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,8BAA8B,EAJ/B,OAAA,EAAA,CAAA,oBAAoB,EAAE,qBAAqB,EAE3C,0BAA0B,CAAA,EAAA,CAAA,CAAA;;4FAEzB,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAL1C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,CAAC,oBAAoB,EAAE,qBAAqB,CAAC;AACtD,oBAAA,YAAY,EAAE,EAAE;oBAChB,OAAO,EAAE,CAAC,0BAA0B,CAAC;AACtC,iBAAA,CAAA;;;ACSY,MAAA,2BAA2B,GAAG,CAAC,IAAI,EAAE;AAK5C,MAAO,sBAAuB,SAAQT,WAA8D,CAAA;AAC/F,IAAA,SAAS,GAAG,IAAI,kBAAkB,EAAE,CAAC;AACrC,IAAA,UAAU,GAAG,IAAI,kBAAkB,EAAE,CAAC;AACtC,IAAA,kBAAkB,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAC9C,IAAA,cAAc,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAE1C,IAAA,SAAS,GAAG,IAAI,WAAW,CAAS,EAAE,CAAC,CAAC;AACxC,IAAA,aAAa,GAAG,IAAI,WAAW,CAAS,EAAE,EAAE;AACnD,QAAA,UAAU,EAAE,CAAC,gBAAgB,EAAE,CAAC;AACjC,KAAA,CAAC,CAAC;IAEM,cAAc,GAAG,IAAI,SAAS,CAAC;QACtC,KAAK,EAAE,IAAI,CAAC,SAAS;QACrB,SAAS,EAAE,IAAI,CAAC,aAAa;AAC9B,KAAA,CAAC,CAAC;AAEH,IAAA,IAAI,kBAAkB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,kBAAkB,IAAI,2BAA2B,CAAC;KACrE;AAED,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,EAAE,CAAC;KACvC;AAED,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC;KAC3C;IAED,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,CAAC;AACzB,YAAA,IAAI,SAAwB,CAAC;AAE7B,YAAA,IAAI,UAAU,EAAE;AACd,gBAAA,MAAM,IAAI,GAAG,4BAA4B,CAAC,UAAU,CAAC,CAAC;AACtD,gBAAA,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;AACpB,gBAAA,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AAC5B,aAAA;;AAGD,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,CAAC;gBACrC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;AAC9C,aAAA;AACH,SAAC,CAAC,CAAC;AAEH,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,CAAC;aACxM,IAAI,CACH,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,KAAI;AACzB,YAAA,IAAI,KAAK,EAAE;gBACT,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,oBAAA,OAAO,+CAA+C,CAAC;AACrD,wBAAA,MAAM,EAAE,KAAwB;wBAChC,SAAS;AACsB,qBAAA,CAAC,CAAC;AACpC,iBAAA;AAAM,qBAAA;AACL,oBAAA,OAAO,KAAK,CAAC;AACd,iBAAA;AACF,aAAA;AAAM,iBAAA;AACL,gBAAA,OAAO,SAAS,CAAC;AAClB,aAAA;AACH,SAAC,CAAC,EACF,oBAAoB,EAAE,CACvB;AACA,aAAA,SAAS,CAAC,CAAC,CAAC,KAAI;AACf,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC/B,SAAC,CAAC,CAAC;AAEL;;;AAGG;AACH,QAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;YACtF,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,CAAC;AACxE,aAAA;AACH,SAAC,CAAC,CAAC;;AAGH,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,CAAC;YAC1E,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3F,SAAC,CAAC,CAAC;KACJ;IAEQ,WAAW,GAAA;QAClB,KAAK,CAAC,WAAW,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;KAC3B;wGAzFU,sBAAsB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,2ECvBnC,ynBAOA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,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,0FAAA,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,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,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,EAAAP,IAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,MAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDgBa,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,SAAS;;;;MEcG,6BAA6B,CAAA;wGAA7B,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;yGAA7B,6BAA6B,EAAA,YAAA,EAAA,CAHzB,sBAAsB,CAAA,EAAA,OAAA,EAAA,CAfnC,YAAY;YACZ,cAAc;YACd,kBAAkB;YAClB,WAAW;YACX,mBAAmB;YACnB,qBAAqB;YACrB,cAAc;YACd,aAAa;YACb,gBAAgB;AAChB,YAAA,wBAAwB,qBAIxB,2BAA2B,CAAA,EAAA,CAAA,CAAA;AAKlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,6BAA6B,YAlBtC,YAAY;YACZ,cAAc;YACd,kBAAkB;YAClB,WAAW;YACX,mBAAmB;YACnB,qBAAqB;YACrB,cAAc;YACd,aAAa;YACb,gBAAgB;YAChB,wBAAwB;YACxB,YAAY,CAAC,QAAQ,CAAC;AACpB,gBAAA,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,sBAAsB,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC;aAC3F,CAAC;YACF,2BAA2B,CAAA,EAAA,CAAA,CAAA;;4FAKlB,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBApBzC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,cAAc;wBACd,kBAAkB;wBAClB,WAAW;wBACX,mBAAmB;wBACnB,qBAAqB;wBACrB,cAAc;wBACd,aAAa;wBACb,gBAAgB;wBAChB,wBAAwB;wBACxB,YAAY,CAAC,QAAQ,CAAC;AACpB,4BAAA,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,sBAAsB,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC;yBAC3F,CAAC;wBACF,2BAA2B;AAC5B,qBAAA;oBACD,YAAY,EAAE,CAAC,sBAAsB,CAAC;AACtC,oBAAA,OAAO,EAAE,EAAE;AACZ,iBAAA,CAAA;;;ACbK,SAAU,wBAAwB,CAAC,MAAkF,EAAA;IACzH,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;AACpD,IAAA,IAAI,OAAwC,CAAC;AAE7C,IAAA,IAAI,YAAY,EAAE;QAChB,OAAO,GAAG,YAAY,CAAC;AACxB,KAAA;AAED,IAAA,IAAI,SAAS,EAAE;QACb,MAAM,eAAe,GAAsB,gBAAgB,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAAC;QAChG,OAAO,GAAG,YAAY,CAAC,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC,CAAC;AACpD,KAAA;AAED,IAAA,OAAO,OAAO,CAAC;AACjB,CAAC;AAEK,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,CAAC;AAC9G,IAAA,MAAM,OAAO,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;AAEjD,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,OAAO;SACR,CAAC;QACF,OAAO;AACR,KAAA,CAAC,CAAC;AACL,CAAC;AAMK,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,CAAC;AACnF,IAAA,MAAM,OAAO,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;AAEjD,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,OAAO;SACR,CAAC;QACF,OAAO;AACR,KAAA,CAAC,CAAC;AACL;;AC/DgB,SAAA,UAAU,CAAC,MAAA,GAAiD,EAAE,EAAA;AAC5E,IAAA,MAAM,EAAE,GAAG,GAAG,OAAO,EAAE,KAAK,GAAG,cAAc,EAAE,kBAAkB,EAAE,aAAa,EAAE,cAAc,EAAE,mBAAmB,EAAE,GAAG,MAAM,CAAC;AACjI,IAAA,MAAM,cAAc,GAAG,mBAAmB,IAAI,KAAK,CAAC;IAEpD,MAAM,WAAW,GAAG,WAAW,CAAC;QAC9B,GAAG;AACH,QAAA,IAAI,EAAE,UAAU;QAChB,GAAG,4BAA4B,CAAC,MAAM,EAAE;YACtC,KAAK;YACL,cAAc;YACd,kBAAkB;YAClB,aAAa;SACd,CAAC;AACF,QAAA,GAAG,wBAAwB,CAAC;AAC1B,YAAA,UAAU,EAAE,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;SAChD,CAAC;AACH,KAAA,CAAC,CAAC;AAEH,IAAA,OAAO,WAAW,CAAC;AACrB,CAAC;AAOD;;;;AAIG;AACa,SAAA,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,CAAC;AACR,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,KAAK;aACT,CAAC;AACF,YAAA,IAAI,EAAE,CAAC;AACR,SAAA;AACF,KAAA,EACD,EAAE,QAAQ,EAAE,IAAI,EAAE,CACnB,CAAC;AACJ,CAAC;SAMe,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,CAAC;KACpE,EACD;QACE,MAAM;QACN,IAAI;AACL,KAAA,CACF,CAAC;AACJ,CAAC;AAOe,SAAA,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,CAAC;AAEpK,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,CAAC;AACjF,KAAA,CAAC,CAAC;AACL;;ACzFO,MAAM,sBAAsB,GAAG,IAAI;AAEnC,MAAM,uBAAuB,GAAG,IAAI;AACpC,MAAM,wBAAwB,GAAG,IAAI;AAE5B,SAAA,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,CAAC;AAE9H,IAAA,OAAO,SAAS,CAAC;AACf,QAAA,GAAG,MAAM;QACT,GAAG;QACH,KAAK;QACL,WAAW;QACX,QAAQ;QACR,SAAS;QACT,SAAS;QACT,UAAU;AACX,KAAA,CAAC,CAAC;AACL,CAAC;AAMe,SAAA,UAAU,CAAC,MAAA,GAA2B,EAAE,EAAA;AACtD,IAAA,MAAM,EAAE,GAAG,GAAG,OAAO,EAAE,KAAK,GAAG,eAAe,EAAE,WAAW,GAAG,iBAAiB,EAAE,GAAG,MAAM,CAAC;IAC3F,MAAM,gBAAgB,GAAG,SAAS,CAAC;AACjC,QAAA,GAAG,MAAM;QACT,GAAG;QACH,KAAK;QACL,WAAW;AACX,QAAA,SAAS,EAAE,OAAO;AACnB,KAAA,CAAC,CAAC;IAEH,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,CAA4B,0BAAA,CAAA;AAC5C,SAAA;KACF,CAAC;AAEF,IAAA,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAIe,SAAA,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,CAAC;AAChJ,IAAA,OAAO,SAAS,CAAC;AACf,QAAA,GAAG,MAAM;QACT,GAAG;QACH,WAAW;QACX,KAAK;QACL,YAAY;QACZ,QAAQ;QACR,SAAS;AACV,KAAA,CAAC,CAAC;AACL,CAAC;AAMe,SAAA,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,CAAC;AACnR,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,WAAW;AAC9C,SAAA;AACF,KAAA,CAAC,CAAC;AACL,CAAC;AAIe,SAAA,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,CAAC;AAC5J,IAAA,OAAO,SAAS,CAAC;AACf,QAAA,GAAG,MAAM;QACT,GAAG;QACH,WAAW;QACX,KAAK;QACL,YAAY;QACZ,QAAQ;QACR,SAAS;AACV,KAAA,CAAC,CAAC;AACL,CAAC;AAIe,SAAA,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,CAAC;AAC1L,IAAA,OAAO,SAAS,CAAC;AACf,QAAA,GAAG,MAAM;QACT,GAAG;QACH,WAAW;QACX,KAAK;QACL,OAAO;QACP,YAAY;QACZ,QAAQ;QACR,SAAS;AACV,KAAA,CAAC,CAAC;AACL,CAAC;AAEM,MAAM,sCAAsC,GAAG,kBAAkB;AACjE,MAAM,0CAA0C,GAAG,8BAA8B;AAElF,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,KAAK;SACpB,CAAC;AACF,QAAA,GAAG,wBAAwB,CAAC;AAC1B,YAAA,QAAQ,EAAE;AACR,gBAAA,OAAO,EAAE,0CAA0C;AACpD,aAAA;SACF,CAAC;KACH,CAAC;AAEF,IAAA,OAAO,KAAK,CAAC;AACf;;ACnGgB,SAAA,gBAAgB,CAAC,MAAA,GAAiC,EAAE,EAAA;AAClE,IAAA,MAAM,EAAE,IAAI,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC;AAC5B,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,CAAE,CAAA,EAAE,SAAS,GAAG,uBAAuB,EAAE,QAAQ,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;AACxM,IAAA,OAAO,SAAS,CAAC;AACf,QAAA,GAAG,MAAM;QACT,GAAG;QACH,WAAW;QACX,KAAK;QACL,YAAY;QACZ,QAAQ;QACR,SAAS;AACV,KAAA,CAAC,CAAC;AACL,CAAC;AAEe,SAAA,mBAAmB,CAAC,MAAA,GAAoC,EAAE,EAAA;AACxE,IAAA,MAAM,EAAE,cAAc,GAAG,IAAI,EAAE,YAAY,GAAG,IAAI,EAAE,cAAc,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;AAErF,IAAA,MAAM,gBAAgB,GAAG;AACvB,QAAA;AACE,YAAA,KAAK,EAAE,SAAS,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;AACpE,SAAA;AACD,QAAA;AACE,YAAA,KAAK,EAAE,UAAU,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;AACtE,SAAA;AACD,QAAA;AACE,YAAA,KAAK,EAAE,YAAY,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;AAC1E,SAAA;KACF,CAAC;AAEF,IAAA,IAAI,cAAc,EAAE;QAClB,gBAAgB,CAAC,IAAI,CAAC;AACpB,YAAA,KAAK,EAAE,YAAY,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;AAC1E,SAAA,CAAC,CAAC;AACJ,KAAA;AAED,IAAA,IAAI,KAA0B,CAAC;AAE/B,IAAA,IAAI,YAAY,EAAE;AAChB,QAAA,KAAK,GAAG,CAAC,gBAAgB,CAAC,EAAE,QAAQ,EAAE,cAAc,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,CAAC;AAC9I,KAAA;AAAM,SAAA;QACL,KAAK,GAAG,CAAC,gBAAgB,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACzF,KAAA;AAED,IAAA,OAAO,CAAC,GAAG,KAAK,EAAE,iBAAiB,CAAC,gBAAgB,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACtF,CAAC;AAIe,SAAA,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,CAAC;AAE/E,IAAA,OAAO,cAAc,CACnB;AACE,QAAA,GAAG,MAAM;QACT,GAAG;AACH,QAAA,UAAU,EAAE,mBAAmB,CAAC,MAAM,CAAC;QACvC,QAAQ;KACT,EACD;AACE,QAAA,GAAG,MAAM;QACT,MAAM;QACN,IAAI;AACL,KAAA,CACF,CAAC;AACJ,CAAC;AAMe,SAAA,gBAAgB,CAAC,MAAA,GAA0C,EAAE,EAAA;AAC3E,IAAA,MAAM,EAAE,GAAG,GAAG,WAAW,EAAE,QAAQ,GAAG,KAAK,EAAE,YAAY,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC;AACzE,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,CAAC;AAC9C,KAAA,CAAC,CAAC;AACL;;MCnHa,4BAA4B,CAAA;wGAA5B,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;yGAA5B,4BAA4B,EAAA,OAAA,EAAA,CAJ7B,oBAAoB,CAAA,EAAA,OAAA,EAAA,CAEpB,0BAA0B,CAAA,EAAA,CAAA,CAAA;yGAEzB,4BAA4B,EAAA,OAAA,EAAA,CAJ7B,oBAAoB,EAEpB,0BAA0B,CAAA,EAAA,CAAA,CAAA;;4FAEzB,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBALxC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,oBAAoB,CAAC;AAC/B,oBAAA,YAAY,EAAE,EAAE;oBAChB,OAAO,EAAE,CAAC,0BAA0B,CAAC;AACtC,iBAAA,CAAA;;;ACHK,SAAU,WAAW,CAAC,EAAE,GAAG,EAAE,QAAQ,GAAG,KAAK,EAAqB,EAAA;AACtE,IAAA,OAAO,WAAW,CAAC;QACjB,GAAG;QACH,KAAK,EAAE,EAAE,QAAQ,EAAE;AACpB,KAAA,CAAC,CAAC;AACL;;MCIa,wBAAwB,CAAA;wGAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,EAJzB,OAAA,EAAA,CAAA,YAAY,CAEZ,EAAA,OAAA,EAAA,CAAA,6BAA6B,EAAE,+BAA+B,EAAE,4BAA4B,EAAE,6BAA6B,EAAE,8BAA8B,EAAE,4BAA4B,CAAA,EAAA,CAAA,CAAA;AAExL,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,EAJzB,OAAA,EAAA,CAAA,YAAY,EAEZ,6BAA6B,EAAE,+BAA+B,EAAE,4BAA4B,EAAE,6BAA6B,EAAE,8BAA8B,EAAE,4BAA4B,CAAA,EAAA,CAAA,CAAA;;4FAExL,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBALpC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,YAAY,CAAC;AACvB,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,OAAO,EAAE,CAAC,6BAA6B,EAAE,+BAA+B,EAAE,4BAA4B,EAAE,6BAA6B,EAAE,8BAA8B,EAAE,4BAA4B,CAAC;AACrM,iBAAA,CAAA;;;MCCY,wBAAwB,CAAA;wGAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,EAJzB,OAAA,EAAA,CAAA,YAAY,CAEZ,EAAA,OAAA,EAAA,CAAA,qCAAqC,EAAE,iCAAiC,EAAE,4BAA4B,EAAE,kCAAkC,EAAE,wBAAwB,EAAE,0BAA0B,CAAA,EAAA,CAAA,CAAA;AAE/L,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,EAJzB,OAAA,EAAA,CAAA,YAAY,EAEZ,qCAAqC,EAAE,iCAAiC,EAAE,4BAA4B,EAAE,kCAAkC,EAAE,wBAAwB,EAAE,0BAA0B,CAAA,EAAA,CAAA,CAAA;;4FAE/L,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBALpC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,YAAY,CAAC;AACvB,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,OAAO,EAAE,CAAC,qCAAqC,EAAE,iCAAiC,EAAE,4BAA4B,EAAE,kCAAkC,EAAE,wBAAwB,EAAE,0BAA0B,CAAC;AAC5M,iBAAA,CAAA;;;ACUD;;AAEG;SACa,oBAAoB,GAAA;IAClC,OAAO;AACL,QAAA;AACE,YAAA,OAAO,EAAE,gBAAgB;AACzB,YAAA,QAAQ,EAAE,gBAAgB;AAC3B,SAAA;QACD,GAAG,qBAAqB,CAAC,gBAAgB,CAAC;KAC3C,CAAC;AACJ,CAAC;AAED;;AAEG;MACU,gBAAgB,CAAA;AACnB,IAAA,OAAO,aAAa,GAAiB,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AAE/G,IAAA,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAEzB,IAAA,OAAO,GAAG,IAAI,eAAe,CAA6B,SAAS,CAAC,CAAC;AACrE,IAAA,aAAa,GAAG,IAAI,eAAe,CAAoB,SAAS,CAAC,CAAC;AAClE,IAAA,SAAS,GAAG,IAAI,eAAe,CAAwB,SAAS,CAAC,CAAC;AAClE,IAAA,SAAS,GAAG,IAAI,eAAe,CAAqC,SAAS,CAAC,CAAC;AAE9E,IAAA,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3D,IAAA,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/D,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,CAAC;IAEF,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,MAAK;AACpC,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;AACxB,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;AAC9B,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;AAC1B,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;AAC5B,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,WAAW,CAAC,QAAsC,EAAA;AAChD,QAAA,IAAI,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;YACrC,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,KAAK;AACvC,iBAAA,CAAC,CAAC;AACJ,aAAA;AAED,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC/B,SAAA;KACF;AAED,IAAA,aAAa,CAAC,QAAqC,EAAA;AACjD,QAAA,IAAI,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AACrC,YAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;AAC7B,SAAA;KACF;AAED,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;KAC3B;IAED,IAAI,MAAM,CAAC,MAAkC,EAAA;AAC3C,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC3B;;IAGD,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,CAAC;KACH;AAED,IAAA,QAAQ,CAAC,KAAiB,EAAA;AACxB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAE/B,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;YACxB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACtC,SAAA;KACF;IAED,UAAU,GAAA;QACR,OAAO,4BAA4B,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC3D;AAED,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;KAC7B;IAED,WAAW,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;KACtC;AAED,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,CAAC;AACjH,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAElC,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;YACxB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AACjD,SAAA;KACF;IAED,SAAS,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AACxB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;AAClC,SAAA;KACF;IAED,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AACxB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;AACxC,SAAA;KACF;;;ACtIH;;AAEG;MAEmB,2BAA2B,CAAA;AACtC,IAAA,OAAO,GAAG,MAAM,EAAC,gBAAmB,EAAC,CAAC;AAE/C,IAAA,IACI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;KAClC;IAED,IAAI,QAAQ,CAAC,QAAiB,EAAA;QAC5B,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;KAC/C;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;KACxB;;IAGD,QAAQ,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;KAChC;AAED,IAAA,QAAQ,CAAC,KAAiB,EAAA;AACxB,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;KAC9B;IAED,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;KAC1B;IAED,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;KACnB;IAED,WAAW,CAAC,GAAwB,EAAE,QAAkB,EAAA;QACtD,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;KACzC;wGAnCmB,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAA3B,2BAA2B,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBADhD,SAAS;8BAKJ,QAAQ,EAAA,CAAA;sBADX,KAAK;;AAmCR;;AAEG;AAEG,MAAgB,+BAAmC,SAAQ,2BAA8B,CAAA;IAG7F,QAAQ,GAAA;QACN,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;KACnC;wGALmB,+BAA+B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAA/B,+BAA+B,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAA/B,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBADpD,SAAS;;AASV;;AAEG;AAEG,MAAgB,gCAAoC,SAAQ,2BAA8B,CAAA;AAMtF,IAAA,UAAU,GAAG,IAAI,kBAAkB,EAAE,CAAC;IAE9C,QAAQ,GAAA;QACN,IAAI,CAAC,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AAC5F,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;AAC/B,SAAC,CAAC,CAAC;KACJ;IAEQ,WAAW,GAAA;QAClB,KAAK,CAAC,WAAW,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;KAC3B;wGAjBmB,gCAAgC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAAhC,gCAAgC,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAhC,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBADrD,SAAS;;AAsBJ,MAAgB,sCAA6C,SAAQ,gCAAmC,CAAA;AAC3F,IAAA,OAAO,GAAG,IAAI,eAAe,CAAW,SAAS,CAAC,CAAC;AAE3D,IAAA,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;AAC7C,IAAA,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAEpE,IAAA,IACI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;KAC3B;IAED,IAAI,MAAM,CAAC,MAAgB,EAAA;AACzB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC3B;IAEQ,WAAW,GAAA;QAClB,KAAK,CAAC,WAAW,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;KACzB;wGAlBmB,sCAAsC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAAtC,sCAAsC,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAtC,sCAAsC,EAAA,UAAA,EAAA,CAAA;kBAD3D,SAAS;8BAQJ,MAAM,EAAA,CAAA;sBADT,KAAK;;;AChFF,SAAU,uBAAuB,CAAC,MAA4C,EAAA;AAClF,IAAA,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,QAAQ,EAAE,iBAAiB,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;IAE1E,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,KAAK;AAClB,aAAA;SACF,CAAC;KACH,CAAC;AACJ;;ACZA;;AAEG;AAcG,MAAO,sBAA0B,SAAQ,6BAA6B,CAAA;AACzD,IAAA,iBAAiB,GAAG,MAAM,EAAC,gBAAmB,EAAC,CAAC;AAEzD,IAAA,OAAO,GAAG,IAAI,eAAe,CAAyC,SAAS,CAAC,CAAC;IACjF,OAAO,GAAG,IAAI,eAAe,CAAe,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;AACxH,IAAA,SAAS,GAAG,IAAI,eAAe,CAAwB,SAAS,CAAC,CAAC;IAElE,MAAM,GAAG,IAAI,eAAe,CAAO,IAAI,IAAI,EAAE,CAAC,CAAC;AAC/C,IAAA,YAAY,GAAG,IAAI,OAAO,EAAQ,CAAC;AAEnC,IAAA,YAAY,GAAG,IAAI,kBAAkB,EAAE,CAAC;AACxC,IAAA,mBAAmB,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAE9C,IAAA,IAAI,GAAG,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC;IAElC,KAAK,GAAM,EAAO,CAAC;IACnB,OAAO,GAAsB,EAAE,CAAC;AAEvB,IAAA,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,oBAAoB,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAEzF,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,QAAQ;KACnC,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,CAAC;QAEjH,OAAO;YACL,0BAA0B,EAAE,IAAI,CAAC,0BAA0B;AAC3D,YAAA,WAAW,EAAE,KAAK;YAClB,cAAc,EAAE,IAAI,CAAC,cAAc;SACpC,CAAC;AACJ,KAAC,EACD;AACE,QAAA,0BAA0B,EAAE,CAAC;AAC7B,QAAA,WAAW,EAAE,KAAK;AAClB,QAAA,cAAc,EAAE,KAAK;AACtB,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,CAAC;AAE7B,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,cAAc;aAC3B,CAAC;AAEF,YAAA,OAAO,SAAS,CAAC;AACnB,SAAC,CAAC;AAEF,QAAA,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;AAE1B,QAAA,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,CAAC;AACH,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;AAClB,SAAA;KACF,CAAC,CACH,CACF,EACD,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;IAEF,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAEzC,MAAM,mBAAmB,GAAG,MAAK;AAC/B,YAAA,MAAM,UAAU,GAAG,4BAA4B,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAC7E,IAAI,MAAM,GAAG,KAAK,CAAC;AAEnB,YAAA,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,CAAC;gBACrE,MAAM,GAAG,IAAI,CAAC;AACf,aAAA;AAED,YAAA,OAAO,MAAM,CAAC;AAChB,SAAC,CAAC;QAEF,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,CAAC;AACxB,SAAC,CAAC,CAAC;;AAGH,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,CAAC;AAC7F,SAAA,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AACtB,YAAA,mBAAmB,EAAE,CAAC;AACxB,SAAC,CAAC,CAAC;KACJ;IAEQ,WAAW,GAAA;QAClB,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,YAAY,CAAC,MAAK;YAC/C,KAAK,CAAC,WAAW,EAAE,CAAC;AACpB,YAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AAC3C,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;AACxB,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;AACxB,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;AACvB,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;AAC7B,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;AAC1B,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;AAC5B,YAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC;AACrC,SAAC,CAAC,CAAC;KACJ;;AAGD,IAAA,IAAI,CAAC,UAAkC,EAAA;QACrC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;KACjD;IAED,QAAQ,GAAA;QACN,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAU,CAAC,CAAC;KACjC;AAED,IAAA,QAAQ,CAAC,KAAQ,EAAA;;AAEf,QAAA,IAAI,CAAC,KAAK,GAAG,eAAe,CAAC,KAAK,CAAM,CAAC;AAEzC,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE;AACnC,YAAA,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;AAClC,YAAA,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC;AAC7B,SAAA;;AAGD,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;;;QAI3B,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACvB,gBAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;AAC5B,aAAA;SACF,EAAE,GAAG,CAAC,CAAC;;QAGR,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;IAED,SAAS,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;AAC3B,YAAA,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;AAC3B,SAAA;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;KAC9B;AAED,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,4BAA4B,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC3D;AAED,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;KAC7B;IAED,WAAW,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;KACtC;AAED,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,CAAC;AACzG,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC3B;;IAGD,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;KAC1B;wGAzMU,sBAAsB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,EALtB,QAAA,EAAA,YAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,YAAA,EAAA,EAAA,SAAA,EAAA,qBAAqB,CAAC,sBAAsB,CAAC,EAL9C,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,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,EAAAC,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAN,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAMU,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAblC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,QAAQ,EAAE,QAAQ;AAClB,oBAAA,QAAQ,EAAE,CAAA;;;;AAIT,EAAA,CAAA;oBACD,SAAS,EAAE,qBAAqB,CAAwB,sBAAA,CAAA;AACxD,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,YAAY;AACpB,qBAAA;AACF,iBAAA,CAAA;;;ACdK,MAAO,0BAA2B,SAAQ,sCAAmG,CAAA;AAExI,IAAA,MAAM,GAAG,IAAI,YAAY,EAAU,CAAC;AAEpC,IAAA,OAAO,GAAoC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC;AAE3G,IAAA,aAAa,CAAC,KAAmC,EAAA;QAC/C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;KACtC;IAEQ,WAAW,GAAA;QAClB,KAAK,CAAC,WAAW,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;KACxB;wGAbU,0BAA0B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,EAL1B,QAAA,EAAA,sBAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,8BAAA,EAAA,EAAA,SAAA,EAAA,CAAC,oBAAoB,EAAE,CAAC,EAJzB,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;AAET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAiB,4BAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,sBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAOU,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAVtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,CAAA;;AAET,EAAA,CAAA;AACD,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,SAAS,EAAE,CAAC,oBAAoB,EAAE,CAAC;AACnC,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,8BAA8B;AACtC,qBAAA;AACF,iBAAA,CAAA;8BAGU,MAAM,EAAA,CAAA;sBADd,MAAM;;;ACXT;;AAEG;AAKG,MAAO,+BAA6C,SAAQ,gCAAmC,CAAA;AAC3F,IAAA,OAAO,GAAG,IAAI,eAAe,CAA6B,SAAS,CAAC,CAAC;AACpE,IAAA,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;AAE/C,IAAA,IACI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;KAC3B;IAED,IAAI,MAAM,CAAC,MAAkC,EAAA;AAC3C,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC3B;IAEQ,WAAW,GAAA;QAClB,KAAK,CAAC,WAAW,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;KACzB;wGAhBU,+BAA+B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAA/B,+BAA+B,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,CAAA,EAAA,EAAA,SAAA,EAF/B,oBAAoB,EAAE,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAEtB,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAJ3C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;oBAC7B,SAAS,EAAE,oBAAoB,EAAE;AAClC,iBAAA,CAAA;8BAMK,MAAM,EAAA,CAAA;sBADT,KAAK;uBAAC,iBAAiB,CAAA;;;MCGb,eAAe,CAAA;wGAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,EAXX,YAAA,EAAA,CAAA,sBAAsB,EAAE,+BAA+B,CAD5D,EAAA,OAAA,EAAA,CAAA,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,YAAY,EAAE,qBAAqB,CAAA,EAAA,OAAA,EAAA;;YAI3F,WAAW;YACX,mBAAmB;;YAEnB,sBAAsB;YACtB,+BAA+B;;;yGAItB,eAAe,EAAA,OAAA,EAAA,CAZhB,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,YAAY,EAAE,qBAAqB;;YAI3F,WAAW;YACX,mBAAmB,CAAA,EAAA,CAAA,CAAA;;4FAOV,eAAe,EAAA,UAAA,EAAA,CAAA;kBAb3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,YAAY,EAAE,qBAAqB,CAAC;AAC9F,oBAAA,YAAY,EAAE,CAAC,sBAAsB,EAAE,+BAA+B,CAAC;AACvE,oBAAA,OAAO,EAAE;;wBAEP,WAAW;wBACX,mBAAmB;;wBAEnB,sBAAsB;wBACtB,+BAA+B;;AAEhC,qBAAA;AACF,iBAAA,CAAA;;;MCRY,uBAAuB,CAAA;wGAAvB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;yGAAvB,uBAAuB,EAAA,YAAA,EAAA,CAHnB,0BAA0B,CAAA,EAAA,OAAA,EAAA,CAD/B,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,wBAAwB,CAAA,EAAA,OAAA,EAAA,CAEtE,0BAA0B,CAAA,EAAA,CAAA,CAAA;AAEzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,YAJxB,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,wBAAwB,CAAA,EAAA,CAAA,CAAA;;4FAIrE,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBALnC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,wBAAwB,CAAC;oBACjF,YAAY,EAAE,CAAC,0BAA0B,CAAC;oBAC1C,OAAO,EAAE,CAAC,0BAA0B,CAAC;AACtC,iBAAA,CAAA;;;ACKD;;;;;AAKG;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,IAAI;AACf,KAAA,CAAC,CAAC;AACL,CAAC;AAED;;;;AAIG;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,IAAI;AACf,KAAA,CAAC,CAAC;AACL,CAAC;AAOK,SAAU,gCAAgC,CAAC,MAAyC,EAAA;IACxF,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC/D,IAAA,MAAM,sBAAsB,GAAG,MAAM,CAAC,cAAc,EAAE,GAAG,IAAI,CAAA,MAAA,EAAS,qBAAqB,CAAC,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;IAC/H,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,CAAE,CAAA;AACnF,QAAA,GAAG,EAAE,sBAAsB;AAC5B,KAAA,CAAC,CAAC;AAEH,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,CAAC;AACjK,aAAA;AACF,SAAA;KACF,CAAC;AAEF,IAAA,MAAM,gBAAgB,GAAsB;QAC1C,UAAU;AACV,QAAA,UAAU,EAAE,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;KACvD,CAAC;AAEF,IAAA,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAyBD;;;;;AAKG;AACG,SAAU,2BAA2B,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAA6B,EAAA;AAC3G,IAAA,IAAI,aAAgC,CAAC;IACrC,IAAI,mBAAmB,GAAqC,QAA4C,CAAC;IACzG,MAAM,0BAA0B,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAEvE,IAAA,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;QAChC,IAAI,QAAQ,KAAK,OAAO,EAAE;AACxB,YAAA,mBAAmB,GAAG;AACpB,gBAAA,KAAK,EAAE,0BAA0B;aAClC,CAAC;AACH,SAAA;AAAM,aAAA;AACL,YAAA,mBAAmB,GAAG;AACpB,gBAAA,QAAQ,EAAE,0BAA0B;aACrC,CAAC;AACH,SAAA;AACF,KAAA;IAED,IAAI,mBAAmB,CAAC,KAAK,EAAE;AAC7B,QAAA,aAAa,GAAG,UAAU,CAAC,EAAE,GAAG,mBAAmB,CAAC,QAAQ,EAAE,GAAG,0BAA0B,EAAE,CAAC,CAAC;AAChG,KAAA;AAAM,SAAA;AACL,QAAA,aAAa,GAAG,SAAS,CAAC,EAAE,GAAG,mBAAmB,CAAC,QAAQ,EAAE,GAAG,0BAA0B,EAAE,CAAC,CAAC;AAC/F,KAAA;AAED,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,CAAC;AAE1L,IAAA,OAAO,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AACxC;;AC5HM,SAAU,oBAAoB,CAAC,MAAgC,EAAA;AACnE,IAAA,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAEhC,KAAK,CAAC,eAAe,GAAG;AACtB,QAAA,UAAU,EAAE;AACV,YAAA;gBACE,UAAU,EAAE,8BAA8B,CAAC;AACzC,oBAAA,GAAG,MAAM;oBACT,OAAO,EAAE,MAAM,EAAE,0BAA0B;iBAC5C,CAAC;AACH,aAAA;AACF,SAAA;KACF,CAAC;AAEF,IAAA,OAAO,cAAc,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACnC;;SCfgB,4BAA4B,GAAA;AAC1C,IAAA,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;IAEzC,OAAO,CAAC,MAAc,KAAI;AACxB,QAAA,IAAI,aAAa,CAAC;AAElB,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YACvB,aAAa,GAAG,CAAC,qBAAqB,EAAE,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;AACjE,SAAA;AAAM,aAAA;AACL,YAAA,aAAa,GAAG,mBAAmB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAC5D,SAAA;QAED,OAAO,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3E,KAAC,CAAC;AACJ,CAAC;AAEY,MAAA,iCAAiC,GAAwD,CAAC,MAAyD,KAAI;AAClK,IAAA,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;IAEzC,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,CAAC;AAC7E,KAAC,CAAC,CAAC;AAEH,IAAA,MAAM,GAAG,GAAyE,EAAE,CAAC,aAAa,CAAC,CAAC;AACpG,IAAA,OAAO,GAAG,CAAC;AACb,EAAE;AAOF;;;;;AAKG;AACa,SAAA,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,iCAAiC;AACnD,KAAA,CAAC,CAAC;AACL;;AC3DA;;AAEG;MAOU,sBAAsB,CAAA;wGAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,EAJvB,QAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;AAET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;;4FAEU,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBANlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,QAAQ,EAAE,CAAA;;AAET,EAAA,CAAA;AACF,iBAAA,CAAA;;;MCDY,mBAAmB,CAAA;wGAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,EAHf,YAAA,EAAA,CAAA,sBAAsB,CAD3B,EAAA,OAAA,EAAA,CAAA,YAAY,aAEZ,sBAAsB,CAAA,EAAA,CAAA,CAAA;AAErB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,YAJpB,YAAY,CAAA,EAAA,CAAA,CAAA;;4FAIX,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,YAAY,EAAE,CAAC,sBAAsB,CAAC;oBACtC,OAAO,EAAE,CAAC,sBAAsB,CAAC;AAClC,iBAAA,CAAA;;;MCCY,sBAAsB,CAAA;wGAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,YAFvB,aAAa,EAAE,eAAe,EAAE,wBAAwB,EAAE,uBAAuB,CAAA,EAAA,CAAA,CAAA;AAEhF,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,YAFvB,aAAa,EAAE,eAAe,EAAE,wBAAwB,EAAE,uBAAuB,CAAA,EAAA,CAAA,CAAA;;4FAEhF,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,aAAa,EAAE,eAAe,EAAE,wBAAwB,EAAE,uBAAuB,CAAC;AAC7F,iBAAA,CAAA;;;ACRD;;AAEG;;;;"}