@solidev/data 0.0.1-dev.1 → 0.0.1-dev.2

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 (77) hide show
  1. package/esm2020/lib/auth/auth-interceptor.service.mjs +13 -5
  2. package/esm2020/lib/auth/auth.service.mjs +1 -1
  3. package/esm2020/lib/data/data-backend.mjs +3 -3
  4. package/esm2020/lib/data/data-model.mjs +15 -15
  5. package/esm2020/lib/data/fields/numbers.mjs +11 -1
  6. package/esm2020/lib/dispedit/choice.pipe.mjs +5 -4
  7. package/esm2020/lib/dispedit/dispedit/dispedit.component.mjs +16 -8
  8. package/esm2020/lib/dispedit/factor.pipe.mjs +48 -0
  9. package/esm2020/lib/dispedit/factorc.pipe.mjs +48 -0
  10. package/esm2020/lib/dispedit/fkselect/fkselect.component.mjs +10 -8
  11. package/esm2020/lib/dispedit/m2mselect/m2mselect.component.mjs +11 -9
  12. package/esm2020/lib/dispedit/sdelete/sdelete.component.mjs +3 -3
  13. package/esm2020/lib/messages/message-zone/message-zone.component.mjs +3 -3
  14. package/esm2020/lib/messages/message.service.mjs +3 -3
  15. package/esm2020/lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component.mjs +3 -3
  16. package/esm2020/lib/modellist/model-list-fields/model-list-fields-selector/model-list-fields-selector.component.mjs +3 -3
  17. package/esm2020/lib/modellist/model-list-fields/model-list-fields.mjs +13 -13
  18. package/esm2020/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.component.mjs +15 -11
  19. package/esm2020/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.mjs +1 -4
  20. package/esm2020/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component.mjs +8 -9
  21. package/esm2020/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.mjs +2 -33
  22. package/esm2020/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.component.mjs +3 -3
  23. package/esm2020/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component.mjs +3 -3
  24. package/esm2020/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.component.mjs +3 -3
  25. package/esm2020/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/adapters/ban.mjs +24 -0
  26. package/esm2020/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.component.mjs +47 -5
  27. package/esm2020/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.mjs +8 -6
  28. package/esm2020/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.component.mjs +8 -6
  29. package/esm2020/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.mjs +2 -2
  30. package/esm2020/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.component.mjs +27 -15
  31. package/esm2020/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.mjs +12 -3
  32. package/esm2020/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.component.mjs +33 -5
  33. package/esm2020/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.mjs +9 -8
  34. package/esm2020/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.component.mjs +5 -5
  35. package/esm2020/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.component.mjs +3 -3
  36. package/esm2020/lib/modellist/model-list-filters/model-list-filter.mjs +119 -15
  37. package/esm2020/lib/modellist/model-list-filters/model-list-filters/model-list-filters.component.mjs +3 -3
  38. package/esm2020/lib/modellist/model-list-filters/model-list-filters-select/model-list-filters-select.component.mjs +5 -5
  39. package/esm2020/lib/modellist/model-list-filters/model-list-filters.mjs +2 -2
  40. package/esm2020/lib/modellist/model-list-paginator/model-list-paginator/model-list-paginator.component.mjs +3 -3
  41. package/esm2020/lib/modellist/model-list-sorter/model-list-sorter/model-list-sorter.component.mjs +3 -3
  42. package/esm2020/lib/modellist/model-list.service.mjs +3 -3
  43. package/esm2020/lib/routing/breadcrumb/breadcrumb.component.mjs +3 -3
  44. package/esm2020/lib/uploader/ng-file-drop.directive.mjs +3 -3
  45. package/esm2020/lib/uploader/ng-file-select.directive.mjs +3 -3
  46. package/esm2020/lib/uploader/ngx-uploader.module.mjs +4 -4
  47. package/esm2020/lib/utils/tab-memory.service.mjs +3 -3
  48. package/esm2020/public-api.mjs +9 -2
  49. package/fesm2015/solidev-data.mjs +679 -429
  50. package/fesm2015/solidev-data.mjs.map +1 -1
  51. package/fesm2020/solidev-data.mjs +673 -427
  52. package/fesm2020/solidev-data.mjs.map +1 -1
  53. package/lib/auth/auth-interceptor.service.d.ts +2 -1
  54. package/lib/data/data-model.d.ts +8 -6
  55. package/lib/data/fields/numbers.d.ts +4 -0
  56. package/lib/dispedit/choice.pipe.d.ts +1 -1
  57. package/lib/dispedit/dispedit/dispedit.component.d.ts +1 -1
  58. package/lib/dispedit/factor.pipe.d.ts +12 -0
  59. package/lib/dispedit/factorc.pipe.d.ts +11 -0
  60. package/lib/dispedit/fkselect/fkselect.component.d.ts +1 -1
  61. package/lib/dispedit/m2mselect/m2mselect.component.d.ts +1 -1
  62. package/lib/modellist/model-list-fields/model-list-fields.d.ts +1 -1
  63. package/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.d.ts +0 -2
  64. package/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component.d.ts +1 -1
  65. package/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.d.ts +1 -8
  66. package/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/adapters/ban.d.ts +35 -0
  67. package/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.component.d.ts +16 -2
  68. package/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.d.ts +17 -3
  69. package/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.component.d.ts +2 -2
  70. package/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.d.ts +3 -3
  71. package/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.component.d.ts +11 -5
  72. package/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.d.ts +5 -3
  73. package/lib/modellist/model-list-filters/model-list-filter.d.ts +27 -6
  74. package/package.json +1 -1
  75. package/public-api.d.ts +8 -1
  76. package/esm2020/lib/dispedit/dispedit.module.mjs +0 -60
  77. package/lib/dispedit/dispedit.module.d.ts +0 -20
@@ -1 +1 @@
1
- {"version":3,"file":"solidev-data.mjs","sources":["../../../projects/data/src/lib/data/data-parameters.ts","../../../projects/data/src/lib/data/fields/base.ts","../../../projects/data/src/lib/data/data-model.ts","../../../projects/data/src/lib/data/data-query.ts","../../../projects/data/src/lib/data/data-collection.ts","../../../projects/data/src/lib/data/data-backend.ts","../../../projects/data/src/lib/modellist/model-list-fields/model-list-fields.ts","../../../projects/data/src/lib/modellist/model-list-paginator/model-list-paginator.ts","../../../projects/data/src/lib/modellist/model-list-sorter/model-list-sorter.ts","../../../projects/data/src/lib/modellist/model-list-filters/model-list-filters.ts","../../../projects/data/src/lib/modellist/model-list.service.ts","../../../projects/data/src/lib/modellist/model-list-fields/model-list-fields-selector/model-list-fields-selector.component.ts","../../../projects/data/src/lib/modellist/model-list-fields/model-list-fields-selector/model-list-fields-selector.component.html","../../../projects/data/src/lib/modellist/model-list-sorter/model-list-sorter/model-list-sorter.component.ts","../../../projects/data/src/lib/modellist/model-list-sorter/model-list-sorter/model-list-sorter.component.html","../../../projects/data/src/lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component.ts","../../../projects/data/src/lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component.html","../../../projects/data/src/lib/modellist/model-list-filters/model-list-filters-select/model-list-filters-select.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/model-list-filters-select/model-list-filters-select.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/model-list-filters/model-list-filters.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/model-list-filters/model-list-filters.component.html","../../../projects/data/src/lib/modellist/model-list-filters/model-list-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetimerange-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.ts","../../../projects/data/src/lib/modellist/model-list-paginator/model-list-paginator/model-list-paginator.component.ts","../../../projects/data/src/lib/modellist/model-list-paginator/model-list-paginator/model-list-paginator.component.html","../../../projects/data/src/lib/messages/message.service.ts","../../../projects/data/src/lib/dispedit/fkselect/fkselect.component.ts","../../../projects/data/src/lib/dispedit/fkselect/fkselect.component.html","../../../projects/data/src/lib/dispedit/m2mselect/m2mselect.component.ts","../../../projects/data/src/lib/dispedit/m2mselect/m2mselect.component.html","../../../projects/data/src/lib/dispedit/dispedit/dispedit.component.ts","../../../projects/data/src/lib/dispedit/dispedit/dispedit.component.html","../../../projects/data/src/lib/dispedit/choice.pipe.ts","../../../projects/data/src/lib/dispedit/sdelete/sdelete.component.ts","../../../projects/data/src/lib/dispedit/sdelete/sdelete.component.html","../../../projects/data/src/lib/dispedit/dispedit.module.ts","../../../projects/data/src/lib/data/fields/stringfields.ts","../../../projects/data/src/lib/data/fields/primaryfield.ts","../../../projects/data/src/lib/data/fields/datetime.ts","../../../projects/data/src/lib/data/fields/relations.ts","../../../projects/data/src/lib/data/fields/boolean.ts","../../../projects/data/src/lib/data/fields/numbers.ts","../../../projects/data/src/lib/messages/message-zone/message-zone.component.ts","../../../projects/data/src/lib/messages/message-zone/message-zone.component.html","../../../projects/data/src/lib/data/data-query.mock.ts","../../../projects/data/src/lib/data/data-collection.mock.ts","../../../projects/data/src/lib/uploader/interfaces.ts","../../../projects/data/src/lib/uploader/ngx-uploader.class.ts","../../../projects/data/src/lib/uploader/ng-file-drop.directive.ts","../../../projects/data/src/lib/uploader/ng-file-select.directive.ts","../../../projects/data/src/lib/uploader/ngx-uploader.module.ts","../../../projects/data/src/lib/auth/jwt.ts","../../../projects/data/src/lib/auth/auth.service.ts","../../../projects/data/src/lib/auth/auth-interceptor.service.ts","../../../projects/data/src/lib/routing/routing.ts","../../../projects/data/src/lib/routing/breadcrumb/breadcrumb.component.ts","../../../projects/data/src/lib/routing/breadcrumb/breadcrumb.component.html","../../../projects/data/src/lib/utils/tab-memory.service.ts","../../../projects/data/src/lib/utils/slugify.ts","../../../projects/data/src/public-api.ts","../../../projects/data/src/solidev-data.ts"],"sourcesContent":["import {InjectionToken} from \"@angular/core\";\n\n/**\n * DATA_API_URL: stores data api base url\n */\nexport const DATA_API_URL = new InjectionToken<string>(\"data.api.url\");\n/**\n * DATA_MAX_TRANSFERSTATE_TIME: max duration to use transferstate time\n * If DATA_MAX_TRANSFERSTATE_TIME is zero, TransferState is not used\n */\nexport const DATA_MAX_TRANSFERSTATE_TIME = new InjectionToken<number>(\"data.max.transfer.state\");\n\n/**\n * DataDisplayConfig interface provides default values for display classes\n */\nexport interface DataDisplayConfig {\n dispEdit: {\n defaultMode: \"inline\" | \"dd\";\n inputClasses: {[index: string]: string};\n };\n}\n\nexport const BootstrapDataDisplayConfig: DataDisplayConfig = {\n dispEdit: {\n defaultMode: \"dd\",\n inputClasses: {\n \"input.text\": \"form-control\",\n \"input.email\": \"form-control\",\n \"input.datetime\": \"form-control\",\n \"input.date\": \"form-control\",\n \"input.number\": \"form-control\",\n \"input.decimal\": \"form-control\",\n \"input.checkbox\": \"form-control\",\n \"input.password\":\"form-control\",\n \"textarea\": \"form-control\",\n \"quill\": \"\",\n \"fkselect\": \"form-control\",\n \"select\": \"form-select\"\n },\n }\n};\n\n\n/**\n * DATA_DISPLAY_CONFIG: display config & default classes injection token\n */\nexport const DATA_DISPLAY_CONFIG = new InjectionToken<DataDisplayConfig>(\"data.display.config\");\n","import 'reflect-metadata';\nimport { FormControl, ValidatorFn, Validators } from '@angular/forms';\nimport { DataModel } from '../data-model';\nimport {\n DISPEDIT_DISPLAY_TYPES,\n DISPEDIT_EDITOR_TYPES,\n} from '../../dispedit/dispedit/dispedit.constants';\n\nexport const PROPERTY_METADATA_KEY = Symbol('ngxDataMetadata');\n\n/**\n * Descriptive info for all fields.\n * All are optional.\n */\nexport interface IFieldMetadata<FT> {\n /** Field name (for display, column title, etc..) */\n name?: string;\n /** Field help text (for input) */\n help?: string;\n /** Field description (for details on hover etc..) */\n description?: string;\n /** Field required : no undefined allowed on save ? */\n required?: boolean;\n /** Field cannot be updated */\n readonly?: boolean;\n /** Default value */\n defaultValue?: FT | ((args: any) => FT) | null;\n}\n\n/**\n * Base field manager, stores metadata and provides common field utilities\n *\n * - name : field name, should be the same in data structure and model\n * - help : field help text, blank by default\n * - description : field name for humans\n * - readonly : field is readonly (cannot be changed / pushed to api)\n * - default : default value for field\n *\n * - editor_type : editor type\n * - display_type : display type\n *\n * - fromJson(data) : deserializer\n * - toJson(data) : serialiser\n * - toString(data,format) : to string, for display\n *\n * - formControl : returns field form control\n * - validators : returns field validator\n */\nexport class BaseFieldManager<FT> implements IFieldMetadata<FT> {\n /** Name is mandatory in a field manager. It is given by\n * field decorator if not directly given in field manager. */\n public name!: string;\n public description!: string;\n public help!: string;\n public required = false;\n public readonly = false;\n public defaultValue?: FT | ((args: any) => FT);\n\n public editorType: DISPEDIT_EDITOR_TYPES = 'input.text';\n public displayType: DISPEDIT_DISPLAY_TYPES = 'text';\n\n constructor(params: IFieldMetadata<FT>) {\n Object.assign(this, params);\n if (!this.name) {\n this.name = 'noname';\n }\n if (!this.description) {\n this.description = this.name;\n }\n if (!this.help) {\n this.help = '';\n }\n this.getDefaultValue();\n }\n\n /** Return field validators */\n public get validators(): ValidatorFn[] {\n return this.getValidators();\n }\n\n /** Returns current field name */\n public get fname(): string {\n return this.name.split('__')[1] || this.name;\n }\n\n /** Create a new typed formControl for this field. */\n public formControl(instance: DataModel): FormControl<FT | null> {\n return new FormControl<FT>(\n ((instance as any)[this.fname] as FT) || (this.getDefaultValue() as FT),\n this.validators\n );\n }\n\n /** JSON deserializer base method. */\n public fromJson(data: any): FT {\n return data as FT;\n }\n\n /** JSON serializer base method. */\n public toJson(data: FT): any {\n return data as any;\n }\n\n /**\n * Display value (as string)\n * @param data\n * @param format (not used)\n */\n public toString(data: FT, format: string = 'default'): string {\n return `${data}`;\n }\n\n /** Return validators\n *\n * @protected\n */\n protected getValidators(): ValidatorFn[] {\n const v: ValidatorFn[] = [];\n if (this.required) {\n v.push(Validators.required);\n }\n return v;\n }\n\n /**\n * Returns default value for model, using args if needed.\n * @param args\n */\n public default(args: any = {}): FT | undefined {\n return this.getDefaultValue(args);\n }\n\n /**\n * Returns default value for model, using args if needed.\n * @param args\n * @protected\n */\n protected getDefaultValue(args: any = {}): FT | undefined {\n if (this.defaultValue instanceof Function) {\n return this.defaultValue(args);\n }\n if (this.required && this.defaultValue === undefined) {\n throw new Error(\n `Field ${this.name} : no default value for required field`\n );\n }\n return this.defaultValue;\n }\n}\n\n/**\n * Field data stored on reflected metadata.\n */\nexport interface IFieldStoredMetadata<FT> extends IFieldMetadata<FT> {\n self: string;\n name: string;\n type: string;\n manager: BaseFieldManager<FT>;\n}\n\n/** Util to get own object keys */\nconst ownKeys = (target: any): any =>\n Object.getOwnPropertyNames(target).concat(\n Object.getOwnPropertySymbols(target) as any\n );\n\n/** Manager constructor\n * FT is js field type;\n * T is manager type\n * */\ntype BaseFieldManagerConstructor<FT, T extends BaseFieldManager<FT>> = new (\n params: any\n) => T;\n\n/**\n * Field decorator function\n */\nexport type FieldDecoratorFn = (\n target: any,\n propertyKey: string | symbol\n) => void;\n\n/**\n * Creates a field decorator that can only be applied within\n * an object containing a static __name property.\n *\n *\n * @param meta field metadata\n * @param type field type code\n * @param manager field manager\n */\nexport function genericDataField<\n FT,\n MD extends IFieldMetadata<FT>,\n MG extends BaseFieldManager<FT>\n>(\n meta: MD,\n type: string,\n manager: BaseFieldManagerConstructor<FT, MG>\n): FieldDecoratorFn {\n return (target: DataModel, propertyKey: string | symbol) => {\n const allMetadata: Map<\n string,\n IFieldStoredMetadata<any>\n > = Reflect.getMetadata(PROPERTY_METADATA_KEY, target) ||\n new Map<string, IFieldStoredMetadata<any>>();\n let cname: string = `${(target.constructor as any).__name}`;\n if ((cname === `undefined` || cname === '') && type !== 'primaryField') {\n throw Error(\n `Decorator ${type} allowed only on classes with static __name field : \"${cname}\" found for - ${target}`\n );\n }\n const pk = `${cname}__${String(propertyKey)}`;\n let cm = allMetadata.get(pk);\n /* istanbul ignore if */\n if (cm) {\n // This should never occur as metadata is object bound and property names must be unique\n throw Error(`Field ${pk} already defined = ${cm}`);\n }\n cm = {} as IFieldStoredMetadata<any>;\n for (const key of ownKeys(meta as any)) {\n (cm as any)[key] = (meta as any)[key];\n }\n if (meta.name === undefined) {\n cm.name = `${String(propertyKey)}`;\n }\n cm.type = type;\n cm.self = pk;\n cm.manager = new manager(cm);\n allMetadata.set(pk, cm);\n Reflect.defineMetadata(PROPERTY_METADATA_KEY, allMetadata, target);\n };\n}\n","import {\n BaseFieldManager,\n IFieldStoredMetadata,\n PROPERTY_METADATA_KEY,\n} from './fields/base';\nimport { FormControl, FormGroup, ValidationErrors } from '@angular/forms';\nimport { Collection } from './data-collection';\nimport { Observable, throwError } from 'rxjs';\nimport { tap } from 'rxjs/operators';\n\nexport type DataModelFields = Readonly<Map<string, IFieldStoredMetadata<any>>>;\n\n/**\n * Base class for data model.\n *\n * Each class must have a static __name\n * primary field is given with id field.\n *\n * Some methods are provided to be used with a collection, mostly for CRUD operations.\n *\n */\nexport class DataModel {\n /**\n * data model name\n * this need to be given because class name is not fully available because of minification.\n */\n protected static readonly __name: string = '';\n\n /**\n * Primary field; readonly; must be created and auto incremented on db side.\n */\n // @primaryField({\n // description: 'ID',\n // help: 'Identifiant primaire',\n // })\n public id!: number;\n private readonly _F: DataModelFields;\n\n /**\n * Constructor for data model instance.\n * A matching collection can be provided.\n * ___fields readonly property is also populated from Reflected metadata\n *\n * @param _coll collection used for CRUD, etc..\n */\n constructor(protected _coll?: Collection<any>) {\n const md: Map<string, IFieldStoredMetadata<any>> | undefined =\n Reflect.getMetadata(PROPERTY_METADATA_KEY, this);\n // istanbul ignore if\n if (!md) {\n // This should never occur as all datamodel have at least id field\n throw new Error(\n 'No property metadata found for this object; is there a property in current collection ?'\n );\n }\n // Get all fields from current class and its parents\n const fields = new Map<string, IFieldStoredMetadata<any>>();\n let parent = Object.getPrototypeOf(this);\n while (parent.constructor.name !== 'Object') {\n for (const f of md.keys()) {\n const fieldName = f.split('__')[1];\n if (fields.has(fieldName)) {\n continue;\n }\n if (f.indexOf(parent.constructor.__name + '__') === 0) {\n fields.set(fieldName, md.get(f)!);\n }\n }\n parent = Object.getPrototypeOf(parent);\n }\n this._F = Object.freeze(fields);\n }\n\n public get _collection(): Collection<any> {\n return this._coll as Collection<any>;\n }\n\n public set _collection(coll: Collection<any>) {\n this._coll = coll;\n }\n\n /**\n * Loads model data from json.\n * If partial is true, only fields with matching data keys will be loaded\n * @param data\n * @param options\n */\n public fromJson(\n data: { [index: string]: any },\n { partial, check }: { partial?: boolean; check?: boolean } = {\n partial: false,\n check: false,\n }\n ): null | ValidationErrors {\n const errors: { [index: string]: null | ValidationErrors } = {};\n let haveError = false;\n for (const f of this.FN) {\n if (!partial || (partial && Object.keys(data).indexOf(f) !== -1)) {\n const ferr = this.setFV(f, this.FM(f).fromJson(data[f]), check);\n if (ferr !== null) {\n errors[f] = ferr;\n haveError = true;\n }\n }\n }\n return haveError ? errors : null;\n }\n\n public toJson(fields?: string | string[]): any {\n if (fields && !Array.isArray(fields)) {\n fields = [fields];\n }\n const out: { [index: string]: any } = {};\n const fl = this.F;\n for (const f of this.FN) {\n const mgr = this.FM(f);\n if (!fields || fields.length === 0) {\n if (mgr.readonly) {\n continue;\n }\n out[f] = fl.get(f)!.manager.toJson(this.FV(f));\n } else {\n if (fields.indexOf(f) !== -1) {\n out[f] = fl.get(f)!.manager.toJson(this.FV(f));\n }\n }\n }\n return out;\n }\n\n public action<T, RT>(\n method: 'POST' | 'PATCH' | 'GET' | 'DELETE' | 'PUT',\n name: string,\n {\n body = undefined,\n update = false,\n updatePartial = true,\n updateCheck = false,\n // updateRaise = false,\n params = {},\n headers = {},\n }: {\n body?: { [_index: string]: any };\n update?: boolean;\n updatePartial?: boolean;\n updateCheck?: boolean;\n // updateRaise?: boolean;\n params?: { [_index: string]: string };\n headers?: { [_index: string]: string };\n } = {}\n ): Observable<RT> {\n if (this._coll === undefined) {\n return throwError(() => new Error('Missing collection'));\n }\n return this._coll\n .action<RT>(this, method, name, {\n body,\n params,\n headers,\n })\n .pipe(\n tap((result) => {\n if (update) {\n this.fromJson(result, {\n partial: updatePartial,\n check: updateCheck,\n });\n return this;\n }\n return result;\n })\n );\n }\n\n /**\n * HashMap of fields metadata (type, name, manager, etc...)\n */\n public get F(): DataModelFields {\n // istanbul ignore if\n if (!this._F) {\n throw new Error('Invalid data model, fields metadata is missing');\n }\n return this._F;\n }\n\n // Called on model, returns the manager for a field.\n public FM<FT>(field: string): BaseFieldManager<FT> {\n if (this.F.has(field)) {\n return this.F.get(field)!.manager;\n }\n throw new Error(\n `${field} not found in ${Object.keys(this.F).join(',')} model ${this}`\n );\n }\n\n // Return field value, without typing\n public FV<FT>(field: string): FT {\n return (this as any)[field] as FT;\n }\n\n // Return field names iterator\n public get FN(): IterableIterator<string> {\n return this.F.keys();\n }\n\n /**\n * Set field value. If check is true, only set value if all validators pass.\n *\n * The validation result is returned.\n *\n * @param field field name\n * @param value field valued\n * @param check default false\n * @return null or ValidationError\n */\n public setFV<FT>(\n field: string,\n value: FT,\n check: boolean = false\n ): null | ValidationErrors {\n if (check) {\n const fc = new FormControl(value);\n\n for (const v of this.FM(field).validators) {\n const val = v(fc);\n if (val !== null) {\n console.error(val);\n return val;\n }\n }\n }\n (this as any)[field] = value;\n return null;\n }\n\n // Called on model with a list of fields, returns a FormGroup with\n // these fields, or only the form control for one field.\n public FC(): FormGroup;\n public FC(field: string): FormControl;\n public FC(field: string[]): FormGroup;\n public FC(field?: string | string[]): FormControl | FormGroup {\n if (field === undefined) {\n field = Array.from(this.FN).filter((n) => !this.FM(n).readonly);\n }\n if (Array.isArray(field)) {\n const fg: { [index: string]: FormControl } = {};\n for (const f of field) {\n fg[f] = this.FC(f) as FormControl;\n }\n return new FormGroup(fg);\n }\n return this.FM(field).formControl(this);\n }\n\n public save(\n { updateModel = true }: { updateModel?: boolean } = {\n updateModel: true,\n }\n ): Observable<this> {\n if (this._coll) {\n return this._coll.save(this, { updateModel });\n }\n return throwError(() => new Error('Missing collection'));\n }\n\n public update(\n fields: string[] = [],\n { updateModel = true }: { updateModel?: boolean } = {\n updateModel: true,\n }\n ): Observable<this> {\n if (this._coll) {\n return this._coll.update(this, fields, { updateModel });\n }\n return throwError(() => new Error('Missing collection'));\n }\n}\n\n//\n// export class TreeDataModel extends DataModel {\n// static override __name = 'TreeDataModel';\n// @detailsField({\n// model: this,\n// many: true,\n// description: 'Parents',\n// })\n// public parents_details?: this[];\n//\n// @foreignKeyField({\n// required: false,\n// description: 'Structure parente',\n// related: 'Structure',\n// })\n// public parent?: number;\n//\n// @integerField({\n// required: false,\n// readonly: true,\n// description: 'ID Tree',\n// })\n// public tree_id!: number;\n//\n// @integerField({\n// required: false,\n// readonly: true,\n// description: 'MPTT left',\n// })\n// public lft!: number;\n//\n// @integerField({\n// required: false,\n// readonly: true,\n// description: 'MPTT right',\n// })\n// public rght!: number;\n//\n// @integerField({\n// required: false,\n// readonly: true,\n// description: 'Niveau hiérarchique',\n// })\n// public level!: number;\n//\n// public get parent_details(): this | null {\n// if (this.parents_details) {\n// const out = this.parents_details[this.parents_details.length - 1];\n// out.parents_details = this.parents_details.slice(\n// 0,\n// this.parents_details.length - 1\n// );\n// return out;\n// }\n// return null;\n// }\n//\n// public set parent_details(d: this | null) {\n// console.log(d);\n// this.parents_details = d?.parents_details;\n// }\n//\n// public _display(): string {\n// const out: string[] = [];\n// if (this.parents_details) {\n// for (const p of this.parents_details) {\n// if ((p as any).code) {\n// out.push(`[${(p as any).code}] ${(p as any).name}`);\n// } else {\n// out.push((p as any).name);\n// }\n// }\n// }\n// if ((this as any).code) {\n// out.push(`[${(this as any).code}] ${(this as any).name}`);\n// } else {\n// out.push((this as any).name);\n// }\n//\n// return out.join(' : ');\n// }\n// }\n","import { Collection } from './data-collection';\nimport { DataModel } from './data-model';\nimport {\n combineLatest,\n firstValueFrom,\n Observable,\n ReplaySubject,\n share,\n} from 'rxjs';\nimport { first, switchMap } from 'rxjs/operators';\nimport { ActivatedRoute, Router } from '@angular/router';\n\nexport interface FilterData {\n [index: string]: string | number | boolean | undefined | null;\n}\n\nexport type SortData = string;\n\n/**\n * Queryset parameters\n */\nexport interface IQuerysetOptions {\n /** Emit fields list */\n emitFields?: boolean;\n /** Queryset name */\n name?: string;\n /** TODO: see usage */\n route?: ActivatedRoute;\n /** TODO: see usage */\n router?: Router;\n /** TODO: see usage */\n hash?: string;\n}\n\nexport interface IQueryNav {\n page: number;\n page_size: number;\n}\n\nexport interface IQueryMetaNav {\n count: number;\n next: number | null;\n page: number;\n pages: number;\n prev: number | null;\n size: number;\n}\n\nexport interface IQueryMetaNavParams {\n page: string;\n page_size: string;\n}\n\nexport interface IQueryMeta {\n nav: IQueryMetaNav;\n parameters: IQueryMetaNavParams;\n}\n\nexport interface IQueryFullResponse<T> extends IQueryMeta {\n results: T[];\n}\n\nexport class Queryset<T extends DataModel> {\n /** Current filter data */\n public filterData: FilterData = {};\n /** Current sorter data */\n public sortData: SortData[] = [];\n /** Current fields */\n public fields: string[] = [];\n /** Current page size */\n public pageSize = 500;\n /** Current page number */\n public page = 1;\n\n public options: IQuerysetOptions;\n constructor(protected _coll: Collection<T>, options: IQuerysetOptions = {}) {\n /** Default options */\n this.options = { emitFields: true };\n Object.assign(this.options, options);\n }\n\n private _pristine = true;\n /** Pristine status (true if it has not collected results yet) */\n public get pristine(): boolean {\n return this._pristine;\n }\n\n private _loading = new ReplaySubject<boolean>(1);\n /** Loading status (true if currently fetching data) */\n public get loading(): Observable<boolean> {\n return this._loading.asObservable();\n }\n\n private _meta = new ReplaySubject<IQueryMeta>(1);\n /** Results meta part observable */\n public get meta(): Observable<IQueryMeta> {\n return this._meta.asObservable();\n }\n\n private _results = new ReplaySubject<T[]>(1);\n /** Results data part observable */\n public get results(): Observable<T[]> {\n return this._results.asObservable();\n }\n\n private _full?: Observable<[T[], boolean, IQueryMeta]>;\n /** Full results observable (results, loading, meta) */\n public get full(): Observable<[T[], boolean, IQueryMeta]> {\n if (!this._full) {\n this._full = combineLatest([this.results, this.loading, this.meta]);\n }\n return this._full.pipe(share());\n }\n\n /**\n * Update current filter data. Null or undefined values are removed from filter data.\n * @param params filter data\n * @param update boolean to update filter data instead of recreating it from scratch\n */\n public filter(params: FilterData = {}, update: boolean = false): Queryset<T> {\n if (!update) {\n this.filterData = {};\n }\n for (const k of Object.keys(params)) {\n if (params[k] === undefined || params[k] === null) {\n delete this.filterData[k];\n } else {\n this.filterData[k] = params[k];\n }\n }\n return this;\n }\n\n /**\n * Update sorting parameters, list of strings giving sort parameters e.g. sort(\"+name\", \"-id\").\n * @param sorting strings of sort parameters\n */\n public sort(...sorting: string[]): Queryset<T> {\n this.sortData = sorting;\n return this;\n }\n\n /**\n * Update page size.\n * @param pageSize required page size\n */\n public paginateBy(pageSize: number = 20): Queryset<T> {\n this.pageSize = pageSize;\n return this;\n }\n\n /**\n * Update current page number.\n * @param page required pqge\n * @param fragment TODO: fragment usage for router usage\n */\n public setPage(page: number = 1, fragment?: string): Queryset<T> {\n if (page !== this.page) {\n this.page = page;\n // if (this.options.router) {\n // // TODO: check and fix usage of fragment/query params\n // const frag = fragment\n // ? fragment\n // : this.options.hash || this.options.name;\n // const _ = this.options.router.navigate([], {\n // queryParams: { page: page.toString() },\n // fragment: frag,\n // queryParamsHandling: 'merge',\n // });\n // }\n }\n return this;\n }\n\n public setFields(fields: string[]): Queryset<T> {\n this.fields = fields;\n return this;\n }\n\n public getQueryParams(): FilterData {\n const f: FilterData = {};\n Object.assign(f, this.filterData);\n if (this.sortData.length) {\n f['ordering'] = this.sortData.join(',');\n }\n f['page_size'] = this.pageSize;\n f['page'] = this.page;\n if (this.options.emitFields && this.fields.length) {\n f['fields'] = this.fields.join(',');\n }\n return f;\n }\n\n public get(refresh: boolean = true): Observable<T[]> {\n console.log('queryset:get', this, refresh);\n if (!refresh && !this._pristine) {\n return this.results;\n }\n this._loading.next(true);\n return this._coll\n .raw<IQueryFullResponse<T>>({\n method: 'GET',\n params: this.getQueryParams() as any,\n })\n .pipe(\n switchMap((result) => {\n // Process results\n this._meta.next({ nav: result.nav, parameters: result.parameters });\n const out: T[] = [];\n for (const r of result.results) {\n const m = this._coll.fromJson(r);\n out.push(m);\n }\n this._pristine = false;\n this._loading.next(false);\n this._results.next(out);\n return this.results;\n })\n );\n }\n}\n","import { DataModel } from './data-model';\nimport { DataBackend } from './data-backend';\nimport { Observable } from 'rxjs';\nimport { FilterData, IQuerysetOptions, Queryset } from './data-query';\nimport { map, tap } from 'rxjs/operators';\n\nexport type IHttpMethod = 'POST' | 'GET' | 'DELETE' | 'PUT' | 'PATCH';\n\nexport interface IActionParams {\n body?: any;\n headers?: { [index: string]: string };\n params?: { [index: string]: string };\n}\n\nexport interface ICollectionCacheParams {\n transferState?: {\n enabled: boolean;\n maxTime: number;\n maxCount: number;\n };\n}\n\nexport type DataModelType<T extends DataModel> = new (\n _coll?: Collection<T>\n) => T;\n\nexport class Collection<T extends DataModel> {\n public useTransferState = true;\n\n constructor(\n protected backend: DataBackend,\n protected path: string,\n public model: DataModelType<T>\n ) {}\n\n public create(data?: Partial<T>): T {\n if (!data) {\n data = {};\n }\n return this.fromJson(data);\n }\n\n fromJson(data: Partial<T>): T;\n fromJson(data: Partial<T>[]): T[];\n fromJson(data: Partial<T> | Partial<T>[]): T | T[] {\n if (data instanceof Array) {\n const out: T[] = [];\n for (const r of data) {\n const ri = new this.model(this);\n ri.fromJson(r);\n out.push(ri);\n }\n return out;\n }\n const m = new this.model(this);\n m.fromJson(data);\n return m;\n }\n\n public queryset(options: IQuerysetOptions = {}): Queryset<T> {\n return new Queryset<T>(this, options);\n }\n\n public fetch(\n id: number,\n {\n prefix = '',\n suffix = '',\n params = {},\n headers = {},\n }: {\n prefix?: string;\n suffix?: string;\n params?: { [_index: string]: string };\n headers?: { [_index: string]: string };\n } = {}\n ): Observable<T> {\n return this.backend\n .get(this, this.getUrl(id, { prefix, suffix }), { headers, params })\n .pipe(map((result) => this.fromJson(result)));\n }\n\n public action<RT>(\n model: T | null,\n method: IHttpMethod,\n action: string,\n { body = undefined, params = {}, headers = {} }: IActionParams = {}\n ): Observable<RT> {\n return this.backend.action<T, RT>(\n this,\n method,\n this.getUrl(model ? model.id : null, {\n suffix: model ? '/' + action : action,\n }),\n { body, params, headers }\n );\n }\n\n public save(\n model: T,\n { updateModel = true }: { updateModel?: boolean } = {}\n ): Observable<T> {\n let saveMethod =\n model.id !== undefined\n ? this.backend.patch.bind(this.backend)\n : this.backend.post.bind(this.backend);\n let url = model.id !== undefined ? this.getUrl(model.id) : this.getUrl();\n return saveMethod(this, url, { body: model.toJson() }).pipe(\n map((res) => this.fromJson(res)),\n tap((res) => {\n if (updateModel) {\n model.fromJson(res);\n }\n })\n );\n }\n\n public update(\n model: T,\n fields: string[] = [],\n { updateModel = true }: { updateModel?: boolean } = {}\n ): Observable<T> {\n let saveMethod =\n model.id !== undefined\n ? this.backend.patch.bind(this.backend)\n : this.backend.post.bind(this.backend);\n let url = model.id !== undefined ? this.getUrl(model.id) : this.getUrl();\n return saveMethod(this, url, { body: model.toJson(fields) }).pipe(\n map((res) => this.fromJson(res)),\n tap((res) => {\n if (updateModel) {\n model.fromJson(res);\n }\n })\n );\n }\n\n public delete(\n model: T,\n { params = {}, headers = {} }: IActionParams = {}\n ): Observable<any> {\n return this.backend.delete(this, this.getUrl(model.id), {\n params,\n headers,\n });\n }\n\n public list(\n query: FilterData = {},\n {\n prefix = '',\n suffix = '',\n params = {},\n headers = {},\n }: {\n prefix?: string;\n suffix?: string;\n params?: { [_index: string]: string };\n headers?: { [_index: string]: string };\n } = {}\n ): Observable<T[]> {\n const qry = Object.assign({}, query, params);\n return this.backend\n .list(\n this,\n this.getUrl(null, { suffix, prefix }),\n // SEE: forced typecast maybe bad\n { params: qry, headers }\n )\n .pipe(\n // FIXME: parametrize paginated results access\n map((result: { results: Partial<T>[] }) =>\n this.fromJson(result.results)\n )\n );\n }\n\n /**\n * Calls *method* endpoint for this collection and returns raw results.\n *\n * @param method GET/POST/...\n * @param prefix collection_urlPREFIXSUFFIX\n * @param suffix collection_urlPREFIXSUFFIX\n * @param params query paremeters\n * @param body body as json\n * @param headers headers\n */\n public raw<RT>({\n method = 'GET',\n prefix = '',\n suffix = '',\n params = {},\n body = {},\n headers = {},\n }: {\n method?: IHttpMethod;\n prefix?: string;\n suffix?: string;\n body?: any;\n params?: { [_index: string]: string };\n headers?: { [_index: string]: string };\n } = {}): Observable<RT> {\n return this.backend.action(\n this,\n method,\n this.getUrl(null, { suffix, prefix }),\n {\n params,\n headers,\n }\n );\n }\n\n public getUrl(\n id?: number | null,\n { prefix = '', suffix = '' }: { prefix?: string; suffix?: string } = {}\n ): string {\n if (id === undefined || id === null) {\n if (prefix || suffix) {\n return `${this.backend.apiUrl}${this.path}/${prefix}${suffix}`;\n } else {\n return `${this.backend.apiUrl}${this.path}`;\n }\n }\n return `${this.backend.apiUrl}${this.path}/${prefix}${id}${suffix}`;\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { makeStateKey, TransferState } from '@angular/platform-browser';\nimport { Observable, of } from 'rxjs';\nimport { tap } from 'rxjs/operators';\nimport { Inject, Injectable, Optional, PLATFORM_ID } from '@angular/core';\nimport { isPlatformServer } from '@angular/common';\nimport { Collection, IActionParams } from './data-collection';\nimport { DataModel } from './data-model';\nimport { DATA_API_URL, DATA_MAX_TRANSFERSTATE_TIME } from './data-parameters';\n\n/**\n * DataBackend provides CRUD operations to a REST api.\n * TransferState can be used if DATA_MAX_TRANSFERSTATE_TIME is set and > 0\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class DataBackend {\n private _created = new Date();\n\n constructor(\n private _http: HttpClient,\n private _transferState: TransferState,\n @Inject(PLATFORM_ID) private _platform: any,\n @Inject(DATA_API_URL) private _apiUrl: string,\n @Optional()\n @Inject(DATA_MAX_TRANSFERSTATE_TIME)\n private _maxTransferstateTime: number = 0\n ) {}\n\n /**\n * Return api url for this backend.\n */\n public get apiUrl(): string {\n return this._apiUrl;\n }\n\n /**\n * Launch an action on collection.\n * If method is GET and collection.useTranserState & transferState are enabled,\n * result is stored / retrieved from transferState.\n *\n * @param collection Collection reference\n * @param method HTTP method\n * @param url full URL for action\n * @param body JSON body\n * @param params query parameters\n * @param headers query headers\n *\n * @return an observable of response body\n */\n public action<T extends DataModel, RT>(\n collection: Collection<T>,\n method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE',\n url: string,\n { body = undefined, params = {}, headers = {} }: IActionParams = {}\n ): Observable<RT> {\n if (method === 'GET') {\n return this._cachedGet(collection, url, { headers, params });\n } else {\n return this._http.request<RT>(method, url, { body, params, headers });\n }\n }\n\n public put<T extends DataModel>(\n collection: Collection<T>,\n url: string,\n { body = undefined, params = {}, headers = {} }: IActionParams = {}\n ): Observable<T> {\n return this._http.put<T>(url, body, { params, headers });\n }\n\n public post<T extends DataModel>(\n collection: Collection<T>,\n url: string,\n { body = undefined, params = {}, headers = {} }: IActionParams = {}\n ): Observable<Partial<T>> {\n return this._http.post<Partial<T>>(url, body, { params, headers });\n }\n\n public patch<T extends DataModel>(\n collection: Collection<T>,\n url: string,\n { body = undefined, params = {}, headers = {} }: IActionParams = {}\n ): Observable<Partial<T>> {\n return this._http.patch<Partial<T>>(url, body, { params, headers });\n }\n\n public delete<T extends DataModel, R>(\n collection: Collection<T>,\n url: string,\n { params = {}, headers = {} }: IActionParams = {}\n ): Observable<R> {\n return this._http.delete<R>(url, { params, headers });\n }\n\n public _cachedGet<T extends DataModel, RT>(\n collection: Collection<T>,\n url: string,\n { params = {}, headers = {} }: IActionParams = {}\n ): Observable<RT> {\n const key = makeStateKey<RT>(\n url + '|' + JSON.stringify(params) + '|' + JSON.stringify(headers)\n );\n if (\n collection.useTransferState &&\n this._maxTransferstateTime > 0 &&\n this._transferState.hasKey(key) &&\n new Date().getTime() - this._created.getTime() <\n this._maxTransferstateTime\n ) {\n return of(this._transferState.get<RT | null>(key, null) as RT);\n }\n return this._http.get<RT>(url, { headers, params }).pipe(\n tap((result) => {\n if (\n collection.useTransferState &&\n isPlatformServer(this._platform) &&\n this._maxTransferstateTime > 0\n ) {\n this._transferState.set<RT>(key, result);\n }\n })\n );\n }\n\n public get<T extends DataModel>(\n collection: Collection<T>,\n url: string,\n { params = {}, headers = {} }: IActionParams = {}\n ): Observable<Partial<T>> {\n return this._cachedGet<T, Partial<T>>(collection, url, { headers, params });\n }\n\n public list<T extends DataModel>(\n collection: Collection<T>,\n url: string,\n { params = {}, headers = {} }: IActionParams = {}\n ): Observable<any> {\n return this._cachedGet<T, Partial<T>>(collection, url, { headers, params });\n }\n}\n","import { Observable, ReplaySubject } from 'rxjs';\nimport { DataModel } from '../../data/data-model';\nimport { Collection } from '../../data/data-collection';\nimport { FieldsParams } from '../model-list.service';\n\nexport interface ModelListField {\n name: string;\n label: string;\n enabled: boolean;\n allowed: boolean;\n field: any;\n position: number;\n}\n\nexport class ModelListFields<T extends DataModel> {\n private readonly __fields!: ModelListField[];\n\n constructor(collection: Collection<T>, params?: FieldsParams) {\n // Get fields from model\n const m = collection.create();\n const tmp = [];\n for (const fn of m.FN) {\n tmp.push({\n name: fn,\n label: m.FM(fn).description || fn,\n allowed: false,\n enabled: false,\n field: m.FV(fn),\n position: tmp.length * 10,\n });\n }\n // Add custom fields if provided\n const custom = params?.custom || [];\n for (const c of custom) {\n tmp.push({\n name: c.name,\n label: c.label,\n allowed: false,\n enabled: false,\n field: null,\n position: tmp.length * 10,\n });\n }\n\n // Prepare allowed fields (all fields if not set or empty)\n let allowed: string[];\n if (params?.allowed === undefined || params?.allowed === []) {\n allowed = Array.from(m.FN);\n for (const c of custom) {\n allowed.push(c.name);\n }\n } else {\n allowed = params.allowed;\n }\n\n // Prepare excluded fields\n const excluded: string[] = params?.excluded || [];\n\n // Process default fields\n // Use all allowed fields if empty of not set\n const defaults: string[] = params?.defaults || allowed;\n\n // Prepare fields status\n // Set allowed\n for (const fe of allowed) {\n for (const f of tmp) {\n if (f.name === fe) {\n f.allowed = true;\n }\n }\n }\n // Set defaults\n let pos = 0;\n for (const fe of defaults) {\n for (const f of tmp) {\n if (f.name === fe) {\n f.enabled = true;\n f.allowed = true;\n f.position = pos;\n }\n pos += 10;\n }\n }\n // remove excluded\n for (const fe of excluded) {\n for (const f of tmp) {\n if (f.name === fe) {\n f.enabled = false;\n f.allowed = false;\n }\n }\n }\n const filtered = [];\n for (const f of tmp) {\n if (!(!f.enabled && !f.allowed)) {\n filtered.push(f);\n }\n }\n this.__fields = filtered;\n\n this._update();\n }\n\n private _fields = new ReplaySubject<ModelListField[]>(1);\n\n public get fields(): Observable<ModelListField[]> {\n return this._fields.asObservable();\n }\n\n private _enabled: string[] = [];\n\n public get enabled(): string[] {\n return this._enabled;\n }\n\n private _output = new ReplaySubject<string[]>(1);\n\n public get output(): Observable<string[]> {\n return this._output.asObservable();\n }\n\n /**\n * Enable a field by name. Position is optional.\n *\n * @param fname : name of field to be enabled\n * @param position : position (optional)\n * @returns current enabled fields\n */\n public enable(fname: string, position?: number): string[] {\n const f = this.get(fname);\n if (f) {\n f.enabled = true;\n if (position !== undefined) {\n f.position = position;\n }\n } else {\n console.error('Field not found', f);\n }\n this._update();\n return this._enabled;\n }\n\n /**\n * Disable a field by name.\n *\n * @param fname : name of field to be disabled\n * @returns current enabled fields\n */\n public disable(fname: string): string[] {\n const f = this.get(fname);\n if (f) {\n f.enabled = false;\n } else {\n console.error('Field not found', f);\n }\n this._update();\n return this._enabled;\n }\n\n /**\n * Move field `fname` before or after (depending on `position`) field `dest`.\n *\n * @param fname field to move\n * @param position (\"before\" or \"after\")\n * @param dest reference field\n * @returns current enabled fields\n */\n public move(\n fname: string,\n position: 'before' | 'after',\n dest: string = ''\n ): string[] {\n const ftarget = this.get(fname);\n if (dest == '') {\n const pos = this._enabled.indexOf(fname);\n dest = this._enabled[pos + (position === 'before' ? -1 : +1)];\n if (dest === undefined) {\n return this._enabled;\n }\n }\n const fdest = this.get(dest);\n // istanbul ignore if\n if (!ftarget || !fdest) {\n console.error('Target / dest not found', fname, dest);\n return this._enabled;\n }\n if (fname == dest) {\n ftarget.position = fdest.position + (position === 'before' ? -15 : +15);\n } else {\n ftarget.position = fdest.position + (position === 'before' ? -5 : +5);\n }\n\n this._update();\n return this._enabled;\n }\n\n /**\n * Check if field with name `fname` is enabled.\n *\n * @param fname : name of field\n * @returns enabled (true) or disabled (false)\n */\n public isEnabled(fname: string): boolean {\n return this._enabled.indexOf(fname) !== -1;\n }\n\n /**\n * Get field by name\n * @param fname : name of field\n * @returns Model list field or null if not found\n */\n public get(fname: string): ModelListField | null {\n for (const f of this.__fields) {\n if (f.name === fname) {\n return f;\n }\n }\n return null;\n }\n\n /**\n * Get field by position\n * @param pos : position of field\n * @returns Model list field or null if not found\n */\n public getAtPos(pos: number): ModelListField | null {\n return this.__fields[pos] || null;\n }\n\n private _update() {\n this.__fields.sort((a, b) => a.position - b.position);\n let i = 0;\n for (const f of this.__fields) {\n f.position = i * 10;\n i += 1;\n }\n const out: string[] = [];\n for (const f of this.__fields) {\n if (f.enabled) {\n out.push(f.name);\n }\n }\n this._enabled = out;\n this._output.next(this._enabled);\n this._fields.next(this.__fields);\n }\n\n setPosition(fname: any, position: number): string[] {\n const f = this.get(fname);\n if (f) {\n f.position = position;\n } else {\n console.error('Field not found', f);\n }\n this._update();\n return this._enabled;\n }\n}\n","import { IQueryNav } from '../../data/data-query';\nimport { Observable, ReplaySubject } from 'rxjs';\n\nexport class ModelListPaginator {\n private _page_size!: number;\n private _page!: number;\n\n constructor(defaults?: IQueryNav) {\n if (!defaults) {\n defaults = { page_size: 20, page: 1 };\n }\n this._page_size = defaults.page_size || 20;\n this._page = defaults.page || 1;\n this._updateOutput('constructor');\n }\n\n private _output = new ReplaySubject<IQueryNav>(1);\n\n public get output(): Observable<IQueryNav> {\n return this._output.asObservable();\n }\n\n public setPage(page: number): void {\n if (page !== this._page) {\n this._page = page;\n this._updateOutput('setPage');\n }\n }\n\n public updatePage(page: number): void {\n if (page !== this._page) {\n this._page = page;\n }\n }\n\n public setPageSize(size: number): void {\n if (size !== this._page_size) {\n this._page_size = size;\n this._updateOutput('setPageSize');\n }\n }\n\n public updatePageSize(size: number): void {\n if (size !== this._page_size) {\n this._page_size = size;\n }\n }\n\n public getPageSize(): number {\n return this._page_size;\n }\n\n public getPage(): number {\n return this._page;\n }\n\n private _updateOutput(from: string = ''): void {\n this._output.next({ page: this._page, page_size: this._page_size });\n }\n}\n","import { Observable, ReplaySubject } from 'rxjs';\nimport { SorterDefaults } from '../model-list.service';\n\n// TODO: add an option to limit the number of ordering fields (eg. for tree queries)\nexport type SortDirection = 'asc' | 'desc';\n\nexport interface FieldSortData {\n field: string;\n direction: SortDirection;\n}\n\nexport type SorterData = FieldSortData[];\n\nexport class ModelListSorter {\n private readonly _values: SorterData = [];\n\n /**\n * Create ModelListSorter instance, using defaults.\n * @param defaults defaults sort values, as a list of strings (+field, -field, field)\n */\n constructor(defaults: SorterDefaults = []) {\n this._output = new ReplaySubject(1);\n this._values = [];\n for (const d of defaults) {\n if (d.length < 1) {\n continue;\n }\n if (d[0] == '+') {\n this._values.push({ field: d.substring(1), direction: 'asc' });\n } else if (d[0] == '-') {\n this._values.push({ field: d.substring(1), direction: 'desc' });\n } else {\n this._values.push({ field: d, direction: 'asc' });\n }\n }\n this._updateOutput('constructor');\n }\n\n private _output: ReplaySubject<string[]>;\n\n /**\n * Returns a list of \"+/-field\" sort strings observable.\n * @returns sort strings observable\n */\n public get output(): Observable<string[]> {\n return this._output.asObservable();\n }\n\n /**\n * Set sorting for `name` key, in direction `direction`.\n * If sorting is already set for `name` key, updates direction without changing order.\n * If sorting isn't set for `name` key, adds it at the end of sorting directions.\n *\n * @param name field name\n * @param direction sort direction\n * @returns model list sorter\n */\n public set(name: string, direction: SortDirection): ModelListSorter {\n for (const v of this._values) {\n if (v.field === name) {\n v.direction = direction;\n this._updateOutput();\n return this;\n }\n }\n this._values.push({ field: name, direction });\n this._updateOutput('set');\n return this;\n }\n\n /**\n * Removes `name` sorting key from current keys.\n *\n * @param name sort key to be removed\n * @returns model list sorter\n */\n public unset(name: string): ModelListSorter {\n for (let i = 0; i < this._values.length; i++) {\n if (this._values[i].field === name) {\n this._values.splice(i, 1);\n break;\n }\n }\n this._updateOutput('unset');\n return this;\n }\n\n /**\n * Get sorting status for `field` argument.\n * If `field` is not found, returns null.\n *\n * @param field field name\n * @returns ordering direction / null\n */\n public get(field: string): FieldSortData | null {\n for (const v of this._values) {\n if (v.field === field) {\n return v;\n }\n }\n return null;\n }\n\n /**\n * Return all sorter data values.\n *\n * @returns all sorter data values.\n */\n public getAll(): SorterData {\n return this._values;\n }\n\n /**\n * Get the ordering position for `field` argument. If not found, returns -1.\n *\n * @param field field name\n * @returns ordering position for field\n */\n public getOrder(field: string): number {\n for (let i = 0; i < this._values.length; i++) {\n if (this._values[i].field === field) {\n return i + 1;\n }\n }\n return -1;\n }\n\n private _updateOutput(_from: string = ''): void {\n let out: string[] = [];\n for (const v of this._values) {\n out.push(`${v.direction === 'asc' ? '' : '-'}${v.field}`);\n }\n this._output.next(out);\n }\n}\n","import { FilterData } from '../../data/data-query';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { FiltersParams } from '../model-list.service';\nimport { ModelListFilter } from './model-list-filter';\n\nexport class ModelListFilters {\n private _filters: ModelListFilter[];\n\n constructor(params?: FiltersParams) {\n const tmp = Array.from(params?.filters || []);\n // Prepare allowed filters (all filters if not set or empty)\n let allowed: string[] = [];\n if (params?.allowed === undefined || params?.allowed === []) {\n for (const f of tmp) {\n allowed.push(f.name);\n }\n } else {\n allowed = params.allowed;\n }\n // Prepare excluded filters\n const excluded: string[] = params?.excluded || [];\n\n // Process default filters\n // Use all allowed filters if empty of not set\n const defaults: string[] = params?.defaults || allowed;\n\n // Prepare filters status\n // Set allowed\n for (const fe of allowed) {\n for (const f of tmp) {\n if (f.name === fe) {\n f.allowed = true;\n }\n }\n }\n // Set defaults\n for (const fe of defaults) {\n for (const f of tmp) {\n if (f.name === fe) {\n f.enabled = true;\n f.allowed = true;\n }\n }\n }\n // remove excluded\n for (const fe of excluded) {\n for (const f of tmp) {\n if (f.name === fe) {\n f.enabled = false;\n f.allowed = false;\n }\n }\n }\n this._filters = tmp;\n this.update();\n }\n\n private _output = new ReplaySubject<FilterData>(1);\n public get output(): Observable<FilterData> {\n return this._output.asObservable();\n }\n\n public _enabled = new ReplaySubject<ModelListFilter[]>(1);\n public get enabled(): Observable<ModelListFilter[]> {\n return this._enabled.asObservable();\n }\n\n public _available = new ReplaySubject<ModelListFilter[]>(1);\n public get available(): Observable<ModelListFilter[]> {\n return this._available.asObservable();\n }\n\n public update() {\n const filter: FilterData = {};\n const enabled: ModelListFilter[] = [];\n const available: ModelListFilter[] = [];\n for (const f of this._filters) {\n if (f.enabled) {\n f.updateFilter(filter);\n enabled.push(f);\n }\n if (f.allowed) {\n available.push(f);\n }\n }\n this._output.next(filter);\n this._enabled.next(enabled);\n this._available.next(available);\n }\n}\n","import { Injectable } from '@angular/core';\nimport {\n combineLatest,\n debounceTime,\n NEVER,\n Observable,\n of,\n share,\n Subject,\n takeUntil,\n} from 'rxjs';\nimport { DataModel } from '../data/data-model';\nimport {\n IQueryMeta,\n IQueryMetaNavParams,\n IQueryNav,\n Queryset,\n} from '../data/data-query';\nimport { switchMap, tap } from 'rxjs/operators';\nimport { ModelListFields } from './model-list-fields/model-list-fields';\nimport { ModelListPaginator } from './model-list-paginator/model-list-paginator';\nimport { ModelListSorter } from './model-list-sorter/model-list-sorter';\nimport { ModelListFilters } from './model-list-filters/model-list-filters';\nimport { Collection } from '../data/data-collection';\nimport { ModelListFilter } from './model-list-filters/model-list-filter';\n\nexport interface CustomField {\n name: string;\n label: string;\n}\n\nexport interface FilterDefaults {\n [index: string]: string | number | undefined;\n}\n\nexport type SorterDefaults = string[];\n\n/**\n * Fields parameters.\n */\nexport interface FieldsParams {\n /** Allowed fields, all model fields are allowed if empty */\n allowed?: string[];\n /** Default enabled fields */\n defaults?: string[];\n /** Excluded fields */\n excluded?: string[];\n /** Custom fields */\n custom?: CustomField[];\n}\n\n/**\n * Filters parameters.\n */\nexport interface FiltersParams {\n /** Allowed filter names */\n allowed?: string[];\n /** Default active filter names */\n defaults?: string[];\n /** Excluded filter names */\n excluded?: string[];\n /** Filters definitions */\n filters?: ModelListFilter[];\n}\n\nexport type PaginationParams = IQueryMetaNavParams;\n\nexport interface ModelListParams {\n fields?: FieldsParams;\n filters?: FiltersParams;\n filter?: FilterDefaults | Observable<FilterDefaults>;\n sorter?: SorterDefaults;\n paginator?: IQueryNav;\n keep?: boolean;\n reload?: Subject<void>;\n unsubscribe?: Subject<void>;\n}\n\nexport class ModelList<T extends DataModel> {\n public name!: string;\n public filters!: ModelListFilters;\n public sorter!: ModelListSorter;\n public paginator!: ModelListPaginator;\n public queryset!: Queryset<T>;\n public fields!: ModelListFields<T>;\n public reload!: Subject<void>;\n public unsubscribe!: Subject<void>;\n public started = false;\n\n private _results?: Observable<T[]>;\n private _meta?: Observable<IQueryMeta>;\n private _loading?: Observable<boolean>;\n private _full?: Observable<[T[], boolean, IQueryMeta]>;\n\n constructor(name: string) {\n this.name = name;\n }\n\n public get results(): Observable<T[]> {\n if (!this._results) {\n this._results = this.queryset.results.pipe(\n // tap(() => console.log('RESULTS')),\n share(),\n takeUntil(this.unsubscribe || NEVER)\n );\n }\n return this._results;\n }\n\n public get meta(): Observable<IQueryMeta> {\n if (!this._meta) {\n this._meta = this.queryset.meta.pipe(\n // tap(() => console.log('META')),\n share(),\n takeUntil(this.unsubscribe || NEVER)\n );\n }\n return this._meta;\n }\n\n public get loading(): Observable<boolean> {\n if (!this._loading) {\n this._loading = this.queryset.loading.pipe(\n // tap(() => console.log('LOADING')),\n share(),\n takeUntil(this.unsubscribe || NEVER)\n );\n }\n return this._loading;\n }\n\n public get full(): Observable<[T[], boolean, IQueryMeta]> {\n if (!this._full) {\n this._full = this.queryset.full.pipe(\n // tap(() => console.log('FULL')),\n share(),\n takeUntil(this.unsubscribe || NEVER)\n );\n }\n return this._full;\n }\n\n public start(params: ModelListParams) {\n let filter$: Observable<FilterDefaults>;\n if (params.filter && !params.filter.subscribe) {\n filter$ = of(params.filter as FilterDefaults);\n } else if (params.filter && params.filter.subscribe) {\n filter$ = params.filter as Observable<FilterDefaults>;\n } else {\n filter$ = of({});\n }\n combineLatest([\n this.reload,\n this.filters.output,\n filter$,\n this.paginator.output,\n this.sorter.output,\n this.fields.output,\n ])\n .pipe(\n debounceTime(200),\n switchMap(\n ([reload, filter, manualFilter, paginator, sorter, fields]) => {\n this.queryset\n .filter(filter)\n .filter(manualFilter || {}, true)\n .paginateBy(paginator.page_size)\n .setPage(paginator.page)\n .sort(...sorter)\n .setFields(fields);\n return this.queryset.get(true);\n }\n ),\n takeUntil(this.unsubscribe || NEVER)\n )\n .subscribe({\n next: (results: any): void => {},\n error: (error) => {\n console.error('Error while getting model list results : ', error);\n },\n complete: () => {\n // console.log('modellist:completed', this.name);\n this.started = false;\n },\n });\n this.reload.next();\n this.started = true;\n }\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ModelListService {\n private _instances: Map<string, ModelList<any>> = new Map();\n\n constructor() {}\n\n public get<T extends DataModel>(\n name: string,\n collection: Collection<T>,\n defaults: ModelListParams\n ) {\n let ml: ModelList<T>;\n\n if (!name || !this._instances.has(name) || !defaults.keep) {\n ml = new ModelList<T>(name);\n ml.queryset = collection.queryset();\n ml.fields = new ModelListFields(collection, defaults.fields);\n ml.sorter = new ModelListSorter(defaults.sorter || []);\n ml.paginator = new ModelListPaginator(defaults.paginator);\n ml.filters = new ModelListFilters(defaults.filters);\n if (defaults.keep) {\n this._instances.set(name, ml);\n }\n } else {\n ml = this._instances.get(name)!;\n }\n if (!ml.started) {\n if (defaults.reload) {\n ml.reload = defaults.reload;\n } else {\n ml.reload = new Subject<void>();\n }\n if (defaults.unsubscribe) {\n ml.unsubscribe = defaults.unsubscribe;\n } else {\n ml.unsubscribe = new Subject<void>();\n }\n ml.start(defaults);\n }\n return ml;\n }\n}\n","import { Component, ElementRef, Input, OnInit, ViewChild } from '@angular/core';\nimport { DataModel } from '../../../data/data-model';\nimport { ModelList } from '../../model-list.service';\nimport {\n CDK_DRAG_CONFIG,\n CdkDragDrop,\n DragDropModule,\n} from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { NgbOffcanvas, NgbOffcanvasModule } from '@ng-bootstrap/ng-bootstrap';\nimport { ModelListField } from '../model-list-fields';\nimport { CdkScrollableModule } from '@angular/cdk/scrolling';\n\nconst DragConfig = {\n dragStartThreshold: 5,\n pointerDirectionChangeThreshold: 10,\n zIndex: 10000,\n};\n\n@Component({\n selector: 'data-model-list-fields-selector',\n templateUrl: './model-list-fields-selector.component.html',\n styleUrls: ['./model-list-fields-selector.component.sass'],\n standalone: true,\n imports: [\n CommonModule,\n DragDropModule,\n CdkScrollableModule,\n NgbOffcanvasModule,\n ],\n providers: [{ provide: CDK_DRAG_CONFIG, useValue: DragConfig }],\n})\nexport class ModelListFieldsSelectorComponent<T extends DataModel>\n implements OnInit\n{\n @Input() public list!: ModelList<T>;\n @ViewChild('selector', { static: true })\n public ofctpl!: ElementRef<HTMLDivElement>;\n constructor(private _ofc: NgbOffcanvas) {}\n\n public ngOnInit() {\n if (!this.list || !this.list.fields) {\n throw new Error('Missing list / fields');\n }\n }\n\n public open() {\n this._ofc.open(this.ofctpl);\n }\n\n drop($event: CdkDragDrop<T, any>) {\n let pos = $event.currentIndex * 10;\n if ($event.currentIndex > $event.previousIndex) {\n pos += 1;\n } else {\n pos -= 1;\n }\n this.list.fields.setPosition($event.item.data, pos);\n }\n\n public toggle(f: ModelListField) {\n if (f.enabled) {\n this.list.fields.disable(f.name);\n } else {\n this.list.fields.enable(f.name);\n }\n }\n}\n","<i class=\"bi bi-list-ul\" (click)=\"open()\" role=\"button\"></i>\n<ng-template #selector let-offcanvas>\n <div class=\"offcanvas-header\">\n <h4 class=\"offcanvas-title\">Choix des champs</h4>\n <button class=\"btn-close\" type=\"button\" aria-label=\"Close\" (click)=\"offcanvas.dismiss('x')\"></button>\n </div>\n <div class=\"offcanvas-body\" cdkScrollable>\n <div class=\"fields-list\" cdkDropList cdkDropListLockAxis=\"y\" (cdkDropListDropped)=\"drop($event)\" *ngIf=\"list.fields.fields|async as fields\">\n <ng-container *ngFor=\"let f of fields\">\n <div class=\"field-box\" cdkDrag (click)=\"toggle(f)\" [cdkDragData]=\"f.name\" [class.enabled]=\"f.enabled\" [class.compact]=\"fields.length&gt;30\">{{f.label}}</div>\n </ng-container>\n </div>\n </div>\n</ng-template>","import { Component, Input } from '@angular/core';\nimport { ModelList } from '../../model-list.service';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'data-model-list-sorter',\n templateUrl: './model-list-sorter.component.html',\n styleUrls: ['./model-list-sorter.component.sass'],\n standalone: true,\n imports: [CommonModule],\n})\nexport class ModelListSorterComponent {\n /**\n * ModelList reference.\n */\n @Input() public list!: ModelList<any>;\n /**\n * Sort field name.\n */\n @Input() public field!: string;\n\n constructor() {}\n\n public isUp(): boolean {\n const f = this.list.sorter.get(this.field);\n if (f) {\n return f.direction === 'asc';\n }\n return false;\n }\n\n public isDown(): boolean {\n const f = this.list.sorter.get(this.field);\n if (f) {\n return f.direction === 'desc';\n }\n return false;\n }\n\n public setUp(): void {\n this.list.sorter.set(this.field, 'asc');\n }\n\n public setDown(): void {\n this.list.sorter.set(this.field, 'desc');\n }\n\n public getCount(): number {\n return this.list.sorter.get(this.field)\n ? this.list.sorter.getAll().length\n : 0;\n }\n\n public getOrder(): number {\n return this.list.sorter.getOrder(this.field);\n }\n\n public cancel(): void {\n this.list.sorter.unset(this.field);\n }\n}\n","<span class=\"dirs\"><span *ngIf=\"getOrder()&gt;=0 || getCount()&gt;1\" (click)=\"cancel()\" role=\"button\"><span class=\"count\" *ngIf=\"getCount()&gt;1\"> {{getOrder()}}</span><span class=\"bi bi-x\"></span></span><span class=\"bi bi-sort-down-alt\" (click)=\"setUp()\" [class.active]=\"isUp()\" role=\"button\"></span><span class=\"bi bi-sort-down\" (click)=\"setDown()\" [class.active]=\"isDown()\" role=\"button\"></span>&nbsp;</span>\n<ng-content></ng-content>","import { Component, Input } from '@angular/core';\nimport { ModelList } from '../../model-list.service';\nimport { DataModel } from '../../../data/data-model';\nimport { ModelListField } from '../model-list-fields';\nimport { CommonModule } from '@angular/common';\nimport { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap';\nimport { ModelListSorterComponent } from '../../model-list-sorter/model-list-sorter/model-list-sorter.component';\n\n@Component({\n selector: 'data-model-list-field-header',\n templateUrl: './model-list-field-header.component.html',\n styleUrls: ['./model-list-field-header.component.sass'],\n standalone: true,\n imports: [CommonModule, NgbDropdownModule, ModelListSorterComponent],\n})\nexport class ModelListFieldHeaderComponent<T extends DataModel> {\n @Input() public list!: ModelList<T>;\n @Input() public field!: string;\n @Input() public sort?: boolean = false;\n @Input() public sortField?: string;\n\n constructor() {}\n\n disable() {\n this.list.fields.disable(this.field);\n }\n\n public enable(f: ModelListField) {\n this.list.fields.move(f.name, 'after', this.field);\n this.list.fields.enable(f.name);\n }\n}\n","\n<ng-template #label><span #ref>\n <ng-content></ng-content></span><span *ngIf=\"!ref.children.length\">{{list.fields.get(field)?.label||field}}</span></ng-template>\n<div class=\"d-flex flex-row justify-content-between slabel\" [class.active]=\"mnu.isOpen()\">\n <div class=\"flex-grow-1\">\n <data-model-list-sorter [list]=\"list\" [field]=\"sortField||field\" *ngIf=\"sort\">\n <ng-container *ngTemplateOutlet=\"label\"></ng-container>\n </data-model-list-sorter>\n <ng-container *ngIf=\"!sort\">\n <ng-container *ngTemplateOutlet=\"label\"></ng-container>\n </ng-container>\n </div>\n <div class=\"navicons d-flex flex-row\"><i class=\"bi bi-caret-left-fill\" role=\"button\" (click)=\"list.fields.move(field, 'before')\"></i>\n <div ngbDropdown #mnu=\"ngbDropdown\"><i class=\"bi bi-record\" ngbDropdownToggle></i>\n <div ngbDropdownMenu>\n <button ngbDropdownItem (click)=\"disable()\"><i class=\"bi bi-trash me-2\"></i>Supprimer</button>\n <h6 class=\"dropdown-header\">Ajouter une colonne après</h6>\n <ng-container *ngFor=\"let f of list.fields.fields|async\">\n <ng-container *ngIf=\"f.allowed &amp;&amp; !f.enabled\">\n <button ngbDropdownItem (click)=\"enable(f)\"><i class=\"bi bi-plus-circle me-2\"></i>{{f.label||f.name}}</button>\n </ng-container>\n </ng-container>\n </div>\n </div><i class=\"bi bi-caret-right-fill\" role=\"button\" (click)=\"list.fields.move(field, 'after')\"></i>\n </div>\n</div>","import { Component, Input } from '@angular/core';\nimport { ModelList } from '../../model-list.service';\nimport { ModelListFilter } from '../model-list-filter';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'data-model-list-filters-select',\n templateUrl: './model-list-filters-select.component.html',\n styleUrls: ['./model-list-filters-select.component.sass'],\n standalone: true,\n imports: [CommonModule],\n})\nexport class ModelListFiltersSelectComponent {\n @Input() public list!: ModelList<any>;\n @Input() public containerClasses: string[] | string = '';\n @Input() public itemActiveClasses: string[] | string =\n 'badge bg-success mx-1';\n @Input() public itemInactiveClasses: string[] | string =\n 'badge bg-secondary mx-1';\n\n constructor() {}\n\n public toggle(f: ModelListFilter) {\n f.enabled = !f.enabled;\n this.list.filters.update();\n }\n}\n","<span *ngFor=\"let f of list.filters.available|async\" (click)=\"toggle(f)\" [ngClass]=\"containerClasses\"><span *ngIf=\"f.enabled\" role=\"button\" [ngClass]=\"itemActiveClasses\"><i class=\"bi bi-check2-square me-2\"></i><span>{{f.label}}</span></span><span *ngIf=\"!f.enabled\" role=\"button\" [ngClass]=\"itemInactiveClasses\"><i class=\"bi bi-square me-2\"></i><span>{{f.label}}</span></span></span>","import { Component, Input, OnInit } from '@angular/core';\nimport { ModelList } from '../../../model-list.service';\nimport { ReactiveFormsModule, UntypedFormControl } from '@angular/forms';\nimport { debounceTime } from 'rxjs';\nimport { ModelListTextFilter } from './model-list-text-filter';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'data-model-list-text-filter',\n templateUrl: './model-list-text-filter.component.html',\n styleUrls: ['./model-list-text-filter.component.sass'],\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n})\nexport class ModelListTextFilterComponent implements OnInit {\n @Input() public list!: ModelList<any>;\n @Input() public filter!: ModelListTextFilter;\n @Input() public classes: string[] | string = '';\n public fc = new UntypedFormControl();\n\n constructor() {}\n\n public ngOnInit() {\n this.filter.valueChanges.subscribe((val) => {\n this.fc.setValue(val, { emitEvent: false });\n });\n this.fc.valueChanges.pipe(debounceTime(250)).subscribe((val) => {\n if (this.filter.set(val, val)) {\n this.list.filters.update();\n }\n });\n }\n\n public disable() {\n this.filter.enabled = false;\n this.list.filters.update();\n }\n}\n","\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <input class=\"form-control\" type=\"text\" [formControl]=\"fc\" [placeholder]=\"filter.help\">\n</div>","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { ModelList } from '../../../model-list.service';\nimport { ModelListAutocompleteFilter } from './model-list-autocomplete-filter';\nimport { TplFun } from '../../../../dispedit/fkselect/fkselect.component';\nimport { DataModel } from '../../../../data/data-model';\nimport {\n debounceTime,\n distinctUntilChanged,\n Observable,\n Subject,\n takeUntil,\n} from 'rxjs';\nimport { ReactiveFormsModule, UntypedFormControl } from '@angular/forms';\nimport { switchMap } from 'rxjs/operators';\nimport { CommonModule } from '@angular/common';\nimport { NgbTypeaheadModule } from '@ng-bootstrap/ng-bootstrap';\n\n@Component({\n selector: 'data-model-list-autocomplete-filter',\n templateUrl: './model-list-autocomplete-filter.component.html',\n styleUrls: ['./model-list-autocomplete-filter.component.sass'],\n standalone: true,\n imports: [CommonModule, NgbTypeaheadModule, ReactiveFormsModule],\n})\nexport class ModelListAutocompleteFilterComponent<T extends DataModel>\n implements OnInit, OnDestroy\n{\n @Input() public list!: ModelList<any>;\n @Input() public filter!: ModelListAutocompleteFilter<T>;\n @Input() public classes: string[] | string = '';\n public fc = new UntypedFormControl();\n public search = this._search.bind(this);\n public display = this._display.bind(this);\n private _tpl!: TplFun<T>;\n private _subscription = new Subject<void>();\n\n constructor() {}\n\n public ngOnInit(): void {\n this._setDisplay();\n this.filter.valueChanges.subscribe((val) => {\n this.fc.setValue(val, { emitEvent: false });\n });\n this.fc.valueChanges.pipe(debounceTime(250)).subscribe((val) => {\n if (this.filter.set(val, val)) {\n this.list.filters.update();\n }\n });\n }\n\n public disable() {\n this.filter.enabled = false;\n this.list.filters.update();\n }\n\n public ngOnDestroy(): void {\n this._subscription.next();\n this._subscription.complete();\n }\n\n public scrollAction($event: any) {\n if (!this.filter.scroll) {\n return;\n }\n const elem =\n $event.currentTarget.nextElementSibling.getElementsByClassName(\n 'active'\n )[0];\n elem.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n }\n\n private _setDisplay() {\n if (this.filter.display) {\n if (this.filter.display && typeof this.filter.display === 'string') {\n this._tpl = (model: T) =>\n `${(model as any)[this.filter.display as string]}`;\n } else if (\n this.filter.display &&\n typeof this.filter.display === 'function'\n ) {\n this._tpl = this.filter.display.bind(this);\n }\n } else {\n this._tpl = (model: T) => {\n if ((model as any)._display) {\n return (model as any)._display;\n } else {\n return `${\n (model as any)['name'] ||\n (model as any)['title'] ||\n (model as any)['id']\n }`;\n }\n };\n }\n }\n\n /**\n * Display function. Uses descfield or desc tpl (lodash template using model fields).\n */\n private _display(x: any): any {\n if (x) {\n return this._tpl(x);\n }\n return '';\n }\n\n private _search(text$: Observable<string>): Observable<T[]> {\n return text$.pipe(\n takeUntil(this._subscription),\n debounceTime(750),\n distinctUntilChanged(),\n switchMap((term) => {\n const f: any = {};\n for (const k of Object.keys(this.filter.filter)) {\n if (\n this.filter.filter[k] !== null ||\n this.filter.filter[k] !== undefined\n ) {\n f[k] = this.filter.filter[k];\n }\n }\n f[this.filter.searchparam] = term;\n this.filter.queryset?.filter(f);\n return this.filter.queryset.get();\n })\n );\n }\n}\n","\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <input class=\"form-control\" [formControl]=\"fc\" [ngbTypeahead]=\"search\" [editable]=\"false\" [focusFirst]=\"true\" [inputFormatter]=\"display\" [resultFormatter]=\"display\" [placeholder]=\"filter.help\" (keyup.arrowDown)=\"scrollAction($event)\" (keyup.arrowUp)=\"scrollAction($event)\" #th=\"ngbTypeahead\" [class.tascroll]=\"filter.scroll\">\n</div>","import { Component, Input } from '@angular/core';\nimport { ModelListAutocompleteMultiFilter } from './model-list-autocomplete-multi-filter';\nimport { DataModel } from '../../../../data/data-model';\nimport { ModelListAutocompleteFilterComponent } from '../model-list-autocomplete-filter/model-list-autocomplete-filter.component';\nimport { CommonModule } from '@angular/common';\nimport { NgbTypeaheadModule } from '@ng-bootstrap/ng-bootstrap';\nimport { ReactiveFormsModule } from '@angular/forms';\n\n@Component({\n selector: 'data-model-list-autocomplete-multi-filter',\n templateUrl: './model-list-autocomplete-multi-filter.component.html',\n styleUrls: ['./model-list-autocomplete-multi-filter.component.sass'],\n standalone: true,\n imports: [CommonModule, NgbTypeaheadModule, ReactiveFormsModule],\n})\nexport class ModelListAutocompleteMultiFilterComponent<\n T extends DataModel\n> extends ModelListAutocompleteFilterComponent<T> {\n @Input() public override filter!: ModelListAutocompleteMultiFilter<T>;\n\n public unsetValue(value: T) {\n if (this.filter.unset(value)) {\n this.list.filters.update();\n }\n }\n}\n","\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <input class=\"form-control\" [formControl]=\"fc\" [ngbTypeahead]=\"search\" [editable]=\"false\" [focusFirst]=\"true\" [inputFormatter]=\"display\" [resultFormatter]=\"display\" [placeholder]=\"filter.help\" (keyup.arrowDown)=\"scrollAction($event)\" (keyup.arrowUp)=\"scrollAction($event)\" #th=\"ngbTypeahead\" [class.tascroll]=\"filter.scroll\">\n <div class=\"mt-1\" *ngIf=\"filter.values.length\">\n <div *ngFor=\"let v of filter.values\" role=\"button\" (click)=\"unsetValue(v.value)\"><i class=\"bi bi-trash me-2\"></i>{{display(v.value)}}</div>\n </div>\n</div>","import { Component, Input } from '@angular/core';\nimport { ModelList } from '../../../model-list.service';\nimport { ModelListDatetimeFilter } from './model-list-datetime-filter';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'data-model-list-datetime-filter',\n templateUrl: './model-list-datetime-filter.component.html',\n styleUrls: ['./model-list-datetime-filter.component.sass'],\n standalone: true,\n imports: [CommonModule],\n})\nexport class ModelListDatetimeFilterComponent {\n @Input() public list!: ModelList<any>;\n @Input() public filter!: ModelListDatetimeFilter;\n @Input() public classes: string[] | string = '';\n\n constructor() {}\n}\n","<p>model-list-datetime-filter works!</p>","import { Component, Input } from '@angular/core';\nimport { ModelList } from '../../../model-list.service';\nimport { ModelListDatetimerangeFilter } from './model-list-datetimerange-filter';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'data-model-list-datetime-range-filter',\n templateUrl: './model-list-datetime-range-filter.component.html',\n styleUrls: ['./model-list-datetime-range-filter.component.sass'],\n standalone: true,\n imports: [CommonModule],\n})\nexport class ModelListDatetimeRangeFilterComponent {\n @Input() public list!: ModelList<any>;\n @Input() public filter!: ModelListDatetimerangeFilter;\n @Input() public classes: string[] | string = '';\n\n constructor() {}\n}\n","<p>model-list-datetime-range-filter works!</p>","import { Component, Input } from '@angular/core';\nimport { ModelList } from '../../../model-list.service';\nimport { ModelListFlagsFilter } from './model-list-flags-filter';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'data-model-list-flags-filter',\n templateUrl: './model-list-flags-filter.component.html',\n styleUrls: ['./model-list-flags-filter.component.sass'],\n standalone: true,\n imports: [CommonModule],\n})\nexport class ModelListFlagsFilterComponent {\n @Input() public list!: ModelList<any>;\n @Input() public filter!: ModelListFlagsFilter;\n @Input() public classes: string[] | string = '';\n\n constructor() {}\n}\n","<p>model-list-flags-filter works!</p>","import { Component, Input } from '@angular/core';\nimport { ModelList } from '../../../model-list.service';\nimport { ModelListGeodistanceFilter } from './model-list-geodistance-filter';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'data-model-list-geodistance-filter',\n templateUrl: './model-list-geodistance-filter.component.html',\n styleUrls: ['./model-list-geodistance-filter.component.sass'],\n standalone: true,\n imports: [CommonModule],\n})\nexport class ModelListGeodistanceFilterComponent {\n @Input() public list!: ModelList<any>;\n @Input() public filter!: ModelListGeodistanceFilter;\n @Input() public classes: string[] | string = '';\n\n constructor() {}\n}\n","<p>model-list-geodistance-filter works!</p>","import { Component, Input, OnInit } from '@angular/core';\nimport { ModelList } from '../../../model-list.service';\nimport { ModelListSelectFilter } from './model-list-select-filter';\nimport { debounceTime } from 'rxjs';\nimport { ReactiveFormsModule, UntypedFormControl } from '@angular/forms';\nimport { DataModel } from '../../../../data/data-model';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'data-model-list-select-filter',\n templateUrl: './model-list-select-filter.component.html',\n styleUrls: ['./model-list-select-filter.component.sass'],\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n})\nexport class ModelListSelectFilterComponent<T extends DataModel>\n implements OnInit\n{\n @Input() public list!: ModelList<T>;\n @Input() public filter!: ModelListSelectFilter<T>;\n @Input() public classes: string[] | string = '';\n public fc = new UntypedFormControl();\n\n constructor() {}\n\n public ngOnInit() {\n this.filter.valueChanges.subscribe((val) => {\n this.fc.setValue(val, { emitEvent: false });\n });\n this.fc.valueChanges.pipe(debounceTime(250)).subscribe((val) => {\n for (const ch of this.filter.choices) {\n if (ch.value === val) {\n if (this.filter.set(ch.value, ch.desc)) {\n this.list.filters.update();\n break;\n }\n }\n }\n });\n }\n\n public disable() {\n this.filter.enabled = false;\n this.list.filters.update();\n }\n}\n","\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <select class=\"form-select\" [formControl]=\"fc\">\n <option *ngFor=\"let c of filter.choices\" [ngValue]=\"c.value\">{{c.desc}}</option>\n </select>\n</div>","import { Component, Input } from '@angular/core';\nimport { ModelList } from '../../../model-list.service';\nimport { ModelListSelectMultiFilter } from './model-list-select-multi-filter';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'data-model-list-select-multi-filter',\n templateUrl: './model-list-select-multi-filter.component.html',\n styleUrls: ['./model-list-select-multi-filter.component.sass'],\n standalone: true,\n imports: [CommonModule],\n})\nexport class ModelListSelectMultiFilterComponent {\n @Input() public list!: ModelList<any>;\n @Input() public filter!: ModelListSelectMultiFilter;\n @Input() public classes: string[] | string = '';\n\n constructor() {}\n}\n","<p>model-list-select-multi-filter works!</p>","import { Component, Input } from '@angular/core';\nimport { ModelList } from '../../../model-list.service';\nimport { ModelListTreeFilter } from './model-list-tree-filter';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'data-model-list-tree-filter',\n templateUrl: './model-list-tree-filter.component.html',\n styleUrls: ['./model-list-tree-filter.component.sass'],\n standalone: true,\n imports: [CommonModule],\n})\nexport class ModelListTreeFilterComponent {\n @Input() public list!: ModelList<any>;\n @Input() public filter!: ModelListTreeFilter;\n @Input() public classes: string[] | string = '';\n\n constructor() {}\n}\n","<p>model-list-tree-filter works!</p>","import { Component, Input, OnInit } from '@angular/core';\nimport { ModelList } from '../../../model-list.service';\nimport { ReactiveFormsModule, UntypedFormControl } from '@angular/forms';\nimport { debounceTime } from 'rxjs';\nimport { ModelListNumberFilter } from './model-list-number-filter';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'data-model-list-number-filter',\n templateUrl: './model-list-number-filter.component.html',\n styleUrls: ['./model-list-number-filter.component.sass'],\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n})\nexport class ModelListNumberFilterComponent implements OnInit {\n @Input() public list!: ModelList<any>;\n @Input() public filter!: ModelListNumberFilter;\n @Input() public classes: string[] | string = '';\n public fc = new UntypedFormControl();\n\n constructor() {}\n\n public ngOnInit() {\n this.filter.valueChanges.subscribe((val) => {\n this.fc.setValue(val, { emitEvent: false });\n });\n this.fc.valueChanges.pipe(debounceTime(250)).subscribe((val) => {\n if (this.filter.set(val, val)) {\n this.list.filters.update();\n }\n });\n }\n\n public disable() {\n this.filter.enabled = false;\n this.list.filters.update();\n }\n\n selectOp(eq: string) {\n this.filter.setOperator(eq);\n this.list.filters.update();\n }\n}\n","\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\">\n <div class=\"bi bi-trash\"></div>\n </div>\n <label>{{filter.label}}</label>\n <div class=\"input-group\" ngbDropdown>\n <button class=\"btn btn-outline-secondary\" type=\"button\" ngbDropdownToggle><span class=\"me-2\">{{filter.operator.label}}</span>\n <div class=\"dropdown-menu\" ngbDropdownMenu>\n <button ngbDropdownItem *ngFor=\"let op of filter.operations\" (click)=\"selectOp(op.operator)\" [class.text-primary]=\"op.operator === filter.operator.operator\">{{op.label}}</button>\n </div>\n </button>\n <input class=\"form-control\" type=\"number\" [formControl]=\"fc\" [placeholder]=\"filter.help\">\n </div>\n</div>","import { Component, Input } from '@angular/core';\nimport { ModelList } from '../../model-list.service';\nimport { CommonModule } from '@angular/common';\nimport { ModelListTextFilterComponent } from '../filters/model-list-text-filter/model-list-text-filter.component';\nimport { ModelListAutocompleteFilterComponent } from '../filters/model-list-autocomplete-filter/model-list-autocomplete-filter.component';\nimport { ModelListAutocompleteMultiFilterComponent } from '../filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component';\nimport { ModelListDatetimeFilterComponent } from '../filters/model-list-datetime-filter/model-list-datetime-filter.component';\nimport { ModelListDatetimeRangeFilterComponent } from '../filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component';\nimport { ModelListFlagsFilterComponent } from '../filters/model-list-flags-filter/model-list-flags-filter.component';\nimport { ModelListGeodistanceFilterComponent } from '../filters/model-list-geodistance-filter/model-list-geodistance-filter.component';\nimport { ModelListSelectFilterComponent } from '../filters/model-list-select-filter/model-list-select-filter.component';\nimport { ModelListSelectMultiFilterComponent } from '../filters/model-list-select-multi-filter/model-list-select-multi-filter.component';\nimport { ModelListTreeFilterComponent } from '../filters/model-list-tree-filter/model-list-tree-filter.component';\nimport { ModelListNumberFilterComponent } from '../filters/model-list-number-filter/model-list-number-filter.component';\n\n// FIXME: register filter components and load them dynamically to allow user defined filters\n\n@Component({\n selector: 'data-model-list-filters',\n templateUrl: './model-list-filters.component.html',\n styleUrls: ['./model-list-filters.component.sass'],\n standalone: true,\n imports: [\n CommonModule,\n ModelListTextFilterComponent,\n ModelListNumberFilterComponent,\n ModelListAutocompleteFilterComponent,\n ModelListAutocompleteMultiFilterComponent,\n ModelListDatetimeFilterComponent,\n ModelListDatetimeRangeFilterComponent,\n ModelListFlagsFilterComponent,\n ModelListGeodistanceFilterComponent,\n ModelListSelectFilterComponent,\n ModelListSelectMultiFilterComponent,\n ModelListTreeFilterComponent,\n ],\n})\nexport class ModelListFiltersComponent {\n @Input() public list!: ModelList<any>;\n @Input() public containerClasses: string[] | string = '';\n @Input() public itemClasses: string[] | string = '';\n}\n","\n<div [ngClass]=\"containerClasses\">\n <ng-container *ngFor=\"let f of list.filters.enabled|async\">\n <ng-container [ngSwitch]=\"f.type\">\n <data-model-list-autocomplete-filter *ngSwitchCase=\"'autocomplete'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-autocomplete-filter>\n <data-model-list-autocomplete-multi-filter *ngSwitchCase=\"'autocompletemulti'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-autocomplete-multi-filter>\n <data-model-list-datetime-filter *ngSwitchCase=\"'datetime'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-datetime-filter>\n <data-model-list-datetime-range-filter *ngSwitchCase=\"'datetimerange'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-datetime-range-filter>\n <data-model-list-flags-filter *ngSwitchCase=\"'flags'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-flags-filter>\n <data-model-list-geodistance-filter *ngSwitchCase=\"'geodistance'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-geodistance-filter>\n <data-model-list-number-filter *ngSwitchCase=\"'number'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-number-filter>\n <data-model-list-select-filter *ngSwitchCase=\"'select'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-select-filter>\n <data-model-list-select-multi-filter *ngSwitchCase=\"'selectmulti'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-select-multi-filter>\n <data-model-list-text-filter *ngSwitchCase=\"'text'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-text-filter>\n <data-model-list-tree-filter *ngSwitchCase=\"'tree'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-tree-filter>\n </ng-container>\n </ng-container>\n</div>","import { FilterData } from '../../data/data-query';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { FILTER_TYPE } from './filters/filtertypes';\n\nexport interface ModelListFilterParams {\n name: string;\n field: string;\n label?: string;\n help?: string;\n value?: any;\n desc?: any;\n displayClasses?: string[] | string;\n}\n\nexport class ModelListFilter implements ModelListFilterParams {\n public name: string;\n public field: string;\n public label: string;\n public help: string;\n public value?: any;\n public desc?: any;\n public type: FILTER_TYPE;\n public allowed: boolean;\n public enabled: boolean;\n public displayClasses?: string[] | string;\n public pristine = true;\n private _value = new ReplaySubject<any>(1);\n\n constructor(params: ModelListFilterParams) {\n this.name = params.name;\n this.field = params.field;\n this.label = params.label || '';\n this.help = params.help || '';\n this.value = params.value;\n this.desc = params.desc;\n this.displayClasses = params.displayClasses;\n this.allowed = false;\n this.enabled = false;\n this.type = 'text';\n }\n\n public get valueChanges(): Observable<any> {\n return this._value.asObservable();\n }\n\n public set(value: any, desc: string, notify: boolean = true): boolean {\n if (value !== this.value) {\n this.desc = desc;\n this.value = value;\n this.pristine = false;\n if (notify) {\n this._value.next(value);\n }\n return true;\n }\n return false;\n }\n\n public updateFilter(filter: FilterData): void {\n if (this.value !== undefined && this.value !== null) {\n filter[this.field] = this.getValue();\n }\n }\n\n public getValue(): string | number {\n return `${this.value}`;\n }\n}\n","import {\n ModelListFilter,\n ModelListFilterParams,\n} from '../../model-list-filter';\nimport { DataModel } from '../../../../data/data-model';\nimport { Collection } from '../../../../data/data-collection';\nimport { FilterData, Queryset } from '../../../../data/data-query';\nimport { TplFun } from '../../../../dispedit/fkselect/fkselect.component';\n\nexport interface ModelListAutocompleteParams<T extends DataModel>\n extends ModelListFilterParams {\n collection?: Collection<T>;\n queryset?: Queryset<T>;\n searchparam?: string;\n display?: string | TplFun<T>;\n filter?: FilterData;\n scroll?: boolean;\n}\n\nexport class ModelListAutocompleteFilter<T extends DataModel>\n extends ModelListFilter\n implements ModelListAutocompleteParams<T>\n{\n public display?: string | TplFun<T>;\n public searchparam!: string;\n public queryset!: Queryset<T>;\n public collection?: Collection<T>;\n public filter!: FilterData;\n public scroll!: boolean;\n public override value?: T;\n\n constructor(params: ModelListAutocompleteParams<T>) {\n super(params);\n this.type = 'autocomplete';\n this.display = params.display;\n this.searchparam = params.searchparam ? params.searchparam : 'search';\n if (!params.collection && !params.queryset) {\n throw 'Missing related data (collection or queryset)';\n }\n this.collection = params.collection;\n if (params.collection && !params.queryset) {\n this.queryset = params.collection.queryset();\n } else {\n this.queryset = params.queryset as Queryset<T>;\n }\n this.scroll = params.scroll !== undefined ? params.scroll : true;\n this.filter = params.filter || {};\n\n if (this.label == '') {\n this.label = 'Sélectionnez par texte';\n }\n if (this.help == '') {\n this.help = 'Recherche par texte';\n }\n }\n\n public override getValue(): string | number {\n return `${this.value?.id}`;\n }\n}\n","import {\n ModelListAutocompleteFilter,\n ModelListAutocompleteParams,\n} from '../model-list-autocomplete-filter/model-list-autocomplete-filter';\nimport { DataModel } from '../../../../data/data-model';\n\nexport interface ModelListAutocompleteMultiParams<T extends DataModel>\n extends ModelListAutocompleteParams<T> {}\n\nexport class ModelListAutocompleteMultiFilter<\n T extends DataModel\n> extends ModelListAutocompleteFilter<T> {\n public values: { value: T; desc: string }[] = [];\n\n constructor(params: ModelListAutocompleteMultiParams<T>) {\n super(params as ModelListAutocompleteParams<T>);\n this.type = 'autocompletemulti';\n }\n\n public override set(value: any, desc: string, notify = false): boolean {\n const res = super.set(value, desc, false);\n if (res && this.value && this._getValuePos(this.value) === -1) {\n this.values.push({ value: this.value, desc: this.desc });\n }\n return res;\n }\n\n public unset(value: T): boolean {\n const found = this._getValuePos(value);\n if (found !== -1) {\n this.values.splice(found, 1);\n return true;\n }\n return false;\n }\n\n public override getValue(): string | number {\n const ids: number[] = [];\n for (const vl of this.values) {\n ids.push(vl.value.id);\n }\n return ids.join(',');\n }\n\n private _getValuePos(value: T): number {\n let found = -1;\n for (let i = 0; i < this.values.length; i++) {\n if (this.values[i].value.id === value.id) {\n found = i;\n }\n }\n return found;\n }\n}\n","import {ModelListFilter, ModelListFilterParams} from \"../../model-list-filter\";\n\nexport class ModelListDatetimeFilter extends ModelListFilter {\n constructor(params: ModelListFilterParams) {\n super(params);\n this.type = \"datetime\";\n if (this.label == \"\") {\n this.label = \"Sélectionnez par date/heure\";\n }\n if (this.help == \"\") {\n this.help = \"Date/heure cible\";\n }\n }\n}\n","import {ModelListFilter, ModelListFilterParams} from \"../../model-list-filter\";\n\nexport class ModelListDatetimerangeFilter extends ModelListFilter {\n constructor(params: ModelListFilterParams) {\n super(params);\n this.type = \"datetimerange\";\n if (this.label == \"\") {\n this.label = \"Sélectionnez par intervalle de date/heure\";\n }\n if (this.help == \"\") {\n this.help = \"Date/heure\";\n }\n }\n}\n","import {ModelListFilter, ModelListFilterParams} from \"../../model-list-filter\";\n\nexport class ModelListFlagsFilter extends ModelListFilter {\n constructor(params: ModelListFilterParams) {\n super(params);\n this.type = \"flags\";\n if (this.label == \"\") {\n this.label = \"Sélectionnez par étiquette\";\n }\n if (this.help == \"\") {\n this.help = \"Nom de l'étiquette\";\n }\n }\n}\n","import {ModelListFilter, ModelListFilterParams} from \"../../model-list-filter\";\n\nexport class ModelListGeodistanceFilter extends ModelListFilter {\n constructor(params: ModelListFilterParams) {\n super(params);\n this.type = \"geodistance\";\n if (this.label == \"\") {\n this.label = \"Par distance autour d'un point\";\n }\n if (this.help == \"\") {\n this.help = \"Ville & distance\";\n }\n }\n}\n","import {\n ModelListFilter,\n ModelListFilterParams,\n} from '../../model-list-filter';\nimport { FilterData } from '../../../../data/data-query';\n\ninterface OperationDescriptor {\n name: string;\n label: string;\n operator: string;\n}\n\nexport const ModelListNumberOperations: OperationDescriptor[] = [\n { name: 'eq', label: '= (égal)', operator: '' },\n { name: 'lt', label: '< (inférieur)', operator: '_lt' },\n { name: 'gt', label: '> (supérieur)', operator: '_gt' },\n { name: 'lte', label: '<= (inférieur ou égal)', operator: '_lte' },\n { name: 'gte', label: '>= (supérieur ou égal)', operator: '_gte' },\n];\n\nexport interface ModelListNumberFilterParams extends ModelListFilterParams {\n operations?: string[];\n}\n\nexport class ModelListNumberFilter extends ModelListFilter {\n public operator = ModelListNumberOperations[0];\n public operations = ModelListNumberOperations;\n\n constructor(params: ModelListNumberFilterParams) {\n super(params as ModelListFilterParams);\n this.type = 'number';\n if (this.label == '') {\n this.label = 'Recherche par valeur';\n }\n if (this.help == '') {\n this.help = 'Valeur à rechercher';\n }\n const ops: OperationDescriptor[] = [];\n if (params.operations && params.operations.length > 0) {\n for (const op of params.operations) {\n for (const dop of this.operations) {\n if (op === dop.name) {\n ops.push(dop);\n }\n }\n }\n if (ops.length > 0) {\n this.operations = ops;\n this.operator = ops[0];\n }\n }\n }\n\n public setOperator(op: string) {\n for (let o of this.operations) {\n if (op === o.operator) {\n this.operator = o;\n }\n }\n }\n\n public override updateFilter(filter: FilterData): void {\n if (this.value !== undefined && this.value !== null) {\n filter[`${this.field}${this.operator.operator}`] = this.getValue();\n }\n }\n}\n","import {\n ModelListFilter,\n ModelListFilterParams,\n} from '../../model-list-filter';\nimport { IDispEditChoice } from '../../../../dispedit/dispedit/dispedit.constants';\nimport { DataModel } from '../../../../data/data-model';\nimport { DataModelType } from '../../../../data/data-collection';\n\nexport interface ModelListSelectFilterParams<T extends DataModel>\n extends ModelListFilterParams {\n choices?: IDispEditChoice[];\n model?: DataModelType<T>;\n mfield?: string;\n}\n\nexport class ModelListSelectFilter<T extends DataModel>\n extends ModelListFilter\n implements ModelListSelectFilterParams<T>\n{\n public choices!: IDispEditChoice[];\n public model?: DataModelType<T>;\n public mfield?: string;\n public override value?: T;\n\n constructor(params: ModelListSelectFilterParams<T>) {\n super(params);\n this.type = 'select';\n if (this.label == '') {\n this.label = 'Sélectionnez un élément';\n }\n if (this.help == '') {\n this.help = 'Texte à rechercher';\n }\n if (!params.choices && !params.model) {\n throw 'Missing choices for select filter';\n }\n if (!params.choices && params.model) {\n const m = new params.model();\n const f = m.FM(params.mfield || params.field);\n const ch = (f as any).choices;\n if (!ch) {\n throw 'No choices found for model/field';\n }\n this.choices = ch;\n }\n }\n}\n","import {ModelListFilter, ModelListFilterParams} from \"../../model-list-filter\";\n\nexport class ModelListSelectMultiFilter extends ModelListFilter {\n constructor(params: ModelListFilterParams) {\n super(params);\n this.type = \"selectmulti\";\n if (this.label == \"\") {\n this.label = \"Sélectionnez un élément\";\n }\n if (this.help == \"\") {\n this.help = \"Texte à rechercher\";\n }\n }\n}\n","import {ModelListFilter, ModelListFilterParams} from \"../../model-list-filter\";\n\nexport class ModelListTextFilter extends ModelListFilter {\n constructor(params: ModelListFilterParams) {\n super(params);\n this.type = \"text\";\n if (this.label == \"\") {\n this.label = \"Recherche par texte\";\n }\n if (this.help == \"\") {\n this.help = \"Texte à rechercher\";\n }\n }\n}\n","import {ModelListFilter, ModelListFilterParams} from \"../../model-list-filter\";\n\nexport class ModelListTreeFilter extends ModelListFilter {\n constructor(params: ModelListFilterParams) {\n super(params);\n this.type = \"tree\";\n if (this.label == \"\") {\n this.label = \"Sélectionnez dans la hiérarchie\";\n }\n if (this.help == \"\") {\n this.help = \"Texte à rechercher\";\n }\n }\n}\n","import { Component, Input, OnChanges, OnDestroy } from '@angular/core';\nimport { ModelList } from '../../model-list.service';\nimport {\n FormControl,\n ReactiveFormsModule,\n UntypedFormControl,\n} from '@angular/forms';\nimport { debounceTime, Subject, takeUntil } from 'rxjs';\nimport { NgbPaginationModule } from '@ng-bootstrap/ng-bootstrap';\nimport { CommonModule } from '@angular/common';\nimport { DataSource } from '@angular/cdk/collections';\nimport { DataModel } from '../../../data/data-model';\n\n@Component({\n selector: 'data-model-list-paginator',\n templateUrl: './model-list-paginator.component.html',\n styleUrls: ['./model-list-paginator.component.sass'],\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, NgbPaginationModule],\n})\nexport class ModelListPaginatorComponent<T extends DataModel>\n implements OnDestroy, OnChanges\n{\n @Input() public list!: ModelList<T>;\n @Input() public maxPages = 200;\n @Input() public hide = false;\n\n public perPageControl: FormControl = new FormControl<number>(10);\n public showDirectAccess = false;\n public directAccess: FormControl = new FormControl<number>(0);\n public curPage = 1;\n public curCount!: number;\n public pageSize!: number;\n public _unsubscribe = new Subject<void>();\n\n public onPageChange(page: number): void {\n if (!page) {\n return;\n }\n this.list.paginator.setPage(page);\n }\n\n public ngOnDestroy(): void {\n this._unsubscribe.next();\n this._unsubscribe.complete();\n }\n\n public ngOnChanges(): void {\n if (this.list) {\n this.perPageControl.setValue(this.list.paginator.getPageSize(), {\n emitEvent: false,\n });\n this.list.meta.pipe(takeUntil(this._unsubscribe)).subscribe((meta) => {\n if (meta.nav) {\n this.list.paginator.updatePage(meta.nav.page || 1);\n this.curPage = meta.nav.page || 1;\n this.curCount = meta.nav.count;\n this.list.paginator.updatePageSize(meta.nav.size);\n this.pageSize = this.list.paginator.getPageSize();\n this.perPageControl.setValue(this.pageSize, { emitEvent: false });\n }\n });\n\n this.perPageControl.valueChanges\n .pipe(takeUntil(this._unsubscribe))\n .subscribe((count) => {\n this.list.paginator.setPageSize(count);\n });\n\n this.directAccess.valueChanges\n .pipe(takeUntil(this._unsubscribe), debounceTime(400))\n .subscribe((count) => {\n this.list.paginator.setPage(+count);\n });\n }\n }\n}\n","\n<div class=\"row\" *ngIf=\"!hide\">\n <div class=\"col-sm-4\">\n <select class=\"form-select perpage\" [formControl]=\"perPageControl\">\n <option value=\"10\" *ngIf=\"maxPages&gt;=10\">10 / page</option>\n <option value=\"20\" *ngIf=\"maxPages&gt;=20\">20 / page</option>\n <option value=\"50\" *ngIf=\"maxPages&gt;=50\">50 / page</option>\n <option value=\"100\" *ngIf=\"maxPages&gt;=100\">100 / page</option>\n <option value=\"200\" *ngIf=\"maxPages&gt;=200\">200 / page</option>\n <option value=\"500\" *ngIf=\"maxPages&gt;=500\">500 / page</option>\n <option value=\"1000\" *ngIf=\"maxPages&gt;=1000\">1000 / page</option>\n <option value=\"2000\" *ngIf=\"maxPages&gt;=2000\">2000 / page</option>\n <option value=\"5000\" *ngIf=\"maxPages&gt;=5000\">5000 / page</option>\n <option value=\"10000\" *ngIf=\"maxPages&gt;=10000\">10000 / page</option>\n </select>\n </div>\n <div class=\"col-sm-5 pagination\" *ngIf=\"list\">\n <div class=\"text-xs-center\">\n <ngb-pagination [pageSize]=\"pageSize\" [collectionSize]=\"curCount\" [page]=\"curPage\" (pageChange)=\"onPageChange($event)\" [maxSize]=\"5\" [rotate]=\"true\"></ngb-pagination>\n </div>\n </div>\n <div class=\"col-sm-3 results\">\n <div>{{curCount}} résultats -<span (click)=\"showDirectAccess=!showDirectAccess\" role=\"button\">acces direct</span></div>\n <div *ngIf=\"showDirectAccess\">\n <input class=\"form-control\" [formControl]=\"directAccess\" type=\"number\" placeholder=\"Aller à la page\">\n </div>\n </div>\n</div>","import {Inject, Injectable, InjectionToken, NgZone, Optional} from \"@angular/core\";\nimport {Observable, ReplaySubject, Subscription, timer} from \"rxjs\";\n\nexport const enum TYPE {\n SUCCESS, INFO, WARNING, DANGER\n}\n\nexport enum DEFAULT_TIMEOUTS {\n SUCCESS = 3000,\n INFO = 4000,\n WARNING = 10000,\n DANGER = 30000\n}\n\nexport enum STATUS {\n UNDISP, DISP, ACK\n}\n\nconst DEFAULT_MESSAGE_TIMEOUT = 5000;\n\nexport interface ISoundTypes {\n [index: string]: string\n}\n\nexport const DATA_MESSAGE_SOUNDS = new InjectionToken<ISoundTypes>(\"data.message.sounds\");\n\n\nexport class Message {\n public status: string = STATUS[STATUS.UNDISP];\n public showTrace = false;\n\n constructor(public title: string,\n public type: TYPE = TYPE.INFO,\n public message: string = \"\",\n public trace: any = null,\n public ttl: number = DEFAULT_MESSAGE_TIMEOUT) {\n }\n\n public get style(): string {\n if (this.type === TYPE.DANGER) {\n return \"alert alert-dismissible alert-danger\";\n }\n if (this.type === TYPE.INFO) {\n return \"alert alert-dismissible alert-info\";\n }\n if (this.type === TYPE.WARNING) {\n return \"alert alert-dismissible alert-warning\";\n }\n if (this.type === TYPE.SUCCESS) {\n return \"alert alert-dismissible alert-success\";\n }\n return \"alert alert-dismissible alert-success\";\n }\n\n public ack(): void {\n this.status = STATUS[STATUS.ACK];\n }\n}\n\n\n@Injectable({\n providedIn: \"root\"\n})\nexport class DataMessageService {\n public _messages$: ReplaySubject<Message[]> = new ReplaySubject<Message[]>(1);\n private _messages: Message[] = [];\n private _timer!: Observable<any>;\n private _subscription!: Subscription;\n\n constructor(public ngZone: NgZone,\n @Optional() @Inject(DATA_MESSAGE_SOUNDS) public sounds: ISoundTypes) {\n this.init();\n }\n\n public get current(): Observable<Message[]> {\n return this._messages$.asObservable();\n }\n\n public init(): void {\n let changed = false;\n if (!this._timer) {\n this.ngZone.runOutsideAngular(() => {\n this._timer = timer(500, 500);\n this._subscription = this._timer.subscribe(() => {\n for (const m of this._messages) {\n m.ttl -= 500;\n if (m.ttl <= 0) {\n changed = true;\n }\n }\n if (changed) {\n this.ngZone.run(() => {\n const out: Message[] = [];\n for (const m of this._messages) {\n if (m.ttl >= 0) {\n out.push(m);\n }\n }\n this._messages = out;\n this._notify();\n });\n }\n });\n });\n }\n }\n\n public close(): void {\n this._subscription.unsubscribe();\n }\n\n public success(title: string, message: string = \"\", trace: any = null, timeout: number = DEFAULT_TIMEOUTS.SUCCESS): void {\n this._messages.push(new Message(title, TYPE.SUCCESS, message, trace, timeout));\n this.play(\"success\");\n this._notify();\n }\n\n public info(title: string, message: string = \"\", trace: any = null, timeout: number = DEFAULT_TIMEOUTS.INFO): void {\n this._messages.push(new Message(title, TYPE.INFO, message, trace, timeout));\n this.play(\"info\");\n this._notify();\n }\n\n public warning(title: string, message: string = \"\", trace: any = null, timeout: number = DEFAULT_TIMEOUTS.WARNING): void {\n this._messages.push(new Message(title, TYPE.WARNING, message, trace, timeout));\n this.play(\"warning\")\n this._notify();\n }\n\n public danger(title: string, message: string = \"\", trace: any = null, timeout: number = DEFAULT_TIMEOUTS.DANGER): void {\n this._messages.push(new Message(title, TYPE.DANGER, message, trace, DEFAULT_TIMEOUTS.DANGER));\n this.play(\"error\")\n this._notify();\n }\n\n public error(title: string, message: string = \"\", trace: any = null): void {\n this.danger(title, message, trace);\n }\n\n public debug(title: string, message: string = \"\", trace: any = null): void {\n console.log(title, message, trace);\n }\n\n public ack(message: Message): void {\n message.ack();\n this._notify();\n }\n\n public play(type: string = \"notify\") {\n if (this.sounds && this.sounds[type]) {\n const audio = new Audio(this.sounds[type]);\n audio.play();\n }\n }\n\n private _notify(): void {\n const out: Message[] = [];\n for (const message of this._messages) {\n if ((message.status === STATUS[STATUS.UNDISP]) ||\n (message.status === STATUS[STATUS.DISP])) {\n message.status = STATUS[STATUS.DISP];\n out.push(message);\n }\n }\n this._messages$.next(out);\n }\n\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { DataModel } from '../../data/data-model';\nimport { FilterData, Queryset } from '../../data/data-query';\nimport { Collection } from '../../data/data-collection';\nimport {\n debounceTime,\n distinctUntilChanged,\n Observable,\n Subject,\n takeUntil,\n} from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport { UntypedFormControl } from '@angular/forms';\n\nexport type TplFun<T extends DataModel> = (data: T) => string;\n\n@Component({\n selector: 'data-fkselect',\n templateUrl: './fkselect.component.html',\n styleUrls: ['./fkselect.component.sass'],\n})\nexport class FkselectComponent<T extends DataModel, R extends DataModel>\n implements OnInit, OnDestroy\n{\n // Model field value & update data\n @Input() public model?: T;\n @Input() public field?: string;\n @Input() public edit = false;\n // Raw value\n @Input() public value?: R;\n\n @Input() public queryset?: Queryset<R>;\n @Input() public collection?: Collection<R>;\n @Input() public update: boolean = false;\n @Input() public filter: FilterData = {};\n @Input() public mode: 'autocomplete' | 'select' | 'auto' = 'auto';\n @Input() public display?: string | TplFun<R>;\n @Input() public search = 'search';\n\n // Display\n @Input() public label = '';\n @Input() public placeholder = '';\n @Input() public inputClasses: string[] | string = [];\n\n @Output() public selected = new EventEmitter<T>();\n @Output() public cancelled = new EventEmitter<void>();\n @Output() public cleared = new EventEmitter<void>();\n public fc!: UntypedFormControl;\n public searchFn = this._search.bind(this);\n public displayFn = this._display.bind(this);\n private _subscription = new Subject<void>();\n private _tpl!: TplFun<R>;\n\n constructor() {}\n\n public ngOnDestroy(): void {\n this._subscription.next();\n this._subscription.complete();\n }\n\n public ngOnInit(): void {\n // Create queryset if not given\n // queryset is create through model\n if (!this.queryset && this.collection) {\n this.queryset = this.collection.queryset();\n } else if (!this.queryset && this.model && this.model._collection) {\n this.collection = this.model._collection;\n this.queryset = this.collection.queryset();\n }\n this.fc = new UntypedFormControl('');\n this.fc.valueChanges\n .pipe(takeUntil(this._subscription), distinctUntilChanged())\n .subscribe((value) => {\n if (value) {\n this.selected.emit(value);\n }\n });\n if (this.display) {\n if (this.display && typeof this.display === 'string') {\n this._tpl = (model: R) => `${(model as any)[this.display as string]}`;\n } else if (this.display && typeof this.display === 'function') {\n this._tpl = this.display.bind(this);\n }\n } else {\n this._tpl = (model: R) =>\n `${\n (model as any)['name'] ||\n (model as any)['title'] ||\n (model as any)['id']\n }`;\n }\n }\n\n public clearAction(): void {\n this.cleared.emit();\n }\n\n /**\n * Display function. Uses descfield or desc tpl (lodash template using model fields).\n */\n private _display(x: any): any {\n if (x) {\n if (x._display) {\n if (x._display instanceof Function) {\n return x._display();\n } else {\n return x._display;\n }\n }\n if (this._tpl) {\n return this._tpl(x);\n }\n }\n return '';\n }\n\n private _search(text$: Observable<string>): Observable<any> {\n return text$.pipe(\n takeUntil(this._subscription),\n debounceTime(750),\n distinctUntilChanged(),\n switchMap((term) => {\n const f: any = {};\n for (const k of Object.keys(this.filter)) {\n if (this.filter[k] !== null || this.filter[k] !== undefined) {\n f[k] = this.filter[k];\n }\n }\n f[this.search] = term;\n const qs = this.queryset as Queryset<any>;\n qs.filter(f, true);\n return qs.get();\n })\n );\n }\n}\n","\n<div class=\"form-group\">\n <label *ngIf=\"label\">{{label}}</label>\n <div class=\"input-group\">\n <input class=\"form-control\" [formControl]=\"fc\" [placeholder]=\"placeholder\" [ngbTypeahead]=\"searchFn\" [editable]=\"false\" [focusFirst]=\"true\" [inputFormatter]=\"displayFn\" [resultFormatter]=\"displayFn\" (keyup.escape)=\"cancelled.emit()\">\n <div class=\"input-group-text\"><i class=\"bi bi-trash float-end pointer\" (click)=\"clearAction()\"></i></div>\n </div>\n</div>","import {\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { FilterData, Queryset } from '../../data/data-query';\nimport { Collection } from '../../data/data-collection';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n UntypedFormControl,\n} from '@angular/forms';\nimport {\n debounceTime,\n distinctUntilChanged,\n firstValueFrom,\n Observable,\n Subject,\n takeUntil,\n} from 'rxjs';\nimport { TplFun } from '../fkselect/fkselect.component';\nimport { DataModel } from '../../data/data-model';\nimport { switchMap } from 'rxjs/operators';\n\n@Component({\n selector: 'data-m2mselect',\n templateUrl: './m2mselect.component.html',\n styleUrls: ['./m2mselect.component.sass'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: M2mselectComponent,\n },\n ],\n})\nexport class M2mselectComponent<T extends DataModel, R extends DataModel>\n implements OnDestroy, OnInit, ControlValueAccessor\n{\n // Model field value & update data\n @Input() public model?: T;\n @Input() public field?: string;\n @Input() public edit = false;\n // Raw value\n @Input() public values!: R[];\n public pks: number[] = [];\n public disabled = false;\n // Fk fields, either model / queryset / collection must be given\n @Input() public queryset?: Queryset<R>;\n @Input() public collection?: Collection<R>;\n @Input() public filter: FilterData = {};\n @Input() public mode: 'autocomplete' | 'select' | 'auto' = 'auto';\n @Input() public display?: string | TplFun<R>;\n @Input() public search = 'search';\n // Display\n @Input() public label = '';\n @Input() public placeholder = '';\n @Input() public emptyLabel = '';\n @Input() public inputClasses: string[] | string = [];\n // Outputs\n @Output() public added = new EventEmitter<R>();\n @Output() public removed = new EventEmitter<R>();\n @Output() public cancelled = new EventEmitter<void>();\n @Output() public cleared = new EventEmitter<void>();\n @Output() public detailsChanged = new EventEmitter<R[]>();\n @Output() public changed = new EventEmitter<number[]>();\n\n public fc!: UntypedFormControl;\n public searchFn = this._search.bind(this);\n public displayFn = this._display.bind(this);\n private touched = false;\n private _subscription = new Subject<void>();\n private _tpl!: TplFun<R>;\n\n /**\n * Control value accessor onChange dummy callback;\n * @param fks\n */\n public onChange = (fks: number[]) => {};\n\n /**\n * Control value accessor onTouched dummy callback;\n */\n public onTouched = () => {};\n\n /**\n * On Destroy clears subscriptions.\n */\n public ngOnDestroy(): void {\n this._subscription.next();\n this._subscription.complete();\n }\n\n /**\n * OnChange register from controlValueAccessor\n * @param onChange callback\n */\n registerOnChange(onChange: any) {\n this.onChange = onChange;\n }\n\n /**\n * OnTouched register from controlValueAccessor\n * @param onTouched callback\n */\n registerOnTouched(onTouched: any) {\n this.onTouched = onTouched;\n }\n\n /**\n * OnInit :\n * - ensures queryset is available\n * - creates form control for input\n * - creates display function\n * - ensure values are set from any source\n */\n public ngOnInit(): void {\n // Create queryset if not given\n // queryset is create through model\n if (!this.queryset && this.collection) {\n this.queryset = this.collection.queryset();\n } else if (!this.queryset && this.model && this.model._collection) {\n this.collection = this.model._collection;\n this.queryset = this.collection.queryset();\n }\n if (!this.queryset) {\n throw Error('queryset is mandatory for m2m select');\n }\n // Create form control for typeahead and subscribe for changes\n this.fc = new UntypedFormControl('');\n this.fc.valueChanges\n .pipe(takeUntil(this._subscription), distinctUntilChanged())\n .subscribe((value) => {\n if (value) {\n this.onAdd(value);\n }\n });\n // Set display function\n if (this.display) {\n if (this.display && typeof this.display === 'string') {\n this._tpl = (model: R) => `${(model as any)[this.display as string]}`;\n } else if (this.display && typeof this.display === 'function') {\n this._tpl = this.display.bind(this);\n }\n } else {\n this._tpl = (model: R) =>\n `${\n (model as any)['name'] ||\n (model as any)['title'] ||\n (model as any)['id']\n }`;\n }\n // Get values from model if not already given\n // TODO: check if this is necessary\n if (!this.values && this.model && this.field) {\n this.values = (this.model as any)[this.field + '_details'];\n }\n if (this.values === undefined) {\n console.error('no values available for ', this.model, this.field);\n throw Error('no values available');\n }\n }\n\n /**\n * Remove a value.\n * Emits detailsChanged, changed and removed signals.\n * @param i instance to be removed\n */\n public onRemove(i: R) {\n if (!this.disabled) {\n this.markAsTouched();\n const ps = this.pks.indexOf(i.id);\n this.pks.splice(ps, 1);\n this.values.splice(ps, 1);\n this.detailsChanged.emit(this.values);\n this.changed.emit(this.pks);\n this.removed.emit(i);\n this.onChange(this.pks);\n }\n }\n\n /**\n * Add a value.\n * Emits detailsChanged, changed and added signals.\n * @param i instance to be added.\n */\n public onAdd(i: R) {\n if (!this.disabled) {\n this.markAsTouched();\n this.pks.push(i.id);\n this.values.push(i);\n this.detailsChanged.emit(this.values);\n this.changed.emit(this.pks);\n this.added.emit(i);\n this.onChange(this.pks);\n }\n }\n\n /**\n * Clear all values.\n * Emits detailsChanged, changed and cleared signals.\n */\n public onClear() {\n if (!this.disabled) {\n this.markAsTouched();\n this.pks = [];\n this.values = [];\n this.detailsChanged.emit(this.values);\n this.changed.emit(this.pks);\n this.cleared.emit();\n this.onChange(this.pks);\n }\n }\n\n /**\n * Write value from controlValueAccessor.\n * @param pks\n */\n async writeValue(pks: number[]) {\n this.pks = pks;\n await this._getDisplayValues(pks);\n }\n\n /**\n * Mark as touched.\n */\n public markAsTouched() {\n if (!this.touched) {\n this.onTouched();\n this.touched = true;\n }\n }\n\n /**\n * Mark as disabled.\n * @param disabled\n */\n setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /**\n * Retrieve display values for current set of pks.\n * Eventually fetches items from collection.\n * Emits detailsChanged signal.\n * @param pks list of current pks.\n * @private\n */\n private async _getDisplayValues(pks: number[] = []) {\n const values: R[] = [];\n for (const k of pks) {\n let found = false;\n for (let v of this.values) {\n if (v.id == k) {\n values.push(v);\n found = true;\n break;\n }\n }\n if (!found) {\n if (this.collection) {\n values.push(await firstValueFrom(this.collection.fetch(k)));\n } else {\n values.push({ id: k, _display: 'Unknown' } as any);\n }\n }\n }\n this.values = values;\n this.detailsChanged.next(this.values);\n }\n\n /**\n * Display function. Uses descfield or desc tpl (lodash template using model fields).\n */\n private _display(x: any): any {\n if (x) {\n if (x._display) {\n if (x._display instanceof Function) {\n return x._display();\n } else {\n return x._display;\n }\n }\n if (this._tpl) {\n return this._tpl(x);\n }\n }\n return '';\n }\n\n /**\n * Search function.\n * @param text$\n * @private\n */\n private _search(text$: Observable<string>): Observable<any> {\n return text$.pipe(\n takeUntil(this._subscription),\n debounceTime(750),\n distinctUntilChanged(),\n switchMap((term) => {\n const f: any = {};\n for (const k of Object.keys(this.filter)) {\n if (this.filter[k] !== null || this.filter[k] !== undefined) {\n f[k] = this.filter[k];\n }\n }\n f[this.search] = term;\n const qs = this.queryset as Queryset<any>;\n qs.filter(f, true);\n return qs.get();\n })\n );\n }\n}\n","\n<div class=\"form-group\">\n <label *ngIf=\"label\">{{label}}</label>\n <div class=\"input-group\">\n <input class=\"form-control\" [formControl]=\"fc\" [placeholder]=\"placeholder\" [ngbTypeahead]=\"searchFn\" [editable]=\"false\" [focusFirst]=\"true\" [inputFormatter]=\"displayFn\" [resultFormatter]=\"displayFn\" (keyup.escape)=\"cancelled.emit()\">\n <div class=\"input-group-text\"><i class=\"bi bi-trash float-end pointer\" (click)=\"cleared.emit()\"></i></div>\n </div>\n <div *ngFor=\"let i of values\"><i class=\"bi bi-trash ms-2 float-end\" (click)=\"onRemove(i)\"></i>{{displayFn(i)}}</div>\n</div>","import {\n Component,\n EventEmitter,\n Inject,\n Input,\n OnChanges,\n OnInit,\n Optional,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { DataModel } from '../../data/data-model';\nimport { BaseFieldManager } from '../../data/fields/base';\nimport { UntypedFormControl, UntypedFormGroup } from '@angular/forms';\nimport { firstValueFrom } from 'rxjs';\nimport {\n DISPEDIT_DISPLAY_TYPES,\n DISPEDIT_EDITOR_TYPES,\n IDispEditChoice,\n} from './dispedit.constants';\nimport { FilterData, Queryset } from '../../data/data-query';\nimport { Collection } from '../../data/data-collection';\nimport { TplFun } from '../fkselect/fkselect.component';\nimport { DecimalFieldManager } from '../../data/fields/numbers';\nimport {\n BootstrapDataDisplayConfig,\n DATA_DISPLAY_CONFIG,\n DataDisplayConfig,\n} from '../../data/data-parameters';\nimport { DataMessageService } from '../../messages/message.service';\n\n@Component({\n selector: 'data-dispedit',\n templateUrl: './dispedit.component.html',\n styleUrls: ['./dispedit.component.sass'],\n})\nexport class DispeditComponent<FT, T extends DataModel, R extends DataModel>\n implements OnInit, OnChanges\n{\n /** Model (mandatory) */\n @Input() public model!: T;\n /** Field (mandatory) */\n @Input() public field!: string;\n /** External form */\n @Input() public form?: UntypedFormGroup;\n /**\n * Starting edit mode\n * If mode is inline, edit is always true.\n */\n @Input() public edit = false;\n /**\n * Save updated values ?\n * If not given, default value depends on mode :\n * - save if mode is dd\n * - don't save if mode is inline\n */\n public save?: boolean;\n /**\n * Display mode\n * - dd provides display / edit within a dt/dd block\n * - inline (to be renamed to form) provides a (label? and) form control\n * */\n @Input() public mode: 'dd' | 'inline' | 'form' = 'inline';\n /**\n * Custom choices\n * If provided, a select form control will be used instead of base editor\n */\n @Input() public choices: IDispEditChoice[] = [];\n /** Custom input classes */\n @Input() public inputClasses!: string[] | string;\n /** Override editor, if provided */\n @Input() public editor?: DISPEDIT_EDITOR_TYPES;\n /** Override viewer, if provided */\n @Input() public viewer?: DISPEDIT_DISPLAY_TYPES;\n /** Override default value */\n @Input() public default?: any;\n /**\n * Override placeholder, if provided.\n * By default, manager.description is used\n */\n @Input() public placeholder: string = '';\n /**\n * Override help, if provided.\n * By default, manager.help is used.\n */\n @Input() public help: string = '';\n /**\n * Hide label (for inline forms)\n */\n @Input() public hideLabel: boolean = false;\n\n // FK fields\n // TODO: rename as fk_ or related_\n /** Fk queryset */\n @Input() public queryset?: Queryset<R>;\n /** Fk collection */\n @Input() public collection?: Collection<R>;\n /** Fk display */\n @Input() public display?: string | TplFun<R>;\n /** Fk filter */\n @Input() public filter: FilterData = {};\n\n /** Output emitter, output model on every change */\n @Output() public changed = new EventEmitter<T>();\n\n /** Field manager */\n public manager?: BaseFieldManager<FT>;\n\n /** Text value used for display */\n public txtValue?: string;\n /** Text values used for many displays */\n public txtValues?: string[];\n\n /** Computed editor type */\n public realEditor: DISPEDIT_EDITOR_TYPES = 'input.text';\n /** Computed display type */\n public realDisplay: DISPEDIT_DISPLAY_TYPES = 'text';\n /** Current disp raw value */\n public dispValue?: any;\n /** Computed chocies type */\n public realChoices?: IDispEditChoice[] = [];\n /** Computed help */\n public realHelp!: string;\n /** Computed placeholder */\n public realPlaceholder!: string;\n /** Computed required */\n public required!: boolean;\n /** Computed default value */\n public realDefault!: any;\n\n public m2mValues?: any[];\n\n // Local form group\n public fg?: UntypedFormGroup;\n\n // Display template function\n private _tpl!: TplFun<R>;\n\n /**\n * Constructor, can be given DATA_DISPLAY_CONFIG injection token to override display classes.\n * By default, bs5 config is used\n * @param dconf DataDisplayConfig item\n * @param _msgs messages service\n */\n constructor(\n @Optional() @Inject(DATA_DISPLAY_CONFIG) public dconf: DataDisplayConfig,\n private _msgs: DataMessageService\n ) {\n if (this.dconf === null) {\n this.dconf = BootstrapDataDisplayConfig;\n }\n }\n\n /**\n * Init sequence.\n * - Sets mode\n * - Sets display function\n * - Loads manager\n * - Run misc checks on special values\n * - Get help, placeholder strings\n */\n public ngOnInit() {\n this._setMode();\n }\n\n /**\n * Upgrade all values on any change.\n * @param changes\n */\n public ngOnChanges(changes: SimpleChanges): void {\n this._setDisplayFn();\n this.manager = this.model?.FM(this.field);\n this.required = this.manager?.required || false;\n this._checks();\n this.realHelp = this.help || this.manager?.help || '';\n this.realPlaceholder = this.placeholder || this.manager?.description || '';\n this.realDefault = this.default;\n this.save = this.save === undefined ? this.mode === 'dd' : this.save;\n if (!this.edit && this.mode === 'dd') {\n this.enableDisplayMode();\n } else {\n this.enableEditMode();\n }\n }\n\n /**\n * Set up display mode.\n * - get choices if available\n * - get display type\n * - process current value for display\n * - set display classes\n */\n public enableDisplayMode() {\n this._getChoices();\n this._getRealDisplay();\n this._getDisplayValue();\n this._setDisplayClasses();\n this.edit = false;\n }\n\n /**\n * Set up edit mode :\n * - get choices if available\n * - get editor type\n * - prepare form controle\n * - set form control value\n * - update form control classes\n */\n public enableEditMode() {\n this._getChoices();\n this._getRealEditor();\n this._setFormControl();\n this._setFormControlValue();\n this._setEditorClasses();\n this.edit = true;\n }\n\n /**\n * Update model field from form control value (if value is valid).\n * If save boolean is true, save values to API.\n */\n public async update(): Promise<void> {\n if (this.fg && this.model && this.fg.valid) {\n switch (this.realEditor) {\n case 'input.decimal':\n (this.model as any)[this.field] = Math.round(\n this.fg.value[this.field] * (this.manager as any).factor\n );\n break;\n default:\n (this.model as any)[this.field] = this.fg.value[this.field];\n }\n if (this.save === true) {\n return this._save();\n }\n }\n }\n\n unsetEdit() {\n if (this.mode == 'dd' && this.edit) {\n this.edit = false;\n delete this.fg;\n }\n }\n\n toggleEdit() {\n if (!this.edit) {\n this.enableEditMode();\n } else {\n this.unsetEdit();\n this.enableDisplayMode();\n }\n }\n\n /**\n * Reset field to default value\n * TODO: check if edit mode needs to be changed / saved\n */\n public async setDefault(): Promise<void> {\n if (this.model) {\n (this.model as any)[this.field] = this.realDefault;\n this.fg!.controls[this.field].setValue(this.realDefault, {\n emitEvent: false,\n });\n }\n await this.update();\n }\n\n public async selectedRefItem($event: T | null) {\n if (this.model) {\n if ($event !== null) {\n (this.model as any)[this.field] = $event.id;\n (this.model as any)[`${this.field}_details`] = $event;\n if (this.form) {\n const fv: { [index: string]: number | null } = {};\n fv[this.field] = $event.id;\n this.form.patchValue(fv, { emitEvent: true });\n }\n } else {\n (this.model as any)[this.field] = null;\n delete (this.model as any)[`${this.field}_details`];\n if (this.form) {\n const fv: { [index: string]: number | null } = {};\n fv[this.field] = null;\n this.form.patchValue(fv, { emitEvent: true });\n }\n }\n return this._save();\n }\n }\n\n public onM2MValuesChanges(v: any[]) {\n this.m2mValues = v;\n }\n\n private _checks() {\n if (this.editor === 'quill' && !this.viewer) {\n this.viewer = 'quill';\n }\n }\n\n /**\n * Save value to database, only if model have an id.\n * If mode is dd, toggle edit / display mode.\n * @private\n */\n private async _save(): Promise<void> {\n if (this.model) {\n if (this.model.id) {\n try {\n await firstValueFrom(\n this.model.update([this.field], { updateModel: true })\n );\n } catch (e) {\n console.error(e);\n let msg: string = '';\n if (e && (e as any).error && (e as any).error[this.field]) {\n msg = `${(e as any).error[this.field]}`;\n }\n this._msgs.error(\n \"Erreur lors de l'enregistrement\",\n msg,\n JSON.stringify(e)\n );\n return;\n }\n }\n if (this.mode === 'dd') {\n this.unsetEdit();\n this.enableDisplayMode();\n }\n this.changed.next(this.model);\n }\n }\n\n private _display(x: any): any {\n if (x) {\n if (x._display) {\n if (x._display instanceof Function) {\n return x._display();\n } else {\n return x._display;\n }\n }\n if (this._tpl) {\n return this._tpl(x);\n }\n }\n return '';\n }\n\n /**\n * Set display mode based on current display config\n * @private\n */\n private _setMode() {\n if (!this.mode) {\n this.mode = this.dconf.dispEdit.defaultMode;\n }\n }\n\n private _setDisplayFn() {\n if (this.display) {\n if (this.display && typeof this.display === 'string') {\n this._tpl = (model: R) => `${(model as any)[this.display as string]}`;\n } else if (this.display && typeof this.display === 'function') {\n this._tpl = this.display.bind(this);\n }\n } else {\n this._tpl = (model: R) =>\n `${\n (model as any)['name'] ||\n (model as any)['title'] ||\n (model as any)['id']\n }`;\n }\n }\n\n private _getChoices() {\n // Set display choices\n let choices: IDispEditChoice[] | undefined;\n if (this.choices && this.choices.length) {\n choices = this.choices;\n } else if ((this.manager as any)?.choices) {\n choices = (this.manager as any)?.choices;\n }\n // Set display value\n if (choices && choices.length > 0) {\n this.realChoices = choices;\n } else {\n delete this.realChoices;\n }\n }\n\n private _getRealDisplay() {\n this.realDisplay = this.viewer\n ? this.viewer\n : this.manager?.displayType\n ? this.manager.displayType\n : 'text';\n if (this.realChoices && this.realChoices.length) {\n this.realDisplay = 'choice';\n }\n }\n\n private _getRealEditor() {\n this.realEditor = this.editor\n ? this.editor\n : this.manager?.editorType || 'input.text';\n if (this.realChoices && this.realChoices.length) {\n this.realEditor = 'select';\n }\n }\n\n private _setFormControl() {\n if (!this.form) {\n const fgc: { [index: string]: UntypedFormControl } = {};\n fgc[this.field] = this.model.FC(this.field);\n this.fg = new UntypedFormGroup(fgc);\n } else {\n this.fg = this.form;\n this.fg.setControl(this.field, this.model.FC(this.field), {\n emitEvent: false,\n });\n }\n if (this.mode === 'inline') {\n this.fg.valueChanges.subscribe(() => {\n this.update();\n });\n }\n }\n\n private _setFormControlValue() {\n switch (this.realEditor) {\n case 'input.datetime':\n const value = (this.model as any)[this.field];\n const now = new Date();\n const localnow = new Date(\n now.getTime() - now.getTimezoneOffset() * 60000\n );\n if (value === null) {\n this.fg!.controls[this.field].setValue(null, { emitEvent: true });\n } else {\n const time = value ? new Date(value) : new Date();\n const offset = time.getTimezoneOffset();\n const localtime = new Date(time.getTime() - offset * 60000);\n this.fg!.controls[this.field].setValue(\n localtime.toISOString().substring(0, 16),\n { emitEvent: true }\n );\n }\n this.realDefault =\n this.default || this.manager?.required\n ? localnow.toISOString().substring(0, 16)\n : null;\n break;\n case 'input.date':\n const dt = this.model.toJson([this.field])[this.field];\n this.fg!.controls[this.field].setValue(dt);\n break;\n case 'input.decimal':\n this.fg!.controls[this.field].setValue(\n (this.model as any)[this.field] /\n ((this.manager as unknown as DecimalFieldManager).factor || 1)\n );\n }\n }\n\n private _setEditorClasses() {\n // FIXME: use realEditorClasses\n if (!this.inputClasses) {\n this.inputClasses =\n this.dconf.dispEdit.inputClasses[this.realEditor] || '';\n }\n }\n\n private _getDisplayValue() {\n const value = (this.model as any)[this.field];\n this.dispValue = value;\n if (this.realChoices) {\n for (const c of this.realChoices) {\n if (c === value) {\n this.txtValue = c as any;\n return;\n } else if (c.value && c.value === value) {\n this.txtValue = c.desc;\n return;\n }\n }\n }\n // Set display text depending on value and realDisplay value\n if (value === true) {\n this.txtValue = 'OUI';\n } else if (value === false) {\n this.txtValue = 'NON';\n } else if (value === undefined || value === null) {\n this.txtValue = 'non défini';\n } else {\n switch (this.realDisplay) {\n case 'fkdetails':\n const details = (this.model as any)[`${this.field}_details`] as any;\n this.txtValue = this._display(details);\n break;\n case 'm2mdetails':\n const m2mDetails =\n this.m2mValues ||\n ((this.model as any)[`${this.field}_details`] as any[]);\n this.txtValues = [];\n for (const v of m2mDetails) {\n this.txtValues.push(this._display(v));\n }\n break;\n case 'decimal':\n this.txtValue = `${\n value /\n ((this.manager as unknown as DecimalFieldManager).factor || 1)\n }`;\n break;\n default:\n this.txtValue = `${value}`;\n }\n }\n }\n\n private _setDisplayClasses() {}\n}\n","\n<ng-template #titleTpl>\n <ng-content></ng-content>\n</ng-template>\n<ng-template #dispTpl>\n <ng-container [ngSwitch]=\"realDisplay\"><span class=\"editable disp-text\" *ngSwitchCase=\"'text'\" (click)=\"enableEditMode()\">{{txtValue}}</span><span class=\"editable disp-choice\" *ngSwitchCase=\"'choice'\" (click)=\"enableEditMode()\">{{txtValue}}</span><span class=\"editable disp-decimal\" *ngSwitchCase=\"'decimal'\" (click)=\"enableEditMode()\">{{txtValue}}</span><span class=\"editable disp-boolean\" *ngSwitchCase=\"'boolean'\" (click)=\"enableEditMode()\">{{txtValue}}</span><span class=\"editable disp-fkdetails\" *ngSwitchCase=\"'fkdetails'\" (click)=\"enableEditMode()\">\n <div class=\"fkitem\">{{txtValue}}</div></span><span class=\"editable disp-m2mdetails\" *ngSwitchCase=\"'m2mdetails'\" (click)=\"enableEditMode()\">\n <div class=\"m2mitem\" *ngFor=\"let v of txtValues\">{{v}}</div></span><span class=\"editable disp-datetime\" *ngSwitchCase=\"'datetime'\" (click)=\"enableEditMode()\">\n <ng-container *ngIf=\"dispValue\">{{txtValue|date:'short'}}</ng-container>\n <ng-container *ngIf=\"!dispValue\">{{txtValue}}</ng-container></span><span class=\"editable disp-datetime\" *ngSwitchCase=\"'date'\" (click)=\"enableEditMode()\">\n <ng-container *ngIf=\"dispValue\">{{txtValue|date:'shortDate'}}</ng-container>\n <ng-container *ngIf=\"!dispValue\">{{txtValue}}</ng-container></span>\n <!--span.editable.disp-quill(*ngSwitchCase=\"'quill'\", (click)=\"enableEditMode()\")-->\n <!-- quill-view-html([content]=\"txtValue||''\")-->\n </ng-container>\n</ng-template>\n<ng-template #editTpl let-form=\"form\">\n <ng-container [ngSwitch]=\"realEditor\">\n <ng-container *ngSwitchCase=\"'input.text'\">\n <input type=\"text\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" [placeholder]=\"realPlaceholder\">\n <div class=\"form-text\" *ngIf=\"realHelp\">{{realHelp}}<span class=\"ms-1\" *ngIf=\"required\">(requis)</span></div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['minlength']\">Trop court : {{$any(manager).minLength}} caractères minimum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['maxlength']\">Trop long : {{$any(manager).maxLength}} caractères maximum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['pattern']\">Format invalide...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.email'\">\n <input type=\"email\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" [placeholder]=\"realPlaceholder\">\n <div class=\"form-text\" *ngIf=\"realHelp\">{{realHelp}}<span class=\"ms-1\" *ngIf=\"required\">(requis)</span></div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['minlength']\">Trop court : {{$any(manager).minLength}} caractères minimum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['maxlength']\">Trop long : {{$any(manager).maxLength}} caractères maximum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['pattern']\">Format invalide...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['email']\">Format d'email invalide...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.password'\">\n <input type=\"password\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" [placeholder]=\"realPlaceholder\">\n <div class=\"form-text\" *ngIf=\"realHelp\">{{realHelp}}<span class=\"ms-1\" *ngIf=\"required\">(requis)</span></div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['minlength']\">Trop court : {{$any(manager).minLength}} caractères minimum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['maxlength']\">Trop long : {{$any(manager).maxLength}} caractères maximum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['pattern']\">Format invalide...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.datetime'\">\n <input type=\"datetime-local\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" (keyup.enter)=\"update()\">\n <div class=\"form-text\">{{realHelp}}</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['minDate']\">Doit être postérieur à {{$any(manager).min|date:'short'}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['maxDate']\">Doit être antérieur à {{$any(manager).max|date:'short'}}...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.date'\">\n <input type=\"date\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" (keyup.enter)=\"update()\">\n <div class=\"form-text\">{{realHelp}}</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['minDate']\">Doit être postérieur à {{$any(manager).min|date:'short'}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['maxDate']\">Doit être antérieur à {{$any(manager).max|date:'short'}}...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.number'\">\n <input type=\"number\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" [placeholder]=\"realPlaceholder\">\n <div class=\"form-text\" *ngIf=\"realHelp\">{{realHelp}}<span class=\"ms-1\" *ngIf=\"required\">(requis)</span></div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['min']\">Trop petit : minimum {{$any(manager).min}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['max']\">Trop grand : maximum {{$any(manager).max}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.decimal'\">\n <input type=\"number\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" [placeholder]=\"realPlaceholder\">\n <div class=\"form-text\" *ngIf=\"realHelp\">{{realHelp}}<span class=\"ms-1\" *ngIf=\"required\">(requis)</span></div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['min']\">Trop petit : minimum {{$any(manager).min}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['max']\">Trop grand : maximum {{$any(manager).max}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.checkbox'\">\n <input class=\"form-check-input\" type=\"checkbox\" [formControl]=\"form.get(field)\" (keyup.escape)=\"unsetEdit()\" (change)=\"update()\">\n <div class=\"form-text\">{{realHelp}}</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'textarea'\">\n <textarea [formControl]=\"form.get(field)\" (keyup.escape)=\"unsetEdit()\" [ngClass]=\"inputClasses\" (keyup.control.enter)=\"update()\" [placeholder]=\"realPlaceholder\"></textarea>\n <div class=\"form-text\" *ngIf=\"realHelp\">{{realHelp}}<span class=\"ms-1\" *ngIf=\"required\">(requis)</span></div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['minlength']\">Trop court : {{$any(manager).minLength}} caractères minimum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['maxlength']\">Trop long : {{$any(manager).maxLength}} caractères maximum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['pattern']\">Format invalide...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n </ng-container>\n <!--ng-container(*ngSwitchCase=\"'quill'\")-->\n <!-- quill-editor([formControl]=\"form.get(field)\")-->\n <!-- .form-text(*ngIf=\"realHelp\") {{realHelp}}-->\n <!-- span.ms-1(*ngIf=\"required\") (requis)-->\n <!-- .invalid-feedback.mt-0([class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['minlength']\") Trop court : {{$any(manager).minLength}} caractères minimum...-->\n <!-- .invalid-feedback.mt-0([class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['maxlength']\") Trop long : {{$any(manager).maxLength}} caractères maximum...-->\n <!-- .invalid-feedback.mt-0([class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['pattern']\") Format invalide...-->\n <!-- .invalid-feedback.mt-0([class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['required']\") Ce champ est requis...-->\n <!-- button([ngClass]=\"inputClasses\") Enregistrer-->\n <ng-container *ngSwitchCase=\"'fkselect'\">\n <data-fkselect [collection]=\"collection\" [filter]=\"filter\" (selected)=\"selectedRefItem($event)\" [placeholder]=\"placeholder\" (cancelled)=\"unsetEdit()\" (cleared)=\"selectedRefItem(null)\"></data-fkselect>\n </ng-container>\n <ng-container *ngSwitchCase=\"'m2mselect'\">\n <data-m2mselect [collection]=\"collection\" [filter]=\"filter\" (changed)=\"update()\" [formControl]=\"form.get(field)\" (detailsChanged)=\"onM2MValuesChanges($event)\" [model]=\"model\" [field]=\"field\" [placeholder]=\"placeholder\"></data-m2mselect>\n </ng-container>\n <ng-container *ngSwitchCase=\"'select'\">\n <select [formControl]=\"form.get(field)\" (keyup.escape)=\"unsetEdit()\" (change)=\"update()\" [ngClass]=\"inputClasses\">\n <option *ngFor=\"let c of realChoices\" [ngValue]=\"c.value ? c.value : c\">{{c.desc ? c.desc : c}}</option>\n </select>\n <div class=\"form-text\">{{realHelp}}</div>\n </ng-container>\n </ng-container>\n</ng-template>\n<!-- Disp/edit toggler-->\n<ng-template #dispeditTpl>\n <ng-container *ngIf=\"!edit\">\n <ng-container *ngTemplateOutlet=\"dispTpl\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"edit\">\n <ng-container *ngIf=\"fg\">\n <form [formGroup]=\"fg\" (submit)=\"update()\">\n <ng-container *ngTemplateOutlet=\"editTpl; context: {form: fg}\"></ng-container>\n </form>\n </ng-container>\n </ng-container>\n</ng-template>\n<!-- DispEdit noform-->\n<ng-template #dispeditFormTpl>\n <ng-container *ngIf=\"!edit\">\n <ng-container *ngTemplateOutlet=\"dispTpl\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"edit\">\n <ng-container *ngIf=\"form\">\n <ng-container *ngTemplateOutlet=\"editTpl; context: {form: form}\"></ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n<!-- Dd display-->\n<ng-container *ngIf=\"mode==='dd'\">\n <dt [class.required]=\"required\" *ngIf=\"!hideLabel\"><span class=\"editable\" (click)=\"toggleEdit()\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container></span><span class=\"pointer float-end\" (click)=\"setDefault()\" *ngIf=\"realDefault!== undefined &amp;&amp; edit\"><i class=\"bi bi-trash ms-2\"></i></span></dt>\n <dd [class.mb-0]=\"hideLabel\">\n <ng-container *ngTemplateOutlet=\"dispeditTpl\"></ng-container>\n </dd>\n</ng-container>\n<!-- Inline display-->\n<ng-container *ngIf=\"mode==='inline'\">\n <ng-container *ngIf=\"!hideLabel\"><span class=\"pointer float-end\" (click)=\"setDefault()\" *ngIf=\"realDefault!== undefined &amp;&amp; edit\"><i class=\"bi bi-trash ms-2\"></i></span>\n <label [class.required]=\"required\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </label>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"dispeditTpl\"></ng-container>\n</ng-container>\n<!-- Form display-->\n<ng-container *ngIf=\"mode==='form'\">\n <ng-container *ngIf=\"!hideLabel\"><span class=\"pointer float-end\" (click)=\"setDefault()\" *ngIf=\"realDefault!== undefined &amp;&amp; edit\"><i class=\"bi bi-trash ms-2\"></i></span>\n <label [class.required]=\"required\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </label>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"dispeditFormTpl\"></ng-container>\n</ng-container>","import { Pipe, PipeTransform } from '@angular/core';\nimport { DataModel } from '../data/data-model';\n\n@Pipe({\n name: 'choice',\n})\nexport class ChoicePipe<T extends DataModel> implements PipeTransform {\n transform(\n value: T,\n field: string,\n mode: 'code' | 'desc' | 'both' = 'desc'\n ): string {\n if (!value) {\n return '-';\n }\n const fvalue = (value as any)[field];\n if (mode === 'code') {\n return `${fvalue}`;\n }\n const manager = value.FM(field);\n const choices = (manager as any).choices;\n if (!choices) {\n return `${fvalue}`;\n }\n for (const ch of choices) {\n if (ch.value === fvalue) {\n if (mode === 'desc') {\n return ch.desc;\n } else {\n return `[${fvalue}] ${ch.desc}`;\n }\n }\n }\n return `[${fvalue}] ??`;\n }\n}\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { DataModel } from '../../data/data-model';\nimport { Collection } from '../../data/data-collection';\nimport { firstValueFrom } from 'rxjs';\nimport {\n NgbOffcanvas,\n NgbOffcanvasModule,\n NgbOffcanvasRef,\n} from '@ng-bootstrap/ng-bootstrap';\nimport { CommonModule } from '@angular/common';\n\nexport interface FakeDeleteResult {\n count: number;\n details: [string, number][];\n}\n\n@Component({\n selector: 'data-safe-delete',\n templateUrl: './sdelete.component.html',\n styleUrls: ['./sdelete.component.sass'],\n standalone: true,\n imports: [CommonModule, NgbOffcanvasModule],\n})\nexport class SafeDeleteComponent<T extends DataModel> {\n @Input() public model!: T;\n @Input() public service!: Collection<T>;\n @Input() public checks: { [index: string]: string } = {};\n @Output() public deleted = new EventEmitter<FakeDeleteResult>();\n @Input() public display: 'button' | 'icon' | 'custom' = 'button';\n public result?: FakeDeleteResult;\n @ViewChild('dialog', { static: true })\n private _dialogRef?: ElementRef<HTMLDivElement>;\n private ofc?: NgbOffcanvasRef;\n\n constructor(private _ofc: NgbOffcanvas) {}\n\n public async checkDelete(model: DataModel) {\n this.result = await firstValueFrom(\n this.service.delete(this.model, { params: { doit: 'no' } })\n );\n this.ofc = this._ofc.open(this._dialogRef, {\n position: 'end',\n });\n }\n\n public async reallyDelete() {\n this.result = await firstValueFrom(\n this.service.delete(this.model, { params: { doit: 'really' } })\n );\n this.ofc?.close();\n this.deleted.emit(this.result);\n }\n}\n","\n<ng-template #dialog let-offcanvas>\n <div class=\"offcanvas-header\">\n <h2 class=\"offcanvas-title text-danger text-center\"><i class=\"bi bi-trash me-2\"></i>Supprimer réellement ??</h2>\n </div>\n <div class=\"offcanvas-body text-danger\" *ngIf=\"result\">\n <div class=\"text-center my-4 fs-1\"><i class=\"bi bi-exclamation-diamond my-5\"></i></div>\n <div class=\"fs-4\">\n <p>La suppression de cet élément supprimera {{result.count}} éléments dans la base de données..</p>\n </div>\n <table class=\"table table-sm table-striped table-danger\">\n <thead>\n <tr>\n <th>Type d'élément</th>\n <th>Nombre</th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let rl of result.details\">\n <tr>\n <td>{{checks[rl[0]] ? checks[rl[0]] : rl[0]}}</td>\n <td>{{rl[1]}}</td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n <button class=\"w-100 btn btn-lg btn-danger\" (click)=\"reallyDelete()\"><i class=\"bi bi-trash me-2\"></i>Je confirme la suppression</button>\n <button class=\"w-100 btn btn-outline-secondary my-3\" (click)=\"offcanvas.close()\"><i class=\"bi bi-door-open me-2\"></i>Je renonce à la suppression</button>\n </div>\n</ng-template>\n<button class=\"btn btn-sm btn-outline-danger float-end\" (click)=\"checkDelete(model)\" *ngIf=\"display==='button'\"><i class=\"bi bi-trash mx-2\"></i></button><i class=\"bi bi-trash mx-2\" (click)=\"checkDelete(model)\" *ngIf=\"display==='icon'\" role=\"button\"></i>\n<div (click)=\"checkDelete(model)\" *ngIf=\"display==='custom'\" role=\"button\">\n <ng-content></ng-content>\n</div>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DispeditComponent } from './dispedit/dispedit.component';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { FkselectComponent } from './fkselect/fkselect.component';\nimport { M2mselectComponent } from './m2mselect/m2mselect.component';\nimport {\n NgbOffcanvasModule,\n NgbTypeaheadModule,\n} from '@ng-bootstrap/ng-bootstrap';\nimport { ChoicePipe } from './choice.pipe';\nimport { SafeDeleteComponent } from './sdelete/sdelete.component';\n\n@NgModule({\n declarations: [\n DispeditComponent,\n FkselectComponent,\n M2mselectComponent,\n ChoicePipe,\n ],\n exports: [\n DispeditComponent,\n FkselectComponent,\n M2mselectComponent,\n ChoicePipe,\n ],\n imports: [\n CommonModule,\n NgbTypeaheadModule,\n NgbOffcanvasModule,\n ReactiveFormsModule,\n A11yModule,\n ],\n})\nexport class DispeditModule {}\n\nexport * from './dispedit/dispedit.constants';\nexport * from './dispedit/dispedit.component';\nexport * from './m2mselect/m2mselect.component';\nexport * from './fkselect/fkselect.component';\nexport * from './sdelete/sdelete.component';\nexport * from './choice.pipe';\n","import {\n BaseFieldManager,\n FieldDecoratorFn,\n genericDataField,\n IFieldMetadata,\n} from './base';\nimport { ValidatorFn, Validators } from '@angular/forms';\nimport { DISPEDIT_EDITOR_TYPES } from '../../dispedit/dispedit/dispedit.constants';\n\nexport interface ICharFieldDescChoice {\n value: string;\n desc: string;\n}\n\nexport type ICharFieldChoice = ICharFieldDescChoice | string;\n\nexport interface ICharFieldMetadata extends IFieldMetadata<string> {\n minLength?: number;\n maxLength?: number;\n pattern?: RegExp | string;\n choices?: ICharFieldChoice[];\n}\n\nexport interface IEmailFieldMetadata extends ICharFieldMetadata {\n validate?: boolean;\n}\n\nexport interface IPasswordFieldMetadata extends ICharFieldMetadata {\n validate?: boolean;\n}\n\nexport interface ITextFieldMetadata extends ICharFieldMetadata {\n syntax?: string;\n}\n\nexport class CharFieldManager extends BaseFieldManager<string> {\n public minLength?: number;\n public maxLength?: number;\n public choices?: ICharFieldChoice[];\n public pattern?: RegExp | string;\n\n constructor(params: any) {\n super(params);\n if (this.choices) {\n this.editorType = 'select';\n }\n }\n\n public override get validators(): ValidatorFn[] {\n const v = super.getValidators();\n if (this.minLength) {\n v.push(Validators.minLength(this.minLength));\n }\n if (this.maxLength) {\n v.push(Validators.maxLength(this.maxLength));\n }\n if (this.pattern) {\n v.push(Validators.pattern(this.pattern));\n }\n // TODO: add choices validator ??\n return v;\n }\n\n public override fromJson(data: any): string {\n if (data === undefined) {\n return this.getDefaultValue()!;\n }\n if (data === null) {\n return this.getDefaultValue()!;\n }\n if (typeof data === 'string') {\n return data;\n }\n return `${data}`;\n }\n}\n\nexport class EmailFieldManager\n extends CharFieldManager\n implements ICharFieldMetadata\n{\n public validate = true;\n public override editorType: DISPEDIT_EDITOR_TYPES = 'input.email';\n\n constructor(params: any) {\n super(params);\n if (this.validate === undefined) {\n this.validate = true;\n }\n }\n\n public override get validators(): ValidatorFn[] {\n const v = super.getValidators();\n if (this.validate) {\n v.push(Validators.email);\n }\n return v;\n }\n}\n\nexport class TextFieldManager extends CharFieldManager {\n public syntax?: string;\n public override editorType: DISPEDIT_EDITOR_TYPES = 'textarea';\n}\n\nexport class PasswordFieldManager extends CharFieldManager {\n public syntax?: string;\n public override editorType: DISPEDIT_EDITOR_TYPES = 'input.password';\n}\n\n/* eslint-disable max-len */\n\nexport const charField = (updates: ICharFieldMetadata = {}): FieldDecoratorFn =>\n genericDataField(updates, 'charField', CharFieldManager);\n\nexport const emailField = (\n updates: IEmailFieldMetadata = {}\n): FieldDecoratorFn =>\n genericDataField(updates, 'emailField', EmailFieldManager);\n\nexport const textField = (updates: ITextFieldMetadata = {}): FieldDecoratorFn =>\n genericDataField(updates, 'textField', TextFieldManager);\n\nexport const passwordField = (\n updates: IPasswordFieldMetadata = {}\n): FieldDecoratorFn =>\n genericDataField(updates, 'passwordField', PasswordFieldManager);\n","import {\n BaseFieldManager,\n FieldDecoratorFn,\n genericDataField,\n IFieldMetadata,\n} from './base';\n\nexport interface IPrimaryFieldMetadata extends IFieldMetadata<number> {\n step?: number;\n}\n\nexport class PrimaryFieldManager\n extends BaseFieldManager<number>\n implements IPrimaryFieldMetadata\n{\n public step = 1;\n}\n\nexport const primaryField = (\n updates: IPrimaryFieldMetadata = {}\n): FieldDecoratorFn =>\n genericDataField(updates, 'primaryField', PrimaryFieldManager);\n","import { BaseFieldManager, genericDataField, IFieldMetadata } from './base';\nimport {\n DISPEDIT_DISPLAY_TYPES,\n DISPEDIT_EDITOR_TYPES,\n} from '../../dispedit/dispedit/dispedit.constants';\nimport { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\nexport interface IDateFieldMetadata extends IFieldMetadata<Date | null> {\n autoNow?: boolean;\n autoNowAdd?: boolean;\n min?: Date;\n max?: Date;\n}\n\nexport const dateMinimum = (date: Date): ValidatorFn => {\n return (control: AbstractControl): ValidationErrors | null => {\n if (control.value == null) {\n return null;\n }\n\n const controlDate = new Date(control.value);\n\n const validationDate = date;\n\n return controlDate > validationDate\n ? null\n : {\n minDate: {\n 'date-minimum': validationDate,\n actual: controlDate,\n },\n };\n };\n};\n\nexport const dateMaximum = (date: Date): ValidatorFn => {\n return (control: AbstractControl): ValidationErrors | null => {\n if (control.value == null) {\n return null;\n }\n const controlDate = new Date(control.value);\n const validationDate = date;\n\n return controlDate < validationDate\n ? null\n : {\n maxDate: {\n 'date-maximum': validationDate,\n actual: controlDate,\n },\n };\n };\n};\n\nexport interface IDatetimeFieldMetadata extends IDateFieldMetadata {\n timezone?: string;\n}\n\nexport class DateFieldManager extends BaseFieldManager<Date | null> {\n public autoNow = false;\n public autoNowAdd = false;\n public min?: Date;\n public max?: Date;\n public override editorType: DISPEDIT_EDITOR_TYPES = 'input.date';\n public override displayType: DISPEDIT_DISPLAY_TYPES = 'date';\n\n public override get validators(): ValidatorFn[] {\n const v = super.validators;\n if (this.min) {\n v.push(dateMinimum(this.min));\n }\n if (this.max) {\n v.push(dateMaximum(this.max));\n }\n return v;\n }\n\n public override fromJson(data: any): Date | null {\n if (data === null || data === undefined) {\n return null;\n }\n const date = new Date(data);\n if (date instanceof Date && !isNaN(date as any)) {\n return date;\n }\n return null;\n }\n\n public override toJson(data: Date | string | null): null | string {\n if (data === null || data === undefined) {\n return null;\n }\n if (typeof data === 'string') {\n const d = this.fromJson(data);\n if (d === null) {\n return null;\n }\n data = d;\n }\n return `${data.getUTCFullYear()}-${\n data.getUTCMonth() + 1\n }-${data.getUTCDate()}`;\n }\n\n /**\n * Returns default value for model, using args if needed.\n * @param args\n * @protected\n */\n protected override getDefaultValue(args: any = {}): Date | null | undefined {\n if (this.defaultValue instanceof Function) {\n return this.defaultValue(args);\n }\n if (this.required && this.defaultValue === undefined) {\n throw new Error(\n `Field ${this.name} : no default value for required field`\n );\n }\n if (this.defaultValue === undefined) {\n return this.autoNow || this.autoNowAdd ? new Date() : null;\n }\n return this.defaultValue;\n }\n}\n\nexport class DatetimeFieldManager\n extends DateFieldManager\n implements IDatetimeFieldMetadata\n{\n public timezone = 'Europe/Paris';\n public override editorType: DISPEDIT_EDITOR_TYPES = 'input.datetime';\n public override displayType: DISPEDIT_DISPLAY_TYPES = 'datetime';\n\n public override toJson(data: Date): string | null {\n if (data === null || data === undefined) {\n return null;\n }\n if (typeof data === 'string') {\n const d = this.fromJson(data);\n if (d === null) {\n return null;\n }\n data = d;\n }\n try {\n return data.toISOString();\n } catch (e) {\n console.error(e, data);\n return null;\n }\n }\n}\n\nexport const dateField = (updates: IDateFieldMetadata = {}) =>\n genericDataField(updates, 'dateField', DateFieldManager);\n\nexport const datetimeField = (updates: IDatetimeFieldMetadata = {}) =>\n genericDataField(updates, 'datetimeField', DatetimeFieldManager);\n","import {\n BaseFieldManager,\n FieldDecoratorFn,\n genericDataField,\n IFieldMetadata,\n} from './base';\nimport { Collection } from '../data-collection';\nimport {\n DISPEDIT_DISPLAY_TYPES,\n DISPEDIT_EDITOR_TYPES,\n} from '../../dispedit/dispedit/dispedit.constants';\n\nexport interface IForeignKeyFieldMetadata extends IFieldMetadata<number> {\n related?: string;\n}\n\nexport interface IReverseForeignKeyFieldMetadata\n extends IFieldMetadata<number> {\n related: string;\n}\n\nexport interface IDetailsFieldMetadata<T> extends IFieldMetadata<T> {\n field?: string;\n many?: boolean;\n model?: T;\n deserialize?: (data: any) => T;\n}\n\nexport interface IManyToManyFieldMetadata extends IFieldMetadata<number[]> {\n related: string;\n}\n\nexport class ForeignKeyFieldManager\n extends BaseFieldManager<number>\n implements IForeignKeyFieldMetadata\n{\n public related?: string;\n public override editorType: DISPEDIT_EDITOR_TYPES = 'fkselect';\n public override displayType: DISPEDIT_DISPLAY_TYPES = 'fkdetails';\n}\n\nexport class ReverseForeignKeyFieldManager\n extends BaseFieldManager<number>\n implements IForeignKeyFieldMetadata\n{\n public related?: string;\n}\n\nexport class DetailsFieldManager<T>\n extends BaseFieldManager<T>\n implements IDetailsFieldMetadata<T>\n{\n public field?: string;\n public many?: boolean;\n public model: any;\n public deserialize?: (data: any) => any;\n\n public override fromJson(data: any, coll?: Collection<any>): any {\n if (data === null) {\n return data;\n }\n if (data === undefined) {\n return undefined;\n }\n if (this.deserialize) {\n return this.deserialize(data);\n }\n if (this.model) {\n if (!this.many) {\n const d = new this.model(coll);\n d.fromJson(data);\n return d;\n } else {\n const out: any[] = [];\n for (const dt of data) {\n const d = new this.model(coll);\n d.fromJson(dt);\n out.push(d);\n }\n return out;\n }\n }\n return data;\n }\n}\n\nexport interface IManyToManyKeyFieldMetadata extends IFieldMetadata<number[]> {\n related?: string;\n}\n\nexport class ManyToManyFieldManager\n extends BaseFieldManager<number[]>\n implements IManyToManyKeyFieldMetadata\n{\n public related?: string;\n public override editorType: DISPEDIT_EDITOR_TYPES = 'm2mselect';\n public override displayType: DISPEDIT_DISPLAY_TYPES = 'm2mdetails';\n}\n\n/* eslint-disable max-len */\nexport const foreignKeyField = (\n updates: IForeignKeyFieldMetadata\n): FieldDecoratorFn =>\n genericDataField(updates, 'foreignKeyField', ForeignKeyFieldManager);\n\nexport const reverseForeignKeyField = (\n updates: IReverseForeignKeyFieldMetadata\n): FieldDecoratorFn =>\n genericDataField(\n updates,\n 'reverseForeignKeyField',\n ReverseForeignKeyFieldManager\n );\n\nexport const detailsField = (\n meta: IDetailsFieldMetadata<any> = {}\n): FieldDecoratorFn =>\n genericDataField(meta, 'detailsField', DetailsFieldManager);\n\nexport const manyToManyField = (\n meta: IManyToManyFieldMetadata\n): FieldDecoratorFn =>\n genericDataField(meta, 'manyToManyField', ManyToManyFieldManager);\n","import { BaseFieldManager, genericDataField, IFieldMetadata } from './base';\nimport {\n DISPEDIT_DISPLAY_TYPES,\n DISPEDIT_EDITOR_TYPES,\n} from '../../dispedit/dispedit/dispedit.constants';\n\nexport type IBooleanFieldMetadata = IFieldMetadata<boolean | null>;\n\nexport class BooleanFieldManager\n extends BaseFieldManager<boolean | null>\n implements IBooleanFieldMetadata\n{\n public override editorType: DISPEDIT_EDITOR_TYPES = 'input.checkbox';\n public override displayType: DISPEDIT_DISPLAY_TYPES = 'boolean';\n\n public override fromJson(data: any): boolean | null {\n if (data === undefined) {\n if (this.required) {\n return this.getDefaultValue()!;\n } else {\n return null;\n }\n }\n if (data === null) {\n if (this.required) {\n return this.getDefaultValue()!;\n } else {\n return null;\n }\n }\n if (typeof data === 'boolean') {\n return data as boolean;\n }\n if (typeof data === 'string') {\n if (['true', '1', 'ok', 'yes'].indexOf(data) !== -1) {\n return true;\n }\n return ['false', '0', 'nok', 'no'].indexOf(data) === -1;\n }\n return !!data;\n }\n}\n\nexport const booleanField = (updates: IBooleanFieldMetadata = {}) =>\n genericDataField<boolean | null, IBooleanFieldMetadata, BooleanFieldManager>(\n updates,\n 'booleanField',\n BooleanFieldManager\n );\n","import {\n BaseFieldManager,\n FieldDecoratorFn,\n genericDataField,\n IFieldMetadata,\n} from './base';\nimport {\n DISPEDIT_DISPLAY_TYPES,\n DISPEDIT_EDITOR_TYPES,\n} from '../../dispedit/dispedit/dispedit.constants';\nimport { ValidatorFn, Validators } from '@angular/forms';\n\nexport interface IIntegerFieldMetadata extends IFieldMetadata<number> {\n min?: number;\n max?: number;\n}\n\nexport interface IFloatFieldMetadata extends IFieldMetadata<number> {\n min?: number;\n max?: number;\n}\n\nexport interface IDecimalFieldMetadata extends IFieldMetadata<number> {\n min?: number;\n max?: number;\n factor?: number;\n}\n\nexport class IntegerFieldManager\n extends BaseFieldManager<number>\n implements IIntegerFieldMetadata\n{\n public min?: number;\n public max?: number;\n\n public override get validators(): ValidatorFn[] {\n const v = super.getValidators();\n if (this.min !== undefined) {\n v.push(Validators.min(this.min));\n }\n if (this.max !== undefined) {\n v.push(Validators.max(this.max));\n }\n return v;\n }\n}\n\nexport class FloatFieldManager\n extends IntegerFieldManager\n implements IFloatFieldMetadata {}\n\nexport class DecimalFieldManager\n extends IntegerFieldManager\n implements IDecimalFieldMetadata\n{\n public factor?: number;\n public override displayType: DISPEDIT_DISPLAY_TYPES = 'decimal';\n public override editorType: DISPEDIT_EDITOR_TYPES = 'input.decimal';\n}\n\n/* eslint-disable max-len */\nexport const integerField = (\n updates: IIntegerFieldMetadata = {}\n): FieldDecoratorFn =>\n genericDataField(updates, 'integerField', IntegerFieldManager);\n\nexport const floatField = (\n updates: IFloatFieldMetadata = {}\n): FieldDecoratorFn =>\n genericDataField(updates, 'floatField', FloatFieldManager);\n\nexport const decimalField = (\n updates: IDecimalFieldMetadata = { factor: 100 }\n): FieldDecoratorFn =>\n genericDataField(updates, 'decimalField', DecimalFieldManager);\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { animate, style, transition, trigger } from '@angular/animations';\nimport { DataMessageService, Message } from '../message.service';\nimport { ReplaySubject, takeUntil } from 'rxjs';\nimport { CommonModule } from '@angular/common';\nimport { provideAnimations } from '@angular/platform-browser/animations';\n\n@Component({\n selector: 'data-message-zone',\n templateUrl: './message-zone.component.html',\n styleUrls: ['./message-zone.component.sass'],\n standalone: true,\n imports: [CommonModule],\n providers: [provideAnimations()],\n animations: [\n trigger('dispStatus', [\n transition('void => *', [\n style({ opacity: 0 }),\n animate(550, style({ opacity: 1 })),\n ]),\n transition('* => void', [\n style({ opacity: '*' }),\n animate(550, style({ opacity: 0 })),\n ]),\n ]),\n ],\n})\nexport class MessageZoneComponent implements OnInit, OnDestroy {\n @Input() public filter?: string;\n public current: Message[] = [];\n private _subscriptions$ = new ReplaySubject<void>();\n\n constructor(public messages: DataMessageService) {}\n\n public ngOnInit(): void {\n this.messages.current\n .pipe(takeUntil(this._subscriptions$))\n .subscribe((messages) => {\n this.current = messages;\n });\n }\n\n public ngOnDestroy(): void {\n this._subscriptions$.next();\n this._subscriptions$.complete();\n }\n}\n","\n<div class=\"messagezone\">\n <div class=\"alert\" *ngFor=\"let message of current\" [@dispStatus]=\"message.status\" [class]=\"message.style\" (click)=\"message.showTrace=!message.showTrace\">\n <button class=\"btn-close\" type=\"button\" (click)=\"messages.ack(message)\" aria-label=\"Close\"></button><strong>{{message.title}}</strong>&nbsp; {{message.message}}\n <div class=\"pretrace\" *ngIf=\"message.showTrace\">{{message.trace}}</div>\n </div>\n</div>","import {DataModel} from \"./data-model\";\nimport {CollectionMock} from \"./data-collection.mock\";\nimport {FilterData, IQueryMeta, IQuerysetOptions, SortData} from \"./data-query\";\nimport {combineLatest, Observable, of} from \"rxjs\";\n\nexport class QuerysetMock<T extends DataModel> {\n public mockData: T[] = [];\n\n public filterData: FilterData = {};\n public sortData: SortData[] = [];\n public pageSize = 100;\n public page = 1;\n\n public pristine = true;\n public loading = of(false);\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\n constructor(protected _coll: CollectionMock<T>, public options: IQuerysetOptions = {}) {\n\n }\n\n public get results(): Observable<T[]> {\n return of(this.mockData || this._coll.mockValues);\n }\n\n public get meta(): Observable<IQueryMeta> {\n return of({\n nav: {count: 100, next: 1, page: 1, pages: 10, prev: null, size: 10},\n parameters: {page: \"page\", page_size: \"page_size\"}\n });\n }\n\n public get full(): Observable<[T[], boolean, IQueryMeta]> {\n return combineLatest([this.results, this.loading, this.meta]);\n }\n\n public filter(params: FilterData = {}): QuerysetMock<T> {\n return this;\n }\n\n public sort(...sorting: string[]): QuerysetMock<T> {\n return this;\n }\n\n public paginateBy(pageSize: number = 20): QuerysetMock<T> {\n return this;\n }\n\n public setPage(page: number): QuerysetMock<T> {\n return this;\n }\n\n public getQueryParams(): FilterData {\n return {};\n }\n\n public get(): Observable<T[]> {\n return of(this.mockData || this._coll.mockValues);\n }\n}\n","import {DataModel} from \"./data-model\";\nimport {Observable, of} from \"rxjs\";\nimport {IQuerysetOptions} from \"./data-query\";\nimport {QuerysetMock} from \"./data-query.mock\";\nimport {Collection, IActionParams, IHttpMethod} from \"./data-collection\";\n\nexport class CollectionMock<T extends DataModel> {\n public mockValue?: T;\n public mockValues?: T[];\n public actionValue: any;\n\n constructor(protected model: new(coll: Collection<T>) => T) {\n }\n\n public fetch(id: number, suffix: string = \"\"): Observable<T> {\n return of(this.mockValue as T);\n }\n\n public action(model: T | null, method: IHttpMethod, action: string, params: IActionParams): Observable<any> {\n return of(this.actionValue);\n }\n\n public queryset(options: IQuerysetOptions = {}): QuerysetMock<T> {\n return new QuerysetMock<T>(this, options);\n }\n\n public list(query: { [index: string]: string } = {}, suffix: string = \"\"): Observable<any> {\n return of({results: this.mockValues});\n }\n\n fromJson(data: any, many: boolean = false): T | any {\n if (data && data.id !== undefined) {\n const m = new this.model(this as any);\n m.fromJson(data);\n return m;\n } else {\n if (many && data && data.length) {\n const out: T[] = [];\n for (const r of data) {\n const ri = new this.model(this as any);\n ri.fromJson(r);\n out.push(ri);\n }\n return out;\n }\n return data;\n }\n }\n}\n","import {Subscription} from \"rxjs\";\n\nexport interface UploaderOptions {\n concurrency: number;\n allowedContentTypes?: string[];\n maxUploads?: number;\n maxFileSize?: number;\n}\n\nexport interface BlobFile extends Blob {\n name: string;\n}\n\nexport enum UploadStatus {\n Queue,\n Uploading,\n Done,\n Cancelled\n}\n\nexport interface UploadProgress {\n status: UploadStatus;\n data?: {\n percentage: number;\n speed: number;\n speedHuman: string;\n startTime: number | null;\n endTime: number | null;\n eta: number | null;\n etaHuman: string | null;\n };\n}\n\nexport interface UploadFile {\n id: string;\n fileIndex: number;\n lastModifiedDate: Date;\n name: string;\n size: number;\n type: string;\n form: FormData;\n progress: UploadProgress;\n response?: any;\n responseStatus?: number;\n sub?: Subscription | any;\n nativeFile?: File;\n responseHeaders?: { [key: string]: string };\n}\n\nexport interface UploadOutput {\n type: \"addedToQueue\" | \"allAddedToQueue\" | \"uploading\" | \"done\" | \"start\" | \"cancelled\" | \"dragOver\"\n | \"dragOut\" | \"drop\" | \"removed\" | \"removedAll\" | \"rejected\";\n file?: UploadFile;\n nativeFile?: File;\n}\n\nexport interface UploadInput {\n type: \"uploadAll\" | \"uploadFile\" | \"cancel\" | \"cancelAll\" | \"remove\" | \"removeAll\";\n url?: string;\n method?: string;\n id?: string;\n fieldName?: string;\n fileIndex?: number;\n file?: UploadFile;\n data?: { [key: string]: string | Blob };\n headers?: { [key: string]: string };\n includeWebKitFormBoundary?: boolean; // If false, only the file is send trough xhr.send (WebKitFormBoundary is omit)\n withCredentials?: boolean;\n}\n","import { EventEmitter } from '@angular/core';\nimport { Observable, Subject, Subscription } from 'rxjs';\nimport { finalize, mergeMap } from 'rxjs/operators';\nimport {\n BlobFile,\n UploadFile,\n UploadInput,\n UploadOutput,\n UploadStatus,\n} from './interfaces';\n\nexport function humanizeBytes(bytes: number): string {\n if (bytes === 0) {\n return '0 Byte';\n }\n\n const k = 1024;\n const sizes: string[] = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB'];\n const i: number = Math.floor(Math.log(bytes) / Math.log(k));\n\n return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n}\n\nexport class DataUploaderService {\n queue: UploadFile[];\n serviceEvents: EventEmitter<UploadOutput>;\n uploadScheduler: Subject<{ file: UploadFile; event: UploadInput }>;\n subs: { id: string; sub: Subscription }[];\n contentTypes: string[];\n maxUploads: number;\n maxFileSize: number;\n\n constructor(\n concurrency: number = Number.POSITIVE_INFINITY,\n contentTypes: string[] = ['*'],\n maxUploads: number = Number.POSITIVE_INFINITY,\n maxFileSize: number = Number.POSITIVE_INFINITY\n ) {\n this.queue = [];\n this.serviceEvents = new EventEmitter<UploadOutput>();\n this.uploadScheduler = new Subject();\n this.subs = [];\n this.contentTypes = contentTypes;\n this.maxUploads = maxUploads;\n this.maxFileSize = maxFileSize;\n\n this.uploadScheduler\n .pipe(mergeMap((upload) => this.startUpload(upload), concurrency))\n .subscribe((uploadOutput) => this.serviceEvents.emit(uploadOutput));\n }\n\n handleFiles(incomingFiles: FileList): void {\n let acc: File[] = [];\n\n for (let i = 0; i < incomingFiles.length; i++) {\n const futureQueueLength = acc.length + this.queue.length + 1;\n const checkFile = incomingFiles[i];\n if (\n this.isContentTypeAllowed(checkFile.type) &&\n futureQueueLength <= this.maxUploads &&\n this.isFileSizeAllowed(checkFile.size)\n ) {\n acc = acc.concat(checkFile);\n } else {\n const rejectedFile: UploadFile = this.makeUploadFile(checkFile, i);\n this.serviceEvents.emit({ type: 'rejected', file: rejectedFile });\n }\n }\n for (let i = 0; i < acc.length; i++) {\n const file = acc[i];\n const uploadFile: UploadFile = this.makeUploadFile(file, i);\n this.serviceEvents.emit({ type: 'addedToQueue', file: uploadFile });\n this.queue.push(uploadFile);\n }\n this.serviceEvents.emit({ type: 'allAddedToQueue' });\n }\n\n initInputEvents(input: EventEmitter<UploadInput>): Subscription {\n return input.subscribe((event: UploadInput) => {\n switch (event.type) {\n case 'uploadFile':\n const uploadFileIndex = this.queue.findIndex(\n (file) => file === event.file\n );\n if (uploadFileIndex !== -1 && event.file) {\n this.uploadScheduler.next({\n file: this.queue[uploadFileIndex],\n event: event,\n });\n }\n break;\n case 'uploadAll':\n const files = this.queue.filter(\n (file) => file.progress.status === UploadStatus.Queue\n );\n files.forEach((file) =>\n this.uploadScheduler.next({ file: file, event: event })\n );\n break;\n case 'cancel':\n const id = event.id || null;\n if (!id) {\n return;\n }\n const subs = this.subs.filter((sub) => sub.id === id);\n subs.forEach((sub) => {\n if (sub.sub) {\n sub.sub.unsubscribe();\n const fileIndex = this.queue.findIndex((file) => file.id === id);\n if (fileIndex !== -1) {\n this.queue[fileIndex].progress.status = UploadStatus.Cancelled;\n this.serviceEvents.emit({\n type: 'cancelled',\n file: this.queue[fileIndex],\n });\n }\n }\n });\n break;\n case 'cancelAll':\n this.subs.forEach((sub) => {\n if (sub.sub) {\n sub.sub.unsubscribe();\n }\n\n const file = this.queue.find(\n (uploadFile) => uploadFile.id === sub.id\n );\n if (file) {\n file.progress.status = UploadStatus.Cancelled;\n this.serviceEvents.emit({ type: 'cancelled', file: file });\n }\n });\n break;\n case 'remove':\n if (!event.id) {\n return;\n }\n\n const i = this.queue.findIndex((file) => file.id === event.id);\n if (i !== -1) {\n const file = this.queue[i];\n this.queue.splice(i, 1);\n this.serviceEvents.emit({ type: 'removed', file: file });\n }\n break;\n case 'removeAll':\n if (this.queue.length) {\n this.queue = [];\n this.serviceEvents.emit({ type: 'removedAll' });\n }\n break;\n }\n });\n }\n\n startUpload(upload: {\n file: UploadFile;\n event: UploadInput;\n }): Observable<UploadOutput> {\n return new Observable((observer) => {\n const sub = this.uploadFile(upload.file, upload.event)\n .pipe(\n finalize(() => {\n if (!observer.closed) {\n observer.complete();\n }\n })\n )\n .subscribe({\n next: (output) => {\n observer.next(output);\n },\n error: (err) => {\n observer.error(err);\n observer.complete();\n },\n complete: () => {\n observer.complete();\n },\n });\n\n this.subs.push({ id: upload.file.id, sub: sub });\n });\n }\n\n uploadFile(file: UploadFile, event: UploadInput): Observable<UploadOutput> {\n return new Observable((observer) => {\n const url = event.url || '';\n const method = event.method || 'POST';\n const data = event.data || {};\n const headers = event.headers || {};\n\n const xhr = new XMLHttpRequest();\n const time: number = new Date().getTime();\n let progressStartTime: number =\n (file.progress.data && file.progress.data.startTime) || time;\n let speed = 0;\n let eta: number | null = null;\n\n xhr.upload.addEventListener(\n 'progress',\n (e: ProgressEvent) => {\n if (e.lengthComputable) {\n const percentage = Math.round((e.loaded * 100) / e.total);\n const diff = new Date().getTime() - time;\n speed = Math.round((e.loaded / diff) * 1000);\n progressStartTime =\n (file.progress.data && file.progress.data.startTime) ||\n new Date().getTime();\n eta = Math.ceil((e.total - e.loaded) / speed);\n\n file.progress = {\n status: UploadStatus.Uploading,\n data: {\n percentage: percentage,\n speed: speed,\n speedHuman: `${humanizeBytes(speed)}/s`,\n startTime: progressStartTime,\n endTime: null,\n eta: eta,\n etaHuman: this.secondsToHuman(eta),\n },\n };\n\n observer.next({ type: 'uploading', file: file });\n }\n },\n false\n );\n\n xhr.upload.addEventListener('error', (e: Event) => {\n observer.error(e);\n observer.complete();\n });\n\n xhr.onreadystatechange = () => {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n const speedAverage = Math.round(\n (file.size / (new Date().getTime() - progressStartTime)) * 1000\n );\n file.progress = {\n status: UploadStatus.Done,\n data: {\n percentage: 100,\n speed: speedAverage,\n speedHuman: `${humanizeBytes(speedAverage)}/s`,\n startTime: progressStartTime,\n endTime: new Date().getTime(),\n eta: eta,\n etaHuman: this.secondsToHuman(eta || 0),\n },\n };\n\n file.responseStatus = xhr.status;\n try {\n file.response = JSON.parse(xhr.response);\n } catch (e) {\n file.response = xhr.response;\n }\n\n file.responseHeaders = this.parseResponseHeaders(\n xhr.getAllResponseHeaders()\n );\n\n observer.next({ type: 'done', file: file });\n\n observer.complete();\n }\n };\n\n xhr.open(method, url, true);\n xhr.withCredentials = !!event.withCredentials;\n\n try {\n const uploadFile = <BlobFile>file.nativeFile;\n const uploadIndex = this.queue.findIndex(\n (outFile) => outFile.nativeFile === uploadFile\n );\n\n if (\n this.queue[uploadIndex].progress.status === UploadStatus.Cancelled\n ) {\n observer.complete();\n }\n\n Object.keys(headers).forEach((key) =>\n xhr.setRequestHeader(key, headers[key])\n );\n\n let bodyToSend: FormData | BlobFile;\n\n if (event.includeWebKitFormBoundary !== false) {\n Object.keys(data).forEach((key) => file.form.append(key, data[key]));\n file.form.append(\n event.fieldName || 'file',\n uploadFile,\n uploadFile.name\n );\n bodyToSend = file.form;\n } else {\n bodyToSend = uploadFile;\n }\n\n this.serviceEvents.emit({ type: 'start', file: file });\n xhr.send(bodyToSend);\n } catch (e) {\n observer.complete();\n }\n\n return () => {\n xhr.abort();\n };\n });\n }\n\n secondsToHuman(sec: number): string {\n return new Date(sec * 1000).toISOString().substring(11, 11 + 8);\n }\n\n generateId(): string {\n return Math.random().toString(36).substring(7);\n }\n\n setContentTypes(contentTypes: string[]): void {\n if (typeof contentTypes !== 'undefined' && contentTypes instanceof Array) {\n if (contentTypes.find((type: string) => type === '*') !== undefined) {\n this.contentTypes = ['*'];\n } else {\n this.contentTypes = contentTypes;\n }\n return;\n }\n this.contentTypes = ['*'];\n }\n\n allContentTypesAllowed(): boolean {\n return this.contentTypes.find((type: string) => type === '*') !== undefined;\n }\n\n isContentTypeAllowed(mimetype: string): boolean {\n if (this.allContentTypesAllowed()) {\n return true;\n }\n return (\n this.contentTypes.find((type: string) => type === mimetype) !== undefined\n );\n }\n\n isFileSizeAllowed(fileSize: number): boolean {\n if (!this.maxFileSize) {\n return true;\n }\n return fileSize <= this.maxFileSize;\n }\n\n makeUploadFile(file: File, index: number): UploadFile {\n return {\n fileIndex: index,\n id: this.generateId(),\n name: file.name,\n size: file.size,\n type: file.type,\n form: new FormData(),\n progress: {\n status: UploadStatus.Queue,\n data: {\n percentage: 0,\n speed: 0,\n speedHuman: `${humanizeBytes(0)}/s`,\n startTime: null,\n endTime: null,\n eta: null,\n etaHuman: null,\n },\n },\n lastModifiedDate: new Date(file.lastModified),\n sub: undefined,\n nativeFile: file,\n };\n }\n\n private parseResponseHeaders(httpHeaders: string): { [key: string]: string } {\n if (!httpHeaders) {\n return {};\n }\n\n return httpHeaders\n .split('\\n')\n .map((x: string) => x.split(/: */, 2))\n .filter((x: string[]) => x[0])\n .reduce((acc: { [key: string]: string }, x: string[]) => {\n acc[x[0]] = x[1];\n return acc;\n }, {});\n }\n}\n","import {Directive, ElementRef, EventEmitter, HostListener, Input, OnDestroy, OnInit, Output} from \"@angular/core\";\nimport {UploaderOptions, UploadInput, UploadOutput} from \"./interfaces\";\nimport {DataUploaderService} from \"./ngx-uploader.class\";\nimport {Subscription} from \"rxjs\";\n\n@Directive({\n selector: \"[dataFileDrop]\"\n})\nexport class NgFileDropDirective implements OnInit, OnDestroy {\n @Input() options!: UploaderOptions;\n @Input() uploadInput!: EventEmitter<UploadInput>;\n @Output() uploadOutput: EventEmitter<UploadOutput>;\n\n public upload!: DataUploaderService;\n public el!: HTMLInputElement;\n\n private _sub!: Subscription[];\n\n constructor(public elementRef: ElementRef) {\n this.uploadOutput = new EventEmitter<UploadOutput>();\n }\n\n ngOnInit() {\n this._sub = [];\n const concurrency = this.options && this.options.concurrency || Number.POSITIVE_INFINITY;\n const allowedContentTypes = this.options && this.options.allowedContentTypes || [\"*\"];\n const maxUploads = this.options && this.options.maxUploads || Number.POSITIVE_INFINITY;\n const maxFileSize = this.options && this.options.maxFileSize || Number.POSITIVE_INFINITY;\n this.upload = new DataUploaderService(concurrency, allowedContentTypes, maxUploads, maxFileSize);\n\n this.el = this.elementRef.nativeElement;\n\n this._sub.push(\n this.upload.serviceEvents.subscribe((event: UploadOutput) => {\n this.uploadOutput.emit(event);\n })\n );\n\n if (this.uploadInput instanceof EventEmitter) {\n this._sub.push(this.upload.initInputEvents(this.uploadInput));\n }\n\n this.el.addEventListener(\"drop\", this.stopEvent, false);\n this.el.addEventListener(\"dragenter\", this.stopEvent, false);\n this.el.addEventListener(\"dragover\", this.stopEvent, false);\n }\n\n ngOnDestroy() {\n if (this._sub) {\n this._sub.forEach(sub => sub.unsubscribe());\n }\n }\n\n stopEvent = (e: Event) => {\n e.stopPropagation();\n e.preventDefault();\n };\n\n @HostListener(\"drop\", [\"$event\"])\n public onDrop(e: any) {\n e.stopPropagation();\n e.preventDefault();\n\n const event: UploadOutput = {type: \"drop\"};\n this.uploadOutput.emit(event);\n this.upload.handleFiles(e.dataTransfer.files);\n }\n\n @HostListener(\"dragover\", [\"$event\"])\n public onDragOver(e: Event) {\n if (!e) {\n return;\n }\n\n const event: UploadOutput = {type: \"dragOver\"};\n this.uploadOutput.emit(event);\n }\n\n @HostListener(\"dragleave\", [\"$event\"])\n public onDragLeave(e: Event) {\n if (!e) {\n return;\n }\n\n const event: UploadOutput = {type: \"dragOut\"};\n this.uploadOutput.emit(event);\n }\n}\n","import {Directive, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output} from \"@angular/core\";\nimport {UploaderOptions, UploadOutput} from \"./interfaces\";\nimport {DataUploaderService} from \"./ngx-uploader.class\";\nimport {Subscription} from \"rxjs\";\n\n@Directive({\n selector: \"[dataFileSelect]\"\n})\nexport class NgFileSelectDirective implements OnInit, OnDestroy {\n @Input() options!: UploaderOptions;\n @Input() uploadInput!: EventEmitter<any>;\n @Output() uploadOutput: EventEmitter<UploadOutput>;\n\n public upload!: DataUploaderService;\n public el!: HTMLInputElement;\n\n private _sub!: Subscription[];\n\n constructor(public elementRef: ElementRef) {\n this.uploadOutput = new EventEmitter<UploadOutput>();\n }\n\n ngOnInit() {\n this._sub = [];\n const concurrency = this.options && this.options.concurrency || Number.POSITIVE_INFINITY;\n const allowedContentTypes = this.options && this.options.allowedContentTypes || [\"*\"];\n const maxUploads = this.options && this.options.maxUploads || Number.POSITIVE_INFINITY;\n const maxFileSize = this.options && this.options.maxFileSize || Number.POSITIVE_INFINITY;\n this.upload = new DataUploaderService(concurrency, allowedContentTypes, maxUploads, maxFileSize);\n\n this.el = this.elementRef.nativeElement;\n this.el.addEventListener(\"change\", this.fileListener, false);\n\n this._sub.push(\n this.upload.serviceEvents.subscribe((event: UploadOutput) => {\n this.uploadOutput.emit(event);\n })\n );\n\n if (this.uploadInput instanceof EventEmitter) {\n this._sub.push(this.upload.initInputEvents(this.uploadInput));\n }\n }\n\n ngOnDestroy() {\n if (this.el) {\n this.el.removeEventListener(\"change\", this.fileListener, false);\n this._sub.forEach(sub => sub.unsubscribe());\n }\n }\n\n fileListener = () => {\n if (this.el.files) {\n this.upload.handleFiles(this.el.files);\n }\n };\n}\n","import {NgModule} from \"@angular/core\";\nimport {NgFileDropDirective} from \"./ng-file-drop.directive\";\nimport {NgFileSelectDirective} from \"./ng-file-select.directive\";\n\n@NgModule({\n declarations: [NgFileDropDirective, NgFileSelectDirective],\n exports: [NgFileDropDirective, NgFileSelectDirective]\n})\nexport class NgxUploaderModule {\n}\n","import jwt_decode from 'jwt-decode';\n\nexport interface IJwtResponseJson {\n access: string;\n refresh: string;\n}\n\nexport interface IJwtRefreshResponseJson {\n access: string;\n}\n\nexport interface IJwtBaseData {\n // FIXME: check minimal jwt data\n token_type: 'access' | 'refresh';\n user_id: number;\n // exp: number;\n // jti: string;\n}\n\nexport class Jwt<UserJwtData extends IJwtBaseData> {\n public readonly access?: string;\n public readonly refresh?: string;\n private readonly _data: UserJwtData | null = null;\n\n constructor(response?: IJwtResponseJson) {\n if (response) {\n this.access = response.access;\n this._data = Object.freeze(jwt_decode<UserJwtData>(response.access));\n this.refresh = response.refresh;\n } else {\n this._data = null;\n }\n }\n\n public get data(): UserJwtData | null {\n return this._data;\n }\n\n public toJson() {\n return { access: this.access, refresh: this.refresh };\n }\n}\n","import { Inject, Injectable, InjectionToken } from '@angular/core';\nimport {\n IJwtBaseData,\n IJwtRefreshResponseJson,\n IJwtResponseJson,\n Jwt,\n} from './jwt';\nimport { HttpClient } from '@angular/common/http';\nimport { catchError, switchMap, tap, map } from 'rxjs/operators';\nimport { Observable, of, ReplaySubject, throwError } from 'rxjs';\nimport { DataModel } from '../data/data-model';\nimport { Collection } from '../data/data-collection';\n\nexport interface AuthParams {\n tokenUrl: string;\n tokenRefreshUrl: string;\n loginField: string;\n passwordField: string;\n}\n\n/**\n * DATA_API_URL: stores data api base url\n */\nexport const DATA_AUTH_PARAMS = new InjectionToken<AuthParams>(\n 'data.auth.params'\n);\nexport const DATA_AUTH_USER_SERVICE = new InjectionToken<Collection<any>>(\n 'data.auth.user.service'\n);\n\nexport class AuthServiceBase<\n User extends DataModel,\n UserService extends Collection<User>,\n UserData extends IJwtBaseData\n> {\n private _user!: User;\n private _user$ = new ReplaySubject<User | null>(1);\n private _token!: Jwt<UserData>;\n\n constructor(\n @Inject(DATA_AUTH_USER_SERVICE) public userService: UserService,\n @Inject(DATA_AUTH_PARAMS) private _params: AuthParams,\n private _http: HttpClient\n ) {\n this.autoLogin();\n }\n\n public get isAnonymous(): boolean {\n return !this._token.access;\n }\n\n public get accessToken(): string | null {\n return this._token.access ? this._token.access : null;\n }\n\n public get refreshToken(): string | null {\n return this._token.refresh ? this._token.refresh : null;\n }\n\n public get currentUser(): User | null {\n return this._user && this._user.id ? this._user : null;\n }\n\n public get currentUser$(): Observable<User | null> {\n return this._user$.asObservable();\n }\n\n public get refreshUrl(): string {\n return `${this._params.tokenRefreshUrl}`;\n }\n\n public get loginUrl(): string {\n return `${this._params.tokenUrl}`;\n }\n\n public logout(): void {\n localStorage.removeItem('auth');\n this._token = new Jwt();\n this._user = this.userService.create();\n this._user$.next(null);\n }\n\n public autoLogin(): void {\n const localAuth = localStorage.getItem('auth');\n if (!localAuth) {\n return this.logout();\n }\n const { user, token } = JSON.parse(localAuth);\n this._token = new Jwt(token);\n this._user = this.userService.create(user);\n this._user$.next(this._user);\n }\n\n public login(username: string, password: string): Observable<boolean> {\n const payload: { [_index: string]: string } = {};\n payload[this._params.loginField] = username;\n payload[this._params.passwordField] = password;\n return this._http.post<IJwtResponseJson>(this.loginUrl, payload).pipe(\n tap((tok) => {\n this._token = new Jwt(tok);\n this.saveAuth();\n }),\n switchMap(() => {\n if (this._token.data && this._token.data.user_id) {\n return this.userService.fetch(this._token.data!.user_id);\n } else {\n return throwError(() => 'Invalid token');\n }\n }),\n tap((user: User) => {\n this._user = user;\n this.saveAuth();\n }),\n map(() => true),\n catchError((error: any) => {\n this.logout();\n return of(false);\n })\n );\n }\n\n public saveAuth() {\n if (this.isAnonymous) {\n localStorage.removeItem('auth');\n this._user$.next(null);\n } else {\n localStorage.setItem(\n 'auth',\n JSON.stringify({\n user: this._user.toJson(),\n token: this._token.toJson(),\n })\n );\n this._user$.next(this._user);\n }\n }\n\n public refresh(): Observable<IJwtRefreshResponseJson | null> {\n if (!this._token.refresh) {\n this.logout();\n return of(null);\n }\n return this._http\n .post<IJwtRefreshResponseJson>(this.refreshUrl, {\n refresh: this._token.refresh as string,\n })\n .pipe(\n tap((tok) => {\n this._token = new Jwt({\n access: tok.access,\n refresh: this._token.refresh!,\n });\n this.saveAuth();\n })\n );\n }\n}\n","import { Inject, Injectable, InjectionToken } from '@angular/core';\nimport {\n HttpErrorResponse,\n HttpHandler,\n HttpInterceptor,\n HttpRequest,\n} from '@angular/common/http';\nimport { AuthServiceBase } from './auth.service';\nimport { catchError, filter, switchMap, take } from 'rxjs/operators';\nimport { BehaviorSubject, throwError } from 'rxjs';\nimport { IJwtRefreshResponseJson } from './jwt';\n\nexport const DATA_AUTH_SERVICE = new InjectionToken<\n AuthServiceBase<any, any, any>\n>('data.auth.service');\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthInterceptor implements HttpInterceptor {\n private _isRefreshing = false;\n private _refreshTokenSubject =\n new BehaviorSubject<IJwtRefreshResponseJson | null>(null);\n\n constructor(\n @Inject(DATA_AUTH_SERVICE) private _auth: AuthServiceBase<any, any, any>\n ) {}\n\n intercept(req: HttpRequest<any>, next: HttpHandler) {\n if (this._auth.isAnonymous) {\n return next.handle(req);\n }\n if (!this._auth.isAnonymous) {\n req = this._addToken(req, this._auth.accessToken as string);\n }\n return next.handle(req).pipe(\n catchError((error) => {\n if (error instanceof HttpErrorResponse && error.status === 401) {\n return this._handle401Error(req, next);\n } else {\n return throwError(error);\n }\n })\n );\n }\n\n private _handle401Error(request: HttpRequest<any>, next: HttpHandler) {\n if (!this._isRefreshing) {\n this._isRefreshing = true;\n this._refreshTokenSubject.next(null);\n\n return this._auth.refresh().pipe(\n switchMap((token) => {\n if (token === null) {\n return throwError(\n () =>\n new HttpErrorResponse({\n error: 'Forbidden, please log in',\n status: 403,\n statusText: 'Warning',\n url: request.url,\n })\n );\n } else {\n this._isRefreshing = false;\n this._refreshTokenSubject.next(token);\n return next.handle(this._addToken(request, token.access));\n }\n })\n );\n } else {\n return this._refreshTokenSubject.pipe(\n filter((token) => token != null),\n take(1),\n switchMap((token) =>\n next.handle(\n this._addToken(request, (token as IJwtRefreshResponseJson).access)\n )\n )\n );\n }\n }\n\n private _addToken(request: HttpRequest<any>, token: string) {\n return request.clone({\n setHeaders: {\n authorization: `Bearer ${token}`,\n },\n });\n }\n}\n","import { Route, Router } from '@angular/router';\n\n/**\n * Template function type.\n * Used for page title or other data to string operations.\n *\n * @param data: object\n * @param path: optional path (see: usage)\n */\nexport type TplFn<T> = (data: T, path?: string) => string;\n\n/**\n * Base route parameters interface.\n */\nexport interface BaseRouteParams {\n /** Skip route in breadcrumbs */\n skip?: boolean;\n /** Route title or title template */\n title?: string | TplFn<any>;\n /** Route icon string */\n icon?: string;\n /** Route config item */\n route: RouteConfigItem;\n /** This route is a tree route */\n tree?: boolean;\n}\n\n/**\n * Route function type.\n * Takes parameters, return a route.\n */\nexport type RouteFn = (...args: any[]) => (string | number)[];\n\n/**\n * Route config item.\n * Stores route named parameters, route function and route name.\n */\nexport interface RouteConfigItem {\n params: string[];\n route: RouteFn;\n name: string;\n}\n\nexport function RData<T extends BaseRouteParams>(value: T) {\n return value;\n}\n\nexport type RoutesConfig<T extends string> = {\n readonly [Property in T]: RouteConfigItem;\n};\n\nexport interface StrictRoutes extends Route {\n data: BaseRouteParams;\n}\n\nexport type RoutesDefinition = StrictRoutes[];\n\ninterface RouteArg<T> {\n [index: string]: T;\n}\n\nexport class Link<T> {\n private _cargs: { [index: string]: any } = {};\n private _params: string[] = [];\n private _route: RouteFn;\n private _router?: Router;\n\n constructor(config: RouteConfigItem, context: any, router?: Router) {\n this._params = config.params || [];\n this._route = config.route;\n this._router = router;\n this._name = config.name;\n if (context) {\n this.context(context);\n }\n }\n\n private _name!: string;\n\n public get name(): string {\n return this._name;\n }\n\n public context(ctx: any): void {\n for (const n of this._params) {\n if (ctx && ctx[n]) {\n this._cargs[n] = ctx[n];\n } else {\n this._cargs[n] = null;\n }\n }\n }\n\n public route(params?: Required<RouteArg<T>>): (string | number)[] {\n const rargs: any[] = [];\n for (const n of this._params) {\n if (params && params[n] !== undefined && params[n] !== null) {\n rargs.push(params[n]);\n } else if (this._cargs[n] !== undefined && this._cargs[n] !== null) {\n rargs.push(this._cargs[n]);\n } else {\n console.error('Missing route parameter', n);\n return [];\n }\n }\n // SEE: Check for undefined in rargs\n return this._route(...rargs);\n }\n\n public async navigate(\n params?: { [index: string]: T },\n router?: Router\n ): Promise<boolean> {\n if (router) {\n return router.navigate(this.route(params));\n }\n if (this._router) {\n return this._router.navigate(this.route(params));\n }\n console.error('Router not provided, no navigation');\n return false;\n }\n}\n","import {\n Component,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n} from '@angular/core';\nimport { Subject, takeUntil } from 'rxjs';\nimport {\n ActivatedRoute,\n ActivatedRouteSnapshot,\n NavigationEnd,\n Router,\n RouterModule,\n RouterState,\n UrlSegment,\n} from '@angular/router';\nimport { filter } from 'rxjs/operators';\nimport { CommonModule } from '@angular/common';\nimport { BaseRouteParams, TplFn } from '../routing';\n\nexport interface IPathTreeItem {\n path: string;\n title: string;\n icon: string;\n current: boolean;\n}\n\n/**\n * Use data from route config to create a breadcrumb for current route.\n *\n * Route config data is :\n * - title : route fragment title or lodash template to build title\n * (provided arguments for template processing : route (current segment route snapshot)\n * and data (input argument)\n * - icon: icon classes. Example fa fa-home for home & font awesome\n */\n@Component({\n selector: 'data-breadcrumb',\n templateUrl: './breadcrumb.component.html',\n styleUrls: ['./breadcrumb.component.css'],\n standalone: true,\n imports: [CommonModule, RouterModule],\n})\nexport class BreadcrumbComponent implements OnChanges, OnInit, OnDestroy {\n /**\n * Additional data to be used in titleTemplate\n */\n @Input() public data: any;\n /**\n * Do we display icons ?\n */\n @Input() public icons = true;\n public tree: IPathTreeItem[] = [];\n private _subscriptions = new Subject<void>();\n\n constructor(public router: Router, public route: ActivatedRoute) {}\n\n ngOnInit(): void {\n this.getRouteTree(this.router.routerState);\n this.router.events\n .pipe(\n takeUntil(this._subscriptions),\n filter((event) => event instanceof NavigationEnd)\n )\n .subscribe(() => {\n this.getRouteTree(this.router.routerState);\n });\n }\n\n public ngOnDestroy() {\n this._subscriptions.next();\n this._subscriptions.complete();\n }\n\n public ngOnChanges(changes: SimpleChanges) {\n this.getRouteTree(this.router.routerState);\n }\n\n public getRouteTree(current: RouterState): void {\n const tree: IPathTreeItem[] = [];\n const url: string[] = [];\n let p: ActivatedRouteSnapshot | null = current.root.snapshot;\n\n while (p != null) {\n let rdata: Partial<BaseRouteParams> = {\n tree: false,\n title: () => 'xxxx',\n icon: '',\n skip: true,\n };\n const data = p.data as BaseRouteParams;\n\n // Get route data\n if (p.routeConfig && p.routeConfig.data) {\n rdata = p.routeConfig.data as BaseRouteParams;\n }\n\n if (rdata.tree) {\n // Get icon\n for (const u of p.url) {\n url.push(u.path);\n let rtd: IPathTreeItem = {\n icon: this.getIcon(rdata, data),\n title: this.getTitle(rdata, data, u),\n path: url.join('/'),\n current: false,\n };\n if (rtd.path.length > 0 && rtd.path[0] !== '/') {\n rtd.path = '/' + rtd.path;\n }\n if (!rdata.skip) {\n tree.push(rtd);\n }\n }\n } else {\n url.push(p.url.join('/'));\n let rtd: IPathTreeItem = {\n icon: this.getIcon(rdata, data),\n title: this.getTitle(rdata, data),\n path: url.join('/'),\n current: false,\n };\n if (rtd.path.length > 0 && rtd.path[0] !== '/') {\n rtd.path = '/' + rtd.path;\n }\n if (!rdata.skip) {\n tree.push(rtd);\n }\n }\n\n p = p.firstChild;\n }\n if (tree.length > 0) {\n tree[tree.length - 1].current = true;\n }\n this.tree = tree;\n }\n\n public getTitle(\n rdata: Partial<BaseRouteParams>,\n data: BaseRouteParams,\n u?: UrlSegment\n ): string {\n if (rdata['title']) {\n if (typeof rdata['title'] === 'function') {\n const tpl: TplFn<any> = rdata['title'];\n try {\n if (u) {\n return tpl(data, u.path);\n } else {\n return tpl(data);\n }\n } catch (e) {\n console.warn('Unable to process breadcrumb function', e);\n if (data.title != null) {\n return 'xx';\n }\n }\n } else {\n return rdata['title'];\n }\n }\n return 'xxx';\n }\n\n public getIcon(\n rdata: Partial<BaseRouteParams>,\n data: BaseRouteParams\n ): string {\n if (data.icon) {\n return data.icon;\n }\n return '';\n }\n}\n","\n<nav aria-label=\"breadcrumb\">\n <ol class=\"breadcrumb\">\n <ng-container *ngFor=\"let p of tree\">\n <li class=\"breadcrumb-item\" *ngIf=\"!p.current\"><a class=\"breadcrumb-item\" [routerLink]=\"p.path\">\n <ng-container *ngIf=\"icons &amp;&amp; p.icon\"><i class=\"me-2\" [ngClass]=\"p.icon\"></i>{{p.title}}</ng-container>\n <ng-container *ngIf=\"!(icons &amp;&amp; p.icon)\">{{p.title}}</ng-container></a></li>\n <li class=\"breadcrumb-item active\" aria-current=\"page\" *ngIf=\"p.current\">\n <ng-container *ngIf=\"icons &amp;&amp; p.icon\"><i class=\"me-1\" [ngClass]=\"p.icon\"></i>{{p.title}}</ng-container>\n <ng-container *ngIf=\"!(icons &amp;&amp; p.icon)\">{{p.title}}</ng-container>\n </li>\n </ng-container>\n </ol>\n</nav>","import { Injectable } from '@angular/core';\nimport { UrlSegment } from '@angular/router';\n\ninterface ITabStoredMem {\n name: string;\n value: string;\n}\n\nexport class NavDriver {\n private lastActive!: Date;\n\n constructor(\n private _parent: TabMemoryService,\n public name: string,\n public defaults: string,\n private save: boolean\n ) {\n this._current = this.defaults;\n\n const value = this._parent.load(this.name);\n if (value !== null) {\n this._current = value;\n }\n }\n\n private _current: string;\n\n public get current(): string {\n return this._current;\n }\n\n public set current(value: string) {\n this._current = value;\n this.lastActive = new Date();\n this._parent.save();\n }\n\n public get value(): ITabStoredMem {\n return { name: this.name, value: this._current };\n }\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TabMemoryService {\n private tabMem: { [index: string]: NavDriver } = {};\n\n constructor() {}\n\n private static targetToString(\n target: (string | number | UrlSegment)[]\n ): string {\n let out = '';\n for (const t of target) {\n out += `/${t}`;\n }\n return out;\n }\n\n public memFor(\n target: (string | number | UrlSegment)[],\n defaults: string,\n save: boolean = true\n ): NavDriver {\n const tname = TabMemoryService.targetToString(target);\n if (this.tabMem[tname] === undefined) {\n this.tabMem[tname] = new NavDriver(this, tname, defaults, save);\n }\n return this.tabMem[tname];\n }\n\n public save() {\n const tosave: { [index: string]: ITabStoredMem } = {};\n for (const tn of Object.keys(this.tabMem)) {\n tosave[tn] = this.tabMem[tn].value;\n }\n localStorage.setItem('tabmem', JSON.stringify(tosave));\n }\n\n public load(name: string): string | null {\n const tm = localStorage.getItem('tabmem');\n if (tm) {\n const tmd = JSON.parse(tm);\n if (tmd && tmd[name] && tmd[name].value) {\n return tmd[name].value;\n }\n }\n return null;\n }\n}\n","export const slugify = (str: string): string => {\n str = str.replace(/^\\s+|\\s+$/g, ''); // trim\n str = str.toLowerCase();\n\n // remove accents, swap ñ for n, etc\n const from = 'àáäâèéëêìíïîòóöôùúüûñç·/_,:;';\n const to = 'aaaaeeeeiiiioooouuuunc------';\n for (let i = 0, l = from.length; i < l; i++) {\n str = str.replace(new RegExp(from.charAt(i), 'g'), to.charAt(i));\n }\n\n str = str\n .replace(/[^a-z0-9 -]/g, '') // remove invalid chars\n .replace(/\\s+/g, '-') // collapse whitespace and replace by -\n .replace(/-+/g, '-'); // collapse dashes\n\n return str;\n};\n","/*\n * Public API Surface of data\n */\n\nexport * from './lib/data/data-parameters';\nexport * from './lib/data/data-model';\nexport * from './lib/data/data-collection';\nexport * from './lib/data/data-backend';\nexport * from './lib/data/data-query';\n\nexport * from './lib/modellist/model-list.service';\nexport * from './lib/modellist/model-list-fields/model-list-fields-selector/model-list-fields-selector.component';\nexport * from './lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component';\nexport * from './lib/modellist/model-list-sorter/model-list-sorter/model-list-sorter.component';\nexport * from './lib/modellist/model-list-filters/model-list-filters-select/model-list-filters-select.component';\nexport * from './lib/modellist/model-list-filters/model-list-filters/model-list-filters.component';\n\nexport * from './lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter';\nexport * from './lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter';\nexport * from './lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter';\nexport * from './lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetimerange-filter';\nexport * from './lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter';\nexport * from './lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter';\nexport * from './lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter';\nexport * from './lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter';\nexport * from './lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter';\nexport * from './lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter';\nexport * from './lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter';\n\nexport * from './lib/modellist/model-list-paginator/model-list-paginator/model-list-paginator.component';\n\nexport * from './lib/dispedit/dispedit.module';\nexport * from './lib/dispedit/sdelete/sdelete.component';\nexport * from './lib/data/fields/index';\n\nexport * from './lib/messages/message.service';\nexport * from './lib/messages/message-zone/message-zone.component';\n\nexport * from './lib/data/data-collection.mock';\nexport * from './lib/uploader/index';\n\nexport * from './lib/auth/auth.service';\nexport * from './lib/auth/auth-interceptor.service';\nexport * from './lib/auth/jwt';\n\nexport * from './lib/routing/routing';\nexport * from './lib/routing/breadcrumb/breadcrumb.component';\n\nexport * from './lib/utils/tab-memory.service';\nexport * from './lib/utils/slugify';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3","i1.DataMessageService","i4.FkselectComponent","i5.M2mselectComponent"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA;;AAEG;MACU,YAAY,GAAG,IAAI,cAAc,CAAS,cAAc,EAAE;AACvE;;;AAGG;MACU,2BAA2B,GAAG,IAAI,cAAc,CAAS,yBAAyB,EAAE;AAYpF,MAAA,0BAA0B,GAAsB;AAC3D,IAAA,QAAQ,EAAE;AACR,QAAA,WAAW,EAAE,IAAI;AACjB,QAAA,YAAY,EAAE;AACZ,YAAA,YAAY,EAAE,cAAc;AAC5B,YAAA,aAAa,EAAE,cAAc;AAC7B,YAAA,gBAAgB,EAAE,cAAc;AAChC,YAAA,YAAY,EAAE,cAAc;AAC5B,YAAA,cAAc,EAAE,cAAc;AAC9B,YAAA,eAAe,EAAE,cAAc;AAC/B,YAAA,gBAAgB,EAAE,cAAc;AAChC,YAAA,gBAAgB,EAAC,cAAc;AAC/B,YAAA,UAAU,EAAE,cAAc;AAC1B,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,UAAU,EAAE,cAAc;AAC1B,YAAA,QAAQ,EAAE,aAAa;AACxB,SAAA;AACF,KAAA;EACD;AAGF;;AAEG;MACU,mBAAmB,GAAG,IAAI,cAAc,CAAoB,qBAAqB;;ACtCvF,MAAM,qBAAqB,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAqB/D;;;;;;;;;;;;;;;;;;AAkBG;MACU,gBAAgB,CAAA;AAa3B,IAAA,WAAA,CAAY,MAA0B,EAAA;QAP/B,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;QACjB,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;QAGjB,IAAU,CAAA,UAAA,GAA0B,YAAY,CAAC;QACjD,IAAW,CAAA,WAAA,GAA2B,MAAM,CAAC;AAGlD,QAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AACd,YAAA,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;AACtB,SAAA;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC;AAC9B,SAAA;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AACd,YAAA,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;AAChB,SAAA;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;KACxB;;AAGD,IAAA,IAAW,UAAU,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;KAC7B;;AAGD,IAAA,IAAW,KAAK,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC;KAC9C;;AAGM,IAAA,WAAW,CAAC,QAAmB,EAAA;AACpC,QAAA,OAAO,IAAI,WAAW,CAClB,QAAgB,CAAC,IAAI,CAAC,KAAK,CAAQ,IAAK,IAAI,CAAC,eAAe,EAAS,EACvE,IAAI,CAAC,UAAU,CAChB,CAAC;KACH;;AAGM,IAAA,QAAQ,CAAC,IAAS,EAAA;AACvB,QAAA,OAAO,IAAU,CAAC;KACnB;;AAGM,IAAA,MAAM,CAAC,IAAQ,EAAA;AACpB,QAAA,OAAO,IAAW,CAAC;KACpB;AAED;;;;AAIG;AACI,IAAA,QAAQ,CAAC,IAAQ,EAAE,MAAA,GAAiB,SAAS,EAAA;QAClD,OAAO,CAAA,EAAG,IAAI,CAAA,CAAE,CAAC;KAClB;AAED;;;AAGG;IACO,aAAa,GAAA;QACrB,MAAM,CAAC,GAAkB,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC7B,SAAA;AACD,QAAA,OAAO,CAAC,CAAC;KACV;AAED;;;AAGG;IACI,OAAO,CAAC,OAAY,EAAE,EAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;KACnC;AAED;;;;AAIG;IACO,eAAe,CAAC,OAAY,EAAE,EAAA;AACtC,QAAA,IAAI,IAAI,CAAC,YAAY,YAAY,QAAQ,EAAE;AACzC,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AAChC,SAAA;QACD,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE;YACpD,MAAM,IAAI,KAAK,CACb,CAAA,MAAA,EAAS,IAAI,CAAC,IAAI,CAAwC,sCAAA,CAAA,CAC3D,CAAC;AACH,SAAA;QACD,OAAO,IAAI,CAAC,YAAY,CAAC;KAC1B;AACF,CAAA;AAYD;AACA,MAAM,OAAO,GAAG,CAAC,MAAW,KAC1B,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,MAAM,CACvC,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAQ,CAC5C,CAAC;AAkBJ;;;;;;;;AAQG;SACa,gBAAgB,CAK9B,IAAQ,EACR,IAAY,EACZ,OAA4C,EAAA;AAE5C,IAAA,OAAO,CAAC,MAAiB,EAAE,WAA4B,KAAI;QACzD,MAAM,WAAW,GAGb,OAAO,CAAC,WAAW,CAAC,qBAAqB,EAAE,MAAM,CAAC;YACtD,IAAI,GAAG,EAAqC,CAAC;QAC7C,IAAI,KAAK,GAAW,CAAI,EAAA,MAAM,CAAC,WAAmB,CAAC,MAAM,CAAA,CAAE,CAAC;AAC5D,QAAA,IAAI,CAAC,KAAK,KAAK,CAAA,SAAA,CAAW,IAAI,KAAK,KAAK,EAAE,KAAK,IAAI,KAAK,cAAc,EAAE;YACtE,MAAM,KAAK,CACT,CAAA,UAAA,EAAa,IAAI,CAAA,qDAAA,EAAwD,KAAK,CAAiB,cAAA,EAAA,MAAM,CAAE,CAAA,CACxG,CAAC;AACH,SAAA;QACD,MAAM,EAAE,GAAG,CAAA,EAAG,KAAK,CAAA,EAAA,EAAK,MAAM,CAAC,WAAW,CAAC,CAAA,CAAE,CAAC;QAC9C,IAAI,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;;AAE7B,QAAA,IAAI,EAAE,EAAE;;YAEN,MAAM,KAAK,CAAC,CAAS,MAAA,EAAA,EAAE,sBAAsB,EAAE,CAAA,CAAE,CAAC,CAAC;AACpD,SAAA;QACD,EAAE,GAAG,EAA+B,CAAC;AACrC,QAAA,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,IAAW,CAAC,EAAE;YACrC,EAAU,CAAC,GAAG,CAAC,GAAI,IAAY,CAAC,GAAG,CAAC,CAAC;AACvC,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;YAC3B,EAAE,CAAC,IAAI,GAAG,CAAA,EAAG,MAAM,CAAC,WAAW,CAAC,CAAA,CAAE,CAAC;AACpC,SAAA;AACD,QAAA,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC;AACf,QAAA,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC;QACb,EAAE,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC;AAC7B,QAAA,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACxB,OAAO,CAAC,cAAc,CAAC,qBAAqB,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;AACrE,KAAC,CAAC;AACJ;;AC5NA;;;;;;;;AAQG;MACU,SAAS,CAAA;AAiBpB;;;;;;AAMG;AACH,IAAA,WAAA,CAAsB,KAAuB,EAAA;QAAvB,IAAK,CAAA,KAAA,GAAL,KAAK,CAAkB;QAC3C,MAAM,EAAE,GACN,OAAO,CAAC,WAAW,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC;;QAEnD,IAAI,CAAC,EAAE,EAAE;;AAEP,YAAA,MAAM,IAAI,KAAK,CACb,yFAAyF,CAC1F,CAAC;AACH,SAAA;;AAED,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAqC,CAAC;QAC5D,IAAI,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AACzC,QAAA,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,KAAK,QAAQ,EAAE;AAC3C,YAAA,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;gBACzB,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,gBAAA,IAAI,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;oBACzB,SAAS;AACV,iBAAA;AACD,gBAAA,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE;AACrD,oBAAA,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC;AACnC,iBAAA;AACF,aAAA;AACD,YAAA,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;AACxC,SAAA;QACD,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;KACjC;AAED,IAAA,IAAW,WAAW,GAAA;QACpB,OAAO,IAAI,CAAC,KAAwB,CAAC;KACtC;IAED,IAAW,WAAW,CAAC,IAAqB,EAAA;AAC1C,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;KACnB;AAED;;;;;AAKG;AACI,IAAA,QAAQ,CACb,IAA8B,EAC9B,EAAE,OAAO,EAAE,KAAK,EAA6C,GAAA;AAC3D,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,KAAK,EAAE,KAAK;AACb,KAAA,EAAA;QAED,MAAM,MAAM,GAAiD,EAAE,CAAC;QAChE,IAAI,SAAS,GAAG,KAAK,CAAC;AACtB,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE;YACvB,IAAI,CAAC,OAAO,KAAK,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBAChE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBAChE,IAAI,IAAI,KAAK,IAAI,EAAE;AACjB,oBAAA,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;oBACjB,SAAS,GAAG,IAAI,CAAC;AAClB,iBAAA;AACF,aAAA;AACF,SAAA;QACD,OAAO,SAAS,GAAG,MAAM,GAAG,IAAI,CAAC;KAClC;AAEM,IAAA,MAAM,CAAC,MAA0B,EAAA;QACtC,IAAI,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACpC,YAAA,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC;AACnB,SAAA;QACD,MAAM,GAAG,GAA6B,EAAE,CAAC;AACzC,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;AAClB,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE;YACvB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;gBAClC,IAAI,GAAG,CAAC,QAAQ,EAAE;oBAChB,SAAS;AACV,iBAAA;gBACD,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,aAAA;AAAM,iBAAA;gBACL,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;oBAC5B,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,iBAAA;AACF,aAAA;AACF,SAAA;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;IAEM,MAAM,CACX,MAAmD,EACnD,IAAY,EACZ,EACE,IAAI,GAAG,SAAS,EAChB,MAAM,GAAG,KAAK,EACd,aAAa,GAAG,IAAI,EACpB,WAAW,GAAG,KAAK;;AAEnB,IAAA,MAAM,GAAG,EAAE,EACX,OAAO,GAAG,EAAE,MASV,EAAE,EAAA;AAEN,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;YAC5B,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;AAC1D,SAAA;QACD,OAAO,IAAI,CAAC,KAAK;AACd,aAAA,MAAM,CAAK,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;YAC9B,IAAI;YACJ,MAAM;YACN,OAAO;SACR,CAAC;AACD,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,MAAM,KAAI;AACb,YAAA,IAAI,MAAM,EAAE;AACV,gBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AACpB,oBAAA,OAAO,EAAE,aAAa;AACtB,oBAAA,KAAK,EAAE,WAAW;AACnB,iBAAA,CAAC,CAAC;AACH,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;AACD,YAAA,OAAO,MAAM,CAAC;SACf,CAAC,CACH,CAAC;KACL;AAED;;AAEG;AACH,IAAA,IAAW,CAAC,GAAA;;AAEV,QAAA,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;AACZ,YAAA,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;AACnE,SAAA;QACD,OAAO,IAAI,CAAC,EAAE,CAAC;KAChB;;AAGM,IAAA,EAAE,CAAK,KAAa,EAAA;QACzB,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACrB,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,OAAO,CAAC;AACnC,SAAA;QACD,MAAM,IAAI,KAAK,CACb,CAAA,EAAG,KAAK,CAAiB,cAAA,EAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAU,OAAA,EAAA,IAAI,CAAE,CAAA,CACvE,CAAC;KACH;;AAGM,IAAA,EAAE,CAAK,KAAa,EAAA;AACzB,QAAA,OAAQ,IAAY,CAAC,KAAK,CAAO,CAAC;KACnC;;AAGD,IAAA,IAAW,EAAE,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;KACtB;AAED;;;;;;;;;AASG;AACI,IAAA,KAAK,CACV,KAAa,EACb,KAAS,EACT,QAAiB,KAAK,EAAA;AAEtB,QAAA,IAAI,KAAK,EAAE;AACT,YAAA,MAAM,EAAE,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC;YAElC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE;AACzC,gBAAA,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;gBAClB,IAAI,GAAG,KAAK,IAAI,EAAE;AAChB,oBAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACnB,oBAAA,OAAO,GAAG,CAAC;AACZ,iBAAA;AACF,aAAA;AACF,SAAA;AACA,QAAA,IAAY,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;AAC7B,QAAA,OAAO,IAAI,CAAC;KACb;AAOM,IAAA,EAAE,CAAC,KAAyB,EAAA;QACjC,IAAI,KAAK,KAAK,SAAS,EAAE;YACvB,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AACjE,SAAA;AACD,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACxB,MAAM,EAAE,GAAqC,EAAE,CAAC;AAChD,YAAA,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;gBACrB,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAgB,CAAC;AACnC,aAAA;AACD,YAAA,OAAO,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC;AAC1B,SAAA;QACD,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;KACzC;AAEM,IAAA,IAAI,CACT,EAAE,WAAW,GAAG,IAAI,EAAgC,GAAA;AAClD,QAAA,WAAW,EAAE,IAAI;AAClB,KAAA,EAAA;QAED,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;AAC/C,SAAA;QACD,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;KAC1D;IAEM,MAAM,CACX,SAAmB,EAAE,EACrB,EAAE,WAAW,GAAG,IAAI,EAAgC,GAAA;AAClD,QAAA,WAAW,EAAE,IAAI;AAClB,KAAA,EAAA;QAED,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;AACzD,SAAA;QACD,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;KAC1D;;AA7PD;;;AAGG;AACuB,SAAM,CAAA,MAAA,GAAW,EAAE,CAAC;AA4PhD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;MCzSa,QAAQ,CAAA;IAanB,WAAsB,CAAA,KAAoB,EAAE,OAAA,GAA4B,EAAE,EAAA;QAApD,IAAK,CAAA,KAAA,GAAL,KAAK,CAAe;;QAXnC,IAAU,CAAA,UAAA,GAAe,EAAE,CAAC;;QAE5B,IAAQ,CAAA,QAAA,GAAe,EAAE,CAAC;;QAE1B,IAAM,CAAA,MAAA,GAAa,EAAE,CAAC;;QAEtB,IAAQ,CAAA,QAAA,GAAG,GAAG,CAAC;;QAEf,IAAI,CAAA,IAAA,GAAG,CAAC,CAAC;QASR,IAAS,CAAA,SAAA,GAAG,IAAI,CAAC;AAMjB,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,aAAa,CAAU,CAAC,CAAC,CAAC;AAMzC,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,aAAa,CAAa,CAAC,CAAC,CAAC;AAMzC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,aAAa,CAAM,CAAC,CAAC,CAAC;;QAtB3C,IAAI,CAAC,OAAO,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;KACtC;;AAID,IAAA,IAAW,QAAQ,GAAA;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;;AAID,IAAA,IAAW,OAAO,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;KACrC;;AAID,IAAA,IAAW,IAAI,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;KAClC;;AAID,IAAA,IAAW,OAAO,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;KACrC;;AAID,IAAA,IAAW,IAAI,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACf,YAAA,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACrE,SAAA;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;KACjC;AAED;;;;AAIG;AACI,IAAA,MAAM,CAAC,MAAA,GAAqB,EAAE,EAAE,SAAkB,KAAK,EAAA;QAC5D,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AACtB,SAAA;QACD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AACnC,YAAA,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;AACjD,gBAAA,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC3B,aAAA;AAAM,iBAAA;gBACL,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AAChC,aAAA;AACF,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AAED;;;AAGG;IACI,IAAI,CAAC,GAAG,OAAiB,EAAA;AAC9B,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;AACxB,QAAA,OAAO,IAAI,CAAC;KACb;AAED;;;AAGG;IACI,UAAU,CAAC,WAAmB,EAAE,EAAA;AACrC,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,QAAA,OAAO,IAAI,CAAC;KACb;AAED;;;;AAIG;AACI,IAAA,OAAO,CAAC,IAAA,GAAe,CAAC,EAAE,QAAiB,EAAA;AAChD,QAAA,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE;AACtB,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;;;;;;;;;;;;AAYlB,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AAEM,IAAA,SAAS,CAAC,MAAgB,EAAA;AAC/B,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,OAAO,IAAI,CAAC;KACb;IAEM,cAAc,GAAA;QACnB,MAAM,CAAC,GAAe,EAAE,CAAC;QACzB,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AAClC,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AACxB,YAAA,CAAC,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzC,SAAA;AACD,QAAA,CAAC,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC/B,QAAA,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AACjD,YAAA,CAAC,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrC,SAAA;AACD,QAAA,OAAO,CAAC,CAAC;KACV;IAEM,GAAG,CAAC,UAAmB,IAAI,EAAA;QAChC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YAC/B,OAAO,IAAI,CAAC,OAAO,CAAC;AACrB,SAAA;AACD,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC,KAAK;AACd,aAAA,GAAG,CAAwB;AAC1B,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,MAAM,EAAE,IAAI,CAAC,cAAc,EAAS;SACrC,CAAC;AACD,aAAA,IAAI,CACH,SAAS,CAAC,CAAC,MAAM,KAAI;;AAEnB,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;YACpE,MAAM,GAAG,GAAQ,EAAE,CAAC;AACpB,YAAA,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE;gBAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACjC,gBAAA,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACb,aAAA;AACD,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1B,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACxB,OAAO,IAAI,CAAC,OAAO,CAAC;SACrB,CAAC,CACH,CAAC;KACL;AACF;;MClMY,UAAU,CAAA;AAGrB,IAAA,WAAA,CACY,OAAoB,EACpB,IAAY,EACf,KAAuB,EAAA;QAFpB,IAAO,CAAA,OAAA,GAAP,OAAO,CAAa;QACpB,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAQ;QACf,IAAK,CAAA,KAAA,GAAL,KAAK,CAAkB;QALzB,IAAgB,CAAA,gBAAA,GAAG,IAAI,CAAC;KAM3B;AAEG,IAAA,MAAM,CAAC,IAAiB,EAAA;QAC7B,IAAI,CAAC,IAAI,EAAE;YACT,IAAI,GAAG,EAAE,CAAC;AACX,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;KAC5B;AAID,IAAA,QAAQ,CAAC,IAA+B,EAAA;QACtC,IAAI,IAAI,YAAY,KAAK,EAAE;YACzB,MAAM,GAAG,GAAQ,EAAE,CAAC;AACpB,YAAA,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;gBACpB,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAChC,gBAAA,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACf,gBAAA,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,aAAA;AACD,YAAA,OAAO,GAAG,CAAC;AACZ,SAAA;QACD,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC/B,QAAA,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACjB,QAAA,OAAO,CAAC,CAAC;KACV;IAEM,QAAQ,CAAC,UAA4B,EAAE,EAAA;AAC5C,QAAA,OAAO,IAAI,QAAQ,CAAI,IAAI,EAAE,OAAO,CAAC,CAAC;KACvC;IAEM,KAAK,CACV,EAAU,EACV,EACE,MAAM,GAAG,EAAE,EACX,MAAM,GAAG,EAAE,EACX,MAAM,GAAG,EAAE,EACX,OAAO,GAAG,EAAE,MAMV,EAAE,EAAA;QAEN,OAAO,IAAI,CAAC,OAAO;aAChB,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AACnE,aAAA,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;KACjD;IAEM,MAAM,CACX,KAAe,EACf,MAAmB,EACnB,MAAc,EACd,EAAE,IAAI,GAAG,SAAS,EAAE,MAAM,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,KAAoB,EAAE,EAAA;QAEnE,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CACxB,IAAI,EACJ,MAAM,EACN,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,EAAE,GAAG,IAAI,EAAE;YACnC,MAAM,EAAE,KAAK,GAAG,GAAG,GAAG,MAAM,GAAG,MAAM;SACtC,CAAC,EACF,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAC1B,CAAC;KACH;IAEM,IAAI,CACT,KAAQ,EACR,EAAE,WAAW,GAAG,IAAI,KAAgC,EAAE,EAAA;AAEtD,QAAA,IAAI,UAAU,GACZ,KAAK,CAAC,EAAE,KAAK,SAAS;AACpB,cAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;AACvC,cAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,GAAG,GAAG,KAAK,CAAC,EAAE,KAAK,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AACzE,QAAA,OAAO,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CACzD,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAChC,GAAG,CAAC,CAAC,GAAG,KAAI;AACV,YAAA,IAAI,WAAW,EAAE;AACf,gBAAA,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACrB,aAAA;SACF,CAAC,CACH,CAAC;KACH;IAEM,MAAM,CACX,KAAQ,EACR,MAAmB,GAAA,EAAE,EACrB,EAAE,WAAW,GAAG,IAAI,EAAA,GAAgC,EAAE,EAAA;AAEtD,QAAA,IAAI,UAAU,GACZ,KAAK,CAAC,EAAE,KAAK,SAAS;AACpB,cAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;AACvC,cAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,GAAG,GAAG,KAAK,CAAC,EAAE,KAAK,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AACzE,QAAA,OAAO,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAC/D,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAChC,GAAG,CAAC,CAAC,GAAG,KAAI;AACV,YAAA,IAAI,WAAW,EAAE;AACf,gBAAA,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACrB,aAAA;SACF,CAAC,CACH,CAAC;KACH;AAEM,IAAA,MAAM,CACX,KAAQ,EACR,EAAE,MAAM,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,EAAA,GAAoB,EAAE,EAAA;AAEjD,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;YACtD,MAAM;YACN,OAAO;AACR,SAAA,CAAC,CAAC;KACJ;IAEM,IAAI,CACT,QAAoB,EAAE,EACtB,EACE,MAAM,GAAG,EAAE,EACX,MAAM,GAAG,EAAE,EACX,MAAM,GAAG,EAAE,EACX,OAAO,GAAG,EAAE,GAAA,GAMV,EAAE,EAAA;AAEN,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC,OAAO;AAChB,aAAA,IAAI,CACH,IAAI,EACJ,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;;AAErC,QAAA,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CACzB;aACA,IAAI;;AAEH,QAAA,GAAG,CAAC,CAAC,MAAiC,KACpC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAC9B,CACF,CAAC;KACL;AAED;;;;;;;;;AASG;IACI,GAAG,CAAK,EACb,MAAM,GAAG,KAAK,EACd,MAAM,GAAG,EAAE,EACX,MAAM,GAAG,EAAE,EACX,MAAM,GAAG,EAAE,EACX,IAAI,GAAG,EAAE,EACT,OAAO,GAAG,EAAE,GAAA,GAQV,EAAE,EAAA;QACJ,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CACxB,IAAI,EACJ,MAAM,EACN,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EACrC;YACE,MAAM;YACN,OAAO;AACR,SAAA,CACF,CAAC;KACH;AAEM,IAAA,MAAM,CACX,EAAkB,EAClB,EAAE,MAAM,GAAG,EAAE,EAAE,MAAM,GAAG,EAAE,EAAA,GAA2C,EAAE,EAAA;AAEvE,QAAA,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,IAAI,EAAE;YACnC,IAAI,MAAM,IAAI,MAAM,EAAE;AACpB,gBAAA,OAAO,CAAG,EAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,IAAI,CAAI,CAAA,EAAA,MAAM,CAAG,EAAA,MAAM,EAAE,CAAC;AAChE,aAAA;AAAM,iBAAA;gBACL,OAAO,CAAA,EAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,IAAI,CAAA,CAAE,CAAC;AAC7C,aAAA;AACF,SAAA;AACD,QAAA,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAG,EAAA,IAAI,CAAC,IAAI,IAAI,MAAM,CAAA,EAAG,EAAE,CAAG,EAAA,MAAM,EAAE,CAAC;KACrE;AACF;;ACxND;;;AAGG;MAIU,WAAW,CAAA;IAGtB,WACU,CAAA,KAAiB,EACjB,cAA6B,EACR,SAAc,EACb,OAAe,EAGrC,qBAAA,GAAgC,CAAC,EAAA;QANjC,IAAK,CAAA,KAAA,GAAL,KAAK,CAAY;QACjB,IAAc,CAAA,cAAA,GAAd,cAAc,CAAe;QACR,IAAS,CAAA,SAAA,GAAT,SAAS,CAAK;QACb,IAAO,CAAA,OAAA,GAAP,OAAO,CAAQ;QAGrC,IAAqB,CAAA,qBAAA,GAArB,qBAAqB,CAAY;AATnC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC;KAU1B;AAEJ;;AAEG;AACH,IAAA,IAAW,MAAM,GAAA;QACf,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;AAED;;;;;;;;;;;;;AAaG;IACI,MAAM,CACX,UAAyB,EACzB,MAAmD,EACnD,GAAW,EACX,EAAE,IAAI,GAAG,SAAS,EAAE,MAAM,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,KAAoB,EAAE,EAAA;QAEnE,IAAI,MAAM,KAAK,KAAK,EAAE;AACpB,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;AAC9D,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAK,MAAM,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;AACvE,SAAA;KACF;AAEM,IAAA,GAAG,CACR,UAAyB,EACzB,GAAW,EACX,EAAE,IAAI,GAAG,SAAS,EAAE,MAAM,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,KAAoB,EAAE,EAAA;AAEnE,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAI,GAAG,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;KAC1D;AAEM,IAAA,IAAI,CACT,UAAyB,EACzB,GAAW,EACX,EAAE,IAAI,GAAG,SAAS,EAAE,MAAM,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,KAAoB,EAAE,EAAA;AAEnE,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAa,GAAG,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;KACpE;AAEM,IAAA,KAAK,CACV,UAAyB,EACzB,GAAW,EACX,EAAE,IAAI,GAAG,SAAS,EAAE,MAAM,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,KAAoB,EAAE,EAAA;AAEnE,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAa,GAAG,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;KACrE;AAEM,IAAA,MAAM,CACX,UAAyB,EACzB,GAAW,EACX,EAAE,MAAM,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,KAAoB,EAAE,EAAA;AAEjD,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAI,GAAG,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;KACvD;AAEM,IAAA,UAAU,CACf,UAAyB,EACzB,GAAW,EACX,EAAE,MAAM,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,KAAoB,EAAE,EAAA;QAEjD,MAAM,GAAG,GAAG,YAAY,CACtB,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CACnE,CAAC;QACF,IACE,UAAU,CAAC,gBAAgB;YAC3B,IAAI,CAAC,qBAAqB,GAAG,CAAC;AAC9B,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC;YAC/B,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;gBAC5C,IAAI,CAAC,qBAAqB,EAC5B;AACA,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAY,GAAG,EAAE,IAAI,CAAO,CAAC,CAAC;AAChE,SAAA;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAK,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CACtD,GAAG,CAAC,CAAC,MAAM,KAAI;YACb,IACE,UAAU,CAAC,gBAAgB;AAC3B,gBAAA,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC;AAChC,gBAAA,IAAI,CAAC,qBAAqB,GAAG,CAAC,EAC9B;gBACA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAK,GAAG,EAAE,MAAM,CAAC,CAAC;AAC1C,aAAA;SACF,CAAC,CACH,CAAC;KACH;AAEM,IAAA,GAAG,CACR,UAAyB,EACzB,GAAW,EACX,EAAE,MAAM,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,KAAoB,EAAE,EAAA;AAEjD,QAAA,OAAO,IAAI,CAAC,UAAU,CAAgB,UAAU,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;KAC7E;AAEM,IAAA,IAAI,CACT,UAAyB,EACzB,GAAW,EACX,EAAE,MAAM,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,KAAoB,EAAE,EAAA;AAEjD,QAAA,OAAO,IAAI,CAAC,UAAU,CAAgB,UAAU,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;KAC7E;;AA3HU,WAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,EAMZ,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,WAAW,EACX,EAAA,EAAA,KAAA,EAAA,YAAY,aAEZ,2BAA2B,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAT1B,WAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cAFV,MAAM,EAAA,CAAA,CAAA;2FAEP,WAAW,EAAA,UAAA,EAAA,CAAA;kBAHvB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;0BAOI,MAAM;2BAAC,WAAW,CAAA;;0BAClB,MAAM;2BAAC,YAAY,CAAA;;0BACnB,QAAQ;;0BACR,MAAM;2BAAC,2BAA2B,CAAA;;;MCZ1B,eAAe,CAAA;IAG1B,WAAY,CAAA,UAAyB,EAAE,MAAqB,EAAA;AAsFpD,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,aAAa,CAAmB,CAAC,CAAC,CAAC;QAMjD,IAAQ,CAAA,QAAA,GAAa,EAAE,CAAC;AAMxB,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,aAAa,CAAW,CAAC,CAAC,CAAC;;AAhG/C,QAAA,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,EAAE,CAAC;AACf,QAAA,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE;YACrB,GAAG,CAAC,IAAI,CAAC;AACP,gBAAA,IAAI,EAAE,EAAE;gBACR,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE;AACjC,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACf,gBAAA,QAAQ,EAAE,GAAG,CAAC,MAAM,GAAG,EAAE;AAC1B,aAAA,CAAC,CAAC;AACJ,SAAA;;AAED,QAAA,MAAM,MAAM,GAAG,MAAM,EAAE,MAAM,IAAI,EAAE,CAAC;AACpC,QAAA,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;YACtB,GAAG,CAAC,IAAI,CAAC;gBACP,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,KAAK,EAAE,CAAC,CAAC,KAAK;AACd,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,QAAQ,EAAE,GAAG,CAAC,MAAM,GAAG,EAAE;AAC1B,aAAA,CAAC,CAAC;AACJ,SAAA;;AAGD,QAAA,IAAI,OAAiB,CAAC;QACtB,IAAI,MAAM,EAAE,OAAO,KAAK,SAAS,IAAI,MAAM,EAAE,OAAO,KAAK,EAAE,EAAE;YAC3D,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC3B,YAAA,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;AACtB,gBAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACtB,aAAA;AACF,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AAC1B,SAAA;;AAGD,QAAA,MAAM,QAAQ,GAAa,MAAM,EAAE,QAAQ,IAAI,EAAE,CAAC;;;AAIlD,QAAA,MAAM,QAAQ,GAAa,MAAM,EAAE,QAAQ,IAAI,OAAO,CAAC;;;AAIvD,QAAA,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE;AACxB,YAAA,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE;AACnB,gBAAA,IAAI,CAAC,CAAC,IAAI,KAAK,EAAE,EAAE;AACjB,oBAAA,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;AAClB,iBAAA;AACF,aAAA;AACF,SAAA;;QAED,IAAI,GAAG,GAAG,CAAC,CAAC;AACZ,QAAA,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE;AACzB,YAAA,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE;AACnB,gBAAA,IAAI,CAAC,CAAC,IAAI,KAAK,EAAE,EAAE;AACjB,oBAAA,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;AACjB,oBAAA,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;AACjB,oBAAA,CAAC,CAAC,QAAQ,GAAG,GAAG,CAAC;AAClB,iBAAA;gBACD,GAAG,IAAI,EAAE,CAAC;AACX,aAAA;AACF,SAAA;;AAED,QAAA,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE;AACzB,YAAA,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE;AACnB,gBAAA,IAAI,CAAC,CAAC,IAAI,KAAK,EAAE,EAAE;AACjB,oBAAA,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC;AAClB,oBAAA,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC;AACnB,iBAAA;AACF,aAAA;AACF,SAAA;QACD,MAAM,QAAQ,GAAG,EAAE,CAAC;AACpB,QAAA,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE;AACnB,YAAA,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE;AAC/B,gBAAA,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,aAAA;AACF,SAAA;AACD,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAEzB,IAAI,CAAC,OAAO,EAAE,CAAC;KAChB;AAID,IAAA,IAAW,MAAM,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;KACpC;AAID,IAAA,IAAW,OAAO,GAAA;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;AAID,IAAA,IAAW,MAAM,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;KACpC;AAED;;;;;;AAMG;IACI,MAAM,CAAC,KAAa,EAAE,QAAiB,EAAA;QAC5C,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,EAAE;AACL,YAAA,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;YACjB,IAAI,QAAQ,KAAK,SAAS,EAAE;AAC1B,gBAAA,CAAC,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACvB,aAAA;AACF,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;AACrC,SAAA;QACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;AAED;;;;;AAKG;AACI,IAAA,OAAO,CAAC,KAAa,EAAA;QAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,EAAE;AACL,YAAA,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC;AACnB,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;AACrC,SAAA;QACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;AAED;;;;;;;AAOG;AACI,IAAA,IAAI,CACT,KAAa,EACb,QAA4B,EAC5B,OAAe,EAAE,EAAA;QAEjB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,IAAI,IAAI,EAAE,EAAE;YACd,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACzC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,QAAQ,KAAK,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9D,IAAI,IAAI,KAAK,SAAS,EAAE;gBACtB,OAAO,IAAI,CAAC,QAAQ,CAAC;AACtB,aAAA;AACF,SAAA;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;;AAE7B,QAAA,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE;YACtB,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YACtD,OAAO,IAAI,CAAC,QAAQ,CAAC;AACtB,SAAA;QACD,IAAI,KAAK,IAAI,IAAI,EAAE;YACjB,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,QAAQ,KAAK,QAAQ,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AACzE,SAAA;AAAM,aAAA;YACL,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,QAAQ,KAAK,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACvE,SAAA;QAED,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;AAED;;;;;AAKG;AACI,IAAA,SAAS,CAAC,KAAa,EAAA;QAC5B,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;KAC5C;AAED;;;;AAIG;AACI,IAAA,GAAG,CAAC,KAAa,EAAA;AACtB,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC7B,YAAA,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,EAAE;AACpB,gBAAA,OAAO,CAAC,CAAC;AACV,aAAA;AACF,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AAED;;;;AAIG;AACI,IAAA,QAAQ,CAAC,GAAW,EAAA;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;KACnC;IAEO,OAAO,GAAA;QACb,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QACtD,IAAI,CAAC,GAAG,CAAC,CAAC;AACV,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC7B,YAAA,CAAC,CAAC,QAAQ,GAAG,CAAC,GAAG,EAAE,CAAC;YACpB,CAAC,IAAI,CAAC,CAAC;AACR,SAAA;QACD,MAAM,GAAG,GAAa,EAAE,CAAC;AACzB,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC7B,IAAI,CAAC,CAAC,OAAO,EAAE;AACb,gBAAA,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAClB,aAAA;AACF,SAAA;AACD,QAAA,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;QACpB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAClC;IAED,WAAW,CAAC,KAAU,EAAE,QAAgB,EAAA;QACtC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,EAAE;AACL,YAAA,CAAC,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACvB,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;AACrC,SAAA;QACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;AACF;;MC9PY,kBAAkB,CAAA;AAI7B,IAAA,WAAA,CAAY,QAAoB,EAAA;AASxB,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,aAAa,CAAY,CAAC,CAAC,CAAC;QARhD,IAAI,CAAC,QAAQ,EAAE;YACb,QAAQ,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AACvC,SAAA;QACD,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC;QAC3C,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC;AAChC,QAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;KACnC;AAID,IAAA,IAAW,MAAM,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;KACpC;AAEM,IAAA,OAAO,CAAC,IAAY,EAAA;AACzB,QAAA,IAAI,IAAI,KAAK,IAAI,CAAC,KAAK,EAAE;AACvB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAClB,YAAA,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;AAC/B,SAAA;KACF;AAEM,IAAA,UAAU,CAAC,IAAY,EAAA;AAC5B,QAAA,IAAI,IAAI,KAAK,IAAI,CAAC,KAAK,EAAE;AACvB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AACnB,SAAA;KACF;AAEM,IAAA,WAAW,CAAC,IAAY,EAAA;AAC7B,QAAA,IAAI,IAAI,KAAK,IAAI,CAAC,UAAU,EAAE;AAC5B,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACvB,YAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;AACnC,SAAA;KACF;AAEM,IAAA,cAAc,CAAC,IAAY,EAAA;AAChC,QAAA,IAAI,IAAI,KAAK,IAAI,CAAC,UAAU,EAAE;AAC5B,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACxB,SAAA;KACF;IAEM,WAAW,GAAA;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC;KACxB;IAEM,OAAO,GAAA;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;IAEO,aAAa,CAAC,OAAe,EAAE,EAAA;AACrC,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;KACrE;AACF;;MC9CY,eAAe,CAAA;AAG1B;;;AAGG;AACH,IAAA,WAAA,CAAY,WAA2B,EAAE,EAAA;QANxB,IAAO,CAAA,OAAA,GAAe,EAAE,CAAC;QAOxC,IAAI,CAAC,OAAO,GAAG,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;AAClB,QAAA,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE;AACxB,YAAA,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;gBAChB,SAAS;AACV,aAAA;AACD,YAAA,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE;gBACf,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AAChE,aAAA;AAAM,iBAAA,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE;gBACtB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;AACjE,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AACnD,aAAA;AACF,SAAA;AACD,QAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;KACnC;AAID;;;AAGG;AACH,IAAA,IAAW,MAAM,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;KACpC;AAED;;;;;;;;AAQG;IACI,GAAG,CAAC,IAAY,EAAE,SAAwB,EAAA;AAC/C,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;AAC5B,YAAA,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,EAAE;AACpB,gBAAA,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC;gBACxB,IAAI,CAAC,aAAa,EAAE,CAAC;AACrB,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;AACF,SAAA;AACD,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;AAC9C,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAC1B,QAAA,OAAO,IAAI,CAAC;KACb;AAED;;;;;AAKG;AACI,IAAA,KAAK,CAAC,IAAY,EAAA;AACvB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC5C,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,EAAE;gBAClC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC1B,MAAM;AACP,aAAA;AACF,SAAA;AACD,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAC5B,QAAA,OAAO,IAAI,CAAC;KACb;AAED;;;;;;AAMG;AACI,IAAA,GAAG,CAAC,KAAa,EAAA;AACtB,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;AAC5B,YAAA,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,EAAE;AACrB,gBAAA,OAAO,CAAC,CAAC;AACV,aAAA;AACF,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AAED;;;;AAIG;IACI,MAAM,GAAA;QACX,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;AAED;;;;;AAKG;AACI,IAAA,QAAQ,CAAC,KAAa,EAAA;AAC3B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC5C,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,EAAE;gBACnC,OAAO,CAAC,GAAG,CAAC,CAAC;AACd,aAAA;AACF,SAAA;QACD,OAAO,CAAC,CAAC,CAAC;KACX;IAEO,aAAa,CAAC,QAAgB,EAAE,EAAA;QACtC,IAAI,GAAG,GAAa,EAAE,CAAC;AACvB,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;YAC5B,GAAG,CAAC,IAAI,CAAC,CAAA,EAAG,CAAC,CAAC,SAAS,KAAK,KAAK,GAAG,EAAE,GAAG,GAAG,CAAA,EAAG,CAAC,CAAC,KAAK,CAAE,CAAA,CAAC,CAAC;AAC3D,SAAA;AACD,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACxB;AACF;;MCjIY,gBAAgB,CAAA;AAG3B,IAAA,WAAA,CAAY,MAAsB,EAAA;AAiD1B,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,aAAa,CAAa,CAAC,CAAC,CAAC;AAK5C,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,aAAa,CAAoB,CAAC,CAAC,CAAC;AAKnD,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,aAAa,CAAoB,CAAC,CAAC,CAAC;AA1D1D,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;;QAE9C,IAAI,OAAO,GAAa,EAAE,CAAC;QAC3B,IAAI,MAAM,EAAE,OAAO,KAAK,SAAS,IAAI,MAAM,EAAE,OAAO,KAAK,EAAE,EAAE;AAC3D,YAAA,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE;AACnB,gBAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACtB,aAAA;AACF,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AAC1B,SAAA;;AAED,QAAA,MAAM,QAAQ,GAAa,MAAM,EAAE,QAAQ,IAAI,EAAE,CAAC;;;AAIlD,QAAA,MAAM,QAAQ,GAAa,MAAM,EAAE,QAAQ,IAAI,OAAO,CAAC;;;AAIvD,QAAA,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE;AACxB,YAAA,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE;AACnB,gBAAA,IAAI,CAAC,CAAC,IAAI,KAAK,EAAE,EAAE;AACjB,oBAAA,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;AAClB,iBAAA;AACF,aAAA;AACF,SAAA;;AAED,QAAA,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE;AACzB,YAAA,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE;AACnB,gBAAA,IAAI,CAAC,CAAC,IAAI,KAAK,EAAE,EAAE;AACjB,oBAAA,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;AACjB,oBAAA,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;AAClB,iBAAA;AACF,aAAA;AACF,SAAA;;AAED,QAAA,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE;AACzB,YAAA,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE;AACnB,gBAAA,IAAI,CAAC,CAAC,IAAI,KAAK,EAAE,EAAE;AACjB,oBAAA,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC;AAClB,oBAAA,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC;AACnB,iBAAA;AACF,aAAA;AACF,SAAA;AACD,QAAA,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;QACpB,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;AAGD,IAAA,IAAW,MAAM,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;KACpC;AAGD,IAAA,IAAW,OAAO,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;KACrC;AAGD,IAAA,IAAW,SAAS,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC;KACvC;IAEM,MAAM,GAAA;QACX,MAAM,MAAM,GAAe,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAsB,EAAE,CAAC;QACtC,MAAM,SAAS,GAAsB,EAAE,CAAC;AACxC,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC7B,IAAI,CAAC,CAAC,OAAO,EAAE;AACb,gBAAA,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AACvB,gBAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,aAAA;YACD,IAAI,CAAC,CAAC,OAAO,EAAE;AACb,gBAAA,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACnB,aAAA;AACF,SAAA;AACD,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC5B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KACjC;AACF;;MCXY,SAAS,CAAA;AAgBpB,IAAA,WAAA,CAAY,IAAY,EAAA;QAPjB,IAAO,CAAA,OAAA,GAAG,KAAK,CAAC;AAQrB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;AAED,IAAA,IAAW,OAAO,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI;;YAExC,KAAK,EAAE,EACP,SAAS,CAAC,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,CACrC,CAAC;AACH,SAAA;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;AAED,IAAA,IAAW,IAAI,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACf,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI;;YAElC,KAAK,EAAE,EACP,SAAS,CAAC,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,CACrC,CAAC;AACH,SAAA;QACD,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;AAED,IAAA,IAAW,OAAO,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI;;YAExC,KAAK,EAAE,EACP,SAAS,CAAC,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,CACrC,CAAC;AACH,SAAA;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;AAED,IAAA,IAAW,IAAI,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACf,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI;;YAElC,KAAK,EAAE,EACP,SAAS,CAAC,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,CACrC,CAAC;AACH,SAAA;QACD,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;AAEM,IAAA,KAAK,CAAC,MAAuB,EAAA;AAClC,QAAA,IAAI,OAAmC,CAAC;QACxC,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE;AAC7C,YAAA,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,MAAwB,CAAC,CAAC;AAC/C,SAAA;aAAM,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE;AACnD,YAAA,OAAO,GAAG,MAAM,CAAC,MAAoC,CAAC;AACvD,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;AAClB,SAAA;AACD,QAAA,aAAa,CAAC;AACZ,YAAA,IAAI,CAAC,MAAM;YACX,IAAI,CAAC,OAAO,CAAC,MAAM;YACnB,OAAO;YACP,IAAI,CAAC,SAAS,CAAC,MAAM;YACrB,IAAI,CAAC,MAAM,CAAC,MAAM;YAClB,IAAI,CAAC,MAAM,CAAC,MAAM;SACnB,CAAC;aACC,IAAI,CACH,YAAY,CAAC,GAAG,CAAC,EACjB,SAAS,CACP,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,KAAI;AAC5D,YAAA,IAAI,CAAC,QAAQ;iBACV,MAAM,CAAC,MAAM,CAAC;AACd,iBAAA,MAAM,CAAC,YAAY,IAAI,EAAE,EAAE,IAAI,CAAC;AAChC,iBAAA,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC;AAC/B,iBAAA,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC;iBACvB,IAAI,CAAC,GAAG,MAAM,CAAC;iBACf,SAAS,CAAC,MAAM,CAAC,CAAC;YACrB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SAChC,CACF,EACD,SAAS,CAAC,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,CACrC;AACA,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,OAAY,QAAa;AAChC,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,KAAK,CAAC,CAAC;aACnE;YACD,QAAQ,EAAE,MAAK;;AAEb,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;aACtB;AACF,SAAA,CAAC,CAAC;AACL,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;AACnB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;KACrB;AACF,CAAA;MAKY,gBAAgB,CAAA;AAG3B,IAAA,WAAA,GAAA;AAFQ,QAAA,IAAA,CAAA,UAAU,GAAgC,IAAI,GAAG,EAAE,CAAC;KAE5C;AAET,IAAA,GAAG,CACR,IAAY,EACZ,UAAyB,EACzB,QAAyB,EAAA;AAEzB,QAAA,IAAI,EAAgB,CAAC;AAErB,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACzD,YAAA,EAAE,GAAG,IAAI,SAAS,CAAI,IAAI,CAAC,CAAC;AAC5B,YAAA,EAAE,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC;AACpC,YAAA,EAAE,CAAC,MAAM,GAAG,IAAI,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC7D,YAAA,EAAE,CAAC,MAAM,GAAG,IAAI,eAAe,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;YACvD,EAAE,CAAC,SAAS,GAAG,IAAI,kBAAkB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC1D,EAAE,CAAC,OAAO,GAAG,IAAI,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACpD,IAAI,QAAQ,CAAC,IAAI,EAAE;gBACjB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC/B,aAAA;AACF,SAAA;AAAM,aAAA;YACL,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;AACjC,SAAA;AACD,QAAA,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE;YACf,IAAI,QAAQ,CAAC,MAAM,EAAE;AACnB,gBAAA,EAAE,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;AAC7B,aAAA;AAAM,iBAAA;AACL,gBAAA,EAAE,CAAC,MAAM,GAAG,IAAI,OAAO,EAAQ,CAAC;AACjC,aAAA;YACD,IAAI,QAAQ,CAAC,WAAW,EAAE;AACxB,gBAAA,EAAE,CAAC,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC;AACvC,aAAA;AAAM,iBAAA;AACL,gBAAA,EAAE,CAAC,WAAW,GAAG,IAAI,OAAO,EAAQ,CAAC;AACtC,aAAA;AACD,YAAA,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACpB,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;KACX;;6GAvCU,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAhB,gBAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFf,MAAM,EAAA,CAAA,CAAA;2FAEP,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;ACnLD,MAAM,UAAU,GAAG;AACjB,IAAA,kBAAkB,EAAE,CAAC;AACrB,IAAA,+BAA+B,EAAE,EAAE;AACnC,IAAA,MAAM,EAAE,KAAK;CACd,CAAC;MAeW,gCAAgC,CAAA;AAM3C,IAAA,WAAA,CAAoB,IAAkB,EAAA;QAAlB,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAc;KAAI;IAEnC,QAAQ,GAAA;QACb,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACnC,YAAA,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;AAC1C,SAAA;KACF;IAEM,IAAI,GAAA;QACT,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC7B;AAED,IAAA,IAAI,CAAC,MAA2B,EAAA;AAC9B,QAAA,IAAI,GAAG,GAAG,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC;AACnC,QAAA,IAAI,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,aAAa,EAAE;YAC9C,GAAG,IAAI,CAAC,CAAC;AACV,SAAA;AAAM,aAAA;YACL,GAAG,IAAI,CAAC,CAAC;AACV,SAAA;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KACrD;AAEM,IAAA,MAAM,CAAC,CAAiB,EAAA;QAC7B,IAAI,CAAC,CAAC,OAAO,EAAE;YACb,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAClC,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACjC,SAAA;KACF;;6HAlCU,gCAAgC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;iHAAhC,gCAAgC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAFhC,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9BjE,8yBAac,EDYV,MAAA,EAAA,CAAA,wgCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,0TACZ,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,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,EAAA,EAAA,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,UAAA,EAAA,IAAA,EACd,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,kBAAkB,EAAA,CAAA,EAAA,CAAA,CAAA;2FAIT,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAb5C,SAAS;+BACE,iCAAiC,EAAA,UAAA,EAG/B,IAAI,EACP,OAAA,EAAA;wBACP,YAAY;wBACZ,cAAc;wBACd,mBAAmB;wBACnB,kBAAkB;qBACnB,EACU,SAAA,EAAA,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,EAAA,QAAA,EAAA,8yBAAA,EAAA,MAAA,EAAA,CAAA,wgCAAA,CAAA,EAAA,CAAA;qGAK/C,IAAI,EAAA,CAAA;sBAAnB,KAAK;gBAEC,MAAM,EAAA,CAAA;sBADZ,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;;;MEzB5B,wBAAwB,CAAA;AAUnC,IAAA,WAAA,GAAA,GAAgB;IAET,IAAI,GAAA;AACT,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,EAAE;AACL,YAAA,OAAO,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC;AAC9B,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;IAEM,MAAM,GAAA;AACX,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,EAAE;AACL,YAAA,OAAO,CAAC,CAAC,SAAS,KAAK,MAAM,CAAC;AAC/B,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;IAEM,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;KACzC;IAEM,OAAO,GAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;KAC1C;IAEM,QAAQ,GAAA;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;cACnC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM;cAChC,CAAC,CAAC;KACP;IAEM,QAAQ,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC9C;IAEM,MAAM,GAAA;QACX,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACpC;;qHAhDU,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;yGAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECXrC,sdACyB,EAAA,MAAA,EAAA,CAAA,iHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDQb,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FAEX,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAPpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,wBAAwB,EAGtB,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,CAAC,EAAA,QAAA,EAAA,sdAAA,EAAA,MAAA,EAAA,CAAA,iHAAA,CAAA,EAAA,CAAA;0EAMP,IAAI,EAAA,CAAA;sBAAnB,KAAK;gBAIU,KAAK,EAAA,CAAA;sBAApB,KAAK;;;MEJK,6BAA6B,CAAA;AAMxC,IAAA,WAAA,GAAA;QAHgB,IAAI,CAAA,IAAA,GAAa,KAAK,CAAC;KAGvB;IAEhB,OAAO,GAAA;QACL,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACtC;AAEM,IAAA,MAAM,CAAC,CAAiB,EAAA;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;KACjC;;0HAfU,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA7B,6BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6BAA6B,wKCf1C,u/CAyBM,EAAA,MAAA,EAAA,CAAA,mJAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDZM,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAiB,kgBAAE,wBAAwB,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FAExD,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAPzC,SAAS;+BACE,8BAA8B,EAAA,UAAA,EAG5B,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,EAAE,iBAAiB,EAAE,wBAAwB,CAAC,EAAA,QAAA,EAAA,u/CAAA,EAAA,MAAA,EAAA,CAAA,mJAAA,CAAA,EAAA,CAAA;0EAGpD,IAAI,EAAA,CAAA;sBAAnB,KAAK;gBACU,KAAK,EAAA,CAAA;sBAApB,KAAK;gBACU,IAAI,EAAA,CAAA;sBAAnB,KAAK;gBACU,SAAS,EAAA,CAAA;sBAAxB,KAAK;;;MEPK,+BAA+B,CAAA;AAQ1C,IAAA,WAAA,GAAA;QANgB,IAAgB,CAAA,gBAAA,GAAsB,EAAE,CAAC;QACzC,IAAiB,CAAA,iBAAA,GAC/B,uBAAuB,CAAC;QACV,IAAmB,CAAA,mBAAA,GACjC,yBAAyB,CAAC;KAEZ;AAET,IAAA,MAAM,CAAC,CAAkB,EAAA;AAC9B,QAAA,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;KAC5B;;4HAbU,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;gHAA/B,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECZ5C,uZAA+X,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDUnX,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FAEX,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAP3C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gCAAgC,EAG9B,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,CAAC,EAAA,QAAA,EAAA,uZAAA,EAAA,CAAA;0EAGP,IAAI,EAAA,CAAA;sBAAnB,KAAK;gBACU,gBAAgB,EAAA,CAAA;sBAA/B,KAAK;gBACU,iBAAiB,EAAA,CAAA;sBAAhC,KAAK;gBAEU,mBAAmB,EAAA,CAAA;sBAAlC,KAAK;;;MEHK,4BAA4B,CAAA;AAMvC,IAAA,WAAA,GAAA;QAHgB,IAAO,CAAA,OAAA,GAAsB,EAAE,CAAC;AACzC,QAAA,IAAA,CAAA,EAAE,GAAG,IAAI,kBAAkB,EAAE,CAAC;KAErB;IAET,QAAQ,GAAA;QACb,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;AACzC,YAAA,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AAC9C,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;YAC7D,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;AAC7B,gBAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;AAC5B,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;IAEM,OAAO,GAAA;AACZ,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;KAC5B;;yHAtBU,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA5B,4BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,ECdzC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,uTAKM,EDOM,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,8HAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,CAAA,EAAA,CAAA,CAAA;2FAEhC,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAPxC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,6BAA6B,cAG3B,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,mBAAmB,CAAC,EAAA,QAAA,EAAA,uTAAA,EAAA,CAAA;0EAG5B,IAAI,EAAA,CAAA;sBAAnB,KAAK;gBACU,MAAM,EAAA,CAAA;sBAArB,KAAK;gBACU,OAAO,EAAA,CAAA;sBAAtB,KAAK;;;MEOK,oCAAoC,CAAA;AAY/C,IAAA,WAAA,GAAA;QAPgB,IAAO,CAAA,OAAA,GAAsB,EAAE,CAAC;AACzC,QAAA,IAAA,CAAA,EAAE,GAAG,IAAI,kBAAkB,EAAE,CAAC;QAC9B,IAAM,CAAA,MAAA,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,IAAO,CAAA,OAAA,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAElC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAQ,CAAC;KAE5B;IAET,QAAQ,GAAA;QACb,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;AACzC,YAAA,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AAC9C,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;YAC7D,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;AAC7B,gBAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;AAC5B,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;IAEM,OAAO,GAAA;AACZ,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;KAC5B;IAEM,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;KAC/B;AAEM,IAAA,YAAY,CAAC,MAAW,EAAA;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YACvB,OAAO;AACR,SAAA;AACD,QAAA,MAAM,IAAI,GACR,MAAM,CAAC,aAAa,CAAC,kBAAkB,CAAC,sBAAsB,CAC5D,QAAQ,CACT,CAAC,CAAC,CAAC,CAAC;AACP,QAAA,IAAI,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;KAC/D;IAEO,WAAW,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;AACvB,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE;AAClE,gBAAA,IAAI,CAAC,IAAI,GAAG,CAAC,KAAQ,KACnB,CAAA,EAAI,KAAa,CAAC,IAAI,CAAC,MAAM,CAAC,OAAiB,CAAC,EAAE,CAAC;AACtD,aAAA;AAAM,iBAAA,IACL,IAAI,CAAC,MAAM,CAAC,OAAO;AACnB,gBAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,UAAU,EACzC;AACA,gBAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5C,aAAA;AACF,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC,KAAQ,KAAI;gBACvB,IAAK,KAAa,CAAC,QAAQ,EAAE;oBAC3B,OAAQ,KAAa,CAAC,QAAQ,CAAC;AAChC,iBAAA;AAAM,qBAAA;AACL,oBAAA,OAAO,CACJ,EAAA,KAAa,CAAC,MAAM,CAAC;wBACrB,KAAa,CAAC,OAAO,CAAC;AACtB,wBAAA,KAAa,CAAC,IAAI,CACrB,CAAA,CAAE,CAAC;AACJ,iBAAA;AACH,aAAC,CAAC;AACH,SAAA;KACF;AAED;;AAEG;AACK,IAAA,QAAQ,CAAC,CAAM,EAAA;AACrB,QAAA,IAAI,CAAC,EAAE;AACL,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACrB,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;KACX;AAEO,IAAA,OAAO,CAAC,KAAyB,EAAA;QACvC,OAAO,KAAK,CAAC,IAAI,CACf,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,YAAY,CAAC,GAAG,CAAC,EACjB,oBAAoB,EAAE,EACtB,SAAS,CAAC,CAAC,IAAI,KAAI;YACjB,MAAM,CAAC,GAAQ,EAAE,CAAC;AAClB,YAAA,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;gBAC/C,IACE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI;oBAC9B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,EACnC;AACA,oBAAA,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC9B,iBAAA;AACF,aAAA;YACD,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;YAClC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;YAChC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;SACnC,CAAC,CACH,CAAC;KACH;;iIAvGU,oCAAoC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApC,oCAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oCAAoC,+JCxBjD,qjBAKM,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDiBM,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,kBAAkB,mVAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,CAAA,EAAA,CAAA,CAAA;2FAEpD,oCAAoC,EAAA,UAAA,EAAA,CAAA;kBAPhD,SAAS;+BACE,qCAAqC,EAAA,UAAA,EAGnC,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,CAAC,EAAA,QAAA,EAAA,qjBAAA,EAAA,CAAA;0EAKhD,IAAI,EAAA,CAAA;sBAAnB,KAAK;gBACU,MAAM,EAAA,CAAA;sBAArB,KAAK;gBACU,OAAO,EAAA,CAAA;sBAAtB,KAAK;;;AEdF,MAAO,yCAEX,SAAQ,oCAAuC,CAAA;AAGxC,IAAA,UAAU,CAAC,KAAQ,EAAA;QACxB,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AAC5B,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;AAC5B,SAAA;KACF;;sIATU,yCAAyC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzC,yCAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yCAAyC,0JCftD,+wBAQM,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDKM,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,kBAAkB,mVAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,CAAA,EAAA,CAAA,CAAA;2FAEpD,yCAAyC,EAAA,UAAA,EAAA,CAAA;kBAPrD,SAAS;+BACE,2CAA2C,EAAA,UAAA,EAGzC,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,CAAC,EAAA,QAAA,EAAA,+wBAAA,EAAA,CAAA;8BAKvC,MAAM,EAAA,CAAA;sBAA9B,KAAK;;;MENK,gCAAgC,CAAA;AAK3C,IAAA,WAAA,GAAA;QAFgB,IAAO,CAAA,OAAA,GAAsB,EAAE,CAAC;KAEhC;;6HALL,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;iHAAhC,gCAAgC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECZ7C,0CAAwC,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDU5B,YAAY,EAAA,CAAA,EAAA,CAAA,CAAA;2FAEX,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAP5C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iCAAiC,EAG/B,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,CAAC,EAAA,QAAA,EAAA,0CAAA,EAAA,CAAA;0EAGP,IAAI,EAAA,CAAA;sBAAnB,KAAK;gBACU,MAAM,EAAA,CAAA;sBAArB,KAAK;gBACU,OAAO,EAAA,CAAA;sBAAtB,KAAK;;;MEHK,qCAAqC,CAAA;AAKhD,IAAA,WAAA,GAAA;QAFgB,IAAO,CAAA,OAAA,GAAsB,EAAE,CAAC;KAEhC;;kIALL,qCAAqC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;sHAArC,qCAAqC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uCAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECZlD,gDAA8C,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDUlC,YAAY,EAAA,CAAA,EAAA,CAAA,CAAA;2FAEX,qCAAqC,EAAA,UAAA,EAAA,CAAA;kBAPjD,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uCAAuC,EAGrC,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,CAAC,EAAA,QAAA,EAAA,gDAAA,EAAA,CAAA;0EAGP,IAAI,EAAA,CAAA;sBAAnB,KAAK;gBACU,MAAM,EAAA,CAAA;sBAArB,KAAK;gBACU,OAAO,EAAA,CAAA;sBAAtB,KAAK;;;MEHK,6BAA6B,CAAA;AAKxC,IAAA,WAAA,GAAA;QAFgB,IAAO,CAAA,OAAA,GAAsB,EAAE,CAAC;KAEhC;;0HALL,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;8GAA7B,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECZ1C,uCAAqC,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDUzB,YAAY,EAAA,CAAA,EAAA,CAAA,CAAA;2FAEX,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAPzC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,8BAA8B,EAG5B,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,CAAC,EAAA,QAAA,EAAA,uCAAA,EAAA,CAAA;0EAGP,IAAI,EAAA,CAAA;sBAAnB,KAAK;gBACU,MAAM,EAAA,CAAA;sBAArB,KAAK;gBACU,OAAO,EAAA,CAAA;sBAAtB,KAAK;;;MEHK,mCAAmC,CAAA;AAK9C,IAAA,WAAA,GAAA;QAFgB,IAAO,CAAA,OAAA,GAAsB,EAAE,CAAC;KAEhC;;gIALL,mCAAmC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;oHAAnC,mCAAmC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECZhD,6CAA2C,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDU/B,YAAY,EAAA,CAAA,EAAA,CAAA,CAAA;2FAEX,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAP/C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oCAAoC,EAGlC,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,CAAC,EAAA,QAAA,EAAA,6CAAA,EAAA,CAAA;0EAGP,IAAI,EAAA,CAAA;sBAAnB,KAAK;gBACU,MAAM,EAAA,CAAA;sBAArB,KAAK;gBACU,OAAO,EAAA,CAAA;sBAAtB,KAAK;;;MEAK,8BAA8B,CAAA;AAQzC,IAAA,WAAA,GAAA;QAHgB,IAAO,CAAA,OAAA,GAAsB,EAAE,CAAC;AACzC,QAAA,IAAA,CAAA,EAAE,GAAG,IAAI,kBAAkB,EAAE,CAAC;KAErB;IAET,QAAQ,GAAA;QACb,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;AACzC,YAAA,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AAC9C,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;YAC7D,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;AACpC,gBAAA,IAAI,EAAE,CAAC,KAAK,KAAK,GAAG,EAAE;AACpB,oBAAA,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;AACtC,wBAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;wBAC3B,MAAM;AACP,qBAAA;AACF,iBAAA;AACF,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;IAEM,OAAO,GAAA;AACZ,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;KAC5B;;2HA7BU,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA9B,8BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,ECf3C,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,kXAOM,EDMM,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,6PAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,CAAA,EAAA,CAAA,CAAA;2FAEhC,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAP1C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,+BAA+B,cAG7B,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,mBAAmB,CAAC,EAAA,QAAA,EAAA,kXAAA,EAAA,CAAA;0EAK5B,IAAI,EAAA,CAAA;sBAAnB,KAAK;gBACU,MAAM,EAAA,CAAA;sBAArB,KAAK;gBACU,OAAO,EAAA,CAAA;sBAAtB,KAAK;;;MERK,mCAAmC,CAAA;AAK9C,IAAA,WAAA,GAAA;QAFgB,IAAO,CAAA,OAAA,GAAsB,EAAE,CAAC;KAEhC;;gIALL,mCAAmC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;oHAAnC,mCAAmC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qCAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECZhD,8CAA4C,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDUhC,YAAY,EAAA,CAAA,EAAA,CAAA,CAAA;2FAEX,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAP/C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qCAAqC,EAGnC,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,CAAC,EAAA,QAAA,EAAA,8CAAA,EAAA,CAAA;0EAGP,IAAI,EAAA,CAAA;sBAAnB,KAAK;gBACU,MAAM,EAAA,CAAA;sBAArB,KAAK;gBACU,OAAO,EAAA,CAAA;sBAAtB,KAAK;;;MEHK,4BAA4B,CAAA;AAKvC,IAAA,WAAA,GAAA;QAFgB,IAAO,CAAA,OAAA,GAAsB,EAAE,CAAC;KAEhC;;yHALL,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;6GAA5B,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECZzC,sCAAoC,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDUxB,YAAY,EAAA,CAAA,EAAA,CAAA,CAAA;2FAEX,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAPxC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,6BAA6B,EAG3B,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,CAAC,EAAA,QAAA,EAAA,sCAAA,EAAA,CAAA;0EAGP,IAAI,EAAA,CAAA;sBAAnB,KAAK;gBACU,MAAM,EAAA,CAAA;sBAArB,KAAK;gBACU,OAAO,EAAA,CAAA;sBAAtB,KAAK;;;MEDK,8BAA8B,CAAA;AAMzC,IAAA,WAAA,GAAA;QAHgB,IAAO,CAAA,OAAA,GAAsB,EAAE,CAAC;AACzC,QAAA,IAAA,CAAA,EAAE,GAAG,IAAI,kBAAkB,EAAE,CAAC;KAErB;IAET,QAAQ,GAAA;QACb,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;AACzC,YAAA,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AAC9C,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;YAC7D,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;AAC7B,gBAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;AAC5B,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;IAEM,OAAO,GAAA;AACZ,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;KAC5B;AAED,IAAA,QAAQ,CAAC,EAAU,EAAA;AACjB,QAAA,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;KAC5B;;2HA3BU,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA9B,8BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,ECd3C,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,2xBAcM,EDFM,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,6PAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,CAAA,EAAA,CAAA,CAAA;2FAEhC,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAP1C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,+BAA+B,cAG7B,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,mBAAmB,CAAC,EAAA,QAAA,EAAA,2xBAAA,EAAA,CAAA;0EAG5B,IAAI,EAAA,CAAA;sBAAnB,KAAK;gBACU,MAAM,EAAA,CAAA;sBAArB,KAAK;gBACU,OAAO,EAAA,CAAA;sBAAtB,KAAK;;;AEFR;MAsBa,yBAAyB,CAAA;AApBtC,IAAA,WAAA,GAAA;QAsBkB,IAAgB,CAAA,gBAAA,GAAsB,EAAE,CAAC;QACzC,IAAW,CAAA,WAAA,GAAsB,EAAE,CAAC;AACrD,KAAA;;sHAJY,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;0GAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrCtC,ihEAiBM,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDMF,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,4BAA4B,EAC5B,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,8BAA8B,EAC9B,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,oCAAoC,EACpC,QAAA,EAAA,qCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,yCAAyC,0GACzC,gCAAgC,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChC,qCAAqC,EAAA,QAAA,EAAA,uCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrC,6BAA6B,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC7B,mCAAmC,EAAA,QAAA,EAAA,oCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnC,8BAA8B,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC9B,mCAAmC,EAAA,QAAA,EAAA,qCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnC,4BAA4B,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FAGnB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBApBrC,SAAS;+BACE,yBAAyB,EAAA,UAAA,EAGvB,IAAI,EACP,OAAA,EAAA;wBACP,YAAY;wBACZ,4BAA4B;wBAC5B,8BAA8B;wBAC9B,oCAAoC;wBACpC,yCAAyC;wBACzC,gCAAgC;wBAChC,qCAAqC;wBACrC,6BAA6B;wBAC7B,mCAAmC;wBACnC,8BAA8B;wBAC9B,mCAAmC;wBACnC,4BAA4B;AAC7B,qBAAA,EAAA,QAAA,EAAA,ihEAAA,EAAA,CAAA;8BAGe,IAAI,EAAA,CAAA;sBAAnB,KAAK;gBACU,gBAAgB,EAAA,CAAA;sBAA/B,KAAK;gBACU,WAAW,EAAA,CAAA;sBAA1B,KAAK;;;ME1BK,eAAe,CAAA;AAc1B,IAAA,WAAA,CAAY,MAA6B,EAAA;QAHlC,IAAQ,CAAA,QAAA,GAAG,IAAI,CAAC;AACf,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,aAAa,CAAM,CAAC,CAAC,CAAC;AAGzC,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;QAChC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;AAC9B,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AAC5C,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;AACrB,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;AACrB,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;KACpB;AAED,IAAA,IAAW,YAAY,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;KACnC;AAEM,IAAA,GAAG,CAAC,KAAU,EAAE,IAAY,EAAE,SAAkB,IAAI,EAAA;AACzD,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE;AACxB,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AACtB,YAAA,IAAI,MAAM,EAAE;AACV,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACzB,aAAA;AACD,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AAEM,IAAA,YAAY,CAAC,MAAkB,EAAA;QACpC,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE;YACnD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AACtC,SAAA;KACF;IAEM,QAAQ,GAAA;AACb,QAAA,OAAO,CAAG,EAAA,IAAI,CAAC,KAAK,EAAE,CAAC;KACxB;AACF;;AChDK,MAAO,2BACX,SAAQ,eAAe,CAAA;AAWvB,IAAA,WAAA,CAAY,MAAsC,EAAA;QAChD,KAAK,CAAC,MAAM,CAAC,CAAC;AACd,QAAA,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;AAC3B,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AAC9B,QAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,GAAG,QAAQ,CAAC;QACtE,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;AAC1C,YAAA,MAAM,+CAA+C,CAAC;AACvD,SAAA;AACD,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACpC,IAAI,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;YACzC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;AAC9C,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAuB,CAAC;AAChD,SAAA;AACD,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,KAAK,SAAS,GAAG,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;QACjE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;AAElC,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,KAAK,GAAG,wBAAwB,CAAC;AACvC,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE;AACnB,YAAA,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;AACnC,SAAA;KACF;IAEe,QAAQ,GAAA;AACtB,QAAA,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC;KAC5B;AACF;;AClDK,MAAO,gCAEX,SAAQ,2BAA8B,CAAA;AAGtC,IAAA,WAAA,CAAY,MAA2C,EAAA;QACrD,KAAK,CAAC,MAAwC,CAAC,CAAC;QAH3C,IAAM,CAAA,MAAA,GAAiC,EAAE,CAAC;AAI/C,QAAA,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;KACjC;AAEe,IAAA,GAAG,CAAC,KAAU,EAAE,IAAY,EAAE,MAAM,GAAG,KAAK,EAAA;AAC1D,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AAC1C,QAAA,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;AAC7D,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAC1D,SAAA;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;AAEM,IAAA,KAAK,CAAC,KAAQ,EAAA;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AACvC,QAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;YAChB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAC7B,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;IAEe,QAAQ,GAAA;QACtB,MAAM,GAAG,GAAa,EAAE,CAAC;AACzB,QAAA,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE;YAC5B,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACvB,SAAA;AACD,QAAA,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACtB;AAEO,IAAA,YAAY,CAAC,KAAQ,EAAA;AAC3B,QAAA,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;AACf,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC3C,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,EAAE;gBACxC,KAAK,GAAG,CAAC,CAAC;AACX,aAAA;AACF,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AACF;;ACnDK,MAAO,uBAAyB,SAAQ,eAAe,CAAA;AAC3D,IAAA,WAAA,CAAY,MAA6B,EAAA;QACvC,KAAK,CAAC,MAAM,CAAC,CAAC;AACd,QAAA,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;AACvB,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,KAAK,GAAG,6BAA6B,CAAC;AAC5C,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE;AACnB,YAAA,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;AAChC,SAAA;KACF;AACF;;ACXK,MAAO,4BAA8B,SAAQ,eAAe,CAAA;AAChE,IAAA,WAAA,CAAY,MAA6B,EAAA;QACvC,KAAK,CAAC,MAAM,CAAC,CAAC;AACd,QAAA,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;AAC5B,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,KAAK,GAAG,2CAA2C,CAAC;AAC1D,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE;AACnB,YAAA,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;AAC1B,SAAA;KACF;AACF;;ACXK,MAAO,oBAAsB,SAAQ,eAAe,CAAA;AACxD,IAAA,WAAA,CAAY,MAA6B,EAAA;QACvC,KAAK,CAAC,MAAM,CAAC,CAAC;AACd,QAAA,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;AACpB,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,KAAK,GAAG,4BAA4B,CAAC;AAC3C,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE;AACnB,YAAA,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;AAClC,SAAA;KACF;AACF;;ACXK,MAAO,0BAA4B,SAAQ,eAAe,CAAA;AAC9D,IAAA,WAAA,CAAY,MAA6B,EAAA;QACvC,KAAK,CAAC,MAAM,CAAC,CAAC;AACd,QAAA,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;AAC1B,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,KAAK,GAAG,gCAAgC,CAAC;AAC/C,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE;AACnB,YAAA,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;AAChC,SAAA;KACF;AACF;;ACDY,MAAA,yBAAyB,GAA0B;IAC9D,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC/C,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,KAAK,EAAE;IACvD,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,KAAK,EAAE;IACvD,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,wBAAwB,EAAE,QAAQ,EAAE,MAAM,EAAE;IAClE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,wBAAwB,EAAE,QAAQ,EAAE,MAAM,EAAE;EAClE;AAMI,MAAO,qBAAsB,SAAQ,eAAe,CAAA;AAIxD,IAAA,WAAA,CAAY,MAAmC,EAAA;QAC7C,KAAK,CAAC,MAA+B,CAAC,CAAC;AAJlC,QAAA,IAAA,CAAA,QAAQ,GAAG,yBAAyB,CAAC,CAAC,CAAC,CAAC;QACxC,IAAU,CAAA,UAAA,GAAG,yBAAyB,CAAC;AAI5C,QAAA,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;AACrB,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,KAAK,GAAG,sBAAsB,CAAC;AACrC,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE;AACnB,YAAA,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;AACnC,SAAA;QACD,MAAM,GAAG,GAA0B,EAAE,CAAC;QACtC,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACrD,YAAA,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,UAAU,EAAE;AAClC,gBAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE;AACjC,oBAAA,IAAI,EAAE,KAAK,GAAG,CAAC,IAAI,EAAE;AACnB,wBAAA,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,qBAAA;AACF,iBAAA;AACF,aAAA;AACD,YAAA,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;AAClB,gBAAA,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;AACtB,gBAAA,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACxB,aAAA;AACF,SAAA;KACF;AAEM,IAAA,WAAW,CAAC,EAAU,EAAA;AAC3B,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE;AAC7B,YAAA,IAAI,EAAE,KAAK,CAAC,CAAC,QAAQ,EAAE;AACrB,gBAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;AACnB,aAAA;AACF,SAAA;KACF;AAEe,IAAA,YAAY,CAAC,MAAkB,EAAA;QAC7C,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE;AACnD,YAAA,MAAM,CAAC,CAAG,EAAA,IAAI,CAAC,KAAK,CAAA,EAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AACpE,SAAA;KACF;AACF;;ACnDK,MAAO,qBACX,SAAQ,eAAe,CAAA;AAQvB,IAAA,WAAA,CAAY,MAAsC,EAAA;QAChD,KAAK,CAAC,MAAM,CAAC,CAAC;AACd,QAAA,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;AACrB,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,KAAK,GAAG,yBAAyB,CAAC;AACxC,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE;AACnB,YAAA,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;AAClC,SAAA;QACD,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACpC,YAAA,MAAM,mCAAmC,CAAC;AAC3C,SAAA;QACD,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,EAAE;AACnC,YAAA,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;AAC7B,YAAA,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9C,YAAA,MAAM,EAAE,GAAI,CAAS,CAAC,OAAO,CAAC;YAC9B,IAAI,CAAC,EAAE,EAAE;AACP,gBAAA,MAAM,kCAAkC,CAAC;AAC1C,aAAA;AACD,YAAA,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;AACnB,SAAA;KACF;AACF;;AC5CK,MAAO,0BAA4B,SAAQ,eAAe,CAAA;AAC9D,IAAA,WAAA,CAAY,MAA6B,EAAA;QACvC,KAAK,CAAC,MAAM,CAAC,CAAC;AACd,QAAA,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;AAC1B,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,KAAK,GAAG,yBAAyB,CAAC;AACxC,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE;AACnB,YAAA,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;AAClC,SAAA;KACF;AACF;;ACXK,MAAO,mBAAoB,SAAQ,eAAe,CAAA;AACtD,IAAA,WAAA,CAAY,MAA6B,EAAA;QACvC,KAAK,CAAC,MAAM,CAAC,CAAC;AACd,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;AACnB,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,KAAK,GAAG,qBAAqB,CAAC;AACpC,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE;AACnB,YAAA,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;AAClC,SAAA;KACF;AACF;;ACXK,MAAO,mBAAqB,SAAQ,eAAe,CAAA;AACvD,IAAA,WAAA,CAAY,MAA6B,EAAA;QACvC,KAAK,CAAC,MAAM,CAAC,CAAC;AACd,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;AACnB,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,KAAK,GAAG,iCAAiC,CAAC;AAChD,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE;AACnB,YAAA,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;AAClC,SAAA;KACF;AACF;;MCOY,2BAA2B,CAAA;AAPxC,IAAA,WAAA,GAAA;QAWkB,IAAQ,CAAA,QAAA,GAAG,GAAG,CAAC;QACf,IAAI,CAAA,IAAA,GAAG,KAAK,CAAC;AAEtB,QAAA,IAAA,CAAA,cAAc,GAAgB,IAAI,WAAW,CAAS,EAAE,CAAC,CAAC;QAC1D,IAAgB,CAAA,gBAAA,GAAG,KAAK,CAAC;AACzB,QAAA,IAAA,CAAA,YAAY,GAAgB,IAAI,WAAW,CAAS,CAAC,CAAC,CAAC;QACvD,IAAO,CAAA,OAAA,GAAG,CAAC,CAAC;AAGZ,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAQ,CAAC;AA2C3C,KAAA;AAzCQ,IAAA,YAAY,CAAC,IAAY,EAAA;QAC9B,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;AACR,SAAA;QACD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KACnC;IAEM,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;KAC9B;IAEM,WAAW,GAAA;QAChB,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE;AAC9D,gBAAA,SAAS,EAAE,KAAK;AACjB,aAAA,CAAC,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;gBACnE,IAAI,IAAI,CAAC,GAAG,EAAE;AACZ,oBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;oBACnD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC;oBAClC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AAC/B,oBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBAClD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;AAClD,oBAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AACnE,iBAAA;AACH,aAAC,CAAC,CAAC;YAEH,IAAI,CAAC,cAAc,CAAC,YAAY;AAC7B,iBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAClC,iBAAA,SAAS,CAAC,CAAC,KAAK,KAAI;gBACnB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACzC,aAAC,CAAC,CAAC;YAEL,IAAI,CAAC,YAAY,CAAC,YAAY;AAC3B,iBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;AACrD,iBAAA,SAAS,CAAC,CAAC,KAAK,KAAI;gBACnB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC;AACtC,aAAC,CAAC,CAAC;AACN,SAAA;KACF;;wHAvDU,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,2BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,wKCpBxC,yjDA2BM,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDTM,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,opCAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FAErD,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAPvC,SAAS;+BACE,2BAA2B,EAAA,UAAA,EAGzB,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,EAAE,mBAAmB,EAAE,mBAAmB,CAAC,EAAA,QAAA,EAAA,yjDAAA,EAAA,CAAA;8BAKjD,IAAI,EAAA,CAAA;sBAAnB,KAAK;gBACU,QAAQ,EAAA,CAAA;sBAAvB,KAAK;gBACU,IAAI,EAAA,CAAA;sBAAnB,KAAK;;;IElBI,iBAKX;AALD,CAAA,UAAY,gBAAgB,EAAA;AAC1B,IAAA,gBAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,GAAA,IAAA,CAAA,GAAA,SAAc,CAAA;AACd,IAAA,gBAAA,CAAA,gBAAA,CAAA,MAAA,CAAA,GAAA,IAAA,CAAA,GAAA,MAAW,CAAA;AACX,IAAA,gBAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,GAAA,KAAA,CAAA,GAAA,SAAe,CAAA;AACf,IAAA,gBAAA,CAAA,gBAAA,CAAA,QAAA,CAAA,GAAA,KAAA,CAAA,GAAA,QAAc,CAAA;AAChB,CAAC,EALW,gBAAgB,KAAhB,gBAAgB,GAK3B,EAAA,CAAA,CAAA,CAAA;IAEW,OAEX;AAFD,CAAA,UAAY,MAAM,EAAA;AAChB,IAAA,MAAA,CAAA,MAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM,CAAA;AAAE,IAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI,CAAA;AAAE,IAAA,MAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAG,CAAA;AACnB,CAAC,EAFW,MAAM,KAAN,MAAM,GAEjB,EAAA,CAAA,CAAA,CAAA;AAED,MAAM,uBAAuB,GAAG,IAAI,CAAC;MAMxB,mBAAmB,GAAG,IAAI,cAAc,CAAc,qBAAqB,EAAE;MAG7E,OAAO,CAAA;IAIlB,WAAmB,CAAA,KAAa,EACb,IAAA,GAAA,CAAA,kBACA,OAAA,GAAkB,EAAE,EACpB,KAAa,GAAA,IAAI,EACjB,GAAA,GAAc,uBAAuB,EAAA;QAJrC,IAAK,CAAA,KAAA,GAAL,KAAK,CAAQ;QACb,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAkB;QACtB,IAAO,CAAA,OAAA,GAAP,OAAO,CAAa;QACpB,IAAK,CAAA,KAAA,GAAL,KAAK,CAAY;QACjB,IAAG,CAAA,GAAA,GAAH,GAAG,CAAkC;AAPjD,QAAA,IAAA,CAAA,MAAM,GAAW,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACvC,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;KAOxB;AAED,IAAA,IAAW,KAAK,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,IAAI,KAAA,CAAA,oBAAkB;AAC7B,YAAA,OAAO,sCAAsC,CAAC;AAC/C,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,IAAI,KAAA,CAAA,kBAAgB;AAC3B,YAAA,OAAO,oCAAoC,CAAC;AAC7C,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,IAAI,KAAA,CAAA,qBAAmB;AAC9B,YAAA,OAAO,uCAAuC,CAAC;AAChD,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,IAAI,KAAA,CAAA,qBAAmB;AAC9B,YAAA,OAAO,uCAAuC,CAAC;AAChD,SAAA;AACD,QAAA,OAAO,uCAAuC,CAAC;KAChD;IAEM,GAAG,GAAA;QACR,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;KAClC;AACF,CAAA;MAMY,kBAAkB,CAAA;IAM7B,WAAmB,CAAA,MAAc,EAC2B,MAAmB,EAAA;QAD5D,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QAC2B,IAAM,CAAA,MAAA,GAAN,MAAM,CAAa;AANxE,QAAA,IAAA,CAAA,UAAU,GAA6B,IAAI,aAAa,CAAY,CAAC,CAAC,CAAC;QACtE,IAAS,CAAA,SAAA,GAAc,EAAE,CAAC;QAMhC,IAAI,CAAC,IAAI,EAAE,CAAC;KACb;AAED,IAAA,IAAW,OAAO,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC;KACvC;IAEM,IAAI,GAAA;QACT,IAAI,OAAO,GAAG,KAAK,CAAC;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,YAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAK;gBACjC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAC9B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAK;AAC9C,oBAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE;AAC9B,wBAAA,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC;AACb,wBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE;4BACd,OAAO,GAAG,IAAI,CAAC;AAChB,yBAAA;AACF,qBAAA;AACD,oBAAA,IAAI,OAAO,EAAE;AACX,wBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAK;4BACnB,MAAM,GAAG,GAAc,EAAE,CAAC;AAC1B,4BAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE;AAC9B,gCAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE;AACd,oCAAA,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACb,iCAAA;AACF,6BAAA;AACD,4BAAA,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;4BACrB,IAAI,CAAC,OAAO,EAAE,CAAC;AACjB,yBAAC,CAAC,CAAC;AACJ,qBAAA;AACH,iBAAC,CAAC,CAAC;AACL,aAAC,CAAC,CAAC;AACJ,SAAA;KACF;IAEM,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;KAClC;AAEM,IAAA,OAAO,CAAC,KAAa,EAAE,OAAA,GAAkB,EAAE,EAAE,KAAa,GAAA,IAAI,EAAE,OAAA,GAAkB,gBAAgB,CAAC,OAAO,EAAA;AAC/G,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,EAAA,CAAA,qBAAgB,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AAC/E,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACrB,IAAI,CAAC,OAAO,EAAE,CAAC;KAChB;AAEM,IAAA,IAAI,CAAC,KAAa,EAAE,OAAA,GAAkB,EAAE,EAAE,KAAa,GAAA,IAAI,EAAE,OAAA,GAAkB,gBAAgB,CAAC,IAAI,EAAA;AACzG,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,EAAA,CAAA,kBAAa,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AAC5E,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClB,IAAI,CAAC,OAAO,EAAE,CAAC;KAChB;AAEM,IAAA,OAAO,CAAC,KAAa,EAAE,OAAA,GAAkB,EAAE,EAAE,KAAa,GAAA,IAAI,EAAE,OAAA,GAAkB,gBAAgB,CAAC,OAAO,EAAA;AAC/G,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,EAAA,CAAA,qBAAgB,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AAC/E,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACpB,IAAI,CAAC,OAAO,EAAE,CAAC;KAChB;AAEM,IAAA,MAAM,CAAC,KAAa,EAAE,OAAA,GAAkB,EAAE,EAAE,KAAa,GAAA,IAAI,EAAE,OAAA,GAAkB,gBAAgB,CAAC,MAAM,EAAA;AAC7G,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,uBAAe,OAAO,EAAE,KAAK,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9F,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAClB,IAAI,CAAC,OAAO,EAAE,CAAC;KAChB;AAEM,IAAA,KAAK,CAAC,KAAa,EAAE,UAAkB,EAAE,EAAE,QAAa,IAAI,EAAA;QACjE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;KACpC;AAEM,IAAA,KAAK,CAAC,KAAa,EAAE,UAAkB,EAAE,EAAE,QAAa,IAAI,EAAA;QACjE,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;KACpC;AAEM,IAAA,GAAG,CAAC,OAAgB,EAAA;QACzB,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,OAAO,EAAE,CAAC;KAChB;IAEM,IAAI,CAAC,OAAe,QAAQ,EAAA;QACjC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AACpC,YAAA,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YAC3C,KAAK,CAAC,IAAI,EAAE,CAAC;AACd,SAAA;KACF;IAEO,OAAO,GAAA;QACb,MAAM,GAAG,GAAc,EAAE,CAAC;AAC1B,QAAA,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE;YACpC,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;iBAC1C,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE;gBAC1C,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACrC,gBAAA,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACnB,aAAA;AACF,SAAA;AACD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAC3B;;AAtGU,kBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,wCAOG,mBAAmB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAPxC,kBAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cAFjB,MAAM,EAAA,CAAA,CAAA;2FAEP,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;0BAQc,QAAQ;;0BAAI,MAAM;2BAAC,mBAAmB,CAAA;;;MC1CxC,iBAAiB,CAAA;AAgC5B,IAAA,WAAA,GAAA;QA1BgB,IAAI,CAAA,IAAA,GAAG,KAAK,CAAC;QAMb,IAAM,CAAA,MAAA,GAAY,KAAK,CAAC;QACxB,IAAM,CAAA,MAAA,GAAe,EAAE,CAAC;QACxB,IAAI,CAAA,IAAA,GAAuC,MAAM,CAAC;QAElD,IAAM,CAAA,MAAA,GAAG,QAAQ,CAAC;;QAGlB,IAAK,CAAA,KAAA,GAAG,EAAE,CAAC;QACX,IAAW,CAAA,WAAA,GAAG,EAAE,CAAC;QACjB,IAAY,CAAA,YAAA,GAAsB,EAAE,CAAC;AAEpC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAK,CAAC;AACjC,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAQ,CAAC;AACrC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAQ,CAAC;QAE7C,IAAQ,CAAA,QAAA,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,IAAS,CAAA,SAAA,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAQ,CAAC;KAG5B;IAET,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;KAC/B;IAEM,QAAQ,GAAA;;;QAGb,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;YACrC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;AAC5C,SAAA;AAAM,aAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YACjE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;YACzC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;AAC5C,SAAA;QACD,IAAI,CAAC,EAAE,GAAG,IAAI,kBAAkB,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,CAAC,EAAE,CAAC,YAAY;aACjB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,oBAAoB,EAAE,CAAC;AAC3D,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,IAAI,KAAK,EAAE;AACT,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3B,aAAA;AACH,SAAC,CAAC,CAAC;QACL,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE;AACpD,gBAAA,IAAI,CAAC,IAAI,GAAG,CAAC,KAAQ,KAAK,CAAI,EAAA,KAAa,CAAC,IAAI,CAAC,OAAiB,CAAC,EAAE,CAAC;AACvE,aAAA;iBAAM,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,UAAU,EAAE;gBAC7D,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrC,aAAA;AACF,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC,KAAQ,KACnB,CACG,EAAA,KAAa,CAAC,MAAM,CAAC;gBACrB,KAAa,CAAC,OAAO,CAAC;AACtB,gBAAA,KAAa,CAAC,IAAI,CACrB,CAAA,CAAE,CAAC;AACN,SAAA;KACF;IAEM,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;KACrB;AAED;;AAEG;AACK,IAAA,QAAQ,CAAC,CAAM,EAAA;AACrB,QAAA,IAAI,CAAC,EAAE;YACL,IAAI,CAAC,CAAC,QAAQ,EAAE;AACd,gBAAA,IAAI,CAAC,CAAC,QAAQ,YAAY,QAAQ,EAAE;AAClC,oBAAA,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;AACrB,iBAAA;AAAM,qBAAA;oBACL,OAAO,CAAC,CAAC,QAAQ,CAAC;AACnB,iBAAA;AACF,aAAA;YACD,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,gBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACrB,aAAA;AACF,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;KACX;AAEO,IAAA,OAAO,CAAC,KAAyB,EAAA;QACvC,OAAO,KAAK,CAAC,IAAI,CACf,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,YAAY,CAAC,GAAG,CAAC,EACjB,oBAAoB,EAAE,EACtB,SAAS,CAAC,CAAC,IAAI,KAAI;YACjB,MAAM,CAAC,GAAQ,EAAE,CAAC;YAClB,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AACxC,gBAAA,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;oBAC3D,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACvB,iBAAA;AACF,aAAA;AACD,YAAA,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;AACtB,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,QAAyB,CAAC;AAC1C,YAAA,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACnB,YAAA,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC;SACjB,CAAC,CACH,CAAC;KACH;;8GAjHU,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,iBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,gaC5B9B,ifAOM,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,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,YAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,CAAA,EAAA,CAAA,CAAA;2FDqBO,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAL7B,SAAS;+BACE,eAAe,EAAA,QAAA,EAAA,ifAAA,EAAA,CAAA;0EAQT,KAAK,EAAA,CAAA;sBAApB,KAAK;gBACU,KAAK,EAAA,CAAA;sBAApB,KAAK;gBACU,IAAI,EAAA,CAAA;sBAAnB,KAAK;gBAEU,KAAK,EAAA,CAAA;sBAApB,KAAK;gBAEU,QAAQ,EAAA,CAAA;sBAAvB,KAAK;gBACU,UAAU,EAAA,CAAA;sBAAzB,KAAK;gBACU,MAAM,EAAA,CAAA;sBAArB,KAAK;gBACU,MAAM,EAAA,CAAA;sBAArB,KAAK;gBACU,IAAI,EAAA,CAAA;sBAAnB,KAAK;gBACU,OAAO,EAAA,CAAA;sBAAtB,KAAK;gBACU,MAAM,EAAA,CAAA;sBAArB,KAAK;gBAGU,KAAK,EAAA,CAAA;sBAApB,KAAK;gBACU,WAAW,EAAA,CAAA;sBAA1B,KAAK;gBACU,YAAY,EAAA,CAAA;sBAA3B,KAAK;gBAEW,QAAQ,EAAA,CAAA;sBAAxB,MAAM;gBACU,SAAS,EAAA,CAAA;sBAAzB,MAAM;gBACU,OAAO,EAAA,CAAA;sBAAvB,MAAM;;;MEdI,kBAAkB,CAAA;AAZ/B,IAAA,WAAA,GAAA;QAkBkB,IAAI,CAAA,IAAA,GAAG,KAAK,CAAC;QAGtB,IAAG,CAAA,GAAA,GAAa,EAAE,CAAC;QACnB,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;QAIR,IAAM,CAAA,MAAA,GAAe,EAAE,CAAC;QACxB,IAAI,CAAA,IAAA,GAAuC,MAAM,CAAC;QAElD,IAAM,CAAA,MAAA,GAAG,QAAQ,CAAC;;QAElB,IAAK,CAAA,KAAA,GAAG,EAAE,CAAC;QACX,IAAW,CAAA,WAAA,GAAG,EAAE,CAAC;QACjB,IAAU,CAAA,UAAA,GAAG,EAAE,CAAC;QAChB,IAAY,CAAA,YAAA,GAAsB,EAAE,CAAC;;AAEpC,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,YAAY,EAAK,CAAC;AAC9B,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAK,CAAC;AAChC,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAQ,CAAC;AACrC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAQ,CAAC;AACnC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAO,CAAC;AACzC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAY,CAAC;QAGjD,IAAQ,CAAA,QAAA,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,IAAS,CAAA,SAAA,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,IAAO,CAAA,OAAA,GAAG,KAAK,CAAC;AAChB,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAQ,CAAC;AAG5C;;;AAGG;AACI,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAC,GAAa,KAAI,GAAG,CAAC;AAExC;;AAEG;AACI,QAAA,IAAA,CAAA,SAAS,GAAG,MAAK,GAAG,CAAC;AAuO7B,KAAA;AArOC;;AAEG;IACI,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;KAC/B;AAED;;;AAGG;AACH,IAAA,gBAAgB,CAAC,QAAa,EAAA;AAC5B,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;KAC1B;AAED;;;AAGG;AACH,IAAA,iBAAiB,CAAC,SAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;KAC5B;AAED;;;;;;AAMG;IACI,QAAQ,GAAA;;;QAGb,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;YACrC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;AAC5C,SAAA;AAAM,aAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YACjE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;YACzC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;AAC5C,SAAA;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,MAAM,KAAK,CAAC,sCAAsC,CAAC,CAAC;AACrD,SAAA;;QAED,IAAI,CAAC,EAAE,GAAG,IAAI,kBAAkB,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,CAAC,EAAE,CAAC,YAAY;aACjB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,oBAAoB,EAAE,CAAC;AAC3D,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,IAAI,KAAK,EAAE;AACT,gBAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACnB,aAAA;AACH,SAAC,CAAC,CAAC;;QAEL,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE;AACpD,gBAAA,IAAI,CAAC,IAAI,GAAG,CAAC,KAAQ,KAAK,CAAI,EAAA,KAAa,CAAC,IAAI,CAAC,OAAiB,CAAC,EAAE,CAAC;AACvE,aAAA;iBAAM,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,UAAU,EAAE;gBAC7D,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrC,aAAA;AACF,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC,KAAQ,KACnB,CACG,EAAA,KAAa,CAAC,MAAM,CAAC;gBACrB,KAAa,CAAC,OAAO,CAAC;AACtB,gBAAA,KAAa,CAAC,IAAI,CACrB,CAAA,CAAE,CAAC;AACN,SAAA;;;AAGD,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE;AAC5C,YAAA,IAAI,CAAC,MAAM,GAAI,IAAI,CAAC,KAAa,CAAC,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC;AAC5D,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE;AAC7B,YAAA,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AAClE,YAAA,MAAM,KAAK,CAAC,qBAAqB,CAAC,CAAC;AACpC,SAAA;KACF;AAED;;;;AAIG;AACI,IAAA,QAAQ,CAAC,CAAI,EAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,CAAC,aAAa,EAAE,CAAC;AACrB,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAClC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YACvB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACtC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5B,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACrB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,SAAA;KACF;AAED;;;;AAIG;AACI,IAAA,KAAK,CAAC,CAAI,EAAA;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACpB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACtC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5B,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACnB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,SAAA;KACF;AAED;;;AAGG;IACI,OAAO,GAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,CAAC,aAAa,EAAE,CAAC;AACrB,YAAA,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;AACd,YAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;YACjB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACtC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5B,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AACpB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,SAAA;KACF;AAED;;;AAGG;IACH,MAAM,UAAU,CAAC,GAAa,EAAA;AAC5B,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;AACf,QAAA,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;KACnC;AAED;;AAEG;IACI,aAAa,GAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACrB,SAAA;KACF;AAED;;;AAGG;AACH,IAAA,gBAAgB,CAAC,QAAiB,EAAA;AAChC,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;KAC1B;AAED;;;;;;AAMG;AACK,IAAA,MAAM,iBAAiB,CAAC,GAAA,GAAgB,EAAE,EAAA;QAChD,MAAM,MAAM,GAAQ,EAAE,CAAC;AACvB,QAAA,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE;YACnB,IAAI,KAAK,GAAG,KAAK,CAAC;AAClB,YAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE;AACzB,gBAAA,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE;AACb,oBAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACf,KAAK,GAAG,IAAI,CAAC;oBACb,MAAM;AACP,iBAAA;AACF,aAAA;YACD,IAAI,CAAC,KAAK,EAAE;gBACV,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,oBAAA,MAAM,CAAC,IAAI,CAAC,MAAM,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7D,iBAAA;AAAM,qBAAA;AACL,oBAAA,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAS,CAAC,CAAC;AACpD,iBAAA;AACF,aAAA;AACF,SAAA;AACD,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KACvC;AAED;;AAEG;AACK,IAAA,QAAQ,CAAC,CAAM,EAAA;AACrB,QAAA,IAAI,CAAC,EAAE;YACL,IAAI,CAAC,CAAC,QAAQ,EAAE;AACd,gBAAA,IAAI,CAAC,CAAC,QAAQ,YAAY,QAAQ,EAAE;AAClC,oBAAA,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;AACrB,iBAAA;AAAM,qBAAA;oBACL,OAAO,CAAC,CAAC,QAAQ,CAAC;AACnB,iBAAA;AACF,aAAA;YACD,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,gBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACrB,aAAA;AACF,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;KACX;AAED;;;;AAIG;AACK,IAAA,OAAO,CAAC,KAAyB,EAAA;QACvC,OAAO,KAAK,CAAC,IAAI,CACf,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAC7B,YAAY,CAAC,GAAG,CAAC,EACjB,oBAAoB,EAAE,EACtB,SAAS,CAAC,CAAC,IAAI,KAAI;YACjB,MAAM,CAAC,GAAQ,EAAE,CAAC;YAClB,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AACxC,gBAAA,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;oBAC3D,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACvB,iBAAA;AACF,aAAA;AACD,YAAA,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;AACtB,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,QAAyB,CAAC;AAC1C,YAAA,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACnB,YAAA,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC;SACjB,CAAC,CACH,CAAC;KACH;;+GArRU,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,kBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EARlB,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,SAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA;AACT,QAAA;AACE,YAAA,OAAO,EAAE,iBAAiB;AAC1B,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,WAAW,EAAE,kBAAkB;AAChC,SAAA;AACF,KAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrCH,gnBAQM,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,YAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,CAAA,EAAA,CAAA,CAAA;2FD+BO,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAZ9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAGf,SAAA,EAAA;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,KAAK,EAAE,IAAI;AACX,4BAAA,WAAW,EAAoB,kBAAA;AAChC,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,gnBAAA,EAAA,CAAA;8BAMe,KAAK,EAAA,CAAA;sBAApB,KAAK;gBACU,KAAK,EAAA,CAAA;sBAApB,KAAK;gBACU,IAAI,EAAA,CAAA;sBAAnB,KAAK;gBAEU,MAAM,EAAA,CAAA;sBAArB,KAAK;gBAIU,QAAQ,EAAA,CAAA;sBAAvB,KAAK;gBACU,UAAU,EAAA,CAAA;sBAAzB,KAAK;gBACU,MAAM,EAAA,CAAA;sBAArB,KAAK;gBACU,IAAI,EAAA,CAAA;sBAAnB,KAAK;gBACU,OAAO,EAAA,CAAA;sBAAtB,KAAK;gBACU,MAAM,EAAA,CAAA;sBAArB,KAAK;gBAEU,KAAK,EAAA,CAAA;sBAApB,KAAK;gBACU,WAAW,EAAA,CAAA;sBAA1B,KAAK;gBACU,UAAU,EAAA,CAAA;sBAAzB,KAAK;gBACU,YAAY,EAAA,CAAA;sBAA3B,KAAK;gBAEW,KAAK,EAAA,CAAA;sBAArB,MAAM;gBACU,OAAO,EAAA,CAAA;sBAAvB,MAAM;gBACU,SAAS,EAAA,CAAA;sBAAzB,MAAM;gBACU,OAAO,EAAA,CAAA;sBAAvB,MAAM;gBACU,cAAc,EAAA,CAAA;sBAA9B,MAAM;gBACU,OAAO,EAAA,CAAA;sBAAvB,MAAM;;;MEhCI,iBAAiB,CAAA;AAsG5B;;;;;AAKG;IACH,WACkD,CAAA,KAAwB,EAChE,KAAyB,EAAA;QADe,IAAK,CAAA,KAAA,GAAL,KAAK,CAAmB;QAChE,IAAK,CAAA,KAAA,GAAL,KAAK,CAAoB;AArGnC;;;AAGG;QACa,IAAI,CAAA,IAAA,GAAG,KAAK,CAAC;AAQ7B;;;;AAIK;QACW,IAAI,CAAA,IAAA,GAA6B,QAAQ,CAAC;AAC1D;;;AAGG;QACa,IAAO,CAAA,OAAA,GAAsB,EAAE,CAAC;AAShD;;;AAGG;QACa,IAAW,CAAA,WAAA,GAAW,EAAE,CAAC;AACzC;;;AAGG;QACa,IAAI,CAAA,IAAA,GAAW,EAAE,CAAC;AAClC;;AAEG;QACa,IAAS,CAAA,SAAA,GAAY,KAAK,CAAC;;QAW3B,IAAM,CAAA,MAAA,GAAe,EAAE,CAAC;;AAGvB,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAK,CAAC;;QAW1C,IAAU,CAAA,UAAA,GAA0B,YAAY,CAAC;;QAEjD,IAAW,CAAA,WAAA,GAA2B,MAAM,CAAC;;QAI7C,IAAW,CAAA,WAAA,GAAuB,EAAE,CAAC;AA4B1C,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE;AACvB,YAAA,IAAI,CAAC,KAAK,GAAG,0BAA0B,CAAC;AACzC,SAAA;KACF;AAED;;;;;;;AAOG;IACI,QAAQ,GAAA;QACb,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjB;AAED;;;AAGG;AACI,IAAA,WAAW,CAAC,OAAsB,EAAA;QACvC,IAAI,CAAC,aAAa,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,IAAI,KAAK,CAAC;QAChD,IAAI,CAAC,OAAO,EAAE,CAAC;AACf,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC;AACtD,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,EAAE,WAAW,IAAI,EAAE,CAAC;AAC3E,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,SAAS,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACrE,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;YACpC,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAC1B,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,cAAc,EAAE,CAAC;AACvB,SAAA;KACF;AAED;;;;;;AAMG;IACI,iBAAiB,GAAA;QACtB,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;KACnB;AAED;;;;;;;AAOG;IACI,cAAc,GAAA;QACnB,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;AAED;;;AAGG;AACI,IAAA,MAAM,MAAM,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE;YAC1C,QAAQ,IAAI,CAAC,UAAU;AACrB,gBAAA,KAAK,eAAe;AACjB,oBAAA,IAAI,CAAC,KAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAC1C,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAI,IAAI,CAAC,OAAe,CAAC,MAAM,CACzD,CAAC;oBACF,MAAM;AACR,gBAAA;AACG,oBAAA,IAAI,CAAC,KAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/D,aAAA;AACD,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;AACtB,gBAAA,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;AACrB,aAAA;AACF,SAAA;KACF;IAED,SAAS,GAAA;QACP,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE;AAClC,YAAA,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;YAClB,OAAO,IAAI,CAAC,EAAE,CAAC;AAChB,SAAA;KACF;IAED,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACd,IAAI,CAAC,cAAc,EAAE,CAAC;AACvB,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAC1B,SAAA;KACF;AAED;;;AAGG;AACI,IAAA,MAAM,UAAU,GAAA;QACrB,IAAI,IAAI,CAAC,KAAK,EAAE;YACb,IAAI,CAAC,KAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;AACnD,YAAA,IAAI,CAAC,EAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE;AACvD,gBAAA,SAAS,EAAE,KAAK;AACjB,aAAA,CAAC,CAAC;AACJ,SAAA;AACD,QAAA,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;KACrB;IAEM,MAAM,eAAe,CAAC,MAAgB,EAAA;QAC3C,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,IAAI,MAAM,KAAK,IAAI,EAAE;gBAClB,IAAI,CAAC,KAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC;gBAC3C,IAAI,CAAC,KAAa,CAAC,CAAG,EAAA,IAAI,CAAC,KAAK,CAAU,QAAA,CAAA,CAAC,GAAG,MAAM,CAAC;gBACtD,IAAI,IAAI,CAAC,IAAI,EAAE;oBACb,MAAM,EAAE,GAAuC,EAAE,CAAC;oBAClD,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC;AAC3B,oBAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC/C,iBAAA;AACF,aAAA;AAAM,iBAAA;gBACJ,IAAI,CAAC,KAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;gBACvC,OAAQ,IAAI,CAAC,KAAa,CAAC,CAAA,EAAG,IAAI,CAAC,KAAK,CAAU,QAAA,CAAA,CAAC,CAAC;gBACpD,IAAI,IAAI,CAAC,IAAI,EAAE;oBACb,MAAM,EAAE,GAAuC,EAAE,CAAC;AAClD,oBAAA,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;AACtB,oBAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC/C,iBAAA;AACF,aAAA;AACD,YAAA,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;AACrB,SAAA;KACF;AAEM,IAAA,kBAAkB,CAAC,CAAQ,EAAA;AAChC,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;KACpB;IAEO,OAAO,GAAA;QACb,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAC3C,YAAA,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;AACvB,SAAA;KACF;AAED;;;;AAIG;AACK,IAAA,MAAM,KAAK,GAAA;QACjB,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE;gBACjB,IAAI;oBACF,MAAM,cAAc,CAClB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CACvD,CAAC;AACH,iBAAA;AAAC,gBAAA,OAAO,CAAC,EAAE;AACV,oBAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBACjB,IAAI,GAAG,GAAW,EAAE,CAAC;AACrB,oBAAA,IAAI,CAAC,IAAK,CAAS,CAAC,KAAK,IAAK,CAAS,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;wBACzD,GAAG,GAAG,CAAI,EAAA,CAAS,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA,CAAE,CAAC;AACzC,qBAAA;AACD,oBAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CACd,iCAAiC,EACjC,GAAG,EACH,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAClB,CAAC;oBACF,OAAO;AACR,iBAAA;AACF,aAAA;AACD,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;gBACtB,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjB,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAC1B,aAAA;YACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/B,SAAA;KACF;AAEO,IAAA,QAAQ,CAAC,CAAM,EAAA;AACrB,QAAA,IAAI,CAAC,EAAE;YACL,IAAI,CAAC,CAAC,QAAQ,EAAE;AACd,gBAAA,IAAI,CAAC,CAAC,QAAQ,YAAY,QAAQ,EAAE;AAClC,oBAAA,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;AACrB,iBAAA;AAAM,qBAAA;oBACL,OAAO,CAAC,CAAC,QAAQ,CAAC;AACnB,iBAAA;AACF,aAAA;YACD,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,gBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACrB,aAAA;AACF,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;KACX;AAED;;;AAGG;IACK,QAAQ,GAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACd,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;AAC7C,SAAA;KACF;IAEO,aAAa,GAAA;QACnB,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE;AACpD,gBAAA,IAAI,CAAC,IAAI,GAAG,CAAC,KAAQ,KAAK,CAAI,EAAA,KAAa,CAAC,IAAI,CAAC,OAAiB,CAAC,EAAE,CAAC;AACvE,aAAA;iBAAM,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,UAAU,EAAE;gBAC7D,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrC,aAAA;AACF,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC,KAAQ,KACnB,CACG,EAAA,KAAa,CAAC,MAAM,CAAC;gBACrB,KAAa,CAAC,OAAO,CAAC;AACtB,gBAAA,KAAa,CAAC,IAAI,CACrB,CAAA,CAAE,CAAC;AACN,SAAA;KACF;IAEO,WAAW,GAAA;;AAEjB,QAAA,IAAI,OAAsC,CAAC;QAC3C,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACvC,YAAA,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AACxB,SAAA;AAAM,aAAA,IAAK,IAAI,CAAC,OAAe,EAAE,OAAO,EAAE;AACzC,YAAA,OAAO,GAAI,IAAI,CAAC,OAAe,EAAE,OAAO,CAAC;AAC1C,SAAA;;AAED,QAAA,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACjC,YAAA,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;AAC5B,SAAA;AAAM,aAAA;YACL,OAAO,IAAI,CAAC,WAAW,CAAC;AACzB,SAAA;KACF;IAEO,eAAe,GAAA;AACrB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM;cAC1B,IAAI,CAAC,MAAM;AACb,cAAE,IAAI,CAAC,OAAO,EAAE,WAAW;AAC3B,kBAAE,IAAI,CAAC,OAAO,CAAC,WAAW;kBACxB,MAAM,CAAC;QACX,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;AAC/C,YAAA,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC;AAC7B,SAAA;KACF;IAEO,cAAc,GAAA;AACpB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM;cACzB,IAAI,CAAC,MAAM;cACX,IAAI,CAAC,OAAO,EAAE,UAAU,IAAI,YAAY,CAAC;QAC7C,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;AAC/C,YAAA,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC;AAC5B,SAAA;KACF;IAEO,eAAe,GAAA;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACd,MAAM,GAAG,GAA4C,EAAE,CAAC;AACxD,YAAA,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5C,IAAI,CAAC,EAAE,GAAG,IAAI,gBAAgB,CAAC,GAAG,CAAC,CAAC;AACrC,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;AACpB,YAAA,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACxD,gBAAA,SAAS,EAAE,KAAK;AACjB,aAAA,CAAC,CAAC;AACJ,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;YAC1B,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,MAAK;gBAClC,IAAI,CAAC,MAAM,EAAE,CAAC;AAChB,aAAC,CAAC,CAAC;AACJ,SAAA;KACF;IAEO,oBAAoB,GAAA;QAC1B,QAAQ,IAAI,CAAC,UAAU;AACrB,YAAA,KAAK,gBAAgB;gBACnB,MAAM,KAAK,GAAI,IAAI,CAAC,KAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9C,gBAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;AACvB,gBAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,CACvB,GAAG,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,iBAAiB,EAAE,GAAG,KAAK,CAChD,CAAC;gBACF,IAAI,KAAK,KAAK,IAAI,EAAE;oBAClB,IAAI,CAAC,EAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACnE,iBAAA;AAAM,qBAAA;AACL,oBAAA,MAAM,IAAI,GAAG,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;AAClD,oBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACxC,oBAAA,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,MAAM,GAAG,KAAK,CAAC,CAAC;AAC5D,oBAAA,IAAI,CAAC,EAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CACpC,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EACxC,EAAE,SAAS,EAAE,IAAI,EAAE,CACpB,CAAC;AACH,iBAAA;AACD,gBAAA,IAAI,CAAC,WAAW;AACd,oBAAA,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,QAAQ;0BAClC,QAAQ,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;0BACvC,IAAI,CAAC;gBACX,MAAM;AACR,YAAA,KAAK,YAAY;AACf,gBAAA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvD,gBAAA,IAAI,CAAC,EAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAC3C,MAAM;AACR,YAAA,KAAK,eAAe;AAClB,gBAAA,IAAI,CAAC,EAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CACnC,IAAI,CAAC,KAAa,CAAC,IAAI,CAAC,KAAK,CAAC;qBAC3B,IAAI,CAAC,OAA0C,CAAC,MAAM,IAAI,CAAC,CAAC,CACjE,CAAC;AACL,SAAA;KACF;IAEO,iBAAiB,GAAA;;AAEvB,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACtB,YAAA,IAAI,CAAC,YAAY;AACf,gBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;AAC3D,SAAA;KACF;IAEO,gBAAgB,GAAA;QACtB,MAAM,KAAK,GAAI,IAAI,CAAC,KAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9C,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE;gBAChC,IAAI,CAAC,KAAK,KAAK,EAAE;AACf,oBAAA,IAAI,CAAC,QAAQ,GAAG,CAAQ,CAAC;oBACzB,OAAO;AACR,iBAAA;qBAAM,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,EAAE;AACvC,oBAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC;oBACvB,OAAO;AACR,iBAAA;AACF,aAAA;AACF,SAAA;;QAED,IAAI,KAAK,KAAK,IAAI,EAAE;AAClB,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AACvB,SAAA;aAAM,IAAI,KAAK,KAAK,KAAK,EAAE;AAC1B,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AACvB,SAAA;AAAM,aAAA,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;AAChD,YAAA,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC;AAC9B,SAAA;AAAM,aAAA;YACL,QAAQ,IAAI,CAAC,WAAW;AACtB,gBAAA,KAAK,WAAW;AACd,oBAAA,MAAM,OAAO,GAAI,IAAI,CAAC,KAAa,CAAC,CAAG,EAAA,IAAI,CAAC,KAAK,CAAU,QAAA,CAAA,CAAQ,CAAC;oBACpE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;oBACvC,MAAM;AACR,gBAAA,KAAK,YAAY;AACf,oBAAA,MAAM,UAAU,GACd,IAAI,CAAC,SAAS;wBACZ,IAAI,CAAC,KAAa,CAAC,CAAA,EAAG,IAAI,CAAC,KAAK,CAAU,QAAA,CAAA,CAAW,CAAC;AAC1D,oBAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;AACpB,oBAAA,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE;AAC1B,wBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,qBAAA;oBACD,MAAM;AACR,gBAAA,KAAK,SAAS;AACZ,oBAAA,IAAI,CAAC,QAAQ,GAAG,CAAA,EACd,KAAK;yBACH,IAAI,CAAC,OAA0C,CAAC,MAAM,IAAI,CAAC,CAC/D,CAAA,CAAE,CAAC;oBACH,MAAM;AACR,gBAAA;AACE,oBAAA,IAAI,CAAC,QAAQ,GAAG,CAAG,EAAA,KAAK,EAAE,CAAC;AAC9B,aAAA;AACF,SAAA;KACF;AAEO,IAAA,kBAAkB,MAAK;;AAxepB,iBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,kBA6GN,mBAAmB,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AA7G9B,iBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,mcCpC9B,4+dA2Je,EAAA,MAAA,EAAA,CAAA,yHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,uGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,EAAAA,IAAA,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,EAAAE,iBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,SAAA,EAAA,QAAA,EAAA,OAAA,EAAA,aAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,WAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,MAAA,EAAA,SAAA,EAAA,QAAA,EAAA,OAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAJ,IAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDvHF,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAL7B,SAAS;+BACE,eAAe,EAAA,QAAA,EAAA,4+dAAA,EAAA,MAAA,EAAA,CAAA,yHAAA,CAAA,EAAA,CAAA;;0BAiHtB,QAAQ;;0BAAI,MAAM;2BAAC,mBAAmB,CAAA;0EAzGzB,KAAK,EAAA,CAAA;sBAApB,KAAK;gBAEU,KAAK,EAAA,CAAA;sBAApB,KAAK;gBAEU,IAAI,EAAA,CAAA;sBAAnB,KAAK;gBAKU,IAAI,EAAA,CAAA;sBAAnB,KAAK;gBAaU,IAAI,EAAA,CAAA;sBAAnB,KAAK;gBAKU,OAAO,EAAA,CAAA;sBAAtB,KAAK;gBAEU,YAAY,EAAA,CAAA;sBAA3B,KAAK;gBAEU,MAAM,EAAA,CAAA;sBAArB,KAAK;gBAEU,MAAM,EAAA,CAAA;sBAArB,KAAK;gBAEU,OAAO,EAAA,CAAA;sBAAtB,KAAK;gBAKU,WAAW,EAAA,CAAA;sBAA1B,KAAK;gBAKU,IAAI,EAAA,CAAA;sBAAnB,KAAK;gBAIU,SAAS,EAAA,CAAA;sBAAxB,KAAK;gBAKU,QAAQ,EAAA,CAAA;sBAAvB,KAAK;gBAEU,UAAU,EAAA,CAAA;sBAAzB,KAAK;gBAEU,OAAO,EAAA,CAAA;sBAAtB,KAAK;gBAEU,MAAM,EAAA,CAAA;sBAArB,KAAK;gBAGW,OAAO,EAAA,CAAA;sBAAvB,MAAM;;;MEjGI,UAAU,CAAA;AACrB,IAAA,SAAS,CACP,KAAQ,EACR,KAAa,EACb,OAAiC,MAAM,EAAA;QAEvC,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,GAAG,CAAC;AACZ,SAAA;AACD,QAAA,MAAM,MAAM,GAAI,KAAa,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,IAAI,KAAK,MAAM,EAAE;YACnB,OAAO,CAAA,EAAG,MAAM,CAAA,CAAE,CAAC;AACpB,SAAA;QACD,MAAM,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAChC,QAAA,MAAM,OAAO,GAAI,OAAe,CAAC,OAAO,CAAC;QACzC,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,CAAA,EAAG,MAAM,CAAA,CAAE,CAAC;AACpB,SAAA;AACD,QAAA,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE;AACxB,YAAA,IAAI,EAAE,CAAC,KAAK,KAAK,MAAM,EAAE;gBACvB,IAAI,IAAI,KAAK,MAAM,EAAE;oBACnB,OAAO,EAAE,CAAC,IAAI,CAAC;AAChB,iBAAA;AAAM,qBAAA;AACL,oBAAA,OAAO,IAAI,MAAM,CAAA,EAAA,EAAK,EAAE,CAAC,IAAI,EAAE,CAAC;AACjC,iBAAA;AACF,aAAA;AACF,SAAA;QACD,OAAO,CAAA,CAAA,EAAI,MAAM,CAAA,IAAA,CAAM,CAAC;KACzB;;uGA5BU,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;qGAAV,UAAU,EAAA,IAAA,EAAA,QAAA,EAAA,CAAA,CAAA;2FAAV,UAAU,EAAA,UAAA,EAAA,CAAA;kBAHtB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,QAAQ;AACf,iBAAA,CAAA;;;MCyBY,mBAAmB,CAAA;AAW9B,IAAA,WAAA,CAAoB,IAAkB,EAAA;QAAlB,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAc;QARtB,IAAM,CAAA,MAAA,GAAgC,EAAE,CAAC;AACxC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAoB,CAAC;QAChD,IAAO,CAAA,OAAA,GAAiC,QAAQ,CAAC;KAMvB;IAEnC,MAAM,WAAW,CAAC,KAAgB,EAAA;QACvC,IAAI,CAAC,MAAM,GAAG,MAAM,cAAc,CAChC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAC5D,CAAC;AACF,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACzC,YAAA,QAAQ,EAAE,KAAK;AAChB,SAAA,CAAC,CAAC;KACJ;AAEM,IAAA,MAAM,YAAY,GAAA;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,cAAc,CAChC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,CAChE,CAAC;AACF,QAAA,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC;QAClB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAChC;;gHA5BU,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAD,IAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,mBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EC9BhC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,qsDAiCM,EDLM,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,mQAAE,kBAAkB,EAAA,CAAA,EAAA,CAAA,CAAA;2FAE/B,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAP/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,cAGhB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,kBAAkB,CAAC,EAAA,QAAA,EAAA,qsDAAA,EAAA,CAAA;qGAG3B,KAAK,EAAA,CAAA;sBAApB,KAAK;gBACU,OAAO,EAAA,CAAA;sBAAtB,KAAK;gBACU,MAAM,EAAA,CAAA;sBAArB,KAAK;gBACW,OAAO,EAAA,CAAA;sBAAvB,MAAM;gBACS,OAAO,EAAA,CAAA;sBAAtB,KAAK;gBAGE,UAAU,EAAA,CAAA;sBADjB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;;;MEF1B,cAAc,CAAA;;2GAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAd,cAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,iBAnBvB,iBAAiB;QACjB,iBAAiB;QACjB,kBAAkB;AAClB,QAAA,UAAU,aASV,YAAY;QACZ,kBAAkB;QAClB,kBAAkB;QAClB,mBAAmB;AACnB,QAAA,UAAU,aAVV,iBAAiB;QACjB,iBAAiB;QACjB,kBAAkB;QAClB,UAAU,CAAA,EAAA,CAAA,CAAA;AAUD,cAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,YAPvB,YAAY;QACZ,kBAAkB;QAClB,kBAAkB;QAClB,mBAAmB;QACnB,UAAU,CAAA,EAAA,CAAA,CAAA;2FAGD,cAAc,EAAA,UAAA,EAAA,CAAA;kBArB1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,iBAAiB;wBACjB,iBAAiB;wBACjB,kBAAkB;wBAClB,UAAU;AACX,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,iBAAiB;wBACjB,iBAAiB;wBACjB,kBAAkB;wBAClB,UAAU;AACX,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,kBAAkB;wBAClB,kBAAkB;wBAClB,mBAAmB;wBACnB,UAAU;AACX,qBAAA;AACF,iBAAA,CAAA;;;ACCK,MAAO,gBAAiB,SAAQ,gBAAwB,CAAA;AAM5D,IAAA,WAAA,CAAY,MAAW,EAAA;QACrB,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC;AAC5B,SAAA;KACF;AAED,IAAA,IAAoB,UAAU,GAAA;AAC5B,QAAA,MAAM,CAAC,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAC9C,SAAA;QACD,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAC9C,SAAA;QACD,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAC1C,SAAA;;AAED,QAAA,OAAO,CAAC,CAAC;KACV;AAEe,IAAA,QAAQ,CAAC,IAAS,EAAA;QAChC,IAAI,IAAI,KAAK,SAAS,EAAE;AACtB,YAAA,OAAO,IAAI,CAAC,eAAe,EAAG,CAAC;AAChC,SAAA;QACD,IAAI,IAAI,KAAK,IAAI,EAAE;AACjB,YAAA,OAAO,IAAI,CAAC,eAAe,EAAG,CAAC;AAChC,SAAA;AACD,QAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC5B,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;QACD,OAAO,CAAA,EAAG,IAAI,CAAA,CAAE,CAAC;KAClB;AACF,CAAA;AAEK,MAAO,iBACX,SAAQ,gBAAgB,CAAA;AAMxB,IAAA,WAAA,CAAY,MAAW,EAAA;QACrB,KAAK,CAAC,MAAM,CAAC,CAAC;QAJT,IAAQ,CAAA,QAAA,GAAG,IAAI,CAAC;QACP,IAAU,CAAA,UAAA,GAA0B,aAAa,CAAC;AAIhE,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;AAC/B,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACtB,SAAA;KACF;AAED,IAAA,IAAoB,UAAU,GAAA;AAC5B,QAAA,MAAM,CAAC,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAC1B,SAAA;AACD,QAAA,OAAO,CAAC,CAAC;KACV;AACF,CAAA;AAEK,MAAO,gBAAiB,SAAQ,gBAAgB,CAAA;AAAtD,IAAA,WAAA,GAAA;;QAEkB,IAAU,CAAA,UAAA,GAA0B,UAAU,CAAC;KAChE;AAAA,CAAA;AAEK,MAAO,oBAAqB,SAAQ,gBAAgB,CAAA;AAA1D,IAAA,WAAA,GAAA;;QAEkB,IAAU,CAAA,UAAA,GAA0B,gBAAgB,CAAC;KACtE;AAAA,CAAA;AAED;AAEa,MAAA,SAAS,GAAG,CAAC,OAAA,GAA8B,EAAE,KACxD,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE;AAE9C,MAAA,UAAU,GAAG,CACxB,OAAA,GAA+B,EAAE,KAEjC,gBAAgB,CAAC,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE;AAEhD,MAAA,SAAS,GAAG,CAAC,OAAA,GAA8B,EAAE,KACxD,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE;AAE9C,MAAA,aAAa,GAAG,CAC3B,OAAA,GAAkC,EAAE,KAEpC,gBAAgB,CAAC,OAAO,EAAE,eAAe,EAAE,oBAAoB;;ACnH3D,MAAO,mBACX,SAAQ,gBAAwB,CAAA;AADlC,IAAA,WAAA,GAAA;;QAIS,IAAI,CAAA,IAAA,GAAG,CAAC,CAAC;KACjB;AAAA,CAAA;AAEY,MAAA,YAAY,GAAG,CAC1B,OAAA,GAAiC,EAAE,KAEnC,gBAAgB,CAAC,OAAO,EAAE,cAAc,EAAE,mBAAmB;;ACPxD,MAAM,WAAW,GAAG,CAAC,IAAU,KAAiB;IACrD,OAAO,CAAC,OAAwB,KAA6B;AAC3D,QAAA,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI,EAAE;AACzB,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;QAED,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAE5C,MAAM,cAAc,GAAG,IAAI,CAAC;QAE5B,OAAO,WAAW,GAAG,cAAc;AACjC,cAAE,IAAI;AACN,cAAE;AACE,gBAAA,OAAO,EAAE;AACP,oBAAA,cAAc,EAAE,cAAc;AAC9B,oBAAA,MAAM,EAAE,WAAW;AACpB,iBAAA;aACF,CAAC;AACR,KAAC,CAAC;AACJ,CAAC,CAAC;AAEK,MAAM,WAAW,GAAG,CAAC,IAAU,KAAiB;IACrD,OAAO,CAAC,OAAwB,KAA6B;AAC3D,QAAA,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI,EAAE;AACzB,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;QACD,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,cAAc,GAAG,IAAI,CAAC;QAE5B,OAAO,WAAW,GAAG,cAAc;AACjC,cAAE,IAAI;AACN,cAAE;AACE,gBAAA,OAAO,EAAE;AACP,oBAAA,cAAc,EAAE,cAAc;AAC9B,oBAAA,MAAM,EAAE,WAAW;AACpB,iBAAA;aACF,CAAC;AACR,KAAC,CAAC;AACJ,CAAC,CAAC;AAMI,MAAO,gBAAiB,SAAQ,gBAA6B,CAAA;AAAnE,IAAA,WAAA,GAAA;;QACS,IAAO,CAAA,OAAA,GAAG,KAAK,CAAC;QAChB,IAAU,CAAA,UAAA,GAAG,KAAK,CAAC;QAGV,IAAU,CAAA,UAAA,GAA0B,YAAY,CAAC;QACjD,IAAW,CAAA,WAAA,GAA2B,MAAM,CAAC;KA2D9D;AAzDC,IAAA,IAAoB,UAAU,GAAA;AAC5B,QAAA,MAAM,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC;QAC3B,IAAI,IAAI,CAAC,GAAG,EAAE;YACZ,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/B,SAAA;QACD,IAAI,IAAI,CAAC,GAAG,EAAE;YACZ,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/B,SAAA;AACD,QAAA,OAAO,CAAC,CAAC;KACV;AAEe,IAAA,QAAQ,CAAC,IAAS,EAAA;AAChC,QAAA,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE;AACvC,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,IAAI,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,IAAW,CAAC,EAAE;AAC/C,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AAEe,IAAA,MAAM,CAAC,IAA0B,EAAA;AAC/C,QAAA,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE;AACvC,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;YAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,CAAC,KAAK,IAAI,EAAE;AACd,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;YACD,IAAI,GAAG,CAAC,CAAC;AACV,SAAA;AACD,QAAA,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAA,CAAA,EAC7B,IAAI,CAAC,WAAW,EAAE,GAAG,CACvB,CAAI,CAAA,EAAA,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;KACzB;AAED;;;;AAIG;IACgB,eAAe,CAAC,OAAY,EAAE,EAAA;AAC/C,QAAA,IAAI,IAAI,CAAC,YAAY,YAAY,QAAQ,EAAE;AACzC,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AAChC,SAAA;QACD,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE;YACpD,MAAM,IAAI,KAAK,CACb,CAAA,MAAA,EAAS,IAAI,CAAC,IAAI,CAAwC,sCAAA,CAAA,CAC3D,CAAC;AACH,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE;AACnC,YAAA,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC;AAC5D,SAAA;QACD,OAAO,IAAI,CAAC,YAAY,CAAC;KAC1B;AACF,CAAA;AAEK,MAAO,oBACX,SAAQ,gBAAgB,CAAA;AAD1B,IAAA,WAAA,GAAA;;QAIS,IAAQ,CAAA,QAAA,GAAG,cAAc,CAAC;QACjB,IAAU,CAAA,UAAA,GAA0B,gBAAgB,CAAC;QACrD,IAAW,CAAA,WAAA,GAA2B,UAAU,CAAC;KAoBlE;AAlBiB,IAAA,MAAM,CAAC,IAAU,EAAA;AAC/B,QAAA,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE;AACvC,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;YAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,CAAC,KAAK,IAAI,EAAE;AACd,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;YACD,IAAI,GAAG,CAAC,CAAC;AACV,SAAA;QACD,IAAI;AACF,YAAA,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;AAC3B,SAAA;AAAC,QAAA,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACvB,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;KACF;AACF,CAAA;AAEY,MAAA,SAAS,GAAG,CAAC,OAAA,GAA8B,EAAE,KACxD,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE;AAE9C,MAAA,aAAa,GAAG,CAAC,OAAA,GAAkC,EAAE,KAChE,gBAAgB,CAAC,OAAO,EAAE,eAAe,EAAE,oBAAoB;;AC7H3D,MAAO,sBACX,SAAQ,gBAAwB,CAAA;AADlC,IAAA,WAAA,GAAA;;QAKkB,IAAU,CAAA,UAAA,GAA0B,UAAU,CAAC;QAC/C,IAAW,CAAA,WAAA,GAA2B,WAAW,CAAC;KACnE;AAAA,CAAA;AAEK,MAAO,6BACX,SAAQ,gBAAwB,CAAA;AAIjC,CAAA;AAEK,MAAO,mBACX,SAAQ,gBAAmB,CAAA;IAQX,QAAQ,CAAC,IAAS,EAAE,IAAsB,EAAA;QACxD,IAAI,IAAI,KAAK,IAAI,EAAE;AACjB,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;QACD,IAAI,IAAI,KAAK,SAAS,EAAE;AACtB,YAAA,OAAO,SAAS,CAAC;AAClB,SAAA;QACD,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAC/B,SAAA;QACD,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBACd,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC/B,gBAAA,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACjB,gBAAA,OAAO,CAAC,CAAC;AACV,aAAA;AAAM,iBAAA;gBACL,MAAM,GAAG,GAAU,EAAE,CAAC;AACtB,gBAAA,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE;oBACrB,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC/B,oBAAA,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACf,oBAAA,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACb,iBAAA;AACD,gBAAA,OAAO,GAAG,CAAC;AACZ,aAAA;AACF,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AACF,CAAA;AAMK,MAAO,sBACX,SAAQ,gBAA0B,CAAA;AADpC,IAAA,WAAA,GAAA;;QAKkB,IAAU,CAAA,UAAA,GAA0B,WAAW,CAAC;QAChD,IAAW,CAAA,WAAA,GAA2B,YAAY,CAAC;KACpE;AAAA,CAAA;AAED;AACa,MAAA,eAAe,GAAG,CAC7B,OAAiC,KAEjC,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE;AAE1D,MAAA,sBAAsB,GAAG,CACpC,OAAwC,KAExC,gBAAgB,CACd,OAAO,EACP,wBAAwB,EACxB,6BAA6B,EAC7B;AAES,MAAA,YAAY,GAAG,CAC1B,IAAA,GAAmC,EAAE,KAErC,gBAAgB,CAAC,IAAI,EAAE,cAAc,EAAE,mBAAmB,EAAE;AAEjD,MAAA,eAAe,GAAG,CAC7B,IAA8B,KAE9B,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,EAAE,sBAAsB;;AClH5D,MAAO,mBACX,SAAQ,gBAAgC,CAAA;AAD1C,IAAA,WAAA,GAAA;;QAIkB,IAAU,CAAA,UAAA,GAA0B,gBAAgB,CAAC;QACrD,IAAW,CAAA,WAAA,GAA2B,SAAS,CAAC;KA4BjE;AA1BiB,IAAA,QAAQ,CAAC,IAAS,EAAA;QAChC,IAAI,IAAI,KAAK,SAAS,EAAE;YACtB,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,OAAO,IAAI,CAAC,eAAe,EAAG,CAAC;AAChC,aAAA;AAAM,iBAAA;AACL,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;AACF,SAAA;QACD,IAAI,IAAI,KAAK,IAAI,EAAE;YACjB,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,OAAO,IAAI,CAAC,eAAe,EAAG,CAAC;AAChC,aAAA;AAAM,iBAAA;AACL,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;AACF,SAAA;AACD,QAAA,IAAI,OAAO,IAAI,KAAK,SAAS,EAAE;AAC7B,YAAA,OAAO,IAAe,CAAC;AACxB,SAAA;AACD,QAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC5B,YAAA,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;AACnD,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;AACD,YAAA,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACzD,SAAA;QACD,OAAO,CAAC,CAAC,IAAI,CAAC;KACf;AACF,CAAA;AAEY,MAAA,YAAY,GAAG,CAAC,OAAA,GAAiC,EAAE,KAC9D,gBAAgB,CACd,OAAO,EACP,cAAc,EACd,mBAAmB;;ACnBjB,MAAO,mBACX,SAAQ,gBAAwB,CAAA;AAMhC,IAAA,IAAoB,UAAU,GAAA;AAC5B,QAAA,MAAM,CAAC,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;AAChC,QAAA,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE;AAC1B,YAAA,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAClC,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE;AAC1B,YAAA,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAClC,SAAA;AACD,QAAA,OAAO,CAAC,CAAC;KACV;AACF,CAAA;AAEK,MAAO,iBACX,SAAQ,mBAAmB,CAAA;AACM,CAAA;AAE7B,MAAO,mBACX,SAAQ,mBAAmB,CAAA;AAD7B,IAAA,WAAA,GAAA;;QAKkB,IAAW,CAAA,WAAA,GAA2B,SAAS,CAAC;QAChD,IAAU,CAAA,UAAA,GAA0B,eAAe,CAAC;KACrE;AAAA,CAAA;AAED;AACa,MAAA,YAAY,GAAG,CAC1B,OAAA,GAAiC,EAAE,KAEnC,gBAAgB,CAAC,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE;AAEpD,MAAA,UAAU,GAAG,CACxB,OAAA,GAA+B,EAAE,KAEjC,gBAAgB,CAAC,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE;MAEhD,YAAY,GAAG,CAC1B,OAAiC,GAAA,EAAE,MAAM,EAAE,GAAG,EAAE,KAEhD,gBAAgB,CAAC,OAAO,EAAE,cAAc,EAAE,mBAAmB;;MC/ClD,oBAAoB,CAAA;AAK/B,IAAA,WAAA,CAAmB,QAA4B,EAAA;QAA5B,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAoB;QAHxC,IAAO,CAAA,OAAA,GAAc,EAAE,CAAC;AACvB,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,aAAa,EAAQ,CAAC;KAED;IAE5C,QAAQ,GAAA;QACb,IAAI,CAAC,QAAQ,CAAC,OAAO;AAClB,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AACrC,aAAA,SAAS,CAAC,CAAC,QAAQ,KAAI;AACtB,YAAA,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC;AAC1B,SAAC,CAAC,CAAC;KACN;IAEM,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;KACjC;;iHAlBU,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAG,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;qGAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,SAAA,EAdpB,CAAC,iBAAiB,EAAE,CAAC,ECblC,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,udAMM,EDMM,MAAA,EAAA,CAAA,0KAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EAEV,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA;QACV,OAAO,CAAC,YAAY,EAAE;YACpB,UAAU,CAAC,WAAW,EAAE;AACtB,gBAAA,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBACrB,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;aACpC,CAAC;YACF,UAAU,CAAC,WAAW,EAAE;AACtB,gBAAA,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;gBACvB,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;aACpC,CAAC;SACH,CAAC;AACH,KAAA,EAAA,CAAA,CAAA;2FAEU,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBApBhC,SAAS;+BACE,mBAAmB,EAAA,UAAA,EAGjB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EAAA,SAAA,EACZ,CAAC,iBAAiB,EAAE,CAAC,EACpB,UAAA,EAAA;wBACV,OAAO,CAAC,YAAY,EAAE;4BACpB,UAAU,CAAC,WAAW,EAAE;AACtB,gCAAA,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gCACrB,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;6BACpC,CAAC;4BACF,UAAU,CAAC,WAAW,EAAE;AACtB,gCAAA,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;gCACvB,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;6BACpC,CAAC;yBACH,CAAC;AACH,qBAAA,EAAA,QAAA,EAAA,udAAA,EAAA,MAAA,EAAA,CAAA,0KAAA,CAAA,EAAA,CAAA;sGAGe,MAAM,EAAA,CAAA;sBAArB,KAAK;;;MEvBK,YAAY,CAAA;;IAYvB,WAAsB,CAAA,KAAwB,EAAS,OAAA,GAA4B,EAAE,EAAA;QAA/D,IAAK,CAAA,KAAA,GAAL,KAAK,CAAmB;QAAS,IAAO,CAAA,OAAA,GAAP,OAAO,CAAuB;QAX9E,IAAQ,CAAA,QAAA,GAAQ,EAAE,CAAC;QAEnB,IAAU,CAAA,UAAA,GAAe,EAAE,CAAC;QAC5B,IAAQ,CAAA,QAAA,GAAe,EAAE,CAAC;QAC1B,IAAQ,CAAA,QAAA,GAAG,GAAG,CAAC;QACf,IAAI,CAAA,IAAA,GAAG,CAAC,CAAC;QAET,IAAQ,CAAA,QAAA,GAAG,IAAI,CAAC;AAChB,QAAA,IAAA,CAAA,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;KAK1B;AAED,IAAA,IAAW,OAAO,GAAA;AAChB,QAAA,OAAO,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;KACnD;AAED,IAAA,IAAW,IAAI,GAAA;AACb,QAAA,OAAO,EAAE,CAAC;YACR,GAAG,EAAE,EAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAC;YACpE,UAAU,EAAE,EAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAC;AACnD,SAAA,CAAC,CAAC;KACJ;AAED,IAAA,IAAW,IAAI,GAAA;AACb,QAAA,OAAO,aAAa,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;KAC/D;IAEM,MAAM,CAAC,SAAqB,EAAE,EAAA;AACnC,QAAA,OAAO,IAAI,CAAC;KACb;IAEM,IAAI,CAAC,GAAG,OAAiB,EAAA;AAC9B,QAAA,OAAO,IAAI,CAAC;KACb;IAEM,UAAU,CAAC,WAAmB,EAAE,EAAA;AACrC,QAAA,OAAO,IAAI,CAAC;KACb;AAEM,IAAA,OAAO,CAAC,IAAY,EAAA;AACzB,QAAA,OAAO,IAAI,CAAC;KACb;IAEM,cAAc,GAAA;AACnB,QAAA,OAAO,EAAE,CAAC;KACX;IAEM,GAAG,GAAA;AACR,QAAA,OAAO,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;KACnD;AACF;;MCrDY,cAAc,CAAA;AAKzB,IAAA,WAAA,CAAsB,KAAoC,EAAA;QAApC,IAAK,CAAA,KAAA,GAAL,KAAK,CAA+B;KACzD;AAEM,IAAA,KAAK,CAAC,EAAU,EAAE,MAAA,GAAiB,EAAE,EAAA;AAC1C,QAAA,OAAO,EAAE,CAAC,IAAI,CAAC,SAAc,CAAC,CAAC;KAChC;AAEM,IAAA,MAAM,CAAC,KAAe,EAAE,MAAmB,EAAE,MAAc,EAAE,MAAqB,EAAA;AACvF,QAAA,OAAO,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;KAC7B;IAEM,QAAQ,CAAC,UAA4B,EAAE,EAAA;AAC5C,QAAA,OAAO,IAAI,YAAY,CAAI,IAAI,EAAE,OAAO,CAAC,CAAC;KAC3C;AAEM,IAAA,IAAI,CAAC,KAAA,GAAqC,EAAE,EAAE,SAAiB,EAAE,EAAA;QACtE,OAAO,EAAE,CAAC,EAAC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAC,CAAC,CAAC;KACvC;AAED,IAAA,QAAQ,CAAC,IAAS,EAAE,IAAA,GAAgB,KAAK,EAAA;AACvC,QAAA,IAAI,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,SAAS,EAAE;YACjC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAW,CAAC,CAAC;AACtC,YAAA,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACjB,YAAA,OAAO,CAAC,CAAC;AACV,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;gBAC/B,MAAM,GAAG,GAAQ,EAAE,CAAC;AACpB,gBAAA,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;oBACpB,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAW,CAAC,CAAC;AACvC,oBAAA,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACf,oBAAA,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,iBAAA;AACD,gBAAA,OAAO,GAAG,CAAC;AACZ,aAAA;AACD,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;KACF;AACF;;ICnCW,aAKX;AALD,CAAA,UAAY,YAAY,EAAA;AACtB,IAAA,YAAA,CAAA,YAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK,CAAA;AACL,IAAA,YAAA,CAAA,YAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAS,CAAA;AACT,IAAA,YAAA,CAAA,YAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI,CAAA;AACJ,IAAA,YAAA,CAAA,YAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAS,CAAA;AACX,CAAC,EALW,YAAY,KAAZ,YAAY,GAKvB,EAAA,CAAA,CAAA;;ACPK,SAAU,aAAa,CAAC,KAAa,EAAA;IACzC,IAAI,KAAK,KAAK,CAAC,EAAE;AACf,QAAA,OAAO,QAAQ,CAAC;AACjB,KAAA;IAED,MAAM,CAAC,GAAG,IAAI,CAAC;AACf,IAAA,MAAM,KAAK,GAAa,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAChE,MAAM,CAAC,GAAW,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5D,OAAO,UAAU,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1E,CAAC;MAEY,mBAAmB,CAAA;AAS9B,IAAA,WAAA,CACE,cAAsB,MAAM,CAAC,iBAAiB,EAC9C,YAAA,GAAyB,CAAC,GAAG,CAAC,EAC9B,UAAA,GAAqB,MAAM,CAAC,iBAAiB,EAC7C,WAAsB,GAAA,MAAM,CAAC,iBAAiB,EAAA;AAE9C,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AAChB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,YAAY,EAAgB,CAAC;AACtD,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,OAAO,EAAE,CAAC;AACrC,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;AACf,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AACjC,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AAC7B,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;AAE/B,QAAA,IAAI,CAAC,eAAe;AACjB,aAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,CAAC;AACjE,aAAA,SAAS,CAAC,CAAC,YAAY,KAAK,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;KACvE;AAED,IAAA,WAAW,CAAC,aAAuB,EAAA;QACjC,IAAI,GAAG,GAAW,EAAE,CAAC;AAErB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC7C,YAAA,MAAM,iBAAiB,GAAG,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AAC7D,YAAA,MAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;AACnC,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,IAAI,CAAC;gBACzC,iBAAiB,IAAI,IAAI,CAAC,UAAU;AACpC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,IAAI,CAAC,EACtC;AACA,gBAAA,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AAC7B,aAAA;AAAM,iBAAA;gBACL,MAAM,YAAY,GAAe,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AACnE,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;AACnE,aAAA;AACF,SAAA;AACD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnC,YAAA,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YACpB,MAAM,UAAU,GAAe,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAC5D,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;AACpE,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC7B,SAAA;QACD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;KACtD;AAED,IAAA,eAAe,CAAC,KAAgC,EAAA;AAC9C,QAAA,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC,KAAkB,KAAI;YAC5C,QAAQ,KAAK,CAAC,IAAI;AAChB,gBAAA,KAAK,YAAY;AACf,oBAAA,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAC1C,CAAC,IAAI,KAAK,IAAI,KAAK,KAAK,CAAC,IAAI,CAC9B,CAAC;oBACF,IAAI,eAAe,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE;AACxC,wBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACxB,4BAAA,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC;AACjC,4BAAA,KAAK,EAAE,KAAK;AACb,yBAAA,CAAC,CAAC;AACJ,qBAAA;oBACD,MAAM;AACR,gBAAA,KAAK,WAAW;oBACd,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAC7B,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,YAAY,CAAC,KAAK,CACtD,CAAC;oBACF,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KACjB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CACxD,CAAC;oBACF,MAAM;AACR,gBAAA,KAAK,QAAQ;AACX,oBAAA,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,IAAI,IAAI,CAAC;oBAC5B,IAAI,CAAC,EAAE,EAAE;wBACP,OAAO;AACR,qBAAA;AACD,oBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AACtD,oBAAA,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;wBACnB,IAAI,GAAG,CAAC,GAAG,EAAE;AACX,4BAAA,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;AACtB,4BAAA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AACjE,4BAAA,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE;AACpB,gCAAA,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC;AAC/D,gCAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AACtB,oCAAA,IAAI,EAAE,WAAW;AACjB,oCAAA,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;AAC5B,iCAAA,CAAC,CAAC;AACJ,6BAAA;AACF,yBAAA;AACH,qBAAC,CAAC,CAAC;oBACH,MAAM;AACR,gBAAA,KAAK,WAAW;oBACd,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;wBACxB,IAAI,GAAG,CAAC,GAAG,EAAE;AACX,4BAAA,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;AACvB,yBAAA;wBAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAC1B,CAAC,UAAU,KAAK,UAAU,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,CACzC,CAAC;AACF,wBAAA,IAAI,IAAI,EAAE;4BACR,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC;AAC9C,4BAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5D,yBAAA;AACH,qBAAC,CAAC,CAAC;oBACH,MAAM;AACR,gBAAA,KAAK,QAAQ;AACX,oBAAA,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE;wBACb,OAAO;AACR,qBAAA;oBAED,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC;AAC/D,oBAAA,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;wBACZ,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;wBAC3B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACxB,wBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAC1D,qBAAA;oBACD,MAAM;AACR,gBAAA,KAAK,WAAW;AACd,oBAAA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACrB,wBAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;wBAChB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;AACjD,qBAAA;oBACD,MAAM;AACT,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,WAAW,CAAC,MAGX,EAAA;AACC,QAAA,OAAO,IAAI,UAAU,CAAC,CAAC,QAAQ,KAAI;AACjC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC;AACnD,iBAAA,IAAI,CACH,QAAQ,CAAC,MAAK;AACZ,gBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;oBACpB,QAAQ,CAAC,QAAQ,EAAE,CAAC;AACrB,iBAAA;AACH,aAAC,CAAC,CACH;AACA,iBAAA,SAAS,CAAC;AACT,gBAAA,IAAI,EAAE,CAAC,MAAM,KAAI;AACf,oBAAA,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;iBACvB;AACD,gBAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,oBAAA,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBACpB,QAAQ,CAAC,QAAQ,EAAE,CAAC;iBACrB;gBACD,QAAQ,EAAE,MAAK;oBACb,QAAQ,CAAC,QAAQ,EAAE,CAAC;iBACrB;AACF,aAAA,CAAC,CAAC;AAEL,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AACnD,SAAC,CAAC,CAAC;KACJ;IAED,UAAU,CAAC,IAAgB,EAAE,KAAkB,EAAA;AAC7C,QAAA,OAAO,IAAI,UAAU,CAAC,CAAC,QAAQ,KAAI;AACjC,YAAA,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,EAAE,CAAC;AAC5B,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC;AACtC,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;AAC9B,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;AAEpC,YAAA,MAAM,GAAG,GAAG,IAAI,cAAc,EAAE,CAAC;YACjC,MAAM,IAAI,GAAW,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;AAC1C,YAAA,IAAI,iBAAiB,GACnB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC;YAC/D,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,IAAI,GAAG,GAAkB,IAAI,CAAC;YAE9B,GAAG,CAAC,MAAM,CAAC,gBAAgB,CACzB,UAAU,EACV,CAAC,CAAgB,KAAI;gBACnB,IAAI,CAAC,CAAC,gBAAgB,EAAE;AACtB,oBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;oBAC1D,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;AACzC,oBAAA,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC;oBAC7C,iBAAiB;AACf,wBAAA,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS;AACnD,4BAAA,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;AACvB,oBAAA,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC;oBAE9C,IAAI,CAAC,QAAQ,GAAG;wBACd,MAAM,EAAE,YAAY,CAAC,SAAS;AAC9B,wBAAA,IAAI,EAAE;AACJ,4BAAA,UAAU,EAAE,UAAU;AACtB,4BAAA,KAAK,EAAE,KAAK;AACZ,4BAAA,UAAU,EAAE,CAAG,EAAA,aAAa,CAAC,KAAK,CAAC,CAAI,EAAA,CAAA;AACvC,4BAAA,SAAS,EAAE,iBAAiB;AAC5B,4BAAA,OAAO,EAAE,IAAI;AACb,4BAAA,GAAG,EAAE,GAAG;AACR,4BAAA,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AACnC,yBAAA;qBACF,CAAC;AAEF,oBAAA,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAClD,iBAAA;aACF,EACD,KAAK,CACN,CAAC;YAEF,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAQ,KAAI;AAChD,gBAAA,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAClB,QAAQ,CAAC,QAAQ,EAAE,CAAC;AACtB,aAAC,CAAC,CAAC;AAEH,YAAA,GAAG,CAAC,kBAAkB,GAAG,MAAK;AAC5B,gBAAA,IAAI,GAAG,CAAC,UAAU,KAAK,cAAc,CAAC,IAAI,EAAE;oBAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAC7B,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,iBAAiB,CAAC,IAAI,IAAI,CAChE,CAAC;oBACF,IAAI,CAAC,QAAQ,GAAG;wBACd,MAAM,EAAE,YAAY,CAAC,IAAI;AACzB,wBAAA,IAAI,EAAE;AACJ,4BAAA,UAAU,EAAE,GAAG;AACf,4BAAA,KAAK,EAAE,YAAY;AACnB,4BAAA,UAAU,EAAE,CAAG,EAAA,aAAa,CAAC,YAAY,CAAC,CAAI,EAAA,CAAA;AAC9C,4BAAA,SAAS,EAAE,iBAAiB;AAC5B,4BAAA,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;AAC7B,4BAAA,GAAG,EAAE,GAAG;4BACR,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,CAAC;AACxC,yBAAA;qBACF,CAAC;AAEF,oBAAA,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC,MAAM,CAAC;oBACjC,IAAI;wBACF,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC1C,qBAAA;AAAC,oBAAA,OAAO,CAAC,EAAE;AACV,wBAAA,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;AAC9B,qBAAA;AAED,oBAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,oBAAoB,CAC9C,GAAG,CAAC,qBAAqB,EAAE,CAC5B,CAAC;AAEF,oBAAA,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;oBAE5C,QAAQ,CAAC,QAAQ,EAAE,CAAC;AACrB,iBAAA;AACH,aAAC,CAAC;YAEF,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YAC5B,GAAG,CAAC,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC;YAE9C,IAAI;AACF,gBAAA,MAAM,UAAU,GAAa,IAAI,CAAC,UAAU,CAAC;AAC7C,gBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CACtC,CAAC,OAAO,KAAK,OAAO,CAAC,UAAU,KAAK,UAAU,CAC/C,CAAC;AAEF,gBAAA,IACE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,YAAY,CAAC,SAAS,EAClE;oBACA,QAAQ,CAAC,QAAQ,EAAE,CAAC;AACrB,iBAAA;gBAED,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAC/B,GAAG,CAAC,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CACxC,CAAC;AAEF,gBAAA,IAAI,UAA+B,CAAC;AAEpC,gBAAA,IAAI,KAAK,CAAC,yBAAyB,KAAK,KAAK,EAAE;oBAC7C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACrE,oBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CACd,KAAK,CAAC,SAAS,IAAI,MAAM,EACzB,UAAU,EACV,UAAU,CAAC,IAAI,CAChB,CAAC;AACF,oBAAA,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC;AACxB,iBAAA;AAAM,qBAAA;oBACL,UAAU,GAAG,UAAU,CAAC;AACzB,iBAAA;AAED,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACvD,gBAAA,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACtB,aAAA;AAAC,YAAA,OAAO,CAAC,EAAE;gBACV,QAAQ,CAAC,QAAQ,EAAE,CAAC;AACrB,aAAA;AAED,YAAA,OAAO,MAAK;gBACV,GAAG,CAAC,KAAK,EAAE,CAAC;AACd,aAAC,CAAC;AACJ,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,cAAc,CAAC,GAAW,EAAA;AACxB,QAAA,OAAO,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;KACjE;IAED,UAAU,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;KAChD;AAED,IAAA,eAAe,CAAC,YAAsB,EAAA;QACpC,IAAI,OAAO,YAAY,KAAK,WAAW,IAAI,YAAY,YAAY,KAAK,EAAE;AACxE,YAAA,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,IAAY,KAAK,IAAI,KAAK,GAAG,CAAC,KAAK,SAAS,EAAE;AACnE,gBAAA,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC;AAC3B,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AAClC,aAAA;YACD,OAAO;AACR,SAAA;AACD,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC;KAC3B;IAED,sBAAsB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAY,KAAK,IAAI,KAAK,GAAG,CAAC,KAAK,SAAS,CAAC;KAC7E;AAED,IAAA,oBAAoB,CAAC,QAAgB,EAAA;AACnC,QAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE,EAAE;AACjC,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,QACE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAY,KAAK,IAAI,KAAK,QAAQ,CAAC,KAAK,SAAS,EACzE;KACH;AAED,IAAA,iBAAiB,CAAC,QAAgB,EAAA;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,OAAO,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC;KACrC;IAED,cAAc,CAAC,IAAU,EAAE,KAAa,EAAA;QACtC,OAAO;AACL,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE;YACrB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,QAAQ,EAAE;AACpB,YAAA,QAAQ,EAAE;gBACR,MAAM,EAAE,YAAY,CAAC,KAAK;AAC1B,gBAAA,IAAI,EAAE;AACJ,oBAAA,UAAU,EAAE,CAAC;AACb,oBAAA,KAAK,EAAE,CAAC;AACR,oBAAA,UAAU,EAAE,CAAG,EAAA,aAAa,CAAC,CAAC,CAAC,CAAI,EAAA,CAAA;AACnC,oBAAA,SAAS,EAAE,IAAI;AACf,oBAAA,OAAO,EAAE,IAAI;AACb,oBAAA,GAAG,EAAE,IAAI;AACT,oBAAA,QAAQ,EAAE,IAAI;AACf,iBAAA;AACF,aAAA;AACD,YAAA,gBAAgB,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;AAC7C,YAAA,GAAG,EAAE,SAAS;AACd,YAAA,UAAU,EAAE,IAAI;SACjB,CAAC;KACH;AAEO,IAAA,oBAAoB,CAAC,WAAmB,EAAA;QAC9C,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;AAED,QAAA,OAAO,WAAW;aACf,KAAK,CAAC,IAAI,CAAC;AACX,aAAA,GAAG,CAAC,CAAC,CAAS,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;aACrC,MAAM,CAAC,CAAC,CAAW,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7B,aAAA,MAAM,CAAC,CAAC,GAA8B,EAAE,CAAW,KAAI;YACtD,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACjB,YAAA,OAAO,GAAG,CAAC;SACZ,EAAE,EAAE,CAAC,CAAC;KACV;AACF;;MCpYY,mBAAmB,CAAA;AAU9B,IAAA,WAAA,CAAmB,UAAsB,EAAA;QAAtB,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;AAmCzC,QAAA,IAAA,CAAA,SAAS,GAAG,CAAC,CAAQ,KAAI;YACvB,CAAC,CAAC,eAAe,EAAE,CAAC;YACpB,CAAC,CAAC,cAAc,EAAE,CAAC;AACrB,SAAC,CAAC;AArCA,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,EAAgB,CAAC;KACtD;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;AACf,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,MAAM,CAAC,iBAAiB,CAAC;AACzF,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,mBAAmB,IAAI,CAAC,GAAG,CAAC,CAAC;AACtF,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,MAAM,CAAC,iBAAiB,CAAC;AACvF,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,MAAM,CAAC,iBAAiB,CAAC;AACzF,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,mBAAmB,CAAC,WAAW,EAAE,mBAAmB,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QAEjG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;AAExC,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CACZ,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,KAAmB,KAAI;AAC1D,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAC/B,CAAC,CACH,CAAC;AAEF,QAAA,IAAI,IAAI,CAAC,WAAW,YAAY,YAAY,EAAE;AAC5C,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;AAC/D,SAAA;AAED,QAAA,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AACxD,QAAA,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AAC7D,QAAA,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;KAC7D;IAED,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;AAC7C,SAAA;KACF;AAQM,IAAA,MAAM,CAAC,CAAM,EAAA;QAClB,CAAC,CAAC,eAAe,EAAE,CAAC;QACpB,CAAC,CAAC,cAAc,EAAE,CAAC;AAEnB,QAAA,MAAM,KAAK,GAAiB,EAAC,IAAI,EAAE,MAAM,EAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;KAC/C;AAGM,IAAA,UAAU,CAAC,CAAQ,EAAA;QACxB,IAAI,CAAC,CAAC,EAAE;YACN,OAAO;AACR,SAAA;AAED,QAAA,MAAM,KAAK,GAAiB,EAAC,IAAI,EAAE,UAAU,EAAC,CAAC;AAC/C,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC/B;AAGM,IAAA,WAAW,CAAC,CAAQ,EAAA;QACzB,IAAI,CAAC,CAAC,EAAE;YACN,OAAO;AACR,SAAA;AAED,QAAA,MAAM,KAAK,GAAiB,EAAC,IAAI,EAAE,SAAS,EAAC,CAAC;AAC9C,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC/B;;gHA9EU,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;oGAAnB,mBAAmB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC3B,iBAAA,CAAA;iGAEU,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACI,YAAY,EAAA,CAAA;sBAArB,MAAM;gBAgDA,MAAM,EAAA,CAAA;sBADZ,YAAY;uBAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAA;gBAWzB,UAAU,EAAA,CAAA;sBADhB,YAAY;uBAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAA;gBAW7B,WAAW,EAAA,CAAA;sBADjB,YAAY;uBAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAA;;;MCtE1B,qBAAqB,CAAA;AAUhC,IAAA,WAAA,CAAmB,UAAsB,EAAA;QAAtB,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;QAiCzC,IAAY,CAAA,YAAA,GAAG,MAAK;AAClB,YAAA,IAAI,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE;gBACjB,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AACxC,aAAA;AACH,SAAC,CAAC;AApCA,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,EAAgB,CAAC;KACtD;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;AACf,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,MAAM,CAAC,iBAAiB,CAAC;AACzF,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,mBAAmB,IAAI,CAAC,GAAG,CAAC,CAAC;AACtF,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,MAAM,CAAC,iBAAiB,CAAC;AACvF,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,MAAM,CAAC,iBAAiB,CAAC;AACzF,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,mBAAmB,CAAC,WAAW,EAAE,mBAAmB,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QAEjG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;AACxC,QAAA,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;AAE7D,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CACZ,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,KAAmB,KAAI;AAC1D,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAC/B,CAAC,CACH,CAAC;AAEF,QAAA,IAAI,IAAI,CAAC,WAAW,YAAY,YAAY,EAAE;AAC5C,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;AAC/D,SAAA;KACF;IAED,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,EAAE,EAAE;AACX,YAAA,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;AAChE,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;AAC7C,SAAA;KACF;;kHAzCU,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;sGAArB,qBAAqB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC7B,iBAAA,CAAA;iGAEU,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACI,YAAY,EAAA,CAAA;sBAArB,MAAM;;;MCHI,iBAAiB,CAAA;;8GAAjB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAjB,iBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,iBAHb,mBAAmB,EAAE,qBAAqB,CAC/C,EAAA,OAAA,EAAA,CAAA,mBAAmB,EAAE,qBAAqB,CAAA,EAAA,CAAA,CAAA;+GAEzC,iBAAiB,EAAA,CAAA,CAAA;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAJ7B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,CAAC,mBAAmB,EAAE,qBAAqB,CAAC;AAC1D,oBAAA,OAAO,EAAE,CAAC,mBAAmB,EAAE,qBAAqB,CAAC;AACtD,iBAAA,CAAA;;;MCYY,GAAG,CAAA;AAKd,IAAA,WAAA,CAAY,QAA2B,EAAA;QAFtB,IAAK,CAAA,KAAA,GAAuB,IAAI,CAAC;AAGhD,QAAA,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;AAC9B,YAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAc,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AACrE,YAAA,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;AACjC,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AACnB,SAAA;KACF;AAED,IAAA,IAAW,IAAI,GAAA;QACb,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;IAEM,MAAM,GAAA;AACX,QAAA,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;KACvD;AACF;;ACrBD;;AAEG;MACU,gBAAgB,GAAG,IAAI,cAAc,CAChD,kBAAkB,EAClB;MACW,sBAAsB,GAAG,IAAI,cAAc,CACtD,wBAAwB,EACxB;AAEW,IAAA,eAAe,GAA5B,MAAa,eAAe,CAAA;AAS1B,IAAA,WAAA,CACyC,WAAwB,EAC7B,OAAmB,EAC7C,KAAiB,EAAA;QAFc,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;QAC7B,IAAO,CAAA,OAAA,GAAP,OAAO,CAAY;QAC7C,IAAK,CAAA,KAAA,GAAL,KAAK,CAAY;AANnB,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,aAAa,CAAc,CAAC,CAAC,CAAC;QAQjD,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;AAED,IAAA,IAAW,WAAW,GAAA;AACpB,QAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;KAC5B;AAED,IAAA,IAAW,WAAW,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;KACvD;AAED,IAAA,IAAW,YAAY,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;KACzD;AAED,IAAA,IAAW,WAAW,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;KACxD;AAED,IAAA,IAAW,YAAY,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;KACnC;AAED,IAAA,IAAW,UAAU,GAAA;AACnB,QAAA,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;KAC1C;AAED,IAAA,IAAW,QAAQ,GAAA;AACjB,QAAA,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;KACnC;IAEM,MAAM,GAAA;AACX,QAAA,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAChC,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;AACvC,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACxB;IAEM,SAAS,GAAA;QACd,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC/C,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;AACtB,SAAA;AACD,QAAA,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC9B;IAEM,KAAK,CAAC,QAAgB,EAAE,QAAgB,EAAA;QAC7C,MAAM,OAAO,GAAiC,EAAE,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,QAAQ,CAAC;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAmB,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,CACnE,GAAG,CAAC,CAAC,GAAG,KAAI;YACV,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,CAAC,QAAQ,EAAE,CAAC;AAClB,SAAC,CAAC,EACF,SAAS,CAAC,MAAK;AACb,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE;AAChD,gBAAA,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAK,CAAC,OAAO,CAAC,CAAC;AAC1D,aAAA;AAAM,iBAAA;AACL,gBAAA,OAAO,UAAU,CAAC,MAAM,eAAe,CAAC,CAAC;AAC1C,aAAA;AACH,SAAC,CAAC,EACF,GAAG,CAAC,CAAC,IAAU,KAAI;AACjB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,IAAI,CAAC,QAAQ,EAAE,CAAC;AAClB,SAAC,CAAC,EACF,GAAG,CAAC,MAAM,IAAI,CAAC,EACf,UAAU,CAAC,CAAC,KAAU,KAAI;YACxB,IAAI,CAAC,MAAM,EAAE,CAAC;AACd,YAAA,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;SAClB,CAAC,CACH,CAAC;KACH;IAEM,QAAQ,GAAA;QACb,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAChC,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxB,SAAA;AAAM,aAAA;YACL,YAAY,CAAC,OAAO,CAClB,MAAM,EACN,IAAI,CAAC,SAAS,CAAC;AACb,gBAAA,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACzB,gBAAA,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AAC5B,aAAA,CAAC,CACH,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9B,SAAA;KACF;IAEM,OAAO,GAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;YACxB,IAAI,CAAC,MAAM,EAAE,CAAC;AACd,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;AACjB,SAAA;QACD,OAAO,IAAI,CAAC,KAAK;AACd,aAAA,IAAI,CAA0B,IAAI,CAAC,UAAU,EAAE;AAC9C,YAAA,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAiB;SACvC,CAAC;AACD,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,GAAG,KAAI;AACV,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,CAAC;gBACpB,MAAM,EAAE,GAAG,CAAC,MAAM;AAClB,gBAAA,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAQ;AAC9B,aAAA,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ,EAAE,CAAC;SACjB,CAAC,CACH,CAAC;KACL;EACF;AA9HY,eAAe,GAAA,UAAA,CAAA;AAUvB,IAAA,OAAA,CAAA,CAAA,EAAA,MAAM,CAAC,sBAAsB,CAAC,CAAA;AAC9B,IAAA,OAAA,CAAA,CAAA,EAAA,MAAM,CAAC,gBAAgB,CAAC,CAAA;AAXhB,CAAA,EAAA,eAAe,CA8H3B;;MChJY,iBAAiB,GAAG,IAAI,cAAc,CAEjD,mBAAmB,EAAE;MAKV,eAAe,CAAA;AAK1B,IAAA,WAAA,CACqC,KAAqC,EAAA;QAArC,IAAK,CAAA,KAAA,GAAL,KAAK,CAAgC;QALlE,IAAa,CAAA,aAAA,GAAG,KAAK,CAAC;AACtB,QAAA,IAAA,CAAA,oBAAoB,GAC1B,IAAI,eAAe,CAAiC,IAAI,CAAC,CAAC;KAIxD;IAEJ,SAAS,CAAC,GAAqB,EAAE,IAAiB,EAAA;AAChD,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;AAC1B,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACzB,SAAA;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;AAC3B,YAAA,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,WAAqB,CAAC,CAAC;AAC7D,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAC1B,UAAU,CAAC,CAAC,KAAK,KAAI;YACnB,IAAI,KAAK,YAAY,iBAAiB,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE;gBAC9D,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACxC,aAAA;AAAM,iBAAA;AACL,gBAAA,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;AAC1B,aAAA;SACF,CAAC,CACH,CAAC;KACH;IAEO,eAAe,CAAC,OAAyB,EAAE,IAAiB,EAAA;AAClE,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACvB,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC1B,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAErC,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,CAC9B,SAAS,CAAC,CAAC,KAAK,KAAI;gBAClB,IAAI,KAAK,KAAK,IAAI,EAAE;AAClB,oBAAA,OAAO,UAAU,CACf,MACE,IAAI,iBAAiB,CAAC;AACpB,wBAAA,KAAK,EAAE,0BAA0B;AACjC,wBAAA,MAAM,EAAE,GAAG;AACX,wBAAA,UAAU,EAAE,SAAS;wBACrB,GAAG,EAAE,OAAO,CAAC,GAAG;AACjB,qBAAA,CAAC,CACL,CAAC;AACH,iBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;AAC3B,oBAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACtC,oBAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AAC3D,iBAAA;aACF,CAAC,CACH,CAAC;AACH,SAAA;AAAM,aAAA;YACL,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CACnC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,IAAI,CAAC,EAChC,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,CAAC,KAAK,KACd,IAAI,CAAC,MAAM,CACT,IAAI,CAAC,SAAS,CAAC,OAAO,EAAG,KAAiC,CAAC,MAAM,CAAC,CACnE,CACF,CACF,CAAC;AACH,SAAA;KACF;IAEO,SAAS,CAAC,OAAyB,EAAE,KAAa,EAAA;QACxD,OAAO,OAAO,CAAC,KAAK,CAAC;AACnB,YAAA,UAAU,EAAE;gBACV,aAAa,EAAE,CAAU,OAAA,EAAA,KAAK,CAAE,CAAA;AACjC,aAAA;AACF,SAAA,CAAC,CAAC;KACJ;;AAtEU,eAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,kBAMhB,iBAAiB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AANhB,eAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cAFd,MAAM,EAAA,CAAA,CAAA;2FAEP,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;0BAOI,MAAM;2BAAC,iBAAiB,CAAA;;;ACkBvB,SAAU,KAAK,CAA4B,KAAQ,EAAA;AACvD,IAAA,OAAO,KAAK,CAAC;AACf,CAAC;MAgBY,IAAI,CAAA;AAMf,IAAA,WAAA,CAAY,MAAuB,EAAE,OAAY,EAAE,MAAe,EAAA;QAL1D,IAAM,CAAA,MAAA,GAA6B,EAAE,CAAC;QACtC,IAAO,CAAA,OAAA,GAAa,EAAE,CAAC;QAK7B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;AACnC,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;AAC3B,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;AACzB,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACvB,SAAA;KACF;AAID,IAAA,IAAW,IAAI,GAAA;QACb,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;AAEM,IAAA,OAAO,CAAC,GAAQ,EAAA;AACrB,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;AAC5B,YAAA,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE;gBACjB,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACzB,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AACvB,aAAA;AACF,SAAA;KACF;AAEM,IAAA,KAAK,CAAC,MAA8B,EAAA;QACzC,MAAM,KAAK,GAAU,EAAE,CAAC;AACxB,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;AAC5B,YAAA,IAAI,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;gBAC3D,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACvB,aAAA;AAAM,iBAAA,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;gBAClE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5B,aAAA;AAAM,iBAAA;AACL,gBAAA,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC;AAC5C,gBAAA,OAAO,EAAE,CAAC;AACX,aAAA;AACF,SAAA;;AAED,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC;KAC9B;AAEM,IAAA,MAAM,QAAQ,CACnB,MAA+B,EAC/B,MAAe,EAAA;AAEf,QAAA,IAAI,MAAM,EAAE;YACV,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5C,SAAA;QACD,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AAClD,SAAA;AACD,QAAA,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;AACpD,QAAA,OAAO,KAAK,CAAC;KACd;AACF;;AC7FD;;;;;;;;AAQG;MAQU,mBAAmB,CAAA;IAY9B,WAAmB,CAAA,MAAc,EAAS,KAAqB,EAAA;QAA5C,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QAAS,IAAK,CAAA,KAAA,GAAL,KAAK,CAAgB;AAP/D;;AAEG;QACa,IAAK,CAAA,KAAA,GAAG,IAAI,CAAC;QACtB,IAAI,CAAA,IAAA,GAAoB,EAAE,CAAC;AAC1B,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAAQ,CAAC;KAEsB;IAEnE,QAAQ,GAAA;QACN,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,CAAC,MAAM;AACf,aAAA,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,EAC9B,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,YAAY,aAAa,CAAC,CAClD;aACA,SAAS,CAAC,MAAK;YACd,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAC7C,SAAC,CAAC,CAAC;KACN;IAEM,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;KAChC;AAEM,IAAA,WAAW,CAAC,OAAsB,EAAA;QACvC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;KAC5C;AAEM,IAAA,YAAY,CAAC,OAAoB,EAAA;QACtC,MAAM,IAAI,GAAoB,EAAE,CAAC;QACjC,MAAM,GAAG,GAAa,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,GAAkC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;QAE7D,OAAO,CAAC,IAAI,IAAI,EAAE;AAChB,YAAA,IAAI,KAAK,GAA6B;AACpC,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,KAAK,EAAE,MAAM,MAAM;AACnB,gBAAA,IAAI,EAAE,EAAE;AACR,gBAAA,IAAI,EAAE,IAAI;aACX,CAAC;AACF,YAAA,MAAM,IAAI,GAAG,CAAC,CAAC,IAAuB,CAAC;;YAGvC,IAAI,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE;AACvC,gBAAA,KAAK,GAAG,CAAC,CAAC,WAAW,CAAC,IAAuB,CAAC;AAC/C,aAAA;YAED,IAAI,KAAK,CAAC,IAAI,EAAE;;AAEd,gBAAA,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE;AACrB,oBAAA,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACjB,oBAAA,IAAI,GAAG,GAAkB;wBACvB,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;wBAC/B,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACpC,wBAAA,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;AACnB,wBAAA,OAAO,EAAE,KAAK;qBACf,CAAC;AACF,oBAAA,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;wBAC9C,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC;AAC3B,qBAAA;AACD,oBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;AACf,wBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChB,qBAAA;AACF,iBAAA;AACF,aAAA;AAAM,iBAAA;AACL,gBAAA,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1B,gBAAA,IAAI,GAAG,GAAkB;oBACvB,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;oBAC/B,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;AACjC,oBAAA,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;AACnB,oBAAA,OAAO,EAAE,KAAK;iBACf,CAAC;AACF,gBAAA,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;oBAC9C,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC;AAC3B,iBAAA;AACD,gBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;AACf,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChB,iBAAA;AACF,aAAA;AAED,YAAA,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC;AAClB,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;YACnB,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;AACtC,SAAA;AACD,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;AAEM,IAAA,QAAQ,CACb,KAA+B,EAC/B,IAAqB,EACrB,CAAc,EAAA;AAEd,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE;AAClB,YAAA,IAAI,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,UAAU,EAAE;AACxC,gBAAA,MAAM,GAAG,GAAe,KAAK,CAAC,OAAO,CAAC,CAAC;gBACvC,IAAI;AACF,oBAAA,IAAI,CAAC,EAAE;wBACL,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAC1B,qBAAA;AAAM,yBAAA;AACL,wBAAA,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;AAClB,qBAAA;AACF,iBAAA;AAAC,gBAAA,OAAO,CAAC,EAAE;AACV,oBAAA,OAAO,CAAC,IAAI,CAAC,uCAAuC,EAAE,CAAC,CAAC,CAAC;AACzD,oBAAA,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE;AACtB,wBAAA,OAAO,IAAI,CAAC;AACb,qBAAA;AACF,iBAAA;AACF,aAAA;AAAM,iBAAA;AACL,gBAAA,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC;AACvB,aAAA;AACF,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;IAEM,OAAO,CACZ,KAA+B,EAC/B,IAAqB,EAAA;QAErB,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,OAAO,IAAI,CAAC,IAAI,CAAC;AAClB,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;KACX;;gHAlIU,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAD,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,mBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EC7ChC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,gyBAaM,ED8BM,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,mWAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FAEzB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAP/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,cAGf,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,YAAY,CAAC,EAAA,QAAA,EAAA,gyBAAA,EAAA,CAAA;8HAMrB,IAAI,EAAA,CAAA;sBAAnB,KAAK;gBAIU,KAAK,EAAA,CAAA;sBAApB,KAAK;;;ME7CK,SAAS,CAAA;AAGpB,IAAA,WAAA,CACU,OAAyB,EAC1B,IAAY,EACZ,QAAgB,EACf,IAAa,EAAA;QAHb,IAAO,CAAA,OAAA,GAAP,OAAO,CAAkB;QAC1B,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAQ;QACZ,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAQ;QACf,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAS;AAErB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAE9B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,KAAK,KAAK,IAAI,EAAE;AAClB,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AACvB,SAAA;KACF;AAID,IAAA,IAAW,OAAO,GAAA;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;IAED,IAAW,OAAO,CAAC,KAAa,EAAA;AAC9B,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AACtB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;AAC7B,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;KACrB;AAED,IAAA,IAAW,KAAK,GAAA;AACd,QAAA,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;KAClD;AACF,CAAA;MAKY,gBAAgB,CAAA;AAG3B,IAAA,WAAA,GAAA;QAFQ,IAAM,CAAA,MAAA,GAAmC,EAAE,CAAC;KAEpC;IAER,OAAO,cAAc,CAC3B,MAAwC,EAAA;QAExC,IAAI,GAAG,GAAG,EAAE,CAAC;AACb,QAAA,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;AACtB,YAAA,GAAG,IAAI,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,CAAC;AAChB,SAAA;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;AAEM,IAAA,MAAM,CACX,MAAwC,EACxC,QAAgB,EAChB,OAAgB,IAAI,EAAA;QAEpB,MAAM,KAAK,GAAG,gBAAgB,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE;AACpC,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AACjE,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KAC3B;IAEM,IAAI,GAAA;QACT,MAAM,MAAM,GAAuC,EAAE,CAAC;QACtD,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AACzC,YAAA,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC;AACpC,SAAA;AACD,QAAA,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;KACxD;AAEM,IAAA,IAAI,CAAC,IAAY,EAAA;QACtB,MAAM,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1C,QAAA,IAAI,EAAE,EAAE;YACN,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAC3B,YAAA,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE;AACvC,gBAAA,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;AACxB,aAAA;AACF,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;;6GA5CU,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAhB,gBAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFf,MAAM,EAAA,CAAA,CAAA;2FAEP,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;AC5CY,MAAA,OAAO,GAAG,CAAC,GAAW,KAAY;IAC7C,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AACpC,IAAA,GAAG,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;;IAGxB,MAAM,IAAI,GAAG,8BAA8B,CAAC;IAC5C,MAAM,EAAE,GAAG,8BAA8B,CAAC;AAC1C,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QAC3C,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAClE,KAAA;AAED,IAAA,GAAG,GAAG,GAAG;AACN,SAAA,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;AAC3B,SAAA,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;AACpB,SAAA,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAEvB,IAAA,OAAO,GAAG,CAAC;AACb;;ACjBA;;AAEG;;ACFH;;AAEG;;;;"}
1
+ {"version":3,"file":"solidev-data.mjs","sources":["../../../projects/data/src/lib/data/data-parameters.ts","../../../projects/data/src/lib/data/fields/base.ts","../../../projects/data/src/lib/data/data-model.ts","../../../projects/data/src/lib/data/data-query.ts","../../../projects/data/src/lib/data/data-collection.ts","../../../projects/data/src/lib/data/data-backend.ts","../../../projects/data/src/lib/modellist/model-list-fields/model-list-fields.ts","../../../projects/data/src/lib/modellist/model-list-paginator/model-list-paginator.ts","../../../projects/data/src/lib/modellist/model-list-sorter/model-list-sorter.ts","../../../projects/data/src/lib/modellist/model-list-filters/model-list-filters.ts","../../../projects/data/src/lib/modellist/model-list.service.ts","../../../projects/data/src/lib/modellist/model-list-fields/model-list-fields-selector/model-list-fields-selector.component.ts","../../../projects/data/src/lib/modellist/model-list-fields/model-list-fields-selector/model-list-fields-selector.component.html","../../../projects/data/src/lib/modellist/model-list-sorter/model-list-sorter/model-list-sorter.component.ts","../../../projects/data/src/lib/modellist/model-list-sorter/model-list-sorter/model-list-sorter.component.html","../../../projects/data/src/lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component.ts","../../../projects/data/src/lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component.html","../../../projects/data/src/lib/modellist/model-list-filters/model-list-filters-select/model-list-filters-select.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/model-list-filters-select/model-list-filters-select.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/model-list-filters/model-list-filters.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/model-list-filters/model-list-filters.component.html","../../../projects/data/src/lib/modellist/model-list-filters/model-list-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetimerange-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/adapters/ban.ts","../../../projects/data/src/lib/modellist/model-list-paginator/model-list-paginator/model-list-paginator.component.ts","../../../projects/data/src/lib/modellist/model-list-paginator/model-list-paginator/model-list-paginator.component.html","../../../projects/data/src/lib/dispedit/choice.pipe.ts","../../../projects/data/src/lib/dispedit/factor.pipe.ts","../../../projects/data/src/lib/dispedit/factorc.pipe.ts","../../../projects/data/src/lib/dispedit/fkselect/fkselect.component.ts","../../../projects/data/src/lib/dispedit/fkselect/fkselect.component.html","../../../projects/data/src/lib/dispedit/m2mselect/m2mselect.component.ts","../../../projects/data/src/lib/dispedit/m2mselect/m2mselect.component.html","../../../projects/data/src/lib/messages/message.service.ts","../../../projects/data/src/lib/dispedit/dispedit/dispedit.component.ts","../../../projects/data/src/lib/dispedit/dispedit/dispedit.component.html","../../../projects/data/src/lib/dispedit/sdelete/sdelete.component.ts","../../../projects/data/src/lib/dispedit/sdelete/sdelete.component.html","../../../projects/data/src/lib/data/fields/stringfields.ts","../../../projects/data/src/lib/data/fields/primaryfield.ts","../../../projects/data/src/lib/data/fields/datetime.ts","../../../projects/data/src/lib/data/fields/relations.ts","../../../projects/data/src/lib/data/fields/boolean.ts","../../../projects/data/src/lib/data/fields/numbers.ts","../../../projects/data/src/lib/messages/message-zone/message-zone.component.ts","../../../projects/data/src/lib/messages/message-zone/message-zone.component.html","../../../projects/data/src/lib/data/data-query.mock.ts","../../../projects/data/src/lib/data/data-collection.mock.ts","../../../projects/data/src/lib/uploader/interfaces.ts","../../../projects/data/src/lib/uploader/ngx-uploader.class.ts","../../../projects/data/src/lib/uploader/ng-file-drop.directive.ts","../../../projects/data/src/lib/uploader/ng-file-select.directive.ts","../../../projects/data/src/lib/uploader/ngx-uploader.module.ts","../../../projects/data/src/lib/auth/jwt.ts","../../../projects/data/src/lib/auth/auth.service.ts","../../../projects/data/src/lib/auth/auth-interceptor.service.ts","../../../projects/data/src/lib/routing/routing.ts","../../../projects/data/src/lib/routing/breadcrumb/breadcrumb.component.ts","../../../projects/data/src/lib/routing/breadcrumb/breadcrumb.component.html","../../../projects/data/src/lib/utils/tab-memory.service.ts","../../../projects/data/src/lib/utils/slugify.ts","../../../projects/data/src/public-api.ts","../../../projects/data/src/solidev-data.ts"],"sourcesContent":["import {InjectionToken} from \"@angular/core\";\n\n/**\n * DATA_API_URL: stores data api base url\n */\nexport const DATA_API_URL = new InjectionToken<string>(\"data.api.url\");\n/**\n * DATA_MAX_TRANSFERSTATE_TIME: max duration to use transferstate time\n * If DATA_MAX_TRANSFERSTATE_TIME is zero, TransferState is not used\n */\nexport const DATA_MAX_TRANSFERSTATE_TIME = new InjectionToken<number>(\"data.max.transfer.state\");\n\n/**\n * DataDisplayConfig interface provides default values for display classes\n */\nexport interface DataDisplayConfig {\n dispEdit: {\n defaultMode: \"inline\" | \"dd\";\n inputClasses: {[index: string]: string};\n };\n}\n\nexport const BootstrapDataDisplayConfig: DataDisplayConfig = {\n dispEdit: {\n defaultMode: \"dd\",\n inputClasses: {\n \"input.text\": \"form-control\",\n \"input.email\": \"form-control\",\n \"input.datetime\": \"form-control\",\n \"input.date\": \"form-control\",\n \"input.number\": \"form-control\",\n \"input.decimal\": \"form-control\",\n \"input.checkbox\": \"form-control\",\n \"input.password\":\"form-control\",\n \"textarea\": \"form-control\",\n \"quill\": \"\",\n \"fkselect\": \"form-control\",\n \"select\": \"form-select\"\n },\n }\n};\n\n\n/**\n * DATA_DISPLAY_CONFIG: display config & default classes injection token\n */\nexport const DATA_DISPLAY_CONFIG = new InjectionToken<DataDisplayConfig>(\"data.display.config\");\n","import 'reflect-metadata';\nimport { FormControl, ValidatorFn, Validators } from '@angular/forms';\nimport { DataModel } from '../data-model';\nimport {\n DISPEDIT_DISPLAY_TYPES,\n DISPEDIT_EDITOR_TYPES,\n} from '../../dispedit/dispedit/dispedit.constants';\n\nexport const PROPERTY_METADATA_KEY = Symbol('ngxDataMetadata');\n\n/**\n * Descriptive info for all fields.\n * All are optional.\n */\nexport interface IFieldMetadata<FT> {\n /** Field name (for display, column title, etc..) */\n name?: string;\n /** Field help text (for input) */\n help?: string;\n /** Field description (for details on hover etc..) */\n description?: string;\n /** Field required : no undefined allowed on save ? */\n required?: boolean;\n /** Field cannot be updated */\n readonly?: boolean;\n /** Default value */\n defaultValue?: FT | ((args: any) => FT) | null;\n}\n\n/**\n * Base field manager, stores metadata and provides common field utilities\n *\n * - name : field name, should be the same in data structure and model\n * - help : field help text, blank by default\n * - description : field name for humans\n * - readonly : field is readonly (cannot be changed / pushed to api)\n * - default : default value for field\n *\n * - editor_type : editor type\n * - display_type : display type\n *\n * - fromJson(data) : deserializer\n * - toJson(data) : serialiser\n * - toString(data,format) : to string, for display\n *\n * - formControl : returns field form control\n * - validators : returns field validator\n */\nexport class BaseFieldManager<FT> implements IFieldMetadata<FT> {\n /** Name is mandatory in a field manager. It is given by\n * field decorator if not directly given in field manager. */\n public name!: string;\n public description!: string;\n public help!: string;\n public required = false;\n public readonly = false;\n public defaultValue?: FT | ((args: any) => FT);\n\n public editorType: DISPEDIT_EDITOR_TYPES = 'input.text';\n public displayType: DISPEDIT_DISPLAY_TYPES = 'text';\n\n constructor(params: IFieldMetadata<FT>) {\n Object.assign(this, params);\n if (!this.name) {\n this.name = 'noname';\n }\n if (!this.description) {\n this.description = this.name;\n }\n if (!this.help) {\n this.help = '';\n }\n this.getDefaultValue();\n }\n\n /** Return field validators */\n public get validators(): ValidatorFn[] {\n return this.getValidators();\n }\n\n /** Returns current field name */\n public get fname(): string {\n return this.name.split('__')[1] || this.name;\n }\n\n /** Create a new typed formControl for this field. */\n public formControl(instance: DataModel): FormControl<FT | null> {\n return new FormControl<FT>(\n ((instance as any)[this.fname] as FT) || (this.getDefaultValue() as FT),\n this.validators\n );\n }\n\n /** JSON deserializer base method. */\n public fromJson(data: any): FT {\n return data as FT;\n }\n\n /** JSON serializer base method. */\n public toJson(data: FT): any {\n return data as any;\n }\n\n /**\n * Display value (as string)\n * @param data\n * @param format (not used)\n */\n public toString(data: FT, format: string = 'default'): string {\n return `${data}`;\n }\n\n /** Return validators\n *\n * @protected\n */\n protected getValidators(): ValidatorFn[] {\n const v: ValidatorFn[] = [];\n if (this.required) {\n v.push(Validators.required);\n }\n return v;\n }\n\n /**\n * Returns default value for model, using args if needed.\n * @param args\n */\n public default(args: any = {}): FT | undefined {\n return this.getDefaultValue(args);\n }\n\n /**\n * Returns default value for model, using args if needed.\n * @param args\n * @protected\n */\n protected getDefaultValue(args: any = {}): FT | undefined {\n if (this.defaultValue instanceof Function) {\n return this.defaultValue(args);\n }\n if (this.required && this.defaultValue === undefined) {\n throw new Error(\n `Field ${this.name} : no default value for required field`\n );\n }\n return this.defaultValue;\n }\n}\n\n/**\n * Field data stored on reflected metadata.\n */\nexport interface IFieldStoredMetadata<FT> extends IFieldMetadata<FT> {\n self: string;\n name: string;\n type: string;\n manager: BaseFieldManager<FT>;\n}\n\n/** Util to get own object keys */\nconst ownKeys = (target: any): any =>\n Object.getOwnPropertyNames(target).concat(\n Object.getOwnPropertySymbols(target) as any\n );\n\n/** Manager constructor\n * FT is js field type;\n * T is manager type\n * */\ntype BaseFieldManagerConstructor<FT, T extends BaseFieldManager<FT>> = new (\n params: any\n) => T;\n\n/**\n * Field decorator function\n */\nexport type FieldDecoratorFn = (\n target: any,\n propertyKey: string | symbol\n) => void;\n\n/**\n * Creates a field decorator that can only be applied within\n * an object containing a static __name property.\n *\n *\n * @param meta field metadata\n * @param type field type code\n * @param manager field manager\n */\nexport function genericDataField<\n FT,\n MD extends IFieldMetadata<FT>,\n MG extends BaseFieldManager<FT>\n>(\n meta: MD,\n type: string,\n manager: BaseFieldManagerConstructor<FT, MG>\n): FieldDecoratorFn {\n return (target: DataModel, propertyKey: string | symbol) => {\n const allMetadata: Map<\n string,\n IFieldStoredMetadata<any>\n > = Reflect.getMetadata(PROPERTY_METADATA_KEY, target) ||\n new Map<string, IFieldStoredMetadata<any>>();\n let cname: string = `${(target.constructor as any).__name}`;\n if ((cname === `undefined` || cname === '') && type !== 'primaryField') {\n throw Error(\n `Decorator ${type} allowed only on classes with static __name field : \"${cname}\" found for - ${target}`\n );\n }\n const pk = `${cname}__${String(propertyKey)}`;\n let cm = allMetadata.get(pk);\n /* istanbul ignore if */\n if (cm) {\n // This should never occur as metadata is object bound and property names must be unique\n throw Error(`Field ${pk} already defined = ${cm}`);\n }\n cm = {} as IFieldStoredMetadata<any>;\n for (const key of ownKeys(meta as any)) {\n (cm as any)[key] = (meta as any)[key];\n }\n if (meta.name === undefined) {\n cm.name = `${String(propertyKey)}`;\n }\n cm.type = type;\n cm.self = pk;\n cm.manager = new manager(cm);\n allMetadata.set(pk, cm);\n Reflect.defineMetadata(PROPERTY_METADATA_KEY, allMetadata, target);\n };\n}\n","import {\n BaseFieldManager,\n IFieldStoredMetadata,\n PROPERTY_METADATA_KEY,\n} from './fields/base';\nimport { FormControl, FormGroup, ValidationErrors } from '@angular/forms';\nimport { Collection } from './data-collection';\nimport { Observable, throwError } from 'rxjs';\nimport { tap } from 'rxjs/operators';\n\nexport type DataModelFields = Readonly<Map<string, IFieldStoredMetadata<any>>>;\n\n/**\n * Base class for data model.\n *\n * Each class must have a static __name\n * primary field is given with id field.\n *\n * Some methods are provided to be used with a collection, mostly for CRUD operations.\n *\n */\nexport class DataModel {\n /**\n * data model name\n * this need to be given because class name is not fully available because of minification.\n */\n protected static readonly __name: string = '';\n\n /**\n * Primary field; readonly; must be created and auto incremented on db side.\n */\n // @primaryField({\n // description: 'ID',\n // help: 'Identifiant primaire',\n // })\n public id!: number;\n private readonly _F: DataModelFields;\n\n /**\n * Constructor for data model instance.\n * A matching collection can be provided.\n * ___fields readonly property is also populated from Reflected metadata\n *\n * @param _coll collection used for CRUD, etc..\n */\n constructor(protected _coll?: Collection<any>) {\n const md: Map<string, IFieldStoredMetadata<any>> | undefined =\n Reflect.getMetadata(PROPERTY_METADATA_KEY, this);\n // istanbul ignore if\n if (!md) {\n // This should never occur as all datamodel have at least id field\n throw new Error(\n 'No property metadata found for this object; is there a property in current collection ?'\n );\n }\n // Get all fields from current class and its parents\n const fields = new Map<string, IFieldStoredMetadata<any>>();\n let parent = Object.getPrototypeOf(this);\n while (parent.constructor.name !== 'Object') {\n for (const f of md.keys()) {\n const fieldName = f.split('__')[1];\n if (fields.has(fieldName)) {\n continue;\n }\n if (f.indexOf(parent.constructor.__name + '__') === 0) {\n fields.set(fieldName, md.get(f)!);\n }\n }\n parent = Object.getPrototypeOf(parent);\n }\n this._F = Object.freeze(fields);\n }\n\n public get _collection(): Collection<any> {\n return this._coll as Collection<any>;\n }\n\n public set _collection(coll: Collection<any>) {\n this._coll = coll;\n }\n\n /**\n * HashMap of fields metadata (type, name, manager, etc...)\n */\n public get F(): DataModelFields {\n // istanbul ignore if\n if (!this._F) {\n throw new Error('Invalid data model, fields metadata is missing');\n }\n return this._F;\n }\n\n // Return field names iterator\n public get FN(): IterableIterator<string> {\n return this.F.keys();\n }\n\n /**\n * Loads model data from json.\n * If partial is true, only fields with matching data keys will be loaded\n * @param data\n * @param options\n */\n public fromJson(\n data: { [index: string]: any },\n { partial, check }: { partial?: boolean; check?: boolean } = {\n partial: false,\n check: false,\n }\n ): null | ValidationErrors {\n const errors: { [index: string]: null | ValidationErrors } = {};\n let haveError = false;\n for (const f of this.FN) {\n if (!partial || (partial && Object.keys(data).indexOf(f) !== -1)) {\n const ferr = this.setFV(f, this.FM(f).fromJson(data[f]), check);\n if (ferr !== null) {\n errors[f] = ferr;\n haveError = true;\n }\n }\n }\n return haveError ? errors : null;\n }\n\n public toJson(fields?: string | string[]): any {\n if (fields && !Array.isArray(fields)) {\n fields = [fields];\n }\n const out: { [index: string]: any } = {};\n const fl = this.F;\n for (const f of this.FN) {\n const mgr = this.FM(f);\n if (!fields || fields.length === 0) {\n if (mgr.readonly) {\n continue;\n }\n out[f] = fl.get(f)!.manager.toJson(this.FV(f));\n } else {\n if (fields.indexOf(f) !== -1) {\n out[f] = fl.get(f)!.manager.toJson(this.FV(f));\n }\n }\n }\n return out;\n }\n\n public action<T, RT extends { [index: string]: any }>(\n method: 'POST' | 'PATCH' | 'GET' | 'DELETE' | 'PUT',\n name: string,\n {\n body = undefined,\n update = false,\n updatePartial = true,\n updateCheck = false,\n // updateRaise = false,\n params = {},\n headers = {},\n }: {\n body?: { [_index: string]: any };\n update?: boolean;\n updatePartial?: boolean;\n updateCheck?: boolean;\n // updateRaise?: boolean;\n params?: { [_index: string]: string };\n headers?: { [_index: string]: string };\n } = {}\n ): Observable<RT> {\n if (this._coll === undefined) {\n return throwError(() => new Error('Missing collection'));\n }\n return this._coll\n .action<RT>(this, method, name, {\n body,\n params,\n headers,\n })\n .pipe(\n tap((result) => {\n if (update) {\n this.fromJson(result, {\n partial: updatePartial,\n check: updateCheck,\n });\n return this;\n }\n return result;\n })\n );\n }\n\n // Called on model, returns the manager for a field.\n public FM<FT>(field: string): BaseFieldManager<FT> {\n if (this.F.has(field)) {\n return this.F.get(field)!.manager;\n }\n throw new Error(\n `${field} not found in ${Object.keys(this.F).join(',')} model ${this}`\n );\n }\n\n // Return field value, without typing\n public FV<FT>(field: string): FT {\n return (this as any)[field] as FT;\n }\n\n /**\n * Set field value. If check is true, only set value if all validators pass.\n *\n * The validation result is returned.\n *\n * @param field field name\n * @param value field valued\n * @param check default false\n * @return null or ValidationError\n */\n public setFV<FT>(\n field: string,\n value: FT,\n check: boolean = false\n ): null | ValidationErrors {\n if (check) {\n const fc = new FormControl(value);\n\n for (const v of this.FM(field).validators) {\n const val = v(fc);\n if (val !== null) {\n console.error(val);\n return val;\n }\n }\n }\n (this as any)[field] = value;\n return null;\n }\n\n // Called on model with a list of fields, returns a FormGroup with\n // these fields, or only the form control for one field.\n public FC(): FormGroup;\n public FC(field: string): FormControl;\n public FC(field: string[]): FormGroup;\n public FC(field?: string | string[]): FormControl | FormGroup {\n if (field === undefined) {\n field = Array.from(this.FN).filter((n) => !this.FM(n).readonly);\n }\n if (Array.isArray(field)) {\n const fg: { [index: string]: FormControl } = {};\n for (const f of field) {\n fg[f] = this.FC(f) as FormControl;\n }\n return new FormGroup(fg);\n }\n return this.FM(field).formControl(this);\n }\n\n public save(\n { updateModel = true }: { updateModel?: boolean } = {\n updateModel: true,\n }\n ): Observable<this> {\n if (this._coll) {\n return this._coll.save(this, { updateModel });\n }\n return throwError(() => new Error('Missing collection'));\n }\n\n public update(\n fields: string[] = [],\n { updateModel = true }: { updateModel?: boolean } = {\n updateModel: true,\n }\n ): Observable<this> {\n if (this._coll) {\n return this._coll.update(this, fields, { updateModel });\n }\n return throwError(() => new Error('Missing collection'));\n }\n}\n\n//\n// export class TreeDataModel extends DataModel {\n// static override __name = 'TreeDataModel';\n// @detailsField({\n// model: this,\n// many: true,\n// description: 'Parents',\n// })\n// public parents_details?: this[];\n//\n// @foreignKeyField({\n// required: false,\n// description: 'Structure parente',\n// related: 'Structure',\n// })\n// public parent?: number;\n//\n// @integerField({\n// required: false,\n// readonly: true,\n// description: 'ID Tree',\n// })\n// public tree_id!: number;\n//\n// @integerField({\n// required: false,\n// readonly: true,\n// description: 'MPTT left',\n// })\n// public lft!: number;\n//\n// @integerField({\n// required: false,\n// readonly: true,\n// description: 'MPTT right',\n// })\n// public rght!: number;\n//\n// @integerField({\n// required: false,\n// readonly: true,\n// description: 'Niveau hiérarchique',\n// })\n// public level!: number;\n//\n// public get parent_details(): this | null {\n// if (this.parents_details) {\n// const out = this.parents_details[this.parents_details.length - 1];\n// out.parents_details = this.parents_details.slice(\n// 0,\n// this.parents_details.length - 1\n// );\n// return out;\n// }\n// return null;\n// }\n//\n// public set parent_details(d: this | null) {\n// console.log(d);\n// this.parents_details = d?.parents_details;\n// }\n//\n// public _display(): string {\n// const out: string[] = [];\n// if (this.parents_details) {\n// for (const p of this.parents_details) {\n// if ((p as any).code) {\n// out.push(`[${(p as any).code}] ${(p as any).name}`);\n// } else {\n// out.push((p as any).name);\n// }\n// }\n// }\n// if ((this as any).code) {\n// out.push(`[${(this as any).code}] ${(this as any).name}`);\n// } else {\n// out.push((this as any).name);\n// }\n//\n// return out.join(' : ');\n// }\n// }\n","import { Collection } from './data-collection';\nimport { DataModel } from './data-model';\nimport {\n combineLatest,\n firstValueFrom,\n Observable,\n ReplaySubject,\n share,\n} from 'rxjs';\nimport { first, switchMap } from 'rxjs/operators';\nimport { ActivatedRoute, Router } from '@angular/router';\n\nexport interface FilterData {\n [index: string]: string | number | boolean | undefined | null;\n}\n\nexport type SortData = string;\n\n/**\n * Queryset parameters\n */\nexport interface IQuerysetOptions {\n /** Emit fields list */\n emitFields?: boolean;\n /** Queryset name */\n name?: string;\n /** TODO: see usage */\n route?: ActivatedRoute;\n /** TODO: see usage */\n router?: Router;\n /** TODO: see usage */\n hash?: string;\n}\n\nexport interface IQueryNav {\n page: number;\n page_size: number;\n}\n\nexport interface IQueryMetaNav {\n count: number;\n next: number | null;\n page: number;\n pages: number;\n prev: number | null;\n size: number;\n}\n\nexport interface IQueryMetaNavParams {\n page: string;\n page_size: string;\n}\n\nexport interface IQueryMeta {\n nav: IQueryMetaNav;\n parameters: IQueryMetaNavParams;\n}\n\nexport interface IQueryFullResponse<T> extends IQueryMeta {\n results: T[];\n}\n\nexport class Queryset<T extends DataModel> {\n /** Current filter data */\n public filterData: FilterData = {};\n /** Current sorter data */\n public sortData: SortData[] = [];\n /** Current fields */\n public fields: string[] = [];\n /** Current page size */\n public pageSize = 500;\n /** Current page number */\n public page = 1;\n\n public options: IQuerysetOptions;\n constructor(protected _coll: Collection<T>, options: IQuerysetOptions = {}) {\n /** Default options */\n this.options = { emitFields: true };\n Object.assign(this.options, options);\n }\n\n private _pristine = true;\n /** Pristine status (true if it has not collected results yet) */\n public get pristine(): boolean {\n return this._pristine;\n }\n\n private _loading = new ReplaySubject<boolean>(1);\n /** Loading status (true if currently fetching data) */\n public get loading(): Observable<boolean> {\n return this._loading.asObservable();\n }\n\n private _meta = new ReplaySubject<IQueryMeta>(1);\n /** Results meta part observable */\n public get meta(): Observable<IQueryMeta> {\n return this._meta.asObservable();\n }\n\n private _results = new ReplaySubject<T[]>(1);\n /** Results data part observable */\n public get results(): Observable<T[]> {\n return this._results.asObservable();\n }\n\n private _full?: Observable<[T[], boolean, IQueryMeta]>;\n /** Full results observable (results, loading, meta) */\n public get full(): Observable<[T[], boolean, IQueryMeta]> {\n if (!this._full) {\n this._full = combineLatest([this.results, this.loading, this.meta]);\n }\n return this._full.pipe(share());\n }\n\n /**\n * Update current filter data. Null or undefined values are removed from filter data.\n * @param params filter data\n * @param update boolean to update filter data instead of recreating it from scratch\n */\n public filter(params: FilterData = {}, update: boolean = false): Queryset<T> {\n if (!update) {\n this.filterData = {};\n }\n for (const k of Object.keys(params)) {\n if (params[k] === undefined || params[k] === null) {\n delete this.filterData[k];\n } else {\n this.filterData[k] = params[k];\n }\n }\n return this;\n }\n\n /**\n * Update sorting parameters, list of strings giving sort parameters e.g. sort(\"+name\", \"-id\").\n * @param sorting strings of sort parameters\n */\n public sort(...sorting: string[]): Queryset<T> {\n this.sortData = sorting;\n return this;\n }\n\n /**\n * Update page size.\n * @param pageSize required page size\n */\n public paginateBy(pageSize: number = 20): Queryset<T> {\n this.pageSize = pageSize;\n return this;\n }\n\n /**\n * Update current page number.\n * @param page required pqge\n * @param fragment TODO: fragment usage for router usage\n */\n public setPage(page: number = 1, fragment?: string): Queryset<T> {\n if (page !== this.page) {\n this.page = page;\n // if (this.options.router) {\n // // TODO: check and fix usage of fragment/query params\n // const frag = fragment\n // ? fragment\n // : this.options.hash || this.options.name;\n // const _ = this.options.router.navigate([], {\n // queryParams: { page: page.toString() },\n // fragment: frag,\n // queryParamsHandling: 'merge',\n // });\n // }\n }\n return this;\n }\n\n public setFields(fields: string[]): Queryset<T> {\n this.fields = fields;\n return this;\n }\n\n public getQueryParams(): FilterData {\n const f: FilterData = {};\n Object.assign(f, this.filterData);\n if (this.sortData.length) {\n f['ordering'] = this.sortData.join(',');\n }\n f['page_size'] = this.pageSize;\n f['page'] = this.page;\n if (this.options.emitFields && this.fields.length) {\n f['fields'] = this.fields.join(',');\n }\n return f;\n }\n\n public get(refresh: boolean = true): Observable<T[]> {\n console.log('queryset:get', this, refresh);\n if (!refresh && !this._pristine) {\n return this.results;\n }\n this._loading.next(true);\n return this._coll\n .raw<IQueryFullResponse<T>>({\n method: 'GET',\n params: this.getQueryParams() as any,\n })\n .pipe(\n switchMap((result) => {\n // Process results\n this._meta.next({ nav: result.nav, parameters: result.parameters });\n const out: T[] = [];\n for (const r of result.results) {\n const m = this._coll.fromJson(r);\n out.push(m);\n }\n this._pristine = false;\n this._loading.next(false);\n this._results.next(out);\n return this.results;\n })\n );\n }\n}\n","import { DataModel } from './data-model';\nimport { DataBackend } from './data-backend';\nimport { Observable } from 'rxjs';\nimport { FilterData, IQuerysetOptions, Queryset } from './data-query';\nimport { map, tap } from 'rxjs/operators';\n\nexport type IHttpMethod = 'POST' | 'GET' | 'DELETE' | 'PUT' | 'PATCH';\n\nexport interface IActionParams {\n body?: any;\n headers?: { [index: string]: string };\n params?: { [index: string]: string };\n}\n\nexport interface ICollectionCacheParams {\n transferState?: {\n enabled: boolean;\n maxTime: number;\n maxCount: number;\n };\n}\n\nexport type DataModelType<T extends DataModel> = new (\n _coll?: Collection<T>\n) => T;\n\nexport class Collection<T extends DataModel> {\n public useTransferState = true;\n\n constructor(\n protected backend: DataBackend,\n protected path: string,\n public model: DataModelType<T>\n ) {}\n\n public create(data?: Partial<T>): T {\n if (!data) {\n data = {};\n }\n return this.fromJson(data);\n }\n\n fromJson(data: Partial<T>): T;\n fromJson(data: Partial<T>[]): T[];\n fromJson(data: Partial<T> | Partial<T>[]): T | T[] {\n if (data instanceof Array) {\n const out: T[] = [];\n for (const r of data) {\n const ri = new this.model(this);\n ri.fromJson(r);\n out.push(ri);\n }\n return out;\n }\n const m = new this.model(this);\n m.fromJson(data);\n return m;\n }\n\n public queryset(options: IQuerysetOptions = {}): Queryset<T> {\n return new Queryset<T>(this, options);\n }\n\n public fetch(\n id: number,\n {\n prefix = '',\n suffix = '',\n params = {},\n headers = {},\n }: {\n prefix?: string;\n suffix?: string;\n params?: { [_index: string]: string };\n headers?: { [_index: string]: string };\n } = {}\n ): Observable<T> {\n return this.backend\n .get(this, this.getUrl(id, { prefix, suffix }), { headers, params })\n .pipe(map((result) => this.fromJson(result)));\n }\n\n public action<RT>(\n model: T | null,\n method: IHttpMethod,\n action: string,\n { body = undefined, params = {}, headers = {} }: IActionParams = {}\n ): Observable<RT> {\n return this.backend.action<T, RT>(\n this,\n method,\n this.getUrl(model ? model.id : null, {\n suffix: model ? '/' + action : action,\n }),\n { body, params, headers }\n );\n }\n\n public save(\n model: T,\n { updateModel = true }: { updateModel?: boolean } = {}\n ): Observable<T> {\n let saveMethod =\n model.id !== undefined\n ? this.backend.patch.bind(this.backend)\n : this.backend.post.bind(this.backend);\n let url = model.id !== undefined ? this.getUrl(model.id) : this.getUrl();\n return saveMethod(this, url, { body: model.toJson() }).pipe(\n map((res) => this.fromJson(res)),\n tap((res) => {\n if (updateModel) {\n model.fromJson(res);\n }\n })\n );\n }\n\n public update(\n model: T,\n fields: string[] = [],\n { updateModel = true }: { updateModel?: boolean } = {}\n ): Observable<T> {\n let saveMethod =\n model.id !== undefined\n ? this.backend.patch.bind(this.backend)\n : this.backend.post.bind(this.backend);\n let url = model.id !== undefined ? this.getUrl(model.id) : this.getUrl();\n return saveMethod(this, url, { body: model.toJson(fields) }).pipe(\n map((res) => this.fromJson(res)),\n tap((res) => {\n if (updateModel) {\n model.fromJson(res);\n }\n })\n );\n }\n\n public delete(\n model: T,\n { params = {}, headers = {} }: IActionParams = {}\n ): Observable<any> {\n return this.backend.delete(this, this.getUrl(model.id), {\n params,\n headers,\n });\n }\n\n public list(\n query: FilterData = {},\n {\n prefix = '',\n suffix = '',\n params = {},\n headers = {},\n }: {\n prefix?: string;\n suffix?: string;\n params?: { [_index: string]: string };\n headers?: { [_index: string]: string };\n } = {}\n ): Observable<T[]> {\n const qry = Object.assign({}, query, params);\n return this.backend\n .list(\n this,\n this.getUrl(null, { suffix, prefix }),\n // SEE: forced typecast maybe bad\n { params: qry, headers }\n )\n .pipe(\n // FIXME: parametrize paginated results access\n map((result: { results: Partial<T>[] }) =>\n this.fromJson(result.results)\n )\n );\n }\n\n /**\n * Calls *method* endpoint for this collection and returns raw results.\n *\n * @param method GET/POST/...\n * @param prefix collection_urlPREFIXSUFFIX\n * @param suffix collection_urlPREFIXSUFFIX\n * @param params query paremeters\n * @param body body as json\n * @param headers headers\n */\n public raw<RT>({\n method = 'GET',\n prefix = '',\n suffix = '',\n params = {},\n body = {},\n headers = {},\n }: {\n method?: IHttpMethod;\n prefix?: string;\n suffix?: string;\n body?: any;\n params?: { [_index: string]: string };\n headers?: { [_index: string]: string };\n } = {}): Observable<RT> {\n return this.backend.action(\n this,\n method,\n this.getUrl(null, { suffix, prefix }),\n {\n params,\n headers,\n }\n );\n }\n\n public getUrl(\n id?: number | null,\n { prefix = '', suffix = '' }: { prefix?: string; suffix?: string } = {}\n ): string {\n if (id === undefined || id === null) {\n if (prefix || suffix) {\n return `${this.backend.apiUrl}${this.path}/${prefix}${suffix}`;\n } else {\n return `${this.backend.apiUrl}${this.path}`;\n }\n }\n return `${this.backend.apiUrl}${this.path}/${prefix}${id}${suffix}`;\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { makeStateKey, TransferState } from '@angular/platform-browser';\nimport { Observable, of } from 'rxjs';\nimport { tap } from 'rxjs/operators';\nimport { Inject, Injectable, Optional, PLATFORM_ID } from '@angular/core';\nimport { isPlatformServer } from '@angular/common';\nimport { Collection, IActionParams } from './data-collection';\nimport { DataModel } from './data-model';\nimport { DATA_API_URL, DATA_MAX_TRANSFERSTATE_TIME } from './data-parameters';\n\n/**\n * DataBackend provides CRUD operations to a REST api.\n * TransferState can be used if DATA_MAX_TRANSFERSTATE_TIME is set and > 0\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class DataBackend {\n private _created = new Date();\n\n constructor(\n private _http: HttpClient,\n private _transferState: TransferState,\n @Inject(PLATFORM_ID) private _platform: any,\n @Inject(DATA_API_URL) private _apiUrl: string,\n @Optional()\n @Inject(DATA_MAX_TRANSFERSTATE_TIME)\n private _maxTransferstateTime: number = 0\n ) {}\n\n /**\n * Return api url for this backend.\n */\n public get apiUrl(): string {\n return this._apiUrl;\n }\n\n /**\n * Launch an action on collection.\n * If method is GET and collection.useTranserState & transferState are enabled,\n * result is stored / retrieved from transferState.\n *\n * @param collection Collection reference\n * @param method HTTP method\n * @param url full URL for action\n * @param body JSON body\n * @param params query parameters\n * @param headers query headers\n *\n * @return an observable of response body\n */\n public action<T extends DataModel, RT>(\n collection: Collection<T>,\n method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE',\n url: string,\n { body = undefined, params = {}, headers = {} }: IActionParams = {}\n ): Observable<RT> {\n if (method === 'GET') {\n return this._cachedGet(collection, url, { headers, params });\n } else {\n return this._http.request<RT>(method, url, { body, params, headers });\n }\n }\n\n public put<T extends DataModel>(\n collection: Collection<T>,\n url: string,\n { body = undefined, params = {}, headers = {} }: IActionParams = {}\n ): Observable<T> {\n return this._http.put<T>(url, body, { params, headers });\n }\n\n public post<T extends DataModel>(\n collection: Collection<T>,\n url: string,\n { body = undefined, params = {}, headers = {} }: IActionParams = {}\n ): Observable<Partial<T>> {\n return this._http.post<Partial<T>>(url, body, { params, headers });\n }\n\n public patch<T extends DataModel>(\n collection: Collection<T>,\n url: string,\n { body = undefined, params = {}, headers = {} }: IActionParams = {}\n ): Observable<Partial<T>> {\n return this._http.patch<Partial<T>>(url, body, { params, headers });\n }\n\n public delete<T extends DataModel, R>(\n collection: Collection<T>,\n url: string,\n { params = {}, headers = {} }: IActionParams = {}\n ): Observable<R> {\n return this._http.delete<R>(url, { params, headers });\n }\n\n public _cachedGet<T extends DataModel, RT>(\n collection: Collection<T>,\n url: string,\n { params = {}, headers = {} }: IActionParams = {}\n ): Observable<RT> {\n const key = makeStateKey<RT>(\n url + '|' + JSON.stringify(params) + '|' + JSON.stringify(headers)\n );\n if (\n collection.useTransferState &&\n this._maxTransferstateTime > 0 &&\n this._transferState.hasKey(key) &&\n new Date().getTime() - this._created.getTime() <\n this._maxTransferstateTime\n ) {\n return of(this._transferState.get<RT | null>(key, null) as RT);\n }\n return this._http.get<RT>(url, { headers, params }).pipe(\n tap((result) => {\n if (\n collection.useTransferState &&\n isPlatformServer(this._platform) &&\n this._maxTransferstateTime > 0\n ) {\n this._transferState.set<RT>(key, result);\n }\n })\n );\n }\n\n public get<T extends DataModel>(\n collection: Collection<T>,\n url: string,\n { params = {}, headers = {} }: IActionParams = {}\n ): Observable<Partial<T>> {\n return this._cachedGet<T, Partial<T>>(collection, url, { headers, params });\n }\n\n public list<T extends DataModel>(\n collection: Collection<T>,\n url: string,\n { params = {}, headers = {} }: IActionParams = {}\n ): Observable<any> {\n return this._cachedGet<T, Partial<T>>(collection, url, { headers, params });\n }\n}\n","import { Observable, ReplaySubject } from 'rxjs';\nimport { DataModel } from '../../data/data-model';\nimport { Collection } from '../../data/data-collection';\nimport { FieldsParams } from '../model-list.service';\n\nexport interface ModelListField {\n name: string;\n label: string;\n enabled: boolean;\n allowed: boolean;\n field: any;\n position: number;\n}\n\nexport class ModelListFields<T extends DataModel> {\n private readonly __fields!: ModelListField[];\n\n constructor(collection: Collection<T>, params?: FieldsParams) {\n // Get fields from model\n const m = collection.create();\n const tmp = [];\n for (const fn of m.FN) {\n tmp.push({\n name: fn,\n label: m.FM(fn).description || fn,\n allowed: false,\n enabled: false,\n field: m.FV(fn),\n position: tmp.length * 10,\n });\n }\n // Add custom fields if provided\n const custom = params?.custom || [];\n for (const c of custom) {\n tmp.push({\n name: c.name,\n label: c.label,\n allowed: false,\n enabled: false,\n field: null,\n position: tmp.length * 10,\n });\n }\n\n // Prepare allowed fields (all fields if not set or empty)\n let allowed: string[];\n if (params?.allowed === undefined || params?.allowed.length === 0) {\n allowed = Array.from(m.FN);\n for (const c of custom) {\n allowed.push(c.name);\n }\n } else {\n allowed = params.allowed;\n }\n\n // Prepare excluded fields\n const excluded: string[] = params?.excluded || [];\n\n // Process default fields\n // Use all allowed fields if empty of not set\n const defaults: string[] = params?.defaults || allowed;\n\n // Prepare fields status\n // Set allowed\n for (const fe of allowed) {\n for (const f of tmp) {\n if (f.name === fe) {\n f.allowed = true;\n }\n }\n }\n // Set defaults\n let pos = 0;\n for (const fe of defaults) {\n for (const f of tmp) {\n if (f.name === fe) {\n f.enabled = true;\n f.allowed = true;\n f.position = pos;\n }\n pos += 10;\n }\n }\n // remove excluded\n for (const fe of excluded) {\n for (const f of tmp) {\n if (f.name === fe) {\n f.enabled = false;\n f.allowed = false;\n }\n }\n }\n const filtered = [];\n for (const f of tmp) {\n if (!(!f.enabled && !f.allowed)) {\n filtered.push(f);\n }\n }\n this.__fields = filtered;\n\n this._update();\n }\n\n private _fields = new ReplaySubject<ModelListField[]>(1);\n\n public get fields(): Observable<ModelListField[]> {\n return this._fields.asObservable();\n }\n\n private _enabled: string[] = [];\n\n public get enabled(): string[] {\n return this._enabled;\n }\n\n private _output = new ReplaySubject<string[]>(1);\n\n public get output(): Observable<string[]> {\n return this._output.asObservable();\n }\n\n /**\n * Enable a field by name. Position is optional.\n *\n * @param fname : name of field to be enabled\n * @param position : position (optional)\n * @returns current enabled fields\n */\n public enable(fname: string, position?: number): string[] {\n const f = this.get(fname);\n if (f) {\n f.enabled = true;\n if (position !== undefined) {\n f.position = position;\n }\n } else {\n console.error('Field not found', f);\n }\n this._update();\n return this._enabled;\n }\n\n /**\n * Disable a field by name.\n *\n * @param fname : name of field to be disabled\n * @returns current enabled fields\n */\n public disable(fname: string): string[] {\n const f = this.get(fname);\n if (f) {\n f.enabled = false;\n } else {\n console.error('Field not found', f);\n }\n this._update();\n return this._enabled;\n }\n\n /**\n * Move field `fname` before or after (depending on `position`) field `dest`.\n *\n * @param fname field to move\n * @param position (\"before\" or \"after\")\n * @param dest reference field\n * @returns current enabled fields\n */\n public move(\n fname: string,\n position: 'before' | 'after',\n dest: string = ''\n ): string[] {\n const ftarget = this.get(fname);\n if (dest == '') {\n const pos = this._enabled.indexOf(fname);\n dest = this._enabled[pos + (position === 'before' ? -1 : +1)];\n if (dest === undefined) {\n return this._enabled;\n }\n }\n const fdest = this.get(dest);\n // istanbul ignore if\n if (!ftarget || !fdest) {\n console.error('Target / dest not found', fname, dest);\n return this._enabled;\n }\n if (fname == dest) {\n ftarget.position = fdest.position + (position === 'before' ? -15 : +15);\n } else {\n ftarget.position = fdest.position + (position === 'before' ? -5 : +5);\n }\n\n this._update();\n return this._enabled;\n }\n\n /**\n * Check if field with name `fname` is enabled.\n *\n * @param fname : name of field\n * @returns enabled (true) or disabled (false)\n */\n public isEnabled(fname: string): boolean {\n return this._enabled.indexOf(fname) !== -1;\n }\n\n /**\n * Get field by name\n * @param fname : name of field\n * @returns Model list field or null if not found\n */\n public get(fname: string): ModelListField | null {\n for (const f of this.__fields) {\n if (f.name === fname) {\n return f;\n }\n }\n return null;\n }\n\n /**\n * Get field by position\n * @param pos : position of field\n * @returns Model list field or null if not found\n */\n public getAtPos(pos: number): ModelListField | null {\n return this.__fields[pos] || null;\n }\n\n setPosition(fname: any, position: number): string[] {\n const f = this.get(fname);\n if (f) {\n f.position = position;\n } else {\n console.error('Field not found', f);\n }\n this._update();\n return this._enabled;\n }\n\n private _update() {\n this.__fields.sort((a, b) => a.position - b.position);\n let i = 0;\n for (const f of this.__fields) {\n f.position = i * 10;\n i += 1;\n }\n const out: string[] = [];\n for (const f of this.__fields) {\n if (f.enabled) {\n out.push(f.name);\n }\n }\n this._enabled = out;\n this._output.next(this._enabled);\n this._fields.next(this.__fields);\n }\n}\n","import { IQueryNav } from '../../data/data-query';\nimport { Observable, ReplaySubject } from 'rxjs';\n\nexport class ModelListPaginator {\n private _page_size!: number;\n private _page!: number;\n\n constructor(defaults?: IQueryNav) {\n if (!defaults) {\n defaults = { page_size: 20, page: 1 };\n }\n this._page_size = defaults.page_size || 20;\n this._page = defaults.page || 1;\n this._updateOutput('constructor');\n }\n\n private _output = new ReplaySubject<IQueryNav>(1);\n\n public get output(): Observable<IQueryNav> {\n return this._output.asObservable();\n }\n\n public setPage(page: number): void {\n if (page !== this._page) {\n this._page = page;\n this._updateOutput('setPage');\n }\n }\n\n public updatePage(page: number): void {\n if (page !== this._page) {\n this._page = page;\n }\n }\n\n public setPageSize(size: number): void {\n if (size !== this._page_size) {\n this._page_size = size;\n this._updateOutput('setPageSize');\n }\n }\n\n public updatePageSize(size: number): void {\n if (size !== this._page_size) {\n this._page_size = size;\n }\n }\n\n public getPageSize(): number {\n return this._page_size;\n }\n\n public getPage(): number {\n return this._page;\n }\n\n private _updateOutput(from: string = ''): void {\n this._output.next({ page: this._page, page_size: this._page_size });\n }\n}\n","import { Observable, ReplaySubject } from 'rxjs';\nimport { SorterDefaults } from '../model-list.service';\n\n// TODO: add an option to limit the number of ordering fields (eg. for tree queries)\nexport type SortDirection = 'asc' | 'desc';\n\nexport interface FieldSortData {\n field: string;\n direction: SortDirection;\n}\n\nexport type SorterData = FieldSortData[];\n\nexport class ModelListSorter {\n private readonly _values: SorterData = [];\n\n /**\n * Create ModelListSorter instance, using defaults.\n * @param defaults defaults sort values, as a list of strings (+field, -field, field)\n */\n constructor(defaults: SorterDefaults = []) {\n this._output = new ReplaySubject(1);\n this._values = [];\n for (const d of defaults) {\n if (d.length < 1) {\n continue;\n }\n if (d[0] == '+') {\n this._values.push({ field: d.substring(1), direction: 'asc' });\n } else if (d[0] == '-') {\n this._values.push({ field: d.substring(1), direction: 'desc' });\n } else {\n this._values.push({ field: d, direction: 'asc' });\n }\n }\n this._updateOutput('constructor');\n }\n\n private _output: ReplaySubject<string[]>;\n\n /**\n * Returns a list of \"+/-field\" sort strings observable.\n * @returns sort strings observable\n */\n public get output(): Observable<string[]> {\n return this._output.asObservable();\n }\n\n /**\n * Set sorting for `name` key, in direction `direction`.\n * If sorting is already set for `name` key, updates direction without changing order.\n * If sorting isn't set for `name` key, adds it at the end of sorting directions.\n *\n * @param name field name\n * @param direction sort direction\n * @returns model list sorter\n */\n public set(name: string, direction: SortDirection): ModelListSorter {\n for (const v of this._values) {\n if (v.field === name) {\n v.direction = direction;\n this._updateOutput();\n return this;\n }\n }\n this._values.push({ field: name, direction });\n this._updateOutput('set');\n return this;\n }\n\n /**\n * Removes `name` sorting key from current keys.\n *\n * @param name sort key to be removed\n * @returns model list sorter\n */\n public unset(name: string): ModelListSorter {\n for (let i = 0; i < this._values.length; i++) {\n if (this._values[i].field === name) {\n this._values.splice(i, 1);\n break;\n }\n }\n this._updateOutput('unset');\n return this;\n }\n\n /**\n * Get sorting status for `field` argument.\n * If `field` is not found, returns null.\n *\n * @param field field name\n * @returns ordering direction / null\n */\n public get(field: string): FieldSortData | null {\n for (const v of this._values) {\n if (v.field === field) {\n return v;\n }\n }\n return null;\n }\n\n /**\n * Return all sorter data values.\n *\n * @returns all sorter data values.\n */\n public getAll(): SorterData {\n return this._values;\n }\n\n /**\n * Get the ordering position for `field` argument. If not found, returns -1.\n *\n * @param field field name\n * @returns ordering position for field\n */\n public getOrder(field: string): number {\n for (let i = 0; i < this._values.length; i++) {\n if (this._values[i].field === field) {\n return i + 1;\n }\n }\n return -1;\n }\n\n private _updateOutput(_from: string = ''): void {\n let out: string[] = [];\n for (const v of this._values) {\n out.push(`${v.direction === 'asc' ? '' : '-'}${v.field}`);\n }\n this._output.next(out);\n }\n}\n","import { FilterData } from '../../data/data-query';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { FiltersParams } from '../model-list.service';\nimport { ModelListFilter } from './model-list-filter';\n\nexport class ModelListFilters {\n private _filters: ModelListFilter[];\n\n constructor(params?: FiltersParams) {\n const tmp = Array.from(params?.filters || []);\n // Prepare allowed filters (all filters if not set or empty)\n let allowed: string[] = [];\n if (params?.allowed === undefined || params?.allowed.length === 0) {\n for (const f of tmp) {\n allowed.push(f.name);\n }\n } else {\n allowed = params.allowed;\n }\n // Prepare excluded filters\n const excluded: string[] = params?.excluded || [];\n\n // Process default filters\n // Use all allowed filters if empty of not set\n const defaults: string[] = params?.defaults || allowed;\n\n // Prepare filters status\n // Set allowed\n for (const fe of allowed) {\n for (const f of tmp) {\n if (f.name === fe) {\n f.allowed = true;\n }\n }\n }\n // Set defaults\n for (const fe of defaults) {\n for (const f of tmp) {\n if (f.name === fe) {\n f.enabled = true;\n f.allowed = true;\n }\n }\n }\n // remove excluded\n for (const fe of excluded) {\n for (const f of tmp) {\n if (f.name === fe) {\n f.enabled = false;\n f.allowed = false;\n }\n }\n }\n this._filters = tmp;\n this.update();\n }\n\n private _output = new ReplaySubject<FilterData>(1);\n public get output(): Observable<FilterData> {\n return this._output.asObservable();\n }\n\n public _enabled = new ReplaySubject<ModelListFilter[]>(1);\n public get enabled(): Observable<ModelListFilter[]> {\n return this._enabled.asObservable();\n }\n\n public _available = new ReplaySubject<ModelListFilter[]>(1);\n public get available(): Observable<ModelListFilter[]> {\n return this._available.asObservable();\n }\n\n public update() {\n const filter: FilterData = {};\n const enabled: ModelListFilter[] = [];\n const available: ModelListFilter[] = [];\n for (const f of this._filters) {\n if (f.enabled) {\n f.updateFilter(filter);\n enabled.push(f);\n }\n if (f.allowed) {\n available.push(f);\n }\n }\n this._output.next(filter);\n this._enabled.next(enabled);\n this._available.next(available);\n }\n}\n","import { Injectable } from '@angular/core';\nimport {\n combineLatest,\n debounceTime,\n NEVER,\n Observable,\n of,\n share,\n Subject,\n takeUntil,\n} from 'rxjs';\nimport { DataModel } from '../data/data-model';\nimport {\n IQueryMeta,\n IQueryMetaNavParams,\n IQueryNav,\n Queryset,\n} from '../data/data-query';\nimport { switchMap, tap } from 'rxjs/operators';\nimport { ModelListFields } from './model-list-fields/model-list-fields';\nimport { ModelListPaginator } from './model-list-paginator/model-list-paginator';\nimport { ModelListSorter } from './model-list-sorter/model-list-sorter';\nimport { ModelListFilters } from './model-list-filters/model-list-filters';\nimport { Collection } from '../data/data-collection';\nimport { ModelListFilter } from './model-list-filters/model-list-filter';\n\nexport interface CustomField {\n name: string;\n label: string;\n}\n\nexport interface FilterDefaults {\n [index: string]: string | number | undefined;\n}\n\nexport type SorterDefaults = string[];\n\n/**\n * Fields parameters.\n */\nexport interface FieldsParams {\n /** Allowed fields, all model fields are allowed if empty */\n allowed?: string[];\n /** Default enabled fields */\n defaults?: string[];\n /** Excluded fields */\n excluded?: string[];\n /** Custom fields */\n custom?: CustomField[];\n}\n\n/**\n * Filters parameters.\n */\nexport interface FiltersParams {\n /** Allowed filter names */\n allowed?: string[];\n /** Default active filter names */\n defaults?: string[];\n /** Excluded filter names */\n excluded?: string[];\n /** Filters definitions */\n filters?: ModelListFilter[];\n}\n\nexport type PaginationParams = IQueryMetaNavParams;\n\nexport interface ModelListParams {\n fields?: FieldsParams;\n filters?: FiltersParams;\n filter?: FilterDefaults | Observable<FilterDefaults>;\n sorter?: SorterDefaults;\n paginator?: IQueryNav;\n keep?: boolean;\n reload?: Subject<void>;\n unsubscribe?: Subject<void>;\n}\n\nexport class ModelList<T extends DataModel> {\n public name!: string;\n public filters!: ModelListFilters;\n public sorter!: ModelListSorter;\n public paginator!: ModelListPaginator;\n public queryset!: Queryset<T>;\n public fields!: ModelListFields<T>;\n public reload!: Subject<void>;\n public unsubscribe!: Subject<void>;\n public started = false;\n\n private _results?: Observable<T[]>;\n private _meta?: Observable<IQueryMeta>;\n private _loading?: Observable<boolean>;\n private _full?: Observable<[T[], boolean, IQueryMeta]>;\n\n constructor(name: string) {\n this.name = name;\n }\n\n public get results(): Observable<T[]> {\n if (!this._results) {\n this._results = this.queryset.results.pipe(\n // tap(() => console.log('RESULTS')),\n share(),\n takeUntil(this.unsubscribe || NEVER)\n );\n }\n return this._results;\n }\n\n public get meta(): Observable<IQueryMeta> {\n if (!this._meta) {\n this._meta = this.queryset.meta.pipe(\n // tap(() => console.log('META')),\n share(),\n takeUntil(this.unsubscribe || NEVER)\n );\n }\n return this._meta;\n }\n\n public get loading(): Observable<boolean> {\n if (!this._loading) {\n this._loading = this.queryset.loading.pipe(\n // tap(() => console.log('LOADING')),\n share(),\n takeUntil(this.unsubscribe || NEVER)\n );\n }\n return this._loading;\n }\n\n public get full(): Observable<[T[], boolean, IQueryMeta]> {\n if (!this._full) {\n this._full = this.queryset.full.pipe(\n // tap(() => console.log('FULL')),\n share(),\n takeUntil(this.unsubscribe || NEVER)\n );\n }\n return this._full;\n }\n\n public start(params: ModelListParams) {\n let filter$: Observable<FilterDefaults>;\n if (params.filter && !params.filter.subscribe) {\n filter$ = of(params.filter as FilterDefaults);\n } else if (params.filter && params.filter.subscribe) {\n filter$ = params.filter as Observable<FilterDefaults>;\n } else {\n filter$ = of({});\n }\n combineLatest([\n this.reload,\n this.filters.output,\n filter$,\n this.paginator.output,\n this.sorter.output,\n this.fields.output,\n ])\n .pipe(\n debounceTime(200),\n switchMap(\n ([reload, filter, manualFilter, paginator, sorter, fields]) => {\n this.queryset\n .filter(filter)\n .filter(manualFilter || {}, true)\n .paginateBy(paginator.page_size)\n .setPage(paginator.page)\n .sort(...sorter)\n .setFields(fields);\n return this.queryset.get(true);\n }\n ),\n takeUntil(this.unsubscribe || NEVER)\n )\n .subscribe({\n next: (results: any): void => {},\n error: (error) => {\n console.error('Error while getting model list results : ', error);\n },\n complete: () => {\n // console.log('modellist:completed', this.name);\n this.started = false;\n },\n });\n this.reload.next();\n this.started = true;\n }\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ModelListService {\n private _instances: Map<string, ModelList<any>> = new Map();\n\n constructor() {}\n\n public get<T extends DataModel>(\n name: string,\n collection: Collection<T>,\n defaults: ModelListParams\n ) {\n let ml: ModelList<T>;\n\n if (!name || !this._instances.has(name) || !defaults.keep) {\n ml = new ModelList<T>(name);\n ml.queryset = collection.queryset();\n ml.fields = new ModelListFields(collection, defaults.fields);\n ml.sorter = new ModelListSorter(defaults.sorter || []);\n ml.paginator = new ModelListPaginator(defaults.paginator);\n ml.filters = new ModelListFilters(defaults.filters);\n if (defaults.keep) {\n this._instances.set(name, ml);\n }\n } else {\n ml = this._instances.get(name)!;\n }\n if (!ml.started) {\n if (defaults.reload) {\n ml.reload = defaults.reload;\n } else {\n ml.reload = new Subject<void>();\n }\n if (defaults.unsubscribe) {\n ml.unsubscribe = defaults.unsubscribe;\n } else {\n ml.unsubscribe = new Subject<void>();\n }\n ml.start(defaults);\n }\n return ml;\n }\n}\n","import { Component, ElementRef, Input, OnInit, ViewChild } from '@angular/core';\nimport { DataModel } from '../../../data/data-model';\nimport { ModelList } from '../../model-list.service';\nimport {\n CDK_DRAG_CONFIG,\n CdkDragDrop,\n DragDropModule,\n} from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { NgbOffcanvas, NgbOffcanvasModule } from '@ng-bootstrap/ng-bootstrap';\nimport { ModelListField } from '../model-list-fields';\nimport { CdkScrollableModule } from '@angular/cdk/scrolling';\n\nconst DragConfig = {\n dragStartThreshold: 5,\n pointerDirectionChangeThreshold: 10,\n zIndex: 10000,\n};\n\n@Component({\n selector: 'data-model-list-fields-selector',\n templateUrl: './model-list-fields-selector.component.html',\n styleUrls: ['./model-list-fields-selector.component.sass'],\n standalone: true,\n imports: [\n CommonModule,\n DragDropModule,\n CdkScrollableModule,\n NgbOffcanvasModule,\n ],\n providers: [{ provide: CDK_DRAG_CONFIG, useValue: DragConfig }],\n})\nexport class ModelListFieldsSelectorComponent<T extends DataModel>\n implements OnInit\n{\n @Input() public list!: ModelList<T>;\n @ViewChild('selector', { static: true })\n public ofctpl!: ElementRef<HTMLDivElement>;\n constructor(private _ofc: NgbOffcanvas) {}\n\n public ngOnInit() {\n if (!this.list || !this.list.fields) {\n throw new Error('Missing list / fields');\n }\n }\n\n public open() {\n this._ofc.open(this.ofctpl);\n }\n\n drop($event: CdkDragDrop<T, any>) {\n let pos = $event.currentIndex * 10;\n if ($event.currentIndex > $event.previousIndex) {\n pos += 1;\n } else {\n pos -= 1;\n }\n this.list.fields.setPosition($event.item.data, pos);\n }\n\n public toggle(f: ModelListField) {\n if (f.enabled) {\n this.list.fields.disable(f.name);\n } else {\n this.list.fields.enable(f.name);\n }\n }\n}\n","<i class=\"bi bi-list-ul\" (click)=\"open()\" role=\"button\"></i>\n<ng-template #selector let-offcanvas>\n <div class=\"offcanvas-header\">\n <h4 class=\"offcanvas-title\">Choix des champs</h4>\n <button class=\"btn-close\" type=\"button\" aria-label=\"Close\" (click)=\"offcanvas.dismiss('x')\"></button>\n </div>\n <div class=\"offcanvas-body\" cdkScrollable>\n <div class=\"fields-list\" cdkDropList cdkDropListLockAxis=\"y\" (cdkDropListDropped)=\"drop($event)\" *ngIf=\"list.fields.fields|async as fields\">\n <ng-container *ngFor=\"let f of fields\">\n <div class=\"field-box\" cdkDrag (click)=\"toggle(f)\" [cdkDragData]=\"f.name\" [class.enabled]=\"f.enabled\" [class.compact]=\"fields.length&gt;30\">{{f.label}}</div>\n </ng-container>\n </div>\n </div>\n</ng-template>","import { Component, Input } from '@angular/core';\nimport { ModelList } from '../../model-list.service';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'data-model-list-sorter',\n templateUrl: './model-list-sorter.component.html',\n styleUrls: ['./model-list-sorter.component.sass'],\n standalone: true,\n imports: [CommonModule],\n})\nexport class ModelListSorterComponent {\n /**\n * ModelList reference.\n */\n @Input() public list!: ModelList<any>;\n /**\n * Sort field name.\n */\n @Input() public field!: string;\n\n constructor() {}\n\n public isUp(): boolean {\n const f = this.list.sorter.get(this.field);\n if (f) {\n return f.direction === 'asc';\n }\n return false;\n }\n\n public isDown(): boolean {\n const f = this.list.sorter.get(this.field);\n if (f) {\n return f.direction === 'desc';\n }\n return false;\n }\n\n public setUp(): void {\n this.list.sorter.set(this.field, 'asc');\n }\n\n public setDown(): void {\n this.list.sorter.set(this.field, 'desc');\n }\n\n public getCount(): number {\n return this.list.sorter.get(this.field)\n ? this.list.sorter.getAll().length\n : 0;\n }\n\n public getOrder(): number {\n return this.list.sorter.getOrder(this.field);\n }\n\n public cancel(): void {\n this.list.sorter.unset(this.field);\n }\n}\n","<span class=\"dirs\"><span *ngIf=\"getOrder()&gt;=0 || getCount()&gt;1\" (click)=\"cancel()\" role=\"button\"><span class=\"count\" *ngIf=\"getCount()&gt;1\"> {{getOrder()}}</span><span class=\"bi bi-x\"></span></span><span class=\"bi bi-sort-down-alt\" (click)=\"setUp()\" [class.active]=\"isUp()\" role=\"button\"></span><span class=\"bi bi-sort-down\" (click)=\"setDown()\" [class.active]=\"isDown()\" role=\"button\"></span>&nbsp;</span>\n<ng-content></ng-content>","import { Component, Input } from '@angular/core';\nimport { ModelList } from '../../model-list.service';\nimport { DataModel } from '../../../data/data-model';\nimport { ModelListField } from '../model-list-fields';\nimport { CommonModule } from '@angular/common';\nimport { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap';\nimport { ModelListSorterComponent } from '../../model-list-sorter/model-list-sorter/model-list-sorter.component';\n\n@Component({\n selector: 'data-model-list-field-header',\n templateUrl: './model-list-field-header.component.html',\n styleUrls: ['./model-list-field-header.component.sass'],\n standalone: true,\n imports: [CommonModule, NgbDropdownModule, ModelListSorterComponent],\n})\nexport class ModelListFieldHeaderComponent<T extends DataModel> {\n @Input() public list!: ModelList<T>;\n @Input() public field!: string;\n @Input() public sort?: boolean = false;\n @Input() public sortField?: string;\n\n constructor() {}\n\n disable() {\n this.list.fields.disable(this.field);\n }\n\n public enable(f: ModelListField) {\n this.list.fields.move(f.name, 'after', this.field);\n this.list.fields.enable(f.name);\n }\n}\n","\n<ng-template #label><span #ref>\n <ng-content></ng-content></span><span *ngIf=\"!ref.children.length\">{{list.fields.get(field)?.label||field}}</span></ng-template>\n<div class=\"d-flex flex-row justify-content-between slabel\" [class.active]=\"mnu.isOpen()\">\n <div class=\"flex-grow-1\">\n <data-model-list-sorter [list]=\"list\" [field]=\"sortField||field\" *ngIf=\"sort\">\n <ng-container *ngTemplateOutlet=\"label\"></ng-container>\n </data-model-list-sorter>\n <ng-container *ngIf=\"!sort\">\n <ng-container *ngTemplateOutlet=\"label\"></ng-container>\n </ng-container>\n </div>\n <div class=\"navicons d-flex flex-row\"><i class=\"bi bi-caret-left-fill\" role=\"button\" (click)=\"list.fields.move(field, 'before')\"></i>\n <div ngbDropdown #mnu=\"ngbDropdown\"><i class=\"bi bi-record\" ngbDropdownToggle></i>\n <div ngbDropdownMenu>\n <button ngbDropdownItem (click)=\"disable()\"><i class=\"bi bi-trash me-2\"></i>Supprimer</button>\n <h6 class=\"dropdown-header\">Ajouter une colonne après</h6>\n <ng-container *ngFor=\"let f of list.fields.fields|async\">\n <ng-container *ngIf=\"f.allowed &amp;&amp; !f.enabled\">\n <button ngbDropdownItem (click)=\"enable(f)\"><i class=\"bi bi-plus-circle me-2\"></i>{{f.label||f.name}}</button>\n </ng-container>\n </ng-container>\n </div>\n </div><i class=\"bi bi-caret-right-fill\" role=\"button\" (click)=\"list.fields.move(field, 'after')\"></i>\n </div>\n</div>","import { Component, Input } from '@angular/core';\nimport { ModelList } from '../../model-list.service';\nimport { ModelListFilter } from '../model-list-filter';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'data-model-list-filters-select',\n templateUrl: './model-list-filters-select.component.html',\n styleUrls: ['./model-list-filters-select.component.sass'],\n standalone: true,\n imports: [CommonModule],\n})\nexport class ModelListFiltersSelectComponent {\n @Input() public list!: ModelList<any>;\n @Input() public containerClasses: string[] | string = '';\n @Input() public itemActiveClasses: string[] | string =\n 'badge bg-success mx-1';\n @Input() public itemInactiveClasses: string[] | string =\n 'badge bg-secondary mx-1';\n\n constructor() {}\n\n public toggle(f: ModelListFilter) {\n f.enabled = !f.enabled;\n this.list.filters.update();\n }\n}\n","<span *ngFor=\"let f of list.filters.available|async\" (click)=\"toggle(f)\" [ngClass]=\"containerClasses\"><span *ngIf=\"f.enabled\" role=\"button\" [ngClass]=\"itemActiveClasses\" [title]=\"f.desc\"><i class=\"bi bi-check2-square me-2\"></i><span>{{f.label}}</span></span><span *ngIf=\"!f.enabled\" role=\"button\" [ngClass]=\"itemInactiveClasses\" [title]=\"f.desc\"><i class=\"bi bi-square me-2\"></i><span>{{f.label}}</span></span></span>","import { Component, Input, OnInit } from '@angular/core';\nimport { ModelList } from '../../../model-list.service';\nimport { ReactiveFormsModule, UntypedFormControl } from '@angular/forms';\nimport { debounceTime } from 'rxjs';\nimport { ModelListTextFilter } from './model-list-text-filter';\nimport { CommonModule } from '@angular/common';\nimport { IDispEditChoice } from '../../../../dispedit/dispedit/dispedit.constants';\n\n@Component({\n selector: 'data-model-list-text-filter',\n templateUrl: './model-list-text-filter.component.html',\n styleUrls: ['./model-list-text-filter.component.sass'],\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n})\nexport class ModelListTextFilterComponent implements OnInit {\n @Input() public list!: ModelList<any>;\n @Input() public filter!: ModelListTextFilter;\n @Input() public classes: string[] | string = '';\n public fc = new UntypedFormControl();\n\n constructor() {}\n\n public ngOnInit() {\n this.filter.valueChanges.subscribe((val) => {\n this.fc.setValue((val as IDispEditChoice).value, { emitEvent: false });\n });\n this.fc.valueChanges.pipe(debounceTime(250)).subscribe((val) => {\n if (this.filter.set(val, val)) {\n this.list.filters.update();\n }\n });\n }\n\n public disable() {\n this.filter.enabled = false;\n this.list.filters.update();\n }\n}\n","\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <input class=\"form-control\" type=\"text\" [formControl]=\"fc\" [placeholder]=\"filter.help\">\n</div>","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { ModelList } from '../../../model-list.service';\nimport { ModelListAutocompleteFilter } from './model-list-autocomplete-filter';\nimport { TplFun } from '../../../../dispedit/fkselect/fkselect.component';\nimport { DataModel } from '../../../../data/data-model';\nimport {\n debounceTime,\n distinctUntilChanged,\n Observable,\n Subject,\n takeUntil,\n} from 'rxjs';\nimport { ReactiveFormsModule, UntypedFormControl } from '@angular/forms';\nimport { switchMap } from 'rxjs/operators';\nimport { CommonModule } from '@angular/common';\nimport { NgbTypeaheadModule } from '@ng-bootstrap/ng-bootstrap';\n\n@Component({\n selector: 'data-model-list-autocomplete-filter',\n templateUrl: './model-list-autocomplete-filter.component.html',\n styleUrls: ['./model-list-autocomplete-filter.component.sass'],\n standalone: true,\n imports: [CommonModule, NgbTypeaheadModule, ReactiveFormsModule],\n})\nexport class ModelListAutocompleteFilterComponent<T extends DataModel>\n implements OnInit, OnDestroy\n{\n @Input() public list!: ModelList<any>;\n @Input() public filter!: ModelListAutocompleteFilter<T>;\n @Input() public classes: string[] | string = '';\n public fc = new UntypedFormControl();\n public search = this._search.bind(this);\n public display = this._display.bind(this);\n private _tpl!: TplFun<T>;\n private _subscription = new Subject<void>();\n\n constructor() {}\n\n public ngOnInit(): void {\n this._setDisplay();\n this.fc.valueChanges.pipe(debounceTime(250)).subscribe((val) => {\n if (val) {\n console.log('value changed', val, this._display(val));\n if (this.filter.set(val.id, this._display(val))) {\n this.list.filters.update();\n }\n }\n });\n }\n\n public disable() {\n this.filter.enabled = false;\n this.list.filters.update();\n }\n\n public ngOnDestroy(): void {\n this._subscription.next();\n this._subscription.complete();\n }\n\n public scrollAction($event: any) {\n if (!this.filter.scroll) {\n return;\n }\n const elem =\n $event.currentTarget.nextElementSibling.getElementsByClassName(\n 'active'\n )[0];\n elem.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n }\n\n private _setDisplay() {\n if (this.filter.display) {\n if (this.filter.display && typeof this.filter.display === 'string') {\n this._tpl = (model: T) =>\n `${(model as any)[this.filter.display as string]}`;\n } else if (\n this.filter.display &&\n typeof this.filter.display === 'function'\n ) {\n this._tpl = this.filter.display.bind(this);\n }\n } else {\n this._tpl = (model: T) => {\n if ((model as any)._display) {\n return (model as any)._display;\n } else {\n return `${\n (model as any)['name'] ||\n (model as any)['title'] ||\n (model as any)['id']\n }`;\n }\n };\n }\n }\n\n /**\n * Display function. Uses descfield or desc tpl (lodash template using model fields).\n */\n private _display(x: any): any {\n if (x) {\n return this._tpl(x);\n }\n return '';\n }\n\n private _search(text$: Observable<string>): Observable<T[]> {\n return text$.pipe(\n debounceTime(750),\n distinctUntilChanged(),\n switchMap((term) => {\n const f: any = {};\n // Generate filter\n for (const k of Object.keys(this.filter.filter)) {\n if (\n this.filter.filter[k] !== null ||\n this.filter.filter[k] !== undefined\n ) {\n f[k] = this.filter.filter[k];\n }\n }\n // Add search param\n f[this.filter.searchparam] = term;\n // Update queryset filter\n this.filter.queryset?.filter(f);\n // Launch queryset\n return this.filter.queryset.get();\n }),\n takeUntil(this._subscription)\n );\n }\n}\n","\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <input class=\"form-control\" [formControl]=\"fc\" [ngbTypeahead]=\"search\" [editable]=\"false\" [focusFirst]=\"true\" [inputFormatter]=\"display\" [resultFormatter]=\"display\" [placeholder]=\"filter.help\" (keyup.arrowDown)=\"scrollAction($event)\" (keyup.arrowUp)=\"scrollAction($event)\" #th=\"ngbTypeahead\" [class.tascroll]=\"filter.scroll\">\n</div>","import { Component, Input } from '@angular/core';\nimport { ModelListAutocompleteMultiFilter } from './model-list-autocomplete-multi-filter';\nimport { DataModel } from '../../../../data/data-model';\nimport { ModelListAutocompleteFilterComponent } from '../model-list-autocomplete-filter/model-list-autocomplete-filter.component';\nimport { CommonModule } from '@angular/common';\nimport { NgbTypeaheadModule } from '@ng-bootstrap/ng-bootstrap';\nimport { ReactiveFormsModule } from '@angular/forms';\n\n@Component({\n selector: 'data-model-list-autocomplete-multi-filter',\n templateUrl: './model-list-autocomplete-multi-filter.component.html',\n styleUrls: ['./model-list-autocomplete-multi-filter.component.sass'],\n standalone: true,\n imports: [CommonModule, NgbTypeaheadModule, ReactiveFormsModule],\n})\nexport class ModelListAutocompleteMultiFilterComponent<\n T extends DataModel\n> extends ModelListAutocompleteFilterComponent<T> {\n @Input() public override filter!: ModelListAutocompleteMultiFilter<T>;\n\n public unset(value: any, desc: string) {\n this.filter.unset(value, desc);\n this.list.filters.update();\n }\n}\n","\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <input class=\"form-control\" [formControl]=\"fc\" [ngbTypeahead]=\"search\" [editable]=\"false\" [focusFirst]=\"true\" [inputFormatter]=\"display\" [resultFormatter]=\"display\" [placeholder]=\"filter.help\" (keyup.arrowDown)=\"scrollAction($event)\" (keyup.arrowUp)=\"scrollAction($event)\" #th=\"ngbTypeahead\" [class.tascroll]=\"filter.scroll\">\n <div class=\"enabled mt-1\">\n <div *ngFor=\"let e of filter.mcurrent$|async\"><i class=\"bi bi-trash me-2\" (click)=\"unset(e.value, e.desc)\" role=\"button\"></i>{{e.desc}}</div>\n </div>\n</div>","import { Component, Input } from '@angular/core';\nimport { ModelList } from '../../../model-list.service';\nimport { ModelListDatetimeFilter } from './model-list-datetime-filter';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'data-model-list-datetime-filter',\n templateUrl: './model-list-datetime-filter.component.html',\n styleUrls: ['./model-list-datetime-filter.component.sass'],\n standalone: true,\n imports: [CommonModule],\n})\nexport class ModelListDatetimeFilterComponent {\n @Input() public list!: ModelList<any>;\n @Input() public filter!: ModelListDatetimeFilter;\n @Input() public classes: string[] | string = '';\n\n constructor() {}\n}\n","<p>model-list-datetime-filter works!</p>","import { Component, Input } from '@angular/core';\nimport { ModelList } from '../../../model-list.service';\nimport { ModelListDatetimerangeFilter } from './model-list-datetimerange-filter';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'data-model-list-datetime-range-filter',\n templateUrl: './model-list-datetime-range-filter.component.html',\n styleUrls: ['./model-list-datetime-range-filter.component.sass'],\n standalone: true,\n imports: [CommonModule],\n})\nexport class ModelListDatetimeRangeFilterComponent {\n @Input() public list!: ModelList<any>;\n @Input() public filter!: ModelListDatetimerangeFilter;\n @Input() public classes: string[] | string = '';\n\n constructor() {}\n}\n","<p>model-list-datetime-range-filter works!</p>","import { Component, Input } from '@angular/core';\nimport { ModelList } from '../../../model-list.service';\nimport { ModelListFlagsFilter } from './model-list-flags-filter';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'data-model-list-flags-filter',\n templateUrl: './model-list-flags-filter.component.html',\n styleUrls: ['./model-list-flags-filter.component.sass'],\n standalone: true,\n imports: [CommonModule],\n})\nexport class ModelListFlagsFilterComponent {\n @Input() public list!: ModelList<any>;\n @Input() public filter!: ModelListFlagsFilter;\n @Input() public classes: string[] | string = '';\n\n constructor() {}\n}\n","<p>model-list-flags-filter works!</p>","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { ModelList } from '../../../model-list.service';\nimport {\n GeoSearchResult,\n ModelListGeodistanceFilter,\n} from './model-list-geodistance-filter';\nimport { CommonModule } from '@angular/common';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport {\n combineLatest,\n debounceTime,\n distinctUntilChanged,\n Observable,\n Subject,\n} from 'rxjs';\nimport { filter, switchMap } from 'rxjs/operators';\nimport { NgbTypeaheadModule } from '@ng-bootstrap/ng-bootstrap';\n\n@Component({\n selector: 'data-model-list-geodistance-filter',\n templateUrl: './model-list-geodistance-filter.component.html',\n styleUrls: ['./model-list-geodistance-filter.component.sass'],\n standalone: true,\n imports: [CommonModule, NgbTypeaheadModule, ReactiveFormsModule],\n})\nexport class ModelListGeodistanceFilterComponent implements OnInit, OnDestroy {\n @Input() public list!: ModelList<any>;\n @Input() public filter!: ModelListGeodistanceFilter;\n @Input() public classes: string[] | string = '';\n public fc = new FormControl();\n public fd = new FormControl('');\n public search = this._search.bind(this);\n public display = this._display.bind(this);\n private _subscription = new Subject<void>();\n\n constructor() {}\n\n public ngOnInit(): void {\n const address = this.fc.valueChanges.pipe(\n debounceTime(250),\n filter((val) => !!val)\n );\n const distance = this.fd.valueChanges.pipe(filter((d) => !!d));\n combineLatest([address, distance]).subscribe(([val, dist]) => {\n if (this.filter.set(`${dist},${val.lng},${val.lat}`, val.label)) {\n this.list.filters.update();\n }\n });\n }\n\n public disable() {\n this.filter.enabled = false;\n this.list.filters.update();\n }\n\n public ngOnDestroy(): void {\n this._subscription.next();\n this._subscription.complete();\n }\n\n private _display(x: GeoSearchResult): any {\n return `${x.label}`;\n }\n\n private _search(text$: Observable<string>): Observable<GeoSearchResult[]> {\n return text$.pipe(\n debounceTime(750),\n distinctUntilChanged(),\n switchMap((term) => this.filter.geolocator(term))\n );\n }\n\n public scrollAction($event: any) {\n if (!this.filter.scroll) {\n return;\n }\n const elem =\n $event.currentTarget.nextElementSibling.getElementsByClassName(\n 'active'\n )[0];\n elem.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n }\n}\n","\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <div class=\"row g-1\">\n <div class=\"col-4\">\n <select class=\"form-select\" [formControl]=\"fd\">\n <option value=\"\">Distance</option>\n <option value=\"lte,10\">< 10 km</option>\n <option value=\"lte,20\">< 20 km</option>\n <option value=\"lte,30\">< 30 km</option>\n <option value=\"lte,50\">< 50 km</option>\n <option value=\"lte,80\">< 80 km</option>\n <option value=\"lte,100\">< 100 km</option>\n <option value=\"lte,150\">< 150 km</option>\n <option value=\"lte,200\">< 200 km</option>\n <option value=\"lte,250\">< 250 km</option>\n <option value=\"lte,300\">< 300 km</option>\n <option value=\"lte,500\">< 500 km</option>\n <option value=\"lte,1000\">< 1000 km</option>\n </select>\n </div>\n <div class=\"col-8\">\n <input class=\"form-control\" [formControl]=\"fc\" [ngbTypeahead]=\"search\" [editable]=\"false\" [focusFirst]=\"true\" [inputFormatter]=\"display\" [resultFormatter]=\"display\" [placeholder]=\"filter.help\" (keyup.arrowDown)=\"scrollAction($event)\" (keyup.arrowUp)=\"scrollAction($event)\" #th=\"ngbTypeahead\" [class.tascroll]=\"filter.scroll\">\n </div>\n </div>\n</div>","import { Component, Input, OnInit } from '@angular/core';\nimport { ModelList } from '../../../model-list.service';\nimport { ModelListSelectFilter } from './model-list-select-filter';\nimport { combineLatest, debounceTime, lastValueFrom } from 'rxjs';\nimport {\n FormControl,\n ReactiveFormsModule,\n UntypedFormControl,\n} from '@angular/forms';\nimport { DataModel } from '../../../../data/data-model';\nimport { CommonModule } from '@angular/common';\nimport { IDispEditChoice } from '../../../../dispedit/dispedit/dispedit.constants';\n\n@Component({\n selector: 'data-model-list-select-filter',\n templateUrl: './model-list-select-filter.component.html',\n styleUrls: ['./model-list-select-filter.component.sass'],\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n})\nexport class ModelListSelectFilterComponent<T extends DataModel>\n implements OnInit\n{\n @Input() public list!: ModelList<T>;\n @Input() public filter!: ModelListSelectFilter<T>;\n @Input() public classes: string[] | string = '';\n public fc = new FormControl(null);\n\n constructor() {}\n\n public ngOnInit() {\n this.filter.valueChanges.subscribe((val) => {\n console.log('Changing value', val);\n this.fc.setValue(val ? (val as IDispEditChoice).value : null, {\n emitEvent: false,\n });\n });\n\n combineLatest([\n this.filter.choices,\n this.fc.valueChanges.pipe(debounceTime(250)),\n ]).subscribe(([choices, val]) => {\n if (val === null) {\n this.filter.clear();\n this.list.filters.update();\n } else {\n for (const ch of choices) {\n if (ch.value === val) {\n if (this.filter.set(ch.value, ch.desc)) {\n this.list.filters.update();\n break;\n }\n }\n }\n }\n });\n }\n\n public disable() {\n this.filter.enabled = false;\n this.list.filters.update();\n }\n}\n","\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <select class=\"form-select\" [formControl]=\"fc\">\n <option [ngValue]=\"null\">-- {{filter.help}} --</option>\n <option *ngFor=\"let c of filter.choices|async\" [ngValue]=\"c.value\">{{c.desc}}</option>\n </select>\n</div>","import { Component, Input } from '@angular/core';\nimport { ModelList } from '../../../model-list.service';\nimport { ModelListSelectMultiFilter } from './model-list-select-multi-filter';\nimport { CommonModule } from '@angular/common';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { DataModel } from '../../../../data/data-model';\nimport { combineLatest, debounceTime } from 'rxjs';\n\n@Component({\n selector: 'data-model-list-select-multi-filter',\n templateUrl: './model-list-select-multi-filter.component.html',\n styleUrls: ['./model-list-select-multi-filter.component.sass'],\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n})\nexport class ModelListSelectMultiFilterComponent<T extends DataModel> {\n @Input() public list!: ModelList<T>;\n @Input() public filter!: ModelListSelectMultiFilter<T>;\n @Input() public classes: string[] | string = '';\n public fc = new FormControl(null);\n\n constructor() {}\n\n public ngOnInit() {\n combineLatest([\n this.filter.choices,\n this.fc.valueChanges.pipe(debounceTime(250)),\n ]).subscribe(([choices, val]) => {\n for (const ch of choices) {\n if (ch.value === val) {\n if (this.filter.set(ch.value, ch.desc)) {\n this.list.filters.update();\n break;\n }\n }\n }\n });\n }\n\n public unset(value: any, desc: string) {\n this.filter.unset(value, desc);\n this.list.filters.update();\n }\n\n public disable() {\n this.filter.enabled = false;\n this.list.filters.update();\n }\n}\n","\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <select class=\"form-select\" [formControl]=\"fc\">\n <option [ngValue]=\"null\">-- {{filter.help}} --</option>\n <option *ngFor=\"let c of filter.choices|async\" [ngValue]=\"c.value\">{{c.desc}}</option>\n </select>\n <div class=\"enabled mt-1\">\n <div *ngFor=\"let e of filter.mcurrent$|async\"><i class=\"bi bi-trash me-2\" (click)=\"unset(e.value, e.desc)\" role=\"button\"></i>{{e.desc}}</div>\n </div>\n</div>","import { Component, Input } from '@angular/core';\nimport { ModelList } from '../../../model-list.service';\nimport { ModelListTreeFilter } from './model-list-tree-filter';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'data-model-list-tree-filter',\n templateUrl: './model-list-tree-filter.component.html',\n styleUrls: ['./model-list-tree-filter.component.sass'],\n standalone: true,\n imports: [CommonModule],\n})\nexport class ModelListTreeFilterComponent {\n @Input() public list!: ModelList<any>;\n @Input() public filter!: ModelListTreeFilter;\n @Input() public classes: string[] | string = '';\n\n constructor() {}\n}\n","<p>model-list-tree-filter works!</p>","import { Component, Input, OnInit } from '@angular/core';\nimport { ModelList } from '../../../model-list.service';\nimport { ReactiveFormsModule, UntypedFormControl } from '@angular/forms';\nimport { debounceTime } from 'rxjs';\nimport { ModelListNumberFilter } from './model-list-number-filter';\nimport { CommonModule } from '@angular/common';\nimport { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap';\n\n@Component({\n selector: 'data-model-list-number-filter',\n templateUrl: './model-list-number-filter.component.html',\n styleUrls: ['./model-list-number-filter.component.sass'],\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, NgbDropdownModule],\n})\nexport class ModelListNumberFilterComponent implements OnInit {\n @Input() public list!: ModelList<any>;\n @Input() public filter!: ModelListNumberFilter;\n @Input() public classes: string[] | string = '';\n public fc = new UntypedFormControl();\n\n constructor() {}\n\n public ngOnInit() {\n this.filter.valueChanges.subscribe((val) => {\n this.fc.setValue((val as any).value, { emitEvent: false });\n });\n this.fc.valueChanges.pipe(debounceTime(250)).subscribe((val) => {\n if (this.filter.set(val, val)) {\n this.list.filters.update();\n }\n });\n }\n\n public disable() {\n this.filter.enabled = false;\n this.list.filters.update();\n }\n\n selectOp(eq: string) {\n this.filter.setOperator(eq);\n this.list.filters.update();\n }\n}\n","\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\">\n <div class=\"bi bi-trash\"></div>\n </div>\n <label>{{filter.label}}</label>\n <div class=\"input-group\" ngbDropdown>\n <button class=\"btn btn-outline-secondary\" type=\"button\" ngbDropdownToggle><span class=\"me-2\">{{filter.operator.label}}</span>\n <div class=\"dropdown-menu\" ngbDropdownMenu>\n <button ngbDropdownItem *ngFor=\"let op of filter.operations\" (click)=\"selectOp(op.operator)\" [class.text-primary]=\"op.operator === filter.operator.operator\">{{op.label}}</button>\n </div>\n </button>\n <input class=\"form-control\" type=\"number\" [formControl]=\"fc\" [placeholder]=\"filter.help\">\n </div>\n</div>","import { Component, Input } from '@angular/core';\nimport { ModelList } from '../../model-list.service';\nimport { CommonModule } from '@angular/common';\nimport { ModelListTextFilterComponent } from '../filters/model-list-text-filter/model-list-text-filter.component';\nimport { ModelListAutocompleteFilterComponent } from '../filters/model-list-autocomplete-filter/model-list-autocomplete-filter.component';\nimport { ModelListAutocompleteMultiFilterComponent } from '../filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component';\nimport { ModelListDatetimeFilterComponent } from '../filters/model-list-datetime-filter/model-list-datetime-filter.component';\nimport { ModelListDatetimeRangeFilterComponent } from '../filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component';\nimport { ModelListFlagsFilterComponent } from '../filters/model-list-flags-filter/model-list-flags-filter.component';\nimport { ModelListGeodistanceFilterComponent } from '../filters/model-list-geodistance-filter/model-list-geodistance-filter.component';\nimport { ModelListSelectFilterComponent } from '../filters/model-list-select-filter/model-list-select-filter.component';\nimport { ModelListSelectMultiFilterComponent } from '../filters/model-list-select-multi-filter/model-list-select-multi-filter.component';\nimport { ModelListTreeFilterComponent } from '../filters/model-list-tree-filter/model-list-tree-filter.component';\nimport { ModelListNumberFilterComponent } from '../filters/model-list-number-filter/model-list-number-filter.component';\n\n// FIXME: register filter components and load them dynamically to allow user defined filters\n\n@Component({\n selector: 'data-model-list-filters',\n templateUrl: './model-list-filters.component.html',\n styleUrls: ['./model-list-filters.component.sass'],\n standalone: true,\n imports: [\n CommonModule,\n ModelListTextFilterComponent,\n ModelListNumberFilterComponent,\n ModelListAutocompleteFilterComponent,\n ModelListAutocompleteMultiFilterComponent,\n ModelListDatetimeFilterComponent,\n ModelListDatetimeRangeFilterComponent,\n ModelListFlagsFilterComponent,\n ModelListGeodistanceFilterComponent,\n ModelListSelectFilterComponent,\n ModelListSelectMultiFilterComponent,\n ModelListTreeFilterComponent,\n ],\n})\nexport class ModelListFiltersComponent {\n @Input() public list!: ModelList<any>;\n @Input() public containerClasses: string[] | string = '';\n @Input() public itemClasses: string[] | string = '';\n}\n","\n<div [ngClass]=\"containerClasses\">\n <ng-container *ngFor=\"let f of list.filters.enabled|async\">\n <ng-container [ngSwitch]=\"f.type\">\n <data-model-list-autocomplete-filter *ngSwitchCase=\"'autocomplete'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-autocomplete-filter>\n <data-model-list-autocomplete-multi-filter *ngSwitchCase=\"'autocompletemulti'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-autocomplete-multi-filter>\n <data-model-list-datetime-filter *ngSwitchCase=\"'datetime'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-datetime-filter>\n <data-model-list-datetime-range-filter *ngSwitchCase=\"'datetimerange'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-datetime-range-filter>\n <data-model-list-flags-filter *ngSwitchCase=\"'flags'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-flags-filter>\n <data-model-list-geodistance-filter *ngSwitchCase=\"'geodistance'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-geodistance-filter>\n <data-model-list-number-filter *ngSwitchCase=\"'number'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-number-filter>\n <data-model-list-select-filter *ngSwitchCase=\"'select'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-select-filter>\n <data-model-list-select-multi-filter *ngSwitchCase=\"'selectmulti'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-select-multi-filter>\n <data-model-list-text-filter *ngSwitchCase=\"'text'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-text-filter>\n <data-model-list-tree-filter *ngSwitchCase=\"'tree'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-tree-filter>\n </ng-container>\n </ng-container>\n</div>","import { FilterData } from '../../data/data-query';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { FILTER_TYPE } from './filters/filtertypes';\nimport { IDispEditChoice } from '../../dispedit/dispedit/dispedit.constants';\n\nexport interface ModelListFilterParams {\n name: string;\n field: string;\n label?: string;\n help?: string;\n value?: any;\n desc?: any;\n displayClasses?: string[] | string;\n}\n\nexport class ModelListFilter implements ModelListFilterParams {\n public name: string;\n public field: string;\n public label: string;\n public help: string;\n public desc?: any;\n public type: FILTER_TYPE;\n public allowed: boolean;\n public enabled: boolean;\n public displayClasses?: string[] | string;\n public pristine = true;\n public multi = false;\n\n /** Single current value */\n protected _value: IDispEditChoice | null = null;\n /** Multiple current value */\n protected _mvalue = new Map<string, string>();\n /** Single current value observable */\n protected _current = new ReplaySubject<IDispEditChoice | null>(1);\n /** Multiple current value observable */\n protected _mcurrent = new ReplaySubject<IDispEditChoice[]>(1);\n\n constructor(params: ModelListFilterParams) {\n this.name = params.name;\n this.field = params.field;\n this.label = params.label || '';\n this.help = params.help || '';\n this.desc = params.desc;\n this.displayClasses = params.displayClasses;\n this.allowed = false;\n this.enabled = false;\n this.type = 'text';\n // FIXME: add value init\n }\n\n public get mcurrent$(): Observable<IDispEditChoice[]> {\n return this._mcurrent.asObservable();\n }\n\n public get current$(): Observable<IDispEditChoice | null> {\n return this._current.asObservable();\n }\n\n public updateFilter(filter: FilterData) {\n if (this.multi && this._mvalue.size > 0) {\n filter[this.field] = this.getMultiValue();\n } else if (\n !this.multi &&\n this._value !== undefined &&\n this._value !== null\n ) {\n filter[this.field] = this.getValue();\n }\n }\n\n public get valueChanges(): Observable<\n IDispEditChoice | IDispEditChoice[] | null\n > {\n if (this.multi) {\n return this._mcurrent.asObservable();\n }\n return this._current.asObservable();\n }\n\n public clear(notify: boolean = true) {\n if (this.multi) {\n this._mvalue = new Map<string, string>();\n } else {\n this._value = null;\n }\n this.notify(notify);\n }\n\n public set(value: any, desc: string, notify: boolean = true): boolean {\n if (this.multi) {\n return this.mset(value, desc, notify);\n }\n return this.sset(value, desc, notify);\n }\n\n public unset(value: any, desc: string, notify: boolean = true): boolean {\n if (this.multi) {\n return this.munset(value, desc, notify);\n }\n return this.sunset(value, desc, notify);\n }\n\n public toggle(value: any, desc: string, notify: boolean = true): boolean {\n if (this.multi) {\n return this.mtoggle(value, desc, notify);\n }\n return this.stoggle(value, desc, notify);\n }\n\n private mtoggle(value: any, desc: string, notify: boolean = true): boolean {\n if (this._mvalue.has(`${value}`)) {\n this._mvalue.delete(`${value}`);\n } else {\n this._mvalue.set(`${value}`, desc);\n }\n this.notify(notify);\n return true;\n }\n\n private mset(value: any, desc: string, notify: boolean = true): boolean {\n if (!this._mvalue.has(`${value}`)) {\n this._mvalue.set(`${value}`, desc);\n this.notify(notify);\n return true;\n }\n return false;\n }\n\n private munset(value: any, desc: string, notify: boolean = true): boolean {\n if (this._mvalue.has(`${value}`)) {\n this._mvalue.delete(`${value}`);\n this.notify(notify);\n return true;\n }\n return false;\n }\n\n private stoggle(value: any, desc: string, notify: boolean = true): boolean {\n if (this._value !== null && this._value.value === value) {\n this._value = null;\n } else {\n this._value = { value, desc };\n }\n this.notify(notify);\n return true;\n }\n\n private sset(value: any, desc: string, notify: boolean = true): boolean {\n if (!(this._value !== null && this._value.value === value)) {\n this._value = { value, desc };\n this.notify(notify);\n return true;\n }\n return false;\n }\n\n private sunset(value: any, desc: string, notify: boolean = true): boolean {\n if (this._value !== null) {\n this._value = null;\n this.notify(notify);\n return true;\n }\n return false;\n }\n\n private getMultiValue(): string | number {\n return Array.from(this._mvalue.keys()).join(',');\n }\n\n protected getValue(): string | number {\n return `${this._value?.value}`;\n }\n\n private notify(notify: boolean = true) {\n if (notify) {\n if (this.multi) {\n this._mcurrent.next(\n Array.from(this._mvalue.entries()).map(([k, v]) => {\n return { desc: v, value: k };\n })\n );\n } else {\n this._current.next(this._value);\n }\n }\n }\n}\n","import {\n ModelListFilter,\n ModelListFilterParams,\n} from '../../model-list-filter';\nimport { DataModel } from '../../../../data/data-model';\nimport { Collection } from '../../../../data/data-collection';\nimport { FilterData, Queryset } from '../../../../data/data-query';\nimport { TplFun } from '../../../../dispedit/fkselect/fkselect.component';\n\nexport interface ModelListAutocompleteParams<T extends DataModel>\n extends ModelListFilterParams {\n collection?: Collection<T>;\n queryset?: Queryset<T>;\n searchparam?: string;\n display?: string | TplFun<T>;\n filter?: FilterData;\n scroll?: boolean;\n}\n\nexport class ModelListAutocompleteFilter<T extends DataModel>\n extends ModelListFilter\n implements ModelListAutocompleteParams<T>\n{\n public display?: string | TplFun<T>;\n public searchparam!: string;\n public queryset!: Queryset<T>;\n public collection?: Collection<T>;\n public filter!: FilterData;\n public scroll!: boolean;\n\n constructor(params: ModelListAutocompleteParams<T>) {\n super(params);\n this.type = 'autocomplete';\n this.display = params.display;\n this.searchparam = params.searchparam ? params.searchparam : 'search';\n if (!params.collection && !params.queryset) {\n throw 'Missing related data (collection or queryset)';\n }\n this.collection = params.collection;\n if (params.collection && !params.queryset) {\n this.queryset = params.collection.queryset();\n } else {\n this.queryset = params.queryset as Queryset<T>;\n }\n this.scroll = params.scroll !== undefined ? params.scroll : true;\n this.filter = params.filter || {};\n\n if (this.label == '') {\n this.label = 'Sélectionnez par texte';\n }\n if (this.help == '') {\n this.help = 'Recherche par texte';\n }\n }\n}\n","import {\n ModelListAutocompleteFilter,\n ModelListAutocompleteParams,\n} from '../model-list-autocomplete-filter/model-list-autocomplete-filter';\nimport { DataModel } from '../../../../data/data-model';\n\nexport interface ModelListAutocompleteMultiParams<T extends DataModel>\n extends ModelListAutocompleteParams<T> {}\n\nexport class ModelListAutocompleteMultiFilter<\n T extends DataModel\n> extends ModelListAutocompleteFilter<T> {\n public override multi = true;\n\n constructor(params: ModelListAutocompleteMultiParams<T>) {\n super(params as ModelListAutocompleteParams<T>);\n this.type = 'autocompletemulti';\n }\n}\n","import {ModelListFilter, ModelListFilterParams} from \"../../model-list-filter\";\n\nexport class ModelListDatetimeFilter extends ModelListFilter {\n constructor(params: ModelListFilterParams) {\n super(params);\n this.type = \"datetime\";\n if (this.label == \"\") {\n this.label = \"Sélectionnez par date/heure\";\n }\n if (this.help == \"\") {\n this.help = \"Date/heure cible\";\n }\n }\n}\n","import {ModelListFilter, ModelListFilterParams} from \"../../model-list-filter\";\n\nexport class ModelListDatetimerangeFilter extends ModelListFilter {\n constructor(params: ModelListFilterParams) {\n super(params);\n this.type = \"datetimerange\";\n if (this.label == \"\") {\n this.label = \"Sélectionnez par intervalle de date/heure\";\n }\n if (this.help == \"\") {\n this.help = \"Date/heure\";\n }\n }\n}\n","import {ModelListFilter, ModelListFilterParams} from \"../../model-list-filter\";\n\nexport class ModelListFlagsFilter extends ModelListFilter {\n constructor(params: ModelListFilterParams) {\n super(params);\n this.type = \"flags\";\n if (this.label == \"\") {\n this.label = \"Sélectionnez par étiquette\";\n }\n if (this.help == \"\") {\n this.help = \"Nom de l'étiquette\";\n }\n }\n}\n","import {\n ModelListFilter,\n ModelListFilterParams,\n} from '../../model-list-filter';\nimport { Observable } from 'rxjs';\n\nexport interface GeoSearchResult {\n score: number;\n label: string;\n lat: number;\n lng: number;\n}\n\nexport interface ModelListGeodistanceFilterParams\n extends ModelListFilterParams {\n geolocator: (pos: string) => Observable<GeoSearchResult[]>;\n geomap?: (pos: [number, number], dist: number) => string;\n scroll?: boolean;\n}\n\nexport class ModelListGeodistanceFilter\n extends ModelListFilter\n implements ModelListGeodistanceFilterParams\n{\n public geolocator: (pos: string) => Observable<GeoSearchResult[]>;\n public scroll!: boolean;\n\n constructor(params: ModelListGeodistanceFilterParams) {\n super(params);\n\n this.type = 'geodistance';\n this.geolocator = params.geolocator;\n if (this.label == '') {\n this.label = \"Par distance autour d'un point\";\n }\n if (this.help == '') {\n this.help = 'Ville & distance';\n }\n this.scroll = params.scroll !== undefined ? params.scroll : true;\n }\n}\n","import {\n ModelListFilter,\n ModelListFilterParams,\n} from '../../model-list-filter';\nimport { FilterData } from '../../../../data/data-query';\n\ninterface OperationDescriptor {\n name: string;\n label: string;\n operator: string;\n}\n\nexport const ModelListNumberOperations: OperationDescriptor[] = [\n { name: 'eq', label: '= (égal)', operator: '' },\n { name: 'lt', label: '< (inférieur)', operator: '_lt' },\n { name: 'gt', label: '> (supérieur)', operator: '_gt' },\n { name: 'lte', label: '<= (inférieur ou égal)', operator: '_lte' },\n { name: 'gte', label: '>= (supérieur ou égal)', operator: '_gte' },\n];\n\nexport interface ModelListNumberFilterParams extends ModelListFilterParams {\n operations?: string[];\n}\n\nexport class ModelListNumberFilter extends ModelListFilter {\n public operator = ModelListNumberOperations[0];\n public operations = ModelListNumberOperations;\n\n constructor(params: ModelListNumberFilterParams) {\n super(params as ModelListFilterParams);\n this.type = 'number';\n if (this.label == '') {\n this.label = 'Recherche par valeur';\n }\n if (this.help == '') {\n this.help = 'Valeur à rechercher';\n }\n const ops: OperationDescriptor[] = [];\n if (params.operations && params.operations.length > 0) {\n for (const op of params.operations) {\n for (const dop of this.operations) {\n if (op === dop.name) {\n ops.push(dop);\n }\n }\n }\n if (ops.length > 0) {\n this.operations = ops;\n this.operator = ops[0];\n }\n }\n }\n\n public setOperator(op: string) {\n for (let o of this.operations) {\n if (op === o.operator) {\n this.operator = o;\n }\n }\n }\n\n public override updateFilter(filter: FilterData): void {\n if (this._value !== undefined && this._value !== null) {\n filter[`${this.field}${this.operator.operator}`] = this.getValue();\n }\n }\n}\n","import {\n ModelListFilter,\n ModelListFilterParams,\n} from '../../model-list-filter';\nimport { IDispEditChoice } from '../../../../dispedit/dispedit/dispedit.constants';\nimport { DataModel } from '../../../../data/data-model';\nimport { DataModelType } from '../../../../data/data-collection';\nimport { isObservable, Observable, of } from 'rxjs';\n\nexport interface ModelListSelectFilterParams<T extends DataModel>\n extends ModelListFilterParams {\n choices?: IDispEditChoice[] | Observable<IDispEditChoice[]>;\n model?: DataModelType<T>;\n mfield?: string;\n}\n\nexport class ModelListSelectFilter<T extends DataModel>\n extends ModelListFilter\n implements ModelListSelectFilterParams<T>\n{\n public choices!: Observable<IDispEditChoice[]>;\n public model?: DataModelType<T>;\n public mfield?: string;\n\n constructor(params: ModelListSelectFilterParams<T>) {\n super(params);\n this.type = 'select';\n if (this.label == '') {\n this.label = 'Sélectionnez un élément';\n }\n if (this.help == '') {\n this.help = 'Choix par liste déroulante';\n }\n if (!params.choices && !params.model) {\n throw 'Missing choices for select filter';\n }\n if (!params.choices && params.model) {\n const m = new params.model();\n const f = m.FM(params.mfield || params.field);\n const ch = (f as any).choices;\n if (!ch) {\n throw 'No choices found for model/field';\n }\n this.choices = of(ch);\n } else {\n if (!isObservable(params.choices)) {\n this.choices = of(params.choices as IDispEditChoice[]);\n } else {\n this.choices = params.choices;\n }\n }\n }\n}\n","import {\n ModelListSelectFilter,\n ModelListSelectFilterParams,\n} from '../model-list-select-filter/model-list-select-filter';\nimport { DataModel } from '../../../../data/data-model';\n\nexport class ModelListSelectMultiFilter<\n T extends DataModel\n> extends ModelListSelectFilter<T> {\n public override multi = true;\n constructor(params: ModelListSelectFilterParams<T>) {\n super(params);\n\n this.type = 'selectmulti';\n if (this.label == '') {\n this.label = 'Sélectionnez un élément';\n }\n if (this.help == '') {\n this.help = 'Choix par liste déroulante (multiple)';\n }\n }\n}\n","import {ModelListFilter, ModelListFilterParams} from \"../../model-list-filter\";\n\nexport class ModelListTextFilter extends ModelListFilter {\n constructor(params: ModelListFilterParams) {\n super(params);\n this.type = \"text\";\n if (this.label == \"\") {\n this.label = \"Recherche par texte\";\n }\n if (this.help == \"\") {\n this.help = \"Texte à rechercher\";\n }\n }\n}\n","import {ModelListFilter, ModelListFilterParams} from \"../../model-list-filter\";\n\nexport class ModelListTreeFilter extends ModelListFilter {\n constructor(params: ModelListFilterParams) {\n super(params);\n this.type = \"tree\";\n if (this.label == \"\") {\n this.label = \"Sélectionnez dans la hiérarchie\";\n }\n if (this.help == \"\") {\n this.help = \"Texte à rechercher\";\n }\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { GeoSearchResult } from '../model-list-geodistance-filter';\n\nexport interface BanResults {\n type: 'FeatureCollection';\n version: string;\n features: {\n type: 'Feature';\n geometry: {\n type: 'Point';\n coordinates: [number, number];\n };\n properties: {\n label: string;\n score: number;\n id: string;\n type: string;\n name: string;\n postcode: string;\n citycode: string;\n x: number;\n y: number;\n population: number;\n city: string;\n context: string;\n importance: number;\n };\n }[];\n}\n\nexport class BanAdapter {\n constructor(private _http: HttpClient, private _baseUrl: string) {}\n\n public search(text: string): Observable<GeoSearchResult[]> {\n return this._http\n .get<BanResults>(`${this._baseUrl}`, { params: { q: text } })\n .pipe(\n map((r) => {\n const out: GeoSearchResult[] = [];\n for (const f of r.features) {\n out.push({\n score: f.properties.score,\n label: `${f.properties.label} (${f.properties.context})`,\n lat: f.geometry.coordinates[1],\n lng: f.geometry.coordinates[0],\n });\n }\n return out;\n })\n );\n }\n}\n","import { Component, Input, OnChanges, OnDestroy } from '@angular/core';\nimport { ModelList } from '../../model-list.service';\nimport {\n FormControl,\n ReactiveFormsModule,\n UntypedFormControl,\n} from '@angular/forms';\nimport { debounceTime, Subject, takeUntil } from 'rxjs';\nimport { NgbPaginationModule } from '@ng-bootstrap/ng-bootstrap';\nimport { CommonModule } from '@angular/common';\nimport { DataSource } from '@angular/cdk/collections';\nimport { DataModel } from '../../../data/data-model';\n\n@Component({\n selector: 'data-model-list-paginator',\n templateUrl: './model-list-paginator.component.html',\n styleUrls: ['./model-list-paginator.component.sass'],\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, NgbPaginationModule],\n})\nexport class ModelListPaginatorComponent<T extends DataModel>\n implements OnDestroy, OnChanges\n{\n @Input() public list!: ModelList<T>;\n @Input() public maxPages = 200;\n @Input() public hide = false;\n\n public perPageControl: FormControl = new FormControl<number>(10);\n public showDirectAccess = false;\n public directAccess: FormControl = new FormControl<number>(0);\n public curPage = 1;\n public curCount!: number;\n public pageSize!: number;\n public _unsubscribe = new Subject<void>();\n\n public onPageChange(page: number): void {\n if (!page) {\n return;\n }\n this.list.paginator.setPage(page);\n }\n\n public ngOnDestroy(): void {\n this._unsubscribe.next();\n this._unsubscribe.complete();\n }\n\n public ngOnChanges(): void {\n if (this.list) {\n this.perPageControl.setValue(this.list.paginator.getPageSize(), {\n emitEvent: false,\n });\n this.list.meta.pipe(takeUntil(this._unsubscribe)).subscribe((meta) => {\n if (meta.nav) {\n this.list.paginator.updatePage(meta.nav.page || 1);\n this.curPage = meta.nav.page || 1;\n this.curCount = meta.nav.count;\n this.list.paginator.updatePageSize(meta.nav.size);\n this.pageSize = this.list.paginator.getPageSize();\n this.perPageControl.setValue(this.pageSize, { emitEvent: false });\n }\n });\n\n this.perPageControl.valueChanges\n .pipe(takeUntil(this._unsubscribe))\n .subscribe((count) => {\n this.list.paginator.setPageSize(count);\n });\n\n this.directAccess.valueChanges\n .pipe(takeUntil(this._unsubscribe), debounceTime(400))\n .subscribe((count) => {\n this.list.paginator.setPage(+count);\n });\n }\n }\n}\n","\n<div class=\"row\" *ngIf=\"!hide\">\n <div class=\"col-sm-4\">\n <select class=\"form-select perpage\" [formControl]=\"perPageControl\">\n <option value=\"10\" *ngIf=\"maxPages&gt;=10\">10 / page</option>\n <option value=\"20\" *ngIf=\"maxPages&gt;=20\">20 / page</option>\n <option value=\"50\" *ngIf=\"maxPages&gt;=50\">50 / page</option>\n <option value=\"100\" *ngIf=\"maxPages&gt;=100\">100 / page</option>\n <option value=\"200\" *ngIf=\"maxPages&gt;=200\">200 / page</option>\n <option value=\"500\" *ngIf=\"maxPages&gt;=500\">500 / page</option>\n <option value=\"1000\" *ngIf=\"maxPages&gt;=1000\">1000 / page</option>\n <option value=\"2000\" *ngIf=\"maxPages&gt;=2000\">2000 / page</option>\n <option value=\"5000\" *ngIf=\"maxPages&gt;=5000\">5000 / page</option>\n <option value=\"10000\" *ngIf=\"maxPages&gt;=10000\">10000 / page</option>\n </select>\n </div>\n <div class=\"col-sm-5 pagination\" *ngIf=\"list\">\n <div class=\"text-xs-center\">\n <ngb-pagination [pageSize]=\"pageSize\" [collectionSize]=\"curCount\" [page]=\"curPage\" (pageChange)=\"onPageChange($event)\" [maxSize]=\"5\" [rotate]=\"true\"></ngb-pagination>\n </div>\n </div>\n <div class=\"col-sm-3 results\">\n <div>{{curCount}} résultats -<span (click)=\"showDirectAccess=!showDirectAccess\" role=\"button\">acces direct</span></div>\n <div *ngIf=\"showDirectAccess\">\n <input class=\"form-control\" [formControl]=\"directAccess\" type=\"number\" placeholder=\"Aller à la page\">\n </div>\n </div>\n</div>","import { Pipe, PipeTransform } from '@angular/core';\nimport { DataModel } from '../data/data-model';\n\n@Pipe({\n name: 'choice',\n standalone: true,\n})\nexport class ChoicePipe<T extends DataModel> implements PipeTransform {\n transform(\n value: T,\n field: string,\n mode: 'code' | 'desc' | 'both' = 'desc'\n ): string {\n if (!value) {\n return '-';\n }\n const fvalue = (value as any)[field];\n if (mode === 'code') {\n return `${fvalue}`;\n }\n const manager = value.FM(field);\n const choices = (manager as any).choices;\n if (!choices) {\n return `${fvalue}`;\n }\n for (const ch of choices) {\n if (ch.value === fvalue) {\n if (mode === 'desc') {\n return ch.desc;\n } else {\n return `[${fvalue}] ${ch.desc}`;\n }\n }\n }\n return `[${fvalue}] ??`;\n }\n}\n","import { Inject, LOCALE_ID, Pipe, PipeTransform } from '@angular/core';\nimport { DataModel } from '../data/data-model';\nimport { formatNumber } from '@angular/common';\n\nexport function isValue(\n value: number | string | null | undefined\n): value is number | string {\n return !(value == null || value === '' || value !== value);\n}\n\nexport function strToNumber(value: number | string): number {\n // Convert strings to numbers\n if (typeof value === 'string' && !isNaN(Number(value) - parseFloat(value))) {\n return Number(value);\n }\n if (typeof value !== 'number') {\n throw new Error(`${value} is not a number`);\n }\n return value;\n}\n\n@Pipe({\n name: 'factor',\n standalone: true,\n})\nexport class FactorPipe<T extends DataModel> implements PipeTransform {\n constructor(@Inject(LOCALE_ID) private _locale: string) {}\n\n transform(\n value: T | null,\n field: string,\n digitsInfo?: string,\n locale?: string\n ): string | null {\n if (!value) {\n return null;\n }\n locale = locale || this._locale;\n const fvalue = (value as any)[field];\n if (!isValue(fvalue)) return null;\n const manager = value.FM(field);\n let factor = (manager as any).factor;\n factor = factor || 1;\n const num = strToNumber(fvalue);\n return formatNumber(num / factor, locale, digitsInfo);\n }\n}\n","import {\n DEFAULT_CURRENCY_CODE,\n Inject,\n LOCALE_ID,\n Pipe,\n PipeTransform,\n} from '@angular/core';\nimport { DataModel } from '../data/data-model';\nimport { isValue, strToNumber } from './factor.pipe';\nimport { formatCurrency, getCurrencySymbol } from '@angular/common';\n\n@Pipe({\n name: 'factorc',\n standalone: true,\n})\nexport class FactorcPipe<T extends DataModel> implements PipeTransform {\n constructor(\n @Inject(LOCALE_ID) private _locale: string,\n @Inject(DEFAULT_CURRENCY_CODE) private _defaultCurrencyCode: string = 'USD'\n ) {}\n\n transform(\n value: T | null,\n field: string,\n currencyCode?: string,\n display?: 'code' | 'symbol' | 'symbol-narrow' | string,\n digitsInfo?: string,\n locale?: string\n ): string | null {\n if (!value) return null;\n const fvalue = (value as any)[field];\n if (!isValue(fvalue)) return null;\n locale = locale || this._locale;\n let currency: string = currencyCode || this._defaultCurrencyCode;\n if (display !== 'code') {\n if (display === 'symbol' || display === 'symbol-narrow') {\n currency = getCurrencySymbol(\n currency,\n display === 'symbol' ? 'wide' : 'narrow',\n locale\n );\n } else {\n currency = display!;\n }\n }\n\n const manager = value.FM(field);\n let factor = (manager as any).factor;\n factor = factor || 1;\n const num = strToNumber(fvalue);\n return formatCurrency(num, locale, currency, currencyCode, digitsInfo);\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { DataModel } from '../../data/data-model';\nimport { FilterData, Queryset } from '../../data/data-query';\nimport { Collection } from '../../data/data-collection';\nimport {\n debounceTime,\n distinctUntilChanged,\n Observable,\n Subject,\n takeUntil,\n} from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport { ReactiveFormsModule, UntypedFormControl } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { NgbTypeaheadModule } from '@ng-bootstrap/ng-bootstrap';\n\nexport type TplFun<T extends DataModel> = (data: T) => string;\n\n@Component({\n selector: 'data-fkselect',\n templateUrl: './fkselect.component.html',\n styleUrls: ['./fkselect.component.sass'],\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, NgbTypeaheadModule],\n})\nexport class FkselectComponent<T extends DataModel, R extends DataModel>\n implements OnInit, OnDestroy\n{\n // Model field value & update data\n @Input() public model?: T;\n @Input() public field?: string;\n @Input() public edit = false;\n // Raw value\n @Input() public value?: R;\n\n @Input() public queryset?: Queryset<R>;\n @Input() public collection?: Collection<R>;\n @Input() public update: boolean = false;\n @Input() public filter: FilterData = {};\n @Input() public mode: 'autocomplete' | 'select' | 'auto' = 'auto';\n @Input() public display?: string | TplFun<R>;\n @Input() public search = 'search';\n\n // Display\n @Input() public label = '';\n @Input() public placeholder = '';\n @Input() public inputClasses: string[] | string = [];\n\n @Output() public selected = new EventEmitter<T>();\n @Output() public cancelled = new EventEmitter<void>();\n @Output() public cleared = new EventEmitter<void>();\n public fc!: UntypedFormControl;\n public searchFn = this._search.bind(this);\n public displayFn = this._display.bind(this);\n private _subscription = new Subject<void>();\n private _tpl!: TplFun<R>;\n\n constructor() {}\n\n public ngOnDestroy(): void {\n this._subscription.next();\n this._subscription.complete();\n }\n\n public ngOnInit(): void {\n // Create queryset if not given\n // queryset is create through model\n if (!this.queryset && this.collection) {\n this.queryset = this.collection.queryset();\n } else if (!this.queryset && this.model && this.model._collection) {\n this.collection = this.model._collection;\n this.queryset = this.collection.queryset();\n }\n this.fc = new UntypedFormControl('');\n this.fc.valueChanges\n .pipe(takeUntil(this._subscription), distinctUntilChanged())\n .subscribe((value) => {\n if (value) {\n this.selected.emit(value);\n }\n });\n if (this.display) {\n if (this.display && typeof this.display === 'string') {\n this._tpl = (model: R) => `${(model as any)[this.display as string]}`;\n } else if (this.display && typeof this.display === 'function') {\n this._tpl = this.display.bind(this);\n }\n } else {\n this._tpl = (model: R) =>\n `${\n (model as any)['name'] ||\n (model as any)['title'] ||\n (model as any)['id']\n }`;\n }\n }\n\n public clearAction(): void {\n this.cleared.emit();\n }\n\n /**\n * Display function. Uses descfield or desc tpl (lodash template using model fields).\n */\n private _display(x: any): any {\n if (x) {\n if (x._display) {\n if (x._display instanceof Function) {\n return x._display();\n } else {\n return x._display;\n }\n }\n if (this._tpl) {\n return this._tpl(x);\n }\n }\n return '';\n }\n\n private _search(text$: Observable<string>): Observable<any> {\n return text$.pipe(\n takeUntil(this._subscription),\n debounceTime(750),\n distinctUntilChanged(),\n switchMap((term) => {\n const f: any = {};\n for (const k of Object.keys(this.filter)) {\n if (this.filter[k] !== null || this.filter[k] !== undefined) {\n f[k] = this.filter[k];\n }\n }\n f[this.search] = term;\n const qs = this.queryset as Queryset<any>;\n qs.filter(f, true);\n return qs.get();\n })\n );\n }\n}\n","\n<div class=\"form-group\">\n <label *ngIf=\"label\">{{label}}</label>\n <div class=\"input-group\">\n <input class=\"form-control\" [formControl]=\"fc\" [placeholder]=\"placeholder\" [ngbTypeahead]=\"searchFn\" [editable]=\"false\" [focusFirst]=\"true\" [inputFormatter]=\"displayFn\" [resultFormatter]=\"displayFn\" (keyup.escape)=\"cancelled.emit()\">\n <div class=\"input-group-text\"><i class=\"bi bi-trash float-end pointer\" (click)=\"clearAction()\"></i></div>\n </div>\n</div>","import {\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { FilterData, Queryset } from '../../data/data-query';\nimport { Collection } from '../../data/data-collection';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n UntypedFormControl,\n} from '@angular/forms';\nimport {\n debounceTime,\n distinctUntilChanged,\n firstValueFrom,\n Observable,\n Subject,\n takeUntil,\n} from 'rxjs';\nimport { TplFun } from '../fkselect/fkselect.component';\nimport { DataModel } from '../../data/data-model';\nimport { switchMap } from 'rxjs/operators';\nimport { CommonModule } from '@angular/common';\nimport { NgbTypeaheadModule } from '@ng-bootstrap/ng-bootstrap';\n\n@Component({\n selector: 'data-m2mselect',\n templateUrl: './m2mselect.component.html',\n styleUrls: ['./m2mselect.component.sass'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: M2mselectComponent,\n },\n ],\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, NgbTypeaheadModule],\n})\nexport class M2mselectComponent<T extends DataModel, R extends DataModel>\n implements OnDestroy, OnInit, ControlValueAccessor\n{\n // Model field value & update data\n @Input() public model?: T;\n @Input() public field?: string;\n @Input() public edit = false;\n // Raw value\n @Input() public values!: R[];\n public pks: number[] = [];\n public disabled = false;\n // Fk fields, either model / queryset / collection must be given\n @Input() public queryset?: Queryset<R>;\n @Input() public collection?: Collection<R>;\n @Input() public filter: FilterData = {};\n @Input() public mode: 'autocomplete' | 'select' | 'auto' = 'auto';\n @Input() public display?: string | TplFun<R>;\n @Input() public search = 'search';\n // Display\n @Input() public label = '';\n @Input() public placeholder = '';\n @Input() public emptyLabel = '';\n @Input() public inputClasses: string[] | string = [];\n // Outputs\n @Output() public added = new EventEmitter<R>();\n @Output() public removed = new EventEmitter<R>();\n @Output() public cancelled = new EventEmitter<void>();\n @Output() public cleared = new EventEmitter<void>();\n @Output() public detailsChanged = new EventEmitter<R[]>();\n @Output() public changed = new EventEmitter<number[]>();\n\n public fc!: UntypedFormControl;\n public searchFn = this._search.bind(this);\n public displayFn = this._display.bind(this);\n private touched = false;\n private _subscription = new Subject<void>();\n private _tpl!: TplFun<R>;\n\n /**\n * Control value accessor onChange dummy callback;\n * @param fks\n */\n public onChange = (fks: number[]) => {};\n\n /**\n * Control value accessor onTouched dummy callback;\n */\n public onTouched = () => {};\n\n /**\n * On Destroy clears subscriptions.\n */\n public ngOnDestroy(): void {\n this._subscription.next();\n this._subscription.complete();\n }\n\n /**\n * OnChange register from controlValueAccessor\n * @param onChange callback\n */\n registerOnChange(onChange: any) {\n this.onChange = onChange;\n }\n\n /**\n * OnTouched register from controlValueAccessor\n * @param onTouched callback\n */\n registerOnTouched(onTouched: any) {\n this.onTouched = onTouched;\n }\n\n /**\n * OnInit :\n * - ensures queryset is available\n * - creates form control for input\n * - creates display function\n * - ensure values are set from any source\n */\n public ngOnInit(): void {\n // Create queryset if not given\n // queryset is create through model\n if (!this.queryset && this.collection) {\n this.queryset = this.collection.queryset();\n } else if (!this.queryset && this.model && this.model._collection) {\n this.collection = this.model._collection;\n this.queryset = this.collection.queryset();\n }\n if (!this.queryset) {\n throw Error('queryset is mandatory for m2m select');\n }\n // Create form control for typeahead and subscribe for changes\n this.fc = new UntypedFormControl('');\n this.fc.valueChanges\n .pipe(takeUntil(this._subscription), distinctUntilChanged())\n .subscribe((value) => {\n if (value) {\n this.onAdd(value);\n }\n });\n // Set display function\n if (this.display) {\n if (this.display && typeof this.display === 'string') {\n this._tpl = (model: R) => `${(model as any)[this.display as string]}`;\n } else if (this.display && typeof this.display === 'function') {\n this._tpl = this.display.bind(this);\n }\n } else {\n this._tpl = (model: R) =>\n `${\n (model as any)['name'] ||\n (model as any)['title'] ||\n (model as any)['id']\n }`;\n }\n // Get values from model if not already given\n // TODO: check if this is necessary\n if (!this.values && this.model && this.field) {\n this.values = (this.model as any)[this.field + '_details'];\n }\n if (this.values === undefined) {\n console.error('no values available for ', this.model, this.field);\n throw Error('no values available');\n }\n }\n\n /**\n * Remove a value.\n * Emits detailsChanged, changed and removed signals.\n * @param i instance to be removed\n */\n public onRemove(i: R) {\n if (!this.disabled) {\n this.markAsTouched();\n const ps = this.pks.indexOf(i.id);\n this.pks.splice(ps, 1);\n this.values.splice(ps, 1);\n this.detailsChanged.emit(this.values);\n this.changed.emit(this.pks);\n this.removed.emit(i);\n this.onChange(this.pks);\n }\n }\n\n /**\n * Add a value.\n * Emits detailsChanged, changed and added signals.\n * @param i instance to be added.\n */\n public onAdd(i: R) {\n if (!this.disabled) {\n this.markAsTouched();\n this.pks.push(i.id);\n this.values.push(i);\n this.detailsChanged.emit(this.values);\n this.changed.emit(this.pks);\n this.added.emit(i);\n this.onChange(this.pks);\n }\n }\n\n /**\n * Clear all values.\n * Emits detailsChanged, changed and cleared signals.\n */\n public onClear() {\n if (!this.disabled) {\n this.markAsTouched();\n this.pks = [];\n this.values = [];\n this.detailsChanged.emit(this.values);\n this.changed.emit(this.pks);\n this.cleared.emit();\n this.onChange(this.pks);\n }\n }\n\n /**\n * Write value from controlValueAccessor.\n * @param pks\n */\n async writeValue(pks: number[]) {\n this.pks = pks;\n await this._getDisplayValues(pks);\n }\n\n /**\n * Mark as touched.\n */\n public markAsTouched() {\n if (!this.touched) {\n this.onTouched();\n this.touched = true;\n }\n }\n\n /**\n * Mark as disabled.\n * @param disabled\n */\n setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /**\n * Retrieve display values for current set of pks.\n * Eventually fetches items from collection.\n * Emits detailsChanged signal.\n * @param pks list of current pks.\n * @private\n */\n private async _getDisplayValues(pks: number[] = []) {\n const values: R[] = [];\n for (const k of pks) {\n let found = false;\n for (let v of this.values) {\n if (v.id == k) {\n values.push(v);\n found = true;\n break;\n }\n }\n if (!found) {\n if (this.collection) {\n values.push(await firstValueFrom(this.collection.fetch(k)));\n } else {\n values.push({ id: k, _display: 'Unknown' } as any);\n }\n }\n }\n this.values = values;\n this.detailsChanged.next(this.values);\n }\n\n /**\n * Display function. Uses descfield or desc tpl (lodash template using model fields).\n */\n private _display(x: any): any {\n if (x) {\n if (x._display) {\n if (x._display instanceof Function) {\n return x._display();\n } else {\n return x._display;\n }\n }\n if (this._tpl) {\n return this._tpl(x);\n }\n }\n return '';\n }\n\n /**\n * Search function.\n * @param text$\n * @private\n */\n private _search(text$: Observable<string>): Observable<any> {\n return text$.pipe(\n takeUntil(this._subscription),\n debounceTime(750),\n distinctUntilChanged(),\n switchMap((term) => {\n const f: any = {};\n for (const k of Object.keys(this.filter)) {\n if (this.filter[k] !== null || this.filter[k] !== undefined) {\n f[k] = this.filter[k];\n }\n }\n f[this.search] = term;\n const qs = this.queryset as Queryset<any>;\n qs.filter(f, true);\n return qs.get();\n })\n );\n }\n}\n","\n<div class=\"form-group\">\n <label *ngIf=\"label\">{{label}}</label>\n <div class=\"input-group\">\n <input class=\"form-control\" [formControl]=\"fc\" [placeholder]=\"placeholder\" [ngbTypeahead]=\"searchFn\" [editable]=\"false\" [focusFirst]=\"true\" [inputFormatter]=\"displayFn\" [resultFormatter]=\"displayFn\" (keyup.escape)=\"cancelled.emit()\">\n <div class=\"input-group-text\"><i class=\"bi bi-trash float-end pointer\" (click)=\"cleared.emit()\"></i></div>\n </div>\n <div *ngFor=\"let i of values\"><i class=\"bi bi-trash ms-2 float-end\" (click)=\"onRemove(i)\"></i>{{displayFn(i)}}</div>\n</div>","import {Inject, Injectable, InjectionToken, NgZone, Optional} from \"@angular/core\";\nimport {Observable, ReplaySubject, Subscription, timer} from \"rxjs\";\n\nexport const enum TYPE {\n SUCCESS, INFO, WARNING, DANGER\n}\n\nexport enum DEFAULT_TIMEOUTS {\n SUCCESS = 3000,\n INFO = 4000,\n WARNING = 10000,\n DANGER = 30000\n}\n\nexport enum STATUS {\n UNDISP, DISP, ACK\n}\n\nconst DEFAULT_MESSAGE_TIMEOUT = 5000;\n\nexport interface ISoundTypes {\n [index: string]: string\n}\n\nexport const DATA_MESSAGE_SOUNDS = new InjectionToken<ISoundTypes>(\"data.message.sounds\");\n\n\nexport class Message {\n public status: string = STATUS[STATUS.UNDISP];\n public showTrace = false;\n\n constructor(public title: string,\n public type: TYPE = TYPE.INFO,\n public message: string = \"\",\n public trace: any = null,\n public ttl: number = DEFAULT_MESSAGE_TIMEOUT) {\n }\n\n public get style(): string {\n if (this.type === TYPE.DANGER) {\n return \"alert alert-dismissible alert-danger\";\n }\n if (this.type === TYPE.INFO) {\n return \"alert alert-dismissible alert-info\";\n }\n if (this.type === TYPE.WARNING) {\n return \"alert alert-dismissible alert-warning\";\n }\n if (this.type === TYPE.SUCCESS) {\n return \"alert alert-dismissible alert-success\";\n }\n return \"alert alert-dismissible alert-success\";\n }\n\n public ack(): void {\n this.status = STATUS[STATUS.ACK];\n }\n}\n\n\n@Injectable({\n providedIn: \"root\"\n})\nexport class DataMessageService {\n public _messages$: ReplaySubject<Message[]> = new ReplaySubject<Message[]>(1);\n private _messages: Message[] = [];\n private _timer!: Observable<any>;\n private _subscription!: Subscription;\n\n constructor(public ngZone: NgZone,\n @Optional() @Inject(DATA_MESSAGE_SOUNDS) public sounds: ISoundTypes) {\n this.init();\n }\n\n public get current(): Observable<Message[]> {\n return this._messages$.asObservable();\n }\n\n public init(): void {\n let changed = false;\n if (!this._timer) {\n this.ngZone.runOutsideAngular(() => {\n this._timer = timer(500, 500);\n this._subscription = this._timer.subscribe(() => {\n for (const m of this._messages) {\n m.ttl -= 500;\n if (m.ttl <= 0) {\n changed = true;\n }\n }\n if (changed) {\n this.ngZone.run(() => {\n const out: Message[] = [];\n for (const m of this._messages) {\n if (m.ttl >= 0) {\n out.push(m);\n }\n }\n this._messages = out;\n this._notify();\n });\n }\n });\n });\n }\n }\n\n public close(): void {\n this._subscription.unsubscribe();\n }\n\n public success(title: string, message: string = \"\", trace: any = null, timeout: number = DEFAULT_TIMEOUTS.SUCCESS): void {\n this._messages.push(new Message(title, TYPE.SUCCESS, message, trace, timeout));\n this.play(\"success\");\n this._notify();\n }\n\n public info(title: string, message: string = \"\", trace: any = null, timeout: number = DEFAULT_TIMEOUTS.INFO): void {\n this._messages.push(new Message(title, TYPE.INFO, message, trace, timeout));\n this.play(\"info\");\n this._notify();\n }\n\n public warning(title: string, message: string = \"\", trace: any = null, timeout: number = DEFAULT_TIMEOUTS.WARNING): void {\n this._messages.push(new Message(title, TYPE.WARNING, message, trace, timeout));\n this.play(\"warning\")\n this._notify();\n }\n\n public danger(title: string, message: string = \"\", trace: any = null, timeout: number = DEFAULT_TIMEOUTS.DANGER): void {\n this._messages.push(new Message(title, TYPE.DANGER, message, trace, DEFAULT_TIMEOUTS.DANGER));\n this.play(\"error\")\n this._notify();\n }\n\n public error(title: string, message: string = \"\", trace: any = null): void {\n this.danger(title, message, trace);\n }\n\n public debug(title: string, message: string = \"\", trace: any = null): void {\n console.log(title, message, trace);\n }\n\n public ack(message: Message): void {\n message.ack();\n this._notify();\n }\n\n public play(type: string = \"notify\") {\n if (this.sounds && this.sounds[type]) {\n const audio = new Audio(this.sounds[type]);\n audio.play();\n }\n }\n\n private _notify(): void {\n const out: Message[] = [];\n for (const message of this._messages) {\n if ((message.status === STATUS[STATUS.UNDISP]) ||\n (message.status === STATUS[STATUS.DISP])) {\n message.status = STATUS[STATUS.DISP];\n out.push(message);\n }\n }\n this._messages$.next(out);\n }\n\n}\n","import {\n Component,\n EventEmitter,\n Inject,\n Input,\n OnChanges,\n OnInit,\n Optional,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { DataModel } from '../../data/data-model';\nimport { BaseFieldManager } from '../../data/fields/base';\nimport {\n ReactiveFormsModule,\n UntypedFormControl,\n UntypedFormGroup,\n} from '@angular/forms';\nimport { firstValueFrom } from 'rxjs';\nimport {\n DISPEDIT_DISPLAY_TYPES,\n DISPEDIT_EDITOR_TYPES,\n IDispEditChoice,\n} from './dispedit.constants';\nimport { FilterData, Queryset } from '../../data/data-query';\nimport { Collection } from '../../data/data-collection';\nimport { FkselectComponent, TplFun } from '../fkselect/fkselect.component';\nimport { DecimalFieldManager } from '../../data/fields/numbers';\nimport {\n BootstrapDataDisplayConfig,\n DATA_DISPLAY_CONFIG,\n DataDisplayConfig,\n} from '../../data/data-parameters';\nimport { DataMessageService } from '../../messages/message.service';\nimport { CommonModule } from '@angular/common';\nimport {\n NgbOffcanvasModule,\n NgbTypeaheadModule,\n} from '@ng-bootstrap/ng-bootstrap';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { M2mselectComponent } from '../m2mselect/m2mselect.component';\nimport { ChoicePipe } from '../choice.pipe';\n\n@Component({\n selector: 'data-dispedit',\n templateUrl: './dispedit.component.html',\n styleUrls: ['./dispedit.component.sass'],\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FkselectComponent,\n M2mselectComponent,\n ChoicePipe,\n ],\n})\nexport class DispeditComponent<FT, T extends DataModel, R extends DataModel>\n implements OnInit, OnChanges\n{\n /** Model (mandatory) */\n @Input() public model!: T;\n /** Field (mandatory) */\n @Input() public field!: string;\n /** External form */\n @Input() public form?: UntypedFormGroup;\n /**\n * Starting edit mode\n * If mode is inline, edit is always true.\n */\n @Input() public edit = false;\n /**\n * Save updated values ?\n * If not given, default value depends on mode :\n * - save if mode is dd\n * - don't save if mode is inline\n */\n public save?: boolean;\n /**\n * Display mode\n * - dd provides display / edit within a dt/dd block\n * - inline (to be renamed to form) provides a (label? and) form control\n * */\n @Input() public mode: 'dd' | 'inline' | 'form' = 'inline';\n /**\n * Custom choices\n * If provided, a select form control will be used instead of base editor\n */\n @Input() public choices: IDispEditChoice[] = [];\n /** Custom input classes */\n @Input() public inputClasses!: string[] | string;\n /** Override editor, if provided */\n @Input() public editor?: DISPEDIT_EDITOR_TYPES;\n /** Override viewer, if provided */\n @Input() public viewer?: DISPEDIT_DISPLAY_TYPES;\n /** Override default value */\n @Input() public default?: any;\n /**\n * Override placeholder, if provided.\n * By default, manager.description is used\n */\n @Input() public placeholder: string = '';\n /**\n * Override help, if provided.\n * By default, manager.help is used.\n */\n @Input() public help: string = '';\n /**\n * Hide label (for inline forms)\n */\n @Input() public hideLabel: boolean = false;\n\n // FK fields\n // TODO: rename as fk_ or related_\n /** Fk queryset */\n @Input() public queryset?: Queryset<R>;\n /** Fk collection */\n @Input() public collection?: Collection<R>;\n /** Fk display */\n @Input() public display?: string | TplFun<R>;\n /** Fk filter */\n @Input() public filter: FilterData = {};\n\n /** Output emitter, output model on every change */\n @Output() public changed = new EventEmitter<T>();\n\n /** Field manager */\n public manager?: BaseFieldManager<FT>;\n\n /** Text value used for display */\n public txtValue?: string;\n /** Text values used for many displays */\n public txtValues?: string[];\n\n /** Computed editor type */\n public realEditor: DISPEDIT_EDITOR_TYPES = 'input.text';\n /** Computed display type */\n public realDisplay: DISPEDIT_DISPLAY_TYPES = 'text';\n /** Current disp raw value */\n public dispValue?: any;\n /** Computed chocies type */\n public realChoices?: IDispEditChoice[] = [];\n /** Computed help */\n public realHelp!: string;\n /** Computed placeholder */\n public realPlaceholder!: string;\n /** Computed required */\n public required!: boolean;\n /** Computed default value */\n public realDefault!: any;\n\n public m2mValues?: any[];\n\n // Local form group\n public fg?: UntypedFormGroup;\n\n // Display template function\n private _tpl!: TplFun<R>;\n\n /**\n * Constructor, can be given DATA_DISPLAY_CONFIG injection token to override display classes.\n * By default, bs5 config is used\n * @param dconf DataDisplayConfig item\n * @param _msgs messages service\n */\n constructor(\n @Optional() @Inject(DATA_DISPLAY_CONFIG) public dconf: DataDisplayConfig,\n private _msgs: DataMessageService\n ) {\n if (this.dconf === null) {\n this.dconf = BootstrapDataDisplayConfig;\n }\n }\n\n /**\n * Init sequence.\n * - Sets mode\n * - Sets display function\n * - Loads manager\n * - Run misc checks on special values\n * - Get help, placeholder strings\n */\n public ngOnInit() {\n this._setMode();\n }\n\n /**\n * Upgrade all values on any change.\n * @param changes\n */\n public ngOnChanges(changes: SimpleChanges): void {\n this._setDisplayFn();\n this.manager = this.model?.FM(this.field);\n this.required = this.manager?.required || false;\n this._checks();\n this.realHelp = this.help || this.manager?.help || '';\n this.realPlaceholder = this.placeholder || this.manager?.description || '';\n this.realDefault = this.default;\n this.save = this.save === undefined ? this.mode === 'dd' : this.save;\n if (!this.edit && this.mode === 'dd') {\n this.enableDisplayMode();\n } else {\n this.enableEditMode();\n }\n }\n\n /**\n * Set up display mode.\n * - get choices if available\n * - get display type\n * - process current value for display\n * - set display classes\n */\n public enableDisplayMode() {\n this._getChoices();\n this._getRealDisplay();\n this._getDisplayValue();\n this._setDisplayClasses();\n this.edit = false;\n }\n\n /**\n * Set up edit mode :\n * - get choices if available\n * - get editor type\n * - prepare form controle\n * - set form control value\n * - update form control classes\n */\n public enableEditMode() {\n this._getChoices();\n this._getRealEditor();\n this._setFormControl();\n this._setFormControlValue();\n this._setEditorClasses();\n this.edit = true;\n }\n\n /**\n * Update model field from form control value (if value is valid).\n * If save boolean is true, save values to API.\n */\n public async update(): Promise<void> {\n if (this.fg && this.model && this.fg.valid) {\n switch (this.realEditor) {\n case 'input.decimal':\n (this.model as any)[this.field] = Math.round(\n this.fg.value[this.field] * (this.manager as any).factor\n );\n break;\n default:\n (this.model as any)[this.field] = this.fg.value[this.field];\n }\n if (this.save === true) {\n return this._save();\n }\n }\n }\n\n unsetEdit() {\n if (this.mode == 'dd' && this.edit) {\n this.edit = false;\n delete this.fg;\n }\n }\n\n toggleEdit() {\n if (!this.edit) {\n this.enableEditMode();\n } else {\n this.unsetEdit();\n this.enableDisplayMode();\n }\n }\n\n /**\n * Reset field to default value\n * TODO: check if edit mode needs to be changed / saved\n */\n public async setDefault(): Promise<void> {\n if (this.model) {\n (this.model as any)[this.field] = this.realDefault;\n this.fg!.controls[this.field].setValue(this.realDefault, {\n emitEvent: false,\n });\n }\n await this.update();\n }\n\n public async selectedRefItem($event: T | null) {\n if (this.model) {\n if ($event !== null) {\n (this.model as any)[this.field] = $event.id;\n (this.model as any)[`${this.field}_details`] = $event;\n if (this.form) {\n const fv: { [index: string]: number | null } = {};\n fv[this.field] = $event.id;\n this.form.patchValue(fv, { emitEvent: true });\n }\n } else {\n (this.model as any)[this.field] = null;\n delete (this.model as any)[`${this.field}_details`];\n if (this.form) {\n const fv: { [index: string]: number | null } = {};\n fv[this.field] = null;\n this.form.patchValue(fv, { emitEvent: true });\n }\n }\n return this._save();\n }\n }\n\n public onM2MValuesChanges(v: any[]) {\n this.m2mValues = v;\n }\n\n private _checks() {\n if (this.editor === 'quill' && !this.viewer) {\n this.viewer = 'quill';\n }\n }\n\n /**\n * Save value to database, only if model have an id.\n * If mode is dd, toggle edit / display mode.\n * @private\n */\n private async _save(): Promise<void> {\n if (this.model) {\n if (this.model.id) {\n try {\n await firstValueFrom(\n this.model.update([this.field], { updateModel: true })\n );\n } catch (e) {\n console.error(e);\n let msg: string = '';\n if (e && (e as any).error && (e as any).error[this.field]) {\n msg = `${(e as any).error[this.field]}`;\n }\n this._msgs.error(\n \"Erreur lors de l'enregistrement\",\n msg,\n JSON.stringify(e)\n );\n return;\n }\n }\n if (this.mode === 'dd') {\n this.unsetEdit();\n this.enableDisplayMode();\n }\n this.changed.next(this.model);\n }\n }\n\n private _display(x: any): any {\n if (x) {\n if (x._display) {\n if (x._display instanceof Function) {\n return x._display();\n } else {\n return x._display;\n }\n }\n if (this._tpl) {\n return this._tpl(x);\n }\n }\n return '';\n }\n\n /**\n * Set display mode based on current display config\n * @private\n */\n private _setMode() {\n if (!this.mode) {\n this.mode = this.dconf.dispEdit.defaultMode;\n }\n }\n\n private _setDisplayFn() {\n if (this.display) {\n if (this.display && typeof this.display === 'string') {\n this._tpl = (model: R) => `${(model as any)[this.display as string]}`;\n } else if (this.display && typeof this.display === 'function') {\n this._tpl = this.display.bind(this);\n }\n } else {\n this._tpl = (model: R) =>\n `${\n (model as any)['name'] ||\n (model as any)['title'] ||\n (model as any)['id']\n }`;\n }\n }\n\n private _getChoices() {\n // Set display choices\n let choices: IDispEditChoice[] | undefined;\n if (this.choices && this.choices.length) {\n choices = this.choices;\n } else if ((this.manager as any)?.choices) {\n choices = (this.manager as any)?.choices;\n }\n // Set display value\n if (choices && choices.length > 0) {\n this.realChoices = choices;\n } else {\n delete this.realChoices;\n }\n }\n\n private _getRealDisplay() {\n this.realDisplay = this.viewer\n ? this.viewer\n : this.manager?.displayType\n ? this.manager.displayType\n : 'text';\n if (this.realChoices && this.realChoices.length) {\n this.realDisplay = 'choice';\n }\n }\n\n private _getRealEditor() {\n this.realEditor = this.editor\n ? this.editor\n : this.manager?.editorType || 'input.text';\n if (this.realChoices && this.realChoices.length) {\n this.realEditor = 'select';\n }\n }\n\n private _setFormControl() {\n if (!this.form) {\n const fgc: { [index: string]: UntypedFormControl } = {};\n fgc[this.field] = this.model.FC(this.field);\n this.fg = new UntypedFormGroup(fgc);\n } else {\n this.fg = this.form;\n this.fg.setControl(this.field, this.model.FC(this.field), {\n emitEvent: false,\n });\n }\n if (this.mode === 'inline') {\n this.fg.valueChanges.subscribe(() => {\n this.update();\n });\n }\n }\n\n private _setFormControlValue() {\n switch (this.realEditor) {\n case 'input.datetime':\n const value = (this.model as any)[this.field];\n const now = new Date();\n const localnow = new Date(\n now.getTime() - now.getTimezoneOffset() * 60000\n );\n if (value === null) {\n this.fg!.controls[this.field].setValue(null, { emitEvent: true });\n } else {\n const time = value ? new Date(value) : new Date();\n const offset = time.getTimezoneOffset();\n const localtime = new Date(time.getTime() - offset * 60000);\n this.fg!.controls[this.field].setValue(\n localtime.toISOString().substring(0, 16),\n { emitEvent: true }\n );\n }\n this.realDefault =\n this.default || this.manager?.required\n ? localnow.toISOString().substring(0, 16)\n : null;\n break;\n case 'input.date':\n const dt = this.model.toJson([this.field])[this.field];\n this.fg!.controls[this.field].setValue(dt);\n break;\n case 'input.decimal':\n this.fg!.controls[this.field].setValue(\n (this.model as any)[this.field] /\n ((this.manager as unknown as DecimalFieldManager).factor || 1)\n );\n }\n }\n\n private _setEditorClasses() {\n // FIXME: use realEditorClasses\n if (!this.inputClasses) {\n this.inputClasses =\n this.dconf.dispEdit.inputClasses[this.realEditor] || '';\n }\n }\n\n private _getDisplayValue() {\n const value = (this.model as any)[this.field];\n this.dispValue = value;\n if (this.realChoices) {\n for (const c of this.realChoices) {\n if (c === value) {\n this.txtValue = c as any;\n return;\n } else if (c.value && c.value === value) {\n this.txtValue = c.desc;\n return;\n }\n }\n }\n // Set display text depending on value and realDisplay value\n if (value === true) {\n this.txtValue = 'OUI';\n } else if (value === false) {\n this.txtValue = 'NON';\n } else if (value === undefined || value === null) {\n this.txtValue = 'non défini';\n } else {\n switch (this.realDisplay) {\n case 'fkdetails':\n const details = (this.model as any)[`${this.field}_details`] as any;\n this.txtValue = this._display(details);\n break;\n case 'm2mdetails':\n const m2mDetails =\n this.m2mValues ||\n ((this.model as any)[`${this.field}_details`] as any[]);\n this.txtValues = [];\n for (const v of m2mDetails) {\n this.txtValues.push(this._display(v));\n }\n break;\n case 'decimal':\n this.txtValue = `${\n value /\n ((this.manager as unknown as DecimalFieldManager).factor || 1)\n }`;\n break;\n default:\n this.txtValue = `${value}`;\n }\n }\n }\n\n private _setDisplayClasses() {}\n}\n","\n<ng-template #titleTpl>\n <ng-content></ng-content>\n</ng-template>\n<ng-template #dispTpl>\n <ng-container [ngSwitch]=\"realDisplay\"><span class=\"editable disp-text\" *ngSwitchCase=\"'text'\" (click)=\"enableEditMode()\">{{txtValue}}</span><span class=\"editable disp-choice\" *ngSwitchCase=\"'choice'\" (click)=\"enableEditMode()\">{{txtValue}}</span><span class=\"editable disp-decimal\" *ngSwitchCase=\"'decimal'\" (click)=\"enableEditMode()\">{{txtValue}}</span><span class=\"editable disp-boolean\" *ngSwitchCase=\"'boolean'\" (click)=\"enableEditMode()\">{{txtValue}}</span><span class=\"editable disp-fkdetails\" *ngSwitchCase=\"'fkdetails'\" (click)=\"enableEditMode()\">\n <div class=\"fkitem\">{{txtValue}}</div></span><span class=\"editable disp-m2mdetails\" *ngSwitchCase=\"'m2mdetails'\" (click)=\"enableEditMode()\">\n <div class=\"m2mitem\" *ngFor=\"let v of txtValues\">{{v}}</div></span><span class=\"editable disp-datetime\" *ngSwitchCase=\"'datetime'\" (click)=\"enableEditMode()\">\n <ng-container *ngIf=\"dispValue\">{{txtValue|date:'short'}}</ng-container>\n <ng-container *ngIf=\"!dispValue\">{{txtValue}}</ng-container></span><span class=\"editable disp-datetime\" *ngSwitchCase=\"'date'\" (click)=\"enableEditMode()\">\n <ng-container *ngIf=\"dispValue\">{{txtValue|date:'shortDate'}}</ng-container>\n <ng-container *ngIf=\"!dispValue\">{{txtValue}}</ng-container></span>\n <!--span.editable.disp-quill(*ngSwitchCase=\"'quill'\", (click)=\"enableEditMode()\")-->\n <!-- quill-view-html([content]=\"txtValue||''\")-->\n </ng-container>\n</ng-template>\n<ng-template #editTpl let-form=\"form\">\n <ng-container [ngSwitch]=\"realEditor\">\n <ng-container *ngSwitchCase=\"'input.text'\">\n <input type=\"text\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" [placeholder]=\"realPlaceholder\">\n <div class=\"form-text\" *ngIf=\"realHelp\">{{realHelp}}<span class=\"ms-1\" *ngIf=\"required\">(requis)</span></div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['minlength']\">Trop court : {{$any(manager).minLength}} caractères minimum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['maxlength']\">Trop long : {{$any(manager).maxLength}} caractères maximum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['pattern']\">Format invalide...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.email'\">\n <input type=\"email\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" [placeholder]=\"realPlaceholder\">\n <div class=\"form-text\" *ngIf=\"realHelp\">{{realHelp}}<span class=\"ms-1\" *ngIf=\"required\">(requis)</span></div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['minlength']\">Trop court : {{$any(manager).minLength}} caractères minimum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['maxlength']\">Trop long : {{$any(manager).maxLength}} caractères maximum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['pattern']\">Format invalide...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['email']\">Format d'email invalide...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.password'\">\n <input type=\"password\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" [placeholder]=\"realPlaceholder\">\n <div class=\"form-text\" *ngIf=\"realHelp\">{{realHelp}}<span class=\"ms-1\" *ngIf=\"required\">(requis)</span></div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['minlength']\">Trop court : {{$any(manager).minLength}} caractères minimum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['maxlength']\">Trop long : {{$any(manager).maxLength}} caractères maximum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['pattern']\">Format invalide...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.datetime'\">\n <input type=\"datetime-local\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" (keyup.enter)=\"update()\">\n <div class=\"form-text\">{{realHelp}}</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['minDate']\">Doit être postérieur à {{$any(manager).min|date:'short'}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['maxDate']\">Doit être antérieur à {{$any(manager).max|date:'short'}}...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.date'\">\n <input type=\"date\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" (keyup.enter)=\"update()\">\n <div class=\"form-text\">{{realHelp}}</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['minDate']\">Doit être postérieur à {{$any(manager).min|date:'short'}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['maxDate']\">Doit être antérieur à {{$any(manager).max|date:'short'}}...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.number'\">\n <input type=\"number\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" [placeholder]=\"realPlaceholder\">\n <div class=\"form-text\" *ngIf=\"realHelp\">{{realHelp}}<span class=\"ms-1\" *ngIf=\"required\">(requis)</span></div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['min']\">Trop petit : minimum {{$any(manager).min}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['max']\">Trop grand : maximum {{$any(manager).max}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.decimal'\">\n <input type=\"number\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" [placeholder]=\"realPlaceholder\">\n <div class=\"form-text\" *ngIf=\"realHelp\">{{realHelp}}<span class=\"ms-1\" *ngIf=\"required\">(requis)</span></div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['min']\">Trop petit : minimum {{$any(manager).min}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['max']\">Trop grand : maximum {{$any(manager).max}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.checkbox'\">\n <input class=\"form-check-input\" type=\"checkbox\" [formControl]=\"form.get(field)\" (keyup.escape)=\"unsetEdit()\" (change)=\"update()\">\n <div class=\"form-text\">{{realHelp}}</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'textarea'\">\n <textarea [formControl]=\"form.get(field)\" (keyup.escape)=\"unsetEdit()\" [ngClass]=\"inputClasses\" (keyup.control.enter)=\"update()\" [placeholder]=\"realPlaceholder\"></textarea>\n <div class=\"form-text\" *ngIf=\"realHelp\">{{realHelp}}<span class=\"ms-1\" *ngIf=\"required\">(requis)</span></div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['minlength']\">Trop court : {{$any(manager).minLength}} caractères minimum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['maxlength']\">Trop long : {{$any(manager).maxLength}} caractères maximum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['pattern']\">Format invalide...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n </ng-container>\n <!--ng-container(*ngSwitchCase=\"'quill'\")-->\n <!-- quill-editor([formControl]=\"form.get(field)\")-->\n <!-- .form-text(*ngIf=\"realHelp\") {{realHelp}}-->\n <!-- span.ms-1(*ngIf=\"required\") (requis)-->\n <!-- .invalid-feedback.mt-0([class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['minlength']\") Trop court : {{$any(manager).minLength}} caractères minimum...-->\n <!-- .invalid-feedback.mt-0([class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['maxlength']\") Trop long : {{$any(manager).maxLength}} caractères maximum...-->\n <!-- .invalid-feedback.mt-0([class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['pattern']\") Format invalide...-->\n <!-- .invalid-feedback.mt-0([class.d-block]=\"form && !form.controls[field].pristine && form.controls[field].errors?.['required']\") Ce champ est requis...-->\n <!-- button([ngClass]=\"inputClasses\") Enregistrer-->\n <ng-container *ngSwitchCase=\"'fkselect'\">\n <data-fkselect [collection]=\"collection\" [filter]=\"filter\" (selected)=\"selectedRefItem($event)\" [placeholder]=\"placeholder\" (cancelled)=\"unsetEdit()\" (cleared)=\"selectedRefItem(null)\"></data-fkselect>\n </ng-container>\n <ng-container *ngSwitchCase=\"'m2mselect'\">\n <data-m2mselect [collection]=\"collection\" [filter]=\"filter\" (changed)=\"update()\" [formControl]=\"form.get(field)\" (detailsChanged)=\"onM2MValuesChanges($event)\" [model]=\"model\" [field]=\"field\" [placeholder]=\"placeholder\"></data-m2mselect>\n </ng-container>\n <ng-container *ngSwitchCase=\"'select'\">\n <select [formControl]=\"form.get(field)\" (keyup.escape)=\"unsetEdit()\" (change)=\"update()\" [ngClass]=\"inputClasses\">\n <option *ngFor=\"let c of realChoices\" [ngValue]=\"c.value ? c.value : c\">{{c.desc ? c.desc : c}}</option>\n </select>\n <div class=\"form-text\">{{realHelp}}</div>\n </ng-container>\n </ng-container>\n</ng-template>\n<!-- Disp/edit toggler-->\n<ng-template #dispeditTpl>\n <ng-container *ngIf=\"!edit\">\n <ng-container *ngTemplateOutlet=\"dispTpl\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"edit\">\n <ng-container *ngIf=\"fg\">\n <form [formGroup]=\"fg\" (submit)=\"update()\">\n <ng-container *ngTemplateOutlet=\"editTpl; context: {form: fg}\"></ng-container>\n </form>\n </ng-container>\n </ng-container>\n</ng-template>\n<!-- DispEdit noform-->\n<ng-template #dispeditFormTpl>\n <ng-container *ngIf=\"!edit\">\n <ng-container *ngTemplateOutlet=\"dispTpl\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"edit\">\n <ng-container *ngIf=\"form\">\n <ng-container *ngTemplateOutlet=\"editTpl; context: {form: form}\"></ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n<!-- Dd display-->\n<ng-container *ngIf=\"mode==='dd'\">\n <dt [class.required]=\"required\" *ngIf=\"!hideLabel\"><span class=\"editable\" (click)=\"toggleEdit()\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container></span><span class=\"pointer float-end\" (click)=\"setDefault()\" *ngIf=\"realDefault!== undefined &amp;&amp; edit\"><i class=\"bi bi-trash ms-2\"></i></span></dt>\n <dd [class.mb-0]=\"hideLabel\">\n <ng-container *ngTemplateOutlet=\"dispeditTpl\"></ng-container>\n </dd>\n</ng-container>\n<!-- Inline display-->\n<ng-container *ngIf=\"mode==='inline'\">\n <ng-container *ngIf=\"!hideLabel\"><span class=\"pointer float-end\" (click)=\"setDefault()\" *ngIf=\"realDefault!== undefined &amp;&amp; edit\"><i class=\"bi bi-trash ms-2\"></i></span>\n <label [class.required]=\"required\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </label>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"dispeditTpl\"></ng-container>\n</ng-container>\n<!-- Form display-->\n<ng-container *ngIf=\"mode==='form'\">\n <ng-container *ngIf=\"!hideLabel\"><span class=\"pointer float-end\" (click)=\"setDefault()\" *ngIf=\"realDefault!== undefined &amp;&amp; edit\"><i class=\"bi bi-trash ms-2\"></i></span>\n <label [class.required]=\"required\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </label>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"dispeditFormTpl\"></ng-container>\n</ng-container>","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { DataModel } from '../../data/data-model';\nimport { Collection } from '../../data/data-collection';\nimport { firstValueFrom } from 'rxjs';\nimport {\n NgbOffcanvas,\n NgbOffcanvasModule,\n NgbOffcanvasRef,\n} from '@ng-bootstrap/ng-bootstrap';\nimport { CommonModule } from '@angular/common';\n\nexport interface FakeDeleteResult {\n count: number;\n details: [string, number][];\n}\n\n@Component({\n selector: 'data-safe-delete',\n templateUrl: './sdelete.component.html',\n styleUrls: ['./sdelete.component.sass'],\n standalone: true,\n imports: [CommonModule, NgbOffcanvasModule],\n})\nexport class SafeDeleteComponent<T extends DataModel> {\n @Input() public model!: T;\n @Input() public service!: Collection<T>;\n @Input() public checks: { [index: string]: string } = {};\n @Output() public deleted = new EventEmitter<FakeDeleteResult>();\n @Input() public display: 'button' | 'icon' | 'custom' = 'button';\n public result?: FakeDeleteResult;\n @ViewChild('dialog', { static: true })\n private _dialogRef?: ElementRef<HTMLDivElement>;\n private ofc?: NgbOffcanvasRef;\n\n constructor(private _ofc: NgbOffcanvas) {}\n\n public async checkDelete(model: DataModel) {\n this.result = await firstValueFrom(\n this.service.delete(this.model, { params: { doit: 'no' } })\n );\n this.ofc = this._ofc.open(this._dialogRef, {\n position: 'end',\n });\n }\n\n public async reallyDelete() {\n this.result = await firstValueFrom(\n this.service.delete(this.model, { params: { doit: 'really' } })\n );\n this.ofc?.close();\n this.deleted.emit(this.result);\n }\n}\n","\n<ng-template #dialog let-offcanvas>\n <div class=\"offcanvas-header\">\n <h2 class=\"offcanvas-title text-danger text-center\"><i class=\"bi bi-trash me-2\"></i>Supprimer réellement ??</h2>\n </div>\n <div class=\"offcanvas-body text-danger\" *ngIf=\"result\">\n <div class=\"text-center my-4 fs-1\"><i class=\"bi bi-exclamation-diamond my-5\"></i></div>\n <div class=\"fs-4\">\n <p>La suppression de cet élément supprimera {{result.count}} éléments dans la base de données..</p>\n </div>\n <table class=\"table table-sm table-striped table-danger\">\n <thead>\n <tr>\n <th>Type d'élément</th>\n <th>Nombre</th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let rl of result.details\">\n <tr>\n <td>{{checks[rl[0]] ? checks[rl[0]] : rl[0]}}</td>\n <td>{{rl[1]}}</td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n <button class=\"w-100 btn btn-lg btn-danger\" (click)=\"reallyDelete()\"><i class=\"bi bi-trash me-2\"></i>Je confirme la suppression</button>\n <button class=\"w-100 btn btn-outline-secondary my-3\" (click)=\"offcanvas.close()\"><i class=\"bi bi-door-open me-2\"></i>Je renonce à la suppression</button>\n </div>\n</ng-template>\n<button class=\"btn btn-sm btn-outline-danger float-end\" (click)=\"checkDelete(model)\" *ngIf=\"display==='button'\"><i class=\"bi bi-trash mx-2\"></i></button><i class=\"bi bi-trash mx-2\" (click)=\"checkDelete(model)\" *ngIf=\"display==='icon'\" role=\"button\"></i>\n<div (click)=\"checkDelete(model)\" *ngIf=\"display==='custom'\" role=\"button\">\n <ng-content></ng-content>\n</div>","import {\n BaseFieldManager,\n FieldDecoratorFn,\n genericDataField,\n IFieldMetadata,\n} from './base';\nimport { ValidatorFn, Validators } from '@angular/forms';\nimport { DISPEDIT_EDITOR_TYPES } from '../../dispedit/dispedit/dispedit.constants';\n\nexport interface ICharFieldDescChoice {\n value: string;\n desc: string;\n}\n\nexport type ICharFieldChoice = ICharFieldDescChoice | string;\n\nexport interface ICharFieldMetadata extends IFieldMetadata<string> {\n minLength?: number;\n maxLength?: number;\n pattern?: RegExp | string;\n choices?: ICharFieldChoice[];\n}\n\nexport interface IEmailFieldMetadata extends ICharFieldMetadata {\n validate?: boolean;\n}\n\nexport interface IPasswordFieldMetadata extends ICharFieldMetadata {\n validate?: boolean;\n}\n\nexport interface ITextFieldMetadata extends ICharFieldMetadata {\n syntax?: string;\n}\n\nexport class CharFieldManager extends BaseFieldManager<string> {\n public minLength?: number;\n public maxLength?: number;\n public choices?: ICharFieldChoice[];\n public pattern?: RegExp | string;\n\n constructor(params: any) {\n super(params);\n if (this.choices) {\n this.editorType = 'select';\n }\n }\n\n public override get validators(): ValidatorFn[] {\n const v = super.getValidators();\n if (this.minLength) {\n v.push(Validators.minLength(this.minLength));\n }\n if (this.maxLength) {\n v.push(Validators.maxLength(this.maxLength));\n }\n if (this.pattern) {\n v.push(Validators.pattern(this.pattern));\n }\n // TODO: add choices validator ??\n return v;\n }\n\n public override fromJson(data: any): string {\n if (data === undefined) {\n return this.getDefaultValue()!;\n }\n if (data === null) {\n return this.getDefaultValue()!;\n }\n if (typeof data === 'string') {\n return data;\n }\n return `${data}`;\n }\n}\n\nexport class EmailFieldManager\n extends CharFieldManager\n implements ICharFieldMetadata\n{\n public validate = true;\n public override editorType: DISPEDIT_EDITOR_TYPES = 'input.email';\n\n constructor(params: any) {\n super(params);\n if (this.validate === undefined) {\n this.validate = true;\n }\n }\n\n public override get validators(): ValidatorFn[] {\n const v = super.getValidators();\n if (this.validate) {\n v.push(Validators.email);\n }\n return v;\n }\n}\n\nexport class TextFieldManager extends CharFieldManager {\n public syntax?: string;\n public override editorType: DISPEDIT_EDITOR_TYPES = 'textarea';\n}\n\nexport class PasswordFieldManager extends CharFieldManager {\n public syntax?: string;\n public override editorType: DISPEDIT_EDITOR_TYPES = 'input.password';\n}\n\n/* eslint-disable max-len */\n\nexport const charField = (updates: ICharFieldMetadata = {}): FieldDecoratorFn =>\n genericDataField(updates, 'charField', CharFieldManager);\n\nexport const emailField = (\n updates: IEmailFieldMetadata = {}\n): FieldDecoratorFn =>\n genericDataField(updates, 'emailField', EmailFieldManager);\n\nexport const textField = (updates: ITextFieldMetadata = {}): FieldDecoratorFn =>\n genericDataField(updates, 'textField', TextFieldManager);\n\nexport const passwordField = (\n updates: IPasswordFieldMetadata = {}\n): FieldDecoratorFn =>\n genericDataField(updates, 'passwordField', PasswordFieldManager);\n","import {\n BaseFieldManager,\n FieldDecoratorFn,\n genericDataField,\n IFieldMetadata,\n} from './base';\n\nexport interface IPrimaryFieldMetadata extends IFieldMetadata<number> {\n step?: number;\n}\n\nexport class PrimaryFieldManager\n extends BaseFieldManager<number>\n implements IPrimaryFieldMetadata\n{\n public step = 1;\n}\n\nexport const primaryField = (\n updates: IPrimaryFieldMetadata = {}\n): FieldDecoratorFn =>\n genericDataField(updates, 'primaryField', PrimaryFieldManager);\n","import { BaseFieldManager, genericDataField, IFieldMetadata } from './base';\nimport {\n DISPEDIT_DISPLAY_TYPES,\n DISPEDIT_EDITOR_TYPES,\n} from '../../dispedit/dispedit/dispedit.constants';\nimport { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\nexport interface IDateFieldMetadata extends IFieldMetadata<Date | null> {\n autoNow?: boolean;\n autoNowAdd?: boolean;\n min?: Date;\n max?: Date;\n}\n\nexport const dateMinimum = (date: Date): ValidatorFn => {\n return (control: AbstractControl): ValidationErrors | null => {\n if (control.value == null) {\n return null;\n }\n\n const controlDate = new Date(control.value);\n\n const validationDate = date;\n\n return controlDate > validationDate\n ? null\n : {\n minDate: {\n 'date-minimum': validationDate,\n actual: controlDate,\n },\n };\n };\n};\n\nexport const dateMaximum = (date: Date): ValidatorFn => {\n return (control: AbstractControl): ValidationErrors | null => {\n if (control.value == null) {\n return null;\n }\n const controlDate = new Date(control.value);\n const validationDate = date;\n\n return controlDate < validationDate\n ? null\n : {\n maxDate: {\n 'date-maximum': validationDate,\n actual: controlDate,\n },\n };\n };\n};\n\nexport interface IDatetimeFieldMetadata extends IDateFieldMetadata {\n timezone?: string;\n}\n\nexport class DateFieldManager extends BaseFieldManager<Date | null> {\n public autoNow = false;\n public autoNowAdd = false;\n public min?: Date;\n public max?: Date;\n public override editorType: DISPEDIT_EDITOR_TYPES = 'input.date';\n public override displayType: DISPEDIT_DISPLAY_TYPES = 'date';\n\n public override get validators(): ValidatorFn[] {\n const v = super.validators;\n if (this.min) {\n v.push(dateMinimum(this.min));\n }\n if (this.max) {\n v.push(dateMaximum(this.max));\n }\n return v;\n }\n\n public override fromJson(data: any): Date | null {\n if (data === null || data === undefined) {\n return null;\n }\n const date = new Date(data);\n if (date instanceof Date && !isNaN(date as any)) {\n return date;\n }\n return null;\n }\n\n public override toJson(data: Date | string | null): null | string {\n if (data === null || data === undefined) {\n return null;\n }\n if (typeof data === 'string') {\n const d = this.fromJson(data);\n if (d === null) {\n return null;\n }\n data = d;\n }\n return `${data.getUTCFullYear()}-${\n data.getUTCMonth() + 1\n }-${data.getUTCDate()}`;\n }\n\n /**\n * Returns default value for model, using args if needed.\n * @param args\n * @protected\n */\n protected override getDefaultValue(args: any = {}): Date | null | undefined {\n if (this.defaultValue instanceof Function) {\n return this.defaultValue(args);\n }\n if (this.required && this.defaultValue === undefined) {\n throw new Error(\n `Field ${this.name} : no default value for required field`\n );\n }\n if (this.defaultValue === undefined) {\n return this.autoNow || this.autoNowAdd ? new Date() : null;\n }\n return this.defaultValue;\n }\n}\n\nexport class DatetimeFieldManager\n extends DateFieldManager\n implements IDatetimeFieldMetadata\n{\n public timezone = 'Europe/Paris';\n public override editorType: DISPEDIT_EDITOR_TYPES = 'input.datetime';\n public override displayType: DISPEDIT_DISPLAY_TYPES = 'datetime';\n\n public override toJson(data: Date): string | null {\n if (data === null || data === undefined) {\n return null;\n }\n if (typeof data === 'string') {\n const d = this.fromJson(data);\n if (d === null) {\n return null;\n }\n data = d;\n }\n try {\n return data.toISOString();\n } catch (e) {\n console.error(e, data);\n return null;\n }\n }\n}\n\nexport const dateField = (updates: IDateFieldMetadata = {}) =>\n genericDataField(updates, 'dateField', DateFieldManager);\n\nexport const datetimeField = (updates: IDatetimeFieldMetadata = {}) =>\n genericDataField(updates, 'datetimeField', DatetimeFieldManager);\n","import {\n BaseFieldManager,\n FieldDecoratorFn,\n genericDataField,\n IFieldMetadata,\n} from './base';\nimport { Collection } from '../data-collection';\nimport {\n DISPEDIT_DISPLAY_TYPES,\n DISPEDIT_EDITOR_TYPES,\n} from '../../dispedit/dispedit/dispedit.constants';\n\nexport interface IForeignKeyFieldMetadata extends IFieldMetadata<number> {\n related?: string;\n}\n\nexport interface IReverseForeignKeyFieldMetadata\n extends IFieldMetadata<number> {\n related: string;\n}\n\nexport interface IDetailsFieldMetadata<T> extends IFieldMetadata<T> {\n field?: string;\n many?: boolean;\n model?: T;\n deserialize?: (data: any) => T;\n}\n\nexport interface IManyToManyFieldMetadata extends IFieldMetadata<number[]> {\n related: string;\n}\n\nexport class ForeignKeyFieldManager\n extends BaseFieldManager<number>\n implements IForeignKeyFieldMetadata\n{\n public related?: string;\n public override editorType: DISPEDIT_EDITOR_TYPES = 'fkselect';\n public override displayType: DISPEDIT_DISPLAY_TYPES = 'fkdetails';\n}\n\nexport class ReverseForeignKeyFieldManager\n extends BaseFieldManager<number>\n implements IForeignKeyFieldMetadata\n{\n public related?: string;\n}\n\nexport class DetailsFieldManager<T>\n extends BaseFieldManager<T>\n implements IDetailsFieldMetadata<T>\n{\n public field?: string;\n public many?: boolean;\n public model: any;\n public deserialize?: (data: any) => any;\n\n public override fromJson(data: any, coll?: Collection<any>): any {\n if (data === null) {\n return data;\n }\n if (data === undefined) {\n return undefined;\n }\n if (this.deserialize) {\n return this.deserialize(data);\n }\n if (this.model) {\n if (!this.many) {\n const d = new this.model(coll);\n d.fromJson(data);\n return d;\n } else {\n const out: any[] = [];\n for (const dt of data) {\n const d = new this.model(coll);\n d.fromJson(dt);\n out.push(d);\n }\n return out;\n }\n }\n return data;\n }\n}\n\nexport interface IManyToManyKeyFieldMetadata extends IFieldMetadata<number[]> {\n related?: string;\n}\n\nexport class ManyToManyFieldManager\n extends BaseFieldManager<number[]>\n implements IManyToManyKeyFieldMetadata\n{\n public related?: string;\n public override editorType: DISPEDIT_EDITOR_TYPES = 'm2mselect';\n public override displayType: DISPEDIT_DISPLAY_TYPES = 'm2mdetails';\n}\n\n/* eslint-disable max-len */\nexport const foreignKeyField = (\n updates: IForeignKeyFieldMetadata\n): FieldDecoratorFn =>\n genericDataField(updates, 'foreignKeyField', ForeignKeyFieldManager);\n\nexport const reverseForeignKeyField = (\n updates: IReverseForeignKeyFieldMetadata\n): FieldDecoratorFn =>\n genericDataField(\n updates,\n 'reverseForeignKeyField',\n ReverseForeignKeyFieldManager\n );\n\nexport const detailsField = (\n meta: IDetailsFieldMetadata<any> = {}\n): FieldDecoratorFn =>\n genericDataField(meta, 'detailsField', DetailsFieldManager);\n\nexport const manyToManyField = (\n meta: IManyToManyFieldMetadata\n): FieldDecoratorFn =>\n genericDataField(meta, 'manyToManyField', ManyToManyFieldManager);\n","import { BaseFieldManager, genericDataField, IFieldMetadata } from './base';\nimport {\n DISPEDIT_DISPLAY_TYPES,\n DISPEDIT_EDITOR_TYPES,\n} from '../../dispedit/dispedit/dispedit.constants';\n\nexport type IBooleanFieldMetadata = IFieldMetadata<boolean | null>;\n\nexport class BooleanFieldManager\n extends BaseFieldManager<boolean | null>\n implements IBooleanFieldMetadata\n{\n public override editorType: DISPEDIT_EDITOR_TYPES = 'input.checkbox';\n public override displayType: DISPEDIT_DISPLAY_TYPES = 'boolean';\n\n public override fromJson(data: any): boolean | null {\n if (data === undefined) {\n if (this.required) {\n return this.getDefaultValue()!;\n } else {\n return null;\n }\n }\n if (data === null) {\n if (this.required) {\n return this.getDefaultValue()!;\n } else {\n return null;\n }\n }\n if (typeof data === 'boolean') {\n return data as boolean;\n }\n if (typeof data === 'string') {\n if (['true', '1', 'ok', 'yes'].indexOf(data) !== -1) {\n return true;\n }\n return ['false', '0', 'nok', 'no'].indexOf(data) === -1;\n }\n return !!data;\n }\n}\n\nexport const booleanField = (updates: IBooleanFieldMetadata = {}) =>\n genericDataField<boolean | null, IBooleanFieldMetadata, BooleanFieldManager>(\n updates,\n 'booleanField',\n BooleanFieldManager\n );\n","import {\n BaseFieldManager,\n FieldDecoratorFn,\n genericDataField,\n IFieldMetadata,\n} from './base';\nimport {\n DISPEDIT_DISPLAY_TYPES,\n DISPEDIT_EDITOR_TYPES,\n} from '../../dispedit/dispedit/dispedit.constants';\nimport { ValidatorFn, Validators } from '@angular/forms';\n\nexport interface IIntegerFieldMetadata extends IFieldMetadata<number> {\n min?: number;\n max?: number;\n}\n\nexport interface IFloatFieldMetadata extends IFieldMetadata<number> {\n min?: number;\n max?: number;\n}\n\nexport interface IDecimalFieldMetadata extends IFieldMetadata<number> {\n min?: number;\n max?: number;\n factor?: number;\n}\n\nexport class IntegerFieldManager\n extends BaseFieldManager<number>\n implements IIntegerFieldMetadata\n{\n public override displayType: DISPEDIT_DISPLAY_TYPES = 'text';\n public override editorType: DISPEDIT_EDITOR_TYPES = 'input.number';\n\n public min?: number;\n public max?: number;\n\n public override get validators(): ValidatorFn[] {\n const v = super.getValidators();\n if (this.min !== undefined) {\n v.push(Validators.min(this.min));\n }\n if (this.max !== undefined) {\n v.push(Validators.max(this.max));\n }\n return v;\n }\n}\n\nexport class FloatFieldManager\n extends IntegerFieldManager\n implements IFloatFieldMetadata\n{\n public override displayType: DISPEDIT_DISPLAY_TYPES = 'text';\n public override editorType: DISPEDIT_EDITOR_TYPES = 'input.number';\n}\n\nexport class DecimalFieldManager\n extends IntegerFieldManager\n implements IDecimalFieldMetadata\n{\n public factor?: number;\n public override displayType: DISPEDIT_DISPLAY_TYPES = 'decimal';\n public override editorType: DISPEDIT_EDITOR_TYPES = 'input.decimal';\n}\n\n/* eslint-disable max-len */\nexport const integerField = (\n updates: IIntegerFieldMetadata = {}\n): FieldDecoratorFn =>\n genericDataField(updates, 'integerField', IntegerFieldManager);\n\nexport const floatField = (\n updates: IFloatFieldMetadata = {}\n): FieldDecoratorFn =>\n genericDataField(updates, 'floatField', FloatFieldManager);\n\nexport const decimalField = (\n updates: IDecimalFieldMetadata = { factor: 100 }\n): FieldDecoratorFn =>\n genericDataField(updates, 'decimalField', DecimalFieldManager);\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { animate, style, transition, trigger } from '@angular/animations';\nimport { DataMessageService, Message } from '../message.service';\nimport { ReplaySubject, takeUntil } from 'rxjs';\nimport { CommonModule } from '@angular/common';\nimport { provideAnimations } from '@angular/platform-browser/animations';\n\n@Component({\n selector: 'data-message-zone',\n templateUrl: './message-zone.component.html',\n styleUrls: ['./message-zone.component.sass'],\n standalone: true,\n imports: [CommonModule],\n providers: [provideAnimations()],\n animations: [\n trigger('dispStatus', [\n transition('void => *', [\n style({ opacity: 0 }),\n animate(550, style({ opacity: 1 })),\n ]),\n transition('* => void', [\n style({ opacity: '*' }),\n animate(550, style({ opacity: 0 })),\n ]),\n ]),\n ],\n})\nexport class MessageZoneComponent implements OnInit, OnDestroy {\n @Input() public filter?: string;\n public current: Message[] = [];\n private _subscriptions$ = new ReplaySubject<void>();\n\n constructor(public messages: DataMessageService) {}\n\n public ngOnInit(): void {\n this.messages.current\n .pipe(takeUntil(this._subscriptions$))\n .subscribe((messages) => {\n this.current = messages;\n });\n }\n\n public ngOnDestroy(): void {\n this._subscriptions$.next();\n this._subscriptions$.complete();\n }\n}\n","\n<div class=\"messagezone\">\n <div class=\"alert\" *ngFor=\"let message of current\" [@dispStatus]=\"message.status\" [class]=\"message.style\" (click)=\"message.showTrace=!message.showTrace\">\n <button class=\"btn-close\" type=\"button\" (click)=\"messages.ack(message)\" aria-label=\"Close\"></button><strong>{{message.title}}</strong>&nbsp; {{message.message}}\n <div class=\"pretrace\" *ngIf=\"message.showTrace\">{{message.trace}}</div>\n </div>\n</div>","import {DataModel} from \"./data-model\";\nimport {CollectionMock} from \"./data-collection.mock\";\nimport {FilterData, IQueryMeta, IQuerysetOptions, SortData} from \"./data-query\";\nimport {combineLatest, Observable, of} from \"rxjs\";\n\nexport class QuerysetMock<T extends DataModel> {\n public mockData: T[] = [];\n\n public filterData: FilterData = {};\n public sortData: SortData[] = [];\n public pageSize = 100;\n public page = 1;\n\n public pristine = true;\n public loading = of(false);\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\n constructor(protected _coll: CollectionMock<T>, public options: IQuerysetOptions = {}) {\n\n }\n\n public get results(): Observable<T[]> {\n return of(this.mockData || this._coll.mockValues);\n }\n\n public get meta(): Observable<IQueryMeta> {\n return of({\n nav: {count: 100, next: 1, page: 1, pages: 10, prev: null, size: 10},\n parameters: {page: \"page\", page_size: \"page_size\"}\n });\n }\n\n public get full(): Observable<[T[], boolean, IQueryMeta]> {\n return combineLatest([this.results, this.loading, this.meta]);\n }\n\n public filter(params: FilterData = {}): QuerysetMock<T> {\n return this;\n }\n\n public sort(...sorting: string[]): QuerysetMock<T> {\n return this;\n }\n\n public paginateBy(pageSize: number = 20): QuerysetMock<T> {\n return this;\n }\n\n public setPage(page: number): QuerysetMock<T> {\n return this;\n }\n\n public getQueryParams(): FilterData {\n return {};\n }\n\n public get(): Observable<T[]> {\n return of(this.mockData || this._coll.mockValues);\n }\n}\n","import {DataModel} from \"./data-model\";\nimport {Observable, of} from \"rxjs\";\nimport {IQuerysetOptions} from \"./data-query\";\nimport {QuerysetMock} from \"./data-query.mock\";\nimport {Collection, IActionParams, IHttpMethod} from \"./data-collection\";\n\nexport class CollectionMock<T extends DataModel> {\n public mockValue?: T;\n public mockValues?: T[];\n public actionValue: any;\n\n constructor(protected model: new(coll: Collection<T>) => T) {\n }\n\n public fetch(id: number, suffix: string = \"\"): Observable<T> {\n return of(this.mockValue as T);\n }\n\n public action(model: T | null, method: IHttpMethod, action: string, params: IActionParams): Observable<any> {\n return of(this.actionValue);\n }\n\n public queryset(options: IQuerysetOptions = {}): QuerysetMock<T> {\n return new QuerysetMock<T>(this, options);\n }\n\n public list(query: { [index: string]: string } = {}, suffix: string = \"\"): Observable<any> {\n return of({results: this.mockValues});\n }\n\n fromJson(data: any, many: boolean = false): T | any {\n if (data && data.id !== undefined) {\n const m = new this.model(this as any);\n m.fromJson(data);\n return m;\n } else {\n if (many && data && data.length) {\n const out: T[] = [];\n for (const r of data) {\n const ri = new this.model(this as any);\n ri.fromJson(r);\n out.push(ri);\n }\n return out;\n }\n return data;\n }\n }\n}\n","import {Subscription} from \"rxjs\";\n\nexport interface UploaderOptions {\n concurrency: number;\n allowedContentTypes?: string[];\n maxUploads?: number;\n maxFileSize?: number;\n}\n\nexport interface BlobFile extends Blob {\n name: string;\n}\n\nexport enum UploadStatus {\n Queue,\n Uploading,\n Done,\n Cancelled\n}\n\nexport interface UploadProgress {\n status: UploadStatus;\n data?: {\n percentage: number;\n speed: number;\n speedHuman: string;\n startTime: number | null;\n endTime: number | null;\n eta: number | null;\n etaHuman: string | null;\n };\n}\n\nexport interface UploadFile {\n id: string;\n fileIndex: number;\n lastModifiedDate: Date;\n name: string;\n size: number;\n type: string;\n form: FormData;\n progress: UploadProgress;\n response?: any;\n responseStatus?: number;\n sub?: Subscription | any;\n nativeFile?: File;\n responseHeaders?: { [key: string]: string };\n}\n\nexport interface UploadOutput {\n type: \"addedToQueue\" | \"allAddedToQueue\" | \"uploading\" | \"done\" | \"start\" | \"cancelled\" | \"dragOver\"\n | \"dragOut\" | \"drop\" | \"removed\" | \"removedAll\" | \"rejected\";\n file?: UploadFile;\n nativeFile?: File;\n}\n\nexport interface UploadInput {\n type: \"uploadAll\" | \"uploadFile\" | \"cancel\" | \"cancelAll\" | \"remove\" | \"removeAll\";\n url?: string;\n method?: string;\n id?: string;\n fieldName?: string;\n fileIndex?: number;\n file?: UploadFile;\n data?: { [key: string]: string | Blob };\n headers?: { [key: string]: string };\n includeWebKitFormBoundary?: boolean; // If false, only the file is send trough xhr.send (WebKitFormBoundary is omit)\n withCredentials?: boolean;\n}\n","import { EventEmitter } from '@angular/core';\nimport { Observable, Subject, Subscription } from 'rxjs';\nimport { finalize, mergeMap } from 'rxjs/operators';\nimport {\n BlobFile,\n UploadFile,\n UploadInput,\n UploadOutput,\n UploadStatus,\n} from './interfaces';\n\nexport function humanizeBytes(bytes: number): string {\n if (bytes === 0) {\n return '0 Byte';\n }\n\n const k = 1024;\n const sizes: string[] = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB'];\n const i: number = Math.floor(Math.log(bytes) / Math.log(k));\n\n return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n}\n\nexport class DataUploaderService {\n queue: UploadFile[];\n serviceEvents: EventEmitter<UploadOutput>;\n uploadScheduler: Subject<{ file: UploadFile; event: UploadInput }>;\n subs: { id: string; sub: Subscription }[];\n contentTypes: string[];\n maxUploads: number;\n maxFileSize: number;\n\n constructor(\n concurrency: number = Number.POSITIVE_INFINITY,\n contentTypes: string[] = ['*'],\n maxUploads: number = Number.POSITIVE_INFINITY,\n maxFileSize: number = Number.POSITIVE_INFINITY\n ) {\n this.queue = [];\n this.serviceEvents = new EventEmitter<UploadOutput>();\n this.uploadScheduler = new Subject();\n this.subs = [];\n this.contentTypes = contentTypes;\n this.maxUploads = maxUploads;\n this.maxFileSize = maxFileSize;\n\n this.uploadScheduler\n .pipe(mergeMap((upload) => this.startUpload(upload), concurrency))\n .subscribe((uploadOutput) => this.serviceEvents.emit(uploadOutput));\n }\n\n handleFiles(incomingFiles: FileList): void {\n let acc: File[] = [];\n\n for (let i = 0; i < incomingFiles.length; i++) {\n const futureQueueLength = acc.length + this.queue.length + 1;\n const checkFile = incomingFiles[i];\n if (\n this.isContentTypeAllowed(checkFile.type) &&\n futureQueueLength <= this.maxUploads &&\n this.isFileSizeAllowed(checkFile.size)\n ) {\n acc = acc.concat(checkFile);\n } else {\n const rejectedFile: UploadFile = this.makeUploadFile(checkFile, i);\n this.serviceEvents.emit({ type: 'rejected', file: rejectedFile });\n }\n }\n for (let i = 0; i < acc.length; i++) {\n const file = acc[i];\n const uploadFile: UploadFile = this.makeUploadFile(file, i);\n this.serviceEvents.emit({ type: 'addedToQueue', file: uploadFile });\n this.queue.push(uploadFile);\n }\n this.serviceEvents.emit({ type: 'allAddedToQueue' });\n }\n\n initInputEvents(input: EventEmitter<UploadInput>): Subscription {\n return input.subscribe((event: UploadInput) => {\n switch (event.type) {\n case 'uploadFile':\n const uploadFileIndex = this.queue.findIndex(\n (file) => file === event.file\n );\n if (uploadFileIndex !== -1 && event.file) {\n this.uploadScheduler.next({\n file: this.queue[uploadFileIndex],\n event: event,\n });\n }\n break;\n case 'uploadAll':\n const files = this.queue.filter(\n (file) => file.progress.status === UploadStatus.Queue\n );\n files.forEach((file) =>\n this.uploadScheduler.next({ file: file, event: event })\n );\n break;\n case 'cancel':\n const id = event.id || null;\n if (!id) {\n return;\n }\n const subs = this.subs.filter((sub) => sub.id === id);\n subs.forEach((sub) => {\n if (sub.sub) {\n sub.sub.unsubscribe();\n const fileIndex = this.queue.findIndex((file) => file.id === id);\n if (fileIndex !== -1) {\n this.queue[fileIndex].progress.status = UploadStatus.Cancelled;\n this.serviceEvents.emit({\n type: 'cancelled',\n file: this.queue[fileIndex],\n });\n }\n }\n });\n break;\n case 'cancelAll':\n this.subs.forEach((sub) => {\n if (sub.sub) {\n sub.sub.unsubscribe();\n }\n\n const file = this.queue.find(\n (uploadFile) => uploadFile.id === sub.id\n );\n if (file) {\n file.progress.status = UploadStatus.Cancelled;\n this.serviceEvents.emit({ type: 'cancelled', file: file });\n }\n });\n break;\n case 'remove':\n if (!event.id) {\n return;\n }\n\n const i = this.queue.findIndex((file) => file.id === event.id);\n if (i !== -1) {\n const file = this.queue[i];\n this.queue.splice(i, 1);\n this.serviceEvents.emit({ type: 'removed', file: file });\n }\n break;\n case 'removeAll':\n if (this.queue.length) {\n this.queue = [];\n this.serviceEvents.emit({ type: 'removedAll' });\n }\n break;\n }\n });\n }\n\n startUpload(upload: {\n file: UploadFile;\n event: UploadInput;\n }): Observable<UploadOutput> {\n return new Observable((observer) => {\n const sub = this.uploadFile(upload.file, upload.event)\n .pipe(\n finalize(() => {\n if (!observer.closed) {\n observer.complete();\n }\n })\n )\n .subscribe({\n next: (output) => {\n observer.next(output);\n },\n error: (err) => {\n observer.error(err);\n observer.complete();\n },\n complete: () => {\n observer.complete();\n },\n });\n\n this.subs.push({ id: upload.file.id, sub: sub });\n });\n }\n\n uploadFile(file: UploadFile, event: UploadInput): Observable<UploadOutput> {\n return new Observable((observer) => {\n const url = event.url || '';\n const method = event.method || 'POST';\n const data = event.data || {};\n const headers = event.headers || {};\n\n const xhr = new XMLHttpRequest();\n const time: number = new Date().getTime();\n let progressStartTime: number =\n (file.progress.data && file.progress.data.startTime) || time;\n let speed = 0;\n let eta: number | null = null;\n\n xhr.upload.addEventListener(\n 'progress',\n (e: ProgressEvent) => {\n if (e.lengthComputable) {\n const percentage = Math.round((e.loaded * 100) / e.total);\n const diff = new Date().getTime() - time;\n speed = Math.round((e.loaded / diff) * 1000);\n progressStartTime =\n (file.progress.data && file.progress.data.startTime) ||\n new Date().getTime();\n eta = Math.ceil((e.total - e.loaded) / speed);\n\n file.progress = {\n status: UploadStatus.Uploading,\n data: {\n percentage: percentage,\n speed: speed,\n speedHuman: `${humanizeBytes(speed)}/s`,\n startTime: progressStartTime,\n endTime: null,\n eta: eta,\n etaHuman: this.secondsToHuman(eta),\n },\n };\n\n observer.next({ type: 'uploading', file: file });\n }\n },\n false\n );\n\n xhr.upload.addEventListener('error', (e: Event) => {\n observer.error(e);\n observer.complete();\n });\n\n xhr.onreadystatechange = () => {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n const speedAverage = Math.round(\n (file.size / (new Date().getTime() - progressStartTime)) * 1000\n );\n file.progress = {\n status: UploadStatus.Done,\n data: {\n percentage: 100,\n speed: speedAverage,\n speedHuman: `${humanizeBytes(speedAverage)}/s`,\n startTime: progressStartTime,\n endTime: new Date().getTime(),\n eta: eta,\n etaHuman: this.secondsToHuman(eta || 0),\n },\n };\n\n file.responseStatus = xhr.status;\n try {\n file.response = JSON.parse(xhr.response);\n } catch (e) {\n file.response = xhr.response;\n }\n\n file.responseHeaders = this.parseResponseHeaders(\n xhr.getAllResponseHeaders()\n );\n\n observer.next({ type: 'done', file: file });\n\n observer.complete();\n }\n };\n\n xhr.open(method, url, true);\n xhr.withCredentials = !!event.withCredentials;\n\n try {\n const uploadFile = <BlobFile>file.nativeFile;\n const uploadIndex = this.queue.findIndex(\n (outFile) => outFile.nativeFile === uploadFile\n );\n\n if (\n this.queue[uploadIndex].progress.status === UploadStatus.Cancelled\n ) {\n observer.complete();\n }\n\n Object.keys(headers).forEach((key) =>\n xhr.setRequestHeader(key, headers[key])\n );\n\n let bodyToSend: FormData | BlobFile;\n\n if (event.includeWebKitFormBoundary !== false) {\n Object.keys(data).forEach((key) => file.form.append(key, data[key]));\n file.form.append(\n event.fieldName || 'file',\n uploadFile,\n uploadFile.name\n );\n bodyToSend = file.form;\n } else {\n bodyToSend = uploadFile;\n }\n\n this.serviceEvents.emit({ type: 'start', file: file });\n xhr.send(bodyToSend);\n } catch (e) {\n observer.complete();\n }\n\n return () => {\n xhr.abort();\n };\n });\n }\n\n secondsToHuman(sec: number): string {\n return new Date(sec * 1000).toISOString().substring(11, 11 + 8);\n }\n\n generateId(): string {\n return Math.random().toString(36).substring(7);\n }\n\n setContentTypes(contentTypes: string[]): void {\n if (typeof contentTypes !== 'undefined' && contentTypes instanceof Array) {\n if (contentTypes.find((type: string) => type === '*') !== undefined) {\n this.contentTypes = ['*'];\n } else {\n this.contentTypes = contentTypes;\n }\n return;\n }\n this.contentTypes = ['*'];\n }\n\n allContentTypesAllowed(): boolean {\n return this.contentTypes.find((type: string) => type === '*') !== undefined;\n }\n\n isContentTypeAllowed(mimetype: string): boolean {\n if (this.allContentTypesAllowed()) {\n return true;\n }\n return (\n this.contentTypes.find((type: string) => type === mimetype) !== undefined\n );\n }\n\n isFileSizeAllowed(fileSize: number): boolean {\n if (!this.maxFileSize) {\n return true;\n }\n return fileSize <= this.maxFileSize;\n }\n\n makeUploadFile(file: File, index: number): UploadFile {\n return {\n fileIndex: index,\n id: this.generateId(),\n name: file.name,\n size: file.size,\n type: file.type,\n form: new FormData(),\n progress: {\n status: UploadStatus.Queue,\n data: {\n percentage: 0,\n speed: 0,\n speedHuman: `${humanizeBytes(0)}/s`,\n startTime: null,\n endTime: null,\n eta: null,\n etaHuman: null,\n },\n },\n lastModifiedDate: new Date(file.lastModified),\n sub: undefined,\n nativeFile: file,\n };\n }\n\n private parseResponseHeaders(httpHeaders: string): { [key: string]: string } {\n if (!httpHeaders) {\n return {};\n }\n\n return httpHeaders\n .split('\\n')\n .map((x: string) => x.split(/: */, 2))\n .filter((x: string[]) => x[0])\n .reduce((acc: { [key: string]: string }, x: string[]) => {\n acc[x[0]] = x[1];\n return acc;\n }, {});\n }\n}\n","import {Directive, ElementRef, EventEmitter, HostListener, Input, OnDestroy, OnInit, Output} from \"@angular/core\";\nimport {UploaderOptions, UploadInput, UploadOutput} from \"./interfaces\";\nimport {DataUploaderService} from \"./ngx-uploader.class\";\nimport {Subscription} from \"rxjs\";\n\n@Directive({\n selector: \"[dataFileDrop]\"\n})\nexport class NgFileDropDirective implements OnInit, OnDestroy {\n @Input() options!: UploaderOptions;\n @Input() uploadInput!: EventEmitter<UploadInput>;\n @Output() uploadOutput: EventEmitter<UploadOutput>;\n\n public upload!: DataUploaderService;\n public el!: HTMLInputElement;\n\n private _sub!: Subscription[];\n\n constructor(public elementRef: ElementRef) {\n this.uploadOutput = new EventEmitter<UploadOutput>();\n }\n\n ngOnInit() {\n this._sub = [];\n const concurrency = this.options && this.options.concurrency || Number.POSITIVE_INFINITY;\n const allowedContentTypes = this.options && this.options.allowedContentTypes || [\"*\"];\n const maxUploads = this.options && this.options.maxUploads || Number.POSITIVE_INFINITY;\n const maxFileSize = this.options && this.options.maxFileSize || Number.POSITIVE_INFINITY;\n this.upload = new DataUploaderService(concurrency, allowedContentTypes, maxUploads, maxFileSize);\n\n this.el = this.elementRef.nativeElement;\n\n this._sub.push(\n this.upload.serviceEvents.subscribe((event: UploadOutput) => {\n this.uploadOutput.emit(event);\n })\n );\n\n if (this.uploadInput instanceof EventEmitter) {\n this._sub.push(this.upload.initInputEvents(this.uploadInput));\n }\n\n this.el.addEventListener(\"drop\", this.stopEvent, false);\n this.el.addEventListener(\"dragenter\", this.stopEvent, false);\n this.el.addEventListener(\"dragover\", this.stopEvent, false);\n }\n\n ngOnDestroy() {\n if (this._sub) {\n this._sub.forEach(sub => sub.unsubscribe());\n }\n }\n\n stopEvent = (e: Event) => {\n e.stopPropagation();\n e.preventDefault();\n };\n\n @HostListener(\"drop\", [\"$event\"])\n public onDrop(e: any) {\n e.stopPropagation();\n e.preventDefault();\n\n const event: UploadOutput = {type: \"drop\"};\n this.uploadOutput.emit(event);\n this.upload.handleFiles(e.dataTransfer.files);\n }\n\n @HostListener(\"dragover\", [\"$event\"])\n public onDragOver(e: Event) {\n if (!e) {\n return;\n }\n\n const event: UploadOutput = {type: \"dragOver\"};\n this.uploadOutput.emit(event);\n }\n\n @HostListener(\"dragleave\", [\"$event\"])\n public onDragLeave(e: Event) {\n if (!e) {\n return;\n }\n\n const event: UploadOutput = {type: \"dragOut\"};\n this.uploadOutput.emit(event);\n }\n}\n","import {Directive, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output} from \"@angular/core\";\nimport {UploaderOptions, UploadOutput} from \"./interfaces\";\nimport {DataUploaderService} from \"./ngx-uploader.class\";\nimport {Subscription} from \"rxjs\";\n\n@Directive({\n selector: \"[dataFileSelect]\"\n})\nexport class NgFileSelectDirective implements OnInit, OnDestroy {\n @Input() options!: UploaderOptions;\n @Input() uploadInput!: EventEmitter<any>;\n @Output() uploadOutput: EventEmitter<UploadOutput>;\n\n public upload!: DataUploaderService;\n public el!: HTMLInputElement;\n\n private _sub!: Subscription[];\n\n constructor(public elementRef: ElementRef) {\n this.uploadOutput = new EventEmitter<UploadOutput>();\n }\n\n ngOnInit() {\n this._sub = [];\n const concurrency = this.options && this.options.concurrency || Number.POSITIVE_INFINITY;\n const allowedContentTypes = this.options && this.options.allowedContentTypes || [\"*\"];\n const maxUploads = this.options && this.options.maxUploads || Number.POSITIVE_INFINITY;\n const maxFileSize = this.options && this.options.maxFileSize || Number.POSITIVE_INFINITY;\n this.upload = new DataUploaderService(concurrency, allowedContentTypes, maxUploads, maxFileSize);\n\n this.el = this.elementRef.nativeElement;\n this.el.addEventListener(\"change\", this.fileListener, false);\n\n this._sub.push(\n this.upload.serviceEvents.subscribe((event: UploadOutput) => {\n this.uploadOutput.emit(event);\n })\n );\n\n if (this.uploadInput instanceof EventEmitter) {\n this._sub.push(this.upload.initInputEvents(this.uploadInput));\n }\n }\n\n ngOnDestroy() {\n if (this.el) {\n this.el.removeEventListener(\"change\", this.fileListener, false);\n this._sub.forEach(sub => sub.unsubscribe());\n }\n }\n\n fileListener = () => {\n if (this.el.files) {\n this.upload.handleFiles(this.el.files);\n }\n };\n}\n","import {NgModule} from \"@angular/core\";\nimport {NgFileDropDirective} from \"./ng-file-drop.directive\";\nimport {NgFileSelectDirective} from \"./ng-file-select.directive\";\n\n@NgModule({\n declarations: [NgFileDropDirective, NgFileSelectDirective],\n exports: [NgFileDropDirective, NgFileSelectDirective]\n})\nexport class NgxUploaderModule {\n}\n","import jwt_decode from 'jwt-decode';\n\nexport interface IJwtResponseJson {\n access: string;\n refresh: string;\n}\n\nexport interface IJwtRefreshResponseJson {\n access: string;\n}\n\nexport interface IJwtBaseData {\n // FIXME: check minimal jwt data\n token_type: 'access' | 'refresh';\n user_id: number;\n // exp: number;\n // jti: string;\n}\n\nexport class Jwt<UserJwtData extends IJwtBaseData> {\n public readonly access?: string;\n public readonly refresh?: string;\n private readonly _data: UserJwtData | null = null;\n\n constructor(response?: IJwtResponseJson) {\n if (response) {\n this.access = response.access;\n this._data = Object.freeze(jwt_decode<UserJwtData>(response.access));\n this.refresh = response.refresh;\n } else {\n this._data = null;\n }\n }\n\n public get data(): UserJwtData | null {\n return this._data;\n }\n\n public toJson() {\n return { access: this.access, refresh: this.refresh };\n }\n}\n","import { Inject, Injectable, InjectionToken } from '@angular/core';\nimport {\n IJwtBaseData,\n IJwtRefreshResponseJson,\n IJwtResponseJson,\n Jwt,\n} from './jwt';\nimport { HttpClient } from '@angular/common/http';\nimport { catchError, switchMap, tap, map } from 'rxjs/operators';\nimport { Observable, of, ReplaySubject, throwError } from 'rxjs';\nimport { DataModel } from '../data/data-model';\nimport { Collection } from '../data/data-collection';\n\nexport interface AuthParams {\n tokenUrl: string;\n tokenRefreshUrl: string;\n loginField: string;\n passwordField: string;\n}\n\n/**\n * DATA_API_URL: stores data api base url\n */\nexport const DATA_AUTH_PARAMS = new InjectionToken<AuthParams>(\n 'data.auth.params'\n);\nexport const DATA_AUTH_USER_SERVICE = new InjectionToken<Collection<any>>(\n 'data.auth.user.service'\n);\n\nexport class AuthServiceBase<\n User extends DataModel,\n UserService extends Collection<User>,\n UserData extends IJwtBaseData\n> {\n private _user!: User;\n private _user$ = new ReplaySubject<User | null>(1);\n private _token!: Jwt<UserData>;\n\n constructor(\n @Inject(DATA_AUTH_USER_SERVICE) public userService: UserService,\n @Inject(DATA_AUTH_PARAMS) private _params: AuthParams,\n private _http: HttpClient\n ) {\n this.autoLogin();\n }\n\n public get isAnonymous(): boolean {\n return !this._token.access;\n }\n\n public get accessToken(): string | null {\n return this._token.access ? this._token.access : null;\n }\n\n public get refreshToken(): string | null {\n return this._token.refresh ? this._token.refresh : null;\n }\n\n public get currentUser(): User | null {\n return this._user && this._user.id ? this._user : null;\n }\n\n public get currentUser$(): Observable<User | null> {\n return this._user$.asObservable();\n }\n\n public get refreshUrl(): string {\n return `${this._params.tokenRefreshUrl}`;\n }\n\n public get loginUrl(): string {\n return `${this._params.tokenUrl}`;\n }\n\n public logout(): void {\n localStorage.removeItem('auth');\n this._token = new Jwt();\n this._user = this.userService.create();\n this._user$.next(null);\n }\n\n public autoLogin(): void {\n const localAuth = localStorage.getItem('auth');\n if (!localAuth) {\n return this.logout();\n }\n const { user, token } = JSON.parse(localAuth);\n this._token = new Jwt(token);\n this._user = this.userService.create(user);\n this._user$.next(this._user);\n }\n\n public login(username: string, password: string): Observable<boolean> {\n const payload: { [_index: string]: string } = {};\n payload[this._params.loginField] = username;\n payload[this._params.passwordField] = password;\n return this._http.post<IJwtResponseJson>(this.loginUrl, payload).pipe(\n tap((tok) => {\n this._token = new Jwt(tok);\n this.saveAuth();\n }),\n switchMap(() => {\n if (this._token.data && this._token.data.user_id) {\n return this.userService.fetch(this._token.data!.user_id);\n } else {\n return throwError(() => 'Invalid token');\n }\n }),\n tap((user: User) => {\n this._user = user;\n this.saveAuth();\n }),\n map(() => true),\n catchError((error: any) => {\n this.logout();\n return of(false);\n })\n );\n }\n\n public saveAuth() {\n if (this.isAnonymous) {\n localStorage.removeItem('auth');\n this._user$.next(null);\n } else {\n localStorage.setItem(\n 'auth',\n JSON.stringify({\n user: this._user.toJson(),\n token: this._token.toJson(),\n })\n );\n this._user$.next(this._user);\n }\n }\n\n public refresh(): Observable<IJwtRefreshResponseJson | null> {\n if (!this._token.refresh) {\n this.logout();\n return of(null);\n }\n return this._http\n .post<IJwtRefreshResponseJson>(this.refreshUrl, {\n refresh: this._token.refresh as string,\n })\n .pipe(\n tap((tok) => {\n this._token = new Jwt({\n access: tok.access,\n refresh: this._token.refresh!,\n });\n this.saveAuth();\n })\n );\n }\n}\n","import { Inject, Injectable, InjectionToken } from '@angular/core';\nimport {\n HttpErrorResponse,\n HttpHandler,\n HttpInterceptor,\n HttpRequest,\n} from '@angular/common/http';\nimport { AuthServiceBase } from './auth.service';\nimport { catchError, filter, switchMap, take } from 'rxjs/operators';\nimport { BehaviorSubject, throwError } from 'rxjs';\nimport { IJwtRefreshResponseJson } from './jwt';\nimport { DATA_API_URL } from '../data/data-parameters';\n\nexport const DATA_AUTH_SERVICE = new InjectionToken<\n AuthServiceBase<any, any, any>\n>('data.auth.service');\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthInterceptor implements HttpInterceptor {\n private _isRefreshing = false;\n private _refreshTokenSubject =\n new BehaviorSubject<IJwtRefreshResponseJson | null>(null);\n\n constructor(\n @Inject(DATA_AUTH_SERVICE) private _auth: AuthServiceBase<any, any, any>,\n @Inject(DATA_API_URL) private _apiUrl: string\n ) {}\n\n intercept(req: HttpRequest<any>, next: HttpHandler) {\n if (this._auth.isAnonymous) {\n return next.handle(req);\n }\n if (!req.url.startsWith(this._apiUrl)) {\n return next.handle(req);\n }\n if (!this._auth.isAnonymous) {\n req = this._addToken(req, this._auth.accessToken as string);\n }\n return next.handle(req).pipe(\n catchError((error) => {\n if (error instanceof HttpErrorResponse && error.status === 401) {\n return this._handle401Error(req, next);\n } else {\n return throwError(error);\n }\n })\n );\n }\n\n private _handle401Error(request: HttpRequest<any>, next: HttpHandler) {\n if (!this._isRefreshing) {\n this._isRefreshing = true;\n this._refreshTokenSubject.next(null);\n\n return this._auth.refresh().pipe(\n switchMap((token) => {\n if (token === null) {\n return throwError(\n () =>\n new HttpErrorResponse({\n error: 'Forbidden, please log in',\n status: 403,\n statusText: 'Warning',\n url: request.url,\n })\n );\n } else {\n this._isRefreshing = false;\n this._refreshTokenSubject.next(token);\n return next.handle(this._addToken(request, token.access));\n }\n })\n );\n } else {\n return this._refreshTokenSubject.pipe(\n filter((token) => token != null),\n take(1),\n switchMap((token) =>\n next.handle(\n this._addToken(request, (token as IJwtRefreshResponseJson).access)\n )\n )\n );\n }\n }\n\n private _addToken(request: HttpRequest<any>, token: string) {\n return request.clone({\n setHeaders: {\n authorization: `Bearer ${token}`,\n },\n });\n }\n}\n","import { Route, Router } from '@angular/router';\n\n/**\n * Template function type.\n * Used for page title or other data to string operations.\n *\n * @param data: object\n * @param path: optional path (see: usage)\n */\nexport type TplFn<T> = (data: T, path?: string) => string;\n\n/**\n * Base route parameters interface.\n */\nexport interface BaseRouteParams {\n /** Skip route in breadcrumbs */\n skip?: boolean;\n /** Route title or title template */\n title?: string | TplFn<any>;\n /** Route icon string */\n icon?: string;\n /** Route config item */\n route: RouteConfigItem;\n /** This route is a tree route */\n tree?: boolean;\n}\n\n/**\n * Route function type.\n * Takes parameters, return a route.\n */\nexport type RouteFn = (...args: any[]) => (string | number)[];\n\n/**\n * Route config item.\n * Stores route named parameters, route function and route name.\n */\nexport interface RouteConfigItem {\n params: string[];\n route: RouteFn;\n name: string;\n}\n\nexport function RData<T extends BaseRouteParams>(value: T) {\n return value;\n}\n\nexport type RoutesConfig<T extends string> = {\n readonly [Property in T]: RouteConfigItem;\n};\n\nexport interface StrictRoutes extends Route {\n data: BaseRouteParams;\n}\n\nexport type RoutesDefinition = StrictRoutes[];\n\ninterface RouteArg<T> {\n [index: string]: T;\n}\n\nexport class Link<T> {\n private _cargs: { [index: string]: any } = {};\n private _params: string[] = [];\n private _route: RouteFn;\n private _router?: Router;\n\n constructor(config: RouteConfigItem, context: any, router?: Router) {\n this._params = config.params || [];\n this._route = config.route;\n this._router = router;\n this._name = config.name;\n if (context) {\n this.context(context);\n }\n }\n\n private _name!: string;\n\n public get name(): string {\n return this._name;\n }\n\n public context(ctx: any): void {\n for (const n of this._params) {\n if (ctx && ctx[n]) {\n this._cargs[n] = ctx[n];\n } else {\n this._cargs[n] = null;\n }\n }\n }\n\n public route(params?: Required<RouteArg<T>>): (string | number)[] {\n const rargs: any[] = [];\n for (const n of this._params) {\n if (params && params[n] !== undefined && params[n] !== null) {\n rargs.push(params[n]);\n } else if (this._cargs[n] !== undefined && this._cargs[n] !== null) {\n rargs.push(this._cargs[n]);\n } else {\n console.error('Missing route parameter', n);\n return [];\n }\n }\n // SEE: Check for undefined in rargs\n return this._route(...rargs);\n }\n\n public async navigate(\n params?: { [index: string]: T },\n router?: Router\n ): Promise<boolean> {\n if (router) {\n return router.navigate(this.route(params));\n }\n if (this._router) {\n return this._router.navigate(this.route(params));\n }\n console.error('Router not provided, no navigation');\n return false;\n }\n}\n","import {\n Component,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n} from '@angular/core';\nimport { Subject, takeUntil } from 'rxjs';\nimport {\n ActivatedRoute,\n ActivatedRouteSnapshot,\n NavigationEnd,\n Router,\n RouterModule,\n RouterState,\n UrlSegment,\n} from '@angular/router';\nimport { filter } from 'rxjs/operators';\nimport { CommonModule } from '@angular/common';\nimport { BaseRouteParams, TplFn } from '../routing';\n\nexport interface IPathTreeItem {\n path: string;\n title: string;\n icon: string;\n current: boolean;\n}\n\n/**\n * Use data from route config to create a breadcrumb for current route.\n *\n * Route config data is :\n * - title : route fragment title or lodash template to build title\n * (provided arguments for template processing : route (current segment route snapshot)\n * and data (input argument)\n * - icon: icon classes. Example fa fa-home for home & font awesome\n */\n@Component({\n selector: 'data-breadcrumb',\n templateUrl: './breadcrumb.component.html',\n styleUrls: ['./breadcrumb.component.css'],\n standalone: true,\n imports: [CommonModule, RouterModule],\n})\nexport class BreadcrumbComponent implements OnChanges, OnInit, OnDestroy {\n /**\n * Additional data to be used in titleTemplate\n */\n @Input() public data: any;\n /**\n * Do we display icons ?\n */\n @Input() public icons = true;\n public tree: IPathTreeItem[] = [];\n private _subscriptions = new Subject<void>();\n\n constructor(public router: Router, public route: ActivatedRoute) {}\n\n ngOnInit(): void {\n this.getRouteTree(this.router.routerState);\n this.router.events\n .pipe(\n takeUntil(this._subscriptions),\n filter((event) => event instanceof NavigationEnd)\n )\n .subscribe(() => {\n this.getRouteTree(this.router.routerState);\n });\n }\n\n public ngOnDestroy() {\n this._subscriptions.next();\n this._subscriptions.complete();\n }\n\n public ngOnChanges(changes: SimpleChanges) {\n this.getRouteTree(this.router.routerState);\n }\n\n public getRouteTree(current: RouterState): void {\n const tree: IPathTreeItem[] = [];\n const url: string[] = [];\n let p: ActivatedRouteSnapshot | null = current.root.snapshot;\n\n while (p != null) {\n let rdata: Partial<BaseRouteParams> = {\n tree: false,\n title: () => 'xxxx',\n icon: '',\n skip: true,\n };\n const data = p.data as BaseRouteParams;\n\n // Get route data\n if (p.routeConfig && p.routeConfig.data) {\n rdata = p.routeConfig.data as BaseRouteParams;\n }\n\n if (rdata.tree) {\n // Get icon\n for (const u of p.url) {\n url.push(u.path);\n let rtd: IPathTreeItem = {\n icon: this.getIcon(rdata, data),\n title: this.getTitle(rdata, data, u),\n path: url.join('/'),\n current: false,\n };\n if (rtd.path.length > 0 && rtd.path[0] !== '/') {\n rtd.path = '/' + rtd.path;\n }\n if (!rdata.skip) {\n tree.push(rtd);\n }\n }\n } else {\n url.push(p.url.join('/'));\n let rtd: IPathTreeItem = {\n icon: this.getIcon(rdata, data),\n title: this.getTitle(rdata, data),\n path: url.join('/'),\n current: false,\n };\n if (rtd.path.length > 0 && rtd.path[0] !== '/') {\n rtd.path = '/' + rtd.path;\n }\n if (!rdata.skip) {\n tree.push(rtd);\n }\n }\n\n p = p.firstChild;\n }\n if (tree.length > 0) {\n tree[tree.length - 1].current = true;\n }\n this.tree = tree;\n }\n\n public getTitle(\n rdata: Partial<BaseRouteParams>,\n data: BaseRouteParams,\n u?: UrlSegment\n ): string {\n if (rdata['title']) {\n if (typeof rdata['title'] === 'function') {\n const tpl: TplFn<any> = rdata['title'];\n try {\n if (u) {\n return tpl(data, u.path);\n } else {\n return tpl(data);\n }\n } catch (e) {\n console.warn('Unable to process breadcrumb function', e);\n if (data.title != null) {\n return 'xx';\n }\n }\n } else {\n return rdata['title'];\n }\n }\n return 'xxx';\n }\n\n public getIcon(\n rdata: Partial<BaseRouteParams>,\n data: BaseRouteParams\n ): string {\n if (data.icon) {\n return data.icon;\n }\n return '';\n }\n}\n","\n<nav aria-label=\"breadcrumb\">\n <ol class=\"breadcrumb\">\n <ng-container *ngFor=\"let p of tree\">\n <li class=\"breadcrumb-item\" *ngIf=\"!p.current\"><a class=\"breadcrumb-item\" [routerLink]=\"p.path\">\n <ng-container *ngIf=\"icons &amp;&amp; p.icon\"><i class=\"me-2\" [ngClass]=\"p.icon\"></i>{{p.title}}</ng-container>\n <ng-container *ngIf=\"!(icons &amp;&amp; p.icon)\">{{p.title}}</ng-container></a></li>\n <li class=\"breadcrumb-item active\" aria-current=\"page\" *ngIf=\"p.current\">\n <ng-container *ngIf=\"icons &amp;&amp; p.icon\"><i class=\"me-1\" [ngClass]=\"p.icon\"></i>{{p.title}}</ng-container>\n <ng-container *ngIf=\"!(icons &amp;&amp; p.icon)\">{{p.title}}</ng-container>\n </li>\n </ng-container>\n </ol>\n</nav>","import { Injectable } from '@angular/core';\nimport { UrlSegment } from '@angular/router';\n\ninterface ITabStoredMem {\n name: string;\n value: string;\n}\n\nexport class NavDriver {\n private lastActive!: Date;\n\n constructor(\n private _parent: TabMemoryService,\n public name: string,\n public defaults: string,\n private save: boolean\n ) {\n this._current = this.defaults;\n\n const value = this._parent.load(this.name);\n if (value !== null) {\n this._current = value;\n }\n }\n\n private _current: string;\n\n public get current(): string {\n return this._current;\n }\n\n public set current(value: string) {\n this._current = value;\n this.lastActive = new Date();\n this._parent.save();\n }\n\n public get value(): ITabStoredMem {\n return { name: this.name, value: this._current };\n }\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TabMemoryService {\n private tabMem: { [index: string]: NavDriver } = {};\n\n constructor() {}\n\n private static targetToString(\n target: (string | number | UrlSegment)[]\n ): string {\n let out = '';\n for (const t of target) {\n out += `/${t}`;\n }\n return out;\n }\n\n public memFor(\n target: (string | number | UrlSegment)[],\n defaults: string,\n save: boolean = true\n ): NavDriver {\n const tname = TabMemoryService.targetToString(target);\n if (this.tabMem[tname] === undefined) {\n this.tabMem[tname] = new NavDriver(this, tname, defaults, save);\n }\n return this.tabMem[tname];\n }\n\n public save() {\n const tosave: { [index: string]: ITabStoredMem } = {};\n for (const tn of Object.keys(this.tabMem)) {\n tosave[tn] = this.tabMem[tn].value;\n }\n localStorage.setItem('tabmem', JSON.stringify(tosave));\n }\n\n public load(name: string): string | null {\n const tm = localStorage.getItem('tabmem');\n if (tm) {\n const tmd = JSON.parse(tm);\n if (tmd && tmd[name] && tmd[name].value) {\n return tmd[name].value;\n }\n }\n return null;\n }\n}\n","export const slugify = (str: string): string => {\n str = str.replace(/^\\s+|\\s+$/g, ''); // trim\n str = str.toLowerCase();\n\n // remove accents, swap ñ for n, etc\n const from = 'àáäâèéëêìíïîòóöôùúüûñç·/_,:;';\n const to = 'aaaaeeeeiiiioooouuuunc------';\n for (let i = 0, l = from.length; i < l; i++) {\n str = str.replace(new RegExp(from.charAt(i), 'g'), to.charAt(i));\n }\n\n str = str\n .replace(/[^a-z0-9 -]/g, '') // remove invalid chars\n .replace(/\\s+/g, '-') // collapse whitespace and replace by -\n .replace(/-+/g, '-'); // collapse dashes\n\n return str;\n};\n","/*\n * Public API Surface of data\n */\n\nexport * from './lib/data/data-parameters';\nexport * from './lib/data/data-model';\nexport * from './lib/data/data-collection';\nexport * from './lib/data/data-backend';\nexport * from './lib/data/data-query';\n\nexport * from './lib/modellist/model-list.service';\nexport * from './lib/modellist/model-list-fields/model-list-fields-selector/model-list-fields-selector.component';\nexport * from './lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component';\nexport * from './lib/modellist/model-list-sorter/model-list-sorter/model-list-sorter.component';\nexport * from './lib/modellist/model-list-filters/model-list-filters-select/model-list-filters-select.component';\nexport * from './lib/modellist/model-list-filters/model-list-filters/model-list-filters.component';\nexport * from './lib/modellist/model-list-filters/model-list-filters';\n\nexport * from './lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter';\nexport * from './lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter';\nexport * from './lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter';\nexport * from './lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetimerange-filter';\nexport * from './lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter';\nexport * from './lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter';\nexport * from './lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter';\nexport * from './lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter';\nexport * from './lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter';\nexport * from './lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter';\nexport * from './lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter';\n\nexport * from './lib/modellist/model-list-filters/filters/model-list-geodistance-filter/adapters/ban';\n\nexport * from './lib/modellist/model-list-paginator/model-list-paginator/model-list-paginator.component';\n\nexport * from './lib/dispedit/choice.pipe';\nexport * from './lib/dispedit/factor.pipe';\nexport * from './lib/dispedit/factorc.pipe';\nexport * from './lib/dispedit/dispedit/dispedit.component';\nexport * from './lib/dispedit/fkselect/fkselect.component';\nexport * from './lib/dispedit/m2mselect/m2mselect.component';\n\nexport * from './lib/dispedit/sdelete/sdelete.component';\nexport * from './lib/data/fields/index';\n\nexport * from './lib/messages/message.service';\nexport * from './lib/messages/message-zone/message-zone.component';\n\nexport * from './lib/data/data-collection.mock';\nexport * from './lib/uploader/index';\n\nexport * from './lib/auth/auth.service';\nexport * from './lib/auth/auth-interceptor.service';\nexport * from './lib/auth/jwt';\n\nexport * from './lib/routing/routing';\nexport * from './lib/routing/breadcrumb/breadcrumb.component';\n\nexport * from './lib/utils/tab-memory.service';\nexport * from './lib/utils/slugify';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3","i1.DataMessageService"],"mappings":"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"}