ngx-edu-sharing-ui 10.0.25 → 10.0.27

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 (36) hide show
  1. package/assets/scss/branding.scss +4 -3
  2. package/assets/scss/material-theme.scss +38 -3
  3. package/assets/scss/mixins.scss +2 -2
  4. package/assets/scss/variables-scss.scss +2 -1
  5. package/assets/scss/variables.scss +8 -1
  6. package/fesm2022/ngx-edu-sharing-ui.mjs +2071 -1864
  7. package/fesm2022/ngx-edu-sharing-ui.mjs.map +1 -1
  8. package/lib/directives/icon.directive.d.ts +3 -1
  9. package/lib/edu-sharing-ui-configuration.d.ts +7 -0
  10. package/lib/edu-sharing-ui.module.d.ts +2 -2
  11. package/lib/index.d.ts +3 -0
  12. package/lib/list-items/list-text/list-text.component.d.ts +1 -1
  13. package/lib/list-items/list-widget.d.ts +1 -1
  14. package/lib/mds/mds-helper.service.d.ts +14 -2
  15. package/lib/mds-viewer/mds-editor-instance-service.abstract.d.ts +3 -2
  16. package/lib/mds-viewer/mds-viewer.component.d.ts +1 -0
  17. package/lib/mds-viewer/mds-viewer.service.d.ts +14 -1
  18. package/lib/mds-viewer/widget/mds-widget.component.d.ts +15 -13
  19. package/lib/node-entries/entries-model.d.ts +13 -2
  20. package/lib/node-entries/node-entries-card-grid/node-entries-card-grid.component.d.ts +0 -2
  21. package/lib/node-entries/node-entries-global.service.d.ts +3 -0
  22. package/lib/node-entries/node-entries-table/node-entries-table.component.d.ts +11 -3
  23. package/lib/node-entries/node-entries-templates.service.d.ts +4 -0
  24. package/lib/node-entries/node-entries-wrapper.component.d.ts +18 -4
  25. package/lib/node-entries/node-entries.module.d.ts +1 -1
  26. package/lib/node-entries/node-type-badge/node-type-badge.component.d.ts +13 -4
  27. package/lib/pipes/node-image.pipe.d.ts +1 -1
  28. package/lib/services/node-entries.service.d.ts +7 -2
  29. package/lib/services/node-helper.service.d.ts +6 -4
  30. package/lib/services/render-helper.service.d.ts +2 -1
  31. package/lib/services/ui.service.d.ts +4 -0
  32. package/lib/translations/translation-loader.d.ts +3 -3
  33. package/lib/types/injection-tokens.d.ts +9 -16
  34. package/lib/types/option-item.d.ts +10 -4
  35. package/lib/util/ui-constants.d.ts +1 -0
  36. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-edu-sharing-ui.mjs","sources":["../../../projects/edu-sharing-ui/src/lib/util/ui-constants.ts","../../../projects/edu-sharing-ui/src/lib/util/isNumeric.ts","../../../projects/edu-sharing-ui/src/lib/util/DateHelper.ts","../../../projects/edu-sharing-ui/src/lib/util/rest-helper.ts","../../../projects/edu-sharing-ui/src/lib/pipes/file-size.pipe.ts","../../../projects/edu-sharing-ui/src/lib/mds-viewer/mds-editor-instance-service.abstract.ts","../../../projects/edu-sharing-ui/src/lib/services/ui.service.ts","../../../projects/edu-sharing-ui/src/lib/mds-viewer/view-instance.service.ts","../../../projects/edu-sharing-ui/src/lib/mds-viewer/mds-viewer.service.ts","../../../projects/edu-sharing-ui/src/lib/types/workflow.ts","../../../projects/edu-sharing-ui/src/lib/types/injection-tokens.ts","../../../projects/edu-sharing-ui/src/lib/types/option-item.ts","../../../projects/edu-sharing-ui/src/lib/edu-sharing-ui-configuration.ts","../../../projects/edu-sharing-ui/src/lib/services/repo-url.service.ts","../../../projects/edu-sharing-ui/src/lib/services/node-helper.service.ts","../../../projects/edu-sharing-ui/src/lib/util/functions.ts","../../../projects/edu-sharing-ui/src/lib/directives/icon.directive.ts","../../../projects/edu-sharing-ui/src/lib/pipes/mds-duration.pipe.ts","../../../projects/edu-sharing-ui/src/lib/util/VCard.ts","../../../projects/edu-sharing-ui/src/lib/pipes/vcard-name.pipe.ts","../../../projects/edu-sharing-ui/src/lib/mds-viewer/widget/mds-widget.component.ts","../../../projects/edu-sharing-ui/src/lib/mds-viewer/widget/mds-widget.component.html","../../../projects/edu-sharing-ui/src/lib/mds-viewer/replace-element-with-div.ts","../../../projects/edu-sharing-ui/src/lib/spinner-small/spinner-small.component.ts","../../../projects/edu-sharing-ui/src/lib/spinner-small/spinner-small.component.html","../../../projects/edu-sharing-ui/src/lib/mds-viewer/mds-viewer.component.ts","../../../projects/edu-sharing-ui/src/lib/mds-viewer/mds-viewer.component.html","../../../projects/edu-sharing-ui/src/lib/util/ui-animation.ts","../../../projects/edu-sharing-ui/src/lib/util/helper.ts","../../../projects/edu-sharing-ui/src/lib/pipes/option-tooltip.pipe.ts","../../../projects/edu-sharing-ui/src/lib/pipes/replace-chars.pipe.ts","../../../projects/edu-sharing-ui/src/lib/dropdown/dropdown.component.ts","../../../projects/edu-sharing-ui/src/lib/dropdown/dropdown.component.html","../../../projects/edu-sharing-ui/src/lib/actionbar/actionbar.component.ts","../../../projects/edu-sharing-ui/src/lib/actionbar/actionbar.component.html","../../../projects/edu-sharing-ui/src/lib/directives/border-box-observer.directive.ts","../../../projects/edu-sharing-ui/src/lib/directives/check-text-overflow.directive.ts","../../../projects/edu-sharing-ui/src/lib/directives/focus-state.directive.ts","../../../projects/edu-sharing-ui/src/lib/services/app-container.service.ts","../../../projects/edu-sharing-ui/src/lib/directives/infinite-scroll.directive.ts","../../../projects/edu-sharing-ui/src/lib/node-url/node-url.component.ts","../../../projects/edu-sharing-ui/src/lib/node-url/node-url.component.html","../../../projects/edu-sharing-ui/src/lib/pipes/format-date.pipe.ts","../../../projects/edu-sharing-ui/src/lib/pipes/node-icon.pipe.ts","../../../projects/edu-sharing-ui/src/lib/pipes/node-image-size.pipe.ts","../../../projects/edu-sharing-ui/src/lib/pipes/node-image.pipe.ts","../../../projects/edu-sharing-ui/src/lib/pipes/node-person-name.pipe.ts","../../../projects/edu-sharing-ui/src/lib/pipes/node-title.pipe.ts","../../../projects/edu-sharing-ui/src/lib/sort-dropdown/sort-dropdown.component.ts","../../../projects/edu-sharing-ui/src/lib/sort-dropdown/sort-dropdown.component.html","../../../projects/edu-sharing-ui/src/lib/spinner/spinner.component.ts","../../../projects/edu-sharing-ui/src/lib/spinner/spinner.component.html","../../../projects/edu-sharing-ui/src/lib/pipes/property-slug.pipe.ts","../../../projects/edu-sharing-ui/src/lib/pipes/node-license.pipe.ts","../../../projects/edu-sharing-ui/src/lib/common/edu-sharing-ui-common.module.ts","../../../projects/edu-sharing-ui/src/lib/types/list-item.ts","../../../projects/edu-sharing-ui/src/lib/mds/mds-helper.service.ts","../../../projects/edu-sharing-ui/src/lib/mds/mds.module.ts","../../../projects/edu-sharing-ui/src/lib/directives/drag-nodes/drag-nodes.ts","../../../projects/edu-sharing-ui/src/lib/directives/drag-nodes/nodes-drag-source.directive.ts","../../../projects/edu-sharing-ui/src/lib/services/abstract/toast.service.ts","../../../projects/edu-sharing-ui/src/lib/services/nodes-drag-drop.service.ts","../../../projects/edu-sharing-ui/src/lib/directives/drag-nodes/nodes-drag.directive.ts","../../../projects/edu-sharing-ui/src/lib/directives/drag-nodes/nodes-drop-target.directive.ts","../../../projects/edu-sharing-ui/src/lib/util/duration-helper.ts","../../../projects/edu-sharing-ui/src/lib/list-items/format-duration.pipe.ts","../../../projects/edu-sharing-ui/src/lib/list-items/list-widget.ts","../../../projects/edu-sharing-ui/src/lib/types/accessibillity.ts","../../../projects/edu-sharing-ui/src/lib/services/accessibility.service.ts","../../../projects/edu-sharing-ui/src/lib/list-items/list-collection-info/list-collection-info.component.ts","../../../projects/edu-sharing-ui/src/lib/list-items/list-collection-info/list-collection-info.component.html","../../../projects/edu-sharing-ui/src/lib/list-items/list-counts/list-counts.component.ts","../../../projects/edu-sharing-ui/src/lib/list-items/list-counts/list-counts.component.html","../../../projects/edu-sharing-ui/src/lib/list-items/list-node-license/list-node-license.component.ts","../../../projects/edu-sharing-ui/src/lib/list-items/list-node-license/list-node-license.component.html","../../../projects/edu-sharing-ui/src/lib/list-items/node-source.pipe.ts","../../../projects/edu-sharing-ui/src/lib/list-items/list-node-replication-source/list-node-replication-source.component.ts","../../../projects/edu-sharing-ui/src/lib/list-items/list-node-replication-source/list-node-replication-source.component.html","../../../projects/edu-sharing-ui/src/lib/list-items/list-node-workflow/list-node-workflow.component.ts","../../../projects/edu-sharing-ui/src/lib/list-items/list-node-workflow/list-node-workflow.component.html","../../../projects/edu-sharing-ui/src/lib/list-items/list-text/list-text.component.ts","../../../projects/edu-sharing-ui/src/lib/list-items/list-text/list-text.component.html","../../../projects/edu-sharing-ui/src/lib/list-items/available-widgets.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/node-entries-global.service.ts","../../../projects/edu-sharing-ui/src/lib/list-items/list-base/list-base.component.ts","../../../projects/edu-sharing-ui/src/lib/list-items/list-base/list-base.component.html","../../../projects/edu-sharing-ui/src/lib/list-items/node-row/node-row.component.ts","../../../projects/edu-sharing-ui/src/lib/list-items/node-row/node-row.component.html","../../../projects/edu-sharing-ui/src/lib/list-items/list-items.module.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/drag-preview/drag-preview.component.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/drag-preview/drag-preview.component.html","../../../projects/edu-sharing-ui/src/lib/services/abstract/app.service.ts","../../../projects/edu-sharing-ui/src/lib/translations/translations.service.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/list-item-label.pipe.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/entries-model.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/items-cap.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/sort-select-panel/sort-select-panel.component.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/sort-select-panel/sort-select-panel.component.html","../../../projects/edu-sharing-ui/src/lib/node-entries/node-data-source.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/custom-templates-data-source.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/node-data-source-remote.ts","../../../projects/edu-sharing-ui/src/lib/services/node-entries.service.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/node-entries-templates.service.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/node-entries-table/column-chooser/column-chooser.component.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/node-entries-table/column-chooser/column-chooser.component.html","../../../projects/edu-sharing-ui/src/lib/util/color-helper.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/node-rating/node-rating.component.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/node-rating/node-rating.component.html","../../../projects/edu-sharing-ui/src/lib/node-entries/preview-image/preview-image.component.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/preview-image/preview-image.component.html","../../../projects/edu-sharing-ui/src/lib/node-entries/node-type-badge/node-type-badge.component.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/node-type-badge/node-type-badge.component.html","../../../projects/edu-sharing-ui/src/lib/node-entries/option-button/option-button.component.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/node-stats-badges/node-stats-badges.component.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/node-stats-badges/node-stats-badges.component.html","../../../projects/edu-sharing-ui/src/lib/node-entries/node-entries-card/node-entries-card.component.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/node-entries-card/node-entries-card.component.html","../../../projects/edu-sharing-ui/src/lib/node-entries/node-entries-card-small/node-entries-card-small.component.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/node-entries-card-small/node-entries-card-small.component.html","../../../projects/edu-sharing-ui/src/lib/node-entries/node-entries-global-options/node-entries-global-options.component.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/node-entries-global-options/node-entries-global-options.component.html","../../../projects/edu-sharing-ui/src/lib/node-entries/node-entries-card-grid/node-entries-card-grid.component.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/node-entries-card-grid/node-entries-card-grid.component.html","../../../projects/edu-sharing-ui/src/lib/node-entries/node-entries-table/node-entries-table.component.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/node-entries-table/node-entries-table.component.html","../../../projects/edu-sharing-ui/src/lib/services/temporary-storage.service.ts","../../../projects/edu-sharing-ui/src/lib/types/keyboard-shortcuts.ts","../../../projects/edu-sharing-ui/src/lib/services/local-events.service.ts","../../../projects/edu-sharing-ui/src/lib/services/abstract/keyboard-shortcuts.service.ts","../../../projects/edu-sharing-ui/src/lib/services/abstract/options-helper.service.ts","../../../projects/edu-sharing-ui/src/lib/services/options-helper-data.service.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/node-entries.component.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/node-entries.component.html","../../../projects/edu-sharing-ui/src/lib/node-entries/node-entries-wrapper.component.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/node-entries.module.ts","../../../projects/edu-sharing-ui/src/lib/edu-sharing-ui.module.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/combined-data-source.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/node-cache.ts","../../../projects/edu-sharing-ui/src/lib/services/render-helper.service.ts","../../../projects/edu-sharing-ui/src/lib/translations/fallback-translation-handler.ts","../../../projects/edu-sharing-ui/src/lib/translations/translation-source.ts","../../../projects/edu-sharing-ui/src/lib/translations/translation-loader.ts","../../../projects/edu-sharing-ui/src/lib/translations/translations.module.ts","../../../projects/edu-sharing-ui/src/lib/services/search-helper.service.ts","../../../projects/edu-sharing-ui/src/lib/index.ts","../../../projects/edu-sharing-ui/src/ngx-edu-sharing-ui.ts"],"sourcesContent":["export class UIConstants {\n public static ROUTER_PREFIX = 'components/';\n // also declared in scss!\n public static MOBILE_WIDTH = 700;\n public static MOBILE_HEIGHT = 750;\n public static MOBILE_HEIGHT_WITH_KEYBOARD = 550;\n public static MOBILE_STAGE = 100;\n public static MOBILE_TAB_SWITCH_WIDTH = UIConstants.MOBILE_WIDTH + UIConstants.MOBILE_STAGE * 2;\n public static MEDIA_QUERY_MIN_WIDTH = 'min-width';\n public static MEDIA_QUERY_MAX_WIDTH = 'max-width';\n public static MEDIA_QUERY_MIN_HEIGHT = 'min-height';\n public static MEDIA_QUERY_MAX_HEIGHT = 'max-height';\n\n public static QUERY_PARAM_LIST_VIEW_TYPE = 'displayType';\n}\nexport enum OPEN_URL_MODE {\n Current, // Current Window, or In App browser on cordova\n Blank, // New Window, or In App browser on cordova\n BlankSystemBrowser, // New Window, or system browser on cordova\n}\n","/**\n * Copy paste from rxjs/util/isNumeric since importing it from there will trigger a warning about\n * CommonJS or AMD dependencies and indeed increase the bundle size a bit.\n */\n\n// From https://github.com/ReactiveX/rxjs/blob/6.x/src/internal/util/isArray.ts\nconst isArray = (() =>\n Array.isArray || (<T>(x: any): x is T[] => x && typeof x.length === 'number'))();\n\n// From https://github.com/ReactiveX/rxjs/blob/6.x/src/internal/util/isNumeric.ts\nexport function isNumeric(val: any): val is number | string {\n return !isArray(val) && val - parseFloat(val) + 1 >= 0;\n}\n","import { TranslateService } from '@ngx-translate/core';\nimport { isNumeric } from './isNumeric';\nexport enum RelativeMode {\n off,\n short,\n medium,\n large,\n all,\n}\nexport class FormatOptions {\n showDate? = true;\n showAlwaysTime? = false;\n showSeconds? = false;\n // @Deprecated\n // this will be mapped to relativeLabels = MEDIUM\n // use relativeLabels instead\n useRelativeLabels? = true;\n relativeLabels?: RelativeMode;\n}\n\nexport class DateHelper {\n /**\n * Fill a date (day + month) string, e.g. 2 -> 02\n * @param date\n * @returns {string}\n */\n private static fillDate(date: number): string {\n if (date < 10) return '0' + date;\n return date + '';\n }\n\n /**\n * Convert date to a unix timestamp\n * @param date\n * @returns {number}\n */\n public static convertDate(date: any) {\n return new Date(date).getTime();\n }\n\n /**\n * format a date with a given, fixed string\n * For consistency, we use the patterns from\n * https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html\n * @param date\n * @param {string} format\n * @returns {string}\n */\n public static formatDateByPattern(date: number | any, format: string): string {\n if (!isNumeric(date)) {\n return date;\n }\n let dateObject = new Date((date as number) * 1);\n format = format.replace('y', '' + dateObject.getFullYear());\n format = format.replace('M', '' + DateHelper.fillDate(dateObject.getMonth() + 1));\n format = format.replace('d', '' + DateHelper.fillDate(dateObject.getDate()));\n return format;\n }\n\n /**\n * Format a date for the current language\n */\n public static formatDate(\n translation: TranslateService,\n date: number | any,\n options: FormatOptions = new FormatOptions(),\n ): string {\n try {\n if (options.useRelativeLabels && !options.relativeLabels) {\n options.relativeLabels = RelativeMode.medium;\n }\n if (date == null) {\n return null;\n }\n if (!isNumeric(date)) {\n date = Date.parse(date);\n }\n let dateObject = new Date((date as number) * 1);\n let dateToday = new Date();\n let dateYesterday = new Date();\n dateYesterday.setDate(dateYesterday.getDate() - 1);\n let isToday = dateObject.toDateString() == dateToday.toDateString();\n let isYesterday = dateObject.toDateString() == dateYesterday.toDateString();\n let prefix = '';\n let timeDiff = (dateToday.getTime() - dateObject.getTime()) / 1000;\n let diffDays = Math.floor(timeDiff / (3600 * 24));\n let diffMonths = new Date(timeDiff * 1000).getMonth();\n let diffYears = new Date(timeDiff * 1000).getFullYear() - 1970;\n let addDate = true;\n let timeFormat = 'HH:mm';\n if (options.showSeconds) {\n timeFormat += ':ss';\n }\n if (timeDiff < 3600 * 6 && options.relativeLabels >= RelativeMode.short) {\n if (timeDiff < 90) {\n prefix = translation.instant('JUST_NOW', { seconds: timeDiff });\n } else if (timeDiff < 60 * 100) {\n prefix = translation.instant('MINUTES_AGO', {\n minutes: Math.round(timeDiff / 60),\n });\n } else {\n prefix = translation.instant('HOURS_AGO', {\n hours: Math.round(timeDiff / (60 * 60)),\n });\n }\n addDate = false;\n timeFormat = '';\n } else if (isToday && options.relativeLabels >= RelativeMode.short) {\n prefix = translation.instant('TODAY');\n addDate = false;\n } else if (isYesterday && options.relativeLabels >= RelativeMode.medium) {\n prefix = translation.instant('YESTERDAY');\n addDate = false;\n } else if (\n (diffDays < 6 && options.relativeLabels >= RelativeMode.medium) ||\n (diffDays < 45 && options.relativeLabels >= RelativeMode.large)\n ) {\n prefix = translation.instant('DAYS_AGO', { days: diffDays });\n addDate = false;\n if (!options.showAlwaysTime) timeFormat = '';\n } else if (\n diffYears === 0 &&\n diffMonths < 12 &&\n options.relativeLabels >= RelativeMode.large\n ) {\n prefix = translation.instant('MONTHS_AGO', { months: diffMonths });\n addDate = false;\n if (!options.showAlwaysTime) timeFormat = '';\n } else if (options.relativeLabels === RelativeMode.all) {\n prefix = translation.instant('YEARS_AGO', { years: diffYears });\n addDate = false;\n if (!options.showAlwaysTime) timeFormat = '';\n } else {\n if (!options.showAlwaysTime) timeFormat = '';\n }\n\n // ng2's dateformatter is super slow, but it doesn't matter, we just iterate it once :)\n //return dateFormat+time;\n let str = prefix;\n if (addDate) {\n if (translation.currentLang === 'en') {\n str +=\n dateObject.getFullYear() +\n '-' +\n DateHelper.fillDate(dateObject.getMonth() + 1) +\n '-' +\n DateHelper.fillDate(dateObject.getDate());\n } else {\n str +=\n DateHelper.fillDate(dateObject.getDate()) +\n '.' +\n DateHelper.fillDate(dateObject.getMonth() + 1) +\n '.' +\n dateObject.getFullYear();\n }\n //str += DateFormatter.format(dateObject, Translation.getLanguage(), dateFormat).trim();\n }\n if (options.showDate == false) {\n str = '';\n }\n // ie fixes, timeFormat not working\n if (timeFormat) {\n if (str) str += ', ';\n\n //let timeValue=dateObject.toLocaleTimeString(Translation.getLanguage());\n //let times=timeValue.split(\":\");\n str += timeFormat\n .replace('HH', DateHelper.fillDate(dateObject.getHours()))\n .replace('mm', DateHelper.fillDate(dateObject.getMinutes()))\n .replace('ss', DateHelper.fillDate(dateObject.getSeconds()));\n }\n return str;\n /*\n let dateString=prefix+\" \";\n if(dateFormat!=\"\"){\n dateString+=dateObject.toLocaleDateString(Translation.getLanguage())+\" \";\n }\n if(time!=\"\"){\n dateString+=dateObject.toLocaleTimeString(Translation.getLanguage());\n }\n return dateString;\n */\n } catch (e) {\n return date as any;\n }\n }\n static getDateFromDatepicker(date: Date) {\n return new Date(date.getTime() - date.getTimezoneOffset() * 60 * 1000);\n }\n\n static getDateForNewFile() {\n return DateHelper.formatDate(null, new Date().getTime(), {\n showAlwaysTime: true,\n useRelativeLabels: false,\n });\n }\n}\n","import { Node, RestConstants } from 'ngx-edu-sharing-api';\n/**\n * Different helper functions, may be used globally\n */\nexport class RestHelper {\n protected static SPACES_STORE_REF = 'workspace://SpacesStore/';\n public static getName(node: Node): string {\n if (node.name) return node.name;\n if (node.properties?.[RestConstants.CM_NAME])\n return node.properties[RestConstants.CM_NAME].join();\n if (node.title) return node.title;\n if (node.ref) return node.ref.id;\n return null;\n }\n public static getTitle(node: Node): string {\n if (node?.title) return node.title;\n if (node?.name) {\n return node?.name;\n }\n if (node?.properties) {\n return RestHelper.getTitleFromProperties(node?.properties);\n }\n return '';\n }\n public static getTitleFromProperties(properties: any): string {\n const value = properties[RestConstants.LOM_PROP_TITLE]\n ? properties[RestConstants.LOM_PROP_TITLE]\n : properties[RestConstants.CM_NAME];\n if (Array.isArray(value)) {\n return value.join(', ');\n }\n return value;\n }\n\n public static hasAccessPermission(node: Node, permission: string): boolean {\n return node.access && node.access.indexOf(permission) != -1;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Pipe({\n name: 'formatSize',\n standalone: false,\n})\nexport class FormatSizePipe implements PipeTransform {\n constructor(private translate: TranslateService) {}\n\n transform(value: any, args: string[] = null): string {\n let names = ['bytes', 'KB', 'MB', 'GB', 'TB'];\n let i = 0;\n if (isNaN(value)) return value;\n if (value == null) value = 0;\n while (value >= 1024 && i < names.length) {\n value /= 1024;\n i++;\n }\n let options: Intl.NumberFormatOptions = {\n maximumFractionDigits: i > 1 ? 1 : 0,\n };\n let numberFormat = new Intl.NumberFormat([], options);\n return numberFormat.format(value) + ' ' + names[i];\n }\n}\n","import { BehaviorSubject } from 'rxjs';\nimport { Node } from 'ngx-edu-sharing-api';\nimport { Values } from '../services/search-helper.service';\n\nexport type EditorMode = 'nodes' | 'search' | 'form' | 'inline' | 'viewer';\n\nexport abstract class MdsEditorInstanceServiceAbstract {\n mdsId: string;\n editorMode: EditorMode;\n /** Current values (if not in node mode) */\n values$ = new BehaviorSubject<Values>(null);\n /** Nodes with updated and complete metadata. */\n nodes$ = new BehaviorSubject<Node[]>(null);\n\n abstract saveWidgetValue(widget: any): Promise<void>;\n\n abstract fetchDisplayValues(widget: any): Promise<void>;\n}\n","import {\n ComponentFactoryResolver,\n ComponentRef,\n EmbeddedViewRef,\n Injectable,\n Injector,\n NgZone,\n Type,\n ViewContainerRef,\n} from '@angular/core';\nimport * as rxjs from 'rxjs';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { UIConstants } from '../util/ui-constants';\nimport { OptionItem } from '../types/option-item';\nimport { distinctUntilChanged, map } from 'rxjs/operators';\nimport { Node } from 'ngx-edu-sharing-api';\n\n@Injectable({ providedIn: 'root' })\nexport class UIService {\n isTouchSubject = new BehaviorSubject(false);\n private metaKeyPressedSubject = new BehaviorSubject(false);\n private shiftKeyPressedSubject = new BehaviorSubject(false);\n private ctrlKeyPressedSubject = new BehaviorSubject(false);\n\n get shiftKeyPressed() {\n return this.shiftKeyPressedSubject.value;\n }\n\n constructor(\n protected componentFactoryResolver: ComponentFactoryResolver,\n protected injector: Injector,\n protected ngZone: NgZone,\n ) {\n // HostListener not working, so use window\n this.ngZone.runOutsideAngular(() => {\n window.addEventListener('keydown', (event) => {\n this.onKeyDownOrKeyUp(event);\n });\n window.addEventListener('keyup', (event) => {\n this.onKeyDownOrKeyUp(event);\n });\n window.addEventListener('pointerdown', (event) => {\n // Usually, properties for modifier keys will be set correctly on keydown and keyup\n // events, but there are situations where the operating system intercepts key\n // presses, e.g. the Windows key on Linux systems, so we update again on mouse\n // clicks to be sure.\n this.updateModifierKeys(event);\n });\n window.addEventListener('pointerdown', (event) => {\n // Usually, properties for modifier keys will be set correctly on keydown and keyup\n // events, but there are situations where the operating system intercepts key\n // presses, e.g. the Windows key on Linux systems, so we update again on mouse\n // clicks to be sure.\n const isTouch = (event as PointerEvent).pointerType === 'touch';\n if (this.isTouchSubject.value !== isTouch) {\n this.ngZone.run(() => this.isTouchSubject.next(isTouch));\n }\n });\n });\n }\n private onKeyDownOrKeyUp(event: KeyboardEvent) {\n // `event.metaKey` is not consistent across browsers on the actual keypress of the modifier\n // key. So we handle these events separately.\n if (event.key === 'Control') {\n this.ctrlKeyPressedSubject.next(event.type === 'keydown');\n } else if (event.key === 'Shift') {\n this.shiftKeyPressedSubject.next(event.type === 'keydown');\n } else if (event.key === 'Meta') {\n this.metaKeyPressedSubject.next(event.type === 'keydown');\n } else {\n // In case we miss modifier events because the browser didn't have focus during the\n // event, we update modifier keys on unrelated key events as well.\n this.updateModifierKeys(event);\n }\n }\n\n private updateModifierKeys(event: PointerEvent | KeyboardEvent) {\n this.metaKeyPressedSubject.next(event.metaKey);\n this.shiftKeyPressedSubject.next(event.shiftKey);\n this.ctrlKeyPressedSubject.next(event.ctrlKey);\n }\n\n observeCtrlOrCmdKeyPressedOutsideZone(): Observable<boolean> {\n return rxjs.combineLatest([this.metaKeyPressedSubject, this.ctrlKeyPressedSubject]).pipe(\n map(([metaKeyPressed, ctrlKeyPressed]) => metaKeyPressed || ctrlKeyPressed),\n distinctUntilChanged(),\n );\n }\n\n /**\n * @Deprecated\n * Prefer to subscribe to the isTouchSubject directly if viable\n *\n * Returns true if the current sessions seems to be running on a mobile device\n */\n public isMobile() {\n return this.isTouchSubject.value;\n }\n public static evaluateMediaQuery(type: string, value: number) {\n if (type == UIConstants.MEDIA_QUERY_MAX_WIDTH) return value > window.innerWidth;\n if (type == UIConstants.MEDIA_QUERY_MIN_WIDTH) return value < window.innerWidth;\n if (type == UIConstants.MEDIA_QUERY_MAX_HEIGHT) return value > window.innerHeight;\n if (type == UIConstants.MEDIA_QUERY_MIN_HEIGHT) return value < window.innerHeight;\n console.warn('Unsupported media query ' + type);\n return true;\n }\n filterValidOptions(options: OptionItem[]) {\n if (options == null) return null;\n options = options.filter((value) => value != null);\n let optionsFiltered: OptionItem[] = [];\n for (let option of options) {\n if (\n (!option.onlyMobile || (option.onlyMobile && this.isMobile())) &&\n (!option.onlyDesktop || (option.onlyDesktop && !this.isMobile())) &&\n (!option.mediaQueryType ||\n (option.mediaQueryType &&\n UIService.evaluateMediaQuery(\n option.mediaQueryType,\n option.mediaQueryValue,\n )))\n )\n optionsFiltered.push(option);\n }\n return optionsFiltered;\n }\n\n /**\n * helper that updates the \"isEnabled\" flag on all options for the given, selected node\n * can be used by dropdown or action menus to update the state for the current element\n * @param options\n */\n async updateOptionEnabledState(options: BehaviorSubject<OptionItem[]>, objects: Node[] = null) {\n options.value?.forEach((o) => {\n o.isEnabled = !o.customEnabledCallback;\n void o.enabledCallback(objects).then((result) => {\n o.isEnabled = result;\n options.next(options.value);\n });\n });\n options.next(options.value);\n }\n\n public filterToggleOptions(\n options: OptionItem[],\n toggle: boolean,\n togglePosition: 'before' | 'after' = 'after',\n ) {\n let result: OptionItem[] = [];\n for (let option of options) {\n if (option.isToggle === toggle && (!toggle || togglePosition === option.togglePosition))\n result.push(option);\n }\n return result;\n }\n /**\n * dynamically inject an angular component into a regular html dom element\n * @param componentFactoryResolver The resolver service\n * @param viewContainerRef The viewContainerRef service\n * @param componentName The name of the angular component (e.g. SpinnerComponent)\n * @param targetElement The target element of the dom. If the element is null (not found), nothing is done\n * @param bindings Optional bindings (inputs & outputs) to the given component\n * @param delay Optional inflating delay in ms(some components may need some time to \"init\" the layout)\n * @param replace Whether to replace to previous `innerHTML` of `targetElement`\n * @param injector (to fetch templates for the component)\n */\n public injectAngularComponent<T>(\n viewContainerRef: ViewContainerRef,\n componentName: Type<T>,\n targetElement: Element,\n bindings: { [key: string]: any } = null,\n { delay = 0, replace = true } = {},\n injector?: Injector,\n ): ComponentRef<T> {\n if (targetElement == null) {\n return null;\n }\n const factory = this.componentFactoryResolver.resolveComponentFactory(componentName);\n const component: ComponentRef<T> = viewContainerRef.createComponent(\n factory,\n undefined,\n injector || this.injector,\n );\n if (bindings) {\n const instance: { [key: string]: any } = component.instance;\n for (const key in bindings) {\n const binding = bindings[key];\n if (binding instanceof Function) {\n // subscribe so callback can properly invoked\n instance[key].subscribe((value: any) => binding(value));\n } else {\n instance[key] = binding;\n // `ngOnChanges` won't be called on the component like this. Consider doing\n // something like this:\n // https://scm.edu-sharing.com/edu-sharing/projects/oeh-redaktion/ng-meta-widgets/-/blob/1603fb2dedadd3952401385bcbd91a4bd8407643/src/app/app.module.ts#L66-79\n }\n }\n }\n\n // 3. Get DOM element from component\n const domElem = (component.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n domElem.style.display = 'none';\n if (replace) {\n targetElement.innerHTML = null;\n }\n targetElement.appendChild(domElem);\n setTimeout(() => {\n domElem.style.display = null;\n }, delay);\n return component;\n }\n\n /**\n * dynamically inject an angular component into a regular html dom element\n * @param componentFactoryResolver The resolver service\n * @param viewContainerRef The viewContainerRef service\n * @param componentName The name of the angular component (e.g. SpinnerComponent)\n * @param targetElement The target element of the dom. If the element is null (not found), nothing is done\n * @param bindings Optional bindings (inputs & outputs) to the given component\n * @param delay Optional inflating delay in ms(some components may need some time to \"init\" the layout)\n * @param replace Whether to replace to previous `innerHTML` of `targetElement`\n * @param injector (to fetch templates for the component)\n */\n public static injectAngularComponent<T>(\n componentFactoryResolver: ComponentFactoryResolver,\n viewContainerRef: ViewContainerRef,\n componentName: Type<T>,\n targetElement: Element,\n bindings: { [key: string]: any } = null,\n { delay = 0, replace = true } = {},\n injector?: Injector,\n ): ComponentRef<T> {\n if (targetElement == null) {\n return null;\n }\n const factory = componentFactoryResolver.resolveComponentFactory(componentName);\n const component: ComponentRef<T> = viewContainerRef.createComponent(\n factory,\n undefined,\n injector,\n );\n if (bindings) {\n const instance: { [key: string]: any } = component.instance;\n for (const key in bindings) {\n const binding = bindings[key];\n if (binding instanceof Function) {\n // subscribe so callback can properly invoked\n instance[key].subscribe((value: any) => binding(value));\n } else {\n instance[key] = binding;\n // `ngOnChanges` won't be called on the component like this. Consider doing\n // something like this:\n // https://scm.edu-sharing.com/edu-sharing/projects/oeh-redaktion/ng-meta-widgets/-/blob/1603fb2dedadd3952401385bcbd91a4bd8407643/src/app/app.module.ts#L66-79\n }\n }\n }\n\n // 3. Get DOM element from component\n const domElem = (component.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n domElem.style.display = 'none';\n if (replace) {\n targetElement.innerHTML = null;\n }\n targetElement.appendChild(domElem);\n setTimeout(() => {\n domElem.style.display = null;\n }, delay);\n return component;\n }\n\n /**\n * smoothly scroll to the given child inside an element (The child will be placed around the first 1/3 of the parent's top)\n * @param child\n * @param element\n * @param smoothness\n */\n scrollSmoothElementToChild(child: Element, element: Element | 'auto' = 'auto', smoothness = 1) {\n let target: Element;\n if (element === 'auto') {\n let parent = child.parentElement;\n while (parent) {\n if (['scroll', 'auto'].includes(window.getComputedStyle(parent).overflowY)) {\n target = parent;\n break;\n }\n parent = parent.parentElement;\n }\n } else {\n target = element;\n }\n // y equals to the top of the child + any scrolling of the parent - the top of the parent\n let y =\n child.getBoundingClientRect().top +\n target.scrollTop -\n target.getBoundingClientRect().top;\n // move the focused element to 1/3 at the top of the container\n y += child.getBoundingClientRect().height / 2 - target.getBoundingClientRect().height / 3;\n return this.scrollSmoothElement(y, target, smoothness);\n }\n /**\n * Smoothly scrolls to the given y offset inside an element (use offsetTop on the child to\n * determine this position).\n *\n * @param smoothness lower numbers indicate less smoothness, higher more smoothness\n */\n scrollSmoothElement(pos: number = 0, element: Element, smoothness = 1, axis = 'y') {\n return new Promise<void>((resolve) => {\n this.ngZone.runOutsideAngular(() => {\n const currentPos = axis == 'x' ? element.scrollLeft : element.scrollTop;\n if (element.getAttribute('data-is-scrolling') == 'true') {\n return;\n }\n const mode = currentPos > pos;\n let lastPos = pos;\n const maxPos =\n axis == 'x'\n ? element.scrollWidth - element.clientWidth\n : element.scrollHeight - element.clientHeight;\n let limitReached = false;\n if (mode && pos <= 0) {\n pos = 0;\n limitReached = true;\n }\n if (!mode && pos >= maxPos) {\n pos = maxPos;\n limitReached = true;\n }\n let speed = 16;\n let last = new Date().getTime();\n const callback = () => {\n let currentPos = axis == 'x' ? element.scrollLeft : element.scrollTop;\n const posDiff = currentPos - lastPos;\n const speedFactor = speed / 16;\n const divider = (3 / speedFactor) * smoothness;\n const minSpeed = (5 * speedFactor) / smoothness;\n const maxSpeed = (50 * speedFactor) / smoothness;\n lastPos = currentPos;\n let finished = true;\n if (currentPos > pos) {\n currentPos -= Math.min(\n maxSpeed,\n Math.max((currentPos - pos) / divider, minSpeed),\n );\n finished = currentPos <= pos;\n } else if (currentPos < pos && !mode) {\n currentPos += Math.min(\n maxSpeed,\n Math.max((pos - currentPos) / divider, minSpeed),\n );\n finished = currentPos >= pos;\n }\n if (finished) {\n currentPos = pos;\n }\n\n if (axis == 'x') {\n element.scrollLeft = currentPos;\n } else {\n element.scrollTop = currentPos;\n }\n if (finished) {\n element.removeAttribute('data-is-scrolling');\n resolve();\n } else {\n speed = new Date().getTime() - last;\n last = new Date().getTime();\n window.requestAnimationFrame(callback);\n }\n };\n window.requestAnimationFrame(callback);\n\n element.setAttribute('data-is-scrolling', 'true');\n });\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable()\nexport class ViewInstanceService {\n readonly isExpanded$ = new BehaviorSubject(true);\n /**\n * The heading level from 1 to 6 to use for widget labels, equivalent to `h1` to `h6`.\n *\n * If not set, widget labels are not marked as headings and an invisible colon is added between\n * labels and values, that will be read out by screen readers.\n */\n headingLevel: number | null = null;\n /**\n * how to display tree entries\n * flat (only display the last entry)\n * full (display the full tree path)\n */\n treeDisplay: 'flat' | 'path' = 'flat';\n}\n","import { ElementRef, Injectable, QueryList, ViewChildren } from '@angular/core';\nimport { MdsDefinition } from 'ngx-edu-sharing-api';\nimport { BehaviorSubject } from 'rxjs';\nimport { Values } from '../services/search-helper.service';\n\n@Injectable()\nexport class MdsViewerService {\n @ViewChildren('container') container: QueryList<ElementRef>;\n values$ = new BehaviorSubject<Values>(undefined);\n mds$ = new BehaviorSubject<MdsDefinition>(undefined);\n}\n","export interface WorkflowDefinition {\n id: string;\n color: string;\n hasReceiver: boolean;\n next: string[];\n}\n\nexport const WORKFLOW_STATUS_UNCHECKED: WorkflowDefinition = {\n id: '100_unchecked',\n color: '#539DD5',\n hasReceiver: true,\n next: null,\n};\nexport const WORKFLOW_STATUS_TO_CHECK: WorkflowDefinition = {\n id: '200_tocheck',\n color: '#3CB0B0',\n hasReceiver: true,\n next: null,\n};\nexport const WORKFLOW_STATUS_HASFLAWS: WorkflowDefinition = {\n id: '300_hasflaws',\n color: '#D58553',\n hasReceiver: true,\n next: null,\n};\nexport const WORKFLOW_STATUS_CHECKED: WorkflowDefinition = {\n id: '400_checked',\n color: '#42A053',\n hasReceiver: false,\n next: null,\n};\nexport type WorkflowDefinitionStatus = {\n current: WorkflowDefinition;\n initial: WorkflowDefinition;\n};\n","import { InjectionToken } from '@angular/core';\n\n/**\n * A custom base path for the assets directory.\n *\n * This is useful when the application cannot be served from the base HREF set in index.html. This\n * is the case when it is embedded as a web component into another website.\n */\nexport const ASSETS_BASE_PATH = new InjectionToken<string>('ASSETS_BASE_PATH');\n\nexport class I18nConfig {\n /**\n * shall the user profile be read\n * If not set, defaults to true\n */\n obeyUserProfile?: boolean = true;\n}\n\n/**\n * additional configuration options\n */\nexport const I18N_CONFIG = new InjectionToken<I18nConfig>('I18N_CONFIG');\n/**\n * custom additional uris to fetch language files from\n *\n * Might be used if additional angular modules require language data\n *\n * Example\n *{provide: ADDITIONAL_I18N_PROVIDER, useValue: (lang: string) => { return ['/edu-sharing/assets/i18n/myI18n/' + lang + '.json']}},\n */\nexport const ADDITIONAL_I18N_PROVIDER = new InjectionToken<(lang: string) => string[]>(\n 'ADDITIONAL_I18N_PROVIDER',\n);\n","/**\n * A option from the actionbar+dropdown menu\n * Example:\n this.options.push(new OptionItem(\"RESTORE_SINGLE\",\"undo\", (node) => this.restoreSingle(node)));\n this.options.push(new OptionItem(\"DELETE_SINGLE\",\"archiveDelete\", (node) => this.deleteSingle(node)));\n\n */\nimport { KeyboardShortcutCondition } from '../types/keyboard-shortcuts';\nimport { Node } from 'ngx-edu-sharing-api';\n\nexport enum NodesRightMode {\n // rights on the current node, no matter if its a reference or origianl\n Local,\n // effective rights on the current node, only relevant for collection references (for non-refs, this equals to local)\n Effective,\n}\nexport class OptionItem {\n /**\n * If true, this option will be shown all the time in the node table\n * @type {boolean}\n */\n public showAlways = false;\n /**\n * If true, this option will be shown as an action (if room). If none of the items has showAsAction set, the first items will always be shown as action\n * @type {boolean}\n */\n public showAsAction = false;\n /**\n * If true, this option will be shown as a toggle on the right side (provide iconToggle as a toggle icon)\n * @type {boolean}\n */\n public isToggle = false;\n /**\n * Only when @isToggle. is the toggle currently visible\n */\n public isToggleVisible = true;\n /**\n * Only when @isToggle. Where to place the toggle, before or after all other actions\n * @type {boolean}\n */\n public togglePosition: 'before' | 'after' = 'after';\n /**\n * If true, shows a line at the top.\n *\n * This feature is usually handled now by associating an entry to a `group`\n * now. However `isSeparate` is kept as fallback for now.\n */\n public isSeparate = false;\n /**\n * The item will be indicated with an accent color in the menu.\n *\n * Used by the dropdown variant of the main menu to indicate the currently\n * active scope.\n */\n public isSelected = false;\n /**\n * If true, only displayed on a mobile device (based on the navigator agent)\n * @type {boolean}\n */\n public onlyMobile = false;\n /**\n * custom aria-label\n * @type {string}\n */\n public ariaLabel = '';\n /**\n * If true, only displayed on a desktop device (based on the navigator agent)\n * @type {boolean}\n */\n public onlyDesktop = false;\n /**\n * You can set a media-query similar to CSS, see the MEDIA_QUERY constants in ui-constants\n * Use in combination with mediaQueryValue\n * @type {boolean}\n */\n public mediaQueryType: string;\n /**\n * The value for the defined media query\n */\n public mediaQueryValue: number;\n\n /**\n * Set to false if the action should be shown, but should not be clickable\n * @type {boolean}\n */\n public isEnabled = true;\n\n /**\n * Whether the option should be manually marked as primary action when always visible on an\n * `actionbar`.\n */\n public isPrimary: boolean;\n\n /**\n * A function called with the node as param which should return true or false if the option should be shown for this node\n * Is handled by optionsHelper and may not be used otherwise\n * Please use @customShowCallback instead\n */\n public showCallback: (nodes?: Node[]) => Promise<boolean>;\n /**\n * A function called with the node as parm which should return true or false if the option should be shown for this node\n * Will be called by the optionsHelper\n */\n public customShowCallback: (nodes?: Node[] | any[]) => Promise<boolean>;\n /**\n * A function called with the node as param which should return true or false if the option should be enabled or not\n * Is handled by optionsHelper and may not be used otherwise\n * Please use @customEnabledCallback instead\n */\n public enabledCallback: (nodes?: Node[]) => Promise<boolean>;\n /**\n * A function called with the node as param which should return true or false if the option should be enabled or not\n * Will be called by the optionsHelper\n */\n public customEnabledCallback: (nodes?: Node[] | any[]) => Promise<boolean>;\n\n /**\n * Optional: A callback that is called when the user clicks on the option when it's currently disabled (greyed out)\n */\n public disabledCallback: (node?: Node | any) => void;\n /**\n * Show the given name (if false, only icon will show)\n */\n public showName = true;\n\n /**\n * element with 0 has highest priority in it's group, higher values mean lower priority\n */\n public priority: number;\n /**\n * the group this option belongs to\n */\n public group: OptionGroup;\n\n public keyboardShortcut: KeyboardShortcutCondition;\n\n /**\n * Or concat of supported element types for the action\n */\n public elementType = [ElementType.Node];\n public permissions: string[];\n public constrains: Constrain[];\n public permissionsMode = HideMode.Disable;\n public permissionsRightMode = NodesRightMode.Local;\n public toolpermissions: string[];\n public toolpermissionsMode = HideMode.Disable;\n public scopes: Scope[];\n\n /**\n *\n * @param name the option name, which is used for the translation\n * @param icon A material icon name\n * @param callback A function callback when this option is chosen. Will get the current node\n * passed as an argument. If available, the relevant nodes are passed as second argument,\n * i.e., the selection, if any, or the current node as single-item array otherwise.\n */\n constructor(\n public name: string,\n public icon: string,\n // TODO: Maybe switch to only providing the second parameter.\n public callback: (object?: Node | any, objects?: (Node | any)[]) => void,\n ) {}\n}\nexport class CustomOptions {\n /**\n * If true, all existing or available options for the object stay\n * If false, no options will be set, only the options in \"addOptions\" are used\n */\n public useDefaultOptions? = true;\n /**\n * List of ids of options to explicitly support\n */\n public supportedOptions?: string[];\n /**\n * List of ids of options to explicitly remove\n * Only supported if supportedOptions is empty\n */\n public removeOptions?: string[];\n /**\n * Options to add/insert into the menu\n */\n public addOptions?: OptionItem[];\n}\nexport enum HideMode {\n Disable,\n Hide,\n}\nexport enum Scope {\n Render = 'Render',\n Search = 'Search',\n SearchCollections = 'SearchCollections',\n SavedSearches = 'SavedSearches',\n CollectionsReferences = 'CollectionsReferences',\n CollectionsProposals = 'CollectionsProposals',\n CollectionsCollection = 'CollectionsCollection',\n WorkspaceList = 'WorkspaceList',\n WorkspaceTree = 'WorkspaceTree',\n Sharing = 'Sharing',\n Oer = 'Oer',\n UserManagement = 'UserManagement',\n UserProfile = 'UserProfile',\n Stream = 'Stream',\n CreateMenu = 'CreateMenu',\n\n MediacenterNodesList = 'MediacenterNodesList',\n Admin = 'Admin', // Admin Tools / Debugging\n DebugShowAll = 'DebugShowAll', // Full debug mode which enables all options\n}\nexport enum ElementType {\n Node,\n NodeChild, // Child object\n MapRef, // Map ref (link to another map)\n NodePublishedCopy,\n NodeRevoked, // revoked copy / revoked published node\n NodeBlockedImport, // node with property ccm:importblocked == true\n NodeProposal, // node proposal for a collection\n Person,\n Group,\n SavedSearch,\n Unknown,\n}\nexport class OptionGroup {\n /**\n * @param id The group identifier. Used to seperate elements based on the group\n * @param priority Group with 0 has highest priority, higher values mean lower priority\n */\n constructor(public id: string, public priority: number) {}\n}\nexport class DefaultGroups {\n static Primary = new OptionGroup('Primary', 10);\n static Create = new OptionGroup('Create', 15);\n static View = new OptionGroup('View', 20);\n static CreateConnector = new OptionGroup('CreateConnector', 25);\n static CreateLtiTools = new OptionGroup('CreateLtiTools', 28);\n static Reuse = new OptionGroup('Reuse', 30);\n static Edit = new OptionGroup('Edit', 40);\n static FileOperations = new OptionGroup('FileOperations', 50);\n static Delete = new OptionGroup('Delete', 60);\n static Toggles = new OptionGroup('Toggles', 70);\n}\nexport enum Constrain {\n CollectionReference, // option is only visible for collection references\n NoCollectionReference, // option is only visible for non-collection references\n Directory, // only visible for directories (ccm:map)\n Collections, // only visible for collections\n Files, // only visible for files (ccm:io)\n FilesAndDirectories, // only visible for files and directories (ccm:io / ccm:map) - no collections!\n Admin, // only visible if user is admin or esDebug is enabled on window component\n AdminOrDebug, // only visible if user is admin or esDebug is enabled on window component\n NoBulk, // No support for bulk (multiple objects)\n NoSelection, // Only visible when currently no element is selected\n ClipboardContent, // Only visible when the clipboard has content\n AddObjects, // Only visible when it is possible to add objects into the current list\n HomeRepository, // Only visible when the nodes are from the local (home) repository\n User, // Only visible when a user is present and logged in\n NoScope, // Only visible when no current scope (i.e \"safe\" scope) is set\n ReurlMode, // Only visible when a reurl is present (called to pick object from lms)\n LTIMode, // Only visible when a lti session is present (called to pick object from lti platform)\n}\n\nexport enum Target {\n List, // Target is the ListTableComponent\n ListDropdown,\n Actionbar,\n CreateMenu,\n}\n","import { Injectable, InjectionToken, Provider } from '@angular/core';\n\nexport const EDU_SHARING_UI_CONFIG = new InjectionToken<EduSharingUiConfigurationParams>(\n 'EDU_SHARING_API_CONFIG',\n);\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EduSharingUiConfiguration {\n production: boolean;\n /**\n * Whether this Angular application is being used embedded as a web component by a third-party\n * web page.\n */\n isEmbedded = false;\n\n static create(params: EduSharingUiConfigurationParams = {}): EduSharingUiConfiguration {\n return { ...new EduSharingUiConfiguration(), ...params };\n }\n}\n\nexport type EduSharingUiConfigurationParams = Partial<EduSharingUiConfiguration>;\n\nexport function getConfigProvider(params?: EduSharingUiConfigurationParams): Provider[] {\n return [\n // Provide the params given to `forRoot()`. These can be overridden by the application by\n // providing `EDU_SHARING_API_CONFIG` itself.\n {\n provide: EDU_SHARING_UI_CONFIG,\n useValue: params,\n },\n // Inject `configuration` as both, `ApiConfiguration` and `EduSharingApiConfiguration`, to pass\n // `rootUrl` on to `ApiModule` while also adding our custom configuration.\n {\n provide: EduSharingUiConfiguration,\n deps: [EDU_SHARING_UI_CONFIG],\n // deps: [[new Optional(), EDU_SHARING_API_CONFIG]],\n useFactory: (configParams: EduSharingUiConfigurationParams) =>\n EduSharingUiConfiguration.create(configParams),\n },\n {\n provide: EduSharingUiConfiguration,\n deps: [EDU_SHARING_UI_CONFIG],\n // deps: [[new Optional(), EDU_SHARING_API_CONFIG]],\n useFactory: (configParams: EduSharingUiConfigurationParams) =>\n EduSharingUiConfiguration.create(configParams),\n },\n ];\n}\n","import { Injectable } from '@angular/core';\nimport { NetworkService, Node } from 'ngx-edu-sharing-api';\nimport { take } from 'rxjs/operators';\nimport { EduSharingUiConfiguration } from '../edu-sharing-ui-configuration';\n\n/**\n * Replaces absolute backend URLs with proxied URLs when in dev environment.\n *\n * This is needed for content that requires authentication, so the browser provides the required\n * session cookie with the request, or when accessing the dev server from another device.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class RepoUrlService {\n private constructor(\n private networkService: NetworkService,\n private configuration: EduSharingUiConfiguration,\n ) {}\n\n /**\n * Replaces the given URL if the given node belongs to the home repository.\n */\n async getRepoUrl(url: string, node: Node) {\n if (\n !this.configuration.production &&\n !this.configuration.isEmbedded &&\n (await this.networkService.isFromHomeRepository(node).pipe(take(1)).toPromise())\n ) {\n return this.withCurrentOrigin(url);\n } else {\n return url;\n }\n }\n\n /**\n * Replaces the given URL.\n *\n * The caller needs to make sure that the given URL belongs to the home repository.\n */\n withCurrentOrigin(url: string): string {\n const urlObject = new URL(url);\n urlObject.host = window.location.host;\n urlObject.protocol = window.location.protocol;\n return urlObject.href;\n }\n}\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport {\n ApiHelpersService,\n ConfigService,\n NetworkService,\n Node,\n ProposalNode,\n RestConstants,\n User,\n} from 'ngx-edu-sharing-api';\nimport { TranslateService } from '@ngx-translate/core';\nimport * as Workflow from '../types/workflow';\nimport { RepoUrlService } from './repo-url.service';\nimport { Params } from '@angular/router';\nimport { UIConstants } from '../util/ui-constants';\nimport { ASSETS_BASE_PATH } from '../types/injection-tokens';\nimport { of } from 'rxjs';\nimport { NodesRightMode } from '../types/option-item';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NodeHelperService {\n readonly LICENSE_URLS = {\n CC_BY_ABOUT: 'https://creativecommons.org/licenses/list.{{language}}',\n CC_BY: 'https://creativecommons.org/licenses/by/{{version}}/{{locale}}deed.{{language}}',\n CC_BY_ND:\n 'https://creativecommons.org/licenses/by-nd/{{version}}/{{locale}}deed.{{language}}',\n CC_BY_SA:\n 'https://creativecommons.org/licenses/by-sa/{{version}}/{{locale}}deed.{{language}}',\n CC_BY_NC:\n 'https://creativecommons.org/licenses/by-nc/{{version}}/{{locale}}deed.{{language}}',\n CC_BY_NC_ND:\n 'https://creativecommons.org/licenses/by-nc-nd/{{version}}/{{locale}}deed.{{language}}',\n CC_BY_NC_SA:\n 'https://creativecommons.org/licenses/by-nc-sa/{{version}}/{{locale}}deed.{{language}}',\n CC_0: 'https://creativecommons.org/publicdomain/zero/1.0/legalcode.{{language}}',\n PDM: 'https://creativecommons.org/public-domain/pdm/',\n } as { [key: string]: string };\n constructor(\n protected translate: TranslateService,\n protected apiHelpersService: ApiHelpersService,\n protected networkService: NetworkService,\n protected configService: ConfigService,\n protected repoUrlService: RepoUrlService,\n @Optional() @Inject(ASSETS_BASE_PATH) private assetsBasePath: string,\n ) {}\n\n public getCollectionScopeInfo(node: Node): { icon: string; scopeName: string } {\n const scope = node.collection ? node.collection.scope : null;\n let icon = 'help';\n let scopeName = 'UNKNOWN';\n if (scope === RestConstants.COLLECTIONSCOPE_MY) {\n icon = 'lock';\n scopeName = 'MY';\n }\n if (\n scope === RestConstants.COLLECTIONSCOPE_ORGA ||\n scope === RestConstants.COLLECTIONSCOPE_CUSTOM\n ) {\n icon = 'group';\n scopeName = 'SHARED';\n }\n if (\n scope === RestConstants.COLLECTIONSCOPE_ALL ||\n scope === RestConstants.COLLECTIONSCOPE_CUSTOM_PUBLIC\n ) {\n icon = 'language';\n scopeName = 'PUBLIC';\n }\n if (node.collection?.type === RestConstants.COLLECTIONTYPE_EDITORIAL) {\n icon = 'star';\n scopeName = 'TYPE_EDITORIAL';\n }\n if (node.collection?.type === RestConstants.COLLECTIONTYPE_MEDIA_CENTER) {\n icon = 'business';\n scopeName = 'TYPE_MEDIA_CENTER';\n }\n return { icon, scopeName };\n }\n /**\n * Return the license icon of a node\n */\n async getLicenseIcon(node: Node): Promise<string> {\n // prefer manual mapping instead of backend data to support custom states from local edits\n const license = node.properties?.[RestConstants.CCM_PROP_LICENSE]?.[0];\n if (license) {\n return this.getLicenseIconByString(license);\n }\n return node.license ? this.repoUrlService.getRepoUrl(node.license.icon, node) : null;\n }\n\n /**\n * Get a license icon by using the property value string\n */\n public getLicenseIconByString(string: String, useNoneAsFallback = true): string {\n let icon = string.replace(/_/g, '-').toLowerCase();\n if (icon == '') icon = 'none';\n\n const LICENSE_ICONS = [\n 'cc-0',\n 'cc-by-nc',\n 'cc-by-nc-nd',\n 'cc-by-nc-sa',\n 'cc-by-nd',\n 'cc-by-sa',\n 'cc-by',\n 'copyright-free',\n 'copyright-license',\n 'custom',\n 'edu-nc-nd-noDo',\n 'edu-nc-nd',\n 'edu-p-nr-nd-noDo',\n 'edu-p-nr-nd',\n 'none',\n 'pdm',\n 'schulfunk',\n 'unterrichts-und-lehrmedien',\n ];\n if (LICENSE_ICONS.indexOf(icon) == -1 && !useNoneAsFallback) return null; // icon='none';\n if (icon == 'none' && !useNoneAsFallback) return null;\n const result =\n this.apiHelpersService.getServerUrl() + '/../ccimages/licenses/' + icon + '.svg';\n return result;\n }\n /**\n * Return a translated name of a license name for a node\n * @param node\n * @param translate\n * @returns {string|any|string|any|string|any|string|any|string|any|string}\n */\n public getLicenseName(node: Node) {\n let prop = node.properties[RestConstants.CCM_PROP_LICENSE]?.[0];\n if (!prop) prop = '';\n return this.getLicenseNameByString(prop);\n }\n\n /**\n * Return a translated name for a license string\n * @param string\n * @param translate\n * @returns {any}\n */\n public getLicenseNameByString(name: string) {\n if (name == '') {\n name = 'NONE';\n }\n return this.translate.instant('LICENSE.NAMES.' + name);\n // return name.replace(/_/g,\"-\");\n }\n\n /**\n * return the License URL (e.g. for CC_BY licenses) for a license string and version\n * @param licenseProperty\n * @param licenseVersion\n * @param licenseLocale\n */\n public getLicenseUrlByString(\n licenseProperty: string,\n licenseVersion: string,\n licenseLocale: string,\n ) {\n const isV4 = licenseVersion === '4.0';\n const locale = isV4 || !licenseLocale ? '' : licenseLocale.toLowerCase() + '/';\n const url = this.LICENSE_URLS[licenseProperty];\n if (!url) {\n return of(null);\n }\n return of(\n url\n .replace('{{version}}', licenseVersion)\n .replace('{{locale}}', locale)\n .replace('{{language}}', this.translate.currentLang || 'en'),\n );\n }\n\n public getWorkflowStatusById(id: string) {\n const workflows = this.getWorkflows();\n return workflows.filter((w) => w.id === id)?.[0];\n }\n public getWorkflowStatus(node: Node, useFromConfig = false): Workflow.WorkflowDefinitionStatus {\n let value = node.properties[RestConstants.CCM_PROP_WF_STATUS]?.[0];\n if (!value) {\n return this.getDefaultWorkflowStatus(useFromConfig);\n }\n return {\n current: this.getWorkflowStatusById(value),\n initial: this.getWorkflowStatusById(value),\n };\n }\n getDefaultWorkflowStatus(useFromConfig = false): Workflow.WorkflowDefinitionStatus {\n const result = {\n current: null as Workflow.WorkflowDefinition,\n initial: null as Workflow.WorkflowDefinition,\n };\n result.initial = this.getWorkflows()[0];\n let defaultStatus: string = null;\n if (useFromConfig) {\n defaultStatus = this.configService.instant('workflow.defaultStatus');\n }\n if (defaultStatus) {\n result.current = this.getWorkflows().find((w) => w.id === defaultStatus);\n } else {\n result.current = result.initial;\n }\n return result;\n }\n getWorkflows(): Workflow.WorkflowDefinition[] {\n return this.configService.instant('workflow.workflows', [\n Workflow.WORKFLOW_STATUS_UNCHECKED,\n Workflow.WORKFLOW_STATUS_TO_CHECK,\n Workflow.WORKFLOW_STATUS_HASFLAWS,\n Workflow.WORKFLOW_STATUS_CHECKED,\n ]);\n }\n copyDataToNode<T extends Node | User>(target: T, source: T) {\n target.properties = source.properties;\n (target as Node).name = (source as Node).name;\n (target as Node).title = (source as Node).title;\n (target as Node).iconURL = (source as Node).iconURL;\n (target as Node).preview = (source as Node).preview;\n (target as User).authorityName = (source as User).authorityName;\n (target as User).profile = (source as User).profile;\n (target as User).status = (source as User).status;\n }\n isNodeCollection(node: Node): boolean {\n return node.aspects?.includes(RestConstants.CCM_ASPECT_COLLECTION) || !!node.collection;\n }\n public getSourceIconPath(src: string) {\n return (this.assetsBasePath ?? '') + 'assets/images/sources/' + src.toLowerCase() + '.png';\n }\n\n getNodeLink(mode: 'routerLink' | 'queryParams', node: Node) {\n if (!node?.ref) {\n return null;\n }\n let data: { routerLink: string; queryParams: Params } = null;\n if (this.isNodeCollection(node)) {\n const scope = node.collection?.scope;\n const type = node.collection?.type;\n const queryParams: Params = {\n id: node.ref.id,\n };\n if (type === RestConstants.COLLECTIONTYPE_EDITORIAL) {\n queryParams.scope = RestConstants.COLLECTIONSCOPE_TYPE_EDITORIAL;\n } else if (type === RestConstants.COLLECTIONTYPE_MEDIA_CENTER) {\n queryParams.scope = RestConstants.COLLECTIONSCOPE_TYPE_MEDIA_CENTER;\n } else if (scope === RestConstants.COLLECTIONSCOPE_CUSTOM_PUBLIC) {\n queryParams.scope = RestConstants.COLLECTIONSCOPE_ALL;\n }\n data = {\n routerLink: UIConstants.ROUTER_PREFIX + 'collections',\n queryParams,\n };\n } else {\n if (node.isDirectory) {\n let path;\n if (\n node.properties?.[RestConstants.CCM_PROP_EDUSCOPENAME]?.[0] ===\n RestConstants.SAFE_SCOPE\n ) {\n path = UIConstants.ROUTER_PREFIX + 'workspace/safe';\n } else {\n path = UIConstants.ROUTER_PREFIX + 'workspace';\n }\n data = {\n routerLink: path,\n queryParams: { id: node.ref.id },\n };\n } else if (node.ref) {\n const fromHome = this.networkService.isFromHomeRepository(node);\n data = {\n routerLink: UIConstants.ROUTER_PREFIX + 'render/' + node.ref.id,\n queryParams: {\n repository: fromHome ? null : node.ref.repo,\n proposal: (node as ProposalNode).proposal?.ref.id,\n proposalCollection: (node as ProposalNode).proposalCollection?.ref.id,\n },\n };\n }\n }\n if (data === null) {\n return '';\n }\n if (mode === 'routerLink') {\n return '/' + data.routerLink;\n }\n // enforce clearing of parameters which should only be consumed once\n data.queryParams.redirectFromSSO = null;\n return data.queryParams;\n }\n\n /**\n * Returns true if this node is a copy of another node, just used as a publish target.\n */\n isNodePublishedCopy(o: Node): boolean {\n return !!o.properties?.[RestConstants.CCM_PROP_PUBLISHED_ORIGINAL]?.[0];\n }\n\n /**\n * returns true if this is a revoked node\n * (published copy that has been revoked)\n */\n isNodeRevoked(node: Node) {\n return node?.aspects?.includes(RestConstants.CCM_ASPECT_REVOKED);\n }\n /**\n * returns true if all nodes have the requested right\n * mode (only works for collection refs):\n * Local: check only rights of the node itself\n * Effective: check only rights of the original node this refers to (collection ref). If it is not a collection ref, fallback to local\n */\n public getNodesRight(nodes: Node[], right: string, mode = NodesRightMode.Local) {\n if (nodes == null) return true;\n for (const node of nodes) {\n let currentMode = mode;\n // if no access effective present and not a collection ref. use the local data\n if (\n !node.aspects?.includes(RestConstants.CCM_ASPECT_IO_REFERENCE) &&\n !node.accessEffective?.length\n ) {\n currentMode = NodesRightMode.Local;\n }\n if (currentMode === NodesRightMode.Effective) {\n if (!node.aspects?.includes(RestConstants.CCM_ASPECT_IO_REFERENCE)) {\n if (node.accessEffective && node.accessEffective.indexOf(right) !== -1) {\n continue;\n }\n }\n if (node.accessEffective && node.accessEffective.indexOf(right) !== -1) {\n continue;\n }\n if (RestConstants.IMPLICIT_COLLECTION_PERMISSIONS.indexOf(right) === -1) {\n // permission not matched on original -> implicit permissions from collection may apply\n return false;\n }\n }\n // check regular node rights\n if (!node.access || node.access.indexOf(right) === -1) {\n return false;\n }\n }\n return true;\n }\n}\n","export function notNull<T>(value: T): boolean {\n return value !== undefined && value !== null;\n}\n\nexport function isTrue(value: boolean): boolean {\n return value ?? false;\n}\n\nexport function microTick(): Promise<void> {\n return Promise.resolve();\n}\n\nexport function macroTick(): Promise<void> {\n return new Promise((resolve) => setTimeout(() => resolve()));\n}\n","/**\n * Created by Torsten on 13.01.2017.\n */\n\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { HttpClient } from '@angular/common/http';\nimport {\n Directive,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Renderer2,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ConfigService } from 'ngx-edu-sharing-api';\nimport { BehaviorSubject, combineLatest, firstValueFrom } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { notNull } from '../util/functions';\n\ntype IconsConfig = Array<{ original: string; replace?: string; cssClass?: string }>;\n\n/**\n * Replaces the element's content with an icon.\n *\n * Example: `<i esIcon=\"save\"></i>`\n *\n * Optionally, a translated `aria-label` can be attached by setting `aria` to a truthy value: `<i\n * esIcon=\"save\" aria=\"true\"></i>`. Otherwise, `aria-hidden` will be set.\n *\n * For backwards compatibility, the directive is also activated on elements that set\n * `class=\"material-icons\"`. This is mainly to set the `aria-hidden` attribute. Occurrences should\n * be updated to the syntax above.\n */\n@Directive({\n selector: 'i[esIcon], i.material-icons',\n standalone: false,\n})\nexport class IconDirective implements OnInit, OnDestroy {\n private originalId$ = new BehaviorSubject<string>(null);\n private _id: string;\n private _aria: boolean;\n private altTextSpan: HTMLElement;\n private isReady = false;\n private svg: SVGSVGElement;\n\n /**\n * An alt text to show to screen readers.\n *\n * If omitted, the icon will be invisible to screen readers.\n *\n * @see https://material.angular.io/components/icon/overview#indicator-icons\n */\n @Input() set altText(altText: string) {\n this.setAltText(altText);\n }\n\n /** If true, an alt text (see above) will be set based on the icon. */\n @Input() set aria(aria: boolean) {\n aria = coerceBooleanProperty(aria);\n if (aria !== this._aria) {\n this._aria = aria;\n if (this.isReady) {\n this.updateAria();\n }\n }\n }\n\n @Input() set esIcon(id: string) {\n this.originalId$.next(id);\n }\n\n constructor(\n private element: ElementRef<HTMLElement>,\n private http: HttpClient,\n private translate: TranslateService,\n private renderer: Renderer2,\n @Optional() private config: ConfigService,\n ) {\n combineLatest([this.originalId$.pipe(filter(notNull)), this.config.get('icons', null)])\n .pipe(takeUntilDestroyed())\n .subscribe(([originalId, iconsConfig]) => this.setIcon(originalId, iconsConfig));\n }\n\n async ngOnInit() {\n this.isReady = true;\n this.element.nativeElement.setAttribute('aria-hidden', 'true');\n // Material styles expect icons to have the class `mat-icon`, e.g.,\n // https://github.com/angular/components/blob/ae0b9e1c1bae5e937d039ea53652fe1656bc4623/src/material/form-field/form-field.scss#L156\n this.element.nativeElement.classList.add('mat-icon');\n this.updateAria();\n }\n\n ngOnDestroy(): void {\n if (this.altTextSpan) {\n this.altTextSpan.remove();\n }\n }\n\n private async setIcon(id: string, iconsConfig: IconsConfig) {\n if (this._id) {\n this.element.nativeElement.classList.remove(\n 'edu-icons',\n 'custom-icons',\n 'material-icons',\n );\n if (this.svg) {\n this.renderer.removeChild(this.element.nativeElement, this.svg);\n }\n }\n if (id.startsWith('svg-')) {\n try {\n const iconName = id.slice(4);\n const fileName = iconName.endsWith('.svg') ? iconName : `${iconName}.svg`;\n const path = `assets/images/icons/${fileName}`;\n\n const svgText = await firstValueFrom(this.http.get(path, { responseType: 'text' }));\n\n if (!svgText) return;\n\n const parser = new DOMParser();\n const doc = parser.parseFromString(svgText, 'image/svg+xml');\n const svgElement = doc.querySelector('svg');\n\n if (!svgElement) {\n console.error('No SVG element found in the file');\n return;\n }\n\n svgElement.classList.add('svg-icons');\n this.svg = svgElement;\n\n this.renderer.appendChild(this.element.nativeElement, this.svg);\n\n if (this._aria) {\n this.updateAria();\n }\n\n return;\n } catch (error) {\n console.error('Error loading SVG:', error);\n return;\n }\n }\n let customClass: string = null;\n const mapping = iconsConfig?.filter((i) => i.original === id);\n if (mapping?.length === 1) {\n id = mapping[0].replace || '';\n customClass = mapping[0].cssClass;\n }\n this._id = id;\n if (this._aria) {\n this.updateAria();\n }\n let cssClass: string;\n if (id?.startsWith('edu-') && !customClass) {\n cssClass = 'edu-icons';\n id = id.substring(4);\n } else if (id?.startsWith('custom-') || customClass) {\n cssClass = 'custom-icons';\n id = id.substring(7);\n } else {\n cssClass = 'material-icons';\n }\n this.element.nativeElement.classList.add(cssClass);\n if (customClass) {\n this.element.nativeElement.classList.add(customClass);\n }\n this.element.nativeElement.innerText = id;\n }\n\n private updateAria() {\n if (this._aria !== undefined) {\n if (this._aria && this._id) {\n this.translate.get('ICON_LABELS.' + this._id).subscribe((lang) => {\n this.setAltText(lang);\n });\n } else {\n this.setAltText(null);\n }\n }\n }\n\n private setAltText(altText: string): void {\n if (this.svg) {\n // for SVG elements, add aria-label instead\n this.svg.setAttribute('aria-label', altText);\n }\n if (altText && !this.altTextSpan) {\n this.insertAltTextSpan();\n }\n if (this.altTextSpan) {\n this.altTextSpan.innerText = altText;\n }\n }\n\n private insertAltTextSpan(): void {\n this.altTextSpan = document.createElement('span');\n this.altTextSpan.classList.add('cdk-visually-hidden');\n this.element.nativeElement.insertAdjacentElement('afterend', this.altTextSpan);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'appMdsDuration',\n standalone: false,\n})\nexport class MdsDurationPipe implements PipeTransform {\n transform(value: string): string {\n if (isNaN(Number(value)) || !value) {\n return '-';\n }\n const totalSeconds = Math.floor(parseInt(value) / 1000);\n const hours: number = Math.floor(totalSeconds / 3600);\n const minutes: number = Math.round((totalSeconds - hours * 3600) / 60);\n if (hours > 0) {\n return hours + 'h ' + minutes + 'm';\n }\n return minutes + 'm';\n }\n}\n","/**\n * Created by Torsten on 28.02.2017.\n */\n\nexport class VCard {\n public static TYPE_PERSON = 0;\n public static TYPE_ORG = 1;\n // was the vcard altered\n private isDirty = false;\n private lines: string[];\n constructor(vcard: string = null) {\n if (vcard) {\n this.lines = vcard.split('\\n');\n // this.remove(\"FN\");\n if (!this.get('BEGIN')) {\n this.lines.splice(0, 0, 'BEGIN:VCARD');\n }\n if (!this.get('VERSION')) {\n this.lines.splice(1, 0, 'VERSION:3.0');\n }\n if (!this.get('END')) {\n this.lines.splice(this.lines.length, 0, 'END:VCARD');\n }\n this.isDirty = true;\n } else {\n this.lines = [];\n this.lines.push('BEGIN:VCARD');\n this.lines.push('VERSION:3.0');\n this.lines.push('END:VCARD');\n this.isDirty = false;\n }\n }\n\n /**\n * returns true if this vcard seems to have valid data\n * @param {string} data\n */\n public isValid() {\n // return this.lines!=null && this.lines.length;\n return (\n this.givenname ||\n this.surname ||\n this.org ||\n this.street ||\n this.city ||\n this.zip ||\n this.country\n );\n }\n public set givenname(data: string) {\n this.set('Givenname', data);\n }\n public set surname(data: string) {\n this.set('Surname', data);\n }\n public set title(data: string) {\n this.set('TITLE', data);\n }\n public set org(data: string) {\n this.set('ORG', data);\n }\n public set orgPhone(data: string) {\n this.set('TEL;TYPE=WORK,VOICE', data);\n }\n public set url(data: string) {\n this.set('URL', data);\n }\n public set email(data: string) {\n this.set('EMAIL;TYPE=PREF,INTERNET', data);\n }\n public set uid(data: string) {\n this.set('UID:urn:uuid', data);\n }\n public set orcid(data: string) {\n this.set('X-ORCID', data);\n }\n public set gnduri(data: string) {\n this.set('X-GND-URI', data);\n }\n public set ror(data: string) {\n this.set('X-ROR', data);\n }\n public set wikidata(data: string) {\n this.set('X-Wikidata', data);\n }\n public set street(data: string) {\n this.set('ADR;TYPE=intl,postal,parcel,work', data, 2);\n }\n public set city(data: string) {\n this.set('ADR;TYPE=intl,postal,parcel,work', data, 3);\n }\n public set region(data: string) {\n this.set('ADR;TYPE=intl,postal,parcel,work', data, 4);\n }\n public set zip(data: string) {\n this.set('ADR;TYPE=intl,postal,parcel,work', data, 5);\n }\n public set country(data: string) {\n this.set('ADR;TYPE=intl,postal,parcel,work', data, 6);\n }\n public set contributeDate(data: string) {\n this.set('X-ES-LOM-CONTRIBUTE-DATE', data);\n }\n public get givenname() {\n return this.get('Givenname');\n }\n public get surname() {\n return this.get('Surname');\n }\n public get orcid() {\n return this.get('X-ORCID');\n }\n public get gnduri() {\n return this.get('X-GND-URI');\n }\n public get ror() {\n return this.get('X-ROR');\n }\n public get wikidata() {\n return this.get('X-Wikidata');\n }\n public get title() {\n return this.get('TITLE');\n }\n public get org() {\n return this.get('ORG');\n }\n public get contributeDate() {\n const string = this.get('X-ES-LOM-CONTRIBUTE-DATE');\n if (string) return string.split('T')[0];\n return string;\n }\n public get url() {\n return this.get('URL');\n }\n public get orgPhone() {\n return this.get('TEL;TYPE=WORK,VOICE');\n }\n public get email() {\n return this.get('EMAIL;TYPE=PREF,INTERNET');\n }\n public get uid() {\n return this.get('UID:urn:uuid');\n }\n public get street() {\n return this.get('ADR;TYPE=intl,postal,parcel,work', 2);\n }\n public get city() {\n return this.get('ADR;TYPE=intl,postal,parcel,work', 3);\n }\n public get region() {\n return this.get('ADR;TYPE=intl,postal,parcel,work', 4);\n }\n public get zip() {\n return this.get('ADR;TYPE=intl,postal,parcel,work', 5);\n }\n public get country() {\n return this.get('ADR;TYPE=intl,postal,parcel,work', 6);\n }\n public toVCardString() {\n // unaltered -> so return a null value\n if (!this.isDirty) return null;\n if (this.get('Givenname') || this.get('Surname'))\n this.set('FN', this.get('Givenname', -1, '') + ' ' + this.get('Surname', -1, ''));\n return this.lines.join('\\n');\n }\n public getDisplayName() {\n const string =\n (this.title ?? '') + ' ' + (this.givenname ?? '') + ' ' + (this.surname ?? '');\n if (string.trim() === '') {\n return this.org || this.get('FN') || '';\n }\n return string;\n }\n public get(key: string, splitIndex = -1, fallback: string = null) {\n if (key == 'Surname') {\n splitIndex = 0;\n key = 'N';\n }\n if (key == 'Givenname') {\n splitIndex = 1;\n key = 'N';\n }\n for (let line of this.lines) {\n line = line.trim();\n if (line.startsWith(key + ':')) {\n const value = line.substring(key.length + 1).trim();\n if (splitIndex != -1) return this.deEscape(value.split(';')[splitIndex]);\n return this.deEscape(value);\n }\n }\n return fallback;\n }\n public remove(key: string) {\n for (let i = 0; i < this.lines.length; i++) {\n if (this.lines[i].startsWith(key + ':')) {\n this.lines.splice(i, 1);\n return true;\n }\n }\n return false;\n }\n public set(key: string, value: string, splitIndex = -1) {\n // no value and empty vcard -> do nothing\n if (!this.isDirty && !value) return;\n if (key == 'Surname') {\n splitIndex = 0;\n key = 'N';\n }\n if (key == 'Givenname') {\n splitIndex = 1;\n key = 'N';\n }\n let i = 0;\n for (let line of this.lines) {\n line = line.trim();\n if (line.startsWith(key + ':')) {\n let lineValue = line.substring(key.length + 1).trim();\n if (splitIndex != -1) {\n const split = lineValue.split(';');\n split[splitIndex] = this.escape(value);\n lineValue = split.join(';');\n } else {\n lineValue = this.escape(value);\n }\n this.lines[i] = line.substring(0, key.length + 1) + lineValue;\n return;\n }\n i++;\n }\n let lineValue = this.escape(value);\n if (splitIndex >= 0) {\n lineValue = '';\n while (lineValue.length < splitIndex) lineValue += ';';\n lineValue += this.escape(value);\n }\n this.lines.splice(this.getNextLine(), 0, key + ':' + lineValue);\n this.isDirty = true;\n }\n\n private getNextLine() {\n let i = 0;\n for (const line of this.lines) {\n if (line.trim() == 'END:VCARD') return i - 1;\n i++;\n }\n return this.lines.length - 1;\n }\n private deEscape(value: string) {\n if (value == null) return '';\n return value.replace(/\\\\\\\\/g, '\\\\').replace(/\\\\,/g, ',');\n }\n private escape(value: string) {\n if (value == null) return '';\n return value.replace(/\\\\/g, '\\\\\\\\').replace(/,/g, '\\\\,').replace(/;/g, ' ');\n }\n\n public copy() {\n return new VCard(this.toVCardString());\n }\n\n /**\n * Apply all data from an other vcard to this object\n * @param other\n */\n public apply(other: VCard) {\n this.lines = other.lines;\n }\n\n getType(): number {\n return this.isValid()\n ? this.givenname || this.surname\n ? VCard.TYPE_PERSON\n : VCard.TYPE_ORG\n : VCard.TYPE_PERSON;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { VCard } from '../util/VCard';\n\n@Pipe({\n name: 'vcardName',\n standalone: false,\n})\nexport class VCardNamePipe implements PipeTransform {\n constructor(private translate: TranslateService) {}\n transform(authority: string | string[], args: string[] = null): string {\n if (Array.isArray(authority)) {\n return authority\n .map((a) => (a ? new VCard(a).getDisplayName() : ''))\n .filter((s) => !!s)\n .join(', ');\n }\n return authority ? new VCard(authority).getDisplayName() : '';\n }\n}\n","import { DatePipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n Injector,\n Input,\n OnChanges,\n OnInit,\n Optional,\n signal,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { MatRipple } from '@angular/material/core';\nimport { filter, first, map } from 'rxjs/operators';\nimport { MdsValue, MdsWidget, Node, RestConstants, Suggestion } from 'ngx-edu-sharing-api';\nimport { UIConstants } from '../../util/ui-constants';\nimport { DateHelper } from '../../util/DateHelper';\nimport { UIService } from '../../services/ui.service';\nimport { ViewInstanceService } from '../view-instance.service';\nimport { RestHelper } from '../../util/rest-helper';\nimport { FormatSizePipe } from '../../pipes/file-size.pipe';\nimport { BehaviorSubject, of } from 'rxjs';\nimport { MdsViewerService } from '../mds-viewer.service';\nimport { Values } from '../../services/search-helper.service';\nimport { NodeHelperService } from '../../services/node-helper.service';\nimport { MdsEditorInstanceServiceAbstract } from '../mds-editor-instance-service.abstract';\n\nexport enum MdsType {\n Io = 'io',\n IoBulk = 'io_bulk',\n Map = 'map',\n MapRef = 'map_ref',\n IoChildObject = 'io_childobject',\n Collection = 'collection',\n ToolDefinition = 'tool_definition',\n ToolInstance = 'tool_instance',\n SavedSearch = 'saved_search',\n}\n\nexport interface MdsValueList {\n values: Suggestion[];\n}\nexport interface MdsViewerWidget {\n definition: MdsWidget;\n getInitalValuesAsync(): Promise<InitialValues>;\n getInitialDisplayValues(): BehaviorSubject<MdsValueList>;\n}\nexport enum MdsWidgetType {\n Text = 'text',\n Number = 'number',\n Email = 'email',\n Date = 'date',\n Month = 'month',\n Color = 'color',\n Textarea = 'textarea',\n TinyMCE = 'tinyMCE',\n VCard = 'vcard',\n Checkbox = 'checkbox',\n RadioHorizontal = 'radioHorizontal',\n RadioVertical = 'radioVertical',\n CheckboxHorizontal = 'checkboxHorizontal',\n CheckboxVertical = 'checkboxVertical',\n MultiValueBadges = 'multivalueBadges',\n MultiValueFixedBadges = 'multivalueFixedBadges',\n MultiValueSuggestBadges = 'multivalueSuggestBadges',\n MultiValueAuthorityBadges = 'multivalueAuthorityBadges',\n Singleoption = 'singleoption',\n Slider = 'slider',\n Range = 'range',\n Duration = 'duration',\n SingleValueTree = 'singlevalueTree',\n SingleValueSuggestBadges = 'singlevalueSuggestBadges',\n MultiValueTree = 'multivalueTree',\n DefaultValue = 'defaultvalue',\n FacetList = 'facetList',\n}\n\nexport interface InitialValues {\n /** Values that are initially present in all nodes. */\n readonly jointValues: string[];\n /**\n * Values that are initially present in some but not all nodes.\n *\n * Can be null but will never be set to an empty array.\n */\n readonly individualValues?: string[];\n}\nexport enum ValueType {\n String,\n MultiValue,\n Range,\n}\n\n@Component({\n selector: 'es-mds-widget',\n templateUrl: 'mds-widget.component.html',\n styleUrls: ['mds-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.Default,\n standalone: false,\n})\nexport class MdsWidgetComponent implements OnInit, OnChanges {\n readonly ROUTER_PREFIX = UIConstants.ROUTER_PREFIX;\n private static readonly inlineEditing: MdsWidgetType[] = [\n MdsWidgetType.Text,\n MdsWidgetType.Number,\n MdsWidgetType.Date,\n MdsWidgetType.Email,\n MdsWidgetType.Textarea,\n MdsWidgetType.Singleoption,\n MdsWidgetType.SingleValueTree,\n MdsWidgetType.SingleValueSuggestBadges,\n MdsWidgetType.MultiValueBadges,\n MdsWidgetType.MultiValueFixedBadges,\n MdsWidgetType.MultiValueSuggestBadges,\n MdsWidgetType.MultiValueTree,\n ];\n\n readonly valueType = ValueType.String;\n\n // use any instead of `Widget` cause of external type\n @Input() widget: MdsViewerWidget;\n @Input() showCaption = true;\n /**\n * allow inline editing\n */\n @Input() inlineEditing: 'auto' | 'always' = 'auto';\n @Input() definition: MdsWidget;\n // use any instead of MdsEditorViewComponent cause of external type\n @Input() view: any;\n\n @ViewChild('editWrapper') editWrapper: ElementRef;\n @ViewChild(MatRipple) matRipple: MatRipple;\n basicType = signal<string>(null);\n rawValue: { path: MdsValue[]; id: string }[];\n\n isEmpty = computed(() => {\n if (this.basicType() === 'license') {\n return false;\n }\n return this.value()?.every((v) => !v) || this.value()?.length === 0 || !this.value();\n });\n license$ = new BehaviorSubject<{ name: string; icon: string }>(null);\n\n get headingLevel() {\n return this.viewInstance.headingLevel;\n }\n\n value = signal<string[]>(undefined);\n private temporaryValue: string[] = undefined;\n\n constructor(\n @Optional() private mdsEditorInstance: MdsEditorInstanceServiceAbstract,\n public translate: TranslateService,\n private ui: UIService,\n private viewInstance: ViewInstanceService,\n private mdsViewerService: MdsViewerService,\n private injector: Injector,\n private nodeHelper: NodeHelperService,\n ) {\n // super(toast, null, translate);\n }\n\n async ngOnChanges(changes: SimpleChanges) {\n this.value.set(await this.getNodeValue());\n }\n\n async ngOnInit() {\n this.value.set(await this.getNodeValue());\n this.widget\n .getInitialDisplayValues()\n .pipe(filter((v: MdsValueList) => !!v))\n .subscribe(async (value: MdsValueList) => {\n this.value.set(value.values.map((v) => v.displayString));\n });\n this.basicType.set(this.getBasicType());\n this.rawValue = await this.getRawValue().toPromise();\n }\n\n getDefinition(): MdsWidget {\n return this.widget?.definition || this.definition;\n }\n\n getBasicType() {\n switch (this.getDefinition().id) {\n case 'license':\n return 'license';\n }\n switch (this.getDefinition().type) {\n case 'text':\n case 'email':\n case 'month':\n case 'color':\n case 'textarea':\n case 'singleoption':\n return 'text';\n case 'number':\n return 'number';\n case 'date':\n return 'date';\n case 'vcard':\n return 'vcard';\n case 'multivalueFixedBadges':\n case 'multivalueSuggestBadges':\n case 'singlevalueSuggestBadges':\n case 'multivalueBadges':\n case 'singlevalueTree':\n case 'multivalueTree':\n return this.viewInstance.treeDisplay === 'flat' ? 'array' : 'tree';\n case 'slider':\n return 'slider';\n case 'duration':\n return 'duration';\n case 'range':\n return 'range';\n }\n return 'unknown';\n }\n\n supportsInlineEditing() {\n return MdsWidgetComponent.inlineEditing.includes(\n this.widget?.definition.type as MdsWidgetType,\n );\n }\n private getNodeValues() {\n if (this.mdsEditorInstance) {\n return (\n (this.mdsEditorInstance.values$.value as Values) ||\n this.mdsEditorInstance.nodes$.value.map((n: Node) => n.properties)?.[0]\n );\n } else {\n return this.mdsViewerService.values$.value;\n }\n }\n private async getNodeValue() {\n if (this.temporaryValue !== undefined) {\n return this.getValue(this.temporaryValue);\n }\n const id = this.getDefinition().id;\n const values = this.getNodeValues();\n if (this.getBasicType() === 'license') {\n this.license$.next({\n icon: await this.nodeHelper.getLicenseIcon({\n properties: this.getNodeValues(),\n } as Node),\n name: this.nodeHelper.getLicenseName({ properties: this.getNodeValues() } as Node),\n });\n }\n if (this.getDefinition().type === 'range') {\n if (values) {\n return [values[id + '_from']?.[0], values[id + '_to']?.[0]];\n }\n return null;\n } else if (values?.[id]) {\n // support on the fly changes+updates of the values\n return this.getValue(values[id]);\n } else if ((await this.widget.getInitalValuesAsync())?.jointValues) {\n return (await this.widget.getInitalValuesAsync()).jointValues;\n } else {\n return null;\n }\n }\n\n getValue(data: string[]) {\n let value = data;\n if (!value || value.every((v) => !v)) {\n return null;\n }\n\n if (this.getDefinition().values) {\n const mapping = this.widget.definition.values\n .filter((v: any) => data.filter((d) => d === v.id).length > 0)\n .map((v: any) => v.caption);\n if (mapping) {\n return mapping;\n }\n }\n\n return data;\n }\n\n click() {\n if (this.getDefinition().link === '_BLANK') {\n window.open(this.formatText()[0]);\n } else if (this.getDefinition().link === '_SELF') {\n window.location.href = this.formatText()[0];\n } else {\n console.warn('Unsupported link type ' + this.getDefinition().link);\n }\n }\n\n formatDate() {\n return this.value().map((v) => {\n if (this.getDefinition().format) {\n try {\n return new DatePipe('en').transform(v, this.getDefinition().format);\n } catch (e) {\n console.warn('Could not format date', e, this.getDefinition());\n return DateHelper.formatDate(this.translate, v, {\n showAlwaysTime: true,\n });\n }\n } else {\n return DateHelper.formatDate(this.translate, v, {\n showAlwaysTime: true,\n });\n }\n });\n }\n\n formatNumber() {\n return this.value().map((v) => {\n if (this.widget.definition.format === 'bytes') {\n return new FormatSizePipe(this.translate).transform(v);\n }\n return v;\n });\n }\n\n formatText() {\n return this.value().map((v) => {\n if (this.widget.definition.format) {\n return this.widget.definition.format.replace('${value}', v);\n }\n return v;\n });\n }\n // instance: MdsEditorWidgetBase\n async finishEdit(instance: any, store = false) {\n if (store) {\n await this.mdsEditorInstance.saveWidgetValue(instance.widget);\n }\n this.temporaryValue = instance.widget.getValue();\n this.value.set(await this.getNodeValue());\n this.editWrapper.nativeElement.children[0].innerHTML = null;\n await this.mdsEditorInstance.fetchDisplayValues(this.widget);\n }\n\n isEditable() {\n if (!this.mdsEditorInstance) {\n return false;\n }\n if (this.inlineEditing === 'always') {\n return this.supportsInlineEditing();\n }\n const nodes = this.mdsEditorInstance.nodes$.value;\n return (\n this.mdsEditorInstance.editorMode === 'inline' &&\n this.widget.definition.interactionType === 'Input' &&\n nodes?.length === 1 &&\n RestHelper.hasAccessPermission(nodes[0], RestConstants.ACCESS_WRITE) &&\n this.supportsInlineEditing()\n );\n }\n\n async focus() {\n // this.matRipple.launch({});\n await this.ui.scrollSmoothElementToChild(this.editWrapper.nativeElement);\n this.matRipple.launch({});\n //const result = await this.view.injectEditField(this, this.editWrapper.nativeElement.children[0]);\n //await this.ui.scrollSmoothElementToChild(result.htmlElement);\n }\n\n /**\n * return the path for a given value in a tree\n */\n private getPath(v: string) {\n if (!this.getDefinition().values) {\n return [\n {\n id: v,\n caption: v,\n },\n ];\n }\n const path: MdsValue[] = [];\n let pointer: string = v;\n for (let i = 0; i < 100; i++) {\n const mapped = this.getDefinition().values.find((w) => w.id === pointer);\n if (mapped) {\n path.push(mapped);\n pointer = mapped.parent;\n } else {\n break;\n }\n }\n return path.reverse();\n }\n\n /**\n * fetch the raw node value\n * Note: Will not work in a bulk state!\n */\n private getRawValue() {\n return (\n this.mdsEditorInstance?.nodes$.pipe(\n first(),\n map((v: Node[]) =>\n (v?.[0]?.properties[this.widget.definition.id] as string[])?.map((id) => {\n return {\n id,\n path: this.getPath(id),\n };\n }),\n ),\n ) || of(null)\n );\n }\n\n getSearchParams(key: MdsValue) {\n const params: any = {};\n const mds: { [key: string]: string[] } = {};\n mds[this.widget.definition.id] = [key.id];\n params.mds = this.mdsEditorInstance.mdsId;\n params.sidenav = true;\n params.repo = this.mdsEditorInstance.nodes$.value?.[0].ref.repo;\n params.filters = JSON.stringify(mds);\n return params;\n }\n\n startEdit(event: MouseEvent) {\n event.stopPropagation();\n void this.view.injectEditField(this, this.editWrapper.nativeElement.children[0]);\n }\n}\n","<es-mds-editor-widget-container\n *ngIf=\"!editWrapper.innerText.trim()\"\n [injectedView]=\"this\"\n [widget]=\"widget\"\n [label]=\"false\"\n [wrapInFormField]=\"false\"\n [wrapInGroup]=\"false\"\n [valueType]=\"valueType\"\n matRipple\n [matRippleDisabled]=\"true\"\n>\n <div class=\"edit-wrapper\">\n <div\n *ngIf=\"!isEmpty() || !widget.definition.hideIfEmpty || isEditable()\"\n class=\"widget-wrapper\"\n >\n <div\n class=\"widget-label\"\n [attr.role]=\"headingLevel ? 'heading' : null\"\n [attr.aria-level]=\"headingLevel\"\n *ngIf=\"widget.definition.caption && showCaption\"\n >\n {{ widget.definition.caption\n }}<span *ngIf=\"!headingLevel\" class=\"cdk-visually-hidden\">: </span>\n </div>\n <div\n class=\"value-wrapper\"\n [class.value-wrapper-edit]=\"isEditable()\"\n (click)=\"isEditable() ? startEdit($event) : null\"\n >\n <div *ngIf=\"isEmpty()\" class=\"widget-data widget-no-data widget-type-{{ basicType() }}\">\n -\n </div>\n <div\n *ngIf=\"!isEmpty()\"\n class=\"widget-data widget-type-{{ basicType() }} {{\n widget.definition.link ? 'widget-link' : ''\n }}\"\n (click)=\"click()\"\n >\n <div *ngIf=\"basicType() === 'text'\">{{ formatText() }}</div>\n <div *ngIf=\"basicType() === 'number'\">{{ formatNumber() }}</div>\n <div *ngIf=\"basicType() === 'date'\">{{ formatDate() }}</div>\n <div *ngIf=\"basicType() === 'license' && (license$ | async) as license\">\n <img alt=\"\" [src]=\"license.icon\" /> {{ license.name }}\n </div>\n <div *ngIf=\"basicType() === 'array'\">\n <div class=\"array-entry\" *ngFor=\"let v of value()\">{{ v }}</div>\n </div>\n <div *ngIf=\"basicType() === 'tree'\">\n <div class=\"tree-entry\" *ngFor=\"let v of rawValue\">\n <ng-container *ngTemplateOutlet=\"treeEntry; context: { path: v.path }\"></ng-container>\n </div>\n </div>\n <div *ngIf=\"basicType() === 'vcard'\">\n <div class=\"array-entry\" *ngFor=\"let v of value()\">{{ v | vcardName }}</div>\n </div>\n <div *ngIf=\"basicType() === 'slider'\">\n <span class=\"slider-value\">{{ value() }}</span\n ><span> / </span><span class=\"slider-max\">{{ widget.definition.max }}</span>\n </div>\n <div *ngIf=\"basicType() === 'duration'\">\n <span class=\"duration-value\">{{ value()[0] | appMdsDuration }}</span>\n </div>\n <div *ngIf=\"basicType() === 'range'\">\n <span class=\"slider-value\">{{ value()[0] }}</span\n >-<span class=\"slider-value\">{{ value()[1] }}</span>\n </div>\n <div *ngIf=\"basicType() === 'unknown'\">\n The widget type {{ widget.definition.type }} is currently not supported via angular\n rendering\n </div>\n </div>\n </div>\n </div>\n <!--<button mat-icon-button\n *ngIf=\"mdsEditorInstance.editorMode === 'inline' && widget.definition.interactionType === 'Input'\"\n (click)=\"view.injectEditField(this, edit)\"\n class=\"btn-edit\">\n <i esIcon=\"edit\"></i>\n </button>-->\n </div>\n</es-mds-editor-widget-container>\n<div class=\"edit-wrapper\">\n <div #editWrapper><div #edit></div></div>\n <!--<button *ngIf=\"!!editWrapper.innerText.trim()\" mat-icon-button><i esIcon=\"save\"></i></button>-->\n</div>\n<ng-template #treeEntry let-path=\"path\">\n <ng-container *ngFor=\"let t of path; let first = first\">\n <ng-container *ngIf=\"!first\">\n <span class=\"cdk-visually-hidden\">{{ 'SUB_CATEGORY_ARIA' | translate }}</span>\n <i esIcon=\"keyboard_arrow_right\" [aria]=\"false\"></i>\n </ng-container>\n <a\n [routerLink]=\"'/' + ROUTER_PREFIX + 'search'\"\n [queryParams]=\"getSearchParams(t)\"\n *ngIf=\"widget.definition.isSearchable\"\n >{{ t.caption }}</a\n >\n <span *ngIf=\"!widget.definition.isSearchable\">{{ t.caption }}</span>\n </ng-container>\n</ng-template>\n","/**\n * Replaces the given element with a div within the DOM.\n *\n * The purpose is to comply with W3C specifications for element and attribute names.\n *\n * Sets the attribute \"data-element\" to the old element tag name.\n */\nexport function replaceElementWithDiv(\n element: Element,\n mode: 'append' | 'replace' = 'replace',\n): HTMLDivElement {\n const div = document.createElement('div');\n div.setAttribute('data-element', element.localName);\n for (const attribute of element.attributes) {\n const targetAttributeName = getTargetAttributeName(attribute);\n div.setAttribute(targetAttributeName, attribute.nodeValue);\n }\n if (element.parentNode) {\n if (mode === 'append') {\n // keep the positioning\n element.parentNode.insertBefore(div, element);\n // element.parentNode.append(div);\n } else if (mode === 'replace') {\n element.parentNode.replaceChild(div, element);\n }\n } else {\n console.warn('replace child failed for ' + element.localName);\n }\n return div;\n}\n\n/**\n * Returns the name with which to copy attributes to the new element.\n *\n * Keeps \"style\", \"class\", and \"data-\" attributes and prefixes everything else with\n * \"data-attribute-\".\n */\nfunction getTargetAttributeName(attr: Attr): string {\n if (['style', 'class'].includes(attr.nodeName)) {\n return attr.nodeName;\n } else if (attr.nodeName.startsWith('data-')) {\n return attr.nodeName;\n } else {\n return 'data-attribute-' + attr.nodeName;\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\n@Component({\n selector: 'es-spinner-small',\n templateUrl: 'spinner-small.component.html',\n styleUrls: ['spinner-small.component.scss'],\n imports: [MatProgressSpinnerModule],\n})\nexport class SpinnerSmallComponent {\n @Input() diameter = 20;\n constructor() {}\n}\n","<mat-progress-spinner\n color=\"primary\"\n mode=\"indeterminate\"\n [diameter]=\"diameter\"\n></mat-progress-spinner>\n","import {\n Component,\n ComponentFactoryResolver,\n ElementRef,\n Injector,\n Input,\n OnChanges,\n QueryList,\n signal,\n SimpleChanges,\n ViewChildren,\n ViewContainerRef,\n} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport {\n InitialValues,\n MdsValueList,\n MdsViewerWidget,\n MdsWidgetComponent,\n} from './widget/mds-widget.component';\nimport {\n HOME_REPOSITORY,\n MdsDefinition,\n MdsService,\n MdsView,\n RestConstants,\n} from 'ngx-edu-sharing-api';\nimport { Values } from '../services/search-helper.service';\nimport { replaceElementWithDiv } from './replace-element-with-div';\nimport { UIService } from '../services/ui.service';\nimport { MdsViewerService } from './mds-viewer.service';\nimport { ViewInstanceService } from './view-instance.service';\nimport { BehaviorSubject } from 'rxjs';\n\n@Component({\n selector: 'es-mds-viewer',\n templateUrl: 'mds-viewer.component.html',\n styleUrls: ['mds-viewer.component.scss'],\n providers: [MdsViewerService, ViewInstanceService],\n standalone: false,\n})\nexport class MdsViewerComponent implements OnChanges {\n @ViewChildren('container') container: QueryList<ElementRef>;\n\n @Input() mdsEditorInstanceService: any;\n @Input() groupId: string;\n @Input() setId: string;\n @Input() data: Values;\n @Input() mds: MdsDefinition;\n templates = signal<\n {\n view: MdsView;\n html: SafeHtml;\n }[]\n >(null);\n\n /**\n * show group headings (+ icons) for the individual templates\n */\n @Input() showGroupHeadings = true;\n\n /**\n * The heading level from 1 to 6 to use for widget labels, equivalent to `h1` to `h6`.\n *\n * If not set, widget labels are not marked as headings and an invisible colon is added between\n * labels and values, that will be read out by screen readers.\n */\n @Input()\n set headingLevel(value: number | null) {\n this.viewInstance.headingLevel = value;\n }\n get headingLevel() {\n return this.viewInstance.headingLevel;\n }\n\n constructor(\n private mdsService: MdsService,\n private mdsViewerService: MdsViewerService,\n private factoryResolver: ComponentFactoryResolver,\n private injector: Injector,\n private containerRef: ViewContainerRef,\n private sanitizer: DomSanitizer,\n private viewInstance: ViewInstanceService,\n ) {}\n\n getGroup() {\n return this.mds.groups.find((g: any) => g.id == this.groupId);\n }\n getView(id: string) {\n return this.mds.views.find((v: any) => v.id == id);\n }\n\n public async inflate() {\n if (!this.mds) {\n setTimeout(() => this.inflate(), 1000 / 60);\n return;\n }\n try {\n this.mdsViewerService.values$.next(this.data);\n this.mdsViewerService.mds$.next(this.mds);\n if (this.mdsEditorInstanceService) {\n const editor = await this.mdsEditorInstanceService.initWithoutNodes(\n this.groupId,\n this.setId,\n HOME_REPOSITORY,\n 'viewer',\n this.data,\n );\n if (!editor) {\n // Initialization was interrupted. Probably, this method was called again before it\n // could finish.\n return;\n }\n }\n } catch (e) {\n return;\n }\n const templates = [];\n for (const view of this.getGroup().views) {\n const v = this.getView(view);\n templates.push({\n view: v,\n html: this.sanitizer.bypassSecurityTrustHtml(this.prepareHTML(v.html)),\n });\n }\n this.templates.set(templates);\n // wait for angular to inflate the new binding\n setTimeout(() => {\n for (const widget of (this.mdsEditorInstanceService?.widgets.value ||\n this.mds.widgets.map((definition) => {\n return {\n definition,\n getInitalValuesAsync: async () => {\n return {\n jointValues: this.data[definition.id!!],\n } as InitialValues;\n },\n getInitialDisplayValues: () => new BehaviorSubject<MdsValueList>(null),\n } as MdsViewerWidget;\n })) as MdsViewerWidget[]) {\n this.container.toArray().forEach((c) => {\n let element: HTMLElement = c.nativeElement.getElementsByTagName(\n widget.definition.id,\n )?.[0];\n if (element) {\n // MdsEditorViewComponent.updateWidgetWithHTMLAttributes(element, w);\n element = replaceElementWithDiv(element);\n\n UIService.injectAngularComponent(\n this.factoryResolver,\n this.containerRef,\n MdsWidgetComponent,\n element,\n {\n widget,\n },\n {},\n this.injector,\n );\n }\n });\n }\n });\n }\n\n /**\n * close all custom tags inside the html which are not closed\n * e.g. <cm:name>\n * -> <cm:name></cm:name>\n * @param html\n */\n private prepareHTML(html: string) {\n for (const w of this.mds.widgets) {\n const start = html.indexOf('<' + w.id);\n if (start == -1) {\n continue;\n }\n const end = html.indexOf('>', start) + 1;\n html = html.substring(0, end) + '</' + w.id + '>' + html.substring(end);\n }\n return html;\n }\n\n async ngOnChanges(changes: SimpleChanges) {\n let inflate = false;\n if (changes.setId) {\n this.mds = await this.mdsService\n .getMetadataSet({ metadataSet: this.setId })\n .toPromise();\n inflate = true;\n }\n if (changes.data) {\n if (this.data[RestConstants.CM_PROP_METADATASET_EDU_METADATASET] != null) {\n this.mds = await this.mdsService\n .getMetadataSet({\n metadataSet:\n this.data[RestConstants.CM_PROP_METADATASET_EDU_METADATASET][0],\n })\n .toPromise();\n } else if (!this.mds) {\n this.mds = await this.mdsService.getMetadataSet({}).toPromise();\n }\n inflate = true;\n }\n if (inflate) {\n void this.inflate();\n }\n }\n}\n","<es-spinner-small *ngIf=\"!templates()\"></es-spinner-small>\n<div *ngFor=\"let t of templates()\" #container class=\"mds-viewer\">\n <div *ngIf=\"showGroupHeadings && t.view.caption\" class=\"card-title-element group-heading\">\n <i [esIcon]=\"t.view.icon\" *ngIf=\"t.view.icon\"></i><span>{{ t.view.caption }}</span>\n </div>\n <div class=\"template\" [innerHTML]=\"t.html\"></div>\n</div>\n","import { style, animate, transition, trigger, state } from '@angular/animations';\nexport class UIAnimation {\n public static ANIMATION_TIME_FAST = 100;\n public static ANIMATION_TIME_NORMAL = 200;\n public static ANIMATION_TIME_SLOW = 300;\n public static fade(time = UIAnimation.ANIMATION_TIME_NORMAL) {\n return [\n transition(':enter', [style({ opacity: 0 }), animate(time, style({ opacity: 1 }))]),\n transition(':leave', [animate(time, style({ opacity: 0 }))]),\n ];\n }\n public static fromBottom(time = UIAnimation.ANIMATION_TIME_NORMAL) {\n return [\n transition(':enter', [\n style({ transform: 'translateY(100%)' }),\n animate(time, style({ transform: 'translateY(0)' })),\n ]),\n transition(':leave', [\n style({ transform: 'translateY(0)' }),\n animate(time, style({ transform: 'translateY(100%)' })),\n ]),\n ];\n }\n public static fromLeft(time = UIAnimation.ANIMATION_TIME_NORMAL) {\n return [\n transition(':enter', [\n style({ transform: 'translateX(-100%)' }),\n animate(time, style({ transform: 'translateX(0)' })),\n ]),\n transition(':leave', [\n style({ transform: 'translateX(0)' }),\n animate(time, style({ transform: 'translateX(-100%)' })),\n ]),\n ];\n }\n public static fromRight(time: number | string = UIAnimation.ANIMATION_TIME_NORMAL) {\n return [\n transition(':enter', [\n style({ transform: 'translateX(100%)' }),\n animate(time, style({ transform: 'translateX(0)' })),\n ]),\n transition(':leave', [\n style({ transform: 'translateX(0)' }),\n animate(time, style({ transform: 'translateX(100%)' })),\n ]),\n ];\n }\n public static infobarBottom(time = UIAnimation.ANIMATION_TIME_NORMAL) {\n return [\n transition(':enter', [\n style({ bottom: '-70px' }),\n animate(time + 'ms ease', style({ bottom: '0' })),\n ]),\n transition(':leave', [\n style({ bottom: '0' }),\n animate(time + 'ms ease', style({ bottom: '-70px' })),\n ]),\n ];\n }\n /**\n * Useful animation for opening any overflow menus\n * @param time\n * @returns {AnimationStateTransitionMetadata[]}\n */\n public static openOverlay(time = UIAnimation.ANIMATION_TIME_NORMAL) {\n return [\n transition(':enter', [\n style({ 'transform-origin': '50% 0%', transform: 'scaleY(0.5)', opacity: 0 }),\n animate(time, style({ transform: 'scaleY(1)', opacity: 1 })),\n ]),\n transition(':leave', [\n style({ 'transform-origin': '50% 0%', transform: 'scaleY(1)', opacity: 1 }),\n animate(time, style({ transform: 'scaleY(0.5)', opacity: 0 })),\n ]),\n ];\n }\n /**\n * Useful animation for opening any overflow menus - inverted (from bottom to top)\n * @param time\n * @returns {AnimationStateTransitionMetadata[]}\n */\n public static openOverlayBottom(time = UIAnimation.ANIMATION_TIME_NORMAL) {\n return [\n transition(':enter', [\n style({ 'transform-origin': '50% 100%', transform: 'scaleY(0.5)', opacity: 0 }),\n animate(time, style({ transform: 'scaleY(1)', opacity: 1 })),\n ]),\n transition(':leave', [\n style({ 'transform-origin': '50% 100%', transform: 'scaleY(1)', opacity: 1 }),\n animate(time, style({ transform: 'scaleY(0.5)', opacity: 0 })),\n ]),\n ];\n }\n /**\n * Useful animation to switch different content insides a dialog (navigating between contents)\n * @param time\n * @returns {AnimationStateTransitionMetadata[]}\n */\n public static switchDialog(time = UIAnimation.ANIMATION_TIME_NORMAL) {\n return [\n transition(':enter', [\n style({ 'transform-origin': '50% 0%', transform: 'scaleY(0)', opacity: 0 }),\n animate(time, style({ transform: 'scaleY(1)', opacity: 1 })),\n ]),\n ];\n }\n /**\n * Useful animation to switch different content insides a dialog (navigating between contents)\n * This is a special variant which does work without ngIf fields, it will remove display states\n */\n public static switchDialogBoolean(time = UIAnimation.ANIMATION_TIME_NORMAL) {\n return [\n state(\n 'false',\n style({\n opacity: 0,\n 'transform-origin': '50% 0%',\n transform: 'scaleY(0)',\n display: 'none',\n }),\n ),\n state(\n 'true',\n style({ opacity: 1, 'transform-origin': '50% 0%', transform: 'scaleY(100%)' }),\n ),\n transition('false => true', [style({ display: '' }), animate(time + 'ms ease-in-out')]),\n transition('true => false', [animate(time + 'ms ease-in-out')]),\n ];\n }\n /**\n * Useful animation for showing any modal cards\n * @param time\n * @returns {AnimationStateTransitionMetadata[]}\n */\n public static cardAnimation(time = UIAnimation.ANIMATION_TIME_NORMAL) {\n return [\n transition(':enter', [\n style({\n 'transform-origin': '50% 0%',\n transform: 'scaleY(0.5) translateY(-100%)',\n opacity: 0,\n }),\n animate(\n time + 'ms ease',\n style({ transform: 'scaleY(1) translateY(0)', opacity: 1 }),\n ),\n ]),\n transition(':leave', [\n style({ 'transform-origin': '50% 0%', opacity: 1 }),\n animate(time + 'ms ease', style({ opacity: 0 })),\n ]),\n ];\n }\n}\n","import { isNumeric } from './isNumeric';\nimport { isArray } from 'lodash-es';\n\nexport class Helper {\n public static deepCopy(data: any) {\n if (data == null) return null;\n return JSON.parse(JSON.stringify(data));\n }\n\n public static deepCopyArray(data: any[]) {\n if (!Array.isArray(data)) return data;\n return data.slice();\n }\n\n /**\n * Returns true if both objects have the same values stored\n * will not work for classes including methods or similar dynamic data\n * @param object1\n * @param object2\n * @returns {boolean}\n */\n public static objectEquals(object1: any, object2: any) {\n if (object1 == null) return object2 == null;\n if (object2 == null) return object1 == null;\n return JSON.stringify(object1) == JSON.stringify(object2);\n }\n\n /**\n * get data from an object based on a dotted path\n * also supports arrays like \"array.0.key\"\n * @param nested the object to return the data from\n * @param path the path of the field location in dotted notation\n */\n public static getDotPathFromNestedObject(nested: any, path: string) {\n const split = path.split('.');\n let obj = nested;\n for (let key of split) {\n if (isNumeric(key)) {\n obj = obj?.[parseInt(key)];\n } else {\n if (isArray(obj)) {\n return obj;\n }\n obj = obj?.[key];\n }\n }\n return obj;\n }\n public static filterObjectPropertyNested(obj: any, property: string[]) {\n for (let i in obj) {\n if (!obj.hasOwnProperty(i)) continue;\n if (property.includes(i)) {\n delete obj[i];\n } else if (typeof obj[i] === 'object') {\n Helper.filterObjectPropertyNested(obj[i], property);\n }\n }\n return obj;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { OptionItem } from '../types/option-item';\n\n@Pipe({\n name: 'optionTooltip',\n standalone: false,\n})\nexport class OptionTooltipPipe implements PipeTransform {\n constructor(private translate: TranslateService) {}\n\n async transform(option: OptionItem, args: string[] = null) {\n return (\n (await this.translate.get(option.name).toPromise()) +\n (option.keyboardShortcut ? ' (' + this.getKeyInfo(option) + ')' : '')\n );\n }\n\n getKeyInfo(option: OptionItem) {\n if (!option.keyboardShortcut) {\n return '';\n }\n const modifiers = [];\n if (option.keyboardShortcut.modifiers?.includes('Shift')) {\n modifiers.push(this.translate.instant('KEY_MODIFIER.SHIFT'));\n }\n if (option.keyboardShortcut.modifiers?.includes('Ctrl/Cmd')) {\n modifiers.push(this.translate.instant('KEY_MODIFIER.CTRL'));\n }\n return (\n (modifiers.length ? modifiers.join(' + ') + ' + ' : '') +\n option.keyboardShortcut.keyCode.replace('Key', '')\n );\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Pipe({\n name: 'replaceChars',\n standalone: false,\n})\nexport class ReplaceCharsPipe implements PipeTransform {\n transform(value: string, args: any): string {\n let i = 0;\n if (!Array.isArray(args.search)) {\n args.search = [args.search];\n }\n if (args.replace && !Array.isArray(args.replace)) {\n args.replace = [args.replace];\n }\n for (let arg of args.search) {\n value = value.split(arg).join(args.replace ? args.replace[i] : '');\n i++;\n }\n return value;\n }\n constructor(private translate: TranslateService) {}\n}\n","import { Component, Input, OnChanges, SimpleChanges, ViewChild } from '@angular/core';\nimport { MatMenu, MatMenuTrigger } from '@angular/material/menu';\nimport { OptionItem } from '../types/option-item';\nimport { Helper } from '../util/helper';\nimport { UIService } from '../services/ui.service';\nimport { BehaviorSubject } from 'rxjs';\nimport { Node } from 'ngx-edu-sharing-api';\n\n/**\n * The dropdown is one base component of the action bar (showing more actions),\n * but can also be used standalone.\n */\n@Component({\n selector: 'es-dropdown',\n templateUrl: 'dropdown.component.html',\n styleUrls: ['dropdown.component.scss'],\n standalone: false,\n})\nexport class DropdownComponent implements OnChanges {\n @ViewChild('dropdown', { static: true }) menu: MatMenu;\n @ViewChild('menuTrigger') menuTrigger: MatMenuTrigger;\n\n @Input() position: 'left' | 'right' = 'left';\n @Input() options: OptionItem[];\n options$ = new BehaviorSubject<OptionItem[]>([]);\n\n /**\n * The objects that should be returned via the option's callback.\n *\n * Can be null\n */\n @Input() callbackObjects: Node[] = undefined;\n\n /**\n * Should disabled (\"greyed out\") options be shown or hidden?\n */\n @Input() showDisabled = true;\n\n /**\n * An additional class to add to the `mat-menu` instance.\n *\n * This is needed to customize the menu styling since the menu contents are\n * taken out of the host container by angular.\n */\n @Input() menuClass: string;\n\n constructor(private ui: UIService) {}\n\n ngOnChanges(changes?: SimpleChanges): void {\n if (changes == null || changes?.options || changes?.callbackObjects) {\n this.options$.next(this.ui.filterValidOptions(Helper.deepCopyArray(this.options)));\n if (this.callbackObjects !== undefined) {\n void this.ui.updateOptionEnabledState(this.options$, this.callbackObjects);\n }\n }\n }\n\n click(option: OptionItem) {\n if (!option.isEnabled) {\n return;\n }\n setTimeout(() => option.callback(null, this.callbackObjects));\n }\n\n isNewGroup(i: number) {\n if (i > 0) {\n return this.options$.value[i].group !== this.options$.value[i - 1].group;\n }\n return false;\n }\n\n /** Whether there are any enabled options so we can open the menu. */\n canShowDropdown(): boolean {\n // We can only open the dropdown menu, when there is at least one enabled option. Even when\n // there are options with `showDisabled: true`, showing a menu with no selectable option\n // causes a11y issues.\n return this.options$.value?.some((o) => o.isEnabled);\n }\n}\n","<mat-menu\n #dropdown=\"matMenu\"\n class=\"mat-dropdown-menu\"\n [class]=\"menuClass\"\n backdropClass=\"mat-dropdown-menu\"\n [xPosition]=\"position === 'right' ? 'after' : 'before'\"\n>\n <!-- MatMenu has role=\"menu\", so the only meaningful role of descendants is \"menuitem\" -->\n <ul role=\"none\">\n <ng-container *ngFor=\"let option of options$ | async; let i = index\">\n <li *ngIf=\"option.isEnabled || showDisabled\" role=\"none\">\n <button\n mat-menu-item\n class=\"mat-menu-item collection-item-{{\n option.name | replaceChars : { search: '.', replace: '-' }\n }}\"\n matTooltip=\"{{ option | optionTooltip | async }}\"\n matTooltipPosition=\"right\"\n matTooltipTouchGestures=\"off\"\n [attr.aria-label]=\"option.ariaLabel || option.name | translate\"\n [class.mat-menu-item-separate]=\"option.isSeparate || isNewGroup(i)\"\n [class.mat-menu-item-selected]=\"option.isSelected\"\n [disabled]=\"!option.isEnabled\"\n (click)=\"click(option)\"\n attr.data-test=\"menu-item-{{ option.name }}\"\n >\n <i [esIcon]=\"option.icon\"></i> {{ option.name | translate }}\n </button>\n </li>\n </ng-container>\n </ul>\n</mat-menu>\n<div #menuTrigger=\"matMenuTrigger\" [matMenuTriggerFor]=\"menu\" class=\"display-none\"></div>\n","import { trigger } from '@angular/animations';\nimport { Component, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { UIAnimation } from '../util/ui-animation';\nimport { UIConstants } from '../util/ui-constants';\nimport { OptionItem } from '../types/option-item';\nimport { UIService } from '../services/ui.service';\nimport { Helper } from '../util/helper';\nimport { TooltipPosition } from '@angular/material/tooltip';\nimport { BehaviorSubject } from 'rxjs';\n\n@Component({\n selector: 'es-actionbar',\n templateUrl: 'actionbar.component.html',\n styleUrls: ['actionbar.component.scss'],\n animations: [trigger('openOverlay', UIAnimation.openOverlay(UIAnimation.ANIMATION_TIME_FAST))],\n standalone: false,\n})\n/**\n * The action bar provides several icons, usually at the top right, with actions for a current context\n */\nexport class ActionbarComponent implements OnChanges {\n /**\n * The amount of options which are not hidden inside an overflow menu\n * (default: depending on mobile (1) or not (2))\n * Also use numberOfAlwaysVisibleOptionsMobile to control the amount of mobile options visible\n */\n @Input() numberOfAlwaysVisibleOptions = 2;\n @Input() numberOfAlwaysVisibleOptionsMobile = 1;\n /**\n * Visual style of the actionbar\n *\n * Values:\n * - 'button': material buttons with icons and text on medium to large screens\n * - 'icon-button': material buttons without text\n * - 'round': circular buttons without text\n * @default 'button'\n */\n @Input() appearance: 'round' | 'button' | 'icon-button' = 'button';\n /**\n * dropdownPosition is for position of dropdown (default = left)\n * Values 'left' or 'right'\n */\n @Input() dropdownPosition: 'left' | 'right' = 'left';\n\n /**\n * backgroundType for color matching, either bright, dark or primary\n */\n @Input() backgroundType: 'bright' | 'dark' | 'primary' = 'bright';\n /**\n * Style, currently default or 'flat' if all always visible icons should get a flat look\n */\n @Input() style: 'default' | 'flat' = 'default';\n /**\n * Highlight one or more of the always-visible buttons as primary action.\n *\n * - `first`, `last`: The first / last of `optionsAlways` by order.\n * - `manual`: Highlight all options that set `isPrimary = true`.\n */\n @Input() highlight: 'first' | 'last' | 'manual' = 'first';\n /**\n * Should disabled (\"greyed out\") options be shown or hidden?\n */\n @Input() showDisabled = true;\n\n /**\n * the position of the mat tooltips\n */\n @Input() tooltipPosition: TooltipPosition = 'below';\n\n /**\n * Set the options, see @OptionItem\n */\n @Input() set options(options: OptionItem[]) {\n this.optionsIn = options;\n this.prepareOptions(options);\n }\n\n /**\n * breakpoint width at which point the mobile display count is used\n */\n @Input() mobileBreakpoint = UIConstants.MOBILE_WIDTH;\n optionsIn: OptionItem[] = [];\n optionsAlways$ = new BehaviorSubject<OptionItem[]>([]);\n optionsMenu$ = new BehaviorSubject<OptionItem[]>([]);\n optionsToggleBefore: OptionItem[] = [];\n optionsToggleAfter: OptionItem[] = [];\n\n constructor(private uiService: UIService, private translate: TranslateService) {}\n\n private prepareOptions(options: OptionItem[]) {\n options = this.uiService.filterValidOptions(Helper.deepCopyArray(options));\n if (options == null) {\n this.optionsAlways$.next([]);\n this.optionsMenu$.next([]);\n return;\n }\n this.optionsToggleBefore = this.uiService.filterToggleOptions(options, true, 'before');\n this.optionsToggleAfter = this.uiService.filterToggleOptions(options, true, 'after');\n this.optionsAlways$.next(\n this.getActionOptions(this.uiService.filterToggleOptions(options, false)).slice(\n 0,\n this.getNumberOptions(),\n ),\n );\n if (!this.optionsAlways$.value.length) {\n this.optionsAlways$.next(\n this.uiService\n .filterToggleOptions(options, false)\n .slice(0, this.getNumberOptions()),\n );\n }\n this.optionsMenu$.next(\n this.hideActionOptions(\n this.uiService.filterToggleOptions(options, false),\n this.optionsAlways$.value,\n ),\n );\n void this.uiService.updateOptionEnabledState(this.optionsAlways$);\n void this.uiService.updateOptionEnabledState(this.optionsMenu$);\n // may causes weird looking\n /*if(this.optionsMenu.length<2) {\n this.optionsAlways = this.optionsAlways.concat(this.optionsMenu);\n this.optionsMenu = [];\n }*/\n }\n\n public getNumberOptions() {\n if (window.innerWidth < this.mobileBreakpoint) {\n return this.numberOfAlwaysVisibleOptionsMobile;\n }\n return this.numberOfAlwaysVisibleOptions;\n }\n\n click(option: OptionItem) {\n if (!option.isEnabled) {\n if (option.disabledCallback) {\n option.disabledCallback();\n }\n return;\n }\n option.callback();\n }\n\n private getActionOptions(options: OptionItem[]) {\n const result: OptionItem[] = [];\n for (const option of options) {\n if (option.showAsAction) result.push(option);\n }\n return result;\n }\n\n private hideActionOptions(options: OptionItem[], optionsAlways: OptionItem[]) {\n const result: OptionItem[] = [];\n for (const option of options) {\n if (optionsAlways.indexOf(option) === -1) result.push(option);\n }\n return result;\n }\n\n /**\n * Invalidate / refreshes all options based on their current callbacks\n */\n public invalidate() {\n this.prepareOptions(this.optionsIn);\n }\n\n private filterDisabled(options: OptionItem[]) {\n if (options == null) return null;\n const filtered = [];\n for (const option of options) {\n if (option.isEnabled || this.showDisabled) filtered.push(option);\n }\n return filtered;\n }\n\n canShowDropdown() {\n if (!this.optionsMenu$.value.length) {\n return false;\n }\n return this.optionsMenu$.value.filter((o) => o.isEnabled).length > 0;\n }\n\n shouldHighlight(optionIndex: number, option: OptionItem): boolean {\n switch (this.highlight) {\n case 'first':\n return optionIndex === 0;\n case 'last':\n return optionIndex === this.optionsAlways$.value.length - 1;\n case 'manual':\n return option.isPrimary;\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n this.invalidate();\n }\n}\n","<es-dropdown\n #dropdownRef\n [options]=\"optionsMenu$ | async\"\n [showDisabled]=\"showDisabled\"\n [position]=\"dropdownPosition\"\n></es-dropdown>\n<div\n class=\"actionbar\"\n [class.actionbar-all-flat]=\"style === 'flat'\"\n [class.actionbar-background-dark]=\"backgroundType === 'dark'\"\n [class.actionbar-background-primary]=\"backgroundType === 'primary'\"\n [class.actionbar-round]=\"appearance === 'round'\"\n [class.actionbar-icon-button]=\"appearance === 'icon-button'\"\n>\n <div\n *ngIf=\"optionsToggleBefore.length\"\n class=\"actionToggle before\"\n [class.actionToggleDivider]=\"(optionsAlways$ | async).length\"\n >\n <ng-container\n *ngTemplateOutlet=\"toggle; context: { optionsToggle: optionsToggleBefore }\"\n ></ng-container>\n </div>\n <ng-container *ngFor=\"let option of optionsAlways$ | async; let i = index\">\n <button\n *ngIf=\"shouldHighlight(i, option)\"\n mat-flat-button\n color=\"primary\"\n [disabled]=\"!option.isEnabled\"\n [class.display-none]=\"!option.isEnabled && !showDisabled\"\n matTooltip=\"{{ option | optionTooltip | async }}\"\n [matTooltipPosition]=\"tooltipPosition\"\n [attr.aria-label]=\"option.ariaLabel || option.name | translate\"\n (click)=\"click(option)\"\n >\n <i [esIcon]=\"option.icon\"></i>\n <span class=\"action-always-caption\" *ngIf=\"option.showName && appearance === 'button'\">\n {{ option.name | translate }}</span\n >\n </button>\n <button\n *ngIf=\"!shouldHighlight(i, option)\"\n mat-button\n color=\"primary\"\n [disabled]=\"!option.isEnabled\"\n [class.display-none]=\"!option.isEnabled && !showDisabled\"\n matTooltip=\"{{ option | optionTooltip | async }}\"\n [matTooltipPosition]=\"tooltipPosition\"\n [attr.aria-label]=\"option.ariaLabel || option.name | translate\"\n (click)=\"click(option)\"\n >\n <i [esIcon]=\"option.icon\"></i>\n <span class=\"action-always-caption\" *ngIf=\"option.showName && appearance === 'button'\">\n {{ option.name | translate }}</span\n >\n </button>\n </ng-container>\n <button\n mat-button\n color=\"primary\"\n class=\"more\"\n [attr.aria-label]=\"'OPTIONS.SHOW_ALL_OPTIONS' | translate\"\n [matMenuTriggerFor]=\"dropdownRef.menu\"\n *ngIf=\"canShowDropdown()\"\n data-test=\"more-actions-button\"\n >\n <i esIcon=\"more_vert\" [aria]=\"false\"></i>\n </button>\n <div\n *ngIf=\"optionsToggleAfter.length\"\n class=\"actionToggle after\"\n [class.actionToggleDivider]=\"(optionsAlways$ | async).length\"\n >\n <ng-container\n *ngTemplateOutlet=\"toggle; context: { optionsToggle: optionsToggleAfter }\"\n ></ng-container>\n </div>\n</div>\n<ng-template #toggle let-optionsToggle=\"optionsToggle\">\n <ng-container *ngFor=\"let option of optionsToggle\">\n <button\n *ngIf=\"option.isToggleVisible\"\n mat-icon-button\n matTooltip=\"{{ option.name | translate }}\"\n [attr.aria-label]=\"option.ariaLabel || option.name | translate\"\n (click)=\"click(option)\"\n [class]=\"\n 'toggle-' +\n (option.name | replaceChars : { search: '.', replace: '-' }) +\n (option.isEnabled ? '' : ' disabled')\n \"\n attr.data-test=\"toggle-{{ option.name }}\"\n >\n <i [esIcon]=\"option.icon\" [aria]=\"false\"></i>\n </button>\n </ng-container>\n</ng-template>\n","import { Directive, ElementRef, EventEmitter, OnDestroy, OnInit, Output } from '@angular/core';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\ninterface BorderBox {\n width: number;\n height: number;\n}\n\n/**\n * Gets the border-box dimensions of an element in an asynchronous manner.\n *\n * This allows subscribing to changes and using values as input to other Angular components without\n * causing changed-after-checked errors.\n */\n@Directive({\n selector: '[esBorderBoxObserver]',\n exportAs: 'borderBoxObserver',\n standalone: false,\n})\nexport class BorderBoxObserverDirective implements OnInit, OnDestroy {\n static observeElement(elementRef: ElementRef<HTMLElement>): Observable<BorderBox> {\n return new Observable((subscriber) => {\n const borderBoxObserver = new BorderBoxObserverDirective(elementRef);\n borderBoxObserver.ngOnInit();\n borderBoxObserver.borderBoxSubject.subscribe(subscriber);\n return () => borderBoxObserver.ngOnDestroy();\n });\n }\n\n @Output('esBorderBoxObserver') borderBoxEmitter = new EventEmitter<BorderBox>();\n\n private observer: ResizeObserver;\n private readonly borderBoxSubject = new ReplaySubject<BorderBox>(1);\n\n width$ = this.borderBoxSubject.pipe(map(({ width }) => width));\n height$ = this.borderBoxSubject.pipe(map(({ height }) => height));\n\n constructor(private elementRef: ElementRef<HTMLElement>) {}\n\n ngOnInit(): void {\n this.registerEventEmitter();\n this.registerObserver();\n // Can cause changed-after-checked errors if done synchronously.\n void Promise.resolve().then(() => this.setInitialValue());\n }\n\n ngOnDestroy(): void {\n this.observer.disconnect();\n }\n\n private registerEventEmitter(): void {\n this.borderBoxSubject.subscribe((borderBox) => this.borderBoxEmitter.emit(borderBox));\n }\n\n private registerObserver(): void {\n this.observer = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n const borderBoxSize: ResizeObserverSize = entry.borderBoxSize[0];\n this.borderBoxSubject.next({\n width: borderBoxSize.inlineSize,\n height: borderBoxSize.blockSize,\n });\n });\n });\n this.observer.observe(this.elementRef.nativeElement);\n }\n\n private setInitialValue(): void {\n const boundingClientRect = this.elementRef.nativeElement.getBoundingClientRect();\n this.borderBoxSubject.next({\n width: boundingClientRect.width,\n height: boundingClientRect.height,\n });\n }\n}\n","import { Directive, ElementRef, Input, OnInit } from '@angular/core';\n\n/**\n * Checks whether text of the annotated element or a descendent (give a selector) was cut of, e.g.,\n * with an ellipsis.\n *\n * Call `hasTextOverflow()` for the result.\n */\n@Directive({\n selector: '[esCheckTextOverflow]',\n exportAs: 'esCheckTextOverflow',\n standalone: false,\n})\nexport class CheckTextOverflowDirective implements OnInit {\n @Input('esCheckTextOverflow') selector?: string;\n\n private textElement: HTMLElement;\n\n hasTextOverflow = delay(this.hasTextOverflow_);\n\n constructor(private readonly elementRef: ElementRef<HTMLElement>) {}\n\n ngOnInit(): void {\n this.textElement = this.getTextElement();\n }\n\n private hasTextOverflow_(): boolean {\n if (!this.textElement && this.selector) {\n // refetch element in case it has changed\n this.textElement = this.getTextElement();\n }\n const element = this.textElement;\n if (element) {\n return (\n element.offsetWidth < element.scrollWidth ||\n // use buffer to prevent overflow caused by small margins\n element.offsetHeight + 5 < element.scrollHeight\n );\n } else {\n return false;\n }\n }\n\n private getTextElement(): HTMLElement {\n if (this.selector) {\n return this.elementRef.nativeElement.querySelector(this.selector);\n } else {\n return this.elementRef.nativeElement;\n }\n }\n}\n\n/** Delay the result of a function one tick to avoid changed-after-checked errors. */\nfunction delay<T>(f: () => T): () => T {\n let previousValue: any = null;\n let updating = false;\n return function () {\n if (!updating) {\n const newValue = f.apply(this);\n if (newValue !== previousValue) {\n updating = true;\n void Promise.resolve().then(() => {\n previousValue = newValue;\n updating = false;\n });\n }\n }\n return previousValue;\n };\n}\n","import { Directive, HostListener } from '@angular/core';\n\n@Directive({\n selector: '[esFocusState]',\n exportAs: 'esFocusState',\n standalone: false,\n})\nexport class FocusStateDirective {\n /** Either the element or one of its descendants has focus. */\n hasFocus = false;\n /** The element is being hovered with the cursor. */\n hovering = false;\n\n constructor() {}\n\n @HostListener('focusin')\n onFocusIn() {\n this.hasFocus = true;\n }\n\n @HostListener('focusout')\n onFocusOut() {\n this.hasFocus = false;\n }\n\n @HostListener('mouseenter')\n onMouseOver() {\n this.hovering = true;\n }\n\n @HostListener('mouseleave')\n onMouseOut() {\n this.hovering = false;\n }\n}\n","import { Injectable, NgZone } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { take } from 'rxjs/operators';\n\n/**\n * Provides methods on the container that hosts the application.\n *\n * Usually, this will be `window`, but in case the application is embedded as a web component, it is\n * a `HTMLElement`.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AppContainerService {\n private scrollContainer?: HTMLElement;\n\n public scrollContainerChange = new Subject<HTMLElement>();\n\n constructor(private ngZone: NgZone) {}\n\n init(appElement: HTMLElement): void {\n this.registerScrollContainer(appElement);\n }\n\n /**\n * Registers one or more events on the application's scroll container.\n *\n * Note that the callback will be called outside of ng zone, so you must wrap any action that\n * should be reflected by Angular with `ngZone.run()`.\n */\n registerScrollEvents(\n callback: (event: Event) => void,\n until: Observable<void>,\n { events = ['scroll'] } = {},\n ) {\n this.ngZone.runOutsideAngular(() => {\n const scrollTarget = this.scrollContainer ?? window;\n for (const event of events) {\n scrollTarget.addEventListener(event, callback);\n until\n .pipe(take(1))\n .subscribe(() => scrollTarget.removeEventListener(event, callback));\n }\n });\n }\n\n /**\n * Return true if there is a scrolling ancestor that encompasses the app other than the document\n * element.\n */\n hasScrollContainer(): boolean {\n return this.scrollContainer != null;\n }\n\n /**\n * Returns the nearest scrolling container element that encompasses the app if the app is\n * embedded in another web page.\n *\n * If the app is served natively, returns the document element.\n */\n getScrollContainer(): HTMLElement;\n getScrollContainer<T>({ fallback }: { fallback: T }): T;\n getScrollContainer({ fallback = document.documentElement } = {}): HTMLElement {\n return this.scrollContainer ?? fallback;\n }\n\n private registerScrollContainer(appElement: HTMLElement): void {\n this.scrollContainer = this.getNearestScrollingAncestor(appElement);\n this.scrollContainerChange.next(this.scrollContainer);\n }\n\n private getNearestScrollingAncestor(element: HTMLElement): HTMLElement | null {\n while (element.parentElement) {\n const overflowStyle = window.getComputedStyle(element.parentElement).overflowY;\n if (['auto', 'scroll'].includes(overflowStyle)) {\n return element.parentElement;\n }\n element = element.parentElement;\n }\n return null;\n }\n}\n","import {\n Directive,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { AppContainerService } from '../services/app-container.service';\n\n@Directive({\n selector: '[esInfiniteScroll], [infinite-scroll], [data-infinite-scroll]',\n standalone: false,\n})\nexport class InfiniteScrollDirective implements OnInit, OnDestroy {\n @Output() scrolled = new EventEmitter<void>();\n\n @Input() infiniteScrollDistance: number = 1.5;\n @Input() infiniteScrollThrottle: number = 1000;\n @Input() scrollWindow: boolean = true;\n private lastEvent = 0;\n private lastScroll = 0;\n private destroyed$ = new Subject<void>();\n\n constructor(\n private appContainer: AppContainerService,\n private element: ElementRef,\n private zone: NgZone,\n ) {}\n\n ngOnInit(): void {\n this.zone.runOutsideAngular(() => {\n const handleScroll = () => this.handleOnScroll();\n const eventTarget = this.scrollWindow\n ? this.appContainer.getScrollContainer({ fallback: window })\n : this.element.nativeElement;\n eventTarget.addEventListener('scroll', handleScroll);\n this.destroyed$.subscribe(() =>\n eventTarget.removeEventListener('scroll', handleScroll),\n );\n });\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n\n handleOnScroll() {\n if (!this.element.nativeElement) return;\n if (this.scrollWindow) {\n const scrollContainer = this.appContainer.getScrollContainer();\n const height = scrollContainer.scrollHeight;\n const scroll = scrollContainer.scrollTop;\n if (\n scroll > this.lastScroll &&\n height - scroll < scrollContainer.clientHeight * this.infiniteScrollDistance\n ) {\n const time = new Date().getTime();\n if (time - this.lastEvent < this.infiniteScrollThrottle) return;\n this.lastEvent = time;\n this.emitScrolled();\n }\n this.lastScroll = scroll;\n } else {\n const element = this.element.nativeElement;\n const height = element.scrollHeight;\n const scroll = element.scrollTop;\n if (\n scroll > this.lastScroll &&\n height - scroll <\n element.getBoundingClientRect().height * this.infiniteScrollDistance\n ) {\n const time = new Date().getTime();\n if (time - this.lastEvent < this.infiniteScrollThrottle) return;\n this.lastEvent = time;\n this.emitScrolled();\n }\n this.lastScroll = scroll;\n }\n }\n\n private emitScrolled(): void {\n this.zone.run(() => this.scrolled.emit());\n }\n}\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { Node } from 'ngx-edu-sharing-api';\nimport { NodeHelperService } from '../services/node-helper.service';\n\n// TODO: Decide if providing focus highlights and ripples with this component is a good idea. When\n// using `app-node-url` for cards, we might need highlights and ripples for the whole card while\n// `app-node-url` should only wrap the title since links with lots of content confuse screen\n// readers.\n\nconst NODE_URL_TAG_NAME = 'es-node-url';\n\n@Component({\n selector: NODE_URL_TAG_NAME,\n templateUrl: 'node-url.component.html',\n styleUrls: ['node-url.component.scss'],\n standalone: false,\n})\nexport class NodeUrlComponent implements AfterViewInit {\n @ViewChild('link') link: ElementRef<HTMLAnchorElement>;\n\n @Input() node: Node;\n @Input() nodes: Node[];\n @Input() target: string;\n @Input() scope: string;\n /**\n * custom query params to include\n */\n @Input() queryParams: { [key: string]: string | number | boolean } = {};\n /**\n * link: a element\n * button: button element\n * wrapper: div element with behavior \"like\" a link\n */\n @Input() mode: 'link' | 'button' | 'wrapper' = 'link';\n @Input() disabled = false;\n /**\n * Show the ripple effect even when disabled.\n *\n * @deprecated Temporary workaround for list-table, which *sometimes* uses it's on click\n * bindings.\n */\n @Input() alwaysRipple = false;\n @Input('aria-describedby') ariaDescribedby: string;\n @Input('aria-label') ariaLabel = true;\n\n @Output() buttonClick = new EventEmitter<MouseEvent>();\n\n /**\n * Whether this instance of `NodeUrl` is nested inside another `NodeUrl`.\n */\n // We use nested `NodeUrl`s for a11y where we have a `NodeUrl` in wrapper mode to maximize\n // clickable area and one in link mode that only contains the title. We only want the outmost\n // `NodeUrl` to apply the ripple effect.\n //\n // Note that nesting `NodeUrl`s is only necessary when we want to provide hover effects on parts\n // of the outer `NodeUrl`. If we don't need that, it would be easier to attach a pseudo `:after`\n // element to the inner `NodeUrl` that expands its click area.\n isNested: boolean;\n\n constructor(\n private nodeHelper: NodeHelperService,\n private elementRef: ElementRef<HTMLElement>,\n ) {}\n\n ngAfterViewInit(): void {\n setTimeout(() => {\n this.isNested = this.getIsNested();\n });\n }\n\n getState() {\n return {\n scope: this.scope,\n };\n }\n\n get(mode: 'routerLink' | 'queryParams'): any {\n const result: any = this.nodeHelper.getNodeLink(mode, this.node);\n if (mode === 'queryParams') {\n // it is important that we remove the fromLogin info because otherwise the render component will redirect to the default page on back\n result.fromLogin = null;\n if (mode === 'queryParams') {\n Object.keys(this.queryParams).forEach((k) => (result[k] = this.queryParams[k]));\n }\n }\n return result;\n }\n\n focus(): void {\n this.link.nativeElement.focus();\n }\n\n clickWrapper(event: MouseEvent) {\n const eventCopy = copyClickEvent(event);\n this.link.nativeElement.dispatchEvent(eventCopy);\n event.preventDefault();\n }\n\n private getIsNested(): boolean {\n let ancestor = this.elementRef.nativeElement.parentElement;\n while (ancestor) {\n if (ancestor.tagName === NODE_URL_TAG_NAME.toUpperCase()) {\n return true;\n }\n ancestor = ancestor.parentElement;\n }\n return false;\n }\n}\n\nfunction copyClickEvent(event: MouseEvent): MouseEvent {\n // On Firefox, a middle click via neither the 'click', nor the 'auxclick' event cause a new tab\n // to be opened when triggered programmatically. As a workaround, we simulate a ctrl click\n // instead of a middle click. This matches Firefox's defaults, but we cannot account for\n // changed middle-click behavior.\n if (event.type === 'auxclick' && event.button === 1 && isFirefox()) {\n return copyClickEvent({ ...event, type: 'click', ctrlKey: true, button: 0 });\n }\n // It would seem better to use `event.type` instead of hard-coding 'click', but that doesn't\n // have the desired effect for non-click events when dispatched.\n return new MouseEvent('click', {\n cancelable: true,\n button: event.button,\n ctrlKey: event.ctrlKey,\n shiftKey: event.shiftKey,\n altKey: event.altKey,\n metaKey: event.metaKey,\n });\n}\n\nfunction isFirefox(): boolean {\n return navigator.userAgent.includes('Firefox');\n}\n","<ng-template #content><ng-content></ng-content></ng-template>\n<ng-container *ngIf=\"mode === 'link'\">\n <a\n *ngIf=\"!disabled\"\n #link\n matRipple\n matRippleColor=\"primary\"\n [matRippleDisabled]=\"isNested\"\n [routerLink]=\"get('routerLink')\"\n [state]=\"getState()\"\n [target]=\"target\"\n [queryParams]=\"get('queryParams')\"\n queryParamsHandling=\"merge\"\n cdkMonitorElementFocus\n [attr.aria-label]=\"ariaLabel ? node.name : null\"\n [attr.aria-describedby]=\"ariaDescribedby\"\n >\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </a>\n <!-- We use `div`s instead of `span`s here because the legacy `ListTable` component will insert\n `div` elements into this component's content. However, this will lead to invalid HTML for \"button\"\n mode. So really, users of this component should only insert flow content. -->\n <div *ngIf=\"disabled && !alwaysRipple\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </div>\n <div *ngIf=\"disabled && alwaysRipple\" matRipple matRippleColor=\"primary\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </div>\n</ng-container>\n<ng-container *ngIf=\"mode === 'wrapper'\">\n <div\n class=\"node-url-wrapper\"\n #wrapper\n matRipple\n matRippleColor=\"primary\"\n [matRippleDisabled]=\"disabled && !alwaysRipple\"\n (click)=\"clickWrapper($event)\"\n (auxclick)=\"clickWrapper($event)\"\n >\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </div>\n <!-- An invisible link that will by clicked programmatically by `clickWrapper()`. -->\n <a\n #link\n [routerLink]=\"get('routerLink')\"\n [state]=\"getState()\"\n [queryParams]=\"get('queryParams')\"\n queryParamsHandling=\"merge\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n class=\"cdk-visually-hidden\"\n ></a>\n</ng-container>\n<ng-container *ngIf=\"mode === 'button'\">\n <button\n [disabled]=\"disabled\"\n #link\n matRipple\n matRippleColor=\"primary\"\n [matRippleDisabled]=\"disabled && !alwaysRipple\"\n (click)=\"buttonClick.emit($event)\"\n cdkMonitorElementFocus\n >\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </button>\n</ng-container>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport * as rxjs from 'rxjs';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { DateHelper, FormatOptions } from '../util/DateHelper';\n\n@Pipe({\n name: 'formatDate',\n standalone: false,\n})\nexport class FormatDatePipe implements PipeTransform {\n constructor(private translate: TranslateService) {}\n\n transform(\n value: Date | number | string,\n args?: { time?: boolean; date?: boolean; relative?: boolean },\n ): string;\n transform(\n value: Date | number | string,\n args: { time?: boolean; date?: boolean; relative?: boolean; async: true },\n ): Observable<string>;\n transform(\n value: Date | number | string,\n args: { time?: boolean; date?: boolean; relative?: boolean; async?: boolean } = null,\n ): string | Observable<string> {\n if (!value) {\n return args?.async ? rxjs.of('') : '';\n }\n let options = new FormatOptions();\n if (args && args.time != null) options.showAlwaysTime = args.time;\n if (args && args.date != null) options.showDate = args.date;\n if (args && args.relative !== null) options.useRelativeLabels = args.relative;\n if (args?.async) {\n return this.translate\n .get('dummy') // Wait for the translation service to be ready\n .pipe(map(() => DateHelper.formatDate(this.translate, value, options)));\n } else {\n return DateHelper.formatDate(this.translate, value, options);\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Node } from 'ngx-edu-sharing-api';\nimport { RepoUrlService } from '../services/repo-url.service';\n\n@Pipe({\n name: 'esNodeIcon',\n standalone: false,\n})\nexport class NodeIconPipe implements PipeTransform {\n constructor(private repoUrlService: RepoUrlService) {}\n transform(node: Node) {\n return this.repoUrlService.getRepoUrl(node.iconURL, node);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Node, RestConstants } from 'ngx-edu-sharing-api';\n\n@Pipe({\n name: 'NodeImageSize',\n standalone: false,\n})\nexport class NodeImageSizePipe implements PipeTransform {\n transform(node: Node, args: any = null): string {\n const width = parseFloat(node.properties[RestConstants.CCM_PROP_WIDTH]?.[0]);\n const height = parseFloat(node.properties[RestConstants.CCM_PROP_HEIGHT]?.[0]);\n const megapixel = Math.round((width * height) / 1000000);\n if (width && height) {\n if (megapixel > 1) {\n return megapixel + ' Megapixel';\n }\n return Math.round(width) + 'x' + Math.round(height);\n }\n return '';\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\nimport { NetworkService, Node, RestConstants } from 'ngx-edu-sharing-api';\nimport * as rxjs from 'rxjs';\nimport { Observable } from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\nimport { NodeHelperService } from '../services/node-helper.service';\nimport { RepoUrlService } from '../services/repo-url.service';\n\ninterface NodeImagePreferences {\n crop?: boolean;\n maxWidth?: number;\n maxHeight?: number;\n width?: number;\n height?: number;\n}\n\n@Pipe({\n name: 'esNodeImage',\n standalone: false,\n})\nexport class NodeImagePipe implements PipeTransform {\n constructor(\n private nodeHelper: NodeHelperService,\n private sanitizer: DomSanitizer,\n private repoUrlService: RepoUrlService,\n private networkApi: NetworkService,\n ) {}\n\n transform(node: Node, preferences: NodeImagePreferences): Observable<SafeResourceUrl> {\n if (this.nodeHelper.isNodeCollection(node) && node.preview.isIcon) {\n return null;\n } else if (node.preview.data) {\n return rxjs.of(\n this.sanitizer.bypassSecurityTrustResourceUrl(\n 'data:' + node.preview.mimetype + ';base64,' + node.preview.data,\n ),\n );\n } else {\n return this.getPreviewUrl(node, preferences);\n }\n }\n\n private getPreviewUrl(node: Node, preferences: NodeImagePreferences): Observable<string> {\n return this.isEduSharingNode(node).pipe(\n switchMap(async (isEduSharingNode) => {\n let url = await this.repoUrlService.getRepoUrl(node.preview.url, node);\n if (isEduSharingNode) {\n url += Object.entries(preferences)\n .map(([key, value]) => `&${key}=${value}`)\n .join('');\n }\n return url;\n }),\n );\n }\n\n private isEduSharingNode(node: Node): Observable<boolean> {\n return rxjs\n .forkJoin([\n this.networkApi.isFromHomeRepository(node),\n this.networkApi.getRepositoryOfNode(node),\n ])\n .pipe(\n map(\n ([isFromHomeRepository, repository]) =>\n isFromHomeRepository ||\n repository?.repositoryType === RestConstants.REPOSITORY_TYPE_ALFRESCO,\n ),\n );\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ConfigService, Person } from 'ngx-edu-sharing-api';\n\n@Pipe({\n name: 'nodePersonName',\n standalone: false,\n})\nexport class NodePersonNamePipe implements PipeTransform {\n constructor(private config: ConfigService) {}\n transform(person: Person | any, args: any = null): string {\n let field = this.config.instant('userDisplayName', 'fullName');\n if (person == null) return null;\n if (field == 'authorityName') {\n if (person.authorityName == null) field = 'fullName';\n else return person.authorityName;\n }\n if (field == 'fullName') {\n if (person.profile) {\n return (\n (person.profile.firstName ? person.profile.firstName : '') +\n ' ' +\n (person.profile.lastName ? person.profile.lastName : '')\n ).trim();\n }\n return (\n (person.firstName ? person.firstName : '') +\n ' ' +\n (person.lastName ? person.lastName : '')\n ).trim();\n }\n if (field == 'firstName' || field == 'lastName') {\n if (person.profile) {\n return person.profile[field];\n }\n return person[field];\n }\n if (field == 'email') {\n if (person.profile && person.profile.email) return person.profile.email;\n if (person.email == null) return person.mailbox;\n return person.email;\n }\n return person[field];\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Node, RestConstants } from 'ngx-edu-sharing-api';\nimport { RestHelper } from '../util/rest-helper';\nimport { NodeRoot } from '../node-entries/entries-model';\nimport { isString } from 'lodash-es';\n\n@Pipe({\n name: 'nodeTitle',\n standalone: false,\n})\nexport class NodeTitlePipe implements PipeTransform {\n transform(node: Node | NodeRoot | 'HOME', args?: { type: 'name' | 'title' }): string {\n if (!(node as Node)?.name && isString(node)) {\n if (node === 'HOME') {\n return this.translate.instant('WORKSPACE.' + node);\n }\n return this.translate.instant('WORKSPACE.' + node);\n }\n const value =\n args?.type === 'name'\n ? RestHelper.getName(node as Node)\n : RestHelper.getTitle(node as Node);\n if ((node as Node)?.properties?.[RestConstants.CCM_PROP_MAPTYPE]) {\n return this.translate.instant(\n 'MAPTYPE.' + (node as Node)?.properties?.[RestConstants.CCM_PROP_MAPTYPE][0],\n {\n fallback: value,\n },\n );\n }\n return value;\n }\n constructor(private translate: TranslateService) {}\n}\n","import { trigger } from '@angular/animations';\nimport { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\nimport { MatMenu } from '@angular/material/menu';\nimport { UIAnimation } from '../util/ui-animation';\nimport { ListItem, SortEvent } from '../types/list-item';\n\n@Component({\n selector: 'es-sort-dropdown',\n templateUrl: 'sort-dropdown.component.html',\n styleUrls: ['sort-dropdown.component.scss'],\n animations: [trigger('openOverlay', UIAnimation.openOverlay(UIAnimation.ANIMATION_TIME_FAST))],\n standalone: false,\n})\nexport class SortDropdownComponent {\n @ViewChild('menu', { static: true }) menu: MatMenu;\n\n @Input() columns: ListItem[];\n @Input() sortBy: string;\n @Input() sortAscending: boolean;\n\n @Output() sort = new EventEmitter<SortEvent>();\n\n constructor() {}\n\n setSort(item: ListItem | any): void {\n let ascending = this.sortAscending;\n const itemAscending = item.mode === 'ascending';\n if (item.name === this.sortBy) {\n if (item.mode != null) {\n // element is limited to one mode, ignore the request\n if (itemAscending === this.sortAscending) {\n return;\n }\n }\n ascending = !ascending;\n } else if (item.mode != null) {\n // force mode when switching to item\n ascending = itemAscending;\n }\n (item as SortEvent).ascending = ascending;\n this.sort.emit(item);\n }\n}\n","<mat-menu #menu=\"matMenu\" class=\"sort-dropdown-menu\">\n <div class=\"collection-item-title\">{{ 'SORT_BY' | translate }}</div>\n <button\n *ngFor=\"let item of columns\"\n mat-menu-item\n (click)=\"setSort(item)\"\n class=\"collection-item\"\n [class.active]=\"sortBy === item.name\"\n >\n <span class=\"title\" *ngIf=\"item.label\">{{ item.label }}</span>\n <span class=\"title\" *ngIf=\"!item.label\">{{ item.type + '.' + item.name | translate }}</span>\n <ng-container *ngIf=\"sortBy === item.name && item.name !== 'ccm:collection_ordered_position'\">\n <i class=\"material-icons\" *ngIf=\"sortAscending\" [altText]=\"'ASCENDING' | translate\">\n arrow_upward\n </i>\n <i class=\"material-icons\" *ngIf=\"!sortAscending\" [altText]=\"'DESCENDING' | translate\">\n arrow_downward\n </i>\n <span class=\"cdk-visually-hidden\">{{ 'SELECTED' | translate }}</span>\n </ng-container>\n </button>\n</mat-menu>\n","import { Component, HostBinding } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@Component({\n selector: 'es-spinner',\n templateUrl: 'spinner.component.html',\n styleUrls: ['spinner.component.scss'],\n imports: [TranslateModule],\n})\nexport class SpinnerComponent {\n @HostBinding('attr.data-test') readonly dataTest = 'loading-spinner';\n\n constructor() {}\n}\n","<div class=\"spinner\">\n <span aria-live=\"polite\" class=\"cdk-visually-hidden\">{{ 'LOADING' | translate }}</span>\n <div class=\"spinnercontainer\">\n <div class=\"inner\">\n <div class=\"spinner1\"></div>\n </div>\n <div class=\"inner\">\n <div class=\"spinner2\"></div>\n </div>\n <div class=\"inner\">\n <div class=\"spinner3\"></div>\n </div>\n </div>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'propertySlug',\n standalone: false,\n})\nexport class PropertySlugPipe implements PipeTransform {\n transform(value: string): string {\n return value?.replace(/[:.]/, '_');\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Node, RestConstants } from 'ngx-edu-sharing-api';\nimport { TranslateService } from '@ngx-translate/core';\n\nexport type LicenseType = 'name';\n\n@Pipe({\n name: 'esNodeLicense',\n standalone: false,\n})\nexport class NodeLicensePipe implements PipeTransform {\n constructor(private translate: TranslateService) {}\n transform(node: Node, args: { type: LicenseType }) {\n if (node.properties[RestConstants.CCM_PROP_LICENSE]?.[0]) {\n if (args?.type === 'name') {\n return this.translate.get(\n 'LICENSE.NAMES.' + node.properties[RestConstants.CCM_PROP_LICENSE]?.[0],\n );\n }\n }\n return null;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatRippleModule } from '@angular/material/core';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { RouterModule } from '@angular/router';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { ActionbarComponent } from '../actionbar/actionbar.component';\nimport { BorderBoxObserverDirective } from '../directives/border-box-observer.directive';\nimport { CheckTextOverflowDirective } from '../directives/check-text-overflow.directive';\nimport { FocusStateDirective } from '../directives/focus-state.directive';\nimport { IconDirective } from '../directives/icon.directive';\nimport { InfiniteScrollDirective } from '../directives/infinite-scroll.directive';\nimport { DropdownComponent } from '../dropdown/dropdown.component';\nimport { NodeUrlComponent } from '../node-url/node-url.component';\nimport { FormatSizePipe } from '../pipes/file-size.pipe';\nimport { FormatDatePipe } from '../pipes/format-date.pipe';\nimport { NodeIconPipe } from '../pipes/node-icon.pipe';\nimport { NodeImageSizePipe } from '../pipes/node-image-size.pipe';\nimport { NodeImagePipe } from '../pipes/node-image.pipe';\nimport { NodePersonNamePipe } from '../pipes/node-person-name.pipe';\nimport { NodeTitlePipe } from '../pipes/node-title.pipe';\nimport { OptionTooltipPipe } from '../pipes/option-tooltip.pipe';\nimport { ReplaceCharsPipe } from '../pipes/replace-chars.pipe';\nimport { VCardNamePipe } from '../pipes/vcard-name.pipe';\nimport { SortDropdownComponent } from '../sort-dropdown/sort-dropdown.component';\nimport { SpinnerComponent } from '../spinner/spinner.component';\nimport { PropertySlugPipe } from '../pipes/property-slug.pipe';\nimport { NodeLicensePipe } from '../pipes/node-license.pipe';\nimport { MdsWidgetComponent } from '../mds-viewer/widget/mds-widget.component';\nimport { MdsDurationPipe } from '../pipes/mds-duration.pipe';\nimport { MdsViewerComponent } from '../mds-viewer/mds-viewer.component';\nimport { SpinnerSmallComponent } from '../spinner-small/spinner-small.component';\n\n@NgModule({\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n declarations: [\n MdsViewerComponent,\n MdsWidgetComponent,\n ActionbarComponent,\n BorderBoxObserverDirective,\n CheckTextOverflowDirective,\n DropdownComponent,\n FocusStateDirective,\n FormatDatePipe,\n FormatSizePipe,\n IconDirective,\n MdsDurationPipe,\n InfiniteScrollDirective,\n PropertySlugPipe,\n NodeIconPipe,\n NodeImagePipe,\n NodeImageSizePipe,\n NodeLicensePipe,\n NodePersonNamePipe,\n NodeTitlePipe,\n NodeUrlComponent,\n OptionTooltipPipe,\n ReplaceCharsPipe,\n SortDropdownComponent,\n VCardNamePipe,\n ],\n imports: [\n CommonModule,\n MatMenuModule,\n SpinnerComponent,\n SpinnerSmallComponent,\n MatButtonModule,\n MatTooltipModule,\n MatRippleModule,\n TranslateModule,\n RouterModule,\n ],\n exports: [\n MdsViewerComponent,\n MdsWidgetComponent,\n ActionbarComponent,\n BorderBoxObserverDirective,\n CheckTextOverflowDirective,\n DropdownComponent,\n FocusStateDirective,\n FormatDatePipe,\n FormatSizePipe,\n MdsDurationPipe,\n IconDirective,\n InfiniteScrollDirective,\n PropertySlugPipe,\n NodeIconPipe,\n NodeImagePipe,\n NodeImageSizePipe,\n NodePersonNamePipe,\n NodeTitlePipe,\n NodeUrlComponent,\n SortDropdownComponent,\n SpinnerComponent,\n SpinnerSmallComponent,\n VCardNamePipe,\n ],\n})\nexport class EduSharingUiCommonModule {}\n","import { Sort, SortDirection } from '@angular/material/sort';\nimport { Observable } from 'rxjs';\nimport { EventEmitter } from '@angular/core';\n\nexport type ListItemType = 'NODE' | 'NODE_PROPOSAL' | 'COLLECTION' | 'ORG' | 'GROUP' | 'USER';\n\n/**\n * A list item info, which is basically a column\n * Example:\n this.columns.push(new ListItem(RestConstants.CM_NAME));\n this.columns.push(new ListItem(RestConstants.CM_ARCHIVED_DATE));\n */\nexport class ListItem {\n /**\n * Should this item be shown by default\n * @type {boolean}\n */\n public visible = true;\n\n /**\n * Label to display, if set, should be preferred instead of automatic i18n\n */\n public label: string;\n\n /**\n * custom format string for date fields, may be null\n */\n public format: string;\n constructor(\n public type: ListItemType,\n public name: string,\n public config = {\n showLabel: false,\n },\n ) {}\n\n static getCollectionDefaults() {\n let columns = [];\n columns.push(new ListItem('COLLECTION', 'title'));\n columns.push(new ListItem('COLLECTION', 'info'));\n columns.push(new ListItem('COLLECTION', 'scope'));\n return columns;\n }\n}\nexport class ListItemSort extends ListItem {\n constructor(\n public type: ListItemType,\n public name: string,\n public mode: 'ascending' | 'descending' | null = null,\n public config = {\n showLabel: false,\n },\n ) {\n super(type, name, config);\n }\n}\nexport class SortEvent extends ListItemSort {\n ascending: boolean;\n}\n\n/**\n * UI element that allows the user to choose sorting.\n */\nexport interface SortPanel {\n active: string;\n direction: SortDirection;\n readonly sortChange: EventEmitter<Sort>;\n}\n","import { TranslateService } from '@ngx-translate/core';\nimport {\n AuthenticationService,\n MdsDefinition,\n MdsSort,\n MdsWidget,\n RestConstants,\n Sort,\n} from 'ngx-edu-sharing-api';\nimport { Injectable } from '@angular/core';\nimport { ListItem, ListItemType } from '../types/list-item';\n\n@Injectable()\nexport class MdsHelperService {\n static getSortInfo(mdsSet: MdsDefinition, name: string): MdsSort {\n if (mdsSet) {\n if (mdsSet.sorts) {\n for (const list of mdsSet.sorts) {\n if (list.id == name) {\n return list;\n }\n }\n }\n console.error('mds does not define sort info for ' + name + ', invalid configuration!');\n }\n return null;\n }\n static getColumns(translate: TranslateService, mdsSet: any, name: string) {\n let columns: ListItem[] = [];\n if (mdsSet) {\n for (const list of mdsSet.lists) {\n if (list.id === name) {\n for (const column of list.columns) {\n let type: ListItemType = 'NODE';\n if (name === 'mediacenterGroups') {\n type = 'GROUP';\n } else if (name === 'searchCollections') {\n type = 'COLLECTION';\n }\n // in this case, the type is included\n if (column.id.includes('.')) {\n const split = column.id.split('.');\n type = split[0];\n column.id = split[1];\n }\n const item = new ListItem(type, column.id);\n item.format = column.format;\n columns.push(item);\n }\n break;\n }\n }\n }\n if (!columns.length) {\n if (mdsSet !== null) {\n console.warn(\n 'mds does not define columns for ' + name + ', invalid configuration!',\n );\n }\n if (name === 'search' || name === 'collectionReferences') {\n columns.push(new ListItem('NODE', RestConstants.LOM_PROP_TITLE));\n columns.push(new ListItem('NODE', RestConstants.CM_MODIFIED_DATE));\n columns.push(new ListItem('NODE', RestConstants.CCM_PROP_LICENSE));\n columns.push(new ListItem('NODE', RestConstants.CCM_PROP_REPLICATIONSOURCE));\n } else if (name === 'mediacenterManaged') {\n columns.push(new ListItem('NODE', RestConstants.LOM_PROP_TITLE));\n columns.push(new ListItem('NODE', RestConstants.CCM_PROP_REPLICATIONSOURCEID));\n columns.push(new ListItem('NODE', RestConstants.CCM_PROP_REPLICATIONSOURCE));\n } else if (name === 'mediacenterGroups') {\n columns.push(new ListItem('GROUP', RestConstants.AUTHORITY_DISPLAYNAME));\n columns.push(new ListItem('GROUP', RestConstants.AUTHORITY_GROUPTYPE));\n } else if (name === 'searchCollections') {\n columns.push(new ListItem('COLLECTION', 'title'));\n columns.push(new ListItem('COLLECTION', 'info'));\n columns.push(new ListItem('COLLECTION', 'scope'));\n }\n }\n columns.map((c) => {\n const key = c.type + '.' + c.name;\n if (c.type === 'NODE' && translate.instant(key) === key) {\n c.label = mdsSet.widgets.filter((w: any) => w.id === c.name)?.[0]?.caption;\n }\n return c;\n });\n return columns;\n }\n\n /**\n * Finds the appropriate widget with the id, but will not check any widget conditions\n * @param cid\n * @param template\n * @param widgets\n */\n static getWidget(cid: string, template: string | undefined | null, widgets: MdsWidget[]) {\n if (widgets == null) {\n console.warn('Could not iterate widget ' + cid + ': no widgets data provided');\n return null;\n }\n for (let w of widgets) {\n if (w.id == cid) {\n if (template === undefined || w.template === template) {\n return w;\n }\n }\n }\n return null;\n }\n\n constructor(private authentication: AuthenticationService) {}\n\n /**\n * Same as getWidget, but will also check the widget conditions\n * @param connector\n * @param properties\n * @param id\n * @param template\n * @param widgets\n */\n async getWidgetWithCondition(\n properties: any,\n id: string,\n template: string = null,\n widgets: any,\n ) {\n for (let w of widgets) {\n if (w.id == id) {\n if (\n (template == null || w.template == template) &&\n (await this.isWidgetConditionTrue(w, properties))\n ) {\n return w;\n }\n }\n }\n return null;\n }\n\n async isWidgetConditionTrue(widget: any, properties: any) {\n if (!widget.condition) return true;\n let condition = widget.condition;\n if (condition.type == 'PROPERTY' && properties) {\n if (\n (!properties[condition.value] && !condition.negate) ||\n (properties[condition.value] && condition.negate)\n ) {\n return false;\n }\n }\n if (condition.type == 'TOOLPERMISSION') {\n let tp = await this.authentication.hasToolpermission(condition.value);\n if (tp == condition.negate) {\n return false;\n }\n }\n return true;\n }\n /**\n * Find a template by id in the given mds\n */\n static findTemplate(mds: MdsDefinition, id: string) {\n return (\n mds.views as Array<\n ArrayElement<MdsDefinition['views']> | ArrayElement<MdsDefinition['views']>\n >\n ).find((v) => v.id === id);\n }\n /**\n * Returns all widgets used by the given template\n */\n static getUsedWidgets(mds: MdsDefinition, template: string = null): any[] {\n const used: any = [];\n const templateData = MdsHelperService.findTemplate(mds, template);\n for (const w of mds.widgets) {\n if (\n templateData.html.indexOf('<' + w.id) !== -1 &&\n !used.find((w2: any) => w2.id === w.id)\n ) {\n used.push(w);\n }\n }\n return used;\n }\n}\n\ntype ArrayElement<ArrayType extends readonly unknown[]> =\n ArrayType extends readonly (infer ElementType)[] ? ElementType : never;\n","import { NgModule } from '@angular/core';\nimport { MdsHelperService } from './mds-helper.service';\n\n@NgModule({\n declarations: [],\n providers: [MdsHelperService],\n})\nexport class MdsModule {}\n","import { Node } from 'ngx-edu-sharing-api';\nimport { DropAction } from '../../types/drag-drop';\n\nexport interface DragDataLegacy {\n event?: DragEvent;\n nodes?: Node[];\n dropAction?: DropAction;\n}\nexport type DropActionLegacy = 'copy' | 'move' | 'link';\n\nexport interface DropDataLegacy extends DragDataLegacy {\n target: DragNodeTarget;\n}\n\nexport type DragNodeTarget = Node | 'HOME';\n\nexport const dragNodesTransferType = 'application/nodes';\n\nconst storageKey = 'app-drag-nodes';\n\nexport function readDraggedNodes(): Node[] {\n const json = window.localStorage.getItem(storageKey);\n return JSON.parse(json);\n}\n\nexport function saveDraggedNodes(nodes: Node[]): void {\n const json = JSON.stringify(nodes);\n window.localStorage.setItem(storageKey, json);\n}\n\nexport function clearDraggedNodes(): void {\n window.localStorage.removeItem(storageKey);\n}\n","import {\n Directive,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { Node } from 'ngx-edu-sharing-api';\nimport { clearDraggedNodes, dragNodesTransferType, saveDraggedNodes } from './drag-nodes';\n\n/**\n * Handle dragging and dropping of node elements.\n *\n * Use in combination with `NodesDropTargetDirective`.\n *\n * When nodes that set this directive are dragged, we save information about\n * these nodes that can be used by `NodesDropTargetDirective`.\n */\n@Directive({\n selector: '[esNodesDragSource]',\n standalone: false,\n})\nexport class NodesDragSourceDirective implements OnChanges {\n /**\n * The nodes to be dragged.\n *\n * When not set, this directive is effectively disabled.\n */\n @Input('esNodesDragSource') nodes?: Node[];\n\n /**\n * Triggered when processing the dragstart event.\n *\n * Changes to `nodes` performed by event handlers of `nodesDragStart` will\n * be taken into account for the drag operation.\n */\n @Output() nodesDragStart = new EventEmitter<DragEvent>(false);\n /**\n * Triggered when processing the dragend event.\n */\n @Output() nodesDragEnd = new EventEmitter<DragEvent>();\n\n constructor(private elementRef: ElementRef<Element>) {}\n\n ngOnChanges(changes: SimpleChanges) {\n // Set the `draggable` attribute when this directive is active.\n if (changes.nodes) {\n if (!!changes.nodes.currentValue !== !!changes.nodes.previousValue) {\n this.elementRef.nativeElement.setAttribute('draggable', (!!this.nodes).toString());\n }\n }\n }\n\n @HostListener('dragstart', ['$event']) onDragStart(event: DragEvent) {\n if (!this.nodes) {\n return;\n }\n this.nodesDragStart.emit(event);\n // Use the transfer-data type to identify a node-drag operation.\n event.dataTransfer.setData(dragNodesTransferType, '');\n // Chrome doesn't provide drag transfer data to dragover event listeners\n // for security reasons, so we provide the data via localStorage.\n //\n // Wait for updates by event handlers of `nodesDragStart` to propagate.\n setTimeout(() => {\n saveDraggedNodes(this.nodes);\n });\n }\n\n @HostListener('dragend', ['$event']) onDragEnd(event: DragEvent) {\n if (!this.nodes) {\n return;\n }\n this.nodesDragEnd.emit(event);\n clearDraggedNodes();\n }\n}\n","export abstract class Toast {\n abstract toast(message: string, translationParameters?: any): void;\n\n abstract error(errorObject: any, message?: string): void;\n}\n","import { Injectable, NgZone } from '@angular/core';\nimport * as rxjs from 'rxjs';\nimport { BehaviorSubject } from 'rxjs';\nimport { distinctUntilChanged, map, pairwise } from 'rxjs/operators';\nimport { CanDrop, DropAction } from '../types/drag-drop';\nimport { NodesDropTargetDirective } from '../directives/drag-nodes/nodes-drop-target.directive';\nimport { Node } from 'ngx-edu-sharing-api';\nimport { Toast } from './abstract/toast.service';\nimport { UIService } from './ui.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NodesDragDropService {\n /** The node(s) currently being dragged. */\n private draggedNodesSubject = new BehaviorSubject<Node[]>(null);\n /** The drop target that something is currently dragged above. */\n private dropTargetSubject = new BehaviorSubject<NodesDropTargetDirective>(null);\n /** Whether the current drop target allows dropping the dragged node(s). */\n private canDropSubject = new BehaviorSubject<CanDrop | null>(null);\n /** A target being hovered with the cursor. Does not mean anything is dragged yet. */\n private hoveredTargetSubject = new BehaviorSubject<NodesDropTargetDirective>(null);\n /** Current drop action based on pressed modifier keys. */\n private dropActionSubject = new BehaviorSubject<DropAction>('move');\n /** The current cursor style. */\n private curserSubject = new BehaviorSubject<string>(null);\n\n set draggedNodes(nodes: Node[]) {\n this.draggedNodesSubject.next(nodes);\n }\n\n get canDrop() {\n return this.canDropSubject.value;\n }\n\n constructor(private ngZone: NgZone, private toast: Toast, private uiService: UIService) {\n this.registerDropTarget();\n this.registerCanDrop();\n this.registerDropActionSubject();\n this.registerCursor();\n this.registerActiveDropTargetStyle();\n // this.draggedNodesSubject.subscribe((draggedNodes) =>\n // console.log('draggedNodes', draggedNodes),\n // );\n // this.dropTargetSubject.subscribe((dropTarget) => console.log('dropTarget', dropTarget));\n // this.canDropSubject.subscribe((canDrop) => console.log('canDrop', canDrop));\n }\n\n /** Call when the cursor enters a possible drop target. Runs outside ngZone. */\n onMouseEnter(target: NodesDropTargetDirective) {\n this.hoveredTargetSubject.next(target);\n }\n\n /** Call when the cursor leaves a possible drop target. Runs outside ngZone. */\n onMouseLeave(target: NodesDropTargetDirective) {\n if (this.hoveredTargetSubject.value === target) {\n this.hoveredTargetSubject.next(null);\n }\n }\n\n onDropped(nodes: Node[]) {\n if (this.canDrop?.accept) {\n this.dropTargetSubject.value?.nodeDropped.emit({\n draggedNodes: nodes,\n action: this.dropActionSubject.value,\n target: this.dropTargetSubject.value.target,\n });\n } else if (this.canDrop?.denyReason) {\n this.toast.error(null, this.canDrop.denyReason);\n }\n }\n\n private registerDropTarget() {\n rxjs.combineLatest([this.draggedNodesSubject, this.hoveredTargetSubject])\n .pipe(\n map(([draggedNodes, hoveredNode]) => draggedNodes && hoveredNode),\n distinctUntilChanged(),\n )\n .subscribe((target) => {\n this.ngZone.run(() => {\n this.dropTargetSubject.next(target);\n });\n });\n }\n\n private registerCanDrop() {\n rxjs.combineLatest([this.dropTargetSubject, this.dropActionSubject])\n .pipe(\n map(([dropTarget, dropAction]) =>\n dropTarget?.canDropNodes({\n draggedNodes: this.draggedNodesSubject.value,\n action: dropAction,\n target: dropTarget.target,\n }),\n ),\n // FIXME: this won't filter equal objects\n distinctUntilChanged(),\n )\n .subscribe((canDrop) => {\n this.ngZone.run(() => this.canDropSubject.next(canDrop));\n });\n }\n\n private registerCursor() {\n rxjs.combineLatest([\n this.draggedNodesSubject,\n this.canDropSubject,\n this.dropActionSubject,\n ]).subscribe(([draggedNodes, canDrop, dropAction]) => {\n this.curserSubject.next(this.getCursor(draggedNodes, canDrop, dropAction));\n });\n let style: HTMLStyleElement;\n this.curserSubject.subscribe((cursor) => {\n if (cursor && !style) {\n style = document.createElement('style');\n document.body.appendChild(style);\n } else if (style && !cursor) {\n document.body.removeChild(style);\n style = null;\n }\n if (cursor) {\n style.innerHTML = `* {cursor: ${cursor} !important; }`;\n }\n });\n }\n\n private registerActiveDropTargetStyle() {\n rxjs.combineLatest([this.dropTargetSubject, this.canDropSubject, this.dropActionSubject])\n .pipe(pairwise())\n .subscribe(([[previous], [current, canDrop, action]]) => {\n // console.log('can drop', canDrop);\n previous?._setActiveDropTarget(null);\n current?._setActiveDropTarget({ canDrop, action });\n });\n }\n\n private registerDropActionSubject() {\n this.uiService\n .observeCtrlOrCmdKeyPressedOutsideZone()\n .pipe(map((ctrlOrCmdPressed) => this.getDropAction(ctrlOrCmdPressed)))\n .subscribe((dropAction) =>\n this.ngZone.run(() => this.dropActionSubject.next(dropAction)),\n );\n }\n\n private getDropAction(ctrlOrCmdPressed: boolean): DropAction {\n if (ctrlOrCmdPressed) {\n return 'copy';\n } else {\n return 'move';\n }\n }\n\n private getCursor(draggedNodes: Node[], canDrop: CanDrop, dropAction: DropAction): string {\n if (!draggedNodes) {\n return null;\n } else if (canDrop?.denyExplicit) {\n return 'no-drop';\n } else if (dropAction === 'copy') {\n return 'copy';\n } else {\n return 'grabbing';\n }\n }\n}\n","import { CdkDrag } from '@angular/cdk/drag-drop';\nimport { Directive } from '@angular/core';\nimport { Node } from 'ngx-edu-sharing-api';\nimport { NodesDragDropService } from '../../services/nodes-drag-drop.service';\n\n/**\n * A draggable node.\n *\n * Use in combination with `cdkDrag`, setting `cdkDragData` to the array of nodes to be dragged.\n */\n@Directive({\n selector: '[esNodesDrag]',\n standalone: false,\n})\nexport class NodesDragDirective {\n constructor(private cdkDrag: CdkDrag<Node[]>, private nodesDragDrop: NodesDragDropService) {\n this.cdkDrag.started.subscribe((event) => {\n this.nodesDragDrop.draggedNodes = event.source.data;\n // Position the preview element (the one being dragged around) next to the cursor to\n // avoid covering possible drop targets with the preview.\n event.source._dragRef['_pickupPositionInElement'] = { x: 0, y: 0 };\n });\n this.cdkDrag.released.subscribe(() => {\n if (this.nodesDragDrop.canDrop?.accept) {\n this.inhibitPreviewAnimation();\n }\n });\n this.cdkDrag.dropped.subscribe(() => {\n this.nodesDragDrop.onDropped(this.cdkDrag.data);\n this.nodesDragDrop.draggedNodes = null;\n });\n }\n\n private inhibitPreviewAnimation() {\n const style = document.createElement('style');\n document.body.appendChild(style);\n style.innerHTML = `.cdk-drag-preview { transition: none !important; }`;\n // Don't need to go outside ng zone because `cdkDrag.released` already runs outside the\n // zone.\n setTimeout(() => {\n document.body.removeChild(style);\n });\n }\n}\n","import {\n Directive,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnDestroy,\n Output,\n} from '@angular/core';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { CanDrop, DragData, DropTargetState } from '../../types/drag-drop';\nimport { NodesDragDropService } from '../../services/nodes-drag-drop.service';\n\nconst ACTIVE_DROP_TARGET_ACCEPT_CLASS = 'es-nodes-active-drop-target-accept';\nconst ACTIVE_DROP_TARGET_DENY_CLASS = 'es-nodes-active-drop-target-deny';\n\n@Directive({\n selector: '[esNodesDropTarget]',\n exportAs: 'esNodesDropTarget',\n standalone: false,\n})\nexport class NodesDropTargetDirective<T = unknown> implements OnDestroy {\n @Input('esNodesDropTarget') target: T;\n @Input() canDropNodes: (dragData: DragData<T>) => CanDrop;\n @Output() nodeDropped = new EventEmitter<DragData<T>>();\n\n get active() {\n return this.activeDropTargetSubject.value;\n }\n\n private activeDropTargetSubject = new BehaviorSubject<DropTargetState | null>(null);\n private destroyed = new Subject<void>();\n\n constructor(\n private ngZone: NgZone,\n private elementRef: ElementRef<HTMLElement>,\n private nodesDragDrop: NodesDragDropService,\n ) {\n this.registerMouseEnterLeave();\n this.registerActiveDropTarget();\n }\n\n ngOnDestroy(): void {\n this.destroyed.next();\n this.destroyed.complete();\n }\n\n _setActiveDropTarget(value: DropTargetState | null) {\n this.activeDropTargetSubject.next(value);\n }\n\n private registerMouseEnterLeave() {\n this.ngZone.runOutsideAngular(() => {\n this.elementRef.nativeElement.addEventListener('mouseenter', () =>\n this.nodesDragDrop.onMouseEnter(this),\n );\n this.elementRef.nativeElement.addEventListener('mouseleave', () =>\n this.nodesDragDrop.onMouseLeave(this),\n );\n // Firefox does not fire a mouseleave event when the element is removed from the DOM\n // while being hovered. When an element is dragged, it will be replaced with a\n // placeholder. If the element was also a drop target, we would think that we are still\n // hovering the element.\n observeRemovedFromParent(this.elementRef.nativeElement)\n .pipe(takeUntil(this.destroyed))\n .subscribe(() => this.nodesDragDrop.onMouseLeave(this));\n });\n }\n\n private registerActiveDropTarget() {\n this.activeDropTargetSubject\n .pipe(takeUntil(this.destroyed))\n .subscribe((dropTargetState) => {\n const canDrop = dropTargetState?.canDrop;\n const classList = this.elementRef.nativeElement.classList;\n classList.remove(ACTIVE_DROP_TARGET_ACCEPT_CLASS, ACTIVE_DROP_TARGET_DENY_CLASS);\n if (canDrop?.accept) {\n classList.add(ACTIVE_DROP_TARGET_ACCEPT_CLASS);\n } else if (canDrop?.denyExplicit) {\n classList.add(ACTIVE_DROP_TARGET_DENY_CLASS);\n }\n });\n }\n}\n\nfunction observeRemovedFromParent(element: HTMLElement): Observable<void> {\n return new Observable((subscriber) => {\n const observer = new MutationObserver((event) => {\n for (const mutation of event) {\n // @ts-ignore\n if ([...mutation.removedNodes].includes(element)) {\n subscriber.next();\n }\n }\n });\n // Wait for `element` to be attached to the DOM.\n let timeout = setTimeout(() => {\n timeout = null;\n observer.observe(element.parentNode, { childList: true, subtree: false });\n });\n return () => {\n // In case the element was destroyed before we attached the mutation observer, we cancel\n // the observable returned by this function and don't attach the mutation observer.\n if (timeout !== null) {\n // TODO: Investigate elements that trigger the following warning.\n //\n // console.warn(\n // 'Possible performance leak: the element got destroyed before it could be added to the DOM.',\n // element,\n // );\n clearTimeout(timeout);\n }\n observer.disconnect();\n };\n });\n}\n","export enum DurationFormat {\n /**\n * format with colon, i.e. H:MM:SS\n */\n Colon = 'colon',\n /**\n * format with Hh Mm Ss\n */\n Hms = 'hms',\n}\nexport class DurationHelper {\n public static getDurationInSeconds(value: string): number {\n // PT1H5M23S\n // or 00:00:00\n // or 00:00\n if (!value) return 0;\n try {\n let result = value.split(':');\n if (result.length == 3) {\n let h = result[0] ? parseInt(result[0]) : 0;\n let m = result[1] ? parseInt(result[1]) : 0;\n let s = result[2] ? parseInt(result[2]) : 0;\n let time = h * 60 * 60 + m * 60 + s;\n return time;\n }\n if (result.length == 2) {\n let m = result[0] ? parseInt(result[0]) : 0;\n let s = result[1] ? parseInt(result[1]) : 0;\n let time = m * 60 + s;\n return time;\n }\n } catch (e) {\n return value as unknown as number;\n }\n try {\n let regexp = new RegExp('PT(\\\\d+H)?(\\\\d+M)?(\\\\d+S)?');\n let result = regexp.exec(value);\n let h = result[1] ? parseInt(result[1]) : 0;\n let m = result[2] ? parseInt(result[2]) : 0;\n let s = result[3] ? parseInt(result[3]) : 0;\n let time = h * 60 * 60 + m * 60 + s;\n return time;\n } catch (e) {\n return value as unknown as number;\n }\n }\n public static getDurationFormatted(\n duration: string,\n format: DurationFormat = DurationFormat.Colon,\n ): string {\n let time = DurationHelper.getDurationInSeconds(duration);\n if (!time) return '';\n let h = Math.floor(time / 60 / 60);\n let m = Math.floor(Math.floor(time / 60) % 60);\n let s = Math.floor(time % 60);\n let options: Intl.NumberFormatOptions = {\n minimumIntegerDigits: 2,\n maximumFractionDigits: 0,\n };\n let numberFormat = new Intl.NumberFormat([], options);\n let str = '';\n /*\n if(h>0) {\n str = format.format(h) + \"h\";\n }\n if(m>0) {\n if (str)\n str += \" \";\n str += format.format(m) + \"m\";\n }\n if(s>0) {\n if (str)\n str += \" \";\n str += format.format(s) + \"s\";\n }\n */\n if (format === DurationFormat.Colon) {\n str =\n numberFormat.format(h) +\n ':' +\n numberFormat.format(m) +\n ':' +\n numberFormat.format(s);\n } else {\n if (h > 0) {\n str += h + 'h';\n }\n if (m > 0) {\n str += ' ' + m + 'm';\n }\n if (s > 0) {\n str += ' ' + s + 's';\n }\n str = str.trim();\n }\n return str;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DurationFormat, DurationHelper } from '../util/duration-helper';\n\n@Pipe({\n name: 'formatDuration',\n standalone: false,\n})\nexport class FormatDurationPipe implements PipeTransform {\n transform(\n value: string,\n args = {\n format: DurationFormat.Hms,\n },\n ): string {\n return DurationHelper.getDurationFormatted(value, args.format);\n }\n}\n","import { Input, Type, Directive } from '@angular/core';\nimport { Person } from 'ngx-edu-sharing-api';\nimport { BehaviorSubject } from 'rxjs';\nimport { Node, ProposalNode, Group, Statistics } from 'ngx-edu-sharing-api';\nimport { ListItem } from '../types/list-item';\n\n@Directive()\nexport class ListWidget {\n @Input()\n get node(): Node | ProposalNode | Group | Person | Statistics {\n return this.nodeSubject.value;\n }\n set node(value: Node | ProposalNode | Group | Person | Statistics) {\n this.nodeSubject.next(value);\n }\n protected readonly nodeSubject = new BehaviorSubject<\n Node | ProposalNode | Group | Person | Statistics\n >(null); // node (or group/user)\n\n @Input()\n get item(): ListItem {\n return this.itemSubject.value;\n }\n set item(value: ListItem) {\n this.itemSubject.next(value);\n }\n protected readonly itemSubject = new BehaviorSubject<ListItem>(null);\n\n /**\n * Provide a label for non-obvious fields that describes the field the given value belongs to.\n *\n * The label is included in a tooltip and made available for a11y technologies.\n *\n * Useful when the value is displayed without context.\n *\n * Other tooltips might be added even with this input set to `false`.\n */\n @Input()\n get provideLabel() {\n return this.provideLabelSubject.value;\n }\n set provideLabel(value) {\n this.provideLabelSubject.next(value);\n }\n protected readonly provideLabelSubject = new BehaviorSubject(false);\n\n constructor() {}\n}\n\nexport type ListWidgetClass = {\n supportedItems: ListItem[];\n} & Type<ListWidget>;\n","export class AccessibilitySettings {\n toastMode: 'important' | 'all' = 'all';\n toastDuration: ToastDuration = ToastDuration.Seconds_5;\n contrastMode = false;\n indicatorIcons = true;\n}\nexport enum ToastDuration {\n Seconds_3 = 3,\n Seconds_5 = 5,\n Seconds_8 = 8,\n Seconds_15 = 15,\n Seconds_30 = 30,\n Seconds_60 = 60,\n Infinite = null,\n}\n","import { Injectable } from '@angular/core';\nimport * as rxjs from 'rxjs';\nimport { Observable } from 'rxjs';\nimport { first, map } from 'rxjs/operators';\nimport { AccessibilitySettings } from '../types/accessibillity';\nimport { SessionStorageService } from 'ngx-edu-sharing-api';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AccessibilityService {\n private static readonly STORAGE_PREFIX = 'accessibility_';\n\n constructor(private storage: SessionStorageService) {}\n\n async set(accessibilitySettings: Partial<AccessibilitySettings>): Promise<void> {\n const currentValues = await this.observeAll().pipe(first()).toPromise();\n const values = Object.entries(accessibilitySettings)\n .filter(\n ([key, value]) =>\n // check if value has been modified\n (currentValues as any)[key] !== value,\n )\n .reduce((acc, [key, value]) => {\n acc[AccessibilityService.STORAGE_PREFIX + key] = value;\n return acc;\n }, {} as { [key: string]: any });\n if (Object.keys(values).length > 0) {\n return this.storage.setValues(values);\n }\n }\n\n observe<K extends keyof AccessibilitySettings>(key: K): Observable<AccessibilitySettings[K]>;\n observe<K extends keyof AccessibilitySettings>(\n keys: K[],\n ): Observable<Pick<AccessibilitySettings, K>>;\n observe(): Observable<AccessibilitySettings>;\n observe<K extends keyof AccessibilitySettings>(\n keyOrKeys?: K | K[],\n ): Observable<AccessibilitySettings[K] | Pick<AccessibilitySettings, K>> {\n if (typeof keyOrKeys === 'string') {\n return this.observeSingle(keyOrKeys);\n } else if (Array.isArray(keyOrKeys)) {\n return this.observeMultiple(keyOrKeys);\n } else {\n return this.observeAll();\n }\n }\n\n private observeSingle<K extends keyof AccessibilitySettings>(\n key: K,\n ): Observable<AccessibilitySettings[K]> {\n const defaultValues = new AccessibilitySettings();\n return this.storage.observe(AccessibilityService.STORAGE_PREFIX + key, defaultValues[key]);\n }\n\n private observeMultiple<K extends keyof AccessibilitySettings>(\n keys: K[],\n ): Observable<Pick<AccessibilitySettings, K>> {\n const defaultValues = new AccessibilitySettings();\n return combineLatest(\n keys.reduce((acc, key) => {\n acc[key] = this.storage.observe(\n AccessibilityService.STORAGE_PREFIX + key,\n defaultValues[key],\n );\n return acc;\n }, {} as { [key in keyof AccessibilitySettings]: Observable<AccessibilitySettings[key]> }),\n );\n }\n\n private observeAll(): Observable<AccessibilitySettings> {\n return this.observeMultiple(\n Object.keys(new AccessibilitySettings()) as Array<keyof AccessibilitySettings>,\n );\n }\n}\n\n/**\n * Rxjs.combineLatest on objects instead of arrays.\n *\n * This is a standard function in Rxjs 7, but we wrap it here for Rxjs 6.\n */\nfunction combineLatest<T, K extends keyof T>(sources: {\n [key in K]: Observable<T[key]>;\n}): Observable<T> {\n return rxjs\n .combineLatest(\n Object.entries(sources).map(([key, source]) =>\n (source as Observable<T[K]>).pipe(map((result) => ({ key, result }))),\n ),\n )\n .pipe(\n map((results) =>\n results.reduce((acc, { key, result }) => {\n acc[key as K] = result;\n return acc;\n }, {} as T),\n ),\n );\n}\n","import { Component } from '@angular/core';\nimport { ListItem } from '../../types/list-item';\nimport { ListWidget } from '../list-widget';\nimport { NodeHelperService } from '../../services/node-helper.service';\nimport { AccessibilityService } from '../../services/accessibility.service';\n\n@Component({\n selector: 'es-list-collection-info',\n templateUrl: './list-collection-info.component.html',\n styleUrls: ['./list-collection-info.component.scss'],\n standalone: false,\n})\nexport class ListCollectionInfoComponent extends ListWidget {\n static supportedItems = [\n new ListItem('COLLECTION', 'info'),\n new ListItem('COLLECTION', 'scope'),\n ];\n\n readonly indicatorIcons$;\n\n constructor(private accessibility: AccessibilityService, public nodeHelper: NodeHelperService) {\n super();\n this.indicatorIcons$ = this.accessibility.observe('indicatorIcons');\n }\n}\n","<ng-container [ngSwitch]=\"item.name\">\n <ng-container *ngSwitchCase=\"'info'\">\n <ng-container *ngIf=\"indicatorIcons$ | async; else textRepresentation\">\n <i\n esIcon=\"layers\"\n [altText]=\"'COLLECTION.INFO_REFERENCES_MULTI' | translate\"\n [matTooltip]=\"'COLLECTION.INFO_REFERENCES_MULTI' | translate\"\n ></i>\n {{ $any(node).collection?.childCollectionsCount }}\n <i\n esIcon=\"insert_drive_file\"\n [altText]=\"'collections_content' | translate\"\n [matTooltip]=\"'collections_content' | translate\"\n ></i>\n {{ $any(node).collection?.childReferencesCount }}\n </ng-container>\n <ng-template #textRepresentation>\n <div class=\"rows\">\n <p>\n {{ 'COLLECTION.INFO_REFERENCES_MULTI' | translate }}:\n {{ $any(node).collection?.childCollectionsCount }}\n </p>\n <p>\n {{ 'collections_content' | translate }}:\n {{ $any(node).collection?.childReferencesCount }}\n </p>\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngSwitchCase=\"'scope'\">\n <i\n *ngIf=\"indicatorIcons$ | async; else textRepresentation\"\n class=\"collectionScope\"\n [esIcon]=\"nodeHelper.getCollectionScopeInfo($any(node)).icon\"\n [matTooltip]=\"\n 'COLLECTION.SCOPE.' + nodeHelper.getCollectionScopeInfo($any(node)).scopeName | translate\n \"\n [altText]=\"\n 'COLLECTION.SCOPE.' + nodeHelper.getCollectionScopeInfo($any(node)).scopeName | translate\n \"\n ></i>\n <ng-template #textRepresentation>\n {{\n 'COLLECTION.SCOPE.' + nodeHelper.getCollectionScopeInfo($any(node)).scopeName | translate\n }}\n </ng-template>\n </ng-container>\n</ng-container>\n","import { Component } from '@angular/core';\nimport { ListWidget } from '../list-widget';\nimport { ListItem } from '../../types/list-item';\nimport { StatisticsGroup } from 'ngx-edu-sharing-api';\n\n@Component({\n selector: 'es-list-counts',\n templateUrl: './list-counts.component.html',\n styleUrls: ['./list-counts.component.scss'],\n standalone: false,\n})\nexport class ListCountsComponent extends ListWidget {\n static supportedItems = [\n new ListItem('NODE', 'counts.OVERALL'),\n new ListItem('NODE', 'counts.VIEW_MATERIAL'),\n new ListItem('NODE', 'counts.VIEW_COLLECTION'),\n new ListItem('NODE', 'counts.VIEW_MATERIAL_EMBEDDED'),\n new ListItem('NODE', 'counts.VIEW_MATERIAL_PLAY_MEDIA'),\n new ListItem('NODE', 'counts.OPEN_EXTERNAL_LINK'),\n new ListItem('NODE', 'counts.DOWNLOAD_MATERIAL'),\n ];\n\n static getCountSingle(node: StatisticsGroup, id: string, group: number = null) {\n const counts = (node as any).counts;\n if (id === 'OVERALL') {\n return Object.keys(counts.counts)\n .map((c) => (group ? group : counts.counts[c]))\n .reduce((a, b) => a + b);\n }\n return (group ? group : counts.counts[id]) || 0;\n }\n static getCount(node: StatisticsGroup, id: string) {\n const counts = (node as any).counts;\n let result = this.getCountSingle(node, id);\n if (Object.keys(counts.groups)?.length > 0) {\n const i1 = id;\n if (counts.groups[i1]) {\n const i2 = Object.keys(counts.groups[i1])[0];\n if (counts.groups?.[i1]?.[i2]) {\n result = Object.keys(counts.groups?.[i1]?.[i2])\n .map(\n (group) =>\n (group || '-') +\n ': ' +\n this.getCountSingle(node, id, counts.groups?.[i1]?.[i2][group]),\n )\n .join('\\n')\n .trim();\n }\n }\n }\n return result;\n }\n\n getId() {\n return this.item.name.split('.')[1];\n }\n\n getCount() {\n return ListCountsComponent.getCount(this.node as StatisticsGroup, this.getId());\n }\n}\n","{{ getCount() }}\n","import { Component } from '@angular/core';\nimport { ListWidget } from '../list-widget';\nimport { TranslateService } from '@ngx-translate/core';\nimport * as rxjs from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\nimport { ListItem } from '../../types/list-item';\nimport { NodeHelperService } from '../../services/node-helper.service';\nimport { Node, RestConstants } from 'ngx-edu-sharing-api';\nimport { AccessibilityService } from '../../services/accessibility.service';\n\n@Component({\n selector: 'es-list-node-license',\n templateUrl: './list-node-license.component.html',\n standalone: false,\n})\nexport class ListNodeLicenseComponent extends ListWidget {\n static supportedItems = [new ListItem('NODE', RestConstants.CCM_PROP_LICENSE)];\n\n readonly licenseName$ = this.nodeSubject.pipe(\n map((node) => this.nodeHelper.getLicenseName(node as Node)),\n );\n\n readonly licenseIcon$ = this.nodeSubject.pipe(\n switchMap((node) => this.nodeHelper.getLicenseIcon(node as Node)),\n );\n\n readonly tooltip$ = rxjs.combineLatest([this.licenseName$, this.provideLabelSubject]).pipe(\n switchMap(([licenseName, provideLabel]) => {\n if (provideLabel) {\n return this.translate\n .get('NODE.ccm:commonlicense_key')\n .pipe(map((commonLicenseKey) => `${commonLicenseKey}: ${licenseName}`));\n } else {\n return rxjs.of(licenseName);\n }\n }),\n );\n\n readonly indicatorIcons$ = this.accessibility.observe('indicatorIcons');\n\n constructor(\n private accessibility: AccessibilityService,\n private nodeHelper: NodeHelperService,\n private translate: TranslateService,\n ) {\n super();\n }\n}\n","<ng-container *ngIf=\"licenseIcon$ | async as licenseIcon\">\n <span *ngIf=\"indicatorIcons$ | async; else textRepresentation\" [matTooltip]=\"tooltip$ | async\"\n ><img [alt]=\"tooltip$ | async\" [src]=\"licenseIcon\"\n /></span>\n <ng-template #textRepresentation>\n <span>{{ tooltip$ | async }}</span>\n </ng-template>\n</ng-container>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { NetworkService, Repository } from 'ngx-edu-sharing-api';\nimport { NodeHelperService } from '../services/node-helper.service';\n\n@Pipe({\n name: 'appNodeSource',\n standalone: false,\n})\nexport class NodeSourcePipe implements PipeTransform {\n private homeRepository: Repository;\n\n constructor(private nodeHelper: NodeHelperService, private networkApi: NetworkService) {\n this.networkApi.getHomeRepository().subscribe((homeRepository) => {\n this.homeRepository = homeRepository;\n });\n }\n\n transform(\n replicationSource: string,\n args: {\n mode: 'text' | 'url' | 'escaped';\n },\n ): string {\n const rawSrc = replicationSource ? replicationSource.toString().trim() : 'home';\n if (args.mode === 'text') {\n if (rawSrc === 'home') {\n // FIXME: This will fix the pipe's return value to 'home' for calls before\n // `this.homeRepository` was populated (although that doesn't seem to happen).\n return this.homeRepository?.title || 'home';\n }\n return rawSrc;\n } else if (args.mode === 'url') {\n const src = this.escape(rawSrc);\n return this.nodeHelper.getSourceIconPath(src);\n } else if (args.mode === 'escaped') {\n return this.escape(rawSrc);\n }\n return null;\n }\n\n private escape(src: string) {\n if (!src) {\n return src;\n }\n src = src.substring(src.lastIndexOf(':') + 1).toLowerCase();\n src = src.replace(/\\s/g, '_');\n src = src.replace(/\\./g, '_');\n src = src.replace(/\\//g, '_');\n return src;\n }\n}\n","import { Component } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport * as rxjs from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\nimport { ListWidget } from '../list-widget';\nimport { NodeSourcePipe } from '../node-source.pipe';\nimport { AccessibilityService } from '../../services/accessibility.service';\nimport { NetworkService, Node, RestConstants } from 'ngx-edu-sharing-api';\nimport { ListItem } from '../../types/list-item';\n\n@Component({\n selector: 'es-list-node-replication-source',\n templateUrl: './list-node-replication-source.component.html',\n providers: [NodeSourcePipe],\n standalone: false,\n})\nexport class ListNodeReplicationSourceComponent extends ListWidget {\n static supportedItems = [new ListItem('NODE', RestConstants.CCM_PROP_REPLICATIONSOURCE)];\n\n readonly replicationSource$ = this.nodeSubject.pipe(\n map((node) => (node as Node).properties['ccm:replicationsource']?.[0]),\n );\n\n readonly text$ = this.replicationSource$.pipe(\n // Wait for repositories to be available to `restNetwork` since `nodeSource.transform` fails\n // if it isn't.\n switchMap((replicationSource) =>\n this.networkService.getRepositories().pipe(map(() => replicationSource)),\n ),\n switchMap((replicationSource) =>\n this.translate.get(\n 'REPOSITORIES.' + this.nodeSource.transform(replicationSource, { mode: 'escaped' }),\n { fallback: this.nodeSource.transform(replicationSource, { mode: 'text' }) },\n ),\n ),\n );\n\n readonly tooltip$ = rxjs.combineLatest([this.text$, this.provideLabelSubject]).pipe(\n switchMap(([text, provideLabel]) => {\n if (provideLabel) {\n return this.translate\n .get('NODE.ccm:replicationsource')\n .pipe(map((replicationSource) => `${replicationSource}: ${text}`));\n } else {\n return rxjs.of(text);\n }\n }),\n );\n\n readonly indicatorIcons$ = this.accessibility.observe('indicatorIcons');\n\n constructor(\n private accessibility: AccessibilityService,\n\n private nodeSource: NodeSourcePipe,\n private translate: TranslateService,\n private networkService: NetworkService,\n ) {\n super();\n }\n}\n","<span *ngIf=\"indicatorIcons$ | async; else textRepresentation\" [matTooltip]=\"tooltip$ | async\">\n <img\n [src]=\"replicationSource$ | async | appNodeSource : { mode: 'url' }\"\n (error)=\"$any($event.target).style.display = 'none'\"\n [alt]=\"tooltip$ | async\"\n />\n</span>\n\n<ng-template #textRepresentation>\n <span>{{ tooltip$ | async }}</span>\n</ng-template>\n","import { Component } from '@angular/core';\nimport { ListWidget } from '../list-widget';\nimport { ListItem } from '../../types/list-item';\nimport { NodeHelperService } from '../../services/node-helper.service';\nimport { Node, RestConstants } from 'ngx-edu-sharing-api';\n\n@Component({\n selector: 'es-list-node-workflow',\n templateUrl: './list-node-workflow.component.html',\n standalone: false,\n})\nexport class ListNodeWorkflowComponent extends ListWidget {\n static supportedItems = [new ListItem('NODE', RestConstants.CCM_PROP_WF_STATUS)];\n\n constructor(private nodeHelper: NodeHelperService) {\n super();\n }\n\n getWorkflowStatus() {\n return this.nodeHelper.getWorkflowStatus(this.node as Node).current;\n }\n}\n","<div class=\"workflowStatus\" [style.background-color]=\"getWorkflowStatus()?.color\">\n {{ 'WORKFLOW.' + getWorkflowStatus()?.id | translate }}\n</div>\n","import { ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport * as Constants from 'ngx-edu-sharing-api';\nimport { MdsService, Node, Organization, ProposalNode, RestConstants } from 'ngx-edu-sharing-api';\nimport { BehaviorSubject, merge } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport { ListItem } from '../../types/list-item';\nimport { ListWidget } from '../list-widget';\nimport { NodeHelperService } from '../../services/node-helper.service';\nimport { MdsHelperService } from '../../mds/mds-helper.service';\n\n@Component({\n selector: 'es-list-text',\n templateUrl: './list-text.component.html',\n styleUrls: ['./list-text.component.scss'],\n standalone: false,\n})\nexport class ListTextComponent extends ListWidget implements OnInit {\n static supportedItems = [\n new ListItem('NODE', '*'),\n new ListItem('NODE_PROPOSAL', '*'),\n new ListItem('COLLECTION', '*'),\n new ListItem('ORG', '*'),\n new ListItem('GROUP', '*'),\n new ListItem('USER', '*'),\n ];\n readonly DATE_FIELDS = RestConstants.DATE_FIELDS;\n readonly VCARD_FIELDS = RestConstants.getAllVCardFields();\n displayName$ = new BehaviorSubject<string>(null);\n\n constructor(\n private nodeHelper: NodeHelperService,\n private mds: MdsService,\n private changeDetectorRef: ChangeDetectorRef,\n ) {\n super();\n }\n\n async ngOnInit() {\n merge([this.nodeSubject, this.itemSubject])\n .pipe(switchMap(() => this.updateDisplayname()))\n .subscribe((displayName) => {});\n }\n getNode() {\n if (this.item.type === 'NODE_PROPOSAL') {\n return (this.node as ProposalNode).proposal || this.node;\n } else if ((this.node as Node).type === RestConstants.CCM_TYPE_COLLECTION_PROPOSAL) {\n return (this.node as Node).relations?.Original ?? this.node;\n }\n return this.node;\n }\n\n isUserProfileAttribute(attribute: string) {\n return (\n [\n RestConstants.AUTHORITY_FIRSTNAME,\n RestConstants.AUTHORITY_LASTNAME,\n RestConstants.AUTHORITY_EMAIL,\n ].indexOf(attribute) !== -1\n );\n }\n getWorkflowStatus() {\n return this.nodeHelper.getWorkflowStatus(this.node as Node).current;\n }\n\n getI18n(item: ListItem) {\n return (item.type === 'NODE_PROPOSAL' ? 'NODE_PROPOSAL' : 'NODE') + '.' + item.name;\n }\n\n isDangerousGroup() {\n return (\n (this.node as Organization).authorityName ===\n RestConstants.GROUP_ALFRESCO_ADMINISTRATORS\n );\n }\n\n private async updateDisplayname() {\n const node = this.getNode() as Node;\n if (!node.properties) {\n this.displayName$.next('');\n return;\n }\n this.displayName$.next(\n node.properties[this.item.name + '_DISPLAYNAME']?.length > 0\n ? node.properties[this.item.name + '_DISPLAYNAME'].join(', ')\n : node.properties[this.item.name]?.join(', '),\n );\n\n const mds = await this.mds\n .getMetadataSet({\n repository: node.ref?.repo || Constants.HOME_REPOSITORY,\n metadataSet: node.metadataset || Constants.DEFAULT,\n })\n .toPromise();\n const widget = MdsHelperService.getWidget(this.item.name, null, mds.widgets);\n if (widget?.values) {\n const i18n = node.properties[this.item.name]\n ?.map((prop) => widget.values.filter((v) => v.id === prop)?.[0]?.caption)\n .filter((cap) => !!cap);\n if (i18n) {\n this.displayName$.next(i18n.join(', '));\n }\n }\n }\n}\n","<label *ngIf=\"item.config?.showLabel\">\n {{ getI18n(item) | translate }}\n</label>\n<ng-container *ngIf=\"item.type === 'ORG' || item.type === 'GROUP'\">\n <ng-container [ngSwitch]=\"item.name\">\n <span *ngSwitchCase=\"'displayName'\" [class.type-danger]=\"isDangerousGroup()\">\n {{ $any(getNode()).profile?.displayName || $any(getNode()).authorityName }}\n </span>\n <span *ngSwitchCase=\"'groupType'\">\n {{ 'PERMISSIONS.GROUP_TYPE.' + $any(getNode()).profile?.groupType | translate }}\n </span>\n <span *ngSwitchDefault>\n {{ $any(getNode())[item.name] }}\n </span>\n </ng-container>\n</ng-container>\n<ng-container *ngIf=\"item.type === 'USER'\">\n <span *ngIf=\"isUserProfileAttribute(item.name)\">\n {{ $any(getNode()).profile?.[item.name] }}\n </span>\n <span *ngIf=\"item.name === 'status'\">\n {{ 'PERMISSIONS.USER_STATUS.' + $any(getNode()).status.status | translate }}\n </span>\n <span *ngIf=\"!isUserProfileAttribute(item.name) && item.name !== 'status'\">\n {{ $any(getNode())[item.name] }}\n </span>\n</ng-container>\n<ng-container\n [ngSwitch]=\"item.name\"\n *ngIf=\"item.type === 'NODE' || item.type === 'NODE_PROPOSAL' || item.type === 'COLLECTION'\"\n>\n <span *ngSwitchCase=\"'name'\">\n {{ $any(getNode()).name }}\n </span>\n <span\n *ngSwitchCase=\"'mediatype'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ 'MEDIATYPE.' + $any(getNode()).mediatype | translate }}\n </span>\n <span *ngSwitchCase=\"'size'\" [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\">\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ $any(getNode()).size | formatSize }}\n </span>\n <span\n *ngSwitchCase=\"'dimensions'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ $any(getNode()) | NodeImageSize }}\n </span>\n <span\n *ngSwitchCase=\"'ccm:wf_status'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <es-list-node-workflow\n [item]=\"item\"\n [node]=\"node\"\n [provideLabel]=\"false\"\n ></es-list-node-workflow>\n <!--<span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ 'WORKFLOW.' + getWorkflowStatus().id | translate }}-->\n </span>\n <span\n *ngSwitchCase=\"'cm:creator'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ $any(getNode()).createdBy | nodePersonName }}\n </span>\n <span\n *ngSwitchCase=\"'cm:modifier'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.cm:modifier' | translate }}:</span\n >\n {{ $any(getNode()).modifiedBy | nodePersonName }}\n </span>\n <span\n *ngSwitchCase=\"'ccm:replicationsource'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.ccm:replicationsource' | translate }}:</span\n >\n {{ $any(getNode()).properties['ccm:replicationsource'] | appNodeSource : { mode: 'text' } }}\n </span>\n <span\n *ngSwitchCase=\"'ccm:commonlicense_key'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.ccm:commonlicense_key' | translate }}:</span\n >\n <ng-container *ngIf=\"$any(getNode()).properties['ccm:commonlicense_key'] as license\">\n {{\n license[0] === 'CUSTOM'\n ? $any(getNode()).properties['cclom:rights_description']\n : ('LICENSE.NAMES.' + $any(getNode()).properties['ccm:commonlicense_key']\n | translate : { fallback: $any(getNode()).properties['ccm:commonlicense_key'] })\n }}\n </ng-container>\n <ng-container *ngIf=\"!$any(getNode()).properties['ccm:commonlicense_key']\">\n {{ 'LICENSE.NAMES.NONE' | translate }}\n </ng-container>\n </span>\n <span\n *ngSwitchCase=\"'ccm:educationaltypicalagerange'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.ccm:educationaltypicalagerange' | translate }}:</span\n >\n <ng-container\n *ngIf=\"\n $any(getNode()).properties['ccm:educationaltypicalagerange_from'] ||\n $any(getNode()).properties['ccm:educationaltypicalagerange_to']\n \"\n >\n {{ $any(getNode()).properties['ccm:educationaltypicalagerange_from'] }} -\n {{ $any(getNode()).properties['ccm:educationaltypicalagerange_to'] }}\n </ng-container>\n </span>\n <span\n *ngSwitchCase=\"'cclom:duration'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.cclom:duration' | translate }}:</span\n >\n {{ $any(getNode()).properties['cclom:duration']?.[0] | formatDuration }}\n </span>\n <span\n *ngSwitchCase=\"'ccm:collection_proposal_status'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.ccm:collection_proposal_status' | translate }}:</span\n >\n <!-- use node instead of getNode() to access the raw proposal data! -->\n {{\n 'PROPOSAL_STATUS.' + $any(node).properties['ccm:collection_proposal_status']?.[0]\n | translate: { fallback: '' }\n }}\n </span>\n <span\n *ngSwitchDefault\n esCheckTextOverflow\n #text=\"esCheckTextOverflow\"\n [matTooltip]=\"\n provideLabel ? (getI18n(item) | translate) : text.hasTextOverflow() ? content.innerText : null\n \"\n #content\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n <ng-container *ngIf=\"['title', 'cm:title', 'cclom:title'].includes(item.name)\">\n {{ $any(getNode()) | nodeTitle }}\n </ng-container>\n <ng-container *ngIf=\"['name', 'cm:name'].includes(item.name)\">\n {{ $any(getNode()) | nodeTitle : { type: 'name' } }}\n </ng-container>\n <ng-container\n *ngIf=\"!['name', 'cm:name', 'title', 'cm:title', 'cclom:title'].includes(item.name)\"\n >\n <ng-container\n *ngIf=\"DATE_FIELDS.indexOf(item.name) === -1 && VCARD_FIELDS.indexOf(item.name) === -1\"\n >\n {{ displayName$ | async }}\n </ng-container>\n <ng-container *ngIf=\"DATE_FIELDS.includes(item.name)\">\n {{\n ($any(getNode()).properties[item.name + '_LONG']?.[0] || $any(getNode()).properties[item.name]?.[0])\n | formatDate: { async: true, time: true, relative: true }\n | async\n }}\n </ng-container>\n <ng-container *ngIf=\"VCARD_FIELDS.includes(item.name)\">\n {{\n $any(getNode()).properties[item.name]\n ? ($any(getNode()).properties[item.name] | vcardName)\n : ''\n }}\n </ng-container>\n </ng-container>\n </span>\n</ng-container>\n","import { ListCollectionInfoComponent } from './list-collection-info/list-collection-info.component';\nimport { ListCountsComponent } from './list-counts/list-counts.component';\nimport { ListNodeLicenseComponent } from './list-node-license/list-node-license.component';\nimport { ListNodeReplicationSourceComponent } from './list-node-replication-source/list-node-replication-source.component';\nimport { ListNodeWorkflowComponent } from './list-node-workflow/list-node-workflow.component';\nimport { ListTextComponent } from './list-text/list-text.component';\nimport { ListWidgetClass } from './list-widget';\n\nexport enum ListWidgetType {\n CollectionInfo = 'CollectionInfo',\n Text = 'Text',\n Custom = 'Custom',\n NodeLicense = 'NodeLicense',\n NodeReplicationSource = 'NodeReplicationSource',\n NodeWorkflow = 'NodeWorkflow',\n NodeCounts = 'NodeCounts',\n}\nexport const AVAILABLE_LIST_WIDGETS: {\n [widgetType in ListWidgetType]: ListWidgetClass;\n} = {\n CollectionInfo: ListCollectionInfoComponent,\n NodeLicense: ListNodeLicenseComponent,\n NodeReplicationSource: ListNodeReplicationSourceComponent,\n NodeWorkflow: ListNodeWorkflowComponent,\n NodeCounts: ListCountsComponent,\n Custom: null,\n\n // use the widgets with wildcards as last ones\n Text: ListTextComponent,\n};\n","import { Injectable, TemplateRef } from '@angular/core';\nimport { Node } from 'ngx-edu-sharing-api';\nimport { ListItemType } from '../types/list-item';\nimport { Scope } from '../types/option-item';\n\nexport type CustomField = {\n type: ListItemType;\n name: string | CustomFieldSpecialType;\n};\nexport enum CustomFieldSpecialType {\n preview,\n type,\n}\nexport type CustomFieldInfo = {\n type: ListItemType;\n /**\n * Either the property name (i.e. \"cm:name\") or a special value.\n */\n name: string | CustomFieldSpecialType;\n\n /**\n * Custom callback which should return true if the template should be used for the given item.\n */\n useCallback?: (node: Node) => boolean;\n templateRef: TemplateRef<unknown>;\n};\n\nexport type PaginationStrategy = 'infinite-scroll' | 'paginator';\n\ntype PaginationScope = Scope | 'DEFAULT';\n/**\n * this service is intended to add custom behaviour to the global tables & grid views\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class NodeEntriesGlobalService {\n private customFields: CustomFieldInfo[] = [];\n private paginationStrategy: { [key in PaginationScope]?: PaginationStrategy } = {\n [Scope.WorkspaceList]: 'infinite-scroll',\n [Scope.Search]: 'infinite-scroll',\n DEFAULT: 'infinite-scroll',\n };\n private paginatorSizeOptions: { [key in PaginationScope]?: number[] } = {\n DEFAULT: [25, 50, 75, 100],\n };\n private customCssClassProvider: (node: Node) => string;\n\n constructor() {}\n\n public setPaginationStrategy(scope: PaginationScope, strategy: PaginationStrategy) {\n this.paginationStrategy[scope] = strategy;\n }\n public getPaginationStrategy(scope: Scope) {\n return this.paginationStrategy[scope] ?? this.paginationStrategy['DEFAULT'];\n }\n public setPaginatorSizeOptions(scope: PaginationScope, size: number[]) {\n this.paginatorSizeOptions[scope] = size;\n }\n public getPaginatorSizeOptions(scope: Scope) {\n return this.paginatorSizeOptions[scope] ?? this.paginatorSizeOptions['DEFAULT'];\n }\n public getCustomCssClass(node: Node) {\n if (this.customCssClassProvider) {\n return this.customCssClassProvider(node);\n }\n return '';\n }\n\n /**\n * a custom provider for a css class based on a node\n * it should return the given css class that will be added to each node entry based on the given node\n */\n public setCustomCssClassProvider(provider: (node: Node) => string) {\n this.customCssClassProvider = provider;\n }\n public getCustomFieldTemplate(item: CustomField, node: Node) {\n return this.customFields.filter(\n (c) =>\n c.type === item.type &&\n c.name === item.name &&\n (!c.useCallback || c.useCallback(node)),\n )?.[0]?.templateRef;\n }\n\n /**\n * Registers a custom (node) attribute you want to render via the given template.\n *\n * You may also override existing attributes if you want to provide a custom view.\n */\n registerCustomFieldRendering(customFieldInfo: CustomFieldInfo) {\n this.customFields.push(customFieldInfo);\n }\n}\n","import { Component, Input, OnChanges, SimpleChanges, TemplateRef } from '@angular/core';\nimport { AVAILABLE_LIST_WIDGETS, ListWidgetType } from '../available-widgets';\nimport { ListWidget } from '../list-widget';\nimport { NodeEntriesGlobalService } from '../../node-entries/node-entries-global.service';\nimport { Node } from 'ngx-edu-sharing-api';\n\n@Component({\n selector: 'es-list-base',\n templateUrl: './list-base.component.html',\n standalone: false,\n})\nexport class ListBaseComponent extends ListWidget implements OnChanges {\n /**\n * use text only widgets (for table)\n */\n @Input() forceText = false;\n widgetType: ListWidgetType;\n customTemplate: TemplateRef<unknown>;\n constructor(private nodeEntriesGlobalService: NodeEntriesGlobalService) {\n super();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this.node && this.item) {\n this.customTemplate = this.nodeEntriesGlobalService.getCustomFieldTemplate(\n this.item,\n this.node as Node,\n );\n this.widgetType = Object.entries(AVAILABLE_LIST_WIDGETS).find(\n ([id, w]) =>\n w?.supportedItems?.filter(\n (i) =>\n i.type === this.item.type &&\n (i.name === this.item.name || i.name === '*'),\n ).length > 0,\n )?.[0] as ListWidgetType;\n if (this.customTemplate) {\n this.widgetType = ListWidgetType.Custom;\n } else if (this.forceText) {\n if (![ListWidgetType.NodeCounts, ListWidgetType.Text].includes(this.widgetType)) {\n this.widgetType = ListWidgetType.Text;\n }\n }\n }\n }\n}\n","<ng-container [ngSwitch]=\"widgetType\">\n <ng-container *ngSwitchCase=\"'Custom'\">\n <ng-container\n *ngTemplateOutlet=\"\n customTemplate;\n context: {\n item: item,\n node: node,\n provideLabel: provideLabel,\n forceText: forceText\n }\n \"\n >\n </ng-container>\n </ng-container>\n <es-list-collection-info\n *ngSwitchCase=\"'CollectionInfo'\"\n [item]=\"item\"\n [node]=\"node\"\n [provideLabel]=\"provideLabel\"\n ></es-list-collection-info>\n <es-list-text\n *ngSwitchCase=\"'Text'\"\n [item]=\"item\"\n [node]=\"node\"\n [provideLabel]=\"provideLabel\"\n ></es-list-text>\n <es-list-counts\n *ngSwitchCase=\"'NodeCounts'\"\n [item]=\"item\"\n [node]=\"node\"\n [provideLabel]=\"provideLabel\"\n ></es-list-counts>\n <es-list-node-license\n *ngSwitchCase=\"'NodeLicense'\"\n [item]=\"item\"\n [node]=\"node\"\n [provideLabel]=\"provideLabel\"\n ></es-list-node-license>\n <es-list-node-replication-source\n *ngSwitchCase=\"'NodeReplicationSource'\"\n [item]=\"item\"\n [node]=\"node\"\n [provideLabel]=\"provideLabel\"\n ></es-list-node-replication-source>\n <es-list-node-workflow\n *ngSwitchCase=\"'NodeWorkflow'\"\n [item]=\"item\"\n [node]=\"node\"\n [provideLabel]=\"provideLabel\"\n ></es-list-node-workflow>\n</ng-container>\n","import { Component, ContentChild, Input, TemplateRef } from '@angular/core';\nimport { Node } from 'ngx-edu-sharing-api';\nimport { ListItem } from '../../types/list-item';\n\n@Component({\n selector: 'es-node-row',\n templateUrl: 'node-row.component.html',\n styleUrls: ['node-row.component.scss'],\n standalone: false,\n})\nexport class NodeRowComponent {\n @ContentChild('customMetadata') customMetadataRef: TemplateRef<any>;\n @Input() node: Node;\n @Input() columns: ListItem[];\n\n constructor() {}\n}\n","<div class=\"node-row\" *ngIf=\"node\">\n <div class=\"icon-bg\">\n <img\n [src]=\"node | esNodeIcon | async\"\n [alt]=\"\n node.mediatype\n ? ('NODE.mediatype' | translate) + ': ' + ('MEDIATYPE.' + node.mediatype | translate)\n : ''\n \"\n [matTooltip]=\"\n node.mediatype\n ? ('NODE.mediatype' | translate) + ': ' + ('MEDIATYPE.' + node.mediatype | translate)\n : ''\n \"\n />\n </div>\n <div class=\"node-data\">\n <div class=\"node-data-primary\">\n <es-list-text [node]=\"node\" [item]=\"columns[0]\"> </es-list-text>\n </div>\n <div class=\"node-data-secondary\">\n <es-list-text\n *ngFor=\"let column of columns.slice(1)\"\n [node]=\"node\"\n [item]=\"column\"\n [provideLabel]=\"true\"\n ></es-list-text>\n <ng-container *ngTemplateOutlet=\"customMetadataRef; context: { node: node }\"></ng-container>\n </div>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { FormatDurationPipe } from './format-duration.pipe';\nimport { ListBaseComponent } from './list-base/list-base.component';\nimport { ListCollectionInfoComponent } from './list-collection-info/list-collection-info.component';\nimport { ListCountsComponent } from './list-counts/list-counts.component';\nimport { ListNodeLicenseComponent } from './list-node-license/list-node-license.component';\nimport { ListNodeReplicationSourceComponent } from './list-node-replication-source/list-node-replication-source.component';\nimport { ListNodeWorkflowComponent } from './list-node-workflow/list-node-workflow.component';\nimport { ListTextComponent } from './list-text/list-text.component';\nimport { NodeRowComponent } from './node-row/node-row.component';\nimport { NodeSourcePipe } from './node-source.pipe';\nimport { CommonModule } from '@angular/common';\nimport { EduSharingUiCommonModule } from '../common/edu-sharing-ui-common.module';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@NgModule({\n declarations: [\n ListBaseComponent,\n ListCollectionInfoComponent,\n ListNodeLicenseComponent,\n ListNodeReplicationSourceComponent,\n ListNodeWorkflowComponent,\n ListTextComponent,\n ListCountsComponent,\n NodeSourcePipe,\n FormatDurationPipe,\n NodeRowComponent,\n ],\n imports: [CommonModule, EduSharingUiCommonModule, MatTooltipModule, TranslateModule],\n exports: [ListBaseComponent, ListTextComponent, FormatDurationPipe, NodeRowComponent],\n})\nexport class ListItemsModule {}\n","import { Component, Input } from '@angular/core';\nimport { ListItem } from '../../types/list-item';\nimport { Node } from 'ngx-edu-sharing-api';\nimport { NodeEntriesDataType } from '../entries-model';\n\n@Component({\n selector: 'es-drag-preview',\n templateUrl: './drag-preview.component.html',\n styleUrls: ['./drag-preview.component.scss'],\n standalone: false,\n})\nexport class DragPreviewComponent<T extends NodeEntriesDataType> {\n @Input() node: Node;\n @Input() selected: T[];\n @Input() item: ListItem;\n}\n","<div class=\"drag-preview\" [matBadge]=\"selected.length > 1 ? selected.length : null\">\n <div class=\"drag-preview-icon\">\n <img *ngIf=\"node.iconURL\" [src]=\"node | esNodeIcon | async\" />\n </div>\n <es-list-text class=\"drag-preview-text\" [node]=\"node\" [item]=\"item\"></es-list-text>\n</div>\n","export abstract class AppService {\n abstract isRunningApp(): boolean;\n abstract getLanguage(): Promise<string>;\n}\n","import { ApplicationRef, Inject, Injectable, Injector, Optional } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BehaviorSubject, from, Observable, of, of as observableOf } from 'rxjs';\nimport { first, map, switchMap, tap } from 'rxjs/operators';\nimport { ConfigService, LANGUAGES, SessionStorageService } from 'ngx-edu-sharing-api';\nimport { AppService } from '../services/abstract/app.service';\nimport { I18N_CONFIG, I18nConfig } from '../types/injection-tokens';\n\n// 'none' means that only labels should be shown (for dev)\nconst DEFAULT_SUPPORTED_LANGUAGES = [\n 'de',\n 'de-informal',\n 'de-no-binnen-i',\n 'en',\n 'fr',\n 'it',\n 'none',\n];\n\n@Injectable({ providedIn: 'root' })\nexport class TranslationsService {\n private language: string;\n private languageLoaded = new BehaviorSubject(false);\n\n constructor(\n private config: ConfigService,\n private injector: Injector,\n // optional, some web components may don't have it!\n @Optional() private route: ActivatedRoute,\n @Optional() @Inject(I18N_CONFIG) private i18nConfig: I18nConfig,\n private translate: TranslateService,\n private ref: ApplicationRef,\n @Optional() private appService: AppService,\n ) {\n if (!this.i18nConfig) {\n this.i18nConfig = new I18nConfig();\n }\n if (this.i18nConfig.obeyUserProfile) {\n this.injector\n .get(SessionStorageService)\n ?.observe('language')\n .subscribe((lang) => {\n // language has changed, i.e. user has different preference\n if (this.translate.currentLang && this.translate.currentLang !== lang) {\n this.initialize().subscribe(() => {\n this.ref.tick();\n });\n }\n });\n }\n }\n\n /**\n * Determines and configures the language to use and triggers loading of translations with\n * ngx-translate.\n *\n * Call this once in the app component.\n */\n initialize(): Observable<void> {\n const supportedLanguages$ = from(\n this.config.get('supportedLanguages', DEFAULT_SUPPORTED_LANGUAGES),\n );\n if (this.appService?.isRunningApp()) {\n return supportedLanguages$.pipe(\n switchMap((supportedLanguages: string[]) =>\n this.initializeCordova(supportedLanguages),\n ),\n map(() => undefined as void),\n );\n }\n supportedLanguages$\n .pipe(\n tap((supportedLanguages) => {\n if (!supportedLanguages.includes('none')) {\n supportedLanguages.push('none');\n }\n }),\n tap((supportedLanguages: string[]) => this.translate.addLangs(supportedLanguages)),\n // Select queryParams.locale if set meaningfully\n switchMap((supportedLanguages: string[]) =>\n (this.route ? this.route.queryParams : of(null)).pipe(\n first(),\n map((params) => {\n let selectedLanguage: string = null;\n if (supportedLanguages.indexOf(params?.locale) !== -1) {\n selectedLanguage = params?.locale;\n } else if (params?.locale) {\n if (params?.locale === 'de') {\n const deVariants = supportedLanguages.filter((l) =>\n l.startsWith('de-'),\n );\n if (deVariants?.length === 1) {\n selectedLanguage = deVariants[0];\n } else {\n console.warn(\n `Url requested language ${params.locale}, ` +\n 'but ambiguous variants are present: ' +\n supportedLanguages,\n );\n }\n } else {\n console.warn(\n `Url requested language ${params.locale}, ` +\n 'but it was not found or is not configured in the allowed languages: ' +\n supportedLanguages,\n );\n }\n }\n return {\n supportedLanguages,\n selectedLanguage,\n };\n }),\n ),\n ),\n // Select storage.get('language') if set meaningfully\n switchMap(({ supportedLanguages, selectedLanguage }) => {\n if (selectedLanguage) {\n return observableOf({\n supportedLanguages,\n selectedLanguage,\n useStored: false,\n });\n } else {\n if (!this.i18nConfig.obeyUserProfile) {\n console.info(\n 'obeyUserProfile is disabled, using default language ' +\n supportedLanguages[0],\n );\n return of({\n supportedLanguages,\n selectedLanguage,\n useStored: false,\n });\n }\n return this.injector\n .get(SessionStorageService)\n .get('language')\n .pipe(\n map((storageLanguage) => {\n let useStored = false;\n if (supportedLanguages.indexOf(storageLanguage) !== -1) {\n selectedLanguage = storageLanguage;\n useStored = true;\n }\n return {\n supportedLanguages,\n selectedLanguage,\n useStored,\n };\n }),\n );\n }\n }),\n // Use browser language if available, otherwise fall back to the first supported\n // language.\n map(({ supportedLanguages, selectedLanguage, useStored }) => {\n if (selectedLanguage) {\n return {\n supportedLanguages,\n selectedLanguage,\n useStored,\n };\n } else if (\n // Select browser language if set meaningfully\n supportedLanguages.indexOf(this.translate.getBrowserLang()) !== -1\n ) {\n return {\n supportedLanguages,\n selectedLanguage: this.translate.getBrowserLang(),\n useStored,\n };\n } else {\n // Select first supported language\n return {\n supportedLanguages,\n selectedLanguage: supportedLanguages[0],\n useStored,\n };\n }\n }),\n // Set fallback language\n tap(({ supportedLanguages, selectedLanguage, useStored }) => {\n if (!useStored && this.i18nConfig.obeyUserProfile) {\n void this.injector\n .get(SessionStorageService)\n .set('language', selectedLanguage);\n }\n if (selectedLanguage === 'none') {\n this.translate.setDefaultLang('none');\n } else if (selectedLanguage?.startsWith('de-')) {\n this.translate.setDefaultLang('de');\n } else {\n this.translate.setDefaultLang(supportedLanguages[0]);\n }\n }),\n // Configure `ngx-translate` to use the determined language and trigger loading of\n // translations.\n switchMap(({ selectedLanguage }) => {\n // console.log('language used: ' + selectedLanguage);\n this.language = selectedLanguage;\n return this.translate.use(selectedLanguage).pipe(map(() => null as void));\n }),\n )\n .subscribe(() => {\n // Notify anyone waiting for translations to be loaded.\n this.languageLoaded.next(true);\n });\n return this.waitForInit();\n }\n\n private async initializeCordova(supportedLanguages = DEFAULT_SUPPORTED_LANGUAGES) {\n this.translate.addLangs(supportedLanguages);\n let language = supportedLanguages[0];\n this.translate.setDefaultLang(language);\n this.translate.use(language);\n this.language = language;\n const data = await this.appService.getLanguage();\n if (supportedLanguages.indexOf(data) != -1) {\n language = data;\n }\n this.language = language;\n this.translate.use(language).subscribe(() => {\n this.languageLoaded.next(true);\n });\n // this.translate.getTranslation(language).subscribe(() => {\n // });\n return this.waitForInit();\n }\n\n waitForInit(): Observable<void> {\n return this.languageLoaded.pipe(\n first((languageLoaded) => languageLoaded),\n map(() => undefined as void),\n );\n }\n\n /** Same as `translate.currentLang`. */\n getLanguage(): string {\n return this.language;\n }\n\n getISOLanguage(): string {\n return LANGUAGES[this.language];\n }\n\n getLocale(): string {\n return this.getISOLanguage().replace('_', '-');\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport * as rxjs from 'rxjs';\nimport { Observable } from 'rxjs';\nimport { ListItem } from '../types/list-item';\nimport { TranslationsService } from '../translations/translations.service';\nimport { delay, startWith, switchMap } from 'rxjs/operators';\n\n@Pipe({\n name: 'esListItemLabel',\n standalone: false,\n})\nexport class ListItemLabelPipe implements PipeTransform {\n constructor(private translate: TranslateService, private translations: TranslationsService) {}\n\n transform(item: ListItem, args = { fallback: item.name }): Observable<string> {\n const mapping = {\n NODE: 'NODE',\n COLLECTION: 'NODE',\n NODE_PROPOSAL: 'NODE_PROPOSAL',\n ORG: 'ORG',\n GROUP: 'GROUP',\n USER: 'USER',\n };\n if (item.label) {\n return rxjs.of(item.label);\n } else {\n return this.translations.waitForInit().pipe(\n startWith(undefined as void),\n delay(1),\n switchMap(() =>\n this.translate.get(mapping[item.type] + '.' + item.name, {\n fallback: args.fallback,\n }),\n ),\n );\n }\n }\n}\n","import { Sort } from '@angular/material/sort';\n\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { CustomOptions, OptionItem, Target } from '../types/option-item';\nimport { ListItem, ListItemSort } from '../types/list-item';\nimport { CanDrop, DragData, DropAction } from '../types/drag-drop';\nimport { Node, GenericAuthority } from 'ngx-edu-sharing-api';\nimport { ActionbarComponent } from '../actionbar/actionbar.component';\nimport { Observable } from 'rxjs';\n\nexport type NodeRoot =\n | 'MY_FILES'\n | 'COLLECTION_HOME'\n | 'SHARED_FILES'\n | 'MY_SHARED_FILES'\n | 'TO_ME_SHARED_FILES'\n | 'WORKFLOW_RECEIVE'\n | 'RECYCLE'\n | 'ALL_FILES';\n\nexport enum NodeEntriesDisplayType {\n Table,\n Grid,\n SmallGrid,\n}\n\nexport enum InteractionType {\n // create router link\n DefaultActionLink,\n // emit an event\n Emitter,\n None,\n}\n\nexport type ListOptions = { [key in Target]?: OptionItem[] };\nexport type ListOptionsConfig = {\n actionbar?: ActionbarComponent;\n parent?: Node;\n customOptions?: CustomOptions;\n};\n\nexport interface ListSortConfig extends Sort {\n columns: ListItemSort[];\n allowed?: boolean;\n customSortingInProgress?: boolean;\n}\n\nexport type DropTarget = Node | NodeRoot;\n\nexport interface DropSource<T extends NodeEntriesDataType> {\n element: T[];\n // sourceList: ListEventInterface<T>;\n mode: DropAction;\n}\n\nexport interface ListDragGropConfig<T extends NodeEntriesDataType> {\n dragAllowed: boolean;\n dropAllowed?: (dragData: DragData<T>) => CanDrop;\n dropped?: (target: Node, source: DropSource<NodeEntriesDataType>) => void;\n}\n\nexport enum ClickSource {\n Preview,\n Icon,\n Metadata,\n Comments,\n Overlay,\n Dropdown, // keep: used in extensions\n}\n\nexport type NodeClickEvent<T extends NodeEntriesDataType> = {\n element: T;\n source: ClickSource;\n attribute?: ListItem; // only when source === Metadata\n};\nexport type FetchEvent = {\n offset: number;\n amount?: number;\n /**\n * is a reset of the current data required?\n * this should be true if this was a pagination request\n */\n reset?: boolean;\n};\nexport type NodeEntriesDataType = Node | GenericAuthority;\nexport type GridLayout = 'grid' | 'scroll';\nexport type GridConfig = {\n /**\n * max amount of rows that should be visible, unset for no limit\n */\n maxRows?: number;\n /**\n * layout, defaults to 'grid'\n * 'scroll' may only be used when maxRows is not set\n */\n layout?: GridLayout;\n};\n\nexport interface ListEventInterface<T extends NodeEntriesDataType> {\n updateNodes(nodes: void | T[]): void;\n\n onDisplayTypeChange(): Observable<NodeEntriesDisplayType>;\n\n getDisplayType(): NodeEntriesDisplayType;\n\n setDisplayType(displayType: NodeEntriesDisplayType): void;\n\n showReorderColumnsDialog(): void;\n\n addVirtualNodes(virtual: T[]): void;\n\n setOptions(options: ListOptions): void;\n\n /**\n * activate option (dropdown) generation\n */\n initOptionsGenerator(config: ListOptionsConfig): void | Promise<void>;\n\n selectAll(): void;\n\n getSelection(): SelectionModel<T>;\n\n /**\n * triggered when nodes/objects are deleted and should not be shown in the list anymore\n */\n deleteNodes(objects: T[]): void;\n}\n","import * as rxjs from 'rxjs';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { distinctUntilChanged, map } from 'rxjs/operators';\n\nexport class ItemsCap<T> {\n /** The number of items to which the data should be capped. */\n get cap(): number | null {\n return this._cap.value;\n }\n set cap(value: number | null) {\n this._cap.next(value ?? null);\n }\n private _cap = new BehaviorSubject<number | null>(null);\n\n /** Whether to temporarily disable capping. */\n get disabled(): boolean {\n return this._disabled.value;\n }\n set disabled(value: boolean) {\n this._disabled.next(value);\n }\n private _disabled = new BehaviorSubject(false);\n\n /** Whether there is more data available that is currently being capped. */\n get isActivelyCapping(): boolean {\n return this._isActivelyCapping;\n }\n private _isActivelyCapping = false;\n\n private _effectiveCap: Observable<number | null> = rxjs\n .combineLatest([this._cap, this._disabled])\n .pipe(\n map(([cap, disabled]) => (disabled ? null : cap)),\n distinctUntilChanged(),\n );\n\n connect(dataStream: Observable<T[]>): Observable<T[]> {\n return rxjs.combineLatest([this._effectiveCap, dataStream]).pipe(\n map(([effectiveCap, originalData]) => {\n const needToCap = this._needToCap(effectiveCap, originalData);\n this._isActivelyCapping = needToCap;\n if (needToCap) {\n return originalData.slice(0, effectiveCap);\n } else {\n return originalData;\n }\n }),\n );\n }\n\n private _needToCap(effectiveCap: number | null, originalData: T[]): boolean {\n return effectiveCap && originalData?.length > effectiveCap;\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { Sort, SortDirection } from '@angular/material/sort';\nimport { ListItemSort, SortEvent, SortPanel } from '../../types/list-item';\n\n@Component({\n selector: 'es-sort-select-panel',\n templateUrl: './sort-select-panel.component.html',\n styleUrls: ['./sort-select-panel.component.scss'],\n standalone: false,\n})\nexport class SortSelectPanelComponent implements SortPanel {\n @Input() active: string;\n @Input() direction: SortDirection;\n @Input() columns: ListItemSort[];\n @Output() sortChange = new EventEmitter<Sort>();\n @Input() customSortingInProgress: boolean;\n @Output() customSortingInProgressChange = new EventEmitter<boolean>();\n\n constructor() {}\n\n onSort(event: SortEvent) {\n this.sortChange.emit({\n active: event.name,\n direction: event.ascending ? 'asc' : 'desc',\n });\n }\n}\n","<mat-slide-toggle\n *ngIf=\"active === 'ccm:collection_ordered_position'\"\n [(ngModel)]=\"customSortingInProgress\"\n (ngModelChange)=\"customSortingInProgressChange.emit($event)\"\n>\n {{ 'COLLECTIONS.SORT_SLIDER' | translate }}\n</mat-slide-toggle>\n<ng-container *ngIf=\"columns?.length\">\n <button\n *ngIf=\"sortDropdown.menu\"\n [matMenuTriggerFor]=\"sortDropdown.menu\"\n mat-button\n color=\"primary\"\n >\n <span *ngIf=\"active\">{{ 'NODE.' + active | translate }}</span>\n <span *ngIf=\"!active\">{{ 'SORT_BY' | translate }}</span>\n <i\n *ngIf=\"active && active !== 'ccm:collection_ordered_position'\"\n [esIcon]=\"'arrow_' + (direction === 'asc' ? 'upward' : 'downward')\"\n ></i>\n </button>\n\n <es-sort-dropdown\n #sortDropdown\n [columns]=\"columns\"\n [sortBy]=\"active\"\n [sortAscending]=\"direction === 'asc'\"\n (sort)=\"onSort($event)\"\n ></es-sort-dropdown>\n</ng-container>\n","import { DataSource } from '@angular/cdk/collections';\nimport { BehaviorSubject, Observable, Subscription } from 'rxjs';\nimport { ItemsCap } from './items-cap';\nimport { GenericAuthority, Node, Pagination } from 'ngx-edu-sharing-api';\nimport { Helper } from '../util/helper';\n\nexport type LoadingState =\n // The data source is loading data for the first time.\n | 'initial'\n // Loading data after change of parameters, i.e., it will replace the current data when done.\n | 'reset'\n // Loading another page with unchanged parameters.\n | 'page'\n // Loading done.\n | false;\n\nexport class NodeDataSource<T extends Node | GenericAuthority> extends DataSource<T> {\n protected dataStream = new BehaviorSubject<T[]>([]);\n private pagination$ = new BehaviorSubject<Pagination>(null);\n // Include `LoadingState` to be type-compatible to `NodeDataSourceRemote` although not used\n // here.\n public isLoadingSubject = new BehaviorSubject<LoadingState | boolean>(false);\n get isLoading() {\n return this.isLoadingSubject.value;\n }\n set isLoading(isLoading: LoadingState | boolean) {\n this.isLoadingSubject.next(isLoading);\n }\n initialPageLoaded = false;\n protected _itemsCap: ItemsCap<T> | null;\n get itemsCap(): ItemsCap<T> | null {\n return this._itemsCap;\n }\n set itemsCap(value: ItemsCap<T> | null) {\n this._itemsCap = value;\n this.connectRenderData();\n }\n protected renderData = new BehaviorSubject<T[]>([]);\n protected renderDataSubscription: Subscription | null;\n\n constructor(initialData: T[] = []) {\n super();\n this.setData(initialData);\n }\n\n connect(): Observable<T[]> {\n if (!this.renderDataSubscription) {\n this.connectRenderData();\n }\n return this.renderData;\n }\n\n private connectRenderData(): void {\n this.renderDataSubscription?.unsubscribe();\n if (this.itemsCap) {\n this.renderDataSubscription = this.itemsCap\n .connect(this.dataStream)\n .subscribe((data) => this.renderData.next(data));\n } else {\n this.renderDataSubscription = this.dataStream.subscribe((data) =>\n this.renderData.next(data),\n );\n }\n }\n\n connectPagination(): Observable<Pagination> {\n return this.pagination$;\n }\n\n disconnect() {}\n\n setData(data: T[], pagination: Pagination = null) {\n this.dataStream.next(data);\n this.setPagination(pagination);\n }\n\n appendData(appendData: T[], location: 'before' | 'after' = 'after') {\n let data = this.getData();\n if (location === 'after') {\n data = data.concat(appendData);\n } else {\n data = appendData.concat(data);\n }\n this.dataStream.next(data);\n }\n\n /**\n * Removes elements from the visible data.\n */\n removeData(toRemove: T[]): void {\n const newData = this.getData().filter(\n (value) =>\n !toRemove.some((d) => Helper.objectEquals((d as Node).ref, (value as Node).ref)),\n );\n const removedData = this.getData().filter((value) => !newData.includes(value));\n this.dataStream.next(newData);\n if (this.pagination$.value) {\n const pagination = this.pagination$.value;\n this.setPagination({\n count: pagination.count - removedData.length,\n from: pagination.from,\n total: pagination.total - removedData.length,\n });\n }\n }\n\n setPagination(pagination: Pagination) {\n this.pagination$.next(pagination);\n }\n\n reset() {\n this.setData([]);\n }\n\n hasMore() {\n if (!this.pagination$.value) {\n return undefined;\n }\n return this.pagination$.value.total > this.dataStream.value?.length;\n }\n\n // FIXME: This is somewhat dangerous because we rely on `connect` being called from outside, but\n // this method provides a way to access data without ever calling `connect`.\n getData() {\n return this.renderData.value;\n }\n\n isEmpty(): boolean {\n return this.dataStream.value?.length === 0;\n }\n\n getTotal() {\n return this.pagination$.value?.total\n ? Math.max(this.pagination$.value?.total, this.getData()?.length || 0)\n : this.dataStream.value?.length ?? 0;\n }\n\n isFullyLoaded() {\n return this.getTotal() <= this.dataStream.value?.length;\n }\n\n /**\n * force a refresh of all elements in the current data stream\n * trigger this to enforce a rebuild of the nodes in all sub-components\n * i.e. if data from some nodes has changed\n */\n refresh() {\n this.dataStream.next(Helper.deepCopy(this.dataStream.value));\n }\n}\n","import { NodeDataSource } from './node-data-source';\n\n/**\n * this is a special data source to provide custom card layouts into the node-entries components\n */\nexport class CustomTemplatesDataSource extends NodeDataSource<any> {}\n","import { NodeDataSource } from './node-data-source';\nimport { GenericAuthority, Node } from 'ngx-edu-sharing-api';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { ActivatedRoute } from '@angular/router';\nimport { PaginationStrategy } from './node-entries-global.service';\nimport { Sort } from '@angular/material/sort';\nimport { SortPanel } from '../types/list-item';\nimport { MatPaginator } from '@angular/material/paginator';\n\nexport interface PaginationConfig {\n defaultPageSize: number;\n strategy: PaginationStrategy;\n}\n\nexport abstract class NodeDataSourceRemote<\n T extends Node | GenericAuthority = Node,\n P extends MatPaginator = MatPaginator,\n> extends NodeDataSource<T> {\n abstract get paginator(): P | null;\n abstract set paginator(value: P | null);\n abstract get sortPanel(): SortPanel;\n abstract set sortPanel(value: SortPanel);\n abstract loadMore(): boolean;\n\n abstract registerQueryParameters(route: ActivatedRoute): void;\n\n abstract init({\n paginationConfig,\n defaultSort,\n }: {\n paginationConfig: PaginationConfig;\n defaultSort: Sort;\n }): void;\n}\n","import { SelectionModel } from '@angular/cdk/collections';\nimport { EventEmitter, Injectable, signal, WritableSignal } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { Node } from 'ngx-edu-sharing-api';\nimport {\n ClickSource,\n FetchEvent,\n GridConfig,\n InteractionType,\n ListDragGropConfig,\n ListEventInterface,\n ListOptions,\n ListSortConfig,\n NodeClickEvent,\n NodeEntriesDataType,\n NodeEntriesDisplayType,\n} from '../node-entries/entries-model';\nimport { NodeDataSource } from '../node-entries/node-data-source';\nimport {\n NodeEntriesGlobalService,\n PaginationStrategy,\n} from '../node-entries/node-entries-global.service';\n\nimport { OptionItem, Scope } from '../types/option-item';\nimport { ListItem } from '../types/list-item';\nimport { UIService } from './ui.service';\nimport { NodeDataSourceRemote } from '../node-entries/node-data-source-remote';\nimport { delay, map } from 'rxjs/operators';\nimport { DropdownComponent } from '../dropdown/dropdown.component';\nimport { Toast } from './abstract/toast.service';\n\n/**\n Custom selection model which adds the click source of the selection.\n USED IN EXTENSIONS!\n */\nexport class CustomSelectionModel<T> extends SelectionModel<T> {\n private _clickSource: ClickSource;\n /**\n * used in extensions\n */\n readonly changedClickSource = this.changed.pipe(\n delay(0),\n map((c) => {\n return { ...c, clickSource: this._clickSource };\n }),\n );\n deselect(...values: T[]) {\n this._clickSource = null;\n super.deselect(...values);\n }\n\n toggle(value: T) {\n this._clickSource = null;\n super.toggle(value);\n }\n\n clear() {\n this._clickSource = null;\n super.clear();\n }\n\n select(...values: T[]) {\n this._clickSource = null;\n super.select(...values);\n }\n\n /**\n * used in extensions\n * @param value\n */\n set clickSource(value: ClickSource) {\n this._clickSource = value;\n }\n}\n\n@Injectable()\nexport class NodeEntriesService<T extends NodeEntriesDataType> {\n list: ListEventInterface<T>;\n readonly dataSource$ = new BehaviorSubject<NodeDataSource<T> | null>(null);\n /**\n * scope the current list is in, e.g. workspace\n * This is used for additional config injection based on the scope\n */\n scope: Scope;\n get dataSource(): NodeDataSource<T> {\n return this.dataSource$.value;\n }\n set dataSource(value: NodeDataSource<T>) {\n this.dataSource$.next(value);\n }\n get paginationStrategy(): PaginationStrategy {\n return this.entriesGlobal.getPaginationStrategy(this.scope);\n }\n /**\n * Subject that reflects the current columns configuration.\n *\n * Updated when loading configuration and through user interaction.\n */\n columnsSubject = new BehaviorSubject<{ columns: ListItem[]; fromUser: boolean }>(null);\n get columns(): ListItem[] {\n return this.columnsSubject.value?.columns;\n }\n set columns(columns: ListItem[]) {\n this.columnsSubject.next({ columns, fromUser: true });\n }\n configureColumns: boolean;\n displayType: NodeEntriesDisplayType;\n selection = new CustomSelectionModel<T>(true, []);\n elementInteractionType: InteractionType;\n options$ = new BehaviorSubject<ListOptions>(null);\n get options() {\n return this.options$.value;\n }\n set options(options: ListOptions) {\n this.options$.next(options);\n }\n checkbox: boolean;\n globalOptionsSubject = new BehaviorSubject<OptionItem[]>([]);\n set globalOptions(globalOptions: OptionItem[]) {\n this.globalOptionsSubject.next(globalOptions);\n }\n sortSubject = new BehaviorSubject<ListSortConfig>(void 0);\n get sort(): ListSortConfig {\n return this.sortSubject.value;\n }\n set sort(value: ListSortConfig) {\n this.sortSubject.next(value);\n }\n sortChange: EventEmitter<ListSortConfig>;\n dragDrop: ListDragGropConfig<T>;\n clickItem: EventEmitter<NodeClickEvent<T>>;\n dblClickItem: EventEmitter<NodeClickEvent<T>>;\n fetchData: EventEmitter<FetchEvent>;\n readonly gridConfig$ = new BehaviorSubject<GridConfig | null>(null);\n get gridConfig(): GridConfig {\n return this.gridConfig$.value;\n }\n set gridConfig(value: GridConfig) {\n this.gridConfig$.next(value);\n }\n primaryInstance: boolean;\n singleClickHint: 'dynamic' | 'static';\n disableInfiniteScroll: boolean;\n scrollGradientColor: WritableSignal<string> = signal('fff');\n\n constructor(\n private uiService: UIService,\n private toast: Toast,\n private entriesGlobal: NodeEntriesGlobalService,\n ) {}\n\n onClicked({ event, ...data }: NodeClickEvent<T> & { event: MouseEvent }) {\n if (event.ctrlKey || event.metaKey) {\n this.selection.toggle(data.element);\n } else if (event.shiftKey) {\n this.expandSelectionTo(data.element);\n } else {\n this.clickItem.emit(data);\n }\n }\n\n onCheckboxChanged(node: T, checked: boolean) {\n if (this.uiService.shiftKeyPressed) {\n this.expandSelectionTo(node);\n }\n\n if (checked !== this.selection.isSelected(node)) {\n this.selection.toggle(node);\n }\n }\n\n toggleSelectAll() {\n if (this.isAllSelected()) {\n this.selection.clear();\n } else {\n this.selectAll();\n }\n }\n\n loadMore(source: 'button' | 'scroll'): boolean {\n if (this.paginationStrategy !== 'infinite-scroll') {\n return false;\n }\n if (source === 'scroll' && this.disableInfiniteScroll) {\n return false;\n }\n // TODO: focus next item when triggered via button.\n if (this.dataSource instanceof NodeDataSourceRemote) {\n return (this.dataSource as NodeDataSourceRemote).loadMore();\n } else {\n if (this.dataSource.hasMore()) {\n this.fetchData.emit({\n offset: this.dataSource.getData().length,\n reset: false,\n });\n return true;\n } else {\n return false;\n }\n }\n }\n\n private selectAll() {\n this.selection.select(...this.dataSource.getData());\n }\n\n private isAllSelected(): boolean {\n return this.dataSource.getData().every((node) => this.selection.isSelected(node));\n }\n\n private expandSelectionTo(node: T) {\n const nodeIndex = this.dataSource.getData().indexOf(node);\n const selectionIndexes = this.selection.selected\n .map((node) => this.dataSource.getData().indexOf(node))\n .filter((index) => index >= 0);\n if (Math.min(...selectionIndexes) < nodeIndex) {\n for (let i = Math.min(...selectionIndexes) + 1; i <= nodeIndex; i++) {\n this.selection.select(this.dataSource.getData()[i]);\n }\n } else if (Math.max(...selectionIndexes) > nodeIndex) {\n for (let i = nodeIndex; i < Math.max(...selectionIndexes); i++) {\n this.selection.select(this.dataSource.getData()[i]);\n }\n }\n }\n\n openDropdown(dropdown: DropdownComponent, node: T, onDone: () => void = null) {\n if (!this.selection.selected.includes(node)) {\n this.selection.clear();\n this.selection.select(node);\n }\n // Wait for the menu to reflect changed options.\n setTimeout(() => {\n dropdown.callbackObjects = this.selection.selected as unknown as Node[];\n dropdown.ngOnChanges();\n if (dropdown.canShowDropdown()) {\n if (onDone) {\n onDone();\n }\n } else {\n this.toast.toast('NO_AVAILABLE_OPTIONS');\n }\n });\n }\n}\n","import { Injectable, TemplateRef } from '@angular/core';\n\n@Injectable()\nexport class NodeEntriesTemplatesService {\n /**\n * custom heading/title above the current result set\n */\n title: TemplateRef<any>;\n\n /**\n * Additional top matter that is provided by the selected node-entries component.\n */\n entriesTopMatter: TemplateRef<unknown>;\n\n /**\n * custom container in case the data source is empty\n */\n empty: TemplateRef<any>;\n\n /**\n * custom container for the action area on each element\n * (small grid only)\n */\n actionArea: TemplateRef<any>;\n /**\n * custom container for showing an overlay across each element\n */\n overlay: TemplateRef<any>;\n\n constructor() {}\n}\n","import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { CdkOverlayOrigin } from '@angular/cdk/overlay';\nimport { ListItem } from '../../../types/list-item';\n\n@Component({\n selector: 'es-column-chooser',\n templateUrl: './column-chooser.component.html',\n styleUrls: ['./column-chooser.component.scss'],\n standalone: false,\n})\nexport class ColumnChooserComponent {\n @Input() origin: CdkOverlayOrigin;\n @Input() columnChooserVisible = false;\n @Output() columnChooserVisibleChange = new EventEmitter<boolean>();\n\n @Input() columns: ListItem[];\n @Output() columnsChange = new EventEmitter<ListItem[]>();\n\n constructor() {}\n\n columnChooserDrop(event: CdkDragDrop<string[]>) {\n moveItemInArray(this.columns, event.previousIndex, event.currentIndex);\n this.columnsChange.emit(this.columns);\n }\n\n columnChooserToggle(columnIndex: number): void {\n const column = this.columns[columnIndex];\n column.visible = !column.visible;\n this.columnsChange.emit(this.columns);\n }\n}\n","<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"columnChooserVisible\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n [cdkConnectedOverlayViewportMargin]=\"5\"\n (backdropClick)=\"columnChooserVisibleChange.emit(false)\"\n cdkConnectedOverlayBackdropClass=\"column-chooser-backdrop\"\n>\n <div\n cdkDropList\n class=\"column-chooser mat-elevation-z2\"\n (cdkDropListDropped)=\"columnChooserDrop($event)\"\n >\n <div class=\"column-chooser-item\" *ngFor=\"let column of columns; index as index\" cdkDrag>\n <mat-checkbox\n [checked]=\"column.visible\"\n (change)=\"columnChooserToggle(index)\"\n color=\"primary\"\n >\n {{ column | esListItemLabel | async }}\n </mat-checkbox>\n <div class=\"drag-handle\" cdkDragHandle>\n <i esIcon=\"drag_handle\"></i>\n </div>\n </div>\n </div>\n</ng-template>\n","export class ColorHelper {\n public static cssColorToRgb(color: string): number[] {\n color = color.trim();\n if (color.startsWith('rgb')) {\n let result = /rgb.?\\(\\s*([\\d]*)\\s*,\\s*([\\d]*)\\s*,\\s*([\\d*]*)\\s*/i.exec(color);\n return result ? [parseInt(result[1]), parseInt(result[2]), parseInt(result[3])] : null;\n }\n let result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(color);\n return result\n ? [parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)]\n : null;\n }\n\n /**\n * returns the estimated color brightness for a css color based on a pereceived brightness factor\n * Value between [0,1] and -1 if the css string was not readable\n * @param {string} color\n * @returns {number}\n */\n public static getColorBrightness(color: string) {\n const rgb = ColorHelper.cssColorToRgb(color);\n if (rgb) {\n // return (rgb[0]*0.2126 + rgb[1]*0.7152 + rgb[2]*0.0722) / 255;\n const a = rgb.map((v) => {\n v /= 255;\n return v <= 0.03928 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\n });\n return a[0] * 0.2126 + a[1] * 0.7152 + a[2] * 0.0722;\n }\n return -1;\n }\n\n private static getRatio(l1: number, l2: number) {\n // calculate the color contrast ratio\n return l1 > l2 ? (l2 + 0.05) / (l1 + 0.05) : (l1 + 0.05) / (l2 + 0.05);\n }\n /**\n * returns 0 (black) or 1 (white)\n * @param color\n */\n public static getPreferredColor(color: string): PreferredColor {\n if (!color) {\n return PreferredColor.Black;\n }\n const brightness = ColorHelper.getColorBrightness(color);\n const ratioBlack = ColorHelper.getRatio(0, brightness);\n const ratioWhite = ColorHelper.getRatio(1, brightness);\n return ratioBlack > ratioWhite ? PreferredColor.Black : PreferredColor.White;\n }\n\n public static rgbToHex(rgb: number[]): string {\n return (\n '#' +\n ColorHelper.componentToHex(rgb[0]) +\n ColorHelper.componentToHex(rgb[1]) +\n ColorHelper.componentToHex(rgb[2])\n );\n }\n public static componentToHex(c: number) {\n var hex = Math.max(0, Math.min(Math.round(c), 255)).toString(16);\n return hex.length == 1 ? '0' + hex : hex;\n }\n public static rgbToHsl(rgb: number[]) {\n const r = rgb[0] / 255;\n const g = rgb[1] / 255;\n const b = rgb[2] / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n // tslint:disable-next-line:one-variable-per-declaration prefer-const\n let h,\n s,\n l = (max + min) / 2;\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n return [h, s, l];\n }\n private static hue2rgb(p: number, q: number, t: number) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n }\n public static hslToRgb(hsl: number[]) {\n const h = hsl[0];\n const s = hsl[1];\n const l = hsl[2];\n // tslint:disable-next-line:one-variable-per-declaration\n let r, g, b;\n if (s === 0) {\n r = g = b = l;\n } else {\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = ColorHelper.hue2rgb(p, q, h + 1 / 3);\n g = ColorHelper.hue2rgb(p, q, h);\n b = ColorHelper.hue2rgb(p, q, h - 1 / 3);\n }\n\n return [r * 255, g * 255, b * 255];\n }\n}\nexport enum PreferredColor {\n Black,\n White,\n}\n","import { ChangeDetectorRef, Component, Input, OnInit } from '@angular/core';\nimport {\n AuthenticationService,\n ConfigService,\n NetworkService,\n Node,\n RatingV1Service,\n RestConstants,\n} from 'ngx-edu-sharing-api';\nimport { Toast } from '../../services/abstract/toast.service';\nimport { take } from 'rxjs/operators';\nimport { RestHelper } from '../../util/rest-helper';\n\n@Component({\n selector: 'es-node-rating',\n templateUrl: 'node-rating.component.html',\n styleUrls: ['node-rating.component.scss'],\n standalone: false,\n})\nexport class NodeRatingComponent<T extends Node> implements OnInit {\n @Input() node: T;\n mode: RatingMode;\n hasPermission: boolean;\n hoverStar: number;\n constructor(\n public toast: Toast,\n public configService: ConfigService,\n private networkApi: NetworkService,\n public authenticationService: AuthenticationService,\n public changeDetectorRef: ChangeDetectorRef,\n public ratingService: RatingV1Service,\n ) {}\n\n async ngOnInit() {\n await this.configService.observeConfig().pipe(take(1)).toPromise();\n this.mode = this.configService.instant('rating.mode', 'none');\n this.hasPermission = await this.authenticationService.hasToolpermission(\n RestConstants.TOOLPERMISSION_RATE_READ,\n );\n }\n\n async toogleLike() {\n const name = RestHelper.getTitle(this.node);\n if (this.node.rating?.user) {\n try {\n await this.ratingService\n .deleteRating({\n repository: this.node.ref.repo,\n node: this.node.ref.id,\n })\n .toPromise();\n this.toast.toast('RATING.TOAST.LIKE_REMOVED', { name });\n this.node.rating.user = 0;\n this.node.rating.overall.count--;\n } catch (e) {\n this.toast.error(e);\n }\n } else {\n try {\n await this.ratingService\n .addOrUpdateRating({\n repository: this.node.ref.repo,\n node: this.node.ref.id,\n rating: 5,\n body: null,\n })\n .toPromise();\n this.toast.toast('RATING.TOAST.LIKED', { name });\n this.node.rating.user = 5;\n this.node.rating.overall.count++;\n } catch (e) {\n this.toast.error(e);\n }\n }\n this.changeDetectorRef.detectChanges();\n }\n\n getPrimaryRating() {\n if (!this.node.rating) {\n return 0;\n }\n if (this.node.rating.user) {\n return this.node.rating.user;\n }\n return this.node.rating.overall.sum / this.node.rating.overall.count;\n }\n\n async setRating(rating: number) {\n const name = RestHelper.getTitle(this.node);\n try {\n await this.ratingService\n .addOrUpdateRating({\n repository: this.node.ref.repo,\n node: this.node.ref.id,\n rating,\n body: null,\n })\n .toPromise();\n this.toast.toast('RATING.TOAST.RATED', { name, rating });\n this.node.rating.overall.count += this.node.rating.user ? 0 : 1;\n this.node.rating.user = rating;\n this.changeDetectorRef.detectChanges();\n } catch (e) {\n this.toast.error(e);\n }\n }\n\n async deleteRating() {\n const name = RestHelper.getTitle(this.node);\n try {\n await this.ratingService\n .deleteRating({\n repository: this.node.ref.repo,\n node: this.node.ref.id,\n })\n .toPromise();\n this.toast.toast('RATING.TOAST.RATING_REMOVED', { name });\n this.node.rating.overall.count--;\n this.node.rating.overall.sum -= this.node.rating.user;\n this.node.rating.user = 0;\n this.changeDetectorRef.detectChanges();\n } catch (e) {\n this.toast.error(e);\n }\n }\n\n isFromHomeRepo(node: Node) {\n return this.networkApi.isFromHomeRepository(node);\n }\n}\nexport type RatingMode = 'none' | 'likes' | 'stars';\n","<ng-container *ngIf=\"hasPermission && node.type === 'ccm:io' && isFromHomeRepo(node)\">\n <div *ngIf=\"mode === 'likes'\" class=\"likes\">\n <button\n (click)=\"toogleLike()\"\n [disabled]=\"(authenticationService.observeLoginInfo() | async)?.isGuest\"\n mat-icon-button\n color=\"primary\"\n matTooltip=\"{{ 'RATING.LIKES' | translate }}\"\n >\n <i [esIcon]=\"'edu-thumb_up' + (!node.rating?.user ? '_off' : '')\"></i>\n </button>\n <span matTooltip=\"{{ 'RATING.COUNT_LIKES' | translate }}\">{{\n node.rating?.overall.count\n }}</span>\n </div>\n <div *ngIf=\"mode === 'stars'\" class=\"stars\" mat-icon-button color=\"primary\">\n <button\n *ngFor=\"let rating of [1, 2, 3, 4, 5]\"\n mat-icon-button\n color=\"primary\"\n class=\"star\"\n (click)=\"setRating(rating)\"\n [disabled]=\"(authenticationService.observeLoginInfo() | async)?.isGuest\"\n (focus)=\"hoverStar = rating\"\n (mouseenter)=\"hoverStar = rating\"\n (mouseleave)=\"hoverStar = 0\"\n (blur)=\"hoverStar = 0\"\n [class.star-hover]=\"hoverStar >= rating\"\n >\n <i\n [esIcon]=\"\n 'star' +\n ((hoverStar ? hoverStar >= rating : getPrimaryRating() >= rating) ? '' : '_border')\n \"\n matTooltip=\"{{ 'RATING.STARS_RATE' | translate : { rating: rating } }}\"\n ></i>\n </button>\n <button\n *ngIf=\"!!node.rating?.user\"\n mat-icon-button\n color=\"primary\"\n class=\"delete\"\n matTooltip=\"{{ 'RATING.DELETE_RATING' | translate }}\"\n (click)=\"deleteRating()\"\n [disabled]=\"(authenticationService.observeLoginInfo() | async)?.isGuest\"\n >\n <i esIcon=\"clear\"></i>\n </button>\n <span matTooltip=\"{{ 'RATING.COUNT_RATINGS' | translate }}\"\n >({{ node.rating?.overall.count }})</span\n >\n </div>\n</ng-container>\n","import { Component, ElementRef, Input, ViewChild } from '@angular/core';\nimport { Node } from 'ngx-edu-sharing-api';\n\n/**\n * Displays the preview image of `node`.\n *\n * When `node` is a video, the animated preview image is replaced with a static canvas unless\n * `playAnimation` is set to `true`.\n */\n@Component({\n selector: 'es-preview-image',\n templateUrl: './preview-image.component.html',\n styleUrls: ['./preview-image.component.scss'],\n standalone: false,\n})\nexport class PreviewImageComponent<T extends Node> {\n @Input() node: T;\n @Input() playAnimation = false;\n\n @ViewChild('image') imageRef: ElementRef<HTMLImageElement>;\n @ViewChild('canvas') canvasRef: ElementRef<HTMLCanvasElement>;\n // @ViewChild('backdropCanvas') backdropCanvasRef: ElementRef<HTMLCanvasElement>;\n\n showCanvas: boolean = false;\n replacedWithStatic: boolean = false;\n\n constructor() {}\n\n onImageLoad(event: Event): void {\n if (this.node.mimetype?.startsWith('video')) {\n const image = event.target as HTMLImageElement;\n this.showCanvas = true;\n setTimeout(() => {\n this.initCanvas(image, this.canvasRef.nativeElement);\n // this.initCanvas(image, this.backdropCanvasRef.nativeElement);\n this.replacedWithStatic = true;\n });\n }\n }\n\n private initCanvas(image: HTMLImageElement, canvas: HTMLCanvasElement): void {\n var width = image.naturalWidth;\n var height = image.naturalHeight;\n canvas.width = width;\n canvas.height = height;\n canvas.getContext('2d').drawImage(image, 0, 0, width, height);\n }\n}\n","<div class=\"card-image-backdrop\">\n <!-- The blur filter does not work with canvas as it does with img on Chrome, so we go for a black\n background for now. -->\n <!-- <canvas *ngIf=\"showCanvas\" #backdropCanvas role=\"presentation\" aria-hidden=\"true\"></canvas> -->\n <img\n [src]=\"node | esNodeImage : { maxWidth: 300, maxHeight: 300, crop: true } | async\"\n alt=\"\"\n *ngIf=\"!replacedWithStatic\"\n />\n</div>\n\n<canvas *ngIf=\"showCanvas\" #canvas role=\"presentation\" aria-hidden=\"true\"></canvas>\n<img\n (load)=\"onImageLoad($event)\"\n #image\n [src]=\"node | esNodeImage : { maxWidth: 300, maxHeight: 300, crop: true } | async\"\n alt=\"\"\n [class.display-none]=\"replacedWithStatic && !playAnimation\"\n/>\n","import { Component, Input, OnChanges } from '@angular/core';\nimport { Node } from 'ngx-edu-sharing-api';\nimport { CustomFieldSpecialType, NodeEntriesGlobalService } from '../node-entries-global.service';\nimport { NodeHelperService } from '../../services/node-helper.service';\n\n/**\n * A small circular badge that depicts the node's type.\n *\n * To be used in the top bar of a card or similar places.\n */\n@Component({\n selector: 'es-node-type-badge',\n templateUrl: './node-type-badge.component.html',\n styleUrls: ['./node-type-badge.component.scss'],\n standalone: false,\n})\nexport class NodeTypeBadgeComponent implements OnChanges {\n @Input() node: Node;\n\n isCollection: boolean;\n\n constructor(\n public nodeHelper: NodeHelperService,\n private nodeEntriesGlobalService: NodeEntriesGlobalService,\n ) {}\n\n ngOnChanges(): void {\n this.isCollection = this.nodeHelper.isNodeCollection(this.node);\n }\n\n getCustomTemplate() {\n return this.nodeEntriesGlobalService.getCustomFieldTemplate(\n { type: 'NODE', name: CustomFieldSpecialType.type },\n this.node,\n );\n }\n}\n","<ng-container *ngIf=\"isCollection\">\n <i\n [matTooltip]=\"\n 'COLLECTION.SCOPE.' + nodeHelper.getCollectionScopeInfo($any(node)).scopeName | translate\n \"\n [altText]=\"\n 'COLLECTION.SCOPE.' + nodeHelper.getCollectionScopeInfo($any(node)).scopeName | translate\n \"\n [esIcon]=\"nodeHelper.getCollectionScopeInfo($any(node)).icon\"\n ></i>\n</ng-container>\n<ng-container *ngIf=\"!isCollection\">\n <ng-container *ngIf=\"getCustomTemplate() as ref\">\n <ng-container *ngTemplateOutlet=\"ref; context: { node: node }\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!getCustomTemplate()\">\n <img\n [src]=\"node | esNodeIcon | async\"\n [alt]=\"\n node.mediatype\n ? ('NODE.mediatype' | translate) + ': ' + ('MEDIATYPE.' + node.mediatype | translate)\n : ''\n \"\n [matTooltip]=\"\n node.mediatype\n ? ('NODE.mediatype' | translate) + ': ' + ('MEDIATYPE.' + node.mediatype | translate)\n : ''\n \"\n />\n </ng-container>\n</ng-container>\n","import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { Node } from 'ngx-edu-sharing-api';\nimport { OptionItem } from '../../types/option-item';\n// TODO: Decide if providing focus highlights and ripples with this component is a good idea. When\n// using `app-node-url` for cards, we might need highlights and ripples for the whole card while\n// `app-node-url` should only wrap the title since links with lots of content confuse screen\n// readers.\n\n@Component({\n selector: 'es-option-button',\n template: `\n <button\n mat-icon-button\n color=\"primary\"\n matTooltip=\"{{ option.name | translate }}\"\n [class.display-none]=\"!isShown\"\n [disabled]=\"!isEnabled\"\n (click)=\"click(option, node)\"\n attr.data-test=\"option-button-{{ option.name }}\"\n >\n <i esIcon=\"{{ option.icon }}\" [aria]=\"false\"></i>\n </button>\n `,\n standalone: false,\n})\nexport class OptionButtonComponent implements OnChanges {\n @Input() option: OptionItem;\n @Input() node: Node;\n\n isShown = false;\n isEnabled = false;\n async ngOnChanges(changes: SimpleChanges) {\n this.isEnabled = await this.optionIsValid(this.option, this.node);\n this.isShown = await this.optionIsShown(this.option, this.node);\n }\n\n async optionIsValid(optionItem: OptionItem, node: Node): Promise<boolean> {\n if (optionItem.enabledCallback) {\n return await optionItem.enabledCallback([node]);\n }\n return optionItem.isEnabled;\n }\n\n private async optionIsShown(optionItem: OptionItem, node: Node): Promise<boolean> {\n if (optionItem.showCallback) {\n return optionItem.showCallback([node]);\n }\n return true;\n }\n\n async click(option: OptionItem, node: Node) {\n if (await this.optionIsShown(option, node)) {\n option.callback(node);\n }\n }\n}\n","import { Component, HostBinding, Input, Optional } from '@angular/core';\nimport { Node } from 'ngx-edu-sharing-api';\nimport { ClickSource } from '../entries-model';\nimport { NodeEntriesService } from '../../services/node-entries.service';\n\n@Component({\n selector: 'es-node-stats-badges',\n templateUrl: './node-stats-badges.component.html',\n styleUrls: ['./node-stats-badges.component.scss'],\n standalone: false,\n})\nexport class NodeStatsBadgesComponent {\n readonly ClickSource = ClickSource;\n\n childObjectCount = 0;\n\n private _node: Node;\n @Input()\n get node(): Node {\n return this._node;\n }\n set node(node: Node) {\n this._node = node;\n this.childObjectCount = this.getChildObjectCount(node);\n }\n\n @HostBinding('attr.backgroundStyle')\n @Input()\n backgroundStyle: 'darken' | 'lighten' = 'lighten';\n\n constructor(\n @Optional()\n public entriesService: NodeEntriesService<Node>,\n ) {}\n\n private getChildObjectCount(node: Node): number {\n const value = node.properties?.['virtual:childobjectcount']?.[0];\n if (value) {\n return parseInt(value);\n } else {\n return 0;\n }\n }\n}\n","<!--\n <div\n *ngIf=\"node.aspects?.includes('ccm:published')\"\n class=\"card-top-bar-published-copy\"\n >\n <div class=\"node-published-copy\">\n <i\n esIcon=\"content_copy\"\n [matTooltip]=\"'PUBLISHED_COPY_TOOLTIP' | translate\"\n ></i>\n </div>\n </div>\n -->\n<div class=\"card-top-bar-comments\">\n <div\n class=\"node-comments\"\n *ngIf=\"node.type === 'ccm:io'\"\n (click)=\"\n entriesService?.onClicked({\n event: $event,\n element: node,\n source: ClickSource.Comments\n })\n \"\n [matTooltip]=\"('COMMENTS_MULTIPLE' | translate) + ': ' + node.commentCount\"\n >\n <i esIcon=\"comment\"></i>\n <span>{{ node.commentCount }}</span>\n </div>\n</div>\n<div class=\"card-top-bar-childobjects\" *ngIf=\"childObjectCount > 0\">\n <div\n class=\"childobject-count\"\n matTooltip=\"{{ 'CHILDOBJECT_COUNT' | translate : { count: childObjectCount + 1 } }}\"\n >\n <span>{{ childObjectCount + 1 }}</span\n ><i esIcon=\"filter_none\"></i>\n </div>\n</div>\n","import {\n ApplicationRef,\n Component,\n Input,\n OnChanges,\n OnInit,\n Optional,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport { ClickSource, InteractionType } from '../entries-model';\nimport { NodeEntriesTemplatesService } from '../node-entries-templates.service';\nimport { CustomFieldSpecialType, NodeEntriesGlobalService } from '../node-entries-global.service';\nimport { Target } from '../../types/option-item';\nimport { NodeEntriesService } from '../../services/node-entries.service';\nimport { NodeHelperService } from '../../services/node-helper.service';\nimport { AuthenticationService, ConfigService, Node, RestConstants } from 'ngx-edu-sharing-api';\nimport { ColorHelper, PreferredColor } from '../../util/color-helper';\nimport { take } from 'rxjs/operators';\nimport { DropdownComponent } from '../../dropdown/dropdown.component';\nimport { Toast } from '../../services/abstract/toast.service';\nimport { BehaviorSubject } from 'rxjs';\n\n@Component({\n selector: 'es-node-entries-card',\n templateUrl: 'node-entries-card.component.html',\n styleUrls: ['node-entries-card.component.scss'],\n standalone: false,\n})\nexport class NodeEntriesCardComponent<T extends Node> implements OnChanges, OnInit {\n readonly InteractionType = InteractionType;\n readonly Target = Target;\n readonly ClickSource = ClickSource;\n readonly CustomFieldSpecialType = CustomFieldSpecialType;\n @Input() dropdown: DropdownComponent;\n\n @ViewChild('menuTrigger') menuTrigger: MatMenuTrigger;\n\n @Input() node: T;\n dropdownLeft: number;\n dropdownTop: number;\n showRatings = new BehaviorSubject(false);\n isCollection: boolean;\n constructor(\n public entriesService: NodeEntriesService<T>,\n public nodeHelper: NodeHelperService,\n public applicationRef: ApplicationRef,\n public configService: ConfigService,\n public authenticationService: AuthenticationService,\n public templatesService: NodeEntriesTemplatesService,\n public nodeEntriesGlobalService: NodeEntriesGlobalService,\n @Optional() private toast: Toast,\n ) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n this.isCollection = this.nodeHelper.isNodeCollection(changes.node?.currentValue);\n }\n\n getTextColor() {\n return ColorHelper.getPreferredColor(this.node.collection.color) === PreferredColor.Black\n ? '#000'\n : '#fff';\n }\n optionsOnCard() {\n const options = this.entriesService.options?.[Target.List];\n const always = options?.filter((o) => o.showAlways);\n if (always?.some((o) => o.showCallback([this.node]))) {\n return always;\n }\n // we do NOT show any additional actions\n return [];\n // return options.filter((o) => o.showAsAction && o.showCallback(this.node)).slice(0, 3);\n }\n\n openContextmenu(event: MouseEvent | Event, node: T) {\n event.stopPropagation();\n event.preventDefault();\n if (!this.dropdown) {\n // Call `preventDefault()` even when there is no menu, so we can use `cdkDrag` with a\n // start delay without being interrupted by the standard long-tap action.\n return;\n }\n if (event instanceof MouseEvent) {\n ({ clientX: this.dropdownLeft, clientY: this.dropdownTop } = event);\n } else {\n ({ x: this.dropdownLeft, y: this.dropdownTop } = (\n event.target as HTMLElement\n ).getBoundingClientRect());\n }\n this.entriesService.openDropdown(this.dropdown, node, () => this.menuTrigger.openMenu());\n }\n\n getVisibleColumns() {\n return this.entriesService.columns?.filter((c) => c.visible);\n }\n\n async openMenu(node: T) {\n this.entriesService.openDropdown(this.dropdown, node);\n }\n\n async ngOnInit() {\n await this.configService.observeConfig().pipe(take(1)).toPromise();\n this.showRatings.next(\n this.configService.instant('rating.mode', 'none') !== 'none' &&\n (await this.authenticationService.hasToolpermission(\n RestConstants.TOOLPERMISSION_RATE_READ,\n )),\n );\n }\n\n getTemplate(name: CustomFieldSpecialType) {\n return this.nodeEntriesGlobalService.getCustomFieldTemplate(\n {\n type: 'NODE',\n name,\n },\n this.node as Node,\n );\n }\n}\n","<div\n [class]=\"\n 'grid-card' +\n (isCollection\n ? ' grid-card-collection grid-card-collection-scope-' +\n node.collection.scope +\n ' grid-card-collection-type-' +\n node.collection.type\n : '') +\n ($any(node).virtual ? ' grid-card-virtual' : '') +\n ' ' +\n nodeEntriesGlobalService.getCustomCssClass(node)\n \"\n [style.background-color]=\"isCollection ? node.collection.color : null\"\n [class.dynamic-single-click]=\"entriesService.singleClickHint === 'dynamic'\"\n [class.selected]=\"entriesService.selection.isSelected(node)\"\n (contextmenu)=\"openContextmenu($event, node)\"\n (keydown.ContextMenu)=\"openContextmenu($event, node)\"\n>\n <div\n *ngIf=\"templatesService.overlay\"\n class=\"card-overlay\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Overlay,\n })\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"templatesService.overlay; context: { element: node }\"\n ></ng-container>\n </div>\n <button\n *ngIf=\"dropdown\"\n #menuTrigger=\"matMenuTrigger\"\n mat-button\n class=\"dropdown-dummy cdk-visually-hidden\"\n [style.left.px]=\"dropdownLeft\"\n [style.top.px]=\"dropdownTop\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n ></button>\n <div class=\"card-top-bar\" [style.background-color]=\"isCollection ? node.collection.color : null\">\n <div class=\"card-top-bar-collection-color\" *ngIf=\"nodeHelper.isNodeCollection(node)\"></div>\n <es-node-type-badge [node]=\"node\"></es-node-type-badge>\n <div *ngIf=\"isCollection && node.collection.pinned\" class=\"card-top-bar-flag\">\n <i esIcon=\"edu-pin\"></i>\n </div>\n <div class=\"card-top-bar-empty\"></div>\n <es-node-stats-badges [node]=\"node\"></es-node-stats-badges>\n <div class=\"card-top-bar-checkbox\" *ngIf=\"entriesService.checkbox\">\n <mat-checkbox\n [checked]=\"entriesService.selection.isSelected(node)\"\n (change)=\"entriesService.onCheckboxChanged(node, $event.checked)\"\n color=\"primary\"\n aria-label=\"{{ 'SELECT' | translate : { element: (node | nodeTitle) } }}\"\n ></mat-checkbox>\n </div>\n </div>\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n mode=\"wrapper\"\n [node]=\"node\"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </es-node-url>\n <div\n *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\"\n matRipple\n (click)=\"\n entriesService.onClicked({\n event: $event,\n element: node,\n source: ClickSource.Metadata,\n })\n \"\n (dblclick)=\"\n entriesService.dblClickItem.emit({\n element: node,\n source: ClickSource.Metadata,\n })\n \"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </div>\n <div class=\"card-options\" *ngIf=\"entriesService.options || showRatings\">\n <div class=\"card-rating-area\">\n <es-node-rating [node]=\"node\"></es-node-rating>\n </div>\n <div class=\"card-options-area\">\n <es-option-button\n *ngFor=\"let option of optionsOnCard()\"\n class=\"card-options-always\"\n [option]=\"option\"\n [node]=\"node\"\n ></es-option-button>\n <div class=\"card-options-spacer\"></div>\n <button\n *ngIf=\"dropdown\"\n mat-icon-button\n color=\"primary\"\n (click)=\"openMenu(node)\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n [attr.aria-label]=\"'OPTIONS_FOR' | translate : { element: (node | nodeTitle) }\"\n data-test=\"card-options-button\"\n >\n <i esIcon=\"more_vert\"></i>\n </button>\n </div>\n </div>\n <ng-template #image let-playAnimation=\"playAnimation\">\n <div\n class=\"card-image-area\"\n [style.background-color]=\"isCollection ? node.collection.color : null\"\n >\n <ng-container *ngIf=\"getTemplate(CustomFieldSpecialType.preview) as ref\">\n <ng-container *ngTemplateOutlet=\"ref; context: { node: node }\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!getTemplate(CustomFieldSpecialType.preview)\">\n <es-preview-image\n *ngIf=\"!(isCollection && node.preview.isIcon)\"\n [node]=\"node\"\n [playAnimation]=\"playAnimation\"\n ></es-preview-image>\n <div *ngIf=\"isCollection && node.preview.isIcon\" class=\"card-collection-image\">\n <i esIcon=\"layers\"></i>\n </div>\n </ng-container>\n </div>\n </ng-template>\n <ng-template #meta let-link=\"link\">\n <div class=\"card-meta\">\n <div\n *ngFor=\"let displayPart of getVisibleColumns(); let first = first\"\n class=\"card-meta-row card-meta-row-{{ displayPart.name | lowercase | propertySlug }}\"\n [class.card-meta-row-primary]=\"first\"\n >\n <ng-container *ngIf=\"first\">\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n [node]=\"node\"\n #link\n >\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </es-node-url>\n <div *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!first\">\n <label>\n {{ displayPart | esListItemLabel | async }}\n </label>\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </ng-container>\n </div>\n </div>\n </ng-template>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { Target } from '../../types/option-item';\nimport { ClickSource, InteractionType } from '../entries-model';\n\nimport { NodeEntriesTemplatesService } from '../node-entries-templates.service';\nimport { NodeEntriesService } from '../../services/node-entries.service';\nimport { NodeHelperService } from '../../services/node-helper.service';\nimport { Node } from 'ngx-edu-sharing-api';\n\n@Component({\n selector: 'es-node-entries-card-small',\n templateUrl: 'node-entries-card-small.component.html',\n styleUrls: ['node-entries-card-small.component.scss'],\n standalone: false,\n})\nexport class NodeEntriesCardSmallComponent<T extends Node> {\n readonly ClickSource = ClickSource;\n readonly InteractionType = InteractionType;\n readonly Target = Target;\n @Input() node: T;\n constructor(\n public entriesService: NodeEntriesService<T>,\n public nodeHelper: NodeHelperService,\n public templatesService: NodeEntriesTemplatesService,\n ) {}\n\n optionsOnCard() {\n const options = this.entriesService.options[Target.List];\n const always = options.filter((o) => o.showAlways);\n if (always.some((o) => o.showCallback([this.node]))) {\n return always;\n }\n return options.filter((o) => o.showAsAction && o.showCallback([this.node])).slice(0, 3);\n }\n\n openContextmenu(event: MouseEvent | Event) {\n event.preventDefault();\n event.stopPropagation();\n }\n}\n","<div\n [class]=\"\n 'grid-card' +\n (nodeHelper.isNodeCollection(node)\n ? ' grid-card-collection grid-card-collection-scope-' +\n node.collection.scope +\n ' grid-card-collection-type-' +\n node.collection.type\n : '') +\n ($any(node).virtual ? ' grid-card-virtual' : '') +\n ' ' +\n (entriesService.singleClickHint === 'dynamic' ? ' dynamic-single-click' : '')\n \"\n [style.background-color]=\"nodeHelper.isNodeCollection(node) ? node.collection.color : null\"\n (contextmenu)=\"openContextmenu($event)\"\n (keydown.ContextMenu)=\"openContextmenu($event)\"\n>\n <div\n *ngIf=\"templatesService.overlay\"\n class=\"card-overlay\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Overlay,\n })\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"templatesService.overlay; context: { element: node }\"\n ></ng-container>\n </div>\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n mode=\"wrapper\"\n [node]=\"node\"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </es-node-url>\n <ng-container *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <ng-container *ngTemplateOutlet=\"image\"></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </ng-container>\n</div>\n<ng-template #image let-playAnimation=\"playAnimation\">\n <div\n class=\"card-image-area\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Preview,\n })\n \"\n >\n <div *ngIf=\"nodeHelper.isNodeCollection(node) && node.collection.pinned\" class=\"collection-pin\">\n <i esIcon=\"edu-pin\"></i>\n </div>\n <es-preview-image\n *ngIf=\"!(nodeHelper.isNodeCollection(node) && node.preview.isIcon)\"\n [node]=\"node\"\n [playAnimation]=\"playAnimation\"\n ></es-preview-image>\n <div\n *ngIf=\"nodeHelper.isNodeCollection(node) && node.preview.isIcon\"\n class=\"card-collection-image\"\n >\n <i esIcon=\"layers\"></i>\n </div>\n </div>\n</ng-template>\n<ng-template #meta>\n <div\n class=\"card-meta\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Metadata,\n })\n \"\n >\n <div\n *ngFor=\"let displayPart of entriesService.columns; let first = first\"\n class=\"card-meta-row\"\n >\n <ng-container *ngIf=\"first\">\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n [node]=\"node\"\n #link\n >\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </es-node-url>\n <div *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!first\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </ng-container>\n </div>\n </div>\n <ng-container\n *ngTemplateOutlet=\"templatesService.actionArea; context: { element: node }\"\n ></ng-container>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { Node } from 'ngx-edu-sharing-api';\nimport { NodeEntriesDisplayType } from '../entries-model';\nimport { NodeEntriesService } from '../../services/node-entries.service';\nimport { map } from 'rxjs/operators';\n\n@Component({\n selector: 'es-node-entries-global-options',\n templateUrl: './node-entries-global-options.component.html',\n styleUrls: ['./node-entries-global-options.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class NodeEntriesGlobalOptionsComponent<T extends Node> {\n readonly NodeEntriesDisplayType = NodeEntriesDisplayType;\n @Input() displayType: NodeEntriesDisplayType;\n constructor(public entriesService: NodeEntriesService<T>) {}\n\n getEnabledOptions() {\n return this.entriesService.globalOptionsSubject.pipe(\n map((options) => options.filter((e) => e.isEnabled)),\n );\n }\n}\n","<div\n *ngIf=\"(getEnabledOptions() | async)?.length\"\n role=\"listitem\"\n class=\"global-options\"\n [class.global-options-small]=\"displayType === NodeEntriesDisplayType.SmallGrid\"\n [class.global-options-table]=\"displayType === NodeEntriesDisplayType.Table\"\n>\n <button\n mat-button\n *ngFor=\"let option of getEnabledOptions() | async\"\n (click)=\"option.callback()\"\n class=\"global-option-btn\"\n attr.data-test=\"card-button-{{ option.name }}\"\n >\n <ng-container *ngTemplateOutlet=\"globalOption; context: { option: option }\"></ng-container>\n </button>\n</div>\n<ng-template #globalOption let-option=\"option\">\n <span class=\"global-option\">\n <i [esIcon]=\"option.icon\"></i>\n <span class=\"label\">{{ option.name | translate }}</span>\n </span>\n</ng-template>\n","import { CdkDragEnter, CdkDropList, moveItemInArray } from '@angular/cdk/drag-drop';\nimport {\n ChangeDetectionStrategy,\n Component,\n effect,\n ElementRef,\n HostBinding,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n QueryList,\n TemplateRef,\n ViewChild,\n ViewChildren,\n} from '@angular/core';\nimport { Sort } from '@angular/material/sort';\nimport { Node, RestConstants } from 'ngx-edu-sharing-api';\nimport * as rxjs from 'rxjs';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { distinctUntilChanged, map, switchMap, take, takeUntil } from 'rxjs/operators';\nimport { GridLayout, NodeEntriesDisplayType } from '../entries-model';\nimport { ItemsCap } from '../items-cap';\nimport { NodeEntriesGlobalService } from '../node-entries-global.service';\nimport { NodeEntriesTemplatesService } from '../node-entries-templates.service';\nimport { SortSelectPanelComponent } from '../sort-select-panel/sort-select-panel.component';\nimport { CustomTemplatesDataSource } from '../custom-templates-data-source';\nimport { Target } from '../../types/option-item';\nimport { NodeEntriesService } from '../../services/node-entries.service';\nimport { UIService } from '../../services/ui.service';\nimport { ListItemSort } from '../../types/list-item';\nimport { DragData } from '../../types/drag-drop';\nimport { CdkOverlayOrigin } from '@angular/cdk/overlay';\nimport { NodeHelperService } from '../../services/node-helper.service';\n\nlet displayedWarnings: string[] = [];\n\n@Component({\n selector: 'es-node-entries-card-grid',\n templateUrl: 'node-entries-card-grid.component.html',\n styleUrls: ['node-entries-card-grid.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class NodeEntriesCardGridComponent<T extends Node> implements OnInit, OnDestroy {\n readonly NodeEntriesDisplayType = NodeEntriesDisplayType;\n readonly Target = Target;\n /**\n * relative scrolling when a scrolling arrow (left or right) is used\n * a value of 1 would mean to scroll the full width of the entire content\n */\n readonly ScrollingOffsetPercentage = 0.4;\n\n columnChooserVisible$ = new BehaviorSubject(false);\n @ViewChild('columnChooserTrigger') columnChooserTrigger: CdkOverlayOrigin;\n @ViewChild('gridTop', { static: true }) set gridTop(value: TemplateRef<unknown>) {\n this.registerGridTop(value);\n }\n @ViewChild(SortSelectPanelComponent)\n set sortPanel(value: SortSelectPanelComponent) {\n // if (this.entriesService.dataSource instanceof NodeDataSourceRemote) {\n setTimeout(() => {\n (this.entriesService.dataSource as any).sortPanel = value;\n });\n // }\n }\n @ViewChildren(CdkDropList) dropListsQuery: QueryList<CdkDropList>;\n @ViewChild('grid') gridRef: ElementRef;\n @ViewChildren('item', { read: ElementRef }) itemRefs: QueryList<ElementRef<HTMLElement>>;\n @Input() displayType: NodeEntriesDisplayType;\n\n isDragging = false; // Drag-and-drop, not rearrange\n dropLists: CdkDropList[];\n /**\n * Whether the number of shown items is limited by `gridConfig.maxRows`.\n *\n * A value of `true` does not mean, that there would be more items available.\n */\n visibleItemsLimited = false;\n layout: GridLayout;\n /**\n * updates via boxObserver\n * and holds the information if scrolling in the direction is currently feasible\n */\n scroll = {\n left: false,\n right: false,\n };\n\n readonly nodes$;\n private readonly maxRows$;\n private readonly layout$;\n private readonly itemsPerRowSubject = new BehaviorSubject<number | null>(null);\n readonly itemsCap = new ItemsCap<T>();\n private globalCursorStyle: HTMLStyleElement;\n private destroyed = new Subject<void>();\n @HostBinding('style.--scroll-gradient-color') scrollGradientColor: string;\n\n constructor(\n public entriesService: NodeEntriesService<T>,\n public entriesGlobalService: NodeEntriesGlobalService,\n public templatesService: NodeEntriesTemplatesService,\n public nodeHelperService: NodeHelperService,\n public ui: UIService,\n private ngZone: NgZone,\n ) {\n this.nodes$ = this.entriesService.dataSource$.pipe(\n switchMap((dataSource) => dataSource?.connect()),\n );\n this.maxRows$ = this.entriesService.gridConfig$.pipe(\n map((gridConfig) => gridConfig?.maxRows || null),\n distinctUntilChanged(),\n );\n this.layout$ = this.entriesService.gridConfig$.pipe(\n map((gridConfig) => gridConfig?.layout || 'grid'),\n distinctUntilChanged(),\n );\n this.entriesService.dataSource$.pipe(takeUntil(this.destroyed)).subscribe(() => {\n this.updateScrollState();\n });\n effect(() => (this.scrollGradientColor = this.entriesService.scrollGradientColor()));\n }\n\n ngOnInit(): void {\n this.registerItemsCap();\n this.registerLayout();\n this.registerVisibleItemsLimited();\n }\n\n ngOnDestroy(): void {\n this.destroyed.next();\n this.destroyed.complete();\n }\n\n private registerGridTop(gridTop: TemplateRef<unknown>): void {\n setTimeout(() => {\n this.templatesService.entriesTopMatter = gridTop;\n });\n this.destroyed.subscribe(() => {\n if (this.templatesService.entriesTopMatter === gridTop) {\n setTimeout(() => {\n this.templatesService.entriesTopMatter = null;\n });\n }\n });\n }\n\n private registerItemsCap() {\n this.entriesService.dataSource$\n .pipe(takeUntil(this.destroyed))\n .subscribe((dataSource) => (dataSource.itemsCap = this.itemsCap));\n rxjs.combineLatest([this.itemsPerRowSubject.pipe(distinctUntilChanged()), this.maxRows$])\n .pipe(\n map(([itemsPerRow, maxRows]) =>\n maxRows > 0 && itemsPerRow !== null ? itemsPerRow * maxRows : null,\n ),\n )\n .subscribe((cap) => (this.itemsCap.cap = cap));\n }\n\n private registerLayout() {\n this.layout$.subscribe((layout) => (this.layout = layout));\n }\n\n onSortChange(sort: Sort) {\n this.entriesService.sort.active = sort.active;\n this.entriesService.sort.direction = sort.direction;\n this.entriesService.sortChange.emit(this.entriesService.sort);\n }\n\n loadData(source: 'scroll' | 'button') {\n // @TODO: Maybe this is better handled in a more centraled service\n if (source === 'scroll') {\n // check if there is a footer\n const elements = document.getElementsByTagName('footer');\n if (elements.length && elements.item(0).innerHTML.trim()) {\n return;\n }\n }\n const couldLoadMore = this.entriesService.loadMore(source);\n if (couldLoadMore && source === 'button') {\n this.focusFirstNewItemWhenLoaded();\n }\n }\n\n onCustomSortingInProgressChange() {\n this.entriesService.sortChange.emit(this.entriesService.sort);\n setTimeout(() => {\n this.refreshDropLists();\n });\n }\n\n onRearrangeDragEntered($event: CdkDragEnter) {\n moveItemInArray(\n this.entriesService.dataSource.getData(),\n $event.item.data,\n $event.container.data,\n );\n // `CdkDrag` doesn't really want us to rearrange the items while dragging. Its cached\n // element positions get out of sync unless we update them manually.\n this.ngZone.runOutsideAngular(() =>\n setTimeout(() =>\n this.dropLists?.forEach((list) => (list._dropListRef as any)['_cacheItems']()),\n ),\n );\n }\n\n onRearrangeDragStarted() {\n this.globalCursorStyle = document.createElement('style');\n document.body.appendChild(this.globalCursorStyle);\n this.globalCursorStyle.innerHTML = `* {cursor: grabbing !important; }`;\n }\n\n onRearrangeDragEnded() {\n document.body.removeChild(this.globalCursorStyle);\n this.globalCursorStyle = null;\n }\n\n getDragStartDelay(): number {\n if (this.ui.isMobile()) {\n return 500;\n } else {\n return null;\n }\n }\n\n private registerVisibleItemsLimited() {\n this.maxRows$.subscribe((maxRows) => {\n this.visibleItemsLimited = maxRows > 0;\n });\n }\n\n private refreshDropLists() {\n this.dropLists = this.dropListsQuery.toArray();\n }\n\n private focusFirstNewItemWhenLoaded() {\n const oldLength = this.itemRefs.length;\n this.itemRefs.changes\n .pipe(take(1))\n .subscribe((items: NodeEntriesCardGridComponent<T>['itemRefs']) => {\n if (items.length > oldLength) {\n this.focusOnce(items.get(oldLength).nativeElement);\n }\n });\n }\n\n private focusOnce(element: HTMLElement): void {\n element.setAttribute('tabindex', '-1');\n element.focus();\n element.addEventListener('blur', () => element.removeAttribute('tabindex'), { once: true });\n }\n\n onGridSizeChanges(): void {\n const itemsPerRow = this.getItemsPerRow();\n this.itemsPerRowSubject.next(itemsPerRow);\n this.updateScrollState();\n }\n\n private getItemsPerRow(): number | null {\n if (!this.gridRef?.nativeElement) {\n return null;\n }\n return getComputedStyle(this.gridRef.nativeElement)\n .getPropertyValue('grid-template-columns')\n .split(' ').length;\n }\n\n getSortColumns() {\n return this.entriesService.sort?.columns?.filter((c) => {\n const result = this.entriesService.columns\n .concat(\n new ListItemSort('NODE', 'score'),\n new ListItemSort('NODE', RestConstants.CCM_PROP_COLLECTION_ORDERED_POSITION),\n new ListItemSort('NODE', RestConstants.CM_PROP_TITLE),\n new ListItemSort('NODE', RestConstants.CM_NAME),\n new ListItemSort('NODE', RestConstants.CM_PROP_C_CREATED),\n new ListItemSort('NODE', RestConstants.CM_MODIFIED_DATE),\n new ListItemSort('NODE', RestConstants.CCM_PROP_REPLICATIONMODIFIED),\n new ListItemSort('NODE', RestConstants.CCM_PROP_REPLICATIONSOURCETIMESTAMP),\n )\n .some((c2) => c.type === c2.type && c2.name === c.name);\n if (!result && !this.entriesService.configureColumns) {\n return this.entriesService.sort?.columns;\n /*\n const warning =\n 'Sort field ' +\n c.name +\n ' was specified but is not present as a column. ' +\n 'It will be ignored. Please also configure this field in the <lists> section';\n if (!displayedWarnings.includes(warning)) {\n console.warn(warning);\n displayedWarnings.push(warning);\n }*/\n }\n return result;\n });\n }\n\n canDropNodes = (dragData: DragData<T>) => this.entriesService.dragDrop.dropAllowed?.(dragData);\n\n onNodesDropped(dragData: DragData<Node>) {\n this.entriesService.dragDrop.dropped(dragData.target, {\n element: dragData.draggedNodes,\n mode: dragData.action,\n });\n }\n\n getDragEnabled() {\n return this.ui.isTouchSubject.pipe(\n map((touch) => !touch && this.entriesService.dragDrop?.dragAllowed),\n );\n }\n\n getDragData(node: T): T[] {\n const selection = this.entriesService.selection;\n if (selection.isSelected(node)) {\n return selection.selected;\n } else {\n return [node];\n }\n }\n\n onDragStarted(node: T) {\n if (!this.entriesService.selection.isSelected(node)) {\n this.entriesService.selection.clear();\n this.entriesService.selection.select(node);\n }\n this.isDragging = true;\n }\n\n onDragEnded() {\n this.isDragging = false;\n }\n\n private canScroll(direction: 'left' | 'right') {\n const element = this.gridRef?.nativeElement;\n if (element) {\n if (direction === 'left') {\n return element.scrollLeft > 0;\n } else if (direction === 'right') {\n /*\n use a small pixel buffer (10px) because scrolling aligns with the start of each card and\n it can cause slight alignment issues on the end of the container\n */\n return element.scrollLeft < element.scrollWidth - element.clientWidth - 10;\n }\n }\n return false;\n }\n\n updateScrollState() {\n if (this.layout === 'scroll') {\n this.scroll.left = this.canScroll('left');\n this.scroll.right = this.canScroll('right');\n }\n }\n\n doScroll(direction: 'left' | 'right') {\n // 1 is enough because the browser will handle it via css snapping\n const leftScroll = this.gridRef?.nativeElement.scrollLeft;\n const rect = this.gridRef?.nativeElement.getBoundingClientRect();\n // using scroll because it works more reliable than scrollBy\n this.gridRef?.nativeElement.scroll({\n left:\n leftScroll +\n Math.max(250, rect.width * this.ScrollingOffsetPercentage) *\n (direction === 'right' ? 1 : -1),\n behavior: 'smooth',\n });\n }\n\n isCustomTemplate(node: T) {\n return (\n this.entriesService.dataSource instanceof CustomTemplatesDataSource ||\n (node as any).elementRef\n );\n }\n\n isBlocked(node: Node) {\n return (\n node.properties?.[RestConstants.CCM_PROP_IMPORT_BLOCKED]?.[0] === 'true' ||\n this.nodeHelperService.isNodeRevoked(node)\n );\n }\n}\n","<ng-template #gridTop>\n <button\n *ngIf=\"entriesService.configureColumns\"\n mat-icon-button\n (click)=\"columnChooserVisible$.next(!columnChooserVisible$.value)\"\n cdkOverlayOrigin\n #columnChooserTrigger=\"cdkOverlayOrigin\"\n [matTooltip]=\"'LIST_TABLE.CONFIGURE_COLUMNS' | translate\"\n [attr.aria-label]=\"'LIST_TABLE.CONFIGURE_COLUMNS' | translate\"\n >\n <i esIcon=\"settings\"></i>\n </button>\n <es-sort-select-panel\n *ngIf=\"entriesService.sort?.allowed\"\n class=\"order-panel\"\n [active]=\"entriesService.sort.active\"\n [direction]=\"entriesService.sort.direction\"\n [columns]=\"getSortColumns()\"\n (sortChange)=\"onSortChange($event)\"\n [(customSortingInProgress)]=\"entriesService.sort.customSortingInProgress\"\n (customSortingInProgressChange)=\"onCustomSortingInProgressChange()\"\n ></es-sort-select-panel>\n</ng-template>\n<es-column-chooser\n *ngIf=\"entriesService.configureColumns\"\n [(columns)]=\"entriesService.columns\"\n [columnChooserVisible]=\"columnChooserVisible$ | async\"\n [origin]=\"columnChooserTrigger\"\n (columnChooserVisibleChange)=\"columnChooserVisible$.next($event)\"\n></es-column-chooser>\n<es-dropdown #dropdown [options]=\"entriesService.options?.[Target.ListDropdown]\"></es-dropdown>\n\n<!-- Do not render the list element (`role=\"list\"` or `li`) when there are no list items. -->\n<ng-container\n *ngIf=\"(nodes$ | async)?.length > 0 || (entriesService.globalOptionsSubject | async)?.length > 0\"\n>\n <!-- FIXME: Ideally, we would use native `ul` and `li` elements, but these have a strict model,\n that only allows `li` elements as direct children of `ul` elements. So we would need to use the\n native elements at all places without any elements between `ul` and `li`. -->\n <div\n *ngIf=\"entriesService.sort?.customSortingInProgress\"\n role=\"list\"\n class=\"card-grid card-grid-reorder\"\n cdkDropListGroup\n >\n <ng-container *ngIf=\"nodes$ | async as nodes\">\n <div\n class=\"card-grid-order-wrapper\"\n *ngFor=\"let node of nodes; let i = index\"\n role=\"none\"\n cdkDropList\n [cdkDropListConnectedTo]=\"dropLists\"\n [cdkDropListData]=\"i\"\n >\n <es-node-entries-card\n *ngIf=\"displayType === NodeEntriesDisplayType.Grid\"\n #item\n [node]=\"node\"\n role=\"listitem\"\n cdkDrag\n [cdkDragData]=\"i\"\n [cdkDragStartDelay]=\"getDragStartDelay()\"\n cdkDragPreviewClass=\"es-card-grid-rearrange-drag-preview\"\n (cdkDragEntered)=\"onRearrangeDragEntered($event)\"\n (cdkDragStarted)=\"onRearrangeDragStarted()\"\n (cdkDragEnded)=\"onRearrangeDragEnded()\"\n ></es-node-entries-card>\n <es-node-entries-card-small\n *ngIf=\"displayType === NodeEntriesDisplayType.SmallGrid\"\n #item\n [node]=\"node\"\n role=\"listitem\"\n cdkDrag\n [cdkDragData]=\"i\"\n [cdkDragStartDelay]=\"getDragStartDelay()\"\n cdkDragPreviewClass=\"es-card-grid-rearrange-drag-preview\"\n (cdkDragEntered)=\"onRearrangeDragEntered($event)\"\n (cdkDragStarted)=\"onRearrangeDragStarted()\"\n (cdkDragEnded)=\"onRearrangeDragEnded()\"\n ></es-node-entries-card-small>\n </div>\n </ng-container>\n </div>\n <div class=\"card-grid-wrapper\" *ngIf=\"!entriesService.sort?.customSortingInProgress\">\n <ng-container *ngTemplateOutlet=\"scrollHelper\"></ng-container>\n <div\n role=\"list\"\n class=\"card-grid card-grid-layout-{{ layout }}\"\n #grid\n (esBorderBoxObserver)=\"onGridSizeChanges()\"\n esInfiniteScroll\n (scroll)=\"updateScrollState()\"\n (scrolled)=\"!visibleItemsLimited && loadData('scroll')\"\n >\n <es-node-entries-global-options\n *ngIf=\"(entriesService.globalOptionsSubject | async)?.length\"\n [displayType]=\"displayType\"\n >\n </es-node-entries-global-options>\n <ng-container *ngIf=\"nodes$ | async as nodes\">\n <div\n class=\"card-grid-drag-wrapper\"\n *ngFor=\"let node of nodes; let i = index\"\n role=\"none\"\n [esNodesDropTarget]=\"node\"\n [canDropNodes]=\"canDropNodes\"\n (nodeDropped)=\"onNodesDropped($event)\"\n #dropTarget=\"esNodesDropTarget\"\n >\n <ng-container *ngIf=\"isCustomTemplate(node)\">\n <ng-container *ngTemplateOutlet=\"$any(node)\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!isCustomTemplate(node)\">\n <es-node-entries-card\n *ngIf=\"displayType === NodeEntriesDisplayType.Grid\"\n #item\n [node]=\"node\"\n [dropdown]=\"dropdown\"\n role=\"listitem\"\n cdkDrag\n [cdkDragDisabled]=\"(getDragEnabled() | async) === false\"\n [cdkDragData]=\"getDragData(node)\"\n esNodesDrag\n (cdkDragStarted)=\"onDragStarted(node)\"\n (cdkDragEnded)=\"onDragEnded()\"\n [class.card-import-blocked]=\"isBlocked(node)\"\n [class.selected-when-dragging]=\"\n isDragging && entriesService.selection.isSelected(node)\n \"\n >\n <ng-container *ngIf=\"entriesService.selection.selected.length > 1\">\n <es-node-entries-card\n *cdkDragPreview\n [node]=\"node\"\n [matBadge]=\"\n entriesService.selection.selected.length > 1\n ? entriesService.selection.selected.length\n : null\n \"\n class=\"card-drag-preview\"\n ></es-node-entries-card>\n </ng-container>\n </es-node-entries-card>\n <es-node-entries-card-small\n *ngIf=\"displayType === NodeEntriesDisplayType.SmallGrid\"\n #item\n [node]=\"node\"\n role=\"listitem\"\n cdkDrag\n [cdkDragDisabled]=\"(getDragEnabled() | async) === false\"\n [cdkDragData]=\"[node]\"\n esNodesDrag\n >\n </es-node-entries-card-small>\n </ng-container>\n <div\n *ngIf=\"dropTarget.active?.canDrop?.denyExplicit\"\n class=\"card-grid-drop-blocked-container\"\n >\n <i esIcon=\"cancel\"></i>\n </div>\n <div *ngIf=\"dropTarget.active?.canDrop?.accept\" class=\"card-grid-drop-allowed-container\">\n <i\n [esIcon]=\"dropTarget.active.action === 'copy' ? 'add_circle_outline' : 'archive'\"\n ></i>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n</ng-container>\n<ng-container\n *ngIf=\"\n !entriesService.dataSource.isLoading &&\n entriesService.dataSource.hasMore() &&\n !visibleItemsLimited &&\n entriesService.paginationStrategy === 'infinite-scroll' &&\n layout !== 'scroll'\n \"\n>\n <div class=\"load-more\">\n <button mat-button color=\"primary\" (click)=\"loadData('button')\">\n <i esIcon=\"refresh\"></i>\n <span>{{ 'LOAD_MORE' | translate }}</span>\n </button>\n </div>\n</ng-container>\n<ng-container\n *ngIf=\"\n entriesService.dataSource.isLoading === true ||\n entriesService.dataSource.isLoading === 'initial' ||\n (entriesService.dataSource.isLoading === 'page' &&\n entriesService.paginationStrategy === 'infinite-scroll')\n \"\n>\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n</ng-container>\n\n<ng-template #loading>\n <es-spinner></es-spinner>\n</ng-template>\n<ng-template #scrollHelper>\n <ng-container *ngIf=\"layout === 'scroll'\">\n <div\n class=\"scroll-helper-left\"\n role=\"presentation\"\n (click)=\"doScroll('left')\"\n *ngIf=\"scroll.left\"\n >\n <button mat-icon-button color=\"primary\" (click)=\"$event.stopPropagation(); doScroll('left')\">\n <i esIcon=\"keyboard_arrow_left\" [aria]=\"true\"></i>\n </button>\n </div>\n <div\n class=\"scroll-helper-right\"\n role=\"presentation\"\n (click)=\"doScroll('right')\"\n *ngIf=\"scroll.right\"\n >\n <button mat-icon-button color=\"primary\" (click)=\"$event.stopPropagation(); doScroll('right')\">\n <i esIcon=\"keyboard_arrow_right\" [aria]=\"true\"></i>\n </button>\n </div>\n </ng-container>\n</ng-template>\n","import { CdkOverlayOrigin } from '@angular/cdk/overlay';\nimport {\n AfterViewInit,\n ApplicationRef,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n NgZone,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { MatSort, Sort } from '@angular/material/sort';\nimport * as rxjs from 'rxjs';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport {\n debounceTime,\n delay,\n distinctUntilChanged,\n first,\n map,\n shareReplay,\n startWith,\n takeUntil,\n} from 'rxjs/operators';\nimport {\n ClickSource,\n InteractionType,\n NodeEntriesDataType,\n NodeEntriesDisplayType,\n} from '../entries-model';\nimport { NodeEntriesGlobalService } from '../node-entries-global.service';\nimport { NodeEntriesService } from '../../services/node-entries.service';\nimport { UIService } from '../../services/ui.service';\nimport { BorderBoxObserverDirective } from '../../directives/border-box-observer.directive';\nimport { ListItem } from '../../types/list-item';\nimport { CanDrop, DragData } from '../../types/drag-drop';\nimport { Node, RestConstants } from 'ngx-edu-sharing-api';\nimport { Target } from '../../types/option-item';\nimport { Toast } from '../../services/abstract/toast.service';\nimport { DropdownComponent } from '../../dropdown/dropdown.component';\nimport { NodeDataSourceRemote } from '../node-data-source-remote';\nimport { TranslationsService } from '../../translations/translations.service';\nimport { NodeHelperService } from '../../services/node-helper.service';\n\n@Component({\n selector: 'es-node-entries-table',\n templateUrl: './node-entries-table.component.html',\n styleUrls: ['./node-entries-table.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class NodeEntriesTableComponent<T extends NodeEntriesDataType>\n implements OnChanges, AfterViewInit, OnDestroy\n{\n readonly InteractionType = InteractionType;\n readonly ClickSource = ClickSource;\n readonly NodeEntriesDisplayType = NodeEntriesDisplayType;\n readonly Target = Target;\n\n @ViewChild(MatSort) sort: MatSort;\n @ViewChild(MatPaginator) paginator: MatPaginator;\n @ViewChild('columnChooserTrigger') columnChooserTrigger: CdkOverlayOrigin;\n @ViewChild(DropdownComponent) dropdown: DropdownComponent;\n @ViewChild('menuTrigger') menuTrigger: MatMenuTrigger;\n\n dropdownLeft: number;\n dropdownTop: number;\n\n loading: Observable<boolean>;\n isPageSelected = new BehaviorSubject(false);\n isAllSelected = new BehaviorSubject(false);\n columnChooserVisible = false;\n columnChooserTriggerReady = false;\n error: Observable<any>;\n pageSizeOptions = [25, 50, 100];\n isDragging = false;\n\n private readonly maximumColumnsNumber$ = new BehaviorSubject(1);\n readonly visibleDataColumns$;\n readonly visibleColumnNames$;\n\n private destroyed = new Subject<void>();\n\n constructor(\n public entriesService: NodeEntriesService<T>,\n public entriesGlobalService: NodeEntriesGlobalService,\n private applicationRef: ApplicationRef,\n private toast: Toast,\n private translations: TranslationsService,\n private nodeHelperService: NodeHelperService,\n private changeDetectorRef: ChangeDetectorRef,\n public ui: UIService,\n private ngZone: NgZone,\n private elementRef: ElementRef<HTMLElement>,\n ) {\n this.visibleDataColumns$ = this.getVisibleDataColumns();\n this.visibleColumnNames$ = this.getVisibleColumnNames();\n this.registerMaximumColumnsNumber();\n this.entriesService.selection.changed\n .pipe(takeUntil(this.destroyed), debounceTime(0))\n .subscribe(() => this.changeDetectorRef.detectChanges());\n }\n\n ngAfterViewInit(): void {\n void Promise.resolve().then(() => {\n this.registerSortChanges();\n if (this.entriesService.dataSource instanceof NodeDataSourceRemote) {\n (this.entriesService.dataSource as NodeDataSourceRemote).sortPanel = this.sort;\n }\n });\n this.visibleDataColumns$\n .pipe(first(), delay(0))\n .subscribe(() => (this.columnChooserTriggerReady = true));\n rxjs.combineLatest([\n this.entriesService.dataSource$.pipe(startWith(void 0 as void)),\n this.entriesService.options$.pipe(startWith(void 0 as void)),\n this.entriesService.dataSource.isLoadingSubject.pipe(startWith(void 0 as void)),\n this.entriesService.selection.changed.pipe(startWith(void 0 as void)),\n this.translations.waitForInit().pipe(startWith(void 0 as void)),\n ])\n .pipe(takeUntil(this.destroyed))\n .subscribe(() => {\n this.changeDetectorRef.detectChanges();\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n this.updateSort();\n }\n\n ngOnDestroy(): void {\n this.destroyed.next();\n this.destroyed.complete();\n }\n\n onRowContextMenu({ event, node }: { event: MouseEvent | Event; node: T }) {\n event.stopPropagation();\n event.preventDefault();\n if (!this.dropdown) {\n // Call `preventDefault()` even when there is no menu, so we can use `cdkDrag` with a\n // start delay without being interrupted by the standard long-tap action.\n return;\n }\n if (event instanceof MouseEvent) {\n ({ clientX: this.dropdownLeft, clientY: this.dropdownTop } = event);\n } else {\n ({ x: this.dropdownLeft, y: this.dropdownTop } = (\n event.target as HTMLElement\n ).getBoundingClientRect());\n }\n this.entriesService.openDropdown(this.dropdown, node, () => this.menuTrigger.openMenu());\n }\n\n private updateSort(): void {\n this.sort.sort({\n id: this.entriesService.sort?.active,\n start: this.entriesService.sort?.direction as 'asc' | 'desc',\n disableClear: false,\n });\n /*\n this.route.queryParams.pipe(first()).subscribe((queryParams: Params) => {\n const sort: Sort = queryParams.sort ? JSON.parse(queryParams.sort) : null;\n if (sort && sort.direction) {\n this.sort.sort({ id: sort.active, start: sort.direction, disableClear: false });\n // Fix missing sorting indicators. See\n // https://github.com/angular/components/issues/10242#issuecomment-470726829. Seems\n // to be fixed upstream with Angular 11.\n (\n this.sort.sortables.get(sort.active) as MatSortHeader\n )._setAnimationTransitionState({\n toState: 'active',\n });\n }\n if (queryParams.pageIndex && queryParams.pageSize) {\n this.paginator.pageIndex = queryParams.pageIndex;\n this.paginator.pageSize = queryParams.pageSize;\n }\n });\n */\n }\n\n private registerMaximumColumnsNumber() {\n BorderBoxObserverDirective.observeElement(this.elementRef)\n .pipe(\n takeUntil(this.destroyed),\n map((box) => this.getMaximumColumnsNumber(box.width)),\n distinctUntilChanged(),\n )\n .subscribe((maximumColumnsNumber) =>\n this.ngZone.run(() => this.maximumColumnsNumber$.next(maximumColumnsNumber)),\n );\n }\n\n private getMaximumColumnsNumber(tableWidth: number): number {\n return Math.max(\n 1,\n Math.floor(\n // Subtract total width of always visible columns like checkboxes and icons.\n (tableWidth - 187) /\n // Divide by with of data columns (including margin).\n 126,\n ),\n );\n }\n\n private getVisibleDataColumns(): Observable<ListItem[]> {\n return rxjs\n .combineLatest([\n this.maximumColumnsNumber$,\n this.entriesService.columnsSubject.pipe(map((c) => c?.columns)),\n ])\n .pipe(\n map(([maximumColumnsNumber, columns]) => {\n return (columns ?? [])\n .filter((column) => column.visible)\n .filter((_, index) => index < maximumColumnsNumber);\n }),\n shareReplay(1),\n );\n }\n\n private getVisibleColumnNames(): Observable<string[]> {\n return this.visibleDataColumns$.pipe(\n map((visibleDataColumns) => {\n const columns = [];\n if (this.entriesService.checkbox) {\n columns.push('select');\n }\n columns.push('icon');\n return columns.concat(visibleDataColumns.map((c) => c.name)).concat(['actions']);\n }),\n shareReplay(1),\n );\n }\n\n isSortable(column: ListItem) {\n return this.entriesService.sort?.columns?.some(\n (c) => c.type === column.type && c.name === column.name,\n );\n }\n\n toggleAll(checked: boolean) {\n if (checked) {\n this.entriesService.selection.select(...this.entriesService.dataSource.getData());\n } else {\n this.entriesService.selection.clear();\n }\n }\n\n private registerSortChanges() {\n this.sort.sortChange.subscribe((sort: Sort) => {\n this.entriesService.sort.active = sort.active;\n this.entriesService.sort.direction = sort.direction;\n this.entriesService.sortChange.emit(this.entriesService.sort);\n /*this.router.navigate(['.'], {\n relativeTo: this.route,\n queryParams: { sort: JSON.stringify(sort) },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });*/\n });\n /*\n this.paginator.page\n .pipe(\n // As a response to changes of other parameters, the pageIndex might be reset to 0 and a\n // page event triggers. This change of other parameters is likely to cause a\n // `router.navigate()` call elsewhere. When this happens just before our call, our\n // updates are ignored. To shield against this, we wait a tick.\n delay(0),\n )\n .subscribe(({ pageIndex, pageSize }: PageEvent) => {\n this.router.navigate(['.'], {\n relativeTo: this.route,\n queryParams: { pageIndex, pageSize },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n });\n */\n }\n\n canDrop = (dragData: DragData<T>): CanDrop => {\n return this.entriesService.dragDrop.dropAllowed?.(dragData);\n };\n\n drop(dragData: DragData<Node>) {\n this.entriesService.dragDrop.dropped(dragData.target, {\n element: dragData.draggedNodes,\n mode: dragData.action,\n });\n }\n\n getDragData(node: T): T[] {\n const selection = this.entriesService.selection;\n if (selection.isSelected(node)) {\n return selection.selected;\n } else {\n return [node];\n }\n }\n\n onDragStarted(node: T) {\n if (!this.entriesService.selection.isSelected(node)) {\n this.entriesService.selection.clear();\n this.entriesService.selection.select(node);\n }\n this.isDragging = true;\n }\n\n onDragEnded() {\n this.isDragging = false;\n }\n\n loadData(source: 'scroll' | 'button') {\n // TODO: focus next item when triggered via button.\n this.entriesService.loadMore(source);\n }\n\n async openMenu(node: T) {\n this.entriesService.openDropdown(this.dropdown, node);\n }\n\n isBlocked(node: Node) {\n return (\n node.properties?.[RestConstants.CCM_PROP_IMPORT_BLOCKED]?.[0] === 'true' ||\n this.nodeHelperService.isNodeRevoked(node)\n );\n }\n}\n","<es-dropdown #dropdown [options]=\"entriesService.options?.[Target.ListDropdown]\"></es-dropdown>\n<button\n #menuTrigger=\"matMenuTrigger\"\n mat-button\n class=\"dropdown-dummy cdk-visually-hidden\"\n [style.left.px]=\"dropdownLeft\"\n [style.top.px]=\"dropdownTop\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n></button>\n<es-node-entries-global-options\n *ngIf=\"(entriesService.globalOptionsSubject | async)?.length\"\n [displayType]=\"NodeEntriesDisplayType.Table\"\n>\n</es-node-entries-global-options>\n<mat-table\n [dataSource]=\"entriesService.dataSource\"\n matSort\n [matSortDisableClear]=\"true\"\n [matSortActive]=\"entriesService.sort?.active\"\n [matSortDirection]=\"entriesService.sort?.direction\"\n esInfiniteScroll\n (scrolled)=\"loadData('scroll')\"\n>\n <!-- Checkbox Column -->\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef>\n <mat-checkbox\n [ngModel]=\"entriesService.selection.selected.length > 0\"\n [indeterminate]=\"\n entriesService.selection.selected.length > 0 &&\n entriesService.selection.selected.length !== entriesService.dataSource.getData().length\n \"\n (ngModelChange)=\"toggleAll($event)\"\n color=\"primary\"\n aria-label=\"{{ 'LIST_TABLE.TOGGLE_ALL' | translate }}\"\n ></mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let node\">\n <mat-checkbox\n [checked]=\"entriesService.selection.isSelected(node)\"\n (change)=\"entriesService.onCheckboxChanged(node, $event.checked)\"\n aria-label=\"{{ 'SELECT' | translate : { element: (node | nodeTitle) } }}\"\n color=\"primary\"\n ></mat-checkbox>\n </mat-cell>\n </ng-container>\n <div matColumnDef=\"icon\">\n <mat-header-cell *matHeaderCellDef class=\"cell-icon cell-count\">\n ({{ entriesService.selection.selected.length\n }}<ng-container *ngIf=\"entriesService.dataSource?.getTotal() !== undefined\">\n / {{ entriesService.dataSource?.getTotal() }}</ng-container\n >)\n </mat-header-cell>\n <mat-cell *matCellDef=\"let node\" class=\"cell-icon\">\n <ng-container\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n >\n <ng-container *ngTemplateOutlet=\"icon; context: { node: node }\"></ng-container>\n </ng-container>\n <div\n *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\"\n (click)=\"\n entriesService.onClicked({ event: $event, element: node, source: ClickSource.Icon })\n \"\n (dblclick)=\"entriesService.dblClickItem.emit({ element: node, source: ClickSource.Icon })\"\n >\n <ng-container\n *ngTemplateOutlet=\"icon; context: { node: node }\"\n (click)=\"\n entriesService.onClicked({ event: $event, element: node, source: ClickSource.Icon })\n \"\n (dblclick)=\"entriesService.dblClickItem.emit({ element: node, source: ClickSource.Icon })\"\n ></ng-container>\n </div>\n </mat-cell>\n </div>\n <ng-container matColumnDef=\"actions\">\n <mat-header-cell *matHeaderCellDef>\n <button\n *ngIf=\"entriesService.configureColumns\"\n mat-icon-button\n (click)=\"columnChooserVisible = !columnChooserVisible\"\n cdkOverlayOrigin\n #columnChooserTrigger=\"cdkOverlayOrigin\"\n [matTooltip]=\"'LIST_TABLE.CONFIGURE_COLUMNS' | translate\"\n [attr.aria-label]=\"'LIST_TABLE.CONFIGURE_COLUMNS' | translate\"\n >\n <i esIcon=\"settings\"></i>\n </button>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let node\">\n <button\n mat-icon-button\n *ngIf=\"entriesService.options?.[Target.List]?.length\"\n color=\"primary\"\n (click)=\"openMenu(node)\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n >\n <i esIcon=\"more_vert\" [aria]=\"true\"></i>\n </button>\n </mat-cell>\n </ng-container>\n <!-- Data Columns -->\n <ng-container\n *ngFor=\"let column of visibleDataColumns$ | async; let first = first\"\n [matColumnDef]=\"column.name\"\n >\n <ng-container>\n <mat-header-cell\n *matHeaderCellDef\n mat-sort-header\n [disabled]=\"!(entriesService.sort?.allowed && isSortable(column))\"\n [class.mat-column-primary]=\"first\"\n >{{ column | esListItemLabel | async }}</mat-header-cell\n >\n </ng-container>\n <mat-cell\n *matCellDef=\"let node\"\n #cell\n [class.mat-column-primary]=\"first\"\n attr.data-test=\"table-cell-{{ column.name }}\"\n >\n <ng-container\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n >\n <es-node-url cdkMonitorSubtreeFocus [node]=\"node\" [mode]=\"first ? 'link' : 'wrapper'\">\n <es-list-base\n [forceText]=\"true\"\n [node]=\"node\"\n [item]=\"column\"\n esCheckTextOverflow\n #text=\"esCheckTextOverflow\"\n [matTooltip]=\"text.hasTextOverflow() ? cell.innerText : null\"\n matTooltipTouchGestures=\"off\"\n ></es-list-base>\n </es-node-url>\n </ng-container>\n <es-list-base\n *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\"\n [forceText]=\"true\"\n [node]=\"node\"\n [item]=\"column\"\n (click)=\"\n entriesService.onClicked({\n event: $event,\n element: node,\n source: ClickSource.Metadata,\n attribute: column,\n })\n \"\n (dblclick)=\"\n entriesService.dblClickItem.emit({\n element: node,\n source: ClickSource.Metadata,\n attribute: column,\n })\n \"\n ></es-list-base>\n <ng-container *ngIf=\"first\">\n <div class=\"childobjects\" *ngIf=\"node.properties?.['virtual:childobjectcount'] > 0\">\n <div\n class=\"childobject-count\"\n matTooltip=\"{{\n 'CHILDOBJECT_COUNT'\n | translate : { count: node.properties['virtual:childobjectcount'] * 1 + 1 }\n }}\"\n >\n <span>{{ node.properties['virtual:childobjectcount'] * 1 + 1 }}</span\n ><i esIcon=\"filter_none\"></i>\n </div>\n </div>\n </ng-container>\n </mat-cell>\n </ng-container>\n <mat-header-row mat-header-row *matHeaderRowDef=\"visibleColumnNames$ | async\"></mat-header-row>\n <mat-row\n mat-row\n matRipple\n cdkDrag\n esNodesDrag\n [cdkDragDisabled]=\"!entriesService.dragDrop?.dragAllowed || (ui.isTouchSubject | async)\"\n [cdkDragData]=\"getDragData(node)\"\n (cdkDragStarted)=\"onDragStarted(node)\"\n (cdkDragEnded)=\"onDragEnded()\"\n [esNodesDropTarget]=\"node\"\n [canDropNodes]=\"canDrop\"\n (nodeDropped)=\"drop($event)\"\n class=\"mat-row\"\n [class.mat-row-selected]=\"entriesService.selection.isSelected(node)\"\n [class.mat-row-import-blocked]=\"isBlocked(node)\"\n [class.selected-when-dragging]=\"isDragging && entriesService.selection.isSelected(node)\"\n [class.mat-row-virtual]=\"node.virtual\"\n [class.mat-row-virtual-first]=\"\n node.virtual && !$any(entriesService.dataSource.getData()[i - 1])?.virtual\n \"\n [class.mat-row-virtual-last]=\"\n node.virtual && !$any(entriesService.dataSource.getData()[i + 1])?.virtual\n \"\n [class.dynamic-single-click]=\"entriesService.singleClickHint === 'dynamic'\"\n *matRowDef=\"let node; let i = index; let last = last; columns: visibleColumnNames$ | async\"\n (contextmenu)=\"onRowContextMenu({ event: $event, node: node })\"\n (keydown.ContextMenu)=\"onRowContextMenu({ event: $event, node: node })\"\n >\n <es-drag-preview\n *cdkDragPreview\n [node]=\"node\"\n [selected]=\"entriesService.selection.selected\"\n [item]=\"(visibleDataColumns$ | async)[0]\"\n ></es-drag-preview>\n </mat-row>\n</mat-table>\n<ng-container\n *ngIf=\"\n (entriesService.dataSource.isLoadingSubject | async) === false &&\n entriesService.dataSource.hasMore() &&\n entriesService.paginationStrategy === 'infinite-scroll'\n \"\n>\n <div class=\"load-more\">\n <button mat-button color=\"primary\" (click)=\"loadData('button')\">\n <i esIcon=\"refresh\"></i>\n <span>{{ 'LOAD_MORE' | translate }}</span>\n </button>\n </div>\n</ng-container>\n<ng-container *ngIf=\"entriesService.dataSource.isLoadingSubject | async\">\n <ng-container *ngTemplateOutlet=\"loading\"> </ng-container>\n</ng-container>\n<!--\n<mat-paginator #paginator [pageSizeOptions]=\"pageSizeOptions\"></mat-paginator>\n-->\n\n<!-- Wait for ready state to avoid changed-after-checked error when `columnChooserTrigger` becomes\navailable. -->\n<es-column-chooser\n *ngIf=\"columnChooserTriggerReady\"\n [(columns)]=\"entriesService.columns\"\n [(columnChooserVisible)]=\"columnChooserVisible\"\n [origin]=\"columnChooserTrigger\"\n></es-column-chooser>\n<ng-template #loading>\n <es-spinner></es-spinner>\n</ng-template>\n<ng-template #icon let-node=\"node\">\n <div class=\"icon-bg\">\n <img\n *ngIf=\"node.iconURL\"\n [src]=\"node | esNodeIcon | async\"\n [alt]=\"\n node.mediatype\n ? ('NODE.mediatype' | translate) + ': ' + ('MEDIATYPE.' + node.mediatype | translate)\n : ''\n \"\n [matTooltip]=\"\n node.mediatype\n ? ('NODE.mediatype' | translate) + ': ' + ('MEDIATYPE.' + node.mediatype | translate)\n : ''\n \"\n matTooltipTouchGestures=\"off\"\n />\n <i\n *ngIf=\"!node.iconURL\"\n [esIcon]=\"node.authorityType ? (node.authorityType === 'GROUP' ? 'group' : 'person') : null\"\n ></i>\n </div>\n</ng-template>\n","import { Injectable } from '@angular/core';\nimport { Node } from 'ngx-edu-sharing-api';\n\n/**\n * Service to store any data temporary (lost after reloading page).\n *\n * Note that all components share the same data source. So uses prefixes for your name if\n * applicable!\n */\n@Injectable({ providedIn: 'root' })\nexport class TemporaryStorageService {\n static APPLY_TO_LMS_PARAMETER_NODE = 'apply_to_lms_node';\n // @Deprecated Use NODE_RENDER_PARAMETER_DATA_SOURCE instead\n static NODE_RENDER_PARAMETER_LIST = 'node_render_list';\n static NODE_RENDER_PARAMETER_DATA_SOURCE = 'node_render_data_source';\n static COLLECTION_ADD_NODES = 'collection_add_nodes';\n static WORKSPACE_LAST_LOCATION = 'WORKSPACE_LAST_LOCATION';\n // default: false\n static OPTION_HIDE_MAINNAV: 'option_hide_mainnav';\n // default: false\n static OPTION_DISABLE_SCROLL_LAYOUT: 'option_disable_scroll_layout';\n static CUSTOM_NODE_LIST_COMPONENT = 'custom_node_list_component';\n static CUSTOM_NODE_ENTRIES_COMPONENT = 'custom_node_entries_component';\n\n private data: any = {};\n\n constructor() {}\n\n get(name: string, defaultValue: any = null) {\n if (this.data[name] != null) {\n return this.data[name];\n }\n return defaultValue;\n }\n\n set(name: string, value: any) {\n this.data[name] = value;\n }\n\n /**\n * Same as get, but will remove the value after fetching it.\n */\n pop(name: string, defaultValue: any = null): any {\n const value = this.get(name, defaultValue);\n this.remove(name);\n return value;\n }\n\n remove(name: string) {\n this.data[name] = null;\n }\n}\n\nexport interface ClipboardObject {\n nodes: Node[];\n sourceNode: Node;\n copy: boolean;\n}\n","export type Modifier = 'Ctrl/Cmd' | 'Shift' | 'Alt';\n\nexport interface KeyboardShortcutCondition {\n modifiers?: Modifier[];\n keyCode: string;\n ignoreWhen?: (event: KeyboardEvent) => boolean;\n}\nexport interface KeyboardShortcut extends KeyboardShortcutCondition {\n callback: () => void;\n}\n\nexport function matchesShortcutCondition(\n event: KeyboardEvent,\n condition: KeyboardShortcutCondition,\n): boolean {\n return (\n event.code === condition.keyCode &&\n matchesModifiers(event, condition.modifiers) &&\n !condition.ignoreWhen?.(event)\n );\n}\n\nfunction matchesModifiers(event: KeyboardEvent, modifiers: Modifier[] = []): boolean {\n return (\n modifiers.includes('Alt') === event.altKey &&\n modifiers.includes('Shift') === event.shiftKey &&\n modifiers.includes('Ctrl/Cmd') === (event.ctrlKey || event.metaKey)\n );\n}\n","import { EventEmitter, Injectable } from '@angular/core';\nimport { Node } from 'ngx-edu-sharing-api';\n\n/**\n * An application-wide event broker.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class LocalEventsService {\n /**\n * One or more nodes have been created\n *\n * Triggers when the full creation process is done, i.e. the metadata/edit dialog after uploading\n * is closed\n */\n readonly nodesCreated = new EventEmitter<Node[]>();\n /**\n * The metadata of one or more nodes have been updated.\n *\n * The emitted value is the array of updated nodes.\n *\n * The emitter should not be triggered with an empty array or null.\n */\n readonly nodesChanged = new EventEmitter<Node[]>();\n /**\n * One or more nodes have been moved to the recycle bin.\n *\n * The emitted value is the array of former nodes.\n *\n * The emitter should not be triggered with an empty array or null.\n */\n // FIXME: Maybe a `nodesMoved` emitter would make for sense for updating lists that used to\n // include a node and lists that the node was moved to.\n readonly nodesDeleted = new EventEmitter<Node[]>();\n}\n","import { Injectable } from '@angular/core';\nimport { KeyboardShortcut } from '../../types/keyboard-shortcuts';\nimport { Observable } from 'rxjs';\n\n@Injectable()\nexport abstract class KeyboardShortcutsService {\n abstract register(shortcuts: KeyboardShortcut[], { until }: { until: Observable<void> }): void;\n\n abstract shouldIgnoreShortcut(event: KeyboardEvent): boolean;\n}\n","import { OptionData, OptionsHelperComponents } from '../options-helper-data.service';\nimport { OptionItem, Target } from '../../types/option-item';\nimport { Node } from 'ngx-edu-sharing-api';\n\nexport abstract class OptionsHelperService {\n abstract wrapOptionCallbacks(data: OptionData): OptionData;\n\n abstract refreshComponents(\n components: OptionsHelperComponents,\n data: OptionData,\n ): Promise<void>;\n\n abstract getAvailableOptions(\n target: Target,\n objects: Node[],\n components: OptionsHelperComponents,\n data: OptionData,\n ): Promise<OptionItem[]>;\n\n abstract pasteNode(\n components: OptionsHelperComponents,\n data: OptionData,\n addVirutalNodes: boolean,\n nodes: Node[],\n ): void;\n\n abstract filterOptions(\n options: OptionItem[],\n target: Target,\n data: OptionData,\n objects: Node[] | any,\n ): Promise<OptionItem[]>;\n}\n","import type { DropdownComponent } from '../dropdown/dropdown.component';\nimport type { ActionbarComponent } from '../actionbar/actionbar.component';\nimport type {\n ListEventInterface,\n NodeEntriesDataType,\n NodeEntriesDisplayType,\n} from '../node-entries/entries-model';\nimport { EventEmitter, Injectable, NgZone, OnDestroy, Optional } from '@angular/core';\nimport { AuthenticationService, ME, NetworkService, Node, UserService } from 'ngx-edu-sharing-api';\nimport { take, takeUntil } from 'rxjs/operators';\nimport { CustomOptions, OptionItem, Scope, Target } from '../types/option-item';\nimport { OptionsHelperService } from './abstract/options-helper.service';\nimport { fromEvent, Subject, Subscription } from 'rxjs';\nimport { matchesShortcutCondition } from '../types/keyboard-shortcuts';\nimport { KeyboardShortcutsService } from './abstract/keyboard-shortcuts.service';\nimport { ActivatedRoute } from '@angular/router';\nimport { LocalEventsService } from './local-events.service';\nimport { Toast } from './abstract/toast.service';\n\ntype DeleteEvent = {\n objects: Node[] | any;\n count: number;\n error: boolean;\n};\nexport interface OptionsHelperComponents {\n actionbar?: ActionbarComponent;\n dropdown?: DropdownComponent;\n list?: ListEventInterface<NodeEntriesDataType>;\n}\n\nexport interface OptionData {\n scope: Scope;\n activeObjects?: Node[] | any[];\n selectedObjects?: Node[] | any[];\n allObjects?: Node[] | any[];\n parent?: Node | any;\n customOptions?: CustomOptions;\n /**\n * custom interceptor to modify the default options array\n */\n postPrepareOptions?: (options: OptionItem[], objects: Node[]) => void;\n}\n@Injectable()\nexport class OptionsHelperDataService implements OnDestroy {\n private components: OptionsHelperComponents;\n private data: OptionData;\n private keyboardShortcutsSubscription: Subscription;\n private globalOptions: OptionItem[];\n private destroyed = new Subject<void>();\n\n readonly virtualNodesAdded = new EventEmitter<Node[]>();\n readonly nodesChanged = new EventEmitter<Node[] | void>();\n readonly nodesDeleted = new EventEmitter<DeleteEvent>();\n readonly displayTypeChanged = new EventEmitter<NodeEntriesDisplayType>();\n\n constructor(\n private ngZone: NgZone,\n private route: ActivatedRoute,\n private localEvents: LocalEventsService,\n private authenticationService: AuthenticationService,\n private toast: Toast,\n private userService: UserService,\n private networkService: NetworkService,\n @Optional() private keyboardShortcutsService: KeyboardShortcutsService,\n @Optional() private optionsHelperService: OptionsHelperService,\n ) {\n this.registerStaticSubscriptions();\n }\n /** Performs subscriptions that don't have to be refreshed. */\n private registerStaticSubscriptions(): void {\n this.localEvents.nodesDeleted\n .pipe(takeUntil(this.destroyed))\n .subscribe((nodes) => this.components?.list?.deleteNodes(nodes));\n this.localEvents.nodesChanged\n .pipe(takeUntil(this.destroyed))\n .subscribe((nodes) => this.components?.list?.updateNodes(nodes));\n }\n ngOnDestroy(): void {\n this.destroyed.next();\n this.destroyed.complete();\n }\n\n async initComponents(\n actionbar: ActionbarComponent = null,\n list: ListEventInterface<NodeEntriesDataType> = null,\n dropdown: DropdownComponent = null,\n ) {\n this.components = {\n actionbar,\n list,\n dropdown,\n };\n if ((await this.userService.getUser(ME).pipe(take(1)).toPromise())?.person?.authorityName) {\n await this.networkService.getRepositories().pipe(take(1)).toPromise();\n }\n }\n\n getData() {\n return this.data;\n }\n\n setData(data: OptionData) {\n this.data = this.optionsHelperService?.wrapOptionCallbacks(data) || data;\n }\n\n async refreshComponents() {\n if (this.data == null) {\n console.warn('options helper refresh called but no data previously bound');\n return;\n }\n if (this.optionsHelperService == null) {\n console.warn('optionsHelperService not provided. No default actions will be generated');\n return;\n }\n this.globalOptions = await this.getAvailableOptions(Target.Actionbar);\n await this.optionsHelperService?.refreshComponents(this.components, this.data);\n }\n\n getAvailableOptions(target: Target, objects: Node[] = null) {\n return this.optionsHelperService?.getAvailableOptions(\n target,\n objects,\n this.components,\n this.data,\n );\n }\n\n private addVirtualObjects(objects: any[]) {\n objects = objects.map((o: any) => {\n o.virtual = true;\n return o;\n });\n this.virtualNodesAdded.emit(objects);\n if (this.components?.list) {\n this.components?.list.addVirtualNodes(objects);\n }\n }\n\n registerGlobalKeyboardShortcuts() {\n this.ngZone.runOutsideAngular(() => {\n if (!this.keyboardShortcutsSubscription) {\n this.keyboardShortcutsSubscription = fromEvent(document, 'keydown')\n .pipe(takeUntil(this.destroyed))\n .subscribe((event: KeyboardEvent) => this.handleKeyboardEvent(event));\n }\n });\n }\n\n private async handleKeyboardEvent(event: KeyboardEvent) {\n if (this.globalOptions && !this.keyboardShortcutsService?.shouldIgnoreShortcut(event)) {\n for (const option of this.globalOptions) {\n if (\n option.keyboardShortcut &&\n matchesShortcutCondition(event, option.keyboardShortcut)\n ) {\n event.preventDefault();\n event.stopPropagation();\n if (await option.enabledCallback()) {\n this.ngZone.run(() => option.callback(null));\n } else {\n this.toast.error(null, 'TOAST.OPTION_DISABLED_OR_UNAVAILABLE');\n }\n break;\n }\n }\n }\n }\n filterOptions(options: OptionItem[], target: Target, objects: Node[] | any = null) {\n return this.optionsHelperService?.filterOptions(options, target, this.data, objects) || options;\n }\n /**\n * shortcut to simply disable all options on the given compoennts\n * @param actionbar\n * @param list\n */\n clearComponents(actionbar: ActionbarComponent, list: ListEventInterface<Node> = null) {\n if (list) {\n list.setOptions(null);\n }\n if (actionbar) {\n actionbar.options = [];\n }\n }\n\n pasteNode(nodes: Node[] = []) {\n this.optionsHelperService.pasteNode(this.components, this.data, true, nodes);\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n OnDestroy,\n OnInit,\n Optional,\n ViewChild,\n} from '@angular/core';\nimport { MatPaginator, PageEvent } from '@angular/material/paginator';\nimport { ActivatedRoute } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Subject } from 'rxjs';\nimport { first, takeUntil } from 'rxjs/operators';\nimport { NodeEntriesDataType, NodeEntriesDisplayType } from './entries-model';\nimport { NodeEntriesGlobalService } from './node-entries-global.service';\nimport { NodeEntriesTemplatesService } from './node-entries-templates.service';\nimport { NodeEntriesService } from '../services/node-entries.service';\nimport { KeyboardShortcutsService } from '../services/abstract/keyboard-shortcuts.service';\nimport { NodeDataSourceRemote } from './node-data-source-remote';\n\n@Component({\n selector: 'es-node-entries',\n templateUrl: 'node-entries.component.html',\n styleUrls: ['node-entries.component.scss'],\n standalone: false,\n})\nexport class NodeEntriesComponent<T extends NodeEntriesDataType>\n implements OnInit, AfterViewInit, OnDestroy\n{\n readonly NodeEntriesDisplayType = NodeEntriesDisplayType;\n\n @ViewChild(MatPaginator) paginator: MatPaginator;\n\n private readonly destroyed = new Subject<void>();\n private readonly updateKeyboardShortcuts = new Subject<void>();\n\n constructor(\n public changeDetectorRef: ChangeDetectorRef,\n public entriesGlobalService: NodeEntriesGlobalService,\n public entriesService: NodeEntriesService<T>,\n public templatesService: NodeEntriesTemplatesService,\n @Optional() private globalKeyboardShortcuts: KeyboardShortcutsService,\n private route: ActivatedRoute,\n private translate: TranslateService,\n ) {}\n\n ngOnInit(): void {\n if (this.entriesService.primaryInstance) {\n this.registerGlobalKeyboardShortcuts();\n }\n if (this.entriesService.dataSource instanceof NodeDataSourceRemote) {\n // We don't require `sort` to be defined, but if it is set but not yet ready (`null`),\n // we wait for its value before initializing the data source, so the first request is\n // sent with the correct sort configuration. That is why we explicitly do not drop\n // `undefined` with the `first` operator below.\n this.entriesService.sortSubject\n .pipe(first((sort) => sort !== null))\n .subscribe(() =>\n this.initRemoteDataSource(\n this.entriesService.dataSource as NodeDataSourceRemote<T>,\n ),\n );\n }\n }\n\n ngAfterViewInit() {\n if (this.paginator) {\n void this.initPaginator(this.paginator);\n this.changeDetectorRef.detectChanges();\n }\n }\n\n ngOnDestroy(): void {\n this.destroyed.next();\n this.destroyed.complete();\n }\n\n private registerGlobalKeyboardShortcuts() {\n this.globalKeyboardShortcuts.register(\n [\n {\n modifiers: ['Ctrl/Cmd'],\n keyCode: 'KeyA',\n ignoreWhen: (event) =>\n // SmallGrid doesn't support selection\n this.entriesService.displayType === NodeEntriesDisplayType.SmallGrid,\n callback: () => this.entriesService.toggleSelectAll(),\n },\n ],\n { until: this.destroyed },\n );\n }\n\n private initRemoteDataSource(dataSource: NodeDataSourceRemote<T>): void {\n const pageSize = this.entriesGlobalService.getPaginatorSizeOptions(\n this.entriesService.scope,\n )[0];\n dataSource.init({\n paginationConfig: {\n defaultPageSize: pageSize,\n strategy: this.entriesService.paginationStrategy,\n },\n defaultSort: this.entriesService.sort,\n });\n if (this.entriesService.primaryInstance) {\n // Automatic query-params handling is only supported by node-data-source-remote.\n dataSource.registerQueryParameters(this.route);\n }\n }\n\n private async initPaginator(paginator: MatPaginator) {\n paginator._intl.itemsPerPageLabel = await this.translate\n .get('PAGINATOR.itemsPerPageLabel')\n .toPromise();\n paginator._intl.nextPageLabel = await this.translate\n .get('PAGINATOR.nextPageLabel')\n .toPromise();\n paginator._intl.previousPageLabel = await this.translate\n .get('PAGINATOR.previousPageLabel')\n .toPromise();\n paginator._intl.getRangeLabel = (page, pageSize, length) =>\n this.translate.instant('PAGINATOR.getRangeLabel', {\n page: page + 1,\n pageSize,\n length,\n pageCount: Math.ceil(length / pageSize),\n });\n // Connect data source.\n this.entriesService.dataSource$.pipe(takeUntil(this.destroyed)).subscribe((dataSource) => {\n if (dataSource instanceof NodeDataSourceRemote) {\n (dataSource as NodeDataSourceRemote).paginator = paginator;\n } else {\n paginator.length = dataSource?.getTotal();\n dataSource\n ?.connectPagination()\n .pipe(takeUntil(this.destroyed))\n .subscribe(() => {\n paginator.length = dataSource.getTotal();\n });\n }\n });\n }\n\n openPage(page: PageEvent) {\n this.entriesService.fetchData.emit({\n offset: page.pageIndex * page.pageSize,\n amount: page.pageSize,\n reset: true,\n });\n }\n}\n","<div class=\"top-matter\">\n <div class=\"title\">\n <ng-container *ngTemplateOutlet=\"templatesService.title\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"templatesService.entriesTopMatter\"></ng-container>\n</div>\n<ng-container *ngIf=\"entriesService.dataSource\">\n <ng-container *ngIf=\"entriesService.displayType === NodeEntriesDisplayType.Table\">\n <es-node-entries-table></es-node-entries-table>\n </ng-container>\n <ng-container\n *ngIf=\"\n entriesService.displayType === NodeEntriesDisplayType.SmallGrid ||\n entriesService.displayType === NodeEntriesDisplayType.Grid\n \"\n >\n <es-node-entries-card-grid [displayType]=\"entriesService.displayType\">\n </es-node-entries-card-grid>\n </ng-container>\n <ng-container *ngIf=\"entriesService.dataSource.isEmpty() && !entriesService.dataSource.isLoading\">\n <ng-container *ngTemplateOutlet=\"templatesService.empty\"></ng-container>\n </ng-container>\n</ng-container>\n<mat-paginator\n #paginator\n [pageSizeOptions]=\"entriesGlobalService.getPaginatorSizeOptions(entriesService.scope)\"\n *ngIf=\"entriesService.paginationStrategy === 'paginator'\"\n [class.display-none]=\"\n (entriesService.dataSource.isLoading && entriesService.dataSource.isLoading !== 'page') ||\n entriesService.dataSource.isEmpty()\n \"\n (page)=\"openPage($event)\"\n></mat-paginator>\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ComponentRef,\n ContentChild,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChange,\n TemplateRef,\n Type,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { interval, Subject } from 'rxjs';\nimport { NodeEntriesTemplatesService } from './node-entries-templates.service';\nimport { NodeEntriesComponent } from './node-entries.component';\nimport {\n FetchEvent,\n GridConfig,\n InteractionType,\n ListDragGropConfig,\n ListEventInterface,\n ListOptions,\n ListOptionsConfig,\n ListSortConfig,\n NodeClickEvent,\n NodeEntriesDataType,\n NodeEntriesDisplayType,\n} from './entries-model';\nimport { NodeDataSource } from './node-data-source';\nimport { Helper } from '../util/helper';\nimport { CustomSelectionModel, NodeEntriesService } from '../services/node-entries.service';\nimport { OptionItem, Scope } from '../types/option-item';\nimport { NodeHelperService } from '../services/node-helper.service';\nimport { ListItem } from '../types/list-item';\nimport { TemporaryStorageService } from '../services/temporary-storage.service';\nimport {\n CollectionReference,\n GenericAuthority,\n Node,\n NodeService,\n User,\n} from 'ngx-edu-sharing-api';\nimport { VirtualNode } from '../types/api-models';\nimport { OptionsHelperDataService } from '../services/options-helper-data.service';\nimport { UIService } from '../services/ui.service';\nimport { filter, switchMap, take, takeUntil } from 'rxjs/operators';\n\n@Component({\n selector: 'es-node-entries-wrapper',\n template: `<es-node-entries\n #nodeEntriesComponent\n *ngIf=\"!customNodeListComponent\"\n ></es-node-entries>`,\n providers: [NodeEntriesService, OptionsHelperDataService, NodeEntriesTemplatesService],\n standalone: false,\n})\nexport class NodeEntriesWrapperComponent<T extends NodeEntriesDataType>\n implements AfterViewInit, OnInit, OnChanges, OnDestroy, ListEventInterface<T>\n{\n /**\n * title (above) the table/grid\n */\n @ContentChild('title') titleRef: TemplateRef<any>;\n /**\n * data shown when data source is empty\n */\n @ContentChild('empty') emptyRef: TemplateRef<any>;\n /**\n * custom area for actions only for NodeEntriesDisplayType.SmallGrid (per card at the bottom)\n */\n @ContentChild('actionArea') actionAreaRef: TemplateRef<any>;\n /**\n * custom area for an overlay \"above\" each card (i.e. to show disabled infos), only for NodeEntriesDisplayType.SmallGrid & odeEntriesDisplayType.Grid\n */\n @ContentChild('overlay') overlayRef: TemplateRef<any>;\n @ViewChild('nodeEntriesComponent') nodeEntriesComponentRef: NodeEntriesComponent<T>;\n @Input() dataSource: NodeDataSource<T>;\n @Input() scope: Scope;\n @Input() columns: ListItem[];\n @Input() configureColumns: boolean;\n @Input() checkbox = true;\n /**\n * emits when the user re-configures the columns\n * should be used in order to save the new configuration\n */\n @Output() columnsChange = new EventEmitter<ListItem[]>();\n @Input() globalOptions: OptionItem[];\n @Input() displayType = NodeEntriesDisplayType.Grid;\n @Output() displayTypeChange = new EventEmitter<NodeEntriesDisplayType>();\n @Input() elementInteractionType = InteractionType.DefaultActionLink;\n @Input() sort: ListSortConfig;\n @Input() dragDrop: ListDragGropConfig<T>;\n @Input() gridConfig: GridConfig;\n\n /**\n * This color defines the base color of gradients visually limiting a grid in scroll direction.\n * Defaults to white.\n */\n @Input() scrollGradientColor: string = '#fff';\n\n /**\n * this can be set instead of calling initOptionsGenerator()\n */\n @Input() initConfig: ListOptionsConfig;\n /**\n * Whether this node-entries instance represents the page's main content.\n *\n * Only set to true for one instance per page.\n *\n * If true, this instance will\n * - handle page-wide keyboard shortcuts\n * - take control of the `page` and `pageSize` query parameters for pagination\n */\n @Input() primaryInstance: boolean;\n /**\n * UI hints for whether a single click will cause a dynamic action.\n *\n * This does not configure the actual behavior but only UI hints to the user. Hints include\n * hover effects and a changed cursor.\n *\n * - When choosing 'static', the `clickItem` event should trigger some stationary action like\n * selecting the element or displaying information in a complementary page area. The\n * `dblClickItem` event can be used for a more disruptive action.\n * - When choosing 'dynamic', the `clickItem` event should trigger a major action like\n * navigating to a new page or closing a dialog.\n */\n // TODO: Consider controlling the ui hints and the actual behavior with a single option.\n @Input() singleClickHint: 'dynamic' | 'static' = 'dynamic';\n /**\n * Do not load more data on scroll.\n */\n @Input() disableInfiniteScroll = false;\n\n @Output() fetchData = new EventEmitter<FetchEvent>();\n @Output() clickItem = new EventEmitter<NodeClickEvent<T>>();\n @Output() dblClickItem = new EventEmitter<NodeClickEvent<T>>();\n @Output() sortChange = new EventEmitter<ListSortConfig>();\n @Output() virtualNodesAdded;\n @Output() displayTypeChanged;\n\n customNodeListComponent: Type<NodeEntriesComponent<T>>;\n private componentRef: ComponentRef<NodeEntriesComponent<T>>;\n private options: ListOptions;\n private destroyed = new Subject<void>();\n\n constructor(\n private viewContainerRef: ViewContainerRef,\n private temporaryStorageService: TemporaryStorageService,\n private ngZone: NgZone,\n private entriesService: NodeEntriesService<T>,\n private nodeService: NodeService,\n public optionsHelper: OptionsHelperDataService,\n private nodeHelperService: NodeHelperService,\n private uiService: UIService,\n // @TODO\n // private mainNav: MainNavService,\n private templatesService: NodeEntriesTemplatesService,\n private changeDetectorRef: ChangeDetectorRef,\n private elementRef: ElementRef,\n ) {\n // regulary re-bind template since it might have updated without ngChanges trigger\n /*\n ngZone.runOutsideAngular(() =>\n setInterval(() => this.componentRef.instance.emptyRef = this.emptyRef)\n );\n */\n this.virtualNodesAdded = this.optionsHelper.virtualNodesAdded;\n this.displayTypeChanged = this.optionsHelper.displayTypeChanged;\n this.entriesService.selection.changed.subscribe(() => {\n if (this.optionsHelper.getData()) {\n this.optionsHelper.getData().selectedObjects =\n this.entriesService.selection.selected;\n this.optionsHelper.getData().activeObjects = this.entriesService.selection.selected;\n } else {\n console.warn('optionsHelper is not initalized correctly; data is empty');\n }\n void this.optionsHelper.refreshComponents();\n });\n }\n\n ngOnInit(): void {\n if (this.primaryInstance) {\n this.optionsHelper.registerGlobalKeyboardShortcuts();\n }\n this.entriesService.columnsSubject\n .pipe(\n takeUntil(this.destroyed),\n filter((c) => c?.fromUser),\n )\n .subscribe((c) => this.columnsChange.emit(c.columns));\n }\n\n ngOnChanges(changes: { [key: string]: SimpleChange } = {}) {\n if (!this.componentRef) {\n this.init();\n }\n this.entriesService.list = this;\n this.entriesService.dataSource = this.dataSource;\n this.entriesService.scope = this.scope;\n if (changes.columns) {\n this.entriesService.columnsSubject.next({\n columns: this.columns,\n fromUser: false,\n });\n }\n this.entriesService.configureColumns = this.configureColumns;\n this.entriesService.checkbox = this.checkbox;\n this.entriesService.displayType = this.displayType;\n this.entriesService.elementInteractionType = this.elementInteractionType;\n this.entriesService.gridConfig = this.gridConfig;\n this.entriesService.options = this.options;\n this.entriesService.globalOptions = this.globalOptions;\n this.entriesService.sort = this.sort;\n this.entriesService.sortChange = this.sortChange;\n this.entriesService.dragDrop = this.dragDrop;\n this.entriesService.clickItem = this.clickItem;\n this.entriesService.dblClickItem = this.dblClickItem;\n this.entriesService.fetchData = this.fetchData;\n this.entriesService.primaryInstance = this.primaryInstance;\n this.entriesService.singleClickHint = this.singleClickHint;\n this.entriesService.disableInfiniteScroll = this.disableInfiniteScroll;\n this.entriesService.scrollGradientColor.set(this.scrollGradientColor);\n\n if (changes['initConfig']) {\n void this.initOptionsGenerator(this.initConfig);\n }\n if (this.componentRef) {\n this.componentRef.instance.changeDetectorRef?.detectChanges();\n }\n // This might need wrapping with `setTimeout`.\n this.updateTemplates();\n }\n\n ngOnDestroy(): void {\n this.destroyed.next();\n this.destroyed.complete();\n }\n\n /**\n * Replaces this wrapper with the configured custom-node-list component.\n */\n private init(): void {\n this.customNodeListComponent = this.temporaryStorageService.get(\n TemporaryStorageService.CUSTOM_NODE_ENTRIES_COMPONENT,\n null,\n );\n if (this.customNodeListComponent == null) {\n return;\n }\n this.componentRef = this.uiService.injectAngularComponent(\n this.viewContainerRef,\n this.customNodeListComponent,\n this.elementRef.nativeElement,\n // Input bindings are initialized in `ngOnChanges`.\n this.getOutputBindings(),\n );\n }\n /**\n * Creates a simple map of the output bindings defined in this component.\n */\n private getOutputBindings(): { [key: string]: EventEmitter<any> } {\n const outputBindings: { [key: string]: any } = {};\n for (const key of Object.keys(this)) {\n const value = (this as any)[key];\n if (value instanceof EventEmitter) {\n outputBindings[key] = value;\n }\n }\n return outputBindings;\n }\n\n getDisplayType(): NodeEntriesDisplayType {\n return this.displayType;\n }\n\n onDisplayTypeChange() {\n return this.displayTypeChange.asObservable();\n }\n\n setDisplayType(displayType: NodeEntriesDisplayType): void {\n this.displayType = displayType;\n this.entriesService.displayType = displayType;\n this.ngOnChanges();\n this.displayTypeChange.emit(displayType);\n }\n\n updateNodes(nodes: void | T[]) {\n if (!nodes) {\n return;\n }\n this.dataSource.getData().forEach((d) => {\n let hits = (nodes as T[]).filter((n) =>\n (n as Node)?.ref\n ? (n as Node)?.ref.id === (d as Node)?.ref.id\n : (n as GenericAuthority)?.authorityName ===\n (d as GenericAuthority)?.authorityName,\n );\n if (hits.length === 0) {\n // handle if the original has changed (for collection refs)\n hits = (nodes as T[]).filter(\n (n) =>\n (n as Node)?.ref &&\n (n as Node)?.ref?.id === (d as unknown as CollectionReference)?.originalId,\n );\n }\n if (hits.length === 1) {\n this.nodeHelperService.copyDataToNode(d as Node, hits[0] as Node);\n }\n });\n // trigger rebuild\n if (this.dataSource instanceof NodeDataSource) {\n (this.dataSource as NodeDataSource<T>).refresh();\n }\n const oldSelection = this.entriesService.selection.selected;\n this.entriesService.selection.clear();\n this.entriesService.selection.select(\n ...oldSelection.map(\n (o) => this.dataSource.getData().filter((d) => Helper.objectEquals(o, d))?.[0],\n ),\n );\n this.changeDetectorRef.detectChanges();\n }\n\n showReorderColumnsDialog(): void {}\n\n addVirtualNodes(virtual: T[]): void {\n virtual = virtual.map((o) => {\n (o as VirtualNode).virtual = true;\n return o;\n });\n virtual.forEach((v: T) => {\n const contains = this.dataSource\n .getData()\n .some((d) =>\n (d as Node).ref\n ? (d as Node).ref?.id === (v as Node).ref?.id\n : (d as User).authorityName === (v as User).authorityName,\n );\n if (contains) {\n if ((v as VirtualNode).override !== false) {\n this.updateNodes([v]);\n }\n } else {\n this.dataSource.appendData([v], 'before');\n }\n if ((v as VirtualNode).observe) {\n interval(2000)\n .pipe(\n take(10),\n takeUntil(this.destroyed),\n switchMap(() =>\n this.nodeService.getNode((v as VirtualNode).ref.id, {\n repository: (v as VirtualNode).ref.repo,\n }),\n ),\n )\n .subscribe((node) => {\n (node as VirtualNode).virtual = true;\n this.updateNodes([node as T]);\n });\n }\n });\n this.entriesService.selection.clear();\n this.entriesService.selection.select(...virtual);\n this.virtualNodesAdded.emit(virtual as Node[]);\n this.changeDetectorRef.detectChanges();\n }\n\n setOptions(options: ListOptions): void {\n this.options = options;\n this.ngOnChanges();\n }\n\n selectAll() {\n this.entriesService.selection.select(...this.entriesService.dataSource.getData());\n }\n getSelection(): CustomSelectionModel<T> {\n return this.entriesService.selection;\n }\n\n async initOptionsGenerator(config: ListOptionsConfig) {\n await this.optionsHelper.initComponents(config.actionbar, this);\n this.optionsHelper.setData({\n scope: this.entriesService.scope,\n activeObjects: this.entriesService.selection.selected,\n selectedObjects: this.entriesService.selection.selected,\n allObjects: this.dataSource.getData(),\n parent: config.parent,\n customOptions: config.customOptions,\n });\n void this.optionsHelper.refreshComponents();\n }\n\n ngAfterViewInit(): void {\n // Prevent changed-after-checked error\n void Promise.resolve().then(() => this.updateTemplates());\n }\n\n private updateTemplates(): void {\n this.templatesService.title = this.titleRef;\n this.templatesService.empty = this.emptyRef;\n this.templatesService.actionArea = this.actionAreaRef;\n this.templatesService.overlay = this.overlayRef;\n }\n\n /**\n * reset the pagination to the first page\n * hint: this will do nothing in case the paginationStrategy !== Pagination\n */\n resetPagination() {\n this.nodeEntriesComponentRef?.paginator?.firstPage();\n }\n\n deleteNodes(objects: T[]): void {\n this.dataSource.removeData(objects);\n this.getSelection().clear();\n }\n}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatRippleModule } from '@angular/material/core';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatSortModule } from '@angular/material/sort';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { EduSharingUiCommonModule } from '../common/edu-sharing-ui-common.module';\nimport { NodesDragSourceDirective } from '../directives/drag-nodes/nodes-drag-source.directive';\nimport { NodesDragDirective } from '../directives/drag-nodes/nodes-drag.directive';\nimport { NodesDropTargetDirective } from '../directives/drag-nodes/nodes-drop-target.directive';\nimport { ListItemsModule } from '../list-items/list-items.module';\nimport { DragPreviewComponent } from './drag-preview/drag-preview.component';\nimport { ListItemLabelPipe } from './list-item-label.pipe';\nimport { NodeEntriesCardGridComponent } from './node-entries-card-grid/node-entries-card-grid.component';\nimport { NodeEntriesCardSmallComponent } from './node-entries-card-small/node-entries-card-small.component';\nimport { NodeEntriesCardComponent } from './node-entries-card/node-entries-card.component';\nimport { NodeEntriesGlobalOptionsComponent } from './node-entries-global-options/node-entries-global-options.component';\nimport { ColumnChooserComponent } from './node-entries-table/column-chooser/column-chooser.component';\nimport { NodeEntriesTableComponent } from './node-entries-table/node-entries-table.component';\nimport { NodeEntriesWrapperComponent } from './node-entries-wrapper.component';\nimport { NodeEntriesComponent } from './node-entries.component';\nimport { NodeRatingComponent } from './node-rating/node-rating.component';\nimport { NodeStatsBadgesComponent } from './node-stats-badges/node-stats-badges.component';\nimport { NodeTypeBadgeComponent } from './node-type-badge/node-type-badge.component';\nimport { OptionButtonComponent } from './option-button/option-button.component';\nimport { PreviewImageComponent } from './preview-image/preview-image.component';\nimport { SortSelectPanelComponent } from './sort-select-panel/sort-select-panel.component';\n\n@NgModule({\n declarations: [\n ColumnChooserComponent,\n DragPreviewComponent,\n ListItemLabelPipe,\n NodeEntriesCardComponent,\n NodeEntriesCardGridComponent,\n NodeEntriesCardSmallComponent,\n NodeEntriesTableComponent,\n NodeRatingComponent,\n PreviewImageComponent,\n NodeEntriesComponent,\n NodeEntriesWrapperComponent,\n NodeRatingComponent,\n NodeTypeBadgeComponent,\n OptionButtonComponent,\n PreviewImageComponent,\n SortSelectPanelComponent,\n NodesDragDirective,\n NodesDragSourceDirective,\n NodesDropTargetDirective,\n NodeEntriesGlobalOptionsComponent,\n NodeStatsBadgesComponent,\n ],\n imports: [\n CommonModule,\n FormsModule,\n A11yModule,\n OverlayModule,\n DragDropModule,\n EduSharingUiCommonModule,\n ListItemsModule,\n MatCheckboxModule,\n MatButtonModule,\n MatBadgeModule,\n MatMenuModule,\n MatTableModule,\n MatCheckboxModule,\n MatPaginatorModule,\n MatRippleModule,\n MatSlideToggleModule,\n MatSortModule,\n MatTooltipModule,\n TranslateModule,\n ],\n exports: [\n NodeEntriesWrapperComponent,\n NodesDragDirective,\n NodesDragSourceDirective,\n NodesDropTargetDirective,\n ListItemLabelPipe,\n ],\n})\nexport class NodeEntriesModule {}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { CommonModule } from '@angular/common';\nimport { EduSharingUiConfigurationParams, getConfigProvider } from './edu-sharing-ui-configuration';\nimport { ListItemsModule } from './list-items/list-items.module';\nimport { NodeEntriesModule } from './node-entries/node-entries.module';\nimport { EduSharingUiCommonModule } from './common/edu-sharing-ui-common.module';\nimport { NodeImageSizePipe } from './pipes/node-image-size.pipe';\nimport { FormatDatePipe } from './pipes/format-date.pipe';\nimport { ListItemLabelPipe } from './node-entries/list-item-label.pipe';\nimport { SortDropdownComponent } from './sort-dropdown/sort-dropdown.component';\nimport { MdsModule } from './mds/mds.module';\n\n@NgModule({\n declarations: [],\n imports: [\n CommonModule,\n TranslateModule,\n EduSharingUiCommonModule,\n ListItemsModule,\n NodeEntriesModule,\n // Loading the TranslationsModule here causes errors for lazy-loaded pages like the search\n // page. For usage outside the context of edu-sharing, we probably need to import the\n // TranslationsModule at the main module that packages or uses this library.\n ],\n exports: [\n CommonModule,\n MdsModule,\n MatTooltipModule,\n TranslateModule,\n EduSharingUiCommonModule,\n ListItemsModule,\n NodeEntriesModule,\n NodeImageSizePipe,\n FormatDatePipe,\n ListItemsModule,\n ListItemLabelPipe,\n SortDropdownComponent,\n ],\n})\nexport class EduSharingUiModule {\n public static forRoot(\n config: EduSharingUiConfigurationParams,\n ): ModuleWithProviders<EduSharingUiModule> {\n return {\n ngModule: EduSharingUiModule,\n providers: [getConfigProvider(config)],\n };\n }\n}\n","import { Observable, of } from 'rxjs';\nimport { NodeDataSource } from './node-data-source';\nimport { Node, GenericAuthority } from 'ngx-edu-sharing-api';\n\n/**\n * data source which joins multiple underlying data sources\n * used for the \"all\" search\n */\nexport class CombinedDataSource<T extends Node | GenericAuthority> extends NodeDataSource<T> {\n constructor(private dataSources: NodeDataSource<T>[]) {\n super();\n }\n\n connect(): Observable<T[]> {\n // @TODO: Using a forkJoin and real connect would be better\n return of(this.getData());\n /*\n return forkJoin(this.dataSources.map(ds => ds.connect())).pipe(\n switchMap(d => d)\n ) as Observable<T[]>;\n */\n }\n\n disconnect() {}\n hasMore() {\n return this.dataSources.filter((ds) => ds.hasMore()).length > 0;\n }\n\n getData() {\n return [].concat.apply(\n [],\n this.dataSources.map((ds) => ds.getData()),\n );\n }\n\n isEmpty(): boolean {\n return this.getData()?.length === 0;\n }\n\n getTotal() {\n return this.dataSources.map((ds) => ds.getTotal()).reduce((a, b) => a + b);\n }\n\n isFullyLoaded() {\n return this.getTotal() <= this.getData()?.length;\n }\n\n getDatasource(position: number) {\n return this.dataSources[position];\n }\n}\n","import { notNull } from '../util/functions';\n\nexport interface NodeCacheRange {\n startIndex: number;\n endIndex: number;\n}\n\nexport interface NodeCacheSlice<T> extends NodeCacheRange {\n data: readonly T[];\n}\n\nexport class NodeCache<T> {\n private _slices: readonly NodeCacheSlice<T>[] = [];\n\n add(slice: NodeCacheSlice<T>): void {\n if (slice.endIndex - slice.startIndex !== slice.data.length) {\n throw new Error('Tried to add invalid slice to cache: ' + JSON.stringify(slice));\n }\n this._slices = this._normalizeSlices([...this._slices, slice]);\n }\n\n clear() {\n this._slices = [];\n }\n\n get(range: NodeCacheRange): T[] | null {\n for (const slice of this._slices) {\n if (slice.startIndex <= range.startIndex && slice.endIndex >= range.endIndex) {\n return slice.data.slice(\n range.startIndex - slice.startIndex,\n range.endIndex - slice.startIndex,\n );\n }\n }\n // for the first request\n console.warn(\n 'Requested range was not found in the slices cache, falling back to a smaller slice (the backend resolved too less data)',\n range,\n this._slices,\n );\n for (const slice of this._slices) {\n if (slice.startIndex <= range.startIndex && slice.endIndex >= range.startIndex) {\n return slice.data.slice(\n range.startIndex - slice.startIndex,\n range.endIndex - slice.startIndex,\n );\n }\n }\n console.error('Could not find any slice for the range', range, this._slices);\n return null;\n }\n\n getMissingRange(requestedRange: NodeCacheRange): NodeCacheRange | null {\n let fromIndex = requestedRange.startIndex;\n let toIndex = requestedRange.endIndex;\n for (const slice of this._slices) {\n if (slice.startIndex <= fromIndex && slice.endIndex > fromIndex) {\n fromIndex = slice.endIndex;\n } else if (slice.startIndex < toIndex && slice.endIndex >= toIndex) {\n toIndex = slice.startIndex;\n }\n if (fromIndex >= toIndex) {\n return null;\n }\n }\n return { startIndex: fromIndex, endIndex: toIndex };\n }\n\n private _normalizeSlices(slices: NodeCacheSlice<T>[]): NodeCacheSlice<T>[] {\n slices.sort((lhs, rhs) => lhs.startIndex - rhs.startIndex);\n for (let i = 0; i < slices.length - 1; i++) {\n for (let j = i + 1; j < slices.length; j++) {\n if (this._canMerge(slices[i], slices[j])) {\n slices[i] = this._merge(slices[i], slices[j]);\n slices[j] = null; // Mark for deletion\n }\n }\n }\n return slices.filter(notNull);\n }\n\n private _canMerge(lhs: NodeCacheSlice<T>, rhs: NodeCacheSlice<T>): boolean {\n if (!lhs || !rhs) {\n return false;\n }\n return lhs.endIndex >= rhs.startIndex;\n }\n\n private _merge(lhs: NodeCacheSlice<T>, rhs: NodeCacheSlice<T>): NodeCacheSlice<T> {\n return {\n startIndex: lhs.startIndex,\n endIndex: rhs.endIndex,\n data: [...lhs.data, ...rhs.data.slice(lhs.endIndex - rhs.startIndex)],\n };\n }\n}\n","import { Injectable, Injector, Optional } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport { RenderDataRequestWithToken, RSApiConfiguration } from 'ngx-rendering-service-api';\nimport {\n AboutService,\n Node,\n NodeServiceUnwrapped,\n RestConstants,\n UserService,\n PROPERTY_FILTER_ALL,\n HOME_REPOSITORY,\n} from 'ngx-edu-sharing-api';\nimport { EduSharingUiConfiguration } from '../edu-sharing-ui-configuration';\nimport { OptionsHelperDataService } from './options-helper-data.service';\nimport { Scope } from '../types/option-item';\n\nexport type CombinedRenderData = {\n node: Node;\n request?: RenderDataRequestWithToken;\n error?: string;\n};\n@Injectable()\nexport class RenderHelperService {\n constructor(\n private injector: Injector,\n private aboutService: AboutService,\n private nodeApiUnwrapped: NodeServiceUnwrapped,\n private configuration: EduSharingUiConfiguration,\n private userService: UserService,\n @Optional() private optionsHelperDataService: OptionsHelperDataService,\n ) {}\n\n async getRenderData(nodeId: string, version: string = null): Promise<CombinedRenderData> {\n const about = await firstValueFrom(this.aboutService.getAbout());\n const securedNode = await firstValueFrom(\n this.nodeApiUnwrapped.getMetadataSigned({\n repository: HOME_REPOSITORY,\n node: nodeId,\n }),\n );\n const node = securedNode.node;\n const user = await firstValueFrom(this.userService.observeCurrentUserInfo());\n console.info(this.injector.get(OptionsHelperDataService));\n this.optionsHelperDataService?.setData({\n scope: Scope.Render,\n activeObjects: [node],\n parent: {\n ref: {\n id: node.parent.id,\n },\n },\n customOptions: {\n useDefaultOptions: true,\n },\n postPrepareOptions: (options, objects) => {\n if (version && version !== RestConstants.NODE_VERSION_CURRENT) {\n options.filter((o) => o.name === 'OPTIONS.OPEN')[0].isEnabled = false;\n }\n },\n });\n await this.optionsHelperDataService?.refreshComponents();\n if (!about.renderingService2) {\n console.error('no rendering service 2 url was configured. Will not continue.');\n return {\n node,\n error: 'RENDERING.ERROR.RS2_NOT_CONFIGURED',\n };\n }\n console.info(about.renderingService2?.url);\n if (this.configuration.production) {\n this.injector.get(RSApiConfiguration).rootUrl = about.renderingService2.url.replace(\n /\\/$/g,\n '',\n );\n } else {\n this.injector.get(RSApiConfiguration).rootUrl = '/rendering2';\n }\n console.info(this.injector.get(RSApiConfiguration));\n const token = securedNode.jwt;\n console.info(token, node);\n const request = {\n nodeId: node.ref.id,\n repoId: node.ref.repo,\n securedNode: securedNode.signedNode,\n signature: securedNode.signature,\n token: token,\n userData: {\n authorityName: user.user.person.authorityName,\n firstName: user.user.person.profile.firstName,\n surName: user.user.person.profile.lastName,\n userEMail: user.user.person.profile.email,\n },\n } as RenderDataRequestWithToken;\n\n return {\n node,\n request,\n };\n }\n\n async getRenderDataForLms(\n encodedNode: string,\n signature: string,\n jwt: string,\n renderUrl: string,\n encodedUser: string,\n ): Promise<CombinedRenderData> {\n this.injector.get(RSApiConfiguration).rootUrl = renderUrl;\n const decodedNodeString = atob(encodedNode);\n const node = JSON.parse(decodedNodeString) as Node;\n const userData = JSON.parse(atob(encodedUser));\n const request = {\n nodeId: node.ref.id,\n repoId: node.ref.repo,\n securedNode: encodedNode,\n signature: signature,\n token: jwt,\n userData: {\n authorityName: userData.authorityName ?? '',\n firstName: userData.firstName ?? '',\n surName: userData.lastName ?? '',\n userEMail: userData.email ?? '',\n },\n } as RenderDataRequestWithToken;\n\n return {\n node,\n request,\n };\n }\n}\n","import { MissingTranslationHandler, MissingTranslationHandlerParams } from '@ngx-translate/core';\n\nexport class FallbackTranslationHandler implements MissingTranslationHandler {\n handle(params: MissingTranslationHandlerParams) {\n return (params.interpolateParams as any)?.fallback ?? params.key;\n }\n}\n","/** The preferred source for language files. */\nexport enum TranslationSource {\n /** In dev mode, local files are used and in production, repository files are used (default). */\n Auto,\n /** Local files (assets/i18n) are used. */\n Local,\n /** Repository files are used. */\n Repository,\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Inject, Optional } from '@angular/core';\nimport { TranslateLoader } from '@ngx-translate/core';\nimport { ConfigService, LANGUAGES } from 'ngx-edu-sharing-api';\nimport * as rxjs from 'rxjs';\nimport { concat, forkJoin, Observable, of } from 'rxjs';\nimport { catchError, filter, first, map, reduce, switchMap } from 'rxjs/operators';\nimport { EduSharingUiConfiguration } from '../edu-sharing-ui-configuration';\nimport { ADDITIONAL_I18N_PROVIDER, ASSETS_BASE_PATH } from '../types/injection-tokens';\nimport { TranslationSource } from './translation-source';\n\nexport const TRANSLATION_LIST = [\n 'common',\n 'admin',\n 'recycle',\n 'workspace',\n 'search',\n 'collections',\n 'login',\n 'permissions',\n 'oer',\n 'messages',\n 'register',\n 'profiles',\n 'services',\n 'stream',\n 'override',\n];\n\ntype Dictionary = { [key: string]: string | Dictionary };\n\nexport class TranslationLoader implements TranslateLoader {\n static create(\n http: HttpClient,\n configService: ConfigService,\n configuration: EduSharingUiConfiguration,\n @Optional() @Inject(ASSETS_BASE_PATH) assetsBasePath?: string,\n @Optional()\n @Inject(ADDITIONAL_I18N_PROVIDER)\n additionalI18nProvider?: (lang: string) => string[],\n ) {\n return new TranslationLoader(\n assetsBasePath,\n additionalI18nProvider,\n http,\n configService,\n configuration,\n );\n }\n\n private constructor(\n @Optional() @Inject(ASSETS_BASE_PATH) private assetsBasePath: string,\n @Optional()\n @Inject(ADDITIONAL_I18N_PROVIDER)\n private additionalI18nProvider: (lang: string) => string[],\n private http: HttpClient,\n private configService: ConfigService,\n private configuration: EduSharingUiConfiguration,\n private prefix: string = (assetsBasePath ?? '') + 'assets/i18n',\n private suffix: string = '.json',\n ) {}\n\n // If you need to configure this, define an injectable configuration object. See\n // https://angular.io/guide/dependency-injection-providers#injecting-a-configuration-object.\n private readonly source: TranslationSource = TranslationSource.Auto;\n\n /**\n * Gets the translations from the server\n */\n getTranslation(lang: string): Observable<Dictionary> {\n if (lang === 'none') {\n this.configService.setLocale(LANGUAGES[lang], lang);\n return of({});\n }\n // backend can not handle sub-languages\n const langBackend = lang.startsWith('de-') ? 'de' : lang;\n if (!LANGUAGES[langBackend]) {\n console.error('unknown locale for language ' + lang + ' / ' + langBackend);\n }\n this.configService.setLocale(LANGUAGES[langBackend], lang);\n return rxjs\n .forkJoin({\n originalTranslations: this.getOriginalTranslations(lang).pipe(\n // Default to empty dictionary if we got nothing\n map((translations) => translations || {}),\n ),\n translationOverrides: this.configService\n .observeTranslationOverrides()\n .pipe(first()),\n })\n .pipe(\n map(({ originalTranslations, translationOverrides }) => {\n // FIXME: This will alter the object returned by `getOriginalTranslations`.\n return this.applyOverrides(originalTranslations, translationOverrides);\n }),\n switchMap((translations) => {\n if (!this.additionalI18nProvider) {\n return of(translations);\n }\n const files = this.additionalI18nProvider(lang);\n console.info('additional i18n provided', files);\n return forkJoin(\n files.map((f) => this.http.get(f) as Observable<Dictionary>),\n ).pipe(\n map((value) => {\n for (let dictionary of value) {\n translations = this.overrideWithObject(translations, dictionary);\n }\n return translations;\n }),\n catchError((e) => {\n console.error('Error loading custom languages', e);\n return of(translations);\n }),\n );\n }),\n map((translations) => this.replaceGenderCharacter(translations)),\n catchError((error, obs) => {\n console.error(error);\n return of(error);\n }),\n );\n }\n\n private getOriginalTranslations(lang: string): Observable<Dictionary> {\n switch (this.getSource()) {\n case 'repository':\n return this.configService.observeDefaultTranslations().pipe(\n filter((arg) => !arg?.locale || arg.language === lang),\n switchMap((arg) => arg?.dict?.pipe(first()) || of(null)),\n first(),\n );\n case 'local':\n return this.mergeTranslations(this.fetchTranslations(lang));\n }\n }\n\n private getSource(): 'repository' | 'local' {\n if (\n (this.configuration.production && this.source === TranslationSource.Auto) ||\n this.source === TranslationSource.Repository\n ) {\n return 'repository';\n } else {\n return 'local';\n }\n }\n\n /**\n * Returns an array of Observables that will each fetch a translations json\n * file.\n */\n private fetchTranslations(lang: string): Observable<Dictionary>[] {\n return TRANSLATION_LIST.map(\n (translation) => `${this.prefix}/${translation}/${lang}${this.suffix}`,\n )\n .map((url) => this.http.get(url) as Observable<Dictionary>)\n .map((obs) =>\n obs.pipe(\n catchError((e) => {\n console.warn(\n 'missing translation file for language ' +\n lang +\n ', translations will be missing / falling back to the default language',\n );\n return of({});\n }),\n ),\n );\n }\n\n /**\n * Takes an array as returned by `fetchTranslations` and converts it to an\n * Observable that yields a single Dictionary object.\n */\n private mergeTranslations(translations: Observable<Dictionary>[]): Observable<Dictionary> {\n return concat(...translations).pipe(\n reduce((acc: Dictionary, value: Dictionary) => {\n for (const prop in value) {\n if (value.hasOwnProperty(prop)) {\n acc[prop] = value[prop];\n }\n }\n return acc;\n }, {}),\n );\n }\n\n /**\n * Applies `overrides` to `translations` and returns `translations`.\n *\n * Example:\n * translations = { foo: { bar: 'bar' } }\n * overrides = { 'foo.bar': 'baz' }\n * results in\n * translations = { foo: {bar: 'baz' } }\n *\n * @param translations Nested translations object.\n * @param overrides Flat object with dots (.) in keys interpreted as\n * separators.\n */\n private applyOverrides(\n translations: Dictionary,\n overrides: { [key: string]: string },\n ): Dictionary {\n if (overrides) {\n for (const [key, value] of Object.entries<string>(overrides)) {\n let ref = translations;\n const path = key.split('.');\n const pathLast = path.pop();\n for (const item of path) {\n if (!ref[item]) {\n ref[item] = {};\n }\n const refItem = ref[item];\n if (typeof refItem === 'string') {\n throw new Error('Trying to override leave with sub tree: ' + path);\n }\n ref = refItem;\n }\n ref[pathLast] = value;\n }\n }\n return translations;\n }\n\n private replaceGenderCharacter(translations: Dictionary, path: string[] = []) {\n for (let key of Object.keys(translations)) {\n if (typeof translations[key] === 'string') {\n // DO NOT REMOVE (required for csv language dumping)\n /*console.log(CsvHelper.fromArray(null, [[\n path.concat(key).join('.'), translations[key]\n ]]));*/\n translations[key] = (translations[key] as string).replace(\n /{{GENDER_SEPARATOR}}/g,\n '*',\n );\n } else {\n translations[key] = this.replaceGenderCharacter(\n translations[key] as Dictionary,\n path.concat(key),\n );\n }\n }\n\n return translations;\n }\n\n private overrideWithObject(source: Dictionary, override: Dictionary) {\n if (!source) {\n source = {};\n }\n for (let key of Object.keys(override)) {\n if (typeof override[key] === 'object') {\n source[key] = this.overrideWithObject(\n source[key] as Dictionary,\n override[key] as Dictionary,\n );\n } else {\n source[key] = override[key];\n }\n }\n return source;\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';\nimport { MissingTranslationHandler, TranslateLoader, TranslateModule } from '@ngx-translate/core';\nimport { ConfigService } from 'ngx-edu-sharing-api';\nimport { EduSharingUiConfiguration } from '../edu-sharing-ui-configuration';\nimport { ADDITIONAL_I18N_PROVIDER, ASSETS_BASE_PATH, I18N_CONFIG } from '../types/injection-tokens';\nimport { FallbackTranslationHandler } from './fallback-translation-handler';\nimport { TranslationLoader } from './translation-loader';\n\n/**\n * Import this module once in the app module to provide the `TranslateService`.\n *\n * Export `TranslateModule` in the shared module to provide directives and pipes.\n */\n@NgModule({\n declarations: [],\n imports: [\n TranslateModule.forRoot({\n loader: {\n provide: TranslateLoader,\n useFactory: TranslationLoader.create,\n deps: [\n HttpClient,\n ConfigService,\n EduSharingUiConfiguration,\n [new Optional(), I18N_CONFIG],\n [new Optional(), ASSETS_BASE_PATH],\n [new Optional(), ADDITIONAL_I18N_PROVIDER],\n ],\n },\n missingTranslationHandler: {\n provide: MissingTranslationHandler,\n useClass: FallbackTranslationHandler,\n },\n }),\n ],\n})\nexport class TranslationsModule {\n static forRoot(): ModuleWithProviders<TranslationsModule> {\n return {\n ngModule: TranslationsModule,\n providers: [],\n };\n }\n\n constructor(@Optional() @SkipSelf() parentModule?: TranslationsModule) {\n if (parentModule) {\n console.warn(\n 'TranslationsModule is already loaded. Import it in the AppModule only',\n parentModule,\n );\n /*throw new Error(\n 'TranslationsModule is already loaded. Import it in the AppModule only',\n );*/\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { MdsHelperService } from '../mds/mds-helper.service';\nimport { MdsService, MdsWidget } from 'ngx-edu-sharing-api';\n\nexport type Values = { [p: string]: string[] };\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SearchHelperService {\n static readonly MAX_QUERY_CONCAT_PARAMS = 400;\n\n constructor() {}\n\n /**\n * converts given filter criteria and converts them for a body to be used for a search request\n * @param properties\n * @param mdsWidgets\n * @param unfoldTrees\n */\n convertCritieria(properties: Values, mdsWidgets: MdsWidget[], unfoldTrees = true) {\n const criteria: {\n property: string;\n values: string[];\n }[] = [];\n // deep copy\n properties = JSON.parse(JSON.stringify(properties));\n for (const property in properties) {\n let widget = MdsHelperService.getWidget(property, undefined, mdsWidgets);\n if (widget && widget.type == 'multivalueTree' && unfoldTrees) {\n let attach = MdsService.unfoldTreeChilds(properties[property], widget);\n if (attach) {\n if (attach.length > SearchHelperService.MAX_QUERY_CONCAT_PARAMS) {\n console.info(\n 'param ' +\n property +\n ' has too many unfold childs (' +\n attach.length +\n '), falling back to basic prefix-based search',\n );\n } else {\n properties[property] = properties[property].concat(attach);\n }\n }\n }\n if (properties[property]?.length && properties[property].every((p) => p != null && !!p))\n criteria.push({\n property: property,\n values: properties[property],\n });\n }\n return criteria;\n }\n}\n","/*\n * Public API Surface of edu-sharing-ui\n */\n\nexport * from './mds-viewer/mds-viewer.component';\nexport * from './mds-viewer/mds-viewer.service';\nexport * from './mds-viewer/widget/mds-widget.component';\nexport * from './actionbar/actionbar.component';\nexport * from './common/edu-sharing-ui-common.module';\nexport * from './mds/mds.module';\nexport * from './mds-viewer/view-instance.service';\nexport * from './directives/border-box-observer.directive';\nexport * from './directives/check-text-overflow.directive';\nexport * from './directives/drag-nodes/drag-nodes';\nexport * from './directives/drag-nodes/nodes-drag-source.directive';\nexport * from './directives/drag-nodes/nodes-drag.directive';\nexport * from './directives/drag-nodes/nodes-drop-target.directive';\nexport * from './directives/focus-state.directive';\nexport * from './directives/icon.directive';\nexport * from './directives/infinite-scroll.directive';\nexport * from './dropdown/dropdown.component';\nexport * from './edu-sharing-ui-configuration';\nexport * from './edu-sharing-ui.module';\nexport * from './list-items/format-duration.pipe';\nexport * from './list-items/list-base/list-base.component';\nexport * from './list-items/list-counts/list-counts.component';\nexport * from './list-items/list-items.module';\nexport * from './list-items/list-text/list-text.component';\nexport * from './list-items/node-row/node-row.component';\nexport * from './node-entries/combined-data-source';\nexport * from './node-entries/custom-templates-data-source';\nexport * from './node-entries/entries-model';\nexport * from './node-entries/items-cap';\nexport * from './node-entries/list-item-label.pipe';\nexport * from './node-entries/node-cache';\nexport * from './node-entries/node-data-source';\nexport * from './node-entries/node-data-source-remote';\nexport * from './node-entries/node-entries-global.service';\nexport * from './node-entries/node-entries-wrapper.component';\nexport * from './node-entries/node-entries.module';\nexport * from './mds-viewer/mds-viewer.component';\nexport * from './mds-viewer/replace-element-with-div';\nexport * from './node-url/node-url.component';\nexport * from './pipes/property-slug.pipe';\nexport * from './pipes/file-size.pipe';\nexport * from './pipes/format-date.pipe';\nexport * from './pipes/mds-duration.pipe';\nexport * from './pipes/node-icon.pipe';\nexport * from './pipes/node-image-size.pipe';\nexport * from './pipes/node-image.pipe';\nexport * from './pipes/node-license.pipe';\nexport * from './pipes/node-person-name.pipe';\nexport * from './pipes/node-title.pipe';\nexport * from './pipes/vcard-name.pipe';\nexport * from './services/abstract/app.service';\nexport * from './services/abstract/keyboard-shortcuts.service';\nexport * from './services/abstract/options-helper.service';\nexport * from './services/abstract/toast.service';\nexport * from './services/accessibility.service';\nexport * from './services/app-container.service';\nexport * from './services/local-events.service';\nexport * from './services/node-helper.service';\nexport * from './services/node-entries.service';\nexport * from './services/nodes-drag-drop.service';\nexport * from './services/options-helper-data.service';\nexport * from './services/repo-url.service';\nexport * from './services/temporary-storage.service';\nexport * from './services/ui.service';\nexport * from './services/render-helper.service';\nexport * from './sort-dropdown/sort-dropdown.component';\nexport * from './spinner/spinner.component';\nexport * from './spinner-small/spinner-small.component';\nexport * from './translations/fallback-translation-handler';\nexport * from './translations/translation-loader';\nexport * from './translations/translations.module';\nexport * from './translations/translations.service';\nexport * from './types/api-models';\nexport * from './types/accessibillity';\nexport * from './types/drag-drop';\nexport * from './types/injection-tokens';\nexport * from './types/keyboard-shortcuts';\nexport * from './types/list-item';\nexport * from './types/option-item';\nexport * from './types/workflow';\nexport * from './util/DateHelper';\nexport * from './util/VCard';\nexport * from './util/color-helper';\nexport * from './util/duration-helper';\nexport * from './util/functions';\nexport * from './util/helper';\nexport * from './util/isNumeric';\nexport * from './util/rest-helper';\nexport * from './util/ui-animation';\nexport * from './util/ui-constants';\nexport * from './mds/mds-helper.service';\nexport * from './services/search-helper.service';\nexport * from './mds-viewer/mds-editor-instance-service.abstract';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2.EduSharingUiConfiguration","Workflow.WORKFLOW_STATUS_UNCHECKED","Workflow.WORKFLOW_STATUS_TO_CHECK","Workflow.WORKFLOW_STATUS_HASFLAWS","Workflow.WORKFLOW_STATUS_CHECKED","combineLatest","i2","i3","i1.MdsEditorInstanceServiceAbstract","i3.UIService","i4.ViewInstanceService","i5.MdsViewerService","i6.NodeHelperService","i7","i9","i10.IconDirective","i11.MdsDurationPipe","i12.VCardNamePipe","i2.MdsViewerService","i5","i6.SpinnerSmallComponent","i7.IconDirective","isArray","i1.UIService","i4","i5.IconDirective","i6","i7.OptionTooltipPipe","i8.ReplaceCharsPipe","i7.DropdownComponent","i8.IconDirective","i9.OptionTooltipPipe","i10.ReplaceCharsPipe","i1.AppContainerService","i1.NodeHelperService","i1.RepoUrlService","i3.RepoUrlService","i3.IconDirective","i1.Toast","i2.UIService","i2.NodesDragDropService","i1.NodesDragDropService","i1.AccessibilityService","i2.NodeHelperService","i4.IconDirective","i2.NodeSourcePipe","Constants","i4.CheckTextOverflowDirective","i6.ListNodeWorkflowComponent","i7.FormatDatePipe","i8.FormatSizePipe","i9.NodeImageSizePipe","i10.NodePersonNamePipe","i11.NodeTitlePipe","i13","i14.NodeSourcePipe","i15.FormatDurationPipe","i1.NodeEntriesGlobalService","i3.ListCollectionInfoComponent","i4.ListNodeLicenseComponent","i5.ListNodeReplicationSourceComponent","i7.ListTextComponent","i8.ListCountsComponent","i3.ListTextComponent","i4.NodeIconPipe","i2.ListTextComponent","observableOf","i4.AppService","delay","i2.TranslationsService","i4.SortDropdownComponent","i8","i2.Toast","i3.NodeEntriesGlobalService","i6.ListItemLabelPipe","i2.NodeImagePipe","i2.NodeEntriesGlobalService","i6.NodeIconPipe","i1.IconDirective","i1.NodeEntriesService","i4.NodeEntriesTemplatesService","i5.NodeEntriesGlobalService","i6.Toast","i8.FocusStateDirective","i9.IconDirective","i10.NodeUrlComponent","i11.ListBaseComponent","i12","i14","i15","i16.NodeRatingComponent","i17.PreviewImageComponent","i18.NodeTypeBadgeComponent","i19.OptionButtonComponent","i20.NodeStatsBadgesComponent","i21.PropertySlugPipe","i22.NodeTitlePipe","i23","i24.ListItemLabelPipe","i3.NodeEntriesTemplatesService","i5.FocusStateDirective","i6.IconDirective","i7.NodeUrlComponent","i8.ListBaseComponent","i9.PreviewImageComponent","i4.NodeHelperService","i5.UIService","i9.BorderBoxObserverDirective","i10.DropdownComponent","i11.IconDirective","i12.InfiniteScrollDirective","i13.SpinnerComponent","i16","i17.ColumnChooserComponent","i18.NodeEntriesCardComponent","i19.NodeEntriesCardSmallComponent","i20.SortSelectPanelComponent","i21.NodesDragDirective","i22.NodesDropTargetDirective","i23.NodeEntriesGlobalOptionsComponent","i24","i3.Toast","i4.TranslationsService","i5.NodeHelperService","i6.UIService","i10","i11","i12.CheckTextOverflowDirective","i13.DropdownComponent","i14.IconDirective","i15.InfiniteScrollDirective","i16.NodeUrlComponent","i17.SpinnerComponent","i18.ListBaseComponent","i19","i20","i21","i25","i26.ColumnChooserComponent","i27.DragPreviewComponent","i28.NodesDragDirective","i29.NodesDropTargetDirective","i30.NodeEntriesGlobalOptionsComponent","i31.NodeIconPipe","i32.NodeTitlePipe","i33","i34.ListItemLabelPipe","i2.LocalEventsService","i4.Toast","i5.KeyboardShortcutsService","i6.OptionsHelperService","i2.NodeEntriesService","i4.KeyboardShortcutsService","i9.NodeEntriesCardGridComponent","i10.NodeEntriesTableComponent","i1.TemporaryStorageService","i4.OptionsHelperDataService","i7.NodeEntriesTemplatesService","i9.NodeEntriesComponent","i3.OptionsHelperDataService"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAAa,WAAW,CAAA;aACN,IAAa,CAAA,aAAA,GAAG,aAAa,CAAC;;aAE9B,IAAY,CAAA,YAAA,GAAG,GAAG,CAAC;aACnB,IAAa,CAAA,aAAA,GAAG,GAAG,CAAC;aACpB,IAA2B,CAAA,2BAAA,GAAG,GAAG,CAAC;aAClC,IAAY,CAAA,YAAA,GAAG,GAAG,CAAC;aACnB,IAAuB,CAAA,uBAAA,GAAG,WAAW,CAAC,YAAY,GAAG,WAAW,CAAC,YAAY,GAAG,CAAC,CAAC;aAClF,IAAqB,CAAA,qBAAA,GAAG,WAAW,CAAC;aACpC,IAAqB,CAAA,qBAAA,GAAG,WAAW,CAAC;aACpC,IAAsB,CAAA,sBAAA,GAAG,YAAY,CAAC;aACtC,IAAsB,CAAA,sBAAA,GAAG,YAAY,CAAC;aAEtC,IAA0B,CAAA,0BAAA,GAAG,aAAa,CAAC;;IAEjD;AAAZ,CAAA,UAAY,aAAa,EAAA;AACrB,IAAA,aAAA,CAAA,aAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO;AACP,IAAA,aAAA,CAAA,aAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK;AACL,IAAA,aAAA,CAAA,aAAA,CAAA,oBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,oBAAkB;AACtB,CAAC,EAJW,aAAa,KAAb,aAAa,GAIxB,EAAA,CAAA,CAAA;;ACnBD;;;AAGG;AAEH;AACA,MAAM,OAAO,GAAG,CAAC,MACb,KAAK,CAAC,OAAO,KAAK,CAAI,CAAM,KAAe,CAAC,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,GAAG;AAEpF;AACM,SAAU,SAAS,CAAC,GAAQ,EAAA;AAC9B,IAAA,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1D;;ICVY;AAAZ,CAAA,UAAY,YAAY,EAAA;AACpB,IAAA,YAAA,CAAA,YAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAG;AACH,IAAA,YAAA,CAAA,YAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK;AACL,IAAA,YAAA,CAAA,YAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM;AACN,IAAA,YAAA,CAAA,YAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK;AACL,IAAA,YAAA,CAAA,YAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAG;AACP,CAAC,EANW,YAAY,KAAZ,YAAY,GAMvB,EAAA,CAAA,CAAA;MACY,aAAa,CAAA;AAA1B,IAAA,WAAA,GAAA;QACI,IAAQ,CAAA,QAAA,GAAI,IAAI;QAChB,IAAc,CAAA,cAAA,GAAI,KAAK;QACvB,IAAW,CAAA,WAAA,GAAI,KAAK;;;;QAIpB,IAAiB,CAAA,iBAAA,GAAI,IAAI;;AAE5B;MAEY,UAAU,CAAA;AACnB;;;;AAIG;IACK,OAAO,QAAQ,CAAC,IAAY,EAAA;QAChC,IAAI,IAAI,GAAG,EAAE;YAAE,OAAO,GAAG,GAAG,IAAI;QAChC,OAAO,IAAI,GAAG,EAAE;;AAGpB;;;;AAIG;IACI,OAAO,WAAW,CAAC,IAAS,EAAA;QAC/B,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE;;AAGnC;;;;;;;AAOG;AACI,IAAA,OAAO,mBAAmB,CAAC,IAAkB,EAAE,MAAc,EAAA;AAChE,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;AAClB,YAAA,OAAO,IAAI;;QAEf,IAAI,UAAU,GAAG,IAAI,IAAI,CAAE,IAAe,GAAG,CAAC,CAAC;AAC/C,QAAA,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;QAC3D,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;AACjF,QAAA,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;AAC5E,QAAA,OAAO,MAAM;;AAGjB;;AAEG;IACI,OAAO,UAAU,CACpB,WAA6B,EAC7B,IAAkB,EAClB,OAAA,GAAyB,IAAI,aAAa,EAAE,EAAA;AAE5C,QAAA,IAAI;YACA,IAAI,OAAO,CAAC,iBAAiB,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;AACtD,gBAAA,OAAO,CAAC,cAAc,GAAG,YAAY,CAAC,MAAM;;AAEhD,YAAA,IAAI,IAAI,IAAI,IAAI,EAAE;AACd,gBAAA,OAAO,IAAI;;AAEf,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;AAClB,gBAAA,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;;YAE3B,IAAI,UAAU,GAAG,IAAI,IAAI,CAAE,IAAe,GAAG,CAAC,CAAC;AAC/C,YAAA,IAAI,SAAS,GAAG,IAAI,IAAI,EAAE;AAC1B,YAAA,IAAI,aAAa,GAAG,IAAI,IAAI,EAAE;YAC9B,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAClD,IAAI,OAAO,GAAG,UAAU,CAAC,YAAY,EAAE,IAAI,SAAS,CAAC,YAAY,EAAE;YACnE,IAAI,WAAW,GAAG,UAAU,CAAC,YAAY,EAAE,IAAI,aAAa,CAAC,YAAY,EAAE;YAC3E,IAAI,MAAM,GAAG,EAAE;AACf,YAAA,IAAI,QAAQ,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,IAAI,IAAI;AAClE,YAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;AACjD,YAAA,IAAI,UAAU,GAAG,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,QAAQ,EAAE;AACrD,YAAA,IAAI,SAAS,GAAG,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI;YAC9D,IAAI,OAAO,GAAG,IAAI;YAClB,IAAI,UAAU,GAAG,OAAO;AACxB,YAAA,IAAI,OAAO,CAAC,WAAW,EAAE;gBACrB,UAAU,IAAI,KAAK;;AAEvB,YAAA,IAAI,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,OAAO,CAAC,cAAc,IAAI,YAAY,CAAC,KAAK,EAAE;AACrE,gBAAA,IAAI,QAAQ,GAAG,EAAE,EAAE;AACf,oBAAA,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;;AAC5D,qBAAA,IAAI,QAAQ,GAAG,EAAE,GAAG,GAAG,EAAE;AAC5B,oBAAA,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,aAAa,EAAE;wBACxC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC;AACrC,qBAAA,CAAC;;qBACC;AACH,oBAAA,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE;AACtC,wBAAA,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;AAC1C,qBAAA,CAAC;;gBAEN,OAAO,GAAG,KAAK;gBACf,UAAU,GAAG,EAAE;;iBACZ,IAAI,OAAO,IAAI,OAAO,CAAC,cAAc,IAAI,YAAY,CAAC,KAAK,EAAE;AAChE,gBAAA,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC;gBACrC,OAAO,GAAG,KAAK;;iBACZ,IAAI,WAAW,IAAI,OAAO,CAAC,cAAc,IAAI,YAAY,CAAC,MAAM,EAAE;AACrE,gBAAA,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC;gBACzC,OAAO,GAAG,KAAK;;AACZ,iBAAA,IACH,CAAC,QAAQ,GAAG,CAAC,IAAI,OAAO,CAAC,cAAc,IAAI,YAAY,CAAC,MAAM;AAC9D,iBAAC,QAAQ,GAAG,EAAE,IAAI,OAAO,CAAC,cAAc,IAAI,YAAY,CAAC,KAAK,CAAC,EACjE;AACE,gBAAA,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;gBAC5D,OAAO,GAAG,KAAK;gBACf,IAAI,CAAC,OAAO,CAAC,cAAc;oBAAE,UAAU,GAAG,EAAE;;iBACzC,IACH,SAAS,KAAK,CAAC;AACf,gBAAA,UAAU,GAAG,EAAE;AACf,gBAAA,OAAO,CAAC,cAAc,IAAI,YAAY,CAAC,KAAK,EAC9C;AACE,gBAAA,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;gBAClE,OAAO,GAAG,KAAK;gBACf,IAAI,CAAC,OAAO,CAAC,cAAc;oBAAE,UAAU,GAAG,EAAE;;iBACzC,IAAI,OAAO,CAAC,cAAc,KAAK,YAAY,CAAC,GAAG,EAAE;AACpD,gBAAA,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;gBAC/D,OAAO,GAAG,KAAK;gBACf,IAAI,CAAC,OAAO,CAAC,cAAc;oBAAE,UAAU,GAAG,EAAE;;iBACzC;gBACH,IAAI,CAAC,OAAO,CAAC,cAAc;oBAAE,UAAU,GAAG,EAAE;;;;YAKhD,IAAI,GAAG,GAAG,MAAM;YAChB,IAAI,OAAO,EAAE;AACT,gBAAA,IAAI,WAAW,CAAC,WAAW,KAAK,IAAI,EAAE;oBAClC,GAAG;wBACC,UAAU,CAAC,WAAW,EAAE;4BACxB,GAAG;4BACH,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;4BAC9C,GAAG;4BACH,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;;qBAC1C;oBACH,GAAG;AACC,wBAAA,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;4BACzC,GAAG;4BACH,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;4BAC9C,GAAG;4BACH,UAAU,CAAC,WAAW,EAAE;;;;AAIpC,YAAA,IAAI,OAAO,CAAC,QAAQ,IAAI,KAAK,EAAE;gBAC3B,GAAG,GAAG,EAAE;;;YAGZ,IAAI,UAAU,EAAE;AACZ,gBAAA,IAAI,GAAG;oBAAE,GAAG,IAAI,IAAI;;;AAIpB,gBAAA,GAAG,IAAI;AACF,qBAAA,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;AACxD,qBAAA,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;AAC1D,qBAAA,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC;;AAEpE,YAAA,OAAO,GAAG;AACV;;;;;;;;;AASJ;;QACE,OAAO,CAAC,EAAE;AACR,YAAA,OAAO,IAAW;;;IAG1B,OAAO,qBAAqB,CAAC,IAAU,EAAA;AACnC,QAAA,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;;AAG1E,IAAA,OAAO,iBAAiB,GAAA;AACpB,QAAA,OAAO,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE;AACrD,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,iBAAiB,EAAE,KAAK;AAC3B,SAAA,CAAC;;AAET;;ACnMD;;AAEG;MACU,UAAU,CAAA;aACF,IAAgB,CAAA,gBAAA,GAAG,0BAA0B,CAAC;IACxD,OAAO,OAAO,CAAC,IAAU,EAAA;QAC5B,IAAI,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC,IAAI;QAC/B,IAAI,IAAI,CAAC,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC;YACxC,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE;QACxD,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,KAAK;QACjC,IAAI,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE;AAChC,QAAA,OAAO,IAAI;;IAER,OAAO,QAAQ,CAAC,IAAU,EAAA;QAC7B,IAAI,IAAI,EAAE,KAAK;YAAE,OAAO,IAAI,CAAC,KAAK;AAClC,QAAA,IAAI,IAAI,EAAE,IAAI,EAAE;YACZ,OAAO,IAAI,EAAE,IAAI;;AAErB,QAAA,IAAI,IAAI,EAAE,UAAU,EAAE;YAClB,OAAO,UAAU,CAAC,sBAAsB,CAAC,IAAI,EAAE,UAAU,CAAC;;AAE9D,QAAA,OAAO,EAAE;;IAEN,OAAO,sBAAsB,CAAC,UAAe,EAAA;AAChD,QAAA,MAAM,KAAK,GAAG,UAAU,CAAC,aAAa,CAAC,cAAc;AACjD,cAAE,UAAU,CAAC,aAAa,CAAC,cAAc;AACzC,cAAE,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC;AACvC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACtB,YAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;;AAE3B,QAAA,OAAO,KAAK;;AAGT,IAAA,OAAO,mBAAmB,CAAC,IAAU,EAAE,UAAkB,EAAA;AAC5D,QAAA,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;;;;MC5BtD,cAAc,CAAA;AACvB,IAAA,WAAA,CAAoB,SAA2B,EAAA;QAA3B,IAAS,CAAA,SAAA,GAAT,SAAS;;AAE7B,IAAA,SAAS,CAAC,KAAU,EAAE,IAAA,GAAiB,IAAI,EAAA;AACvC,QAAA,IAAI,KAAK,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAC7C,IAAI,CAAC,GAAG,CAAC;QACT,IAAI,KAAK,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK;QAC9B,IAAI,KAAK,IAAI,IAAI;YAAE,KAAK,GAAG,CAAC;QAC5B,OAAO,KAAK,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE;YACtC,KAAK,IAAI,IAAI;AACb,YAAA,CAAC,EAAE;;AAEP,QAAA,IAAI,OAAO,GAA6B;YACpC,qBAAqB,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;SACvC;QACD,IAAI,YAAY,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,OAAO,CAAC;AACrD,QAAA,OAAO,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;;+GAhB7C,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAd,cAAc,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,CAAA;;4FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAJ1B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,YAAY;AAClB,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;;;MCAqB,gCAAgC,CAAA;AAAtD,IAAA,WAAA,GAAA;;AAII,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,eAAe,CAAS,IAAI,CAAC;;AAE3C,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,eAAe,CAAS,IAAI,CAAC;;AAK7C;;MCCY,SAAS,CAAA;AAMlB,IAAA,IAAI,eAAe,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,KAAK;;AAG5C,IAAA,WAAA,CACc,wBAAkD,EAClD,QAAkB,EAClB,MAAc,EAAA;QAFd,IAAwB,CAAA,wBAAA,GAAxB,wBAAwB;QACxB,IAAQ,CAAA,QAAA,GAAR,QAAQ;QACR,IAAM,CAAA,MAAA,GAAN,MAAM;AAZpB,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC;AACnC,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC;AAClD,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC;AACnD,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC;;AAYtD,QAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAK;YAC/B,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,KAAK,KAAI;AACzC,gBAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;AAChC,aAAC,CAAC;YACF,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,KAAK,KAAI;AACvC,gBAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;AAChC,aAAC,CAAC;YACF,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,KAAK,KAAI;;;;;AAK7C,gBAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;AAClC,aAAC,CAAC;YACF,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,KAAK,KAAI;;;;;AAK7C,gBAAA,MAAM,OAAO,GAAI,KAAsB,CAAC,WAAW,KAAK,OAAO;gBAC/D,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,KAAK,OAAO,EAAE;AACvC,oBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;;AAEhE,aAAC,CAAC;AACN,SAAC,CAAC;;AAEE,IAAA,gBAAgB,CAAC,KAAoB,EAAA;;;AAGzC,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE;YACzB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC;;AACtD,aAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;YAC9B,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC;;AACvD,aAAA,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM,EAAE;YAC7B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC;;aACtD;;;AAGH,YAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;;;AAI9B,IAAA,kBAAkB,CAAC,KAAmC,EAAA;QAC1D,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;QAC9C,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;QAChD,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;;IAGlD,qCAAqC,GAAA;AACjC,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,CACpF,GAAG,CAAC,CAAC,CAAC,cAAc,EAAE,cAAc,CAAC,KAAK,cAAc,IAAI,cAAc,CAAC,EAC3E,oBAAoB,EAAE,CACzB;;AAGL;;;;;AAKG;IACI,QAAQ,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK;;AAE7B,IAAA,OAAO,kBAAkB,CAAC,IAAY,EAAE,KAAa,EAAA;AACxD,QAAA,IAAI,IAAI,IAAI,WAAW,CAAC,qBAAqB;AAAE,YAAA,OAAO,KAAK,GAAG,MAAM,CAAC,UAAU;AAC/E,QAAA,IAAI,IAAI,IAAI,WAAW,CAAC,qBAAqB;AAAE,YAAA,OAAO,KAAK,GAAG,MAAM,CAAC,UAAU;AAC/E,QAAA,IAAI,IAAI,IAAI,WAAW,CAAC,sBAAsB;AAAE,YAAA,OAAO,KAAK,GAAG,MAAM,CAAC,WAAW;AACjF,QAAA,IAAI,IAAI,IAAI,WAAW,CAAC,sBAAsB;AAAE,YAAA,OAAO,KAAK,GAAG,MAAM,CAAC,WAAW;AACjF,QAAA,OAAO,CAAC,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC;AAC/C,QAAA,OAAO,IAAI;;AAEf,IAAA,kBAAkB,CAAC,OAAqB,EAAA;QACpC,IAAI,OAAO,IAAI,IAAI;AAAE,YAAA,OAAO,IAAI;AAChC,QAAA,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,IAAI,CAAC;QAClD,IAAI,eAAe,GAAiB,EAAE;AACtC,QAAA,KAAK,IAAI,MAAM,IAAI,OAAO,EAAE;AACxB,YAAA,IACI,CAAC,CAAC,MAAM,CAAC,UAAU,KAAK,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC7D,iBAAC,CAAC,MAAM,CAAC,WAAW,KAAK,MAAM,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;iBAChE,CAAC,MAAM,CAAC,cAAc;qBAClB,MAAM,CAAC,cAAc;AAClB,wBAAA,SAAS,CAAC,kBAAkB,CACxB,MAAM,CAAC,cAAc,EACrB,MAAM,CAAC,eAAe,CACzB,CAAC,CAAC;AAEX,gBAAA,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;;AAEpC,QAAA,OAAO,eAAe;;AAG1B;;;;AAIG;AACH,IAAA,MAAM,wBAAwB,CAAC,OAAsC,EAAE,UAAkB,IAAI,EAAA;QACzF,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,KAAI;AACzB,YAAA,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,qBAAqB;AACtC,YAAA,KAAK,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC5C,gBAAA,CAAC,CAAC,SAAS,GAAG,MAAM;AACpB,gBAAA,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AAC/B,aAAC,CAAC;AACN,SAAC,CAAC;AACF,QAAA,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;;AAGxB,IAAA,mBAAmB,CACtB,OAAqB,EACrB,MAAe,EACf,iBAAqC,OAAO,EAAA;QAE5C,IAAI,MAAM,GAAiB,EAAE;AAC7B,QAAA,KAAK,IAAI,MAAM,IAAI,OAAO,EAAE;AACxB,YAAA,IAAI,MAAM,CAAC,QAAQ,KAAK,MAAM,KAAK,CAAC,MAAM,IAAI,cAAc,KAAK,MAAM,CAAC,cAAc,CAAC;AACnF,gBAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;;AAE3B,QAAA,OAAO,MAAM;;AAEjB;;;;;;;;;;AAUG;IACI,sBAAsB,CACzB,gBAAkC,EAClC,aAAsB,EACtB,aAAsB,EACtB,QAAmC,GAAA,IAAI,EACvC,EAAE,KAAK,GAAG,CAAC,EAAE,OAAO,GAAG,IAAI,EAAE,GAAG,EAAE,EAClC,QAAmB,EAAA;AAEnB,QAAA,IAAI,aAAa,IAAI,IAAI,EAAE;AACvB,YAAA,OAAO,IAAI;;QAEf,MAAM,OAAO,GAAG,IAAI,CAAC,wBAAwB,CAAC,uBAAuB,CAAC,aAAa,CAAC;AACpF,QAAA,MAAM,SAAS,GAAoB,gBAAgB,CAAC,eAAe,CAC/D,OAAO,EACP,SAAS,EACT,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAC5B;QACD,IAAI,QAAQ,EAAE;AACV,YAAA,MAAM,QAAQ,GAA2B,SAAS,CAAC,QAAQ;AAC3D,YAAA,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE;AACxB,gBAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC;AAC7B,gBAAA,IAAI,OAAO,YAAY,QAAQ,EAAE;;AAE7B,oBAAA,QAAQ,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,KAAU,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC;;qBACpD;AACH,oBAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,OAAO;;;;;;;;QASnC,MAAM,OAAO,GAAI,SAAS,CAAC,QAAiC,CAAC,SAAS,CAAC,CAAC,CAAgB;AACxF,QAAA,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;QAC9B,IAAI,OAAO,EAAE;AACT,YAAA,aAAa,CAAC,SAAS,GAAG,IAAI;;AAElC,QAAA,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC;QAClC,UAAU,CAAC,MAAK;AACZ,YAAA,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI;SAC/B,EAAE,KAAK,CAAC;AACT,QAAA,OAAO,SAAS;;AAGpB;;;;;;;;;;AAUG;IACI,OAAO,sBAAsB,CAChC,wBAAkD,EAClD,gBAAkC,EAClC,aAAsB,EACtB,aAAsB,EACtB,QAAmC,GAAA,IAAI,EACvC,EAAE,KAAK,GAAG,CAAC,EAAE,OAAO,GAAG,IAAI,EAAE,GAAG,EAAE,EAClC,QAAmB,EAAA;AAEnB,QAAA,IAAI,aAAa,IAAI,IAAI,EAAE;AACvB,YAAA,OAAO,IAAI;;QAEf,MAAM,OAAO,GAAG,wBAAwB,CAAC,uBAAuB,CAAC,aAAa,CAAC;AAC/E,QAAA,MAAM,SAAS,GAAoB,gBAAgB,CAAC,eAAe,CAC/D,OAAO,EACP,SAAS,EACT,QAAQ,CACX;QACD,IAAI,QAAQ,EAAE;AACV,YAAA,MAAM,QAAQ,GAA2B,SAAS,CAAC,QAAQ;AAC3D,YAAA,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE;AACxB,gBAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC;AAC7B,gBAAA,IAAI,OAAO,YAAY,QAAQ,EAAE;;AAE7B,oBAAA,QAAQ,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,KAAU,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC;;qBACpD;AACH,oBAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,OAAO;;;;;;;;QASnC,MAAM,OAAO,GAAI,SAAS,CAAC,QAAiC,CAAC,SAAS,CAAC,CAAC,CAAgB;AACxF,QAAA,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;QAC9B,IAAI,OAAO,EAAE;AACT,YAAA,aAAa,CAAC,SAAS,GAAG,IAAI;;AAElC,QAAA,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC;QAClC,UAAU,CAAC,MAAK;AACZ,YAAA,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI;SAC/B,EAAE,KAAK,CAAC;AACT,QAAA,OAAO,SAAS;;AAGpB;;;;;AAKG;IACH,0BAA0B,CAAC,KAAc,EAAE,OAAA,GAA4B,MAAM,EAAE,UAAU,GAAG,CAAC,EAAA;AACzF,QAAA,IAAI,MAAe;AACnB,QAAA,IAAI,OAAO,KAAK,MAAM,EAAE;AACpB,YAAA,IAAI,MAAM,GAAG,KAAK,CAAC,aAAa;YAChC,OAAO,MAAM,EAAE;AACX,gBAAA,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,EAAE;oBACxE,MAAM,GAAG,MAAM;oBACf;;AAEJ,gBAAA,MAAM,GAAG,MAAM,CAAC,aAAa;;;aAE9B;YACH,MAAM,GAAG,OAAO;;;AAGpB,QAAA,IAAI,CAAC,GACD,KAAK,CAAC,qBAAqB,EAAE,CAAC,GAAG;AACjC,YAAA,MAAM,CAAC,SAAS;AAChB,YAAA,MAAM,CAAC,qBAAqB,EAAE,CAAC,GAAG;;AAEtC,QAAA,CAAC,IAAI,KAAK,CAAC,qBAAqB,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC,MAAM,GAAG,CAAC;QACzF,OAAO,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC;;AAE1D;;;;;AAKG;AACH,IAAA,mBAAmB,CAAC,GAAA,GAAc,CAAC,EAAE,OAAgB,EAAE,UAAU,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,EAAA;AAC7E,QAAA,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,KAAI;AACjC,YAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAK;AAC/B,gBAAA,MAAM,UAAU,GAAG,IAAI,IAAI,GAAG,GAAG,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS;gBACvE,IAAI,OAAO,CAAC,YAAY,CAAC,mBAAmB,CAAC,IAAI,MAAM,EAAE;oBACrD;;AAEJ,gBAAA,MAAM,IAAI,GAAG,UAAU,GAAG,GAAG;gBAC7B,IAAI,OAAO,GAAG,GAAG;AACjB,gBAAA,MAAM,MAAM,GACR,IAAI,IAAI;AACJ,sBAAE,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC;sBAC9B,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY;gBACrD,IAAI,YAAY,GAAG,KAAK;AACxB,gBAAA,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE;oBAClB,GAAG,GAAG,CAAC;oBACP,YAAY,GAAG,IAAI;;AAEvB,gBAAA,IAAI,CAAC,IAAI,IAAI,GAAG,IAAI,MAAM,EAAE;oBACxB,GAAG,GAAG,MAAM;oBACZ,YAAY,GAAG,IAAI;;gBAEvB,IAAI,KAAK,GAAG,EAAE;gBACd,IAAI,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;gBAC/B,MAAM,QAAQ,GAAG,MAAK;AAClB,oBAAA,IAAI,UAAU,GAAG,IAAI,IAAI,GAAG,GAAG,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS;AACrE,oBAAA,MAAM,OAAO,GAAG,UAAU,GAAG,OAAO;AACpC,oBAAA,MAAM,WAAW,GAAG,KAAK,GAAG,EAAE;oBAC9B,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,WAAW,IAAI,UAAU;oBAC9C,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,WAAW,IAAI,UAAU;oBAC/C,MAAM,QAAQ,GAAG,CAAC,EAAE,GAAG,WAAW,IAAI,UAAU;oBAChD,OAAO,GAAG,UAAU;oBACpB,IAAI,QAAQ,GAAG,IAAI;AACnB,oBAAA,IAAI,UAAU,GAAG,GAAG,EAAE;wBAClB,UAAU,IAAI,IAAI,CAAC,GAAG,CAClB,QAAQ,EACR,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,GAAG,GAAG,IAAI,OAAO,EAAE,QAAQ,CAAC,CACnD;AACD,wBAAA,QAAQ,GAAG,UAAU,IAAI,GAAG;;AACzB,yBAAA,IAAI,UAAU,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE;wBAClC,UAAU,IAAI,IAAI,CAAC,GAAG,CAClB,QAAQ,EACR,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,UAAU,IAAI,OAAO,EAAE,QAAQ,CAAC,CACnD;AACD,wBAAA,QAAQ,GAAG,UAAU,IAAI,GAAG;;oBAEhC,IAAI,QAAQ,EAAE;wBACV,UAAU,GAAG,GAAG;;AAGpB,oBAAA,IAAI,IAAI,IAAI,GAAG,EAAE;AACb,wBAAA,OAAO,CAAC,UAAU,GAAG,UAAU;;yBAC5B;AACH,wBAAA,OAAO,CAAC,SAAS,GAAG,UAAU;;oBAElC,IAAI,QAAQ,EAAE;AACV,wBAAA,OAAO,CAAC,eAAe,CAAC,mBAAmB,CAAC;AAC5C,wBAAA,OAAO,EAAE;;yBACN;wBACH,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI;AACnC,wBAAA,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;AAC3B,wBAAA,MAAM,CAAC,qBAAqB,CAAC,QAAQ,CAAC;;AAE9C,iBAAC;AACD,gBAAA,MAAM,CAAC,qBAAqB,CAAC,QAAQ,CAAC;AAEtC,gBAAA,OAAO,CAAC,YAAY,CAAC,mBAAmB,EAAE,MAAM,CAAC;AACrD,aAAC,CAAC;AACN,SAAC,CAAC;;+GAlWG,SAAS,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAT,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,SAAS,cADI,MAAM,EAAA,CAAA,CAAA;;4FACnB,SAAS,EAAA,UAAA,EAAA,CAAA;kBADrB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCbrB,mBAAmB,CAAA;AADhC,IAAA,WAAA,GAAA;AAEa,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC;AAChD;;;;;AAKG;QACH,IAAY,CAAA,YAAA,GAAkB,IAAI;AAClC;;;;AAIG;QACH,IAAW,CAAA,WAAA,GAAoB,MAAM;AACxC;+GAfY,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAnB,mBAAmB,EAAA,CAAA,CAAA;;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B;;;MCGY,gBAAgB,CAAA;AAD7B,IAAA,WAAA,GAAA;AAGI,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,eAAe,CAAS,SAAS,CAAC;AAChD,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,eAAe,CAAgB,SAAS,CAAC;AACvD;+GAJY,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAhB,gBAAgB,EAAA,CAAA,CAAA;;4FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B;8BAE8B,SAAS,EAAA,CAAA;sBAAnC,YAAY;uBAAC,WAAW;;;ACAhB,MAAA,yBAAyB,GAAuB;AACzD,IAAA,EAAE,EAAE,eAAe;AACnB,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,IAAI,EAAE,IAAI;;AAED,MAAA,wBAAwB,GAAuB;AACxD,IAAA,EAAE,EAAE,aAAa;AACjB,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,IAAI,EAAE,IAAI;;AAED,MAAA,wBAAwB,GAAuB;AACxD,IAAA,EAAE,EAAE,cAAc;AAClB,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,IAAI,EAAE,IAAI;;AAED,MAAA,uBAAuB,GAAuB;AACvD,IAAA,EAAE,EAAE,aAAa;AACjB,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,WAAW,EAAE,KAAK;AAClB,IAAA,IAAI,EAAE,IAAI;;;AC3Bd;;;;;AAKG;MACU,gBAAgB,GAAG,IAAI,cAAc,CAAS,kBAAkB;MAEhE,UAAU,CAAA;AAAvB,IAAA,WAAA,GAAA;AACI;;;AAGG;QACH,IAAe,CAAA,eAAA,GAAa,IAAI;;AACnC;AAED;;AAEG;MACU,WAAW,GAAG,IAAI,cAAc,CAAa,aAAa;AACvE;;;;;;;AAOG;MACU,wBAAwB,GAAG,IAAI,cAAc,CACtD,0BAA0B;;ICrBlB;AAAZ,CAAA,UAAY,cAAc,EAAA;;AAEtB,IAAA,cAAA,CAAA,cAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK;;AAEL,IAAA,cAAA,CAAA,cAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAS;AACb,CAAC,EALW,cAAc,KAAd,cAAc,GAKzB,EAAA,CAAA,CAAA;MACY,UAAU,CAAA;AAoInB;;;;;;;AAOG;IACH,WACW,CAAA,IAAY,EACZ,IAAY;;IAEZ,QAAiE,EAAA;QAHjE,IAAI,CAAA,IAAA,GAAJ,IAAI;QACJ,IAAI,CAAA,IAAA,GAAJ,IAAI;QAEJ,IAAQ,CAAA,QAAA,GAAR,QAAQ;AA/InB;;;AAGG;QACI,IAAU,CAAA,UAAA,GAAG,KAAK;AACzB;;;AAGG;QACI,IAAY,CAAA,YAAA,GAAG,KAAK;AAC3B;;;AAGG;QACI,IAAQ,CAAA,QAAA,GAAG,KAAK;AACvB;;AAEG;QACI,IAAe,CAAA,eAAA,GAAG,IAAI;AAC7B;;;AAGG;QACI,IAAc,CAAA,cAAA,GAAuB,OAAO;AACnD;;;;;AAKG;QACI,IAAU,CAAA,UAAA,GAAG,KAAK;AACzB;;;;;AAKG;QACI,IAAU,CAAA,UAAA,GAAG,KAAK;AACzB;;;AAGG;QACI,IAAU,CAAA,UAAA,GAAG,KAAK;AACzB;;;AAGG;QACI,IAAS,CAAA,SAAA,GAAG,EAAE;AACrB;;;AAGG;QACI,IAAW,CAAA,WAAA,GAAG,KAAK;AAY1B;;;AAGG;QACI,IAAS,CAAA,SAAA,GAAG,IAAI;AAmCvB;;AAEG;QACI,IAAQ,CAAA,QAAA,GAAG,IAAI;AAatB;;AAEG;AACI,QAAA,IAAA,CAAA,WAAW,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC;AAGhC,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,OAAO;AAClC,QAAA,IAAA,CAAA,oBAAoB,GAAG,cAAc,CAAC,KAAK;AAE3C,QAAA,IAAA,CAAA,mBAAmB,GAAG,QAAQ,CAAC,OAAO;;AAiBhD;MACY,aAAa,CAAA;AAA1B,IAAA,WAAA,GAAA;AACI;;;AAGG;QACI,IAAiB,CAAA,iBAAA,GAAI,IAAI;;AAcnC;IACW;AAAZ,CAAA,UAAY,QAAQ,EAAA;AAChB,IAAA,QAAA,CAAA,QAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO;AACP,IAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACR,CAAC,EAHW,QAAQ,KAAR,QAAQ,GAGnB,EAAA,CAAA,CAAA;IACW;AAAZ,CAAA,UAAY,KAAK,EAAA;AACb,IAAA,KAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,KAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,KAAA,CAAA,mBAAA,CAAA,GAAA,mBAAuC;AACvC,IAAA,KAAA,CAAA,eAAA,CAAA,GAAA,eAA+B;AAC/B,IAAA,KAAA,CAAA,uBAAA,CAAA,GAAA,uBAA+C;AAC/C,IAAA,KAAA,CAAA,sBAAA,CAAA,GAAA,sBAA6C;AAC7C,IAAA,KAAA,CAAA,uBAAA,CAAA,GAAA,uBAA+C;AAC/C,IAAA,KAAA,CAAA,eAAA,CAAA,GAAA,eAA+B;AAC/B,IAAA,KAAA,CAAA,eAAA,CAAA,GAAA,eAA+B;AAC/B,IAAA,KAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,KAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,KAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC;AACjC,IAAA,KAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,KAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,KAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AAEzB,IAAA,KAAA,CAAA,sBAAA,CAAA,GAAA,sBAA6C;AAC7C,IAAA,KAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,KAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AACjC,CAAC,EApBW,KAAK,KAAL,KAAK,GAoBhB,EAAA,CAAA,CAAA;IACW;AAAZ,CAAA,UAAY,WAAW,EAAA;AACnB,IAAA,WAAA,CAAA,WAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,WAAA,CAAA,WAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAS;AACT,IAAA,WAAA,CAAA,WAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM;AACN,IAAA,WAAA,CAAA,WAAA,CAAA,mBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,mBAAiB;AACjB,IAAA,WAAA,CAAA,WAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,GAAA,aAAW;AACX,IAAA,WAAA,CAAA,WAAA,CAAA,mBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,mBAAiB;AACjB,IAAA,WAAA,CAAA,WAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,GAAA,cAAY;AACZ,IAAA,WAAA,CAAA,WAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM;AACN,IAAA,WAAA,CAAA,WAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK;AACL,IAAA,WAAA,CAAA,WAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,GAAA,aAAW;AACX,IAAA,WAAA,CAAA,WAAA,CAAA,SAAA,CAAA,GAAA,EAAA,CAAA,GAAA,SAAO;AACX,CAAC,EAZW,WAAW,KAAX,WAAW,GAYtB,EAAA,CAAA,CAAA;MACY,WAAW,CAAA;AACpB;;;AAGG;IACH,WAAmB,CAAA,EAAU,EAAS,QAAgB,EAAA;QAAnC,IAAE,CAAA,EAAA,GAAF,EAAE;QAAiB,IAAQ,CAAA,QAAA,GAAR,QAAQ;;AACjD;MACY,aAAa,CAAA;aACf,IAAO,CAAA,OAAA,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;aACzC,IAAM,CAAA,MAAA,GAAG,IAAI,WAAW,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;aACvC,IAAI,CAAA,IAAA,GAAG,IAAI,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;aACnC,IAAe,CAAA,eAAA,GAAG,IAAI,WAAW,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;aACzD,IAAc,CAAA,cAAA,GAAG,IAAI,WAAW,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;aACvD,IAAK,CAAA,KAAA,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;aACrC,IAAI,CAAA,IAAA,GAAG,IAAI,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;aACnC,IAAc,CAAA,cAAA,GAAG,IAAI,WAAW,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;aACvD,IAAM,CAAA,MAAA,GAAG,IAAI,WAAW,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;aACvC,IAAO,CAAA,OAAA,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;;IAExC;AAAZ,CAAA,UAAY,SAAS,EAAA;AACjB,IAAA,SAAA,CAAA,SAAA,CAAA,qBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,qBAAmB;AACnB,IAAA,SAAA,CAAA,SAAA,CAAA,uBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,uBAAqB;AACrB,IAAA,SAAA,CAAA,SAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAS;AACT,IAAA,SAAA,CAAA,SAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,GAAA,aAAW;AACX,IAAA,SAAA,CAAA,SAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK;AACL,IAAA,SAAA,CAAA,SAAA,CAAA,qBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,qBAAmB;AACnB,IAAA,SAAA,CAAA,SAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK;AACL,IAAA,SAAA,CAAA,SAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,GAAA,cAAY;AACZ,IAAA,SAAA,CAAA,SAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM;AACN,IAAA,SAAA,CAAA,SAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,GAAA,aAAW;AACX,IAAA,SAAA,CAAA,SAAA,CAAA,kBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,kBAAgB;AAChB,IAAA,SAAA,CAAA,SAAA,CAAA,YAAA,CAAA,GAAA,EAAA,CAAA,GAAA,YAAU;AACV,IAAA,SAAA,CAAA,SAAA,CAAA,gBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,gBAAc;AACd,IAAA,SAAA,CAAA,SAAA,CAAA,MAAA,CAAA,GAAA,EAAA,CAAA,GAAA,MAAI;AACJ,IAAA,SAAA,CAAA,SAAA,CAAA,SAAA,CAAA,GAAA,EAAA,CAAA,GAAA,SAAO;AACP,IAAA,SAAA,CAAA,SAAA,CAAA,WAAA,CAAA,GAAA,EAAA,CAAA,GAAA,WAAS;AACT,IAAA,SAAA,CAAA,SAAA,CAAA,SAAA,CAAA,GAAA,EAAA,CAAA,GAAA,SAAO;AACX,CAAC,EAlBW,SAAS,KAAT,SAAS,GAkBpB,EAAA,CAAA,CAAA;IAEW;AAAZ,CAAA,UAAY,MAAM,EAAA;AACd,IAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,MAAA,CAAA,MAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,GAAA,cAAY;AACZ,IAAA,MAAA,CAAA,MAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAS;AACT,IAAA,MAAA,CAAA,MAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAU;AACd,CAAC,EALW,MAAM,KAAN,MAAM,GAKjB,EAAA,CAAA,CAAA;;MCvQY,qBAAqB,GAAG,IAAI,cAAc,CACnD,wBAAwB;MAMf,yBAAyB,CAAA;AAHtC,IAAA,WAAA,GAAA;AAKI;;;AAGG;QACH,IAAU,CAAA,UAAA,GAAG,KAAK;AAKrB;AAHG,IAAA,OAAO,MAAM,CAAC,MAAA,GAA0C,EAAE,EAAA;QACtD,OAAO,EAAE,GAAG,IAAI,yBAAyB,EAAE,EAAE,GAAG,MAAM,EAAE;;+GATnD,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cAFtB,MAAM,EAAA,CAAA,CAAA;;4FAET,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA;;AAgBK,SAAU,iBAAiB,CAAC,MAAwC,EAAA;IACtE,OAAO;;;AAGH,QAAA;AACI,YAAA,OAAO,EAAE,qBAAqB;AAC9B,YAAA,QAAQ,EAAE,MAAM;AACnB,SAAA;;;AAGD,QAAA;AACI,YAAA,OAAO,EAAE,yBAAyB;YAClC,IAAI,EAAE,CAAC,qBAAqB,CAAC;;YAE7B,UAAU,EAAE,CAAC,YAA6C,KACtD,yBAAyB,CAAC,MAAM,CAAC,YAAY,CAAC;AACrD,SAAA;AACD,QAAA;AACI,YAAA,OAAO,EAAE,yBAAyB;YAClC,IAAI,EAAE,CAAC,qBAAqB,CAAC;;YAE7B,UAAU,EAAE,CAAC,YAA6C,KACtD,yBAAyB,CAAC,MAAM,CAAC,YAAY,CAAC;AACrD,SAAA;KACJ;AACL;;AC5CA;;;;;AAKG;MAIU,cAAc,CAAA;IACvB,WACY,CAAA,cAA8B,EAC9B,aAAwC,EAAA;QADxC,IAAc,CAAA,cAAA,GAAd,cAAc;QACd,IAAa,CAAA,aAAA,GAAb,aAAa;;AAGzB;;AAEG;AACH,IAAA,MAAM,UAAU,CAAC,GAAW,EAAE,IAAU,EAAA;AACpC,QAAA,IACI,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU;AAC9B,YAAA,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU;aAC7B,MAAM,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,EAClF;AACE,YAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;;aAC/B;AACH,YAAA,OAAO,GAAG;;;AAIlB;;;;AAIG;AACH,IAAA,iBAAiB,CAAC,GAAW,EAAA;AACzB,QAAA,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC;QAC9B,SAAS,CAAC,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI;QACrC,SAAS,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ;QAC7C,OAAO,SAAS,CAAC,IAAI;;+GA9BhB,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,yBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cAFX,MAAM,EAAA,CAAA,CAAA;;4FAET,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA;;;MCSY,iBAAiB,CAAA;IAiB1B,WACc,CAAA,SAA2B,EAC3B,iBAAoC,EACpC,cAA8B,EAC9B,aAA4B,EAC5B,cAA8B,EACM,cAAsB,EAAA;QAL1D,IAAS,CAAA,SAAA,GAAT,SAAS;QACT,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;QACjB,IAAc,CAAA,cAAA,GAAd,cAAc;QACd,IAAa,CAAA,aAAA,GAAb,aAAa;QACb,IAAc,CAAA,cAAA,GAAd,cAAc;QACsB,IAAc,CAAA,cAAA,GAAd,cAAc;AAtBvD,QAAA,IAAA,CAAA,YAAY,GAAG;AACpB,YAAA,WAAW,EAAE,wDAAwD;AACrE,YAAA,KAAK,EAAE,iFAAiF;AACxF,YAAA,QAAQ,EACJ,oFAAoF;AACxF,YAAA,QAAQ,EACJ,oFAAoF;AACxF,YAAA,QAAQ,EACJ,oFAAoF;AACxF,YAAA,WAAW,EACP,uFAAuF;AAC3F,YAAA,WAAW,EACP,uFAAuF;AAC3F,YAAA,IAAI,EAAE,0EAA0E;AAChF,YAAA,GAAG,EAAE,gDAAgD;SAC3B;;AAUvB,IAAA,sBAAsB,CAAC,IAAU,EAAA;AACpC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI;QAC5D,IAAI,IAAI,GAAG,MAAM;QACjB,IAAI,SAAS,GAAG,SAAS;AACzB,QAAA,IAAI,KAAK,KAAK,aAAa,CAAC,kBAAkB,EAAE;YAC5C,IAAI,GAAG,MAAM;YACb,SAAS,GAAG,IAAI;;AAEpB,QAAA,IACI,KAAK,KAAK,aAAa,CAAC,oBAAoB;AAC5C,YAAA,KAAK,KAAK,aAAa,CAAC,sBAAsB,EAChD;YACE,IAAI,GAAG,OAAO;YACd,SAAS,GAAG,QAAQ;;AAExB,QAAA,IACI,KAAK,KAAK,aAAa,CAAC,mBAAmB;AAC3C,YAAA,KAAK,KAAK,aAAa,CAAC,6BAA6B,EACvD;YACE,IAAI,GAAG,UAAU;YACjB,SAAS,GAAG,QAAQ;;QAExB,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,KAAK,aAAa,CAAC,wBAAwB,EAAE;YAClE,IAAI,GAAG,MAAM;YACb,SAAS,GAAG,gBAAgB;;QAEhC,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,KAAK,aAAa,CAAC,2BAA2B,EAAE;YACrE,IAAI,GAAG,UAAU;YACjB,SAAS,GAAG,mBAAmB;;AAEnC,QAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;;AAE9B;;AAEG;IACH,MAAM,cAAc,CAAC,IAAU,EAAA;;AAE3B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,GAAG,aAAa,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACtE,IAAI,OAAO,EAAE;AACT,YAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC;;QAE/C,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI;;AAGxF;;AAEG;AACI,IAAA,sBAAsB,CAAC,MAAc,EAAE,iBAAiB,GAAG,IAAI,EAAA;AAClE,QAAA,IAAI,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE;QAClD,IAAI,IAAI,IAAI,EAAE;YAAE,IAAI,GAAG,MAAM;AAE7B,QAAA,MAAM,aAAa,GAAG;YAClB,MAAM;YACN,UAAU;YACV,aAAa;YACb,aAAa;YACb,UAAU;YACV,UAAU;YACV,OAAO;YACP,gBAAgB;YAChB,mBAAmB;YACnB,QAAQ;YACR,gBAAgB;YAChB,WAAW;YACX,kBAAkB;YAClB,aAAa;YACb,MAAM;YACN,KAAK;YACL,WAAW;YACX,4BAA4B;SAC/B;QACD,IAAI,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,iBAAiB;YAAE,OAAO,IAAI,CAAC;AACzE,QAAA,IAAI,IAAI,IAAI,MAAM,IAAI,CAAC,iBAAiB;AAAE,YAAA,OAAO,IAAI;AACrD,QAAA,MAAM,MAAM,GACR,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,GAAG,wBAAwB,GAAG,IAAI,GAAG,MAAM;AACpF,QAAA,OAAO,MAAM;;AAEjB;;;;;AAKG;AACI,IAAA,cAAc,CAAC,IAAU,EAAA;AAC5B,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;AAC/D,QAAA,IAAI,CAAC,IAAI;YAAE,IAAI,GAAG,EAAE;AACpB,QAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC;;AAG5C;;;;;AAKG;AACI,IAAA,sBAAsB,CAAC,IAAY,EAAA;AACtC,QAAA,IAAI,IAAI,IAAI,EAAE,EAAE;YACZ,IAAI,GAAG,MAAM;;QAEjB,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;;;AAI1D;;;;;AAKG;AACI,IAAA,qBAAqB,CACxB,eAAuB,EACvB,cAAsB,EACtB,aAAqB,EAAA;AAErB,QAAA,MAAM,IAAI,GAAG,cAAc,KAAK,KAAK;AACrC,QAAA,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,aAAa,GAAG,EAAE,GAAG,aAAa,CAAC,WAAW,EAAE,GAAG,GAAG;QAC9E,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC;QAC9C,IAAI,CAAC,GAAG,EAAE;AACN,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;;QAEnB,OAAO,EAAE,CACL;AACK,aAAA,OAAO,CAAC,aAAa,EAAE,cAAc;AACrC,aAAA,OAAO,CAAC,YAAY,EAAE,MAAM;AAC5B,aAAA,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,IAAI,IAAI,CAAC,CACnE;;AAGE,IAAA,qBAAqB,CAAC,EAAU,EAAA;AACnC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE;AACrC,QAAA,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;;AAE7C,IAAA,iBAAiB,CAAC,IAAU,EAAE,aAAa,GAAG,KAAK,EAAA;AACtD,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAClE,IAAI,CAAC,KAAK,EAAE;AACR,YAAA,OAAO,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC;;QAEvD,OAAO;AACH,YAAA,OAAO,EAAE,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;AAC1C,YAAA,OAAO,EAAE,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;SAC7C;;IAEL,wBAAwB,CAAC,aAAa,GAAG,KAAK,EAAA;AAC1C,QAAA,MAAM,MAAM,GAAG;AACX,YAAA,OAAO,EAAE,IAAmC;AAC5C,YAAA,OAAO,EAAE,IAAmC;SAC/C;QACD,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QACvC,IAAI,aAAa,GAAW,IAAI;QAChC,IAAI,aAAa,EAAE;YACf,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,wBAAwB,CAAC;;QAExE,IAAI,aAAa,EAAE;YACf,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,aAAa,CAAC;;aACrE;AACH,YAAA,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO;;AAEnC,QAAA,OAAO,MAAM;;IAEjB,YAAY,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,oBAAoB,EAAE;AACpD,YAAAC,yBAAkC;AAClC,YAAAC,wBAAiC;AACjC,YAAAC,wBAAiC;AACjC,YAAAC,uBAAgC;AACnC,SAAA,CAAC;;IAEN,cAAc,CAAwB,MAAS,EAAE,MAAS,EAAA;AACtD,QAAA,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU;AACpC,QAAA,MAAe,CAAC,IAAI,GAAI,MAAe,CAAC,IAAI;AAC5C,QAAA,MAAe,CAAC,KAAK,GAAI,MAAe,CAAC,KAAK;AAC9C,QAAA,MAAe,CAAC,OAAO,GAAI,MAAe,CAAC,OAAO;AAClD,QAAA,MAAe,CAAC,OAAO,GAAI,MAAe,CAAC,OAAO;AAClD,QAAA,MAAe,CAAC,aAAa,GAAI,MAAe,CAAC,aAAa;AAC9D,QAAA,MAAe,CAAC,OAAO,GAAI,MAAe,CAAC,OAAO;AAClD,QAAA,MAAe,CAAC,MAAM,GAAI,MAAe,CAAC,MAAM;;AAErD,IAAA,gBAAgB,CAAC,IAAU,EAAA;AACvB,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU;;AAEpF,IAAA,iBAAiB,CAAC,GAAW,EAAA;AAChC,QAAA,OAAO,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,IAAI,wBAAwB,GAAG,GAAG,CAAC,WAAW,EAAE,GAAG,MAAM;;IAG9F,WAAW,CAAC,IAAkC,EAAE,IAAU,EAAA;AACtD,QAAA,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE;AACZ,YAAA,OAAO,IAAI;;QAEf,IAAI,IAAI,GAAgD,IAAI;AAC5D,QAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;AAC7B,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK;AACpC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI;AAClC,YAAA,MAAM,WAAW,GAAW;AACxB,gBAAA,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE;aAClB;AACD,YAAA,IAAI,IAAI,KAAK,aAAa,CAAC,wBAAwB,EAAE;AACjD,gBAAA,WAAW,CAAC,KAAK,GAAG,aAAa,CAAC,8BAA8B;;AAC7D,iBAAA,IAAI,IAAI,KAAK,aAAa,CAAC,2BAA2B,EAAE;AAC3D,gBAAA,WAAW,CAAC,KAAK,GAAG,aAAa,CAAC,iCAAiC;;AAChE,iBAAA,IAAI,KAAK,KAAK,aAAa,CAAC,6BAA6B,EAAE;AAC9D,gBAAA,WAAW,CAAC,KAAK,GAAG,aAAa,CAAC,mBAAmB;;AAEzD,YAAA,IAAI,GAAG;AACH,gBAAA,UAAU,EAAE,WAAW,CAAC,aAAa,GAAG,aAAa;gBACrD,WAAW;aACd;;aACE;AACH,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AAClB,gBAAA,IAAI,IAAI;AACR,gBAAA,IACI,IAAI,CAAC,UAAU,GAAG,aAAa,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;oBAC3D,aAAa,CAAC,UAAU,EAC1B;AACE,oBAAA,IAAI,GAAG,WAAW,CAAC,aAAa,GAAG,gBAAgB;;qBAChD;AACH,oBAAA,IAAI,GAAG,WAAW,CAAC,aAAa,GAAG,WAAW;;AAElD,gBAAA,IAAI,GAAG;AACH,oBAAA,UAAU,EAAE,IAAI;oBAChB,WAAW,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE;iBACnC;;AACE,iBAAA,IAAI,IAAI,CAAC,GAAG,EAAE;gBACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,IAAI,CAAC;AAC/D,gBAAA,IAAI,GAAG;oBACH,UAAU,EAAE,WAAW,CAAC,aAAa,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE;AAC/D,oBAAA,WAAW,EAAE;AACT,wBAAA,UAAU,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI;AAC3C,wBAAA,QAAQ,EAAG,IAAqB,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE;AACjD,wBAAA,kBAAkB,EAAG,IAAqB,CAAC,kBAAkB,EAAE,GAAG,CAAC,EAAE;AACxE,qBAAA;iBACJ;;;AAGT,QAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACf,YAAA,OAAO,EAAE;;AAEb,QAAA,IAAI,IAAI,KAAK,YAAY,EAAE;AACvB,YAAA,OAAO,GAAG,GAAG,IAAI,CAAC,UAAU;;;AAGhC,QAAA,IAAI,CAAC,WAAW,CAAC,eAAe,GAAG,IAAI;QACvC,OAAO,IAAI,CAAC,WAAW;;AAG3B;;AAEG;AACH,IAAA,mBAAmB,CAAC,CAAO,EAAA;AACvB,QAAA,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,aAAa,CAAC,2BAA2B,CAAC,GAAG,CAAC,CAAC;;AAG3E;;;AAGG;AACH,IAAA,aAAa,CAAC,IAAU,EAAA;QACpB,OAAO,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,kBAAkB,CAAC;;AAEpE;;;;;AAKG;IACI,aAAa,CAAC,KAAa,EAAE,KAAa,EAAE,IAAI,GAAG,cAAc,CAAC,KAAK,EAAA;QAC1E,IAAI,KAAK,IAAI,IAAI;AAAE,YAAA,OAAO,IAAI;AAC9B,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACtB,IAAI,WAAW,GAAG,IAAI;;YAEtB,IACI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,uBAAuB,CAAC;AAC9D,gBAAA,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,EAC/B;AACE,gBAAA,WAAW,GAAG,cAAc,CAAC,KAAK;;AAEtC,YAAA,IAAI,WAAW,KAAK,cAAc,CAAC,SAAS,EAAE;AAC1C,gBAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,uBAAuB,CAAC,EAAE;AAChE,oBAAA,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;wBACpE;;;AAGR,gBAAA,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;oBACpE;;AAEJ,gBAAA,IAAI,aAAa,CAAC,+BAA+B,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;;AAErE,oBAAA,OAAO,KAAK;;;;AAIpB,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;AACnD,gBAAA,OAAO,KAAK;;;AAGpB,QAAA,OAAO,IAAI;;AAhUN,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,yKAuBF,gBAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAvB/B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cAFd,MAAM,EAAA,CAAA,CAAA;;4FAET,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA;;0BAwBQ;;0BAAY,MAAM;2BAAC,gBAAgB;;;AC7CtC,SAAU,OAAO,CAAI,KAAQ,EAAA;AAC/B,IAAA,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;AAChD;AAEM,SAAU,MAAM,CAAC,KAAc,EAAA;IACjC,OAAO,KAAK,IAAI,KAAK;AACzB;SAEgB,SAAS,GAAA;AACrB,IAAA,OAAO,OAAO,CAAC,OAAO,EAAE;AAC5B;SAEgB,SAAS,GAAA;AACrB,IAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC;AAChE;;ACdA;;AAEG;AAsBH;;;;;;;;;;;AAWG;MAKU,aAAa,CAAA;AAQtB;;;;;;AAMG;IACH,IAAa,OAAO,CAAC,OAAe,EAAA;AAChC,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;;;IAI5B,IAAa,IAAI,CAAC,IAAa,EAAA;AAC3B,QAAA,IAAI,GAAG,qBAAqB,CAAC,IAAI,CAAC;AAClC,QAAA,IAAI,IAAI,KAAK,IAAI,CAAC,KAAK,EAAE;AACrB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;gBACd,IAAI,CAAC,UAAU,EAAE;;;;IAK7B,IAAa,MAAM,CAAC,EAAU,EAAA;AAC1B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;;IAG7B,WACY,CAAA,OAAgC,EAChC,IAAgB,EAChB,SAA2B,EAC3B,QAAmB,EACP,MAAqB,EAAA;QAJjC,IAAO,CAAA,OAAA,GAAP,OAAO;QACP,IAAI,CAAA,IAAA,GAAJ,IAAI;QACJ,IAAS,CAAA,SAAA,GAAT,SAAS;QACT,IAAQ,CAAA,QAAA,GAAR,QAAQ;QACI,IAAM,CAAA,MAAA,GAAN,MAAM;AAtCtB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,eAAe,CAAS,IAAI,CAAC;QAI/C,IAAO,CAAA,OAAA,GAAG,KAAK;QAoCnBC,eAAa,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;aACjF,IAAI,CAAC,kBAAkB,EAAE;AACzB,aAAA,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,WAAW,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;;AAGxF,IAAA,MAAM,QAAQ,GAAA;AACV,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACnB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC;;;QAG9D,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;QACpD,IAAI,CAAC,UAAU,EAAE;;IAGrB,WAAW,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;;;AAIzB,IAAA,MAAM,OAAO,CAAC,EAAU,EAAE,WAAwB,EAAA;AACtD,QAAA,IAAI,IAAI,CAAC,GAAG,EAAE;AACV,YAAA,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CACvC,WAAW,EACX,cAAc,EACd,gBAAgB,CACnB;AACD,YAAA,IAAI,IAAI,CAAC,GAAG,EAAE;AACV,gBAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC;;;AAGvE,QAAA,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;AACvB,YAAA,IAAI;gBACA,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5B,gBAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,QAAQ,GAAG,CAAG,EAAA,QAAQ,MAAM;AACzE,gBAAA,MAAM,IAAI,GAAG,CAAuB,oBAAA,EAAA,QAAQ,EAAE;gBAE9C,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;AAEnF,gBAAA,IAAI,CAAC,OAAO;oBAAE;AAEd,gBAAA,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE;gBAC9B,MAAM,GAAG,GAAG,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,eAAe,CAAC;gBAC5D,MAAM,UAAU,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC;gBAE3C,IAAI,CAAC,UAAU,EAAE;AACb,oBAAA,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC;oBACjD;;AAGJ,gBAAA,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;AACrC,gBAAA,IAAI,CAAC,GAAG,GAAG,UAAU;AAErB,gBAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC;AAE/D,gBAAA,IAAI,IAAI,CAAC,KAAK,EAAE;oBACZ,IAAI,CAAC,UAAU,EAAE;;gBAGrB;;YACF,OAAO,KAAK,EAAE;AACZ,gBAAA,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC;gBAC1C;;;QAGR,IAAI,WAAW,GAAW,IAAI;AAC9B,QAAA,MAAM,OAAO,GAAG,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,KAAK,EAAE,CAAC;AAC7D,QAAA,IAAI,OAAO,EAAE,MAAM,KAAK,CAAC,EAAE;YACvB,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE;AAC7B,YAAA,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ;;AAErC,QAAA,IAAI,CAAC,GAAG,GAAG,EAAE;AACb,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACZ,IAAI,CAAC,UAAU,EAAE;;AAErB,QAAA,IAAI,QAAgB;QACpB,IAAI,EAAE,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE;YACxC,QAAQ,GAAG,WAAW;AACtB,YAAA,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;;aACjB,IAAI,EAAE,EAAE,UAAU,CAAC,SAAS,CAAC,IAAI,WAAW,EAAE;YACjD,QAAQ,GAAG,cAAc;AACzB,YAAA,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;;aACjB;YACH,QAAQ,GAAG,gBAAgB;;QAE/B,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClD,IAAI,WAAW,EAAE;YACb,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;;QAEzD,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,GAAG,EAAE;;IAGrC,UAAU,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;YAC1B,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE;AACxB,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AAC7D,oBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AACzB,iBAAC,CAAC;;iBACC;AACH,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;;;;AAKzB,IAAA,UAAU,CAAC,OAAe,EAAA;AAC9B,QAAA,IAAI,IAAI,CAAC,GAAG,EAAE;;YAEV,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC;;AAEhD,QAAA,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YAC9B,IAAI,CAAC,iBAAiB,EAAE;;AAE5B,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,OAAO;;;IAIpC,iBAAiB,GAAA;QACrB,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;QACjD,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC;AACrD,QAAA,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,qBAAqB,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC;;+GAjKzE,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAN,IAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAO,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAb,aAAa,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAJzB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,6BAA6B;AACvC,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;;0BAwCQ;yCAxBQ,OAAO,EAAA,CAAA;sBAAnB;gBAKY,IAAI,EAAA,CAAA;sBAAhB;gBAUY,MAAM,EAAA,CAAA;sBAAlB;;;MChEQ,eAAe,CAAA;AACxB,IAAA,SAAS,CAAC,KAAa,EAAA;QACnB,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE;AAChC,YAAA,OAAO,GAAG;;AAEd,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;QACvD,MAAM,KAAK,GAAW,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;AACrD,QAAA,MAAM,OAAO,GAAW,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,GAAG,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;AACtE,QAAA,IAAI,KAAK,GAAG,CAAC,EAAE;AACX,YAAA,OAAO,KAAK,GAAG,IAAI,GAAG,OAAO,GAAG,GAAG;;QAEvC,OAAO,OAAO,GAAG,GAAG;;+GAXf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAf,eAAe,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,gBAAA,EAAA,CAAA,CAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAJ3B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,gBAAgB;AACtB,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;;;ACLD;;AAEG;MAEU,KAAK,CAAA;aACA,IAAW,CAAA,WAAA,GAAG,CAAH,CAAK;aAChB,IAAQ,CAAA,QAAA,GAAG,CAAH,CAAK;AAI3B,IAAA,WAAA,CAAY,QAAgB,IAAI,EAAA;;QAFxB,IAAO,CAAA,OAAA,GAAG,KAAK;QAGnB,IAAI,KAAK,EAAE;YACP,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;;YAE9B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;gBACpB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC;;YAE1C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;gBACtB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC;;YAE1C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAClB,gBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,WAAW,CAAC;;AAExD,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;;aAChB;AACH,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;AAC9B,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;AAC9B,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;AAC5B,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;;;AAI5B;;;AAGG;IACI,OAAO,GAAA;;QAEV,QACI,IAAI,CAAC,SAAS;AACd,YAAA,IAAI,CAAC,OAAO;AACZ,YAAA,IAAI,CAAC,GAAG;AACR,YAAA,IAAI,CAAC,MAAM;AACX,YAAA,IAAI,CAAC,IAAI;AACT,YAAA,IAAI,CAAC,GAAG;YACR,IAAI,CAAC,OAAO;;IAGpB,IAAW,SAAS,CAAC,IAAY,EAAA;AAC7B,QAAA,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC;;IAE/B,IAAW,OAAO,CAAC,IAAY,EAAA;AAC3B,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC;;IAE7B,IAAW,KAAK,CAAC,IAAY,EAAA;AACzB,QAAA,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC;;IAE3B,IAAW,GAAG,CAAC,IAAY,EAAA;AACvB,QAAA,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC;;IAEzB,IAAW,QAAQ,CAAC,IAAY,EAAA;AAC5B,QAAA,IAAI,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,CAAC;;IAEzC,IAAW,GAAG,CAAC,IAAY,EAAA;AACvB,QAAA,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC;;IAEzB,IAAW,KAAK,CAAC,IAAY,EAAA;AACzB,QAAA,IAAI,CAAC,GAAG,CAAC,0BAA0B,EAAE,IAAI,CAAC;;IAE9C,IAAW,GAAG,CAAC,IAAY,EAAA;AACvB,QAAA,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC;;IAElC,IAAW,KAAK,CAAC,IAAY,EAAA;AACzB,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC;;IAE7B,IAAW,MAAM,CAAC,IAAY,EAAA;AAC1B,QAAA,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC;;IAE/B,IAAW,GAAG,CAAC,IAAY,EAAA;AACvB,QAAA,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC;;IAE3B,IAAW,QAAQ,CAAC,IAAY,EAAA;AAC5B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC;;IAEhC,IAAW,MAAM,CAAC,IAAY,EAAA;QAC1B,IAAI,CAAC,GAAG,CAAC,kCAAkC,EAAE,IAAI,EAAE,CAAC,CAAC;;IAEzD,IAAW,IAAI,CAAC,IAAY,EAAA;QACxB,IAAI,CAAC,GAAG,CAAC,kCAAkC,EAAE,IAAI,EAAE,CAAC,CAAC;;IAEzD,IAAW,MAAM,CAAC,IAAY,EAAA;QAC1B,IAAI,CAAC,GAAG,CAAC,kCAAkC,EAAE,IAAI,EAAE,CAAC,CAAC;;IAEzD,IAAW,GAAG,CAAC,IAAY,EAAA;QACvB,IAAI,CAAC,GAAG,CAAC,kCAAkC,EAAE,IAAI,EAAE,CAAC,CAAC;;IAEzD,IAAW,OAAO,CAAC,IAAY,EAAA;QAC3B,IAAI,CAAC,GAAG,CAAC,kCAAkC,EAAE,IAAI,EAAE,CAAC,CAAC;;IAEzD,IAAW,cAAc,CAAC,IAAY,EAAA;AAClC,QAAA,IAAI,CAAC,GAAG,CAAC,0BAA0B,EAAE,IAAI,CAAC;;AAE9C,IAAA,IAAW,SAAS,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;;AAEhC,IAAA,IAAW,OAAO,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;;AAE9B,IAAA,IAAW,KAAK,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;;AAE9B,IAAA,IAAW,MAAM,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;;AAEhC,IAAA,IAAW,GAAG,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;;AAE5B,IAAA,IAAW,QAAQ,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;;AAEjC,IAAA,IAAW,KAAK,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;;AAE5B,IAAA,IAAW,GAAG,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,IAAA,IAAW,cAAc,GAAA;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC;AACnD,QAAA,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACvC,QAAA,OAAO,MAAM;;AAEjB,IAAA,IAAW,GAAG,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,IAAA,IAAW,QAAQ,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC;;AAE1C,IAAA,IAAW,KAAK,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC;;AAE/C,IAAA,IAAW,GAAG,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC;;AAEnC,IAAA,IAAW,MAAM,GAAA;QACb,OAAO,IAAI,CAAC,GAAG,CAAC,kCAAkC,EAAE,CAAC,CAAC;;AAE1D,IAAA,IAAW,IAAI,GAAA;QACX,OAAO,IAAI,CAAC,GAAG,CAAC,kCAAkC,EAAE,CAAC,CAAC;;AAE1D,IAAA,IAAW,MAAM,GAAA;QACb,OAAO,IAAI,CAAC,GAAG,CAAC,kCAAkC,EAAE,CAAC,CAAC;;AAE1D,IAAA,IAAW,GAAG,GAAA;QACV,OAAO,IAAI,CAAC,GAAG,CAAC,kCAAkC,EAAE,CAAC,CAAC;;AAE1D,IAAA,IAAW,OAAO,GAAA;QACd,OAAO,IAAI,CAAC,GAAG,CAAC,kCAAkC,EAAE,CAAC,CAAC;;IAEnD,aAAa,GAAA;;QAEhB,IAAI,CAAC,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI;AAC9B,QAAA,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;AAC5C,YAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACrF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;;IAEzB,cAAc,GAAA;AACjB,QAAA,MAAM,MAAM,GACR,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;AAClF,QAAA,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;AACtB,YAAA,OAAO,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;;AAE3C,QAAA,OAAO,MAAM;;IAEV,GAAG,CAAC,GAAW,EAAE,UAAU,GAAG,CAAC,CAAC,EAAE,QAAA,GAAmB,IAAI,EAAA;AAC5D,QAAA,IAAI,GAAG,IAAI,SAAS,EAAE;YAClB,UAAU,GAAG,CAAC;YACd,GAAG,GAAG,GAAG;;AAEb,QAAA,IAAI,GAAG,IAAI,WAAW,EAAE;YACpB,UAAU,GAAG,CAAC;YACd,GAAG,GAAG,GAAG;;AAEb,QAAA,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AACzB,YAAA,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;YAClB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE;AAC5B,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE;gBACnD,IAAI,UAAU,IAAI,CAAC,CAAC;AAAE,oBAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;AACxE,gBAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;;;AAGnC,QAAA,OAAO,QAAQ;;AAEZ,IAAA,MAAM,CAAC,GAAW,EAAA;AACrB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxC,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE;gBACrC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;AACvB,gBAAA,OAAO,IAAI;;;AAGnB,QAAA,OAAO,KAAK;;IAET,GAAG,CAAC,GAAW,EAAE,KAAa,EAAE,UAAU,GAAG,CAAC,CAAC,EAAA;;AAElD,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK;YAAE;AAC7B,QAAA,IAAI,GAAG,IAAI,SAAS,EAAE;YAClB,UAAU,GAAG,CAAC;YACd,GAAG,GAAG,GAAG;;AAEb,QAAA,IAAI,GAAG,IAAI,WAAW,EAAE;YACpB,UAAU,GAAG,CAAC;YACd,GAAG,GAAG,GAAG;;QAEb,IAAI,CAAC,GAAG,CAAC;AACT,QAAA,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AACzB,YAAA,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;YAClB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE;AAC5B,gBAAA,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE;AACrD,gBAAA,IAAI,UAAU,IAAI,CAAC,CAAC,EAAE;oBAClB,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;oBAClC,KAAK,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AACtC,oBAAA,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;;qBACxB;AACH,oBAAA,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;;gBAElC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,SAAS;gBAC7D;;AAEJ,YAAA,CAAC,EAAE;;QAEP,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AAClC,QAAA,IAAI,UAAU,IAAI,CAAC,EAAE;YACjB,SAAS,GAAG,EAAE;AACd,YAAA,OAAO,SAAS,CAAC,MAAM,GAAG,UAAU;gBAAE,SAAS,IAAI,GAAG;AACtD,YAAA,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;;AAEnC,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,SAAS,CAAC;AAC/D,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;;IAGf,WAAW,GAAA;QACf,IAAI,CAAC,GAAG,CAAC;AACT,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AAC3B,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,WAAW;gBAAE,OAAO,CAAC,GAAG,CAAC;AAC5C,YAAA,CAAC,EAAE;;AAEP,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;;AAExB,IAAA,QAAQ,CAAC,KAAa,EAAA;QAC1B,IAAI,KAAK,IAAI,IAAI;AAAE,YAAA,OAAO,EAAE;AAC5B,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;;AAEpD,IAAA,MAAM,CAAC,KAAa,EAAA;QACxB,IAAI,KAAK,IAAI,IAAI;AAAE,YAAA,OAAO,EAAE;QAC5B,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;;IAGxE,IAAI,GAAA;QACP,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;;AAG1C;;;AAGG;AACI,IAAA,KAAK,CAAC,KAAY,EAAA;AACrB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK;;IAG5B,OAAO,GAAA;QACH,OAAO,IAAI,CAAC,OAAO;AACf,cAAE,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC;kBACnB,KAAK,CAAC;kBACN,KAAK,CAAC;AACZ,cAAE,KAAK,CAAC,WAAW;;;;MC1QlB,aAAa,CAAA;AACtB,IAAA,WAAA,CAAoB,SAA2B,EAAA;QAA3B,IAAS,CAAA,SAAA,GAAT,SAAS;;AAC7B,IAAA,SAAS,CAAC,SAA4B,EAAE,IAAA,GAAiB,IAAI,EAAA;AACzD,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;AAC1B,YAAA,OAAO;iBACF,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC;iBACnD,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;iBACjB,IAAI,CAAC,IAAI,CAAC;;AAEnB,QAAA,OAAO,SAAS,GAAG,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,GAAG,EAAE;;+GATxD,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAb,aAAa,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,CAAA;;4FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAJzB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,WAAW;AACjB,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;;;ICwBW;AAAZ,CAAA,UAAY,OAAO,EAAA;AACf,IAAA,OAAA,CAAA,IAAA,CAAA,GAAA,IAAS;AACT,IAAA,OAAA,CAAA,QAAA,CAAA,GAAA,SAAkB;AAClB,IAAA,OAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,OAAA,CAAA,QAAA,CAAA,GAAA,SAAkB;AAClB,IAAA,OAAA,CAAA,eAAA,CAAA,GAAA,gBAAgC;AAChC,IAAA,OAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,OAAA,CAAA,gBAAA,CAAA,GAAA,iBAAkC;AAClC,IAAA,OAAA,CAAA,cAAA,CAAA,GAAA,eAA8B;AAC9B,IAAA,OAAA,CAAA,aAAA,CAAA,GAAA,cAA4B;AAChC,CAAC,EAVW,OAAO,KAAP,OAAO,GAUlB,EAAA,CAAA,CAAA;IAUW;AAAZ,CAAA,UAAY,aAAa,EAAA;AACrB,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,aAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,aAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,aAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,aAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,aAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,aAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,aAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,aAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,aAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACnC,IAAA,aAAA,CAAA,eAAA,CAAA,GAAA,eAA+B;AAC/B,IAAA,aAAA,CAAA,oBAAA,CAAA,GAAA,oBAAyC;AACzC,IAAA,aAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC;AACrC,IAAA,aAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC;AACrC,IAAA,aAAA,CAAA,uBAAA,CAAA,GAAA,uBAA+C;AAC/C,IAAA,aAAA,CAAA,yBAAA,CAAA,GAAA,yBAAmD;AACnD,IAAA,aAAA,CAAA,2BAAA,CAAA,GAAA,2BAAuD;AACvD,IAAA,aAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,aAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,aAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,aAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,aAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACnC,IAAA,aAAA,CAAA,0BAAA,CAAA,GAAA,0BAAqD;AACrD,IAAA,aAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC;AACjC,IAAA,aAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,aAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AAC3B,CAAC,EA5BW,aAAa,KAAb,aAAa,GA4BxB,EAAA,CAAA,CAAA;IAYW;AAAZ,CAAA,UAAY,SAAS,EAAA;AACjB,IAAA,SAAA,CAAA,SAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM;AACN,IAAA,SAAA,CAAA,SAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAU;AACV,IAAA,SAAA,CAAA,SAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK;AACT,CAAC,EAJW,SAAS,KAAT,SAAS,GAIpB,EAAA,CAAA,CAAA;MASY,kBAAkB,CAAA;AAEH,IAAA,SAAA,IAAA,CAAA,aAAa,GAAoB;AACrD,QAAA,aAAa,CAAC,IAAI;AAClB,QAAA,aAAa,CAAC,MAAM;AACpB,QAAA,aAAa,CAAC,IAAI;AAClB,QAAA,aAAa,CAAC,KAAK;AACnB,QAAA,aAAa,CAAC,QAAQ;AACtB,QAAA,aAAa,CAAC,YAAY;AAC1B,QAAA,aAAa,CAAC,eAAe;AAC7B,QAAA,aAAa,CAAC,wBAAwB;AACtC,QAAA,aAAa,CAAC,gBAAgB;AAC9B,QAAA,aAAa,CAAC,qBAAqB;AACnC,QAAA,aAAa,CAAC,uBAAuB;AACrC,QAAA,aAAa,CAAC,cAAc;AAC/B,KAboC,CAanC;AA4BF,IAAA,IAAI,YAAY,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY;;AAMzC,IAAA,WAAA,CACwB,iBAAmD,EAChE,SAA2B,EAC1B,EAAa,EACb,YAAiC,EACjC,gBAAkC,EAClC,QAAkB,EAClB,UAA6B,EAAA;QANjB,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;QAC9B,IAAS,CAAA,SAAA,GAAT,SAAS;QACR,IAAE,CAAA,EAAA,GAAF,EAAE;QACF,IAAY,CAAA,YAAA,GAAZ,YAAY;QACZ,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QAChB,IAAQ,CAAA,QAAA,GAAR,QAAQ;QACR,IAAU,CAAA,UAAA,GAAV,UAAU;AAxDb,QAAA,IAAA,CAAA,aAAa,GAAG,WAAW,CAAC,aAAa;AAgBzC,QAAA,IAAA,CAAA,SAAS,GAAG,SAAS,CAAC,MAAM;QAI5B,IAAW,CAAA,WAAA,GAAG,IAAI;AAC3B;;AAEG;QACM,IAAa,CAAA,aAAA,GAAsB,MAAM;AAOlD,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAS,IAAI,CAAC;AAGhC,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;AACpB,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,SAAS,EAAE;AAChC,gBAAA,OAAO,KAAK;;AAEhB,YAAA,OAAO,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACxF,SAAC,CAAC;AACF,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,eAAe,CAAiC,IAAI,CAAC;AAMpE,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAW,SAAS,CAAC;QAC3B,IAAc,CAAA,cAAA,GAAa,SAAS;;;IAc5C,MAAM,WAAW,CAAC,OAAsB,EAAA;QACpC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;;AAG7C,IAAA,MAAM,QAAQ,GAAA;QACV,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;AACzC,QAAA,IAAI,CAAC;AACA,aAAA,uBAAuB;AACvB,aAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAe,KAAK,CAAC,CAAC,CAAC,CAAC;AACrC,aAAA,SAAS,CAAC,OAAO,KAAmB,KAAI;YACrC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,CAAC;AAC5D,SAAC,CAAC;QACN,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;QACvC,IAAI,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,SAAS,EAAE;;IAGxD,aAAa,GAAA;QACT,OAAO,IAAI,CAAC,MAAM,EAAE,UAAU,IAAI,IAAI,CAAC,UAAU;;IAGrD,YAAY,GAAA;AACR,QAAA,QAAQ,IAAI,CAAC,aAAa,EAAE,CAAC,EAAE;AAC3B,YAAA,KAAK,SAAS;AACV,gBAAA,OAAO,SAAS;;AAExB,QAAA,QAAQ,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI;AAC7B,YAAA,KAAK,MAAM;AACX,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,UAAU;AACf,YAAA,KAAK,cAAc;AACf,gBAAA,OAAO,MAAM;AACjB,YAAA,KAAK,QAAQ;AACT,gBAAA,OAAO,QAAQ;AACnB,YAAA,KAAK,MAAM;AACP,gBAAA,OAAO,MAAM;AACjB,YAAA,KAAK,OAAO;AACR,gBAAA,OAAO,OAAO;AAClB,YAAA,KAAK,uBAAuB;AAC5B,YAAA,KAAK,yBAAyB;AAC9B,YAAA,KAAK,0BAA0B;AAC/B,YAAA,KAAK,kBAAkB;AACvB,YAAA,KAAK,iBAAiB;AACtB,YAAA,KAAK,gBAAgB;AACjB,gBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,KAAK,MAAM,GAAG,OAAO,GAAG,MAAM;AACtE,YAAA,KAAK,QAAQ;AACT,gBAAA,OAAO,QAAQ;AACnB,YAAA,KAAK,UAAU;AACX,gBAAA,OAAO,UAAU;AACrB,YAAA,KAAK,OAAO;AACR,gBAAA,OAAO,OAAO;;AAEtB,QAAA,OAAO,SAAS;;IAGpB,qBAAqB,GAAA;AACjB,QAAA,OAAO,kBAAkB,CAAC,aAAa,CAAC,QAAQ,CAC5C,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,IAAqB,CAChD;;IAEG,aAAa,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,QACK,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAgB;gBAChD,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAO,KAAK,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;;aAExE;AACH,YAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK;;;AAG1C,IAAA,MAAM,YAAY,GAAA;AACtB,QAAA,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE;YACnC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC;;QAE7C,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,EAAE;AAClC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE;AACnC,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,SAAS,EAAE;AACnC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACf,gBAAA,IAAI,EAAE,MAAM,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC;AACvC,oBAAA,UAAU,EAAE,IAAI,CAAC,aAAa,EAAE;iBAC3B,CAAC;AACV,gBAAA,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,aAAa,EAAE,EAAU,CAAC;AACrF,aAAA,CAAC;;QAEN,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,KAAK,OAAO,EAAE;YACvC,IAAI,MAAM,EAAE;gBACR,OAAO,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;;AAE/D,YAAA,OAAO,IAAI;;AACR,aAAA,IAAI,MAAM,GAAG,EAAE,CAAC,EAAE;;YAErB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;;AAC7B,aAAA,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,GAAG,WAAW,EAAE;YAChE,OAAO,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,EAAE,WAAW;;aAC1D;AACH,YAAA,OAAO,IAAI;;;AAInB,IAAA,QAAQ,CAAC,IAAc,EAAA;QACnB,IAAI,KAAK,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;AAClC,YAAA,OAAO,IAAI;;AAGf,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE;YAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;iBAClC,MAAM,CAAC,CAAC,CAAM,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC;iBAC5D,GAAG,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,OAAO,CAAC;YAC/B,IAAI,OAAO,EAAE;AACT,gBAAA,OAAO,OAAO;;;AAItB,QAAA,OAAO,IAAI;;IAGf,KAAK,GAAA;QACD,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,KAAK,QAAQ,EAAE;YACxC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;;aAC9B,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,KAAK,OAAO,EAAE;AAC9C,YAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;;aACxC;AACH,YAAA,OAAO,CAAC,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC;;;IAI1E,UAAU,GAAA;QACN,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AAC1B,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE;AAC7B,gBAAA,IAAI;AACA,oBAAA,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC;;gBACrE,OAAO,CAAC,EAAE;AACR,oBAAA,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;oBAC9D,OAAO,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE;AAC5C,wBAAA,cAAc,EAAE,IAAI;AACvB,qBAAA,CAAC;;;iBAEH;gBACH,OAAO,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE;AAC5C,oBAAA,cAAc,EAAE,IAAI;AACvB,iBAAA,CAAC;;AAEV,SAAC,CAAC;;IAGN,YAAY,GAAA;QACR,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;YAC1B,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,OAAO,EAAE;AAC3C,gBAAA,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;;AAE1D,YAAA,OAAO,CAAC;AACZ,SAAC,CAAC;;IAGN,UAAU,GAAA;QACN,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;YAC1B,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE;AAC/B,gBAAA,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;;AAE/D,YAAA,OAAO,CAAC;AACZ,SAAC,CAAC;;;AAGN,IAAA,MAAM,UAAU,CAAC,QAAa,EAAE,KAAK,GAAG,KAAK,EAAA;QACzC,IAAI,KAAK,EAAE;YACP,MAAM,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC;;QAEjE,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE;QAChD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;AACzC,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,IAAI;QAC3D,MAAM,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;;IAGhE,UAAU,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;AACzB,YAAA,OAAO,KAAK;;AAEhB,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,QAAQ,EAAE;AACjC,YAAA,OAAO,IAAI,CAAC,qBAAqB,EAAE;;QAEvC,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK;AACjD,QAAA,QACI,IAAI,CAAC,iBAAiB,CAAC,UAAU,KAAK,QAAQ;AAC9C,YAAA,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,KAAK,OAAO;YAClD,KAAK,EAAE,MAAM,KAAK,CAAC;YACnB,UAAU,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,YAAY,CAAC;AACpE,YAAA,IAAI,CAAC,qBAAqB,EAAE;;AAIpC,IAAA,MAAM,KAAK,GAAA;;AAEP,QAAA,MAAM,IAAI,CAAC,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;AACxE,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;;;;AAK7B;;AAEG;AACK,IAAA,OAAO,CAAC,CAAS,EAAA;QACrB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE;YAC9B,OAAO;AACH,gBAAA;AACI,oBAAA,EAAE,EAAE,CAAC;AACL,oBAAA,OAAO,EAAE,CAAC;AACb,iBAAA;aACJ;;QAEL,MAAM,IAAI,GAAe,EAAE;QAC3B,IAAI,OAAO,GAAW,CAAC;AACvB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC;YACxE,IAAI,MAAM,EAAE;AACR,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AACjB,gBAAA,OAAO,GAAG,MAAM,CAAC,MAAM;;iBACpB;gBACH;;;AAGR,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE;;AAGzB;;;AAGG;IACK,WAAW,GAAA;AACf,QAAA,QACI,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAC/B,KAAK,EAAE,EACP,GAAG,CAAC,CAAC,CAAS,KACT,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAc,EAAE,GAAG,CAAC,CAAC,EAAE,KAAI;YACpE,OAAO;gBACH,EAAE;AACF,gBAAA,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;aACzB;SACJ,CAAC,CACL,CACJ,IAAI,EAAE,CAAC,IAAI,CAAC;;AAIrB,IAAA,eAAe,CAAC,GAAa,EAAA;QACzB,MAAM,MAAM,GAAQ,EAAE;QACtB,MAAM,GAAG,GAAgC,EAAE;AAC3C,QAAA,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACzC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK;AACzC,QAAA,MAAM,CAAC,OAAO,GAAG,IAAI;AACrB,QAAA,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI;QAC/D,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AACpC,QAAA,OAAO,MAAM;;AAGjB,IAAA,SAAS,CAAC,KAAiB,EAAA;QACvB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,KAAK,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;;+GAjU3E,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,gCAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAAF,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAG,SAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAlB,kBAAkB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EA+BhB,SAAS,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvIxB,spIAsGA,EAAA,MAAA,EAAA,CAAA,m4CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,kBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,aAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAF,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAP,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAU,eAAA,EAAA,IAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,OAAA,EAAA,CAAA,CAAA;;4FDEa,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAP9B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAGR,eAAA,EAAA,uBAAuB,CAAC,OAAO,cACpC,KAAK,EAAA,QAAA,EAAA,spIAAA,EAAA,MAAA,EAAA,CAAA,m4CAAA,CAAA,EAAA;;0BAqDZ;4MA/BI,MAAM,EAAA,CAAA;sBAAd;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBAIQ,aAAa,EAAA,CAAA;sBAArB;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAEyB,WAAW,EAAA,CAAA;sBAApC,SAAS;uBAAC,aAAa;gBACF,SAAS,EAAA,CAAA;sBAA9B,SAAS;uBAAC,SAAS;;;AEvIxB;;;;;;AAMG;SACa,qBAAqB,CACjC,OAAgB,EAChB,OAA6B,SAAS,EAAA;IAEtC,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;IACzC,GAAG,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,SAAS,CAAC;AACnD,IAAA,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,UAAU,EAAE;AACxC,QAAA,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,SAAS,CAAC;QAC7D,GAAG,CAAC,YAAY,CAAC,mBAAmB,EAAE,SAAS,CAAC,SAAS,CAAC;;AAE9D,IAAA,IAAI,OAAO,CAAC,UAAU,EAAE;AACpB,QAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;;YAEnB,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC;;;AAE1C,aAAA,IAAI,IAAI,KAAK,SAAS,EAAE;YAC3B,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC;;;SAE9C;QACH,OAAO,CAAC,IAAI,CAAC,2BAA2B,GAAG,OAAO,CAAC,SAAS,CAAC;;AAEjE,IAAA,OAAO,GAAG;AACd;AAEA;;;;;AAKG;AACH,SAAS,sBAAsB,CAAC,IAAU,EAAA;AACtC,IAAA,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;QAC5C,OAAO,IAAI,CAAC,QAAQ;;SACjB,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;QAC1C,OAAO,IAAI,CAAC,QAAQ;;SACjB;AACH,QAAA,OAAO,iBAAiB,GAAG,IAAI,CAAC,QAAQ;;AAEhD;;MCpCa,qBAAqB,CAAA;AAE9B,IAAA,WAAA,GAAA;QADS,IAAQ,CAAA,QAAA,GAAG,EAAE;;+GADb,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECTlC,6HAKA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDEc,wBAAwB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAlB,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAEzB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;+BACI,kBAAkB,EAAA,OAAA,EAGnB,CAAC,wBAAwB,CAAC,EAAA,QAAA,EAAA,6HAAA,EAAA;wDAG1B,QAAQ,EAAA,CAAA;sBAAhB;;;ME+BQ,kBAAkB,CAAA;AAoB3B;;;;;AAKG;IACH,IACI,YAAY,CAAC,KAAoB,EAAA;AACjC,QAAA,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,KAAK;;AAE1C,IAAA,IAAI,YAAY,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY;;AAGzC,IAAA,WAAA,CACY,UAAsB,EACtB,gBAAkC,EAClC,eAAyC,EACzC,QAAkB,EAClB,YAA8B,EAC9B,SAAuB,EACvB,YAAiC,EAAA;QANjC,IAAU,CAAA,UAAA,GAAV,UAAU;QACV,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QAChB,IAAe,CAAA,eAAA,GAAf,eAAe;QACf,IAAQ,CAAA,QAAA,GAAR,QAAQ;QACR,IAAY,CAAA,YAAA,GAAZ,YAAY;QACZ,IAAS,CAAA,SAAA,GAAT,SAAS;QACT,IAAY,CAAA,YAAA,GAAZ,YAAY;AAjCxB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAKhB,IAAI,CAAC;AAEP;;AAEG;QACM,IAAiB,CAAA,iBAAA,GAAG,IAAI;;IA0BjC,QAAQ,GAAA;QACJ,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC;;AAEjE,IAAA,OAAO,CAAC,EAAU,EAAA;AACd,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;;AAG/C,IAAA,MAAM,OAAO,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AACX,YAAA,UAAU,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC;YAC3C;;AAEJ,QAAA,IAAI;YACA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YAC7C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACzC,YAAA,IAAI,IAAI,CAAC,wBAAwB,EAAE;gBAC/B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,wBAAwB,CAAC,gBAAgB,CAC/D,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,KAAK,EACV,eAAe,EACf,QAAQ,EACR,IAAI,CAAC,IAAI,CACZ;gBACD,IAAI,CAAC,MAAM,EAAE;;;oBAGT;;;;QAGV,OAAO,CAAC,EAAE;YACR;;QAEJ,MAAM,SAAS,GAAG,EAAE;QACpB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE;YACtC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YAC5B,SAAS,CAAC,IAAI,CAAC;AACX,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACzE,aAAA,CAAC;;AAEN,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;;QAE7B,UAAU,CAAC,MAAK;YACZ,KAAK,MAAM,MAAM,KAAK,IAAI,CAAC,wBAAwB,EAAE,OAAO,CAAC,KAAK;gBAC9D,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,KAAI;oBAChC,OAAO;wBACH,UAAU;wBACV,oBAAoB,EAAE,YAAW;4BAC7B,OAAO;gCACH,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAI,CAAC;6BACzB;yBACrB;wBACD,uBAAuB,EAAE,MAAM,IAAI,eAAe,CAAe,IAAI,CAAC;qBACtD;iBACvB,CAAC,GAAwB;gBAC1B,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AACnC,oBAAA,IAAI,OAAO,GAAgB,CAAC,CAAC,aAAa,CAAC,oBAAoB,CAC3D,MAAM,CAAC,UAAU,CAAC,EAAE,CACvB,GAAG,CAAC,CAAC;oBACN,IAAI,OAAO,EAAE;;AAET,wBAAA,OAAO,GAAG,qBAAqB,CAAC,OAAO,CAAC;AAExC,wBAAA,SAAS,CAAC,sBAAsB,CAC5B,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,YAAY,EACjB,kBAAkB,EAClB,OAAO,EACP;4BACI,MAAM;AACT,yBAAA,EACD,EAAE,EACF,IAAI,CAAC,QAAQ,CAChB;;AAET,iBAAC,CAAC;;AAEV,SAAC,CAAC;;AAGN;;;;;AAKG;AACK,IAAA,WAAW,CAAC,IAAY,EAAA;QAC5B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;AAC9B,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;AACtC,YAAA,IAAI,KAAK,IAAI,CAAC,CAAC,EAAE;gBACb;;AAEJ,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC;YACxC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;;AAE3E,QAAA,OAAO,IAAI;;IAGf,MAAM,WAAW,CAAC,OAAsB,EAAA;QACpC,IAAI,OAAO,GAAG,KAAK;AACnB,QAAA,IAAI,OAAO,CAAC,KAAK,EAAE;AACf,YAAA,IAAI,CAAC,GAAG,GAAG,MAAM,IAAI,CAAC;iBACjB,cAAc,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,EAAE;AAC1C,iBAAA,SAAS,EAAE;YAChB,OAAO,GAAG,IAAI;;AAElB,QAAA,IAAI,OAAO,CAAC,IAAI,EAAE;YACd,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,mCAAmC,CAAC,IAAI,IAAI,EAAE;AACtE,gBAAA,IAAI,CAAC,GAAG,GAAG,MAAM,IAAI,CAAC;AACjB,qBAAA,cAAc,CAAC;oBACZ,WAAW,EACP,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,mCAAmC,CAAC,CAAC,CAAC,CAAC;iBACtE;AACA,qBAAA,SAAS,EAAE;;AACb,iBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AAClB,gBAAA,IAAI,CAAC,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE;;YAEnE,OAAO,GAAG,IAAI;;QAElB,IAAI,OAAO,EAAE;AACT,YAAA,KAAK,IAAI,CAAC,OAAO,EAAE;;;+GApKlB,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAmB,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAX,IAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAG,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,mQAHhB,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,0ICtCtD,iZAOA,EAAA,MAAA,EAAA,CAAA,2qBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAS,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,aAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDkCa,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAP9B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,aAGd,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,cACtC,KAAK,EAAA,QAAA,EAAA,iZAAA,EAAA,MAAA,EAAA,CAAA,2qBAAA,CAAA,EAAA;oQAGU,SAAS,EAAA,CAAA;sBAAnC,YAAY;uBAAC,WAAW;gBAEhB,wBAAwB,EAAA,CAAA;sBAAhC;gBACQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,GAAG,EAAA,CAAA;sBAAX;gBAWQ,iBAAiB,EAAA,CAAA;sBAAzB;gBASG,YAAY,EAAA,CAAA;sBADf;;;MElEQ,WAAW,CAAA;aACN,IAAmB,CAAA,mBAAA,GAAG,GAAG,CAAC;aAC1B,IAAqB,CAAA,qBAAA,GAAG,GAAG,CAAC;aAC5B,IAAmB,CAAA,mBAAA,GAAG,GAAG,CAAC;AACjC,IAAA,OAAO,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,qBAAqB,EAAA;QACvD,OAAO;YACH,UAAU,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACnF,YAAA,UAAU,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;SAC/D;;AAEE,IAAA,OAAO,UAAU,CAAC,IAAI,GAAG,WAAW,CAAC,qBAAqB,EAAA;QAC7D,OAAO;YACH,UAAU,CAAC,QAAQ,EAAE;AACjB,gBAAA,KAAK,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;gBACxC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;aACvD,CAAC;YACF,UAAU,CAAC,QAAQ,EAAE;AACjB,gBAAA,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;gBACrC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC;aAC1D,CAAC;SACL;;AAEE,IAAA,OAAO,QAAQ,CAAC,IAAI,GAAG,WAAW,CAAC,qBAAqB,EAAA;QAC3D,OAAO;YACH,UAAU,CAAC,QAAQ,EAAE;AACjB,gBAAA,KAAK,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC;gBACzC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;aACvD,CAAC;YACF,UAAU,CAAC,QAAQ,EAAE;AACjB,gBAAA,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;gBACrC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC,CAAC;aAC3D,CAAC;SACL;;AAEE,IAAA,OAAO,SAAS,CAAC,IAAwB,GAAA,WAAW,CAAC,qBAAqB,EAAA;QAC7E,OAAO;YACH,UAAU,CAAC,QAAQ,EAAE;AACjB,gBAAA,KAAK,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;gBACxC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;aACvD,CAAC;YACF,UAAU,CAAC,QAAQ,EAAE;AACjB,gBAAA,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;gBACrC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC;aAC1D,CAAC;SACL;;AAEE,IAAA,OAAO,aAAa,CAAC,IAAI,GAAG,WAAW,CAAC,qBAAqB,EAAA;QAChE,OAAO;YACH,UAAU,CAAC,QAAQ,EAAE;AACjB,gBAAA,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC1B,gBAAA,OAAO,CAAC,IAAI,GAAG,SAAS,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;aACpD,CAAC;YACF,UAAU,CAAC,QAAQ,EAAE;AACjB,gBAAA,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACtB,gBAAA,OAAO,CAAC,IAAI,GAAG,SAAS,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;aACxD,CAAC;SACL;;AAEL;;;;AAIG;AACI,IAAA,OAAO,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,qBAAqB,EAAA;QAC9D,OAAO;YACH,UAAU,CAAC,QAAQ,EAAE;AACjB,gBAAA,KAAK,CAAC,EAAE,kBAAkB,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AAC7E,gBAAA,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;aAC/D,CAAC;YACF,UAAU,CAAC,QAAQ,EAAE;AACjB,gBAAA,KAAK,CAAC,EAAE,kBAAkB,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AAC3E,gBAAA,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;aACjE,CAAC;SACL;;AAEL;;;;AAIG;AACI,IAAA,OAAO,iBAAiB,CAAC,IAAI,GAAG,WAAW,CAAC,qBAAqB,EAAA;QACpE,OAAO;YACH,UAAU,CAAC,QAAQ,EAAE;AACjB,gBAAA,KAAK,CAAC,EAAE,kBAAkB,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AAC/E,gBAAA,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;aAC/D,CAAC;YACF,UAAU,CAAC,QAAQ,EAAE;AACjB,gBAAA,KAAK,CAAC,EAAE,kBAAkB,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AAC7E,gBAAA,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;aACjE,CAAC;SACL;;AAEL;;;;AAIG;AACI,IAAA,OAAO,YAAY,CAAC,IAAI,GAAG,WAAW,CAAC,qBAAqB,EAAA;QAC/D,OAAO;YACH,UAAU,CAAC,QAAQ,EAAE;AACjB,gBAAA,KAAK,CAAC,EAAE,kBAAkB,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AAC3E,gBAAA,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;aAC/D,CAAC;SACL;;AAEL;;;AAGG;AACI,IAAA,OAAO,mBAAmB,CAAC,IAAI,GAAG,WAAW,CAAC,qBAAqB,EAAA;QACtE,OAAO;AACH,YAAA,KAAK,CACD,OAAO,EACP,KAAK,CAAC;AACF,gBAAA,OAAO,EAAE,CAAC;AACV,gBAAA,kBAAkB,EAAE,QAAQ;AAC5B,gBAAA,SAAS,EAAE,WAAW;AACtB,gBAAA,OAAO,EAAE,MAAM;AAClB,aAAA,CAAC,CACL;AACD,YAAA,KAAK,CACD,MAAM,EACN,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,kBAAkB,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CACjF;YACD,UAAU,CAAC,eAAe,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,IAAI,GAAG,gBAAgB,CAAC,CAAC,CAAC;YACvF,UAAU,CAAC,eAAe,EAAE,CAAC,OAAO,CAAC,IAAI,GAAG,gBAAgB,CAAC,CAAC,CAAC;SAClE;;AAEL;;;;AAIG;AACI,IAAA,OAAO,aAAa,CAAC,IAAI,GAAG,WAAW,CAAC,qBAAqB,EAAA;QAChE,OAAO;YACH,UAAU,CAAC,QAAQ,EAAE;AACjB,gBAAA,KAAK,CAAC;AACF,oBAAA,kBAAkB,EAAE,QAAQ;AAC5B,oBAAA,SAAS,EAAE,+BAA+B;AAC1C,oBAAA,OAAO,EAAE,CAAC;iBACb,CAAC;AACF,gBAAA,OAAO,CACH,IAAI,GAAG,SAAS,EAChB,KAAK,CAAC,EAAE,SAAS,EAAE,yBAAyB,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAC9D;aACJ,CAAC;YACF,UAAU,CAAC,QAAQ,EAAE;gBACjB,KAAK,CAAC,EAAE,kBAAkB,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AACnD,gBAAA,OAAO,CAAC,IAAI,GAAG,SAAS,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;aACnD,CAAC;SACL;;;;MCpJI,MAAM,CAAA;IACR,OAAO,QAAQ,CAAC,IAAS,EAAA;QAC5B,IAAI,IAAI,IAAI,IAAI;AAAE,YAAA,OAAO,IAAI;QAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;;IAGpC,OAAO,aAAa,CAAC,IAAW,EAAA;AACnC,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AAAE,YAAA,OAAO,IAAI;AACrC,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE;;AAGvB;;;;;;AAMG;AACI,IAAA,OAAO,YAAY,CAAC,OAAY,EAAE,OAAY,EAAA;QACjD,IAAI,OAAO,IAAI,IAAI;YAAE,OAAO,OAAO,IAAI,IAAI;QAC3C,IAAI,OAAO,IAAI,IAAI;YAAE,OAAO,OAAO,IAAI,IAAI;AAC3C,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;;AAG7D;;;;;AAKG;AACI,IAAA,OAAO,0BAA0B,CAAC,MAAW,EAAE,IAAY,EAAA;QAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QAC7B,IAAI,GAAG,GAAG,MAAM;AAChB,QAAA,KAAK,IAAI,GAAG,IAAI,KAAK,EAAE;AACnB,YAAA,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE;gBAChB,GAAG,GAAG,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;;iBACvB;AACH,gBAAA,IAAIC,SAAO,CAAC,GAAG,CAAC,EAAE;AACd,oBAAA,OAAO,GAAG;;AAEd,gBAAA,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;;;AAGxB,QAAA,OAAO,GAAG;;AAEP,IAAA,OAAO,0BAA0B,CAAC,GAAQ,EAAE,QAAkB,EAAA;AACjE,QAAA,KAAK,IAAI,CAAC,IAAI,GAAG,EAAE;AACf,YAAA,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;gBAAE;AAC5B,YAAA,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;AACtB,gBAAA,OAAO,GAAG,CAAC,CAAC,CAAC;;iBACV,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;gBACnC,MAAM,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC;;;AAG3D,QAAA,OAAO,GAAG;;AAEjB;;MCnDY,iBAAiB,CAAA;AAC1B,IAAA,WAAA,CAAoB,SAA2B,EAAA;QAA3B,IAAS,CAAA,SAAA,GAAT,SAAS;;AAE7B,IAAA,MAAM,SAAS,CAAC,MAAkB,EAAE,OAAiB,IAAI,EAAA;AACrD,QAAA,QACI,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE;aACjD,MAAM,CAAC,gBAAgB,GAAG,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC;;AAI7E,IAAA,UAAU,CAAC,MAAkB,EAAA;AACzB,QAAA,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE;AAC1B,YAAA,OAAO,EAAE;;QAEb,MAAM,SAAS,GAAG,EAAE;QACpB,IAAI,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE;AACtD,YAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;;QAEhE,IAAI,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE;AACzD,YAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;;QAE/D,QACI,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;AACtD,YAAA,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;;+GAvBjD,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAjB,iBAAiB,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,eAAA,EAAA,CAAA,CAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAJ7B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,eAAe;AACrB,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;;;MCAY,gBAAgB,CAAA;IACzB,SAAS,CAAC,KAAa,EAAE,IAAS,EAAA;QAC9B,IAAI,CAAC,GAAG,CAAC;QACT,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;YAC7B,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;;AAE/B,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YAC9C,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;;AAEjC,QAAA,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE;YACzB,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AAClE,YAAA,CAAC,EAAE;;AAEP,QAAA,OAAO,KAAK;;AAEhB,IAAA,WAAA,CAAoB,SAA2B,EAAA;QAA3B,IAAS,CAAA,SAAA,GAAT,SAAS;;+GAfpB,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAhB,gBAAgB,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA,CAAA;;4FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAJ5B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,cAAc;AACpB,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;;;ACED;;;AAGG;MAOU,iBAAiB,CAAA;AA4B1B,IAAA,WAAA,CAAoB,EAAa,EAAA;QAAb,IAAE,CAAA,EAAA,GAAF,EAAE;QAxBb,IAAQ,CAAA,QAAA,GAAqB,MAAM;AAE5C,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,eAAe,CAAe,EAAE,CAAC;AAEhD;;;;AAIG;QACM,IAAe,CAAA,eAAA,GAAW,SAAS;AAE5C;;AAEG;QACM,IAAY,CAAA,YAAA,GAAG,IAAI;;AAY5B,IAAA,WAAW,CAAC,OAAuB,EAAA;AAC/B,QAAA,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,eAAe,EAAE;YACjE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAClF,YAAA,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,EAAE;AACpC,gBAAA,KAAK,IAAI,CAAC,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC;;;;AAKtF,IAAA,KAAK,CAAC,MAAkB,EAAA;AACpB,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;YACnB;;AAEJ,QAAA,UAAU,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;;AAGjE,IAAA,UAAU,CAAC,CAAS,EAAA;AAChB,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE;YACP,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK;;AAE5E,QAAA,OAAO,KAAK;;;IAIhB,eAAe,GAAA;;;;AAIX,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;;+GA1D/C,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,0bClB9B,i4CAiCA,EAAA,MAAA,EAAA,CAAA,s5CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAjB,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAiB,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,aAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAnB,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAoB,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,iBAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,gBAAA,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDfa,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAN7B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,cAGX,KAAK,EAAA,QAAA,EAAA,i4CAAA,EAAA,MAAA,EAAA,CAAA,s5CAAA,CAAA,EAAA;2EAGwB,IAAI,EAAA,CAAA;sBAA5C,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBACb,WAAW,EAAA,CAAA;sBAApC,SAAS;uBAAC,aAAa;gBAEf,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,OAAO,EAAA,CAAA;sBAAf;gBAQQ,eAAe,EAAA,CAAA;sBAAvB;gBAKQ,YAAY,EAAA,CAAA;sBAApB;gBAQQ,SAAS,EAAA,CAAA;sBAAjB;;;AE1BL;;AAEG;MACU,kBAAkB,CAAA;AAiD3B;;AAEG;IACH,IAAa,OAAO,CAAC,OAAqB,EAAA;AACtC,QAAA,IAAI,CAAC,SAAS,GAAG,OAAO;AACxB,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;;IAahC,WAAoB,CAAA,SAAoB,EAAU,SAA2B,EAAA;QAAzD,IAAS,CAAA,SAAA,GAAT,SAAS;QAAqB,IAAS,CAAA,SAAA,GAAT,SAAS;AAlE3D;;;;AAIG;QACM,IAA4B,CAAA,4BAAA,GAAG,CAAC;QAChC,IAAkC,CAAA,kCAAA,GAAG,CAAC;AAC/C;;;;;;;;AAQG;QACM,IAAU,CAAA,UAAA,GAAuC,QAAQ;AAClE;;;AAGG;QACM,IAAgB,CAAA,gBAAA,GAAqB,MAAM;AAEpD;;AAEG;QACM,IAAc,CAAA,cAAA,GAAkC,QAAQ;AACjE;;AAEG;QACM,IAAK,CAAA,KAAA,GAAuB,SAAS;AAC9C;;;;;AAKG;QACM,IAAS,CAAA,SAAA,GAAgC,OAAO;AACzD;;AAEG;QACM,IAAY,CAAA,YAAA,GAAG,IAAI;AAE5B;;AAEG;QACM,IAAe,CAAA,eAAA,GAAoB,OAAO;AAUnD;;AAEG;AACM,QAAA,IAAA,CAAA,gBAAgB,GAAG,WAAW,CAAC,YAAY;QACpD,IAAS,CAAA,SAAA,GAAiB,EAAE;AAC5B,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,eAAe,CAAe,EAAE,CAAC;AACtD,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,eAAe,CAAe,EAAE,CAAC;QACpD,IAAmB,CAAA,mBAAA,GAAiB,EAAE;QACtC,IAAkB,CAAA,kBAAA,GAAiB,EAAE;;AAI7B,IAAA,cAAc,CAAC,OAAqB,EAAA;AACxC,QAAA,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAC1E,QAAA,IAAI,OAAO,IAAI,IAAI,EAAE;AACjB,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;AAC5B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B;;AAEJ,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC;AACtF,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC;AACpF,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CACpB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAC3E,CAAC,EACD,IAAI,CAAC,gBAAgB,EAAE,CAC1B,CACJ;QACD,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE;AACnC,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CACpB,IAAI,CAAC;AACA,iBAAA,mBAAmB,CAAC,OAAO,EAAE,KAAK;iBAClC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CACzC;;QAEL,IAAI,CAAC,YAAY,CAAC,IAAI,CAClB,IAAI,CAAC,iBAAiB,CAClB,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,EAClD,IAAI,CAAC,cAAc,CAAC,KAAK,CAC5B,CACJ;QACD,KAAK,IAAI,CAAC,SAAS,CAAC,wBAAwB,CAAC,IAAI,CAAC,cAAc,CAAC;QACjE,KAAK,IAAI,CAAC,SAAS,CAAC,wBAAwB,CAAC,IAAI,CAAC,YAAY,CAAC;;AAE/D;;;AAGD;;IAGI,gBAAgB,GAAA;QACnB,IAAI,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAAE;YAC3C,OAAO,IAAI,CAAC,kCAAkC;;QAElD,OAAO,IAAI,CAAC,4BAA4B;;AAG5C,IAAA,KAAK,CAAC,MAAkB,EAAA;AACpB,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;AACnB,YAAA,IAAI,MAAM,CAAC,gBAAgB,EAAE;gBACzB,MAAM,CAAC,gBAAgB,EAAE;;YAE7B;;QAEJ,MAAM,CAAC,QAAQ,EAAE;;AAGb,IAAA,gBAAgB,CAAC,OAAqB,EAAA;QAC1C,MAAM,MAAM,GAAiB,EAAE;AAC/B,QAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC1B,IAAI,MAAM,CAAC,YAAY;AAAE,gBAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;;AAEhD,QAAA,OAAO,MAAM;;IAGT,iBAAiB,CAAC,OAAqB,EAAE,aAA2B,EAAA;QACxE,MAAM,MAAM,GAAiB,EAAE;AAC/B,QAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC1B,IAAI,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAAE,gBAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;;AAEjE,QAAA,OAAO,MAAM;;AAGjB;;AAEG;IACI,UAAU,GAAA;AACb,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;;AAG/B,IAAA,cAAc,CAAC,OAAqB,EAAA;QACxC,IAAI,OAAO,IAAI,IAAI;AAAE,YAAA,OAAO,IAAI;QAChC,MAAM,QAAQ,GAAG,EAAE;AACnB,QAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AAC1B,YAAA,IAAI,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY;AAAE,gBAAA,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;;AAEpE,QAAA,OAAO,QAAQ;;IAGnB,eAAe,GAAA;QACX,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE;AACjC,YAAA,OAAO,KAAK;;QAEhB,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC;;IAGxE,eAAe,CAAC,WAAmB,EAAE,MAAkB,EAAA;AACnD,QAAA,QAAQ,IAAI,CAAC,SAAS;AAClB,YAAA,KAAK,OAAO;gBACR,OAAO,WAAW,KAAK,CAAC;AAC5B,YAAA,KAAK,MAAM;gBACP,OAAO,WAAW,KAAK,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;AAC/D,YAAA,KAAK,QAAQ;gBACT,OAAO,MAAM,CAAC,SAAS;;;AAInC,IAAA,WAAW,CAAC,OAAsB,EAAA;QAC9B,IAAI,CAAC,UAAU,EAAE;;+GA9KZ,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAL,SAAA,EAAA,EAAA,EAAA,KAAA,EAAAjB,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,wfCrB/B,q5GAiGA,EAAA,MAAA,EAAA,CAAA,kuEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAkB,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,iBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,aAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAxB,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAyB,iBAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,gBAAA,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA,EAAA,UAAA,EDlFgB,CAAC,OAAO,CAAC,aAAa,EAAE,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAA,CAAA,CAAA;;4FAMrF,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAV9B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,cAGZ,CAAC,OAAO,CAAC,aAAa,EAAE,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC,CAAC,cAClF,KAAK,EAAA,QAAA,EAAA,q5GAAA,EAAA,MAAA,EAAA,CAAA,kuEAAA,CAAA,EAAA;0GAWR,4BAA4B,EAAA,CAAA;sBAApC;gBACQ,kCAAkC,EAAA,CAAA;sBAA1C;gBAUQ,UAAU,EAAA,CAAA;sBAAlB;gBAKQ,gBAAgB,EAAA,CAAA;sBAAxB;gBAKQ,cAAc,EAAA,CAAA;sBAAtB;gBAIQ,KAAK,EAAA,CAAA;sBAAb;gBAOQ,SAAS,EAAA,CAAA;sBAAjB;gBAIQ,YAAY,EAAA,CAAA;sBAApB;gBAKQ,eAAe,EAAA,CAAA;sBAAvB;gBAKY,OAAO,EAAA,CAAA;sBAAnB;gBAQQ,gBAAgB,EAAA,CAAA;sBAAxB;;;AExEL;;;;;AAKG;MAMU,0BAA0B,CAAA;IACnC,OAAO,cAAc,CAAC,UAAmC,EAAA;AACrD,QAAA,OAAO,IAAI,UAAU,CAAC,CAAC,UAAU,KAAI;AACjC,YAAA,MAAM,iBAAiB,GAAG,IAAI,0BAA0B,CAAC,UAAU,CAAC;YACpE,iBAAiB,CAAC,QAAQ,EAAE;AAC5B,YAAA,iBAAiB,CAAC,gBAAgB,CAAC,SAAS,CAAC,UAAU,CAAC;AACxD,YAAA,OAAO,MAAM,iBAAiB,CAAC,WAAW,EAAE;AAChD,SAAC,CAAC;;AAWN,IAAA,WAAA,CAAoB,UAAmC,EAAA;QAAnC,IAAU,CAAA,UAAA,GAAV,UAAU;AARC,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAa;AAG9D,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,aAAa,CAAY,CAAC,CAAC;AAEnE,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,CAAC,CAAC;AAC9D,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC,CAAC;;IAIjE,QAAQ,GAAA;QACJ,IAAI,CAAC,oBAAoB,EAAE;QAC3B,IAAI,CAAC,gBAAgB,EAAE;;AAEvB,QAAA,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;;IAG7D,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;;IAGtB,oBAAoB,GAAA;AACxB,QAAA,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;;IAGjF,gBAAgB,GAAA;QACpB,IAAI,CAAC,QAAQ,GAAG,IAAI,cAAc,CAAC,CAAC,OAAO,KAAI;AAC3C,YAAA,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;gBACtB,MAAM,aAAa,GAAuB,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;AAChE,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;oBACvB,KAAK,EAAE,aAAa,CAAC,UAAU;oBAC/B,MAAM,EAAE,aAAa,CAAC,SAAS;AAClC,iBAAA,CAAC;AACN,aAAC,CAAC;AACN,SAAC,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;;IAGhD,eAAe,GAAA;QACnB,MAAM,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,qBAAqB,EAAE;AAChF,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;YACvB,KAAK,EAAE,kBAAkB,CAAC,KAAK;YAC/B,MAAM,EAAE,kBAAkB,CAAC,MAAM;AACpC,SAAA,CAAC;;+GArDG,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAA1B,0BAA0B,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,OAAA,EAAA,EAAA,gBAAA,EAAA,qBAAA,EAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBALtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;+EAWkC,gBAAgB,EAAA,CAAA;sBAA9C,MAAM;uBAAC,qBAAqB;;;AC5BjC;;;;;AAKG;MAMU,0BAA0B,CAAA;AAOnC,IAAA,WAAA,CAA6B,UAAmC,EAAA;QAAnC,IAAU,CAAA,UAAA,GAAV,UAAU;AAFvC,QAAA,IAAA,CAAA,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC;;IAI9C,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE;;IAGpC,gBAAgB,GAAA;QACpB,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,EAAE;;AAEpC,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE;;AAE5C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW;QAChC,IAAI,OAAO,EAAE;AACT,YAAA,QACI,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW;;gBAEzC,OAAO,CAAC,YAAY,GAAG,CAAC,GAAG,OAAO,CAAC,YAAY;;aAEhD;AACH,YAAA,OAAO,KAAK;;;IAIZ,cAAc,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC;;aAC9D;AACH,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa;;;+GAlCnC,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAA1B,0BAA0B,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,EAAA,UAAA,CAAA,EAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBALtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;+EAEiC,QAAQ,EAAA,CAAA;sBAArC,KAAK;uBAAC,qBAAqB;;AAsChC;AACA,SAAS,KAAK,CAAI,CAAU,EAAA;IACxB,IAAI,aAAa,GAAQ,IAAI;IAC7B,IAAI,QAAQ,GAAG,KAAK;IACpB,OAAO,YAAA;QACH,IAAI,CAAC,QAAQ,EAAE;YACX,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;AAC9B,YAAA,IAAI,QAAQ,KAAK,aAAa,EAAE;gBAC5B,QAAQ,GAAG,IAAI;gBACf,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAK;oBAC7B,aAAa,GAAG,QAAQ;oBACxB,QAAQ,GAAG,KAAK;AACpB,iBAAC,CAAC;;;AAGV,QAAA,OAAO,aAAa;AACxB,KAAC;AACL;;MC9Da,mBAAmB,CAAA;AAM5B,IAAA,WAAA,GAAA;;QAJA,IAAQ,CAAA,QAAA,GAAG,KAAK;;QAEhB,IAAQ,CAAA,QAAA,GAAG,KAAK;;IAKhB,SAAS,GAAA;AACL,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;;IAIxB,UAAU,GAAA;AACN,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;;IAIzB,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;;IAIxB,UAAU,GAAA;AACN,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;;+GAzBhB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAnB,mBAAmB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,cAAA,EAAA,YAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;wDAUG,SAAS,EAAA,CAAA;sBADR,YAAY;uBAAC,SAAS;gBAMvB,UAAU,EAAA,CAAA;sBADT,YAAY;uBAAC,UAAU;gBAMxB,WAAW,EAAA,CAAA;sBADV,YAAY;uBAAC,YAAY;gBAM1B,UAAU,EAAA,CAAA;sBADT,YAAY;uBAAC,YAAY;;;AC1B9B;;;;;AAKG;MAIU,mBAAmB,CAAA;AAK5B,IAAA,WAAA,CAAoB,MAAc,EAAA;QAAd,IAAM,CAAA,MAAA,GAAN,MAAM;AAFnB,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,OAAO,EAAe;;AAIzD,IAAA,IAAI,CAAC,UAAuB,EAAA;AACxB,QAAA,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC;;AAG5C;;;;;AAKG;AACH,IAAA,oBAAoB,CAChB,QAAgC,EAChC,KAAuB,EACvB,EAAE,MAAM,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,EAAA;AAE5B,QAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAK;AAC/B,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,IAAI,MAAM;AACnD,YAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;AACxB,gBAAA,YAAY,CAAC,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC;gBAC9C;AACK,qBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,qBAAA,SAAS,CAAC,MAAM,YAAY,CAAC,mBAAmB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;;AAE/E,SAAC,CAAC;;AAGN;;;AAGG;IACH,kBAAkB,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,eAAe,IAAI,IAAI;;IAWvC,kBAAkB,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE,EAAA;AAC3D,QAAA,OAAO,IAAI,CAAC,eAAe,IAAI,QAAQ;;AAGnC,IAAA,uBAAuB,CAAC,UAAuB,EAAA;QACnD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,2BAA2B,CAAC,UAAU,CAAC;QACnE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;;AAGjD,IAAA,2BAA2B,CAAC,OAAoB,EAAA;AACpD,QAAA,OAAO,OAAO,CAAC,aAAa,EAAE;AAC1B,YAAA,MAAM,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,SAAS;YAC9E,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;gBAC5C,OAAO,OAAO,CAAC,aAAa;;AAEhC,YAAA,OAAO,GAAG,OAAO,CAAC,aAAa;;AAEnC,QAAA,OAAO,IAAI;;+GAlEN,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFhB,MAAM,EAAA,CAAA,CAAA;;4FAET,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA;;;MCKY,uBAAuB,CAAA;AAUhC,IAAA,WAAA,CACY,YAAiC,EACjC,OAAmB,EACnB,IAAY,EAAA;QAFZ,IAAY,CAAA,YAAA,GAAZ,YAAY;QACZ,IAAO,CAAA,OAAA,GAAP,OAAO;QACP,IAAI,CAAA,IAAA,GAAJ,IAAI;AAZN,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAQ;QAEpC,IAAsB,CAAA,sBAAA,GAAW,GAAG;QACpC,IAAsB,CAAA,sBAAA,GAAW,IAAI;QACrC,IAAY,CAAA,YAAA,GAAY,IAAI;QAC7B,IAAS,CAAA,SAAA,GAAG,CAAC;QACb,IAAU,CAAA,UAAA,GAAG,CAAC;AACd,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,OAAO,EAAQ;;IAQxC,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;YAC7B,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE;AAChD,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC;AACrB,kBAAE,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE;AAC3D,kBAAE,IAAI,CAAC,OAAO,CAAC,aAAa;AAChC,YAAA,WAAW,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC;AACpD,YAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MACtB,WAAW,CAAC,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAC1D;AACL,SAAC,CAAC;;IAGN,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;;IAG9B,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa;YAAE;AACjC,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE;AAC9D,YAAA,MAAM,MAAM,GAAG,eAAe,CAAC,YAAY;AAC3C,YAAA,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS;AACxC,YAAA,IACI,MAAM,GAAG,IAAI,CAAC,UAAU;gBACxB,MAAM,GAAG,MAAM,GAAG,eAAe,CAAC,YAAY,GAAG,IAAI,CAAC,sBAAsB,EAC9E;gBACE,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;gBACjC,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,sBAAsB;oBAAE;AACzD,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI;gBACrB,IAAI,CAAC,YAAY,EAAE;;AAEvB,YAAA,IAAI,CAAC,UAAU,GAAG,MAAM;;aACrB;AACH,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa;AAC1C,YAAA,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY;AACnC,YAAA,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS;AAChC,YAAA,IACI,MAAM,GAAG,IAAI,CAAC,UAAU;AACxB,gBAAA,MAAM,GAAG,MAAM;oBACX,OAAO,CAAC,qBAAqB,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,sBAAsB,EAC1E;gBACE,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;gBACjC,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,sBAAsB;oBAAE;AACzD,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI;gBACrB,IAAI,CAAC,YAAY,EAAE;;AAEvB,YAAA,IAAI,CAAC,UAAU,GAAG,MAAM;;;IAIxB,YAAY,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;;+GArEpC,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAvB,uBAAuB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,+DAAA,EAAA,MAAA,EAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAJnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,+DAA+D;AACzE,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;mIAEa,QAAQ,EAAA,CAAA;sBAAjB;gBAEQ,sBAAsB,EAAA,CAAA;sBAA9B;gBACQ,sBAAsB,EAAA,CAAA;sBAA9B;gBACQ,YAAY,EAAA,CAAA;sBAApB;;;ACVL;AACA;AACA;AACA;AAEA,MAAM,iBAAiB,GAAG,aAAa;MAQ1B,gBAAgB,CAAA;IA0CzB,WACY,CAAA,UAA6B,EAC7B,UAAmC,EAAA;QADnC,IAAU,CAAA,UAAA,GAAV,UAAU;QACV,IAAU,CAAA,UAAA,GAAV,UAAU;AArCtB;;AAEG;QACM,IAAW,CAAA,WAAA,GAAiD,EAAE;AACvE;;;;AAIG;QACM,IAAI,CAAA,IAAA,GAAkC,MAAM;QAC5C,IAAQ,CAAA,QAAA,GAAG,KAAK;AACzB;;;;;AAKG;QACM,IAAY,CAAA,YAAA,GAAG,KAAK;QAER,IAAS,CAAA,SAAA,GAAG,IAAI;AAE3B,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAc;;IAmBtD,eAAe,GAAA;QACX,UAAU,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE;AACtC,SAAC,CAAC;;IAGN,QAAQ,GAAA;QACJ,OAAO;YACH,KAAK,EAAE,IAAI,CAAC,KAAK;SACpB;;AAGL,IAAA,GAAG,CAAC,IAAkC,EAAA;AAClC,QAAA,MAAM,MAAM,GAAQ,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC;AAChE,QAAA,IAAI,IAAI,KAAK,aAAa,EAAE;;AAExB,YAAA,MAAM,CAAC,SAAS,GAAG,IAAI;AACvB,YAAA,IAAI,IAAI,KAAK,aAAa,EAAE;AACxB,gBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;;;AAGvF,QAAA,OAAO,MAAM;;IAGjB,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;;AAGnC,IAAA,YAAY,CAAC,KAAiB,EAAA;AAC1B,QAAA,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC;QACvC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,SAAS,CAAC;QAChD,KAAK,CAAC,cAAc,EAAE;;IAGlB,WAAW,GAAA;QACf,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa;QAC1D,OAAO,QAAQ,EAAE;YACb,IAAI,QAAQ,CAAC,OAAO,KAAK,iBAAiB,CAAC,WAAW,EAAE,EAAE;AACtD,gBAAA,OAAO,IAAI;;AAEf,YAAA,QAAQ,GAAG,QAAQ,CAAC,aAAa;;AAErC,QAAA,OAAO,KAAK;;+GAzFP,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,2dCzB7B,suEAkEA,EAAA,MAAA,EAAA,CAAA,2SAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA5B,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,kBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAiB,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDzCa,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAN5B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,cAGf,KAAK,EAAA,QAAA,EAAA,suEAAA,EAAA,MAAA,EAAA,CAAA,2SAAA,CAAA,EAAA;4GAGE,IAAI,EAAA,CAAA;sBAAtB,SAAS;uBAAC,MAAM;gBAER,IAAI,EAAA,CAAA;sBAAZ;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBAIQ,WAAW,EAAA,CAAA;sBAAnB;gBAMQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBAOQ,YAAY,EAAA,CAAA;sBAApB;gBAC0B,eAAe,EAAA,CAAA;sBAAzC,KAAK;uBAAC,kBAAkB;gBACJ,SAAS,EAAA,CAAA;sBAA7B,KAAK;uBAAC,YAAY;gBAET,WAAW,EAAA,CAAA;sBAApB;;AAiEL,SAAS,cAAc,CAAC,KAAiB,EAAA;;;;;AAKrC,IAAA,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,EAAE,EAAE;AAChE,QAAA,OAAO,cAAc,CAAC,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;;;;AAIhF,IAAA,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE;AAC3B,QAAA,UAAU,EAAE,IAAI;QAChB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,EAAE,KAAK,CAAC,OAAO;AACzB,KAAA,CAAC;AACN;AAEA,SAAS,SAAS,GAAA;IACd,OAAO,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;AAClD;;MEjIa,cAAc,CAAA;AACvB,IAAA,WAAA,CAAoB,SAA2B,EAAA;QAA3B,IAAS,CAAA,SAAA,GAAT,SAAS;;AAU7B,IAAA,SAAS,CACL,KAA6B,EAC7B,IAAA,GAAgF,IAAI,EAAA;QAEpF,IAAI,CAAC,KAAK,EAAE;AACR,YAAA,OAAO,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE;;AAEzC,QAAA,IAAI,OAAO,GAAG,IAAI,aAAa,EAAE;AACjC,QAAA,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI;AAAE,YAAA,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,IAAI;AACjE,QAAA,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI;AAAE,YAAA,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI;AAC3D,QAAA,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI;AAAE,YAAA,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,QAAQ;AAC7E,QAAA,IAAI,IAAI,EAAE,KAAK,EAAE;YACb,OAAO,IAAI,CAAC;AACP,iBAAA,GAAG,CAAC,OAAO,CAAC;iBACZ,IAAI,CAAC,GAAG,CAAC,MAAM,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;;aACxE;AACH,YAAA,OAAO,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC;;;+GA3B3D,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAd,cAAc,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,CAAA;;4FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAJ1B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,YAAY;AAClB,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;;;MCFY,YAAY,CAAA;AACrB,IAAA,WAAA,CAAoB,cAA8B,EAAA;QAA9B,IAAc,CAAA,cAAA,GAAd,cAAc;;AAClC,IAAA,SAAS,CAAC,IAAU,EAAA;AAChB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;;+GAHpD,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAW,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAZ,YAAY,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,CAAA;;4FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBAJxB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,YAAY;AAClB,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;;;MCAY,iBAAiB,CAAA;AAC1B,IAAA,SAAS,CAAC,IAAU,EAAE,IAAA,GAAY,IAAI,EAAA;AAClC,QAAA,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5E,QAAA,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9E,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,MAAM,IAAI,OAAO,CAAC;AACxD,QAAA,IAAI,KAAK,IAAI,MAAM,EAAE;AACjB,YAAA,IAAI,SAAS,GAAG,CAAC,EAAE;gBACf,OAAO,SAAS,GAAG,YAAY;;AAEnC,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;;AAEvD,QAAA,OAAO,EAAE;;+GAXJ,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAjB,iBAAiB,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,eAAA,EAAA,CAAA,CAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAJ7B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,eAAe;AACrB,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;;;MCeY,aAAa,CAAA;AACtB,IAAA,WAAA,CACY,UAA6B,EAC7B,SAAuB,EACvB,cAA8B,EAC9B,UAA0B,EAAA;QAH1B,IAAU,CAAA,UAAA,GAAV,UAAU;QACV,IAAS,CAAA,SAAA,GAAT,SAAS;QACT,IAAc,CAAA,cAAA,GAAd,cAAc;QACd,IAAU,CAAA,UAAA,GAAV,UAAU;;IAGtB,SAAS,CAAC,IAAU,EAAE,WAAiC,EAAA;AACnD,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AAC/D,YAAA,OAAO,IAAI;;AACR,aAAA,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YAC1B,OAAO,IAAI,CAAC,EAAE,CACV,IAAI,CAAC,SAAS,CAAC,8BAA8B,CACzC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CACnE,CACJ;;aACE;YACH,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC;;;IAI5C,aAAa,CAAC,IAAU,EAAE,WAAiC,EAAA;AAC/D,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,IAAI,CACnC,SAAS,CAAC,OAAO,gBAAgB,KAAI;AACjC,YAAA,IAAI,GAAG,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC;YACtE,IAAI,gBAAgB,EAAE;AAClB,gBAAA,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW;AAC5B,qBAAA,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAI,CAAA,EAAA,GAAG,CAAI,CAAA,EAAA,KAAK,EAAE;qBACxC,IAAI,CAAC,EAAE,CAAC;;AAEjB,YAAA,OAAO,GAAG;SACb,CAAC,CACL;;AAGG,IAAA,gBAAgB,CAAC,IAAU,EAAA;AAC/B,QAAA,OAAO;AACF,aAAA,QAAQ,CAAC;AACN,YAAA,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,IAAI,CAAC;AAC1C,YAAA,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,IAAI,CAAC;SAC5C;AACA,aAAA,IAAI,CACD,GAAG,CACC,CAAC,CAAC,oBAAoB,EAAE,UAAU,CAAC,KAC/B,oBAAoB;YACpB,UAAU,EAAE,cAAc,KAAK,aAAa,CAAC,wBAAwB,CAC5E,CACJ;;+GAhDA,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAD,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA5B,IAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA8B,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAZ,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAb,aAAa,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,aAAA,EAAA,CAAA,CAAA;;4FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAJzB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,aAAa;AACnB,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;;;MCbY,kBAAkB,CAAA;AAC3B,IAAA,WAAA,CAAoB,MAAqB,EAAA;QAArB,IAAM,CAAA,MAAA,GAAN,MAAM;;AAC1B,IAAA,SAAS,CAAC,MAAoB,EAAE,IAAA,GAAY,IAAI,EAAA;AAC5C,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,iBAAiB,EAAE,UAAU,CAAC;QAC9D,IAAI,MAAM,IAAI,IAAI;AAAE,YAAA,OAAO,IAAI;AAC/B,QAAA,IAAI,KAAK,IAAI,eAAe,EAAE;AAC1B,YAAA,IAAI,MAAM,CAAC,aAAa,IAAI,IAAI;gBAAE,KAAK,GAAG,UAAU;;gBAC/C,OAAO,MAAM,CAAC,aAAa;;AAEpC,QAAA,IAAI,KAAK,IAAI,UAAU,EAAE;AACrB,YAAA,IAAI,MAAM,CAAC,OAAO,EAAE;AAChB,gBAAA,OAAO,CACH,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,GAAG,EAAE;oBACzD,GAAG;qBACF,MAAM,CAAC,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,GAAG,EAAE,CAAC,EAC1D,IAAI,EAAE;;AAEZ,YAAA,OAAO,CACH,CAAC,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,GAAG,EAAE;gBACzC,GAAG;AACH,iBAAC,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,EAC1C,IAAI,EAAE;;QAEZ,IAAI,KAAK,IAAI,WAAW,IAAI,KAAK,IAAI,UAAU,EAAE;AAC7C,YAAA,IAAI,MAAM,CAAC,OAAO,EAAE;AAChB,gBAAA,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;;AAEhC,YAAA,OAAO,MAAM,CAAC,KAAK,CAAC;;AAExB,QAAA,IAAI,KAAK,IAAI,OAAO,EAAE;YAClB,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK;AAAE,gBAAA,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK;AACvE,YAAA,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI;gBAAE,OAAO,MAAM,CAAC,OAAO;YAC/C,OAAO,MAAM,CAAC,KAAK;;AAEvB,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC;;+GAlCf,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAzB,EAAA,CAAA,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAlB,kBAAkB,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,gBAAA,EAAA,CAAA,CAAA;;4FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAJ9B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,gBAAgB;AACtB,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;;;MCKY,aAAa,CAAA;IACtB,SAAS,CAAC,IAA8B,EAAE,IAAiC,EAAA;QACvE,IAAI,CAAE,IAAa,EAAE,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;AACzC,YAAA,IAAI,IAAI,KAAK,MAAM,EAAE;gBACjB,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;;YAEtD,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;;AAEtD,QAAA,MAAM,KAAK,GACP,IAAI,EAAE,IAAI,KAAK;AACX,cAAE,UAAU,CAAC,OAAO,CAAC,IAAY;AACjC,cAAE,UAAU,CAAC,QAAQ,CAAC,IAAY,CAAC;QAC3C,IAAK,IAAa,EAAE,UAAU,GAAG,aAAa,CAAC,gBAAgB,CAAC,EAAE;YAC9D,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CACzB,UAAU,GAAI,IAAa,EAAE,UAAU,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAC5E;AACI,gBAAA,QAAQ,EAAE,KAAK;AAClB,aAAA,CACJ;;AAEL,QAAA,OAAO,KAAK;;AAEhB,IAAA,WAAA,CAAoB,SAA2B,EAAA;QAA3B,IAAS,CAAA,SAAA,GAAT,SAAS;;+GAtBpB,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAb,aAAa,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,CAAA;;4FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAJzB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,WAAW;AACjB,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;;;MCGY,qBAAqB,CAAA;AAS9B,IAAA,WAAA,GAAA;AAFU,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,YAAY,EAAa;;AAI9C,IAAA,OAAO,CAAC,IAAoB,EAAA;AACxB,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,aAAa;AAClC,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,KAAK,WAAW;QAC/C,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE;AAC3B,YAAA,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE;;AAEnB,gBAAA,IAAI,aAAa,KAAK,IAAI,CAAC,aAAa,EAAE;oBACtC;;;YAGR,SAAS,GAAG,CAAC,SAAS;;AACnB,aAAA,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE;;YAE1B,SAAS,GAAG,aAAa;;AAE5B,QAAA,IAAkB,CAAC,SAAS,GAAG,SAAS;AACzC,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;;+GA3Bf,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,sSCblC,u9BAsBA,EAAA,MAAA,EAAA,CAAA,0sBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA+B,aAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAb,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,UAAA,EDZgB,CAAC,OAAO,CAAC,aAAa,EAAE,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAA,CAAA,CAAA;;4FAGrF,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAPjC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,cAGhB,CAAC,OAAO,CAAC,aAAa,EAAE,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC,CAAC,cAClF,KAAK,EAAA,QAAA,EAAA,u9BAAA,EAAA,MAAA,EAAA,CAAA,0sBAAA,CAAA,EAAA;wDAGoB,IAAI,EAAA,CAAA;sBAAxC,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAE1B,OAAO,EAAA,CAAA;sBAAf;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBAES,IAAI,EAAA,CAAA;sBAAb;;;MEXQ,gBAAgB,CAAA;AAGzB,IAAA,WAAA,GAAA;QAFwC,IAAQ,CAAA,QAAA,GAAG,iBAAiB;;+GAD3D,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECT7B,uZAcA,EAAA,MAAA,EAAA,CAAA,wgJAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDPc,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAEhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAN5B,SAAS;+BACI,YAAY,EAAA,OAAA,EAGb,CAAC,eAAe,CAAC,EAAA,QAAA,EAAA,uZAAA,EAAA,MAAA,EAAA,CAAA,wgJAAA,CAAA,EAAA;wDAGc,QAAQ,EAAA,CAAA;sBAA/C,WAAW;uBAAC,gBAAgB;;;MEJpB,gBAAgB,CAAA;AACzB,IAAA,SAAS,CAAC,KAAa,EAAA;QACnB,OAAO,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;;+GAF7B,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAhB,gBAAgB,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA,CAAA;;4FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAJ5B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,cAAc;AACpB,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;;;MCKY,eAAe,CAAA;AACxB,IAAA,WAAA,CAAoB,SAA2B,EAAA;QAA3B,IAAS,CAAA,SAAA,GAAT,SAAS;;IAC7B,SAAS,CAAC,IAAU,EAAE,IAA2B,EAAA;AAC7C,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,EAAE;AACtD,YAAA,IAAI,IAAI,EAAE,IAAI,KAAK,MAAM,EAAE;gBACvB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CACrB,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAC1E;;;AAGT,QAAA,OAAO,IAAI;;+GAVN,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAf,eAAe,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,eAAA,EAAA,CAAA,CAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAJ3B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,eAAe;AACrB,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;;;MC2FY,wBAAwB,CAAA;+GAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,iBA9D7B,kBAAkB;YAClB,kBAAkB;YAClB,kBAAkB;YAClB,0BAA0B;YAC1B,0BAA0B;YAC1B,iBAAiB;YACjB,mBAAmB;YACnB,cAAc;YACd,cAAc;YACd,aAAa;YACb,eAAe;YACf,uBAAuB;YACvB,gBAAgB;YAChB,YAAY;YACZ,aAAa;YACb,iBAAiB;YACjB,eAAe;YACf,kBAAkB;YAClB,aAAa;YACb,gBAAgB;YAChB,iBAAiB;YACjB,gBAAgB;YAChB,qBAAqB;AACrB,YAAA,aAAa,aAGb,YAAY;YACZ,aAAa;YACb,gBAAgB;YAChB,qBAAqB;YACrB,eAAe;YACf,gBAAgB;YAChB,eAAe;YACf,eAAe;AACf,YAAA,YAAY,aAGZ,kBAAkB;YAClB,kBAAkB;YAClB,kBAAkB;YAClB,0BAA0B;YAC1B,0BAA0B;YAC1B,iBAAiB;YACjB,mBAAmB;YACnB,cAAc;YACd,cAAc;YACd,eAAe;YACf,aAAa;YACb,uBAAuB;YACvB,gBAAgB;YAChB,YAAY;YACZ,aAAa;YACb,iBAAiB;YACjB,kBAAkB;YAClB,aAAa;YACb,gBAAgB;YAChB,qBAAqB;YACrB,gBAAgB;YAChB,qBAAqB;YACrB,aAAa,CAAA,EAAA,CAAA,CAAA;AAGR,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,YApC7B,YAAY;YACZ,aAAa;YACb,gBAAgB;YAChB,qBAAqB;YACrB,eAAe;YACf,gBAAgB;YAChB,eAAe;YACf,eAAe;YACf,YAAY,CAAA,EAAA,CAAA,CAAA;;4FA4BP,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAjEpC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,sBAAsB,CAAC;AACjC,oBAAA,YAAY,EAAE;wBACV,kBAAkB;wBAClB,kBAAkB;wBAClB,kBAAkB;wBAClB,0BAA0B;wBAC1B,0BAA0B;wBAC1B,iBAAiB;wBACjB,mBAAmB;wBACnB,cAAc;wBACd,cAAc;wBACd,aAAa;wBACb,eAAe;wBACf,uBAAuB;wBACvB,gBAAgB;wBAChB,YAAY;wBACZ,aAAa;wBACb,iBAAiB;wBACjB,eAAe;wBACf,kBAAkB;wBAClB,aAAa;wBACb,gBAAgB;wBAChB,iBAAiB;wBACjB,gBAAgB;wBAChB,qBAAqB;wBACrB,aAAa;AAChB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACL,YAAY;wBACZ,aAAa;wBACb,gBAAgB;wBAChB,qBAAqB;wBACrB,eAAe;wBACf,gBAAgB;wBAChB,eAAe;wBACf,eAAe;wBACf,YAAY;AACf,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACL,kBAAkB;wBAClB,kBAAkB;wBAClB,kBAAkB;wBAClB,0BAA0B;wBAC1B,0BAA0B;wBAC1B,iBAAiB;wBACjB,mBAAmB;wBACnB,cAAc;wBACd,cAAc;wBACd,eAAe;wBACf,aAAa;wBACb,uBAAuB;wBACvB,gBAAgB;wBAChB,YAAY;wBACZ,aAAa;wBACb,iBAAiB;wBACjB,kBAAkB;wBAClB,aAAa;wBACb,gBAAgB;wBAChB,qBAAqB;wBACrB,gBAAgB;wBAChB,qBAAqB;wBACrB,aAAa;AAChB,qBAAA;AACJ,iBAAA;;;AC7FD;;;;;AAKG;MACU,QAAQ,CAAA;AAgBjB,IAAA,WAAA,CACW,IAAkB,EAClB,IAAY,EACZ,MAAS,GAAA;AACZ,QAAA,SAAS,EAAE,KAAK;AACnB,KAAA,EAAA;QAJM,IAAI,CAAA,IAAA,GAAJ,IAAI;QACJ,IAAI,CAAA,IAAA,GAAJ,IAAI;QACJ,IAAM,CAAA,MAAA,GAAN,MAAM;AAlBjB;;;AAGG;QACI,IAAO,CAAA,OAAA,GAAG,IAAI;;AAmBrB,IAAA,OAAO,qBAAqB,GAAA;QACxB,IAAI,OAAO,GAAG,EAAE;QAChB,OAAO,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;AACjD,QAAA,OAAO,OAAO;;AAErB;AACK,MAAO,YAAa,SAAQ,QAAQ,CAAA;AACtC,IAAA,WAAA,CACW,IAAkB,EAClB,IAAY,EACZ,IAA0C,GAAA,IAAI,EAC9C,MAAS,GAAA;AACZ,QAAA,SAAS,EAAE,KAAK;AACnB,KAAA,EAAA;AAED,QAAA,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC;QAPlB,IAAI,CAAA,IAAA,GAAJ,IAAI;QACJ,IAAI,CAAA,IAAA,GAAJ,IAAI;QACJ,IAAI,CAAA,IAAA,GAAJ,IAAI;QACJ,IAAM,CAAA,MAAA,GAAN,MAAM;;AAMpB;AACK,MAAO,SAAU,SAAQ,YAAY,CAAA;AAE1C;;MC7CY,gBAAgB,CAAA;AACzB,IAAA,OAAO,WAAW,CAAC,MAAqB,EAAE,IAAY,EAAA;QAClD,IAAI,MAAM,EAAE;AACR,YAAA,IAAI,MAAM,CAAC,KAAK,EAAE;AACd,gBAAA,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE;AAC7B,oBAAA,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE;AACjB,wBAAA,OAAO,IAAI;;;;YAIvB,OAAO,CAAC,KAAK,CAAC,oCAAoC,GAAG,IAAI,GAAG,0BAA0B,CAAC;;AAE3F,QAAA,OAAO,IAAI;;AAEf,IAAA,OAAO,UAAU,CAAC,SAA2B,EAAE,MAAW,EAAE,IAAY,EAAA;QACpE,IAAI,OAAO,GAAe,EAAE;QAC5B,IAAI,MAAM,EAAE;AACR,YAAA,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE;AAC7B,gBAAA,IAAI,IAAI,CAAC,EAAE,KAAK,IAAI,EAAE;AAClB,oBAAA,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;wBAC/B,IAAI,IAAI,GAAiB,MAAM;AAC/B,wBAAA,IAAI,IAAI,KAAK,mBAAmB,EAAE;4BAC9B,IAAI,GAAG,OAAO;;AACX,6BAAA,IAAI,IAAI,KAAK,mBAAmB,EAAE;4BACrC,IAAI,GAAG,YAAY;;;wBAGvB,IAAI,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;4BACzB,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;AAClC,4BAAA,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;AACf,4BAAA,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;;wBAExB,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;AAC1C,wBAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;AAC3B,wBAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;;oBAEtB;;;;AAIZ,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACjB,YAAA,IAAI,MAAM,KAAK,IAAI,EAAE;gBACjB,OAAO,CAAC,IAAI,CACR,kCAAkC,GAAG,IAAI,GAAG,0BAA0B,CACzE;;YAEL,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,sBAAsB,EAAE;AACtD,gBAAA,OAAO,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;AAChE,gBAAA,OAAO,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;AAClE,gBAAA,OAAO,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;AAClE,gBAAA,OAAO,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,0BAA0B,CAAC,CAAC;;AACzE,iBAAA,IAAI,IAAI,KAAK,oBAAoB,EAAE;AACtC,gBAAA,OAAO,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;AAChE,gBAAA,OAAO,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,4BAA4B,CAAC,CAAC;AAC9E,gBAAA,OAAO,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,0BAA0B,CAAC,CAAC;;AACzE,iBAAA,IAAI,IAAI,KAAK,mBAAmB,EAAE;AACrC,gBAAA,OAAO,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC;AACxE,gBAAA,OAAO,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;;AACnE,iBAAA,IAAI,IAAI,KAAK,mBAAmB,EAAE;gBACrC,OAAO,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;gBACjD,OAAO,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;gBAChD,OAAO,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;;;AAGzD,QAAA,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;YACd,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI;AACjC,YAAA,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE;AACrD,gBAAA,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO;;AAE9E,YAAA,OAAO,CAAC;AACZ,SAAC,CAAC;AACF,QAAA,OAAO,OAAO;;AAGlB;;;;;AAKG;AACH,IAAA,OAAO,SAAS,CAAC,GAAW,EAAE,QAAmC,EAAE,OAAoB,EAAA;AACnF,QAAA,IAAI,OAAO,IAAI,IAAI,EAAE;YACjB,OAAO,CAAC,IAAI,CAAC,2BAA2B,GAAG,GAAG,GAAG,4BAA4B,CAAC;AAC9E,YAAA,OAAO,IAAI;;AAEf,QAAA,KAAK,IAAI,CAAC,IAAI,OAAO,EAAE;AACnB,YAAA,IAAI,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE;gBACb,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,EAAE;AACnD,oBAAA,OAAO,CAAC;;;;AAIpB,QAAA,OAAO,IAAI;;AAGf,IAAA,WAAA,CAAoB,cAAqC,EAAA;QAArC,IAAc,CAAA,cAAA,GAAd,cAAc;;AAElC;;;;;;;AAOG;IACH,MAAM,sBAAsB,CACxB,UAAe,EACf,EAAU,EACV,QAAA,GAAmB,IAAI,EACvB,OAAY,EAAA;AAEZ,QAAA,KAAK,IAAI,CAAC,IAAI,OAAO,EAAE;AACnB,YAAA,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE;gBACZ,IACI,CAAC,QAAQ,IAAI,IAAI,IAAI,CAAC,CAAC,QAAQ,IAAI,QAAQ;qBAC1C,MAAM,IAAI,CAAC,qBAAqB,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EACnD;AACE,oBAAA,OAAO,CAAC;;;;AAIpB,QAAA,OAAO,IAAI;;AAGf,IAAA,MAAM,qBAAqB,CAAC,MAAW,EAAE,UAAe,EAAA;QACpD,IAAI,CAAC,MAAM,CAAC,SAAS;AAAE,YAAA,OAAO,IAAI;AAClC,QAAA,IAAI,SAAS,GAAG,MAAM,CAAC,SAAS;QAChC,IAAI,SAAS,CAAC,IAAI,IAAI,UAAU,IAAI,UAAU,EAAE;AAC5C,YAAA,IACI,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM;AAClD,iBAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,EACnD;AACE,gBAAA,OAAO,KAAK;;;AAGpB,QAAA,IAAI,SAAS,CAAC,IAAI,IAAI,gBAAgB,EAAE;AACpC,YAAA,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,SAAS,CAAC,KAAK,CAAC;AACrE,YAAA,IAAI,EAAE,IAAI,SAAS,CAAC,MAAM,EAAE;AACxB,gBAAA,OAAO,KAAK;;;AAGpB,QAAA,OAAO,IAAI;;AAEf;;AAEG;AACH,IAAA,OAAO,YAAY,CAAC,GAAkB,EAAE,EAAU,EAAA;AAC9C,QAAA,OACI,GAAG,CAAC,KAGP,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;;AAE9B;;AAEG;AACH,IAAA,OAAO,cAAc,CAAC,GAAkB,EAAE,WAAmB,IAAI,EAAA;QAC7D,MAAM,IAAI,GAAQ,EAAE;QACpB,MAAM,YAAY,GAAG,gBAAgB,CAAC,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC;AACjE,QAAA,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE;AACzB,YAAA,IACI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAC5C,gBAAA,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAO,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EACzC;AACE,gBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;;;AAGpB,QAAA,OAAO,IAAI;;+GAvKN,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAzB,EAAA,CAAA,qBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAhB,gBAAgB,EAAA,CAAA,CAAA;;4FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B;;;MCLY,SAAS,CAAA;+GAAT,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;gHAAT,SAAS,EAAA,CAAA,CAAA;gHAAT,SAAS,EAAA,SAAA,EAFP,CAAC,gBAAgB,CAAC,EAAA,CAAA,CAAA;;4FAEpB,SAAS,EAAA,UAAA,EAAA,CAAA;kBAJrB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,YAAY,EAAE,EAAE;oBAChB,SAAS,EAAE,CAAC,gBAAgB,CAAC;AAChC,iBAAA;;;ACUM,MAAM,qBAAqB,GAAG;AAErC,MAAM,UAAU,GAAG,gBAAgB;SAEnB,gBAAgB,GAAA;IAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC;AACpD,IAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAC3B;AAEM,SAAU,gBAAgB,CAAC,KAAa,EAAA;IAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;IAClC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC;AACjD;SAEgB,iBAAiB,GAAA;AAC7B,IAAA,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC;AAC9C;;ACnBA;;;;;;;AAOG;MAKU,wBAAwB,CAAA;AAoBjC,IAAA,WAAA,CAAoB,UAA+B,EAAA;QAA/B,IAAU,CAAA,UAAA,GAAV,UAAU;AAZ9B;;;;;AAKG;AACO,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,CAAY,KAAK,CAAC;AAC7D;;AAEG;AACO,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAa;;AAItD,IAAA,WAAW,CAAC,OAAsB,EAAA;;AAE9B,QAAA,IAAI,OAAO,CAAC,KAAK,EAAE;AACf,YAAA,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE;gBAChE,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC;;;;AAKvD,IAAA,WAAW,CAAC,KAAgB,EAAA;AAC/D,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACb;;AAEJ,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;;QAE/B,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC;;;;;QAKrD,UAAU,CAAC,MAAK;AACZ,YAAA,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;AAChC,SAAC,CAAC;;AAG+B,IAAA,SAAS,CAAC,KAAgB,EAAA;AAC3D,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACb;;AAEJ,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;AAC7B,QAAA,iBAAiB,EAAE;;+GApDd,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAxB,wBAAwB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,CAAA,mBAAA,EAAA,OAAA,CAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAJpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;+EAO+B,KAAK,EAAA,CAAA;sBAAhC,KAAK;uBAAC,mBAAmB;gBAQhB,cAAc,EAAA,CAAA;sBAAvB;gBAIS,YAAY,EAAA,CAAA;sBAArB;gBAasC,WAAW,EAAA,CAAA;sBAAjD,YAAY;uBAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;gBAgBA,SAAS,EAAA,CAAA;sBAA7C,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;;;MCxEjB,KAAK,CAAA;AAI1B;;MCSY,oBAAoB,CAAA;IAc7B,IAAI,YAAY,CAAC,KAAa,EAAA;AAC1B,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC;;AAGxC,IAAA,IAAI,OAAO,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK;;AAGpC,IAAA,WAAA,CAAoB,MAAc,EAAU,KAAY,EAAU,SAAoB,EAAA;QAAlE,IAAM,CAAA,MAAA,GAAN,MAAM;QAAkB,IAAK,CAAA,KAAA,GAAL,KAAK;QAAiB,IAAS,CAAA,SAAA,GAAT,SAAS;;AApBnE,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,eAAe,CAAS,IAAI,CAAC;;AAEvD,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,eAAe,CAA2B,IAAI,CAAC;;AAEvE,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,eAAe,CAAiB,IAAI,CAAC;;AAE1D,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,eAAe,CAA2B,IAAI,CAAC;;AAE1E,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,eAAe,CAAa,MAAM,CAAC;;AAE3D,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,eAAe,CAAS,IAAI,CAAC;QAWrD,IAAI,CAAC,kBAAkB,EAAE;QACzB,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,CAAC,yBAAyB,EAAE;QAChC,IAAI,CAAC,cAAc,EAAE;QACrB,IAAI,CAAC,6BAA6B,EAAE;;;;;;;;AASxC,IAAA,YAAY,CAAC,MAAgC,EAAA;AACzC,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC;;;AAI1C,IAAA,YAAY,CAAC,MAAgC,EAAA;QACzC,IAAI,IAAI,CAAC,oBAAoB,CAAC,KAAK,KAAK,MAAM,EAAE;AAC5C,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;;;AAI5C,IAAA,SAAS,CAAC,KAAa,EAAA;AACnB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE;YACtB,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC;AAC3C,gBAAA,YAAY,EAAE,KAAK;AACnB,gBAAA,MAAM,EAAE,IAAI,CAAC,iBAAiB,CAAC,KAAK;AACpC,gBAAA,MAAM,EAAE,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,MAAM;AAC9C,aAAA,CAAC;;AACC,aAAA,IAAI,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE;AACjC,YAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;;;IAI/C,kBAAkB,GAAA;AACtB,QAAA,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,oBAAoB,CAAC;AACnE,aAAA,IAAI,CACD,GAAG,CAAC,CAAC,CAAC,YAAY,EAAE,WAAW,CAAC,KAAK,YAAY,IAAI,WAAW,CAAC,EACjE,oBAAoB,EAAE;AAEzB,aAAA,SAAS,CAAC,CAAC,MAAM,KAAI;AAClB,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAK;AACjB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC;AACvC,aAAC,CAAC;AACN,SAAC,CAAC;;IAGF,eAAe,GAAA;AACnB,QAAA,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,CAAC;AAC9D,aAAA,IAAI,CACD,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,KACzB,UAAU,EAAE,YAAY,CAAC;AACrB,YAAA,YAAY,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK;AAC5C,YAAA,MAAM,EAAE,UAAU;YAClB,MAAM,EAAE,UAAU,CAAC,MAAM;AAC5B,SAAA,CAAC,CACL;;AAED,QAAA,oBAAoB,EAAE;AAEzB,aAAA,SAAS,CAAC,CAAC,OAAO,KAAI;AACnB,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC5D,SAAC,CAAC;;IAGF,cAAc,GAAA;QAClB,IAAI,CAAC,aAAa,CAAC;AACf,YAAA,IAAI,CAAC,mBAAmB;AACxB,YAAA,IAAI,CAAC,cAAc;AACnB,YAAA,IAAI,CAAC,iBAAiB;AACzB,SAAA,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,EAAE,OAAO,EAAE,UAAU,CAAC,KAAI;AACjD,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AAC9E,SAAC,CAAC;AACF,QAAA,IAAI,KAAuB;QAC3B,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AACpC,YAAA,IAAI,MAAM,IAAI,CAAC,KAAK,EAAE;AAClB,gBAAA,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AACvC,gBAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;;AAC7B,iBAAA,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE;AACzB,gBAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;gBAChC,KAAK,GAAG,IAAI;;YAEhB,IAAI,MAAM,EAAE;AACR,gBAAA,KAAK,CAAC,SAAS,GAAG,CAAc,WAAA,EAAA,MAAM,gBAAgB;;AAE9D,SAAC,CAAC;;IAGE,6BAA6B,GAAA;AACjC,QAAA,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,iBAAiB,CAAC;aACnF,IAAI,CAAC,QAAQ,EAAE;AACf,aAAA,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,KAAI;;AAEpD,YAAA,QAAQ,EAAE,oBAAoB,CAAC,IAAI,CAAC;YACpC,OAAO,EAAE,oBAAoB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AACtD,SAAC,CAAC;;IAGF,yBAAyB,GAAA;AAC7B,QAAA,IAAI,CAAC;AACA,aAAA,qCAAqC;AACrC,aAAA,IAAI,CAAC,GAAG,CAAC,CAAC,gBAAgB,KAAK,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;aACpE,SAAS,CAAC,CAAC,UAAU,KAClB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CACjE;;AAGD,IAAA,aAAa,CAAC,gBAAyB,EAAA;QAC3C,IAAI,gBAAgB,EAAE;AAClB,YAAA,OAAO,MAAM;;aACV;AACH,YAAA,OAAO,MAAM;;;AAIb,IAAA,SAAS,CAAC,YAAoB,EAAE,OAAgB,EAAE,UAAsB,EAAA;QAC5E,IAAI,CAAC,YAAY,EAAE;AACf,YAAA,OAAO,IAAI;;AACR,aAAA,IAAI,OAAO,EAAE,YAAY,EAAE;AAC9B,YAAA,OAAO,SAAS;;AACb,aAAA,IAAI,UAAU,KAAK,MAAM,EAAE;AAC9B,YAAA,OAAO,MAAM;;aACV;AACH,YAAA,OAAO,UAAU;;;+GApJhB,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAuC,KAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cAFjB,MAAM,EAAA,CAAA,CAAA;;4FAET,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA;;;ACPD;;;;AAIG;MAKU,kBAAkB,CAAA;IAC3B,WAAoB,CAAA,OAAwB,EAAU,aAAmC,EAAA;QAArE,IAAO,CAAA,OAAA,GAAP,OAAO;QAA2B,IAAa,CAAA,aAAA,GAAb,aAAa;QAC/D,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;YACrC,IAAI,CAAC,aAAa,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI;;;AAGnD,YAAA,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,0BAA0B,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACtE,SAAC,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAK;YACjC,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE;gBACpC,IAAI,CAAC,uBAAuB,EAAE;;AAEtC,SAAC,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,MAAK;YAChC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AAC/C,YAAA,IAAI,CAAC,aAAa,CAAC,YAAY,GAAG,IAAI;AAC1C,SAAC,CAAC;;IAGE,uBAAuB,GAAA;QAC3B,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC7C,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAChC,QAAA,KAAK,CAAC,SAAS,GAAG,CAAA,kDAAA,CAAoD;;;QAGtE,UAAU,CAAC,MAAK;AACZ,YAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACpC,SAAC,CAAC;;+GA3BG,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAxC,IAAA,CAAA,OAAA,EAAA,EAAA,EAAA,KAAA,EAAAyC,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAlB,kBAAkB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,eAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAJ9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;;;ACCD,MAAM,+BAA+B,GAAG,oCAAoC;AAC5E,MAAM,6BAA6B,GAAG,kCAAkC;MAO3D,wBAAwB,CAAA;AAKjC,IAAA,IAAI,MAAM,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,uBAAuB,CAAC,KAAK;;AAM7C,IAAA,WAAA,CACY,MAAc,EACd,UAAmC,EACnC,aAAmC,EAAA;QAFnC,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAU,CAAA,UAAA,GAAV,UAAU;QACV,IAAa,CAAA,aAAA,GAAb,aAAa;AAZf,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAe;AAM/C,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,eAAe,CAAyB,IAAI,CAAC;AAC3E,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,OAAO,EAAQ;QAOnC,IAAI,CAAC,uBAAuB,EAAE;QAC9B,IAAI,CAAC,wBAAwB,EAAE;;IAGnC,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;AACrB,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;;AAG7B,IAAA,oBAAoB,CAAC,KAA6B,EAAA;AAC9C,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC;;IAGpC,uBAAuB,GAAA;AAC3B,QAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAK;YAC/B,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,gBAAgB,CAAC,YAAY,EAAE,MACzD,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,CACxC;YACD,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,gBAAgB,CAAC,YAAY,EAAE,MACzD,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,CACxC;;;;;AAKD,YAAA,wBAAwB,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa;AACjD,iBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;AAC9B,iBAAA,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AAC/D,SAAC,CAAC;;IAGE,wBAAwB,GAAA;AAC5B,QAAA,IAAI,CAAC;AACA,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,eAAe,KAAI;AAC3B,YAAA,MAAM,OAAO,GAAG,eAAe,EAAE,OAAO;YACxC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS;AACzD,YAAA,SAAS,CAAC,MAAM,CAAC,+BAA+B,EAAE,6BAA6B,CAAC;AAChF,YAAA,IAAI,OAAO,EAAE,MAAM,EAAE;AACjB,gBAAA,SAAS,CAAC,GAAG,CAAC,+BAA+B,CAAC;;AAC3C,iBAAA,IAAI,OAAO,EAAE,YAAY,EAAE;AAC9B,gBAAA,SAAS,CAAC,GAAG,CAAC,6BAA6B,CAAC;;AAEpD,SAAC,CAAC;;+GA5DD,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAxB,wBAAwB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBALpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;oIAE+B,MAAM,EAAA,CAAA;sBAAjC,KAAK;uBAAC,mBAAmB;gBACjB,YAAY,EAAA,CAAA;sBAApB;gBACS,WAAW,EAAA,CAAA;sBAApB;;AA6DL,SAAS,wBAAwB,CAAC,OAAoB,EAAA;AAClD,IAAA,OAAO,IAAI,UAAU,CAAC,CAAC,UAAU,KAAI;QACjC,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,CAAC,KAAK,KAAI;AAC5C,YAAA,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE;;AAE1B,gBAAA,IAAI,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;oBAC9C,UAAU,CAAC,IAAI,EAAE;;;AAG7B,SAAC,CAAC;;AAEF,QAAA,IAAI,OAAO,GAAG,UAAU,CAAC,MAAK;YAC1B,OAAO,GAAG,IAAI;AACd,YAAA,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC7E,SAAC,CAAC;AACF,QAAA,OAAO,MAAK;;;AAGR,YAAA,IAAI,OAAO,KAAK,IAAI,EAAE;;;;;;;gBAOlB,YAAY,CAAC,OAAO,CAAC;;YAEzB,QAAQ,CAAC,UAAU,EAAE;AACzB,SAAC;AACL,KAAC,CAAC;AACN;;ICpHY;AAAZ,CAAA,UAAY,cAAc,EAAA;AACtB;;AAEG;AACH,IAAA,cAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf;;AAEG;AACH,IAAA,cAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACf,CAAC,EATW,cAAc,KAAd,cAAc,GASzB,EAAA,CAAA,CAAA;MACY,cAAc,CAAA;IAChB,OAAO,oBAAoB,CAAC,KAAa,EAAA;;;;AAI5C,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,CAAC;AACpB,QAAA,IAAI;YACA,IAAI,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;AAC7B,YAAA,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;gBACpB,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBAC3C,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBAC3C,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAC3C,gBAAA,IAAI,IAAI,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;AACnC,gBAAA,OAAO,IAAI;;AAEf,YAAA,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;gBACpB,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBAC3C,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAC3C,gBAAA,IAAI,IAAI,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;AACrB,gBAAA,OAAO,IAAI;;;QAEjB,OAAO,CAAC,EAAE;AACR,YAAA,OAAO,KAA0B;;AAErC,QAAA,IAAI;AACA,YAAA,IAAI,MAAM,GAAG,IAAI,MAAM,CAAC,4BAA4B,CAAC;YACrD,IAAI,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;YAC/B,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAC3C,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAC3C,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAC3C,YAAA,IAAI,IAAI,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;AACnC,YAAA,OAAO,IAAI;;QACb,OAAO,CAAC,EAAE;AACR,YAAA,OAAO,KAA0B;;;IAGlC,OAAO,oBAAoB,CAC9B,QAAgB,EAChB,MAAyB,GAAA,cAAc,CAAC,KAAK,EAAA;QAE7C,IAAI,IAAI,GAAG,cAAc,CAAC,oBAAoB,CAAC,QAAQ,CAAC;AACxD,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,EAAE;AACpB,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC;AAClC,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;QAC9C,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC;AAC7B,QAAA,IAAI,OAAO,GAA6B;AACpC,YAAA,oBAAoB,EAAE,CAAC;AACvB,YAAA,qBAAqB,EAAE,CAAC;SAC3B;QACD,IAAI,YAAY,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,OAAO,CAAC;QACrD,IAAI,GAAG,GAAG,EAAE;AACZ;;;;;;;;;;;;;;AAcA;AACA,QAAA,IAAI,MAAM,KAAK,cAAc,CAAC,KAAK,EAAE;YACjC,GAAG;AACC,gBAAA,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;oBACtB,GAAG;AACH,oBAAA,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;oBACtB,GAAG;AACH,oBAAA,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;;aACvB;AACH,YAAA,IAAI,CAAC,GAAG,CAAC,EAAE;AACP,gBAAA,GAAG,IAAI,CAAC,GAAG,GAAG;;AAElB,YAAA,IAAI,CAAC,GAAG,CAAC,EAAE;AACP,gBAAA,GAAG,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG;;AAExB,YAAA,IAAI,CAAC,GAAG,CAAC,EAAE;AACP,gBAAA,GAAG,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG;;AAExB,YAAA,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE;;AAEpB,QAAA,OAAO,GAAG;;AAEjB;;MC1FY,kBAAkB,CAAA;AAC3B,IAAA,SAAS,CACL,KAAa,EACb,IAAI,GAAG;QACH,MAAM,EAAE,cAAc,CAAC,GAAG;AAC7B,KAAA,EAAA;QAED,OAAO,cAAc,CAAC,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;;+GAPzD,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAlB,kBAAkB,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,gBAAA,EAAA,CAAA,CAAA;;4FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAJ9B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,gBAAgB;AACtB,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;;;MCCY,UAAU,CAAA;AACnB,IAAA,IACI,IAAI,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK;;IAEjC,IAAI,IAAI,CAAC,KAAwD,EAAA;AAC7D,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;;AAMhC,IAAA,IACI,IAAI,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK;;IAEjC,IAAI,IAAI,CAAC,KAAe,EAAA;AACpB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;;AAIhC;;;;;;;;AAQG;AACH,IAAA,IACI,YAAY,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK;;IAEzC,IAAI,YAAY,CAAC,KAAK,EAAA;AAClB,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC;;AAIxC,IAAA,WAAA,GAAA;QA/BmB,IAAW,CAAA,WAAA,GAAG,IAAI,eAAe,CAElD,IAAI,CAAC,CAAC;AASW,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,eAAe,CAAW,IAAI,CAAC;AAkBjD,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC;;+GArC1D,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAV,UAAU,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAV,UAAU,EAAA,UAAA,EAAA,CAAA;kBADtB;wDAGO,IAAI,EAAA,CAAA;sBADP;gBAYG,IAAI,EAAA,CAAA;sBADP;gBAmBG,YAAY,EAAA,CAAA;sBADf;;;MCrCQ,qBAAqB,CAAA;AAAlC,IAAA,WAAA,GAAA;QACI,IAAS,CAAA,SAAA,GAAwB,KAAK;AACtC,QAAA,IAAA,CAAA,aAAa,GAAkB,aAAa,CAAC,SAAS;QACtD,IAAY,CAAA,YAAA,GAAG,KAAK;QACpB,IAAc,CAAA,cAAA,GAAG,IAAI;;AACxB;IACW;AAAZ,CAAA,UAAY,aAAa,EAAA;AACrB,IAAA,aAAA,CAAA,aAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAa;AACb,IAAA,aAAA,CAAA,aAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAa;AACb,IAAA,aAAA,CAAA,aAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAa;AACb,IAAA,aAAA,CAAA,aAAA,CAAA,YAAA,CAAA,GAAA,EAAA,CAAA,GAAA,YAAe;AACf,IAAA,aAAA,CAAA,aAAA,CAAA,YAAA,CAAA,GAAA,EAAA,CAAA,GAAA,YAAe;AACf,IAAA,aAAA,CAAA,aAAA,CAAA,YAAA,CAAA,GAAA,EAAA,CAAA,GAAA,YAAe;IACf,aAAW,CAAA,aAAA,CAAA,UAAA,CAAA,GAAA,IAAI,cAAA;AACnB,CAAC,EARW,aAAa,KAAb,aAAa,GAQxB,EAAA,CAAA,CAAA;;MCJY,oBAAoB,CAAA;aACL,IAAc,CAAA,cAAA,GAAG,gBAAH,CAAoB;AAE1D,IAAA,WAAA,CAAoB,OAA8B,EAAA;QAA9B,IAAO,CAAA,OAAA,GAAP,OAAO;;IAE3B,MAAM,GAAG,CAAC,qBAAqD,EAAA;AAC3D,QAAA,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE;AACvE,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,qBAAqB;aAC9C,MAAM,CACH,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC;;AAER,QAAA,aAAqB,CAAC,GAAG,CAAC,KAAK,KAAK;aAE5C,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;YAC1B,GAAG,CAAC,oBAAoB,CAAC,cAAc,GAAG,GAAG,CAAC,GAAG,KAAK;AACtD,YAAA,OAAO,GAAG;SACb,EAAE,EAA4B,CAAC;QACpC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YAChC,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC;;;AAS7C,IAAA,OAAO,CACH,SAAmB,EAAA;AAEnB,QAAA,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;AAC/B,YAAA,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC;;AACjC,aAAA,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;AACjC,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;;aACnC;AACH,YAAA,OAAO,IAAI,CAAC,UAAU,EAAE;;;AAIxB,IAAA,aAAa,CACjB,GAAM,EAAA;AAEN,QAAA,MAAM,aAAa,GAAG,IAAI,qBAAqB,EAAE;AACjD,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,cAAc,GAAG,GAAG,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;;AAGtF,IAAA,eAAe,CACnB,IAAS,EAAA;AAET,QAAA,MAAM,aAAa,GAAG,IAAI,qBAAqB,EAAE;QACjD,OAAO,aAAa,CAChB,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAI;YACrB,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAC3B,oBAAoB,CAAC,cAAc,GAAG,GAAG,EACzC,aAAa,CAAC,GAAG,CAAC,CACrB;AACD,YAAA,OAAO,GAAG;AACd,SAAC,EAAE,EAAsF,CAAC,CAC7F;;IAGG,UAAU,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,eAAe,CACvB,MAAM,CAAC,IAAI,CAAC,IAAI,qBAAqB,EAAE,CAAuC,CACjF;;+GAhEI,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA1C,EAAA,CAAA,qBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cAFjB,MAAM,EAAA,CAAA,CAAA;;4FAET,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA;;AAqED;;;;AAIG;AACH,SAAS,aAAa,CAAuB,OAE5C,EAAA;AACG,IAAA,OAAO;AACF,SAAA,aAAa,CACV,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,KACrC,MAA2B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CACxE;SAEJ,IAAI,CACD,GAAG,CAAC,CAAC,OAAO,KACR,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAI;AACpC,QAAA,GAAG,CAAC,GAAQ,CAAC,GAAG,MAAM;AACtB,QAAA,OAAO,GAAG;AACd,KAAC,EAAE,EAAO,CAAC,CACd,CACJ;AACT;;ACxFM,MAAO,2BAA4B,SAAQ,UAAU,CAAA;AAChD,IAAA,SAAA,IAAA,CAAA,cAAc,GAAG;AACpB,QAAA,IAAI,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;AAClC,QAAA,IAAI,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;AACtC,KAHoB,CAGnB;IAIF,WAAoB,CAAA,aAAmC,EAAS,UAA6B,EAAA;AACzF,QAAA,KAAK,EAAE;QADS,IAAa,CAAA,aAAA,GAAb,aAAa;QAA+B,IAAU,CAAA,UAAA,GAAV,UAAU;QAEtE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,gBAAgB,CAAC;;+GAV9D,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA2C,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,2GCZxC,kwDAgDA,EAAA,MAAA,EAAA,CAAA,+EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,aAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAlB,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDpCa,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBANvC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,cAGvB,KAAK,EAAA,QAAA,EAAA,kwDAAA,EAAA,MAAA,EAAA,CAAA,+EAAA,CAAA,EAAA;;;AECf,MAAO,mBAAoB,SAAQ,UAAU,CAAA;AACxC,IAAA,SAAA,IAAA,CAAA,cAAc,GAAG;AACpB,QAAA,IAAI,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;AACtC,QAAA,IAAI,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC;AAC5C,QAAA,IAAI,QAAQ,CAAC,MAAM,EAAE,wBAAwB,CAAC;AAC9C,QAAA,IAAI,QAAQ,CAAC,MAAM,EAAE,+BAA+B,CAAC;AACrD,QAAA,IAAI,QAAQ,CAAC,MAAM,EAAE,iCAAiC,CAAC;AACvD,QAAA,IAAI,QAAQ,CAAC,MAAM,EAAE,2BAA2B,CAAC;AACjD,QAAA,IAAI,QAAQ,CAAC,MAAM,EAAE,0BAA0B,CAAC;AACnD,KARoB,CAQnB;IAEF,OAAO,cAAc,CAAC,IAAqB,EAAE,EAAU,EAAE,QAAgB,IAAI,EAAA;AACzE,QAAA,MAAM,MAAM,GAAI,IAAY,CAAC,MAAM;AACnC,QAAA,IAAI,EAAE,KAAK,SAAS,EAAE;AAClB,YAAA,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM;iBAC3B,GAAG,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC7C,iBAAA,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;;AAEhC,QAAA,OAAO,CAAC,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC;;AAEnD,IAAA,OAAO,QAAQ,CAAC,IAAqB,EAAE,EAAU,EAAA;AAC7C,QAAA,MAAM,MAAM,GAAI,IAAY,CAAC,MAAM;QACnC,IAAI,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,CAAC;AAC1C,QAAA,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE;YACxC,MAAM,EAAE,GAAG,EAAE;AACb,YAAA,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;AACnB,gBAAA,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,gBAAA,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE;AAC3B,oBAAA,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;yBACzC,GAAG,CACA,CAAC,KAAK,KACF,CAAC,KAAK,IAAI,GAAG;wBACb,IAAI;wBACJ,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;yBAEtE,IAAI,CAAC,IAAI;AACT,yBAAA,IAAI,EAAE;;;;AAIvB,QAAA,OAAO,MAAM;;IAGjB,KAAK,GAAA;AACD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;;IAGvC,QAAQ,GAAA;AACJ,QAAA,OAAO,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAuB,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;;+GAhD1E,mBAAmB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,kGCXhC,oBACA,EAAA,MAAA,EAAA,CAAA,+BAAA,CAAA,EAAA,CAAA,CAAA;;4FDUa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAN/B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,cAGd,KAAK,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,+BAAA,CAAA,EAAA;;;AEMf,MAAO,wBAAyB,SAAQ,UAAU,CAAA;AAC7C,IAAA,SAAA,IAAA,CAAA,cAAc,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAwB/E,IAAA,WAAA,CACY,aAAmC,EACnC,UAA6B,EAC7B,SAA2B,EAAA;AAEnC,QAAA,KAAK,EAAE;QAJC,IAAa,CAAA,aAAA,GAAb,aAAa;QACb,IAAU,CAAA,UAAA,GAAV,UAAU;QACV,IAAS,CAAA,SAAA,GAAT,SAAS;QAzBZ,IAAY,CAAA,YAAA,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CACzC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAY,CAAC,CAAC,CAC9D;QAEQ,IAAY,CAAA,YAAA,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CACzC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAY,CAAC,CAAC,CACpE;QAEQ,IAAQ,CAAA,QAAA,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CACtF,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,YAAY,CAAC,KAAI;YACtC,IAAI,YAAY,EAAE;gBACd,OAAO,IAAI,CAAC;qBACP,GAAG,CAAC,4BAA4B;AAChC,qBAAA,IAAI,CAAC,GAAG,CAAC,CAAC,gBAAgB,KAAK,CAAA,EAAG,gBAAgB,CAAK,EAAA,EAAA,WAAW,CAAE,CAAA,CAAC,CAAC;;iBACxE;AACH,gBAAA,OAAO,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC;;SAElC,CAAC,CACL;QAEQ,IAAe,CAAA,eAAA,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,gBAAgB,CAAC;;+GAvB9D,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAgB,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAApC,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,wGCfrC,gWAQA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAiB,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDOa,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBALpC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,cAEpB,KAAK,EAAA,QAAA,EAAA,gWAAA,EAAA;;;MELR,cAAc,CAAA;IAGvB,WAAoB,CAAA,UAA6B,EAAU,UAA0B,EAAA;QAAjE,IAAU,CAAA,UAAA,GAAV,UAAU;QAA6B,IAAU,CAAA,UAAA,GAAV,UAAU;QACjE,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,SAAS,CAAC,CAAC,cAAc,KAAI;AAC7D,YAAA,IAAI,CAAC,cAAc,GAAG,cAAc;AACxC,SAAC,CAAC;;IAGN,SAAS,CACL,iBAAyB,EACzB,IAEC,EAAA;AAED,QAAA,MAAM,MAAM,GAAG,iBAAiB,GAAG,iBAAiB,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,MAAM;AAC/E,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;AACtB,YAAA,IAAI,MAAM,KAAK,MAAM,EAAE;;;AAGnB,gBAAA,OAAO,IAAI,CAAC,cAAc,EAAE,KAAK,IAAI,MAAM;;AAE/C,YAAA,OAAO,MAAM;;AACV,aAAA,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE;YAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YAC/B,OAAO,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,GAAG,CAAC;;AAC1C,aAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;AAChC,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;;AAE9B,QAAA,OAAO,IAAI;;AAGP,IAAA,MAAM,CAAC,GAAW,EAAA;QACtB,IAAI,CAAC,GAAG,EAAE;AACN,YAAA,OAAO,GAAG;;AAEd,QAAA,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE;QAC3D,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;QAC7B,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;QAC7B,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;AAC7B,QAAA,OAAO,GAAG;;+GAxCL,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAU,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAd,cAAc,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,eAAA,EAAA,CAAA,CAAA;;4FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAJ1B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,eAAe;AACrB,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;;;ACSK,MAAO,kCAAmC,SAAQ,UAAU,CAAA;AACvD,IAAA,SAAA,IAAA,CAAA,cAAc,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,0BAA0B,CAAC,CAAC,CAAC;AAkCzF,IAAA,WAAA,CACY,aAAmC,EAEnC,UAA0B,EAC1B,SAA2B,EAC3B,cAA8B,EAAA;AAEtC,QAAA,KAAK,EAAE;QANC,IAAa,CAAA,aAAA,GAAb,aAAa;QAEb,IAAU,CAAA,UAAA,GAAV,UAAU;QACV,IAAS,CAAA,SAAA,GAAT,SAAS;QACT,IAAc,CAAA,cAAA,GAAd,cAAc;QArCjB,IAAkB,CAAA,kBAAA,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAC/C,GAAG,CAAC,CAAC,IAAI,KAAM,IAAa,CAAC,UAAU,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,CACzE;AAEQ,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI;;;AAGzC,QAAA,SAAS,CAAC,CAAC,iBAAiB,KACxB,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,iBAAiB,CAAC,CAAC,CAC3E,EACD,SAAS,CAAC,CAAC,iBAAiB,KACxB,IAAI,CAAC,SAAS,CAAC,GAAG,CACd,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EACnF,EAAE,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAC/E,CACJ,CACJ;QAEQ,IAAQ,CAAA,QAAA,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAC/E,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,YAAY,CAAC,KAAI;YAC/B,IAAI,YAAY,EAAE;gBACd,OAAO,IAAI,CAAC;qBACP,GAAG,CAAC,4BAA4B;AAChC,qBAAA,IAAI,CAAC,GAAG,CAAC,CAAC,iBAAiB,KAAK,CAAA,EAAG,iBAAiB,CAAK,EAAA,EAAA,IAAI,CAAE,CAAA,CAAC,CAAC;;iBACnE;AACH,gBAAA,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;SAE3B,CAAC,CACL;QAEQ,IAAe,CAAA,eAAA,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,gBAAgB,CAAC;;+GAjC9D,kCAAkC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAQ,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAG,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAtC,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAiB,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kCAAkC,EAHhC,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,SAAA,EAAA,CAAC,cAAc,CAAC,iDCb/B,kYAWA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAP,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA0B,cAAA,EAAA,IAAA,EAAA,eAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDKa,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAN9C,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iCAAiC,EAEhC,SAAA,EAAA,CAAC,cAAc,CAAC,cACf,KAAK,EAAA,QAAA,EAAA,kYAAA,EAAA;;;AEHf,MAAO,yBAA0B,SAAQ,UAAU,CAAA;AAC9C,IAAA,SAAA,IAAA,CAAA,cAAc,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAC,CAAC;AAEjF,IAAA,WAAA,CAAoB,UAA6B,EAAA;AAC7C,QAAA,KAAK,EAAE;QADS,IAAU,CAAA,UAAA,GAAV,UAAU;;IAI9B,iBAAiB,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAY,CAAC,CAAC,OAAO;;+GAR9D,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAX,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,yGCXtC,6JAGA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA5B,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDQa,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBALrC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,cAErB,KAAK,EAAA,QAAA,EAAA,6JAAA,EAAA;;;AEOf,MAAO,iBAAkB,SAAQ,UAAU,CAAA;AACtC,IAAA,SAAA,IAAA,CAAA,cAAc,GAAG;AACpB,QAAA,IAAI,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;AACzB,QAAA,IAAI,QAAQ,CAAC,eAAe,EAAE,GAAG,CAAC;AAClC,QAAA,IAAI,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC;AAC/B,QAAA,IAAI,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC;AACxB,QAAA,IAAI,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;AAC1B,QAAA,IAAI,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;AAC5B,KAPoB,CAOnB;AAKF,IAAA,WAAA,CACY,UAA6B,EAC7B,GAAe,EACf,iBAAoC,EAAA;AAE5C,QAAA,KAAK,EAAE;QAJC,IAAU,CAAA,UAAA,GAAV,UAAU;QACV,IAAG,CAAA,GAAA,GAAH,GAAG;QACH,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;AAPpB,QAAA,IAAA,CAAA,WAAW,GAAG,aAAa,CAAC,WAAW;AACvC,QAAA,IAAA,CAAA,YAAY,GAAG,aAAa,CAAC,iBAAiB,EAAE;AACzD,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,eAAe,CAAS,IAAI,CAAC;;AAUhD,IAAA,MAAM,QAAQ,GAAA;QACV,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC;aACrC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;aAC9C,SAAS,CAAC,CAAC,WAAW,KAAM,GAAC,CAAC;;IAEvC,OAAO,GAAA;QACH,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,eAAe,EAAE;YACpC,OAAQ,IAAI,CAAC,IAAqB,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI;;aACrD,IAAK,IAAI,CAAC,IAAa,CAAC,IAAI,KAAK,aAAa,CAAC,4BAA4B,EAAE;YAChF,OAAQ,IAAI,CAAC,IAAa,CAAC,SAAS,EAAE,QAAQ,IAAI,IAAI,CAAC,IAAI;;QAE/D,OAAO,IAAI,CAAC,IAAI;;AAGpB,IAAA,sBAAsB,CAAC,SAAiB,EAAA;AACpC,QAAA,QACI;AACI,YAAA,aAAa,CAAC,mBAAmB;AACjC,YAAA,aAAa,CAAC,kBAAkB;AAChC,YAAA,aAAa,CAAC,eAAe;SAChC,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;;IAGnC,iBAAiB,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAY,CAAC,CAAC,OAAO;;AAGvE,IAAA,OAAO,CAAC,IAAc,EAAA;QAClB,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,eAAe,GAAG,eAAe,GAAG,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI;;IAGvF,gBAAgB,GAAA;AACZ,QAAA,QACK,IAAI,CAAC,IAAqB,CAAC,aAAa;YACzC,aAAa,CAAC,6BAA6B;;AAI3C,IAAA,MAAM,iBAAiB,GAAA;AAC3B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAU;AACnC,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAClB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B;;QAEJ,IAAI,CAAC,YAAY,CAAC,IAAI,CAClB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC,EAAE,MAAM,GAAG;AACvD,cAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI;AAC5D,cAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CACpD;AAED,QAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC;AAClB,aAAA,cAAc,CAAC;YACZ,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,IAAIwC,EAAS,CAAC,eAAe;AACvD,YAAA,WAAW,EAAE,IAAI,CAAC,WAAW,IAAIA,EAAS,CAAC,OAAO;SACrD;AACA,aAAA,SAAS,EAAE;AAChB,QAAA,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC;AAC5E,QAAA,IAAI,MAAM,EAAE,MAAM,EAAE;YAChB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AACvC,kBAAE,GAAG,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO;iBACvE,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC;YAC3B,IAAI,IAAI,EAAE;AACN,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;;;+GAnF1C,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAZ,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,gGChB9B,y1OA4LA,EAAA,MAAA,EAAA,CAAA,yDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAa,0BAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,cAAA,EAAA,IAAA,EAAA,YAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,cAAA,EAAA,IAAA,EAAA,YAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,iBAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,IAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAApC,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAqC,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,cAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,IAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FD5Ka,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAN7B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,cAGZ,KAAK,EAAA,QAAA,EAAA,y1OAAA,EAAA,MAAA,EAAA,CAAA,yDAAA,CAAA,EAAA;;;AENrB,IAAY,cAQX;AARD,CAAA,UAAY,cAAc,EAAA;AACtB,IAAA,cAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC;AACjC,IAAA,cAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,cAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,cAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,cAAA,CAAA,uBAAA,CAAA,GAAA,uBAA+C;AAC/C,IAAA,cAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,cAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AAC7B,CAAC,EARW,cAAc,KAAd,cAAc,GAQzB,EAAA,CAAA,CAAA;AACM,MAAM,sBAAsB,GAE/B;AACA,IAAA,cAAc,EAAE,2BAA2B;AAC3C,IAAA,WAAW,EAAE,wBAAwB;AACrC,IAAA,qBAAqB,EAAE,kCAAkC;AACzD,IAAA,YAAY,EAAE,yBAAyB;AACvC,IAAA,UAAU,EAAE,mBAAmB;AAC/B,IAAA,MAAM,EAAE,IAAI;;AAGZ,IAAA,IAAI,EAAE,iBAAiB;CAC1B;;ICpBW;AAAZ,CAAA,UAAY,sBAAsB,EAAA;AAC9B,IAAA,sBAAA,CAAA,sBAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO;AACP,IAAA,sBAAA,CAAA,sBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACR,CAAC,EAHW,sBAAsB,KAAtB,sBAAsB,GAGjC,EAAA,CAAA,CAAA;AAkBD;;AAEG;MAIU,wBAAwB,CAAA;AAYjC,IAAA,WAAA,GAAA;QAXQ,IAAY,CAAA,YAAA,GAAsB,EAAE;AACpC,QAAA,IAAA,CAAA,kBAAkB,GAAsD;AAC5E,YAAA,CAAC,KAAK,CAAC,aAAa,GAAG,iBAAiB;AACxC,YAAA,CAAC,KAAK,CAAC,MAAM,GAAG,iBAAiB;AACjC,YAAA,OAAO,EAAE,iBAAiB;SAC7B;AACO,QAAA,IAAA,CAAA,oBAAoB,GAA4C;YACpE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;SAC7B;;IAKM,qBAAqB,CAAC,KAAsB,EAAE,QAA4B,EAAA;AAC7E,QAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG,QAAQ;;AAEtC,IAAA,qBAAqB,CAAC,KAAY,EAAA;AACrC,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC;;IAExE,uBAAuB,CAAC,KAAsB,EAAE,IAAc,EAAA;AACjE,QAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,GAAG,IAAI;;AAEpC,IAAA,uBAAuB,CAAC,KAAY,EAAA;AACvC,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC;;AAE5E,IAAA,iBAAiB,CAAC,IAAU,EAAA;AAC/B,QAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;AAC7B,YAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC;;AAE5C,QAAA,OAAO,EAAE;;AAGb;;;AAGG;AACI,IAAA,yBAAyB,CAAC,QAAgC,EAAA;AAC7D,QAAA,IAAI,CAAC,sBAAsB,GAAG,QAAQ;;IAEnC,sBAAsB,CAAC,IAAiB,EAAE,IAAU,EAAA;AACvD,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAC3B,CAAC,CAAC,KACE,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;AACpB,YAAA,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;AACpB,aAAC,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAC9C,GAAG,CAAC,CAAC,EAAE,WAAW;;AAGvB;;;;AAIG;AACH,IAAA,4BAA4B,CAAC,eAAgC,EAAA;AACzD,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC;;+GAvDlC,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,cAFrB,MAAM,EAAA,CAAA,CAAA;;4FAET,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA;;;ACxBK,MAAO,iBAAkB,SAAQ,UAAU,CAAA;AAO7C,IAAA,WAAA,CAAoB,wBAAkD,EAAA;AAClE,QAAA,KAAK,EAAE;QADS,IAAwB,CAAA,wBAAA,GAAxB,wBAAwB;AAN5C;;AAEG;QACM,IAAS,CAAA,SAAA,GAAG,KAAK;;AAO1B,IAAA,WAAW,CAAC,OAAsB,EAAA;QAC9B,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE;AACxB,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,wBAAwB,CAAC,sBAAsB,CACtE,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,IAAY,CACpB;AACD,YAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,IAAI,CACzD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KACJ,CAAC,EAAE,cAAc,EAAE,MAAM,CACrB,CAAC,CAAC,KACE,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI;iBACxB,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CACpD,CAAC,MAAM,GAAG,CAAC,CACnB,GAAG,CAAC,CAAmB;AACxB,YAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACrB,gBAAA,IAAI,CAAC,UAAU,GAAG,cAAc,CAAC,MAAM;;AACpC,iBAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AACvB,gBAAA,IAAI,CAAC,CAAC,cAAc,CAAC,UAAU,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AAC7E,oBAAA,IAAI,CAAC,UAAU,GAAG,cAAc,CAAC,IAAI;;;;;+GA7B5C,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,wBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,yJCX9B,63CAoDA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAnD,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAoD,2BAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,wBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kCAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAZ,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAa,iBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,mBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDzCa,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAL7B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,cAEZ,KAAK,EAAA,QAAA,EAAA,63CAAA,EAAA;0FAMR,SAAS,EAAA,CAAA;sBAAjB;;;MELQ,gBAAgB,CAAA;AAKzB,IAAA,WAAA,GAAA;+GALS,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,uOCV7B,w9BA+BA,EAAA,MAAA,EAAA,CAAA,u6BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA/D,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAyD,iBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAhE,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAiE,YAAA,EAAA,IAAA,EAAA,YAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA7C,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDrBa,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAN5B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,cAGX,KAAK,EAAA,QAAA,EAAA,w9BAAA,EAAA,MAAA,EAAA,CAAA,u6BAAA,CAAA,EAAA;wDAGe,iBAAiB,EAAA,CAAA;sBAAhD,YAAY;uBAAC,gBAAgB;gBACrB,IAAI,EAAA,CAAA;sBAAZ;gBACQ,OAAO,EAAA,CAAA;sBAAf;;;MEmBQ,eAAe,CAAA;+GAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,iBAdpB,iBAAiB;YACjB,2BAA2B;YAC3B,wBAAwB;YACxB,kCAAkC;YAClC,yBAAyB;YACzB,iBAAiB;YACjB,mBAAmB;YACnB,cAAc;YACd,kBAAkB;AAClB,YAAA,gBAAgB,CAEV,EAAA,OAAA,EAAA,CAAA,YAAY,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,eAAe,CAAA,EAAA,OAAA,EAAA,CACzE,iBAAiB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,gBAAgB,CAAA,EAAA,CAAA,CAAA;AAE3E,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,YAHd,YAAY,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,eAAe,CAAA,EAAA,CAAA,CAAA;;4FAG1E,eAAe,EAAA,UAAA,EAAA,CAAA;kBAhB3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,YAAY,EAAE;wBACV,iBAAiB;wBACjB,2BAA2B;wBAC3B,wBAAwB;wBACxB,kCAAkC;wBAClC,yBAAyB;wBACzB,iBAAiB;wBACjB,mBAAmB;wBACnB,cAAc;wBACd,kBAAkB;wBAClB,gBAAgB;AACnB,qBAAA;oBACD,OAAO,EAAE,CAAC,YAAY,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,eAAe,CAAC;oBACpF,OAAO,EAAE,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,gBAAgB,CAAC;AACxF,iBAAA;;;MCpBY,oBAAoB,CAAA;+GAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,0ICXjC,wTAMA,EAAA,MAAA,EAAA,CAAA,2cAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAApB,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAkE,iBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA1D,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,cAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAR,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAiE,YAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDKa,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBANhC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,cAGf,KAAK,EAAA,QAAA,EAAA,wTAAA,EAAA,MAAA,EAAA,CAAA,2cAAA,CAAA,EAAA;8BAGR,IAAI,EAAA,CAAA;sBAAZ;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,IAAI,EAAA,CAAA;sBAAZ;;;MEdiB,UAAU,CAAA;AAG/B;;ACMD;AACA,MAAM,2BAA2B,GAAG;IAChC,IAAI;IACJ,aAAa;IACb,gBAAgB;IAChB,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,MAAM;CACT;MAGY,mBAAmB,CAAA;IAI5B,WACY,CAAA,MAAqB,EACrB,QAAkB;;AAEN,IAAA,KAAqB,EACA,UAAsB,EACvD,SAA2B,EAC3B,GAAmB,EACP,UAAsB,EAAA;QAPlC,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAQ,CAAA,QAAA,GAAR,QAAQ;QAEI,IAAK,CAAA,KAAA,GAAL,KAAK;QACgB,IAAU,CAAA,UAAA,GAAV,UAAU;QAC3C,IAAS,CAAA,SAAA,GAAT,SAAS;QACT,IAAG,CAAA,GAAA,GAAH,GAAG;QACS,IAAU,CAAA,UAAA,GAAV,UAAU;AAV1B,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC;AAY/C,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAClB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,EAAE;;AAEtC,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE;AACjC,YAAA,IAAI,CAAC;iBACA,GAAG,CAAC,qBAAqB;kBACxB,OAAO,CAAC,UAAU;AACnB,iBAAA,SAAS,CAAC,CAAC,IAAI,KAAI;;AAEhB,gBAAA,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,KAAK,IAAI,EAAE;AACnE,oBAAA,IAAI,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,MAAK;AAC7B,wBAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;AACnB,qBAAC,CAAC;;AAEV,aAAC,CAAC;;;AAId;;;;;AAKG;IACH,UAAU,GAAA;AACN,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAC5B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,oBAAoB,EAAE,2BAA2B,CAAC,CACrE;AACD,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,YAAY,EAAE,EAAE;YACjC,OAAO,mBAAmB,CAAC,IAAI,CAC3B,SAAS,CAAC,CAAC,kBAA4B,KACnC,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAC7C,EACD,GAAG,CAAC,MAAM,SAAiB,CAAC,CAC/B;;QAEL;AACK,aAAA,IAAI,CACD,GAAG,CAAC,CAAC,kBAAkB,KAAI;YACvB,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AACtC,gBAAA,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;;AAEvC,SAAC,CAAC,EACF,GAAG,CAAC,CAAC,kBAA4B,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;;AAElF,QAAA,SAAS,CAAC,CAAC,kBAA4B,KACnC,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,CACjD,KAAK,EAAE,EACP,GAAG,CAAC,CAAC,MAAM,KAAI;YACX,IAAI,gBAAgB,GAAW,IAAI;AACnC,YAAA,IAAI,kBAAkB,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;AACnD,gBAAA,gBAAgB,GAAG,MAAM,EAAE,MAAM;;AAC9B,iBAAA,IAAI,MAAM,EAAE,MAAM,EAAE;AACvB,gBAAA,IAAI,MAAM,EAAE,MAAM,KAAK,IAAI,EAAE;AACzB,oBAAA,MAAM,UAAU,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,KAC3C,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CACtB;AACD,oBAAA,IAAI,UAAU,EAAE,MAAM,KAAK,CAAC,EAAE;AAC1B,wBAAA,gBAAgB,GAAG,UAAU,CAAC,CAAC,CAAC;;yBAC7B;AACH,wBAAA,OAAO,CAAC,IAAI,CACR,0BAA0B,MAAM,CAAC,MAAM,CAAI,EAAA,CAAA;4BACvC,sCAAsC;AACtC,4BAAA,kBAAkB,CACzB;;;qBAEF;AACH,oBAAA,OAAO,CAAC,IAAI,CACR,0BAA0B,MAAM,CAAC,MAAM,CAAI,EAAA,CAAA;wBACvC,sEAAsE;AACtE,wBAAA,kBAAkB,CACzB;;;YAGT,OAAO;gBACH,kBAAkB;gBAClB,gBAAgB;aACnB;SACJ,CAAC,CACL,CACJ;;QAED,SAAS,CAAC,CAAC,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,KAAI;YACnD,IAAI,gBAAgB,EAAE;AAClB,gBAAA,OAAOE,EAAY,CAAC;oBAChB,kBAAkB;oBAClB,gBAAgB;AAChB,oBAAA,SAAS,EAAE,KAAK;AACnB,iBAAA,CAAC;;iBACC;AACH,gBAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE;oBAClC,OAAO,CAAC,IAAI,CACR,sDAAsD;AAClD,wBAAA,kBAAkB,CAAC,CAAC,CAAC,CAC5B;AACD,oBAAA,OAAO,EAAE,CAAC;wBACN,kBAAkB;wBAClB,gBAAgB;AAChB,wBAAA,SAAS,EAAE,KAAK;AACnB,qBAAA,CAAC;;gBAEN,OAAO,IAAI,CAAC;qBACP,GAAG,CAAC,qBAAqB;qBACzB,GAAG,CAAC,UAAU;AACd,qBAAA,IAAI,CACD,GAAG,CAAC,CAAC,eAAe,KAAI;oBACpB,IAAI,SAAS,GAAG,KAAK;oBACrB,IAAI,kBAAkB,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE;wBACpD,gBAAgB,GAAG,eAAe;wBAClC,SAAS,GAAG,IAAI;;oBAEpB,OAAO;wBACH,kBAAkB;wBAClB,gBAAgB;wBAChB,SAAS;qBACZ;iBACJ,CAAC,CACL;;AAEb,SAAC,CAAC;;;QAGF,GAAG,CAAC,CAAC,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,SAAS,EAAE,KAAI;YACxD,IAAI,gBAAgB,EAAE;gBAClB,OAAO;oBACH,kBAAkB;oBAClB,gBAAgB;oBAChB,SAAS;iBACZ;;AACE,iBAAA;;AAEH,YAAA,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,CAAC,EACpE;gBACE,OAAO;oBACH,kBAAkB;AAClB,oBAAA,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE;oBACjD,SAAS;iBACZ;;iBACE;;gBAEH,OAAO;oBACH,kBAAkB;AAClB,oBAAA,gBAAgB,EAAE,kBAAkB,CAAC,CAAC,CAAC;oBACvC,SAAS;iBACZ;;AAET,SAAC,CAAC;;QAEF,GAAG,CAAC,CAAC,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,SAAS,EAAE,KAAI;YACxD,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE;gBAC/C,KAAK,IAAI,CAAC;qBACL,GAAG,CAAC,qBAAqB;AACzB,qBAAA,GAAG,CAAC,UAAU,EAAE,gBAAgB,CAAC;;AAE1C,YAAA,IAAI,gBAAgB,KAAK,MAAM,EAAE;AAC7B,gBAAA,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC;;AAClC,iBAAA,IAAI,gBAAgB,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE;AAC5C,gBAAA,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC;;iBAChC;gBACH,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;;AAE5D,SAAC,CAAC;;;AAGF,QAAA,SAAS,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAI;;AAE/B,YAAA,IAAI,CAAC,QAAQ,GAAG,gBAAgB;AAChC,YAAA,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAY,CAAC,CAAC;AAC7E,SAAC,CAAC;aAEL,SAAS,CAAC,MAAK;;AAEZ,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;AAClC,SAAC,CAAC;AACN,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE;;AAGrB,IAAA,MAAM,iBAAiB,CAAC,kBAAkB,GAAG,2BAA2B,EAAA;AAC5E,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CAAC;AAC3C,QAAA,IAAI,QAAQ,GAAG,kBAAkB,CAAC,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC;AACvC,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC5B,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;QACxB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;QAChD,IAAI,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;YACxC,QAAQ,GAAG,IAAI;;AAEnB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;QACxB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,MAAK;AACxC,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;AAClC,SAAC,CAAC;;;AAGF,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE;;IAG7B,WAAW,GAAA;QACP,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAC3B,KAAK,CAAC,CAAC,cAAc,KAAK,cAAc,CAAC,EACzC,GAAG,CAAC,MAAM,SAAiB,CAAC,CAC/B;;;IAIL,WAAW,GAAA;QACP,OAAO,IAAI,CAAC,QAAQ;;IAGxB,cAAc,GAAA;AACV,QAAA,OAAO,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;;IAGnC,SAAS,GAAA;QACL,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;;AAnOzC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,uHASJ,WAAW,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA3D,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAA4D,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAT1B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cADN,MAAM,EAAA,CAAA,CAAA;;4FACnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;0BASzB;;0BACA;;0BAAY,MAAM;2BAAC,WAAW;;0BAG9B;;;MCrBI,iBAAiB,CAAA;IAC1B,WAAoB,CAAA,SAA2B,EAAU,YAAiC,EAAA;QAAtE,IAAS,CAAA,SAAA,GAAT,SAAS;QAA4B,IAAY,CAAA,YAAA,GAAZ,YAAY;;IAErE,SAAS,CAAC,IAAc,EAAE,IAAI,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,EAAA;AACpD,QAAA,MAAM,OAAO,GAAG;AACZ,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,UAAU,EAAE,MAAM;AAClB,YAAA,aAAa,EAAE,eAAe;AAC9B,YAAA,GAAG,EAAE,KAAK;AACV,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,IAAI,EAAE,MAAM;SACf;AACD,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACZ,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;;aACvB;AACH,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,IAAI,CACvC,SAAS,CAAC,SAAiB,CAAC,EAC5BC,OAAK,CAAC,CAAC,CAAC,EACR,SAAS,CAAC,MACN,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE;gBACrD,QAAQ,EAAE,IAAI,CAAC,QAAQ;aAC1B,CAAC,CACL,CACJ;;;+GAvBA,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAjB,iBAAiB,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,CAAA,CAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAJ7B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,iBAAiB;AACvB,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;;;ICSW;AAAZ,CAAA,UAAY,sBAAsB,EAAA;AAC9B,IAAA,sBAAA,CAAA,sBAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK;AACL,IAAA,sBAAA,CAAA,sBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,sBAAA,CAAA,sBAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAS;AACb,CAAC,EAJW,sBAAsB,KAAtB,sBAAsB,GAIjC,EAAA,CAAA,CAAA;IAEW;AAAZ,CAAA,UAAY,eAAe,EAAA;;AAEvB,IAAA,eAAA,CAAA,eAAA,CAAA,mBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,mBAAiB;;AAEjB,IAAA,eAAA,CAAA,eAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO;AACP,IAAA,eAAA,CAAA,eAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACR,CAAC,EANW,eAAe,KAAf,eAAe,GAM1B,EAAA,CAAA,CAAA;IA6BW;AAAZ,CAAA,UAAY,WAAW,EAAA;AACnB,IAAA,WAAA,CAAA,WAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO;AACP,IAAA,WAAA,CAAA,WAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,WAAA,CAAA,WAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAQ;AACR,IAAA,WAAA,CAAA,WAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAQ;AACR,IAAA,WAAA,CAAA,WAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO;AACP,IAAA,WAAA,CAAA,WAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAQ;AACZ,CAAC,EAPW,WAAW,KAAX,WAAW,GAOtB,EAAA,CAAA,CAAA;;MChEY,QAAQ,CAAA;AAArB,IAAA,WAAA,GAAA;AAQY,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,eAAe,CAAgB,IAAI,CAAC;AAS/C,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC;QAMtC,IAAkB,CAAA,kBAAA,GAAG,KAAK;AAE1B,QAAA,IAAA,CAAA,aAAa,GAA8B;aAC9C,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;AACzC,aAAA,IAAI,CACD,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,QAAQ,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,EACjD,oBAAoB,EAAE,CACzB;;;AA5BL,IAAA,IAAI,GAAG,GAAA;AACH,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK;;IAE1B,IAAI,GAAG,CAAC,KAAoB,EAAA;QACxB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC;;;AAKjC,IAAA,IAAI,QAAQ,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK;;IAE/B,IAAI,QAAQ,CAAC,KAAc,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;;;AAK9B,IAAA,IAAI,iBAAiB,GAAA;QACjB,OAAO,IAAI,CAAC,kBAAkB;;AAWlC,IAAA,OAAO,CAAC,UAA2B,EAAA;QAC/B,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAC5D,GAAG,CAAC,CAAC,CAAC,YAAY,EAAE,YAAY,CAAC,KAAI;YACjC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,YAAY,CAAC;AAC7D,YAAA,IAAI,CAAC,kBAAkB,GAAG,SAAS;YACnC,IAAI,SAAS,EAAE;gBACX,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC;;iBACvC;AACH,gBAAA,OAAO,YAAY;;SAE1B,CAAC,CACL;;IAGG,UAAU,CAAC,YAA2B,EAAE,YAAiB,EAAA;AAC7D,QAAA,OAAO,YAAY,IAAI,YAAY,EAAE,MAAM,GAAG,YAAY;;AAEjE;;MC3CY,wBAAwB,CAAA;AAQjC,IAAA,WAAA,GAAA;AAJU,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAQ;AAErC,QAAA,IAAA,CAAA,6BAA6B,GAAG,IAAI,YAAY,EAAW;;AAIrE,IAAA,MAAM,CAAC,KAAgB,EAAA;AACnB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACjB,MAAM,EAAE,KAAK,CAAC,IAAI;YAClB,SAAS,EAAE,KAAK,CAAC,SAAS,GAAG,KAAK,GAAG,MAAM;AAC9C,SAAA,CAAC;;+GAdG,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,sTCVrC,k8BA8BA,EAAA,MAAA,EAAA,CAAA,sGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAtE,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA+B,aAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAiC,qBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAnD,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,OAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,SAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA6C,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDpBa,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBANpC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,cAGpB,KAAK,EAAA,QAAA,EAAA,k8BAAA,EAAA,MAAA,EAAA,CAAA,sGAAA,CAAA,EAAA;wDAGR,MAAM,EAAA,CAAA;sBAAd;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,OAAO,EAAA,CAAA;sBAAf;gBACS,UAAU,EAAA,CAAA;sBAAnB;gBACQ,uBAAuB,EAAA,CAAA;sBAA/B;gBACS,6BAA6B,EAAA,CAAA;sBAAtC;;;AEAC,MAAO,cAAkD,SAAQ,UAAa,CAAA;AAMhF,IAAA,IAAI,SAAS,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK;;IAEtC,IAAI,SAAS,CAAC,SAAiC,EAAA;AAC3C,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC;;AAIzC,IAAA,IAAI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,SAAS;;IAEzB,IAAI,QAAQ,CAAC,KAAyB,EAAA;AAClC,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;QACtB,IAAI,CAAC,iBAAiB,EAAE;;AAK5B,IAAA,WAAA,CAAY,cAAmB,EAAE,EAAA;AAC7B,QAAA,KAAK,EAAE;AAxBD,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,eAAe,CAAM,EAAE,CAAC;AAC3C,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,eAAe,CAAa,IAAI,CAAC;;;AAGpD,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,eAAe,CAAyB,KAAK,CAAC;QAO5E,IAAiB,CAAA,iBAAA,GAAG,KAAK;AASf,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,eAAe,CAAM,EAAE,CAAC;AAK/C,QAAA,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;;IAG7B,OAAO,GAAA;AACH,QAAA,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;YAC9B,IAAI,CAAC,iBAAiB,EAAE;;QAE5B,OAAO,IAAI,CAAC,UAAU;;IAGlB,iBAAiB,GAAA;AACrB,QAAA,IAAI,CAAC,sBAAsB,EAAE,WAAW,EAAE;AAC1C,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;AAC9B,iBAAA,OAAO,CAAC,IAAI,CAAC,UAAU;AACvB,iBAAA,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;aACjD;YACH,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,IAAI,KACzD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAC7B;;;IAIT,iBAAiB,GAAA;QACb,OAAO,IAAI,CAAC,WAAW;;AAG3B,IAAA,UAAU;AAEV,IAAA,OAAO,CAAC,IAAS,EAAE,UAAA,GAAyB,IAAI,EAAA;AAC5C,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;;AAGlC,IAAA,UAAU,CAAC,UAAe,EAAE,QAAA,GAA+B,OAAO,EAAA;AAC9D,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;AACzB,QAAA,IAAI,QAAQ,KAAK,OAAO,EAAE;AACtB,YAAA,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;;aAC3B;AACH,YAAA,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC;;AAElC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;;AAG9B;;AAEG;AACH,IAAA,UAAU,CAAC,QAAa,EAAA;AACpB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CACjC,CAAC,KAAK,KACF,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,YAAY,CAAE,CAAU,CAAC,GAAG,EAAG,KAAc,CAAC,GAAG,CAAC,CAAC,CACvF;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC9E,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;AAC7B,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;AACxB,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK;YACzC,IAAI,CAAC,aAAa,CAAC;AACf,gBAAA,KAAK,EAAE,UAAU,CAAC,KAAK,GAAG,WAAW,CAAC,MAAM;gBAC5C,IAAI,EAAE,UAAU,CAAC,IAAI;AACrB,gBAAA,KAAK,EAAE,UAAU,CAAC,KAAK,GAAG,WAAW,CAAC,MAAM;AAC/C,aAAA,CAAC;;;AAIV,IAAA,aAAa,CAAC,UAAsB,EAAA;AAChC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;;IAGrC,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;;IAGpB,OAAO,GAAA;AACH,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;AACzB,YAAA,OAAO,SAAS;;AAEpB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM;;;;IAKvE,OAAO,GAAA;AACH,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK;;IAGhC,OAAO,GAAA;QACH,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,KAAK,CAAC;;IAG9C,QAAQ,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;cACzB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,IAAI,CAAC;cACnE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;;IAG5C,aAAa,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM;;AAG3D;;;;AAIG;IACH,OAAO,GAAA;AACH,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;;AAEnE;;ACnJD;;AAEG;AACG,MAAO,yBAA0B,SAAQ,cAAmB,CAAA;AAAG;;ACS/D,MAAgB,oBAGpB,SAAQ,cAAiB,CAAA;AAgB1B;;ACFD;;;AAGG;AACG,MAAO,oBAAwB,SAAQ,cAAiB,CAAA;AAA9D,IAAA,WAAA,GAAA;;AAEI;;AAEG;AACM,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAC3CH,OAAK,CAAC,CAAC,CAAC,EACR,GAAG,CAAC,CAAC,CAAC,KAAI;YACN,OAAO,EAAE,GAAG,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE;SAClD,CAAC,CACL;;IACD,QAAQ,CAAC,GAAG,MAAW,EAAA;AACnB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,KAAK,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;;AAG7B,IAAA,MAAM,CAAC,KAAQ,EAAA;AACX,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;;IAGvB,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QACxB,KAAK,CAAC,KAAK,EAAE;;IAGjB,MAAM,CAAC,GAAG,MAAW,EAAA;AACjB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;;AAG3B;;;AAGG;IACH,IAAI,WAAW,CAAC,KAAkB,EAAA;AAC9B,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;;AAEhC;MAGY,kBAAkB,CAAA;AAQ3B,IAAA,IAAI,UAAU,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK;;IAEjC,IAAI,UAAU,CAAC,KAAwB,EAAA;AACnC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;;AAEhC,IAAA,IAAI,kBAAkB,GAAA;QAClB,OAAO,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC;;AAQ/D,IAAA,IAAI,OAAO,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO;;IAE7C,IAAI,OAAO,CAAC,OAAmB,EAAA;AAC3B,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;AAOzD,IAAA,IAAI,OAAO,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK;;IAE9B,IAAI,OAAO,CAAC,OAAoB,EAAA;AAC5B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;;IAI/B,IAAI,aAAa,CAAC,aAA2B,EAAA;AACzC,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC;;AAGjD,IAAA,IAAI,IAAI,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK;;IAEjC,IAAI,IAAI,CAAC,KAAqB,EAAA;AAC1B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;;AAQhC,IAAA,IAAI,UAAU,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK;;IAEjC,IAAI,UAAU,CAAC,KAAiB,EAAA;AAC5B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;;AAOhC,IAAA,WAAA,CACY,SAAoB,EACpB,KAAY,EACZ,aAAuC,EAAA;QAFvC,IAAS,CAAA,SAAA,GAAT,SAAS;QACT,IAAK,CAAA,KAAA,GAAL,KAAK;QACL,IAAa,CAAA,aAAA,GAAb,aAAa;AAtEhB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,eAAe,CAA2B,IAAI,CAAC;AAe1E;;;;AAIG;AACH,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,eAAe,CAA6C,IAAI,CAAC;QAStF,IAAS,CAAA,SAAA,GAAG,IAAI,oBAAoB,CAAI,IAAI,EAAE,EAAE,CAAC;AAEjD,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,eAAe,CAAc,IAAI,CAAC;AAQjD,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,eAAe,CAAe,EAAE,CAAC;AAI5D,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,eAAe,CAAiB,KAAK,CAAC,CAAC;AAYhD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,eAAe,CAAoB,IAAI,CAAC;AAUnE,QAAA,IAAA,CAAA,mBAAmB,GAA2B,MAAM,CAAC,KAAK,CAAC;;AAQ3D,IAAA,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,EAA6C,EAAA;QACnE,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE;YAChC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;;AAChC,aAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;AACvB,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC;;aACjC;AACH,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;;;IAIjC,iBAAiB,CAAC,IAAO,EAAE,OAAgB,EAAA;AACvC,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE;AAChC,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;;QAGhC,IAAI,OAAO,KAAK,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AAC7C,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;;;IAInC,eAAe,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;AACtB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;;aACnB;YACH,IAAI,CAAC,SAAS,EAAE;;;AAIxB,IAAA,QAAQ,CAAC,MAA2B,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,kBAAkB,KAAK,iBAAiB,EAAE;AAC/C,YAAA,OAAO,KAAK;;QAEhB,IAAI,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,qBAAqB,EAAE;AACnD,YAAA,OAAO,KAAK;;;AAGhB,QAAA,IAAI,IAAI,CAAC,UAAU,YAAY,oBAAoB,EAAE;AACjD,YAAA,OAAQ,IAAI,CAAC,UAAmC,CAAC,QAAQ,EAAE;;aACxD;AACH,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE;AAC3B,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;oBAChB,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,MAAM;AACxC,oBAAA,KAAK,EAAE,KAAK;AACf,iBAAA,CAAC;AACF,gBAAA,OAAO,IAAI;;iBACR;AACH,gBAAA,OAAO,KAAK;;;;IAKhB,SAAS,GAAA;AACb,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;;IAG/C,aAAa,GAAA;QACjB,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;;AAG7E,IAAA,iBAAiB,CAAC,IAAO,EAAA;AAC7B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;AACzD,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC;AACnC,aAAA,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;aACrD,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,CAAC;QAClC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC,GAAG,SAAS,EAAE;YAC3C,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC,EAAE,EAAE;AACjE,gBAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;;;aAEpD,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC,GAAG,SAAS,EAAE;AAClD,YAAA,KAAK,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC,EAAE,CAAC,EAAE,EAAE;AAC5D,gBAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;;;;AAK/D,IAAA,YAAY,CAAC,QAA2B,EAAE,IAAO,EAAE,SAAqB,IAAI,EAAA;AACxE,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACzC,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AACtB,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;;;QAG/B,UAAU,CAAC,MAAK;YACZ,QAAQ,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,QAA6B;YACvE,QAAQ,CAAC,WAAW,EAAE;AACtB,YAAA,IAAI,QAAQ,CAAC,eAAe,EAAE,EAAE;gBAC5B,IAAI,MAAM,EAAE;AACR,oBAAA,MAAM,EAAE;;;iBAET;AACH,gBAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,CAAC;;AAEhD,SAAC,CAAC;;+GAtKG,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA7C,SAAA,EAAA,EAAA,EAAA,KAAA,EAAAiD,KAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,wBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAlB,kBAAkB,EAAA,CAAA,CAAA;;4FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B;;;MCxEY,2BAA2B,CAAA;AA0BpC,IAAA,WAAA,GAAA;+GA1BS,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAA3B,2BAA2B,EAAA,CAAA,CAAA;;4FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBADvC;;;MCSY,sBAAsB,CAAA;AAQ/B,IAAA,WAAA,GAAA;QANS,IAAoB,CAAA,oBAAA,GAAG,KAAK;AAC3B,QAAA,IAAA,CAAA,0BAA0B,GAAG,IAAI,YAAY,EAAW;AAGxD,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAc;;AAIxD,IAAA,iBAAiB,CAAC,KAA4B,EAAA;AAC1C,QAAA,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,YAAY,CAAC;QACtE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;;AAGzC,IAAA,mBAAmB,CAAC,WAAmB,EAAA;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;AACxC,QAAA,MAAM,CAAC,OAAO,GAAG,CAAC,MAAM,CAAC,OAAO;QAChC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;;+GAlBhC,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,qRCXnC,i+BA6BA,EAAA,MAAA,EAAA,CAAA,6dAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA1E,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,qEAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,EAAA,8BAAA,EAAA,qCAAA,EAAA,4BAAA,EAAA,4BAAA,EAAA,0BAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,8BAAA,EAAA,kCAAA,EAAA,+BAAA,EAAA,mCAAA,EAAA,mCAAA,EAAA,yBAAA,EAAA,iCAAA,EAAA,sCAAA,EAAA,gCAAA,EAAA,iCAAA,EAAA,uCAAA,EAAA,kCAAA,EAAA,yBAAA,EAAA,wCAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,4BAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,+BAAA,EAAA,2BAAA,EAAA,6BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAqC,aAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAzB,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,WAAA,EAAA,IAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAApB,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA2E,iBAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDlBa,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBANlC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,cAGjB,KAAK,EAAA,QAAA,EAAA,i+BAAA,EAAA,MAAA,EAAA,CAAA,6dAAA,CAAA,EAAA;wDAGR,MAAM,EAAA,CAAA;sBAAd;gBACQ,oBAAoB,EAAA,CAAA;sBAA5B;gBACS,0BAA0B,EAAA,CAAA;sBAAnC;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBACS,aAAa,EAAA,CAAA;sBAAtB;;;MEjBQ,WAAW,CAAA;IACb,OAAO,aAAa,CAAC,KAAa,EAAA;AACrC,QAAA,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;YACzB,IAAI,MAAM,GAAG,oDAAoD,CAAC,IAAI,CAAC,KAAK,CAAC;AAC7E,YAAA,OAAO,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;;QAE1F,IAAI,MAAM,GAAG,2CAA2C,CAAC,IAAI,CAAC,KAAK,CAAC;AACpE,QAAA,OAAO;AACH,cAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;cAC1E,IAAI;;AAGd;;;;;AAKG;IACI,OAAO,kBAAkB,CAAC,KAAa,EAAA;QAC1C,MAAM,GAAG,GAAG,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC;QAC5C,IAAI,GAAG,EAAE;;YAEL,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;gBACpB,CAAC,IAAI,GAAG;gBACR,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,KAAK,EAAE,GAAG,CAAC;AACxE,aAAC,CAAC;YACF,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM;;QAExD,OAAO,CAAC,CAAC;;AAGL,IAAA,OAAO,QAAQ,CAAC,EAAU,EAAE,EAAU,EAAA;;AAE1C,QAAA,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,KAAK,EAAE,GAAG,IAAI,CAAC;;AAE1E;;;AAGG;IACI,OAAO,iBAAiB,CAAC,KAAa,EAAA;QACzC,IAAI,CAAC,KAAK,EAAE;YACR,OAAO,cAAc,CAAC,KAAK;;QAE/B,MAAM,UAAU,GAAG,WAAW,CAAC,kBAAkB,CAAC,KAAK,CAAC;QACxD,MAAM,UAAU,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC;QACtD,MAAM,UAAU,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC;AACtD,QAAA,OAAO,UAAU,GAAG,UAAU,GAAG,cAAc,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK;;IAGzE,OAAO,QAAQ,CAAC,GAAa,EAAA;AAChC,QAAA,QACI,GAAG;AACH,YAAA,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAClC,YAAA,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAClC,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;;IAGnC,OAAO,cAAc,CAAC,CAAS,EAAA;QAClC,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;AAChE,QAAA,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;;IAErC,OAAO,QAAQ,CAAC,GAAa,EAAA;QAChC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG;QACtB,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG;QACtB,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG;AACtB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC7B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;;AAE7B,QAAA,IAAI,CAAC,EACD,CAAC,EACD,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC;AACvB,QAAA,IAAI,GAAG,KAAK,GAAG,EAAE;AACb,YAAA,CAAC,GAAG,CAAC,GAAG,CAAC;;aACN;AACH,YAAA,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG;YACnB,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC;YAEnD,QAAQ,GAAG;AACP,gBAAA,KAAK,CAAC;oBACF,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACjC;AACJ,gBAAA,KAAK,CAAC;oBACF,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;oBACnB;AACJ,gBAAA,KAAK,CAAC;oBACF,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;oBACnB;;YAER,CAAC,IAAI,CAAC;;AAEV,QAAA,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;;AAEZ,IAAA,OAAO,OAAO,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAA;QAClD,IAAI,CAAC,GAAG,CAAC;YAAE,CAAC,IAAI,CAAC;QACjB,IAAI,CAAC,GAAG,CAAC;YAAE,CAAC,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;AACzC,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AAAE,YAAA,OAAO,CAAC;AACvB,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AAAE,YAAA,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AACnD,QAAA,OAAO,CAAC;;IAEL,OAAO,QAAQ,CAAC,GAAa,EAAA;AAChC,QAAA,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AAChB,QAAA,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AAChB,QAAA,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;;AAEhB,QAAA,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;AACX,QAAA,IAAI,CAAC,KAAK,CAAC,EAAE;AACT,YAAA,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;;aACV;YACH,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;AAC/C,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;AAEnB,YAAA,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACxC,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAChC,YAAA,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;;AAG5C,QAAA,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC;;AAEzC;IACW;AAAZ,CAAA,UAAY,cAAc,EAAA;AACtB,IAAA,cAAA,CAAA,cAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK;AACL,IAAA,cAAA,CAAA,cAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK;AACT,CAAC,EAHW,cAAc,KAAd,cAAc,GAGzB,EAAA,CAAA,CAAA;;MCzGY,mBAAmB,CAAA;IAK5B,WACW,CAAA,KAAY,EACZ,aAA4B,EAC3B,UAA0B,EAC3B,qBAA4C,EAC5C,iBAAoC,EACpC,aAA8B,EAAA;QAL9B,IAAK,CAAA,KAAA,GAAL,KAAK;QACL,IAAa,CAAA,aAAA,GAAb,aAAa;QACZ,IAAU,CAAA,UAAA,GAAV,UAAU;QACX,IAAqB,CAAA,qBAAA,GAArB,qBAAqB;QACrB,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;QACjB,IAAa,CAAA,aAAA,GAAb,aAAa;;AAGxB,IAAA,MAAM,QAAQ,GAAA;AACV,QAAA,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE;AAClE,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC;AAC7D,QAAA,IAAI,CAAC,aAAa,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,iBAAiB,CACnE,aAAa,CAAC,wBAAwB,CACzC;;AAGL,IAAA,MAAM,UAAU,GAAA;QACZ,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QAC3C,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE;AACxB,YAAA,IAAI;gBACA,MAAM,IAAI,CAAC;AACN,qBAAA,YAAY,CAAC;AACV,oBAAA,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI;AAC9B,oBAAA,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;iBACzB;AACA,qBAAA,SAAS,EAAE;gBAChB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,2BAA2B,EAAE,EAAE,IAAI,EAAE,CAAC;gBACvD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE;;YAClC,OAAO,CAAC,EAAE;AACR,gBAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;;;aAEpB;AACH,YAAA,IAAI;gBACA,MAAM,IAAI,CAAC;AACN,qBAAA,iBAAiB,CAAC;AACf,oBAAA,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI;AAC9B,oBAAA,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AACtB,oBAAA,MAAM,EAAE,CAAC;AACT,oBAAA,IAAI,EAAE,IAAI;iBACb;AACA,qBAAA,SAAS,EAAE;gBAChB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE,CAAC;gBAChD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE;;YAClC,OAAO,CAAC,EAAE;AACR,gBAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;;;AAG3B,QAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE;;IAG1C,gBAAgB,GAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACnB,YAAA,OAAO,CAAC;;QAEZ,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AACvB,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI;;AAEhC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK;;IAGxE,MAAM,SAAS,CAAC,MAAc,EAAA;QAC1B,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3C,QAAA,IAAI;YACA,MAAM,IAAI,CAAC;AACN,iBAAA,iBAAiB,CAAC;AACf,gBAAA,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI;AAC9B,gBAAA,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;gBACtB,MAAM;AACN,gBAAA,IAAI,EAAE,IAAI;aACb;AACA,iBAAA,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;YACxD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC;YAC/D,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM;AAC9B,YAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE;;QACxC,OAAO,CAAC,EAAE;AACR,YAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;;;AAI3B,IAAA,MAAM,YAAY,GAAA;QACd,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3C,QAAA,IAAI;YACA,MAAM,IAAI,CAAC;AACN,iBAAA,YAAY,CAAC;AACV,gBAAA,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI;AAC9B,gBAAA,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;aACzB;AACA,iBAAA,SAAS,EAAE;YAChB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,6BAA6B,EAAE,EAAE,IAAI,EAAE,CAAC;YACzD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE;AAChC,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI;YACrD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;AACzB,YAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE;;QACxC,OAAO,CAAC,EAAE;AACR,YAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;;;AAI3B,IAAA,cAAc,CAAC,IAAU,EAAA;QACrB,OAAO,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,IAAI,CAAC;;+GA5G5C,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAApC,KAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,qGCnBhC,i4DAqDA,EAAA,MAAA,EAAA,CAAA,2rBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAM,aAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAzB,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAb,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDlCa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAN/B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,cAGd,KAAK,EAAA,QAAA,EAAA,i4DAAA,EAAA,MAAA,EAAA,CAAA,2rBAAA,CAAA,EAAA;kOAGR,IAAI,EAAA,CAAA;sBAAZ;;;AEjBL;;;;;AAKG;MAOU,qBAAqB,CAAA;AAW9B,IAAA,WAAA,GAAA;QATS,IAAa,CAAA,aAAA,GAAG,KAAK;;QAM9B,IAAU,CAAA,UAAA,GAAY,KAAK;QAC3B,IAAkB,CAAA,kBAAA,GAAY,KAAK;;AAInC,IAAA,WAAW,CAAC,KAAY,EAAA;QACpB,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE;AACzC,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;AAC9C,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;YACtB,UAAU,CAAC,MAAK;gBACZ,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;;AAEpD,gBAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAClC,aAAC,CAAC;;;IAIF,UAAU,CAAC,KAAuB,EAAE,MAAyB,EAAA;AACjE,QAAA,IAAI,KAAK,GAAG,KAAK,CAAC,YAAY;AAC9B,QAAA,IAAI,MAAM,GAAG,KAAK,CAAC,aAAa;AAChC,QAAA,MAAM,CAAC,KAAK,GAAG,KAAK;AACpB,QAAA,MAAM,CAAC,MAAM,GAAG,MAAM;AACtB,QAAA,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC;;+GA9BxD,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,gUCflC,+uBAmBA,EAAA,MAAA,EAAA,CAAA,6cAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAd,EAAA,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,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA4E,aAAA,EAAA,IAAA,EAAA,aAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDJa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,cAGhB,KAAK,EAAA,QAAA,EAAA,+uBAAA,EAAA,MAAA,EAAA,CAAA,6cAAA,CAAA,EAAA;wDAGR,IAAI,EAAA,CAAA;sBAAZ;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBAEmB,QAAQ,EAAA,CAAA;sBAA3B,SAAS;uBAAC,OAAO;gBACG,SAAS,EAAA,CAAA;sBAA7B,SAAS;uBAAC,QAAQ;;;AEfvB;;;;AAIG;MAOU,sBAAsB,CAAA;IAK/B,WACW,CAAA,UAA6B,EAC5B,wBAAkD,EAAA;QADnD,IAAU,CAAA,UAAA,GAAV,UAAU;QACT,IAAwB,CAAA,wBAAA,GAAxB,wBAAwB;;IAGpC,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;;IAGnE,iBAAiB,GAAA;QACb,OAAO,IAAI,CAAC,wBAAwB,CAAC,sBAAsB,CACvD,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,sBAAsB,CAAC,IAAI,EAAE,EACnD,IAAI,CAAC,IAAI,CACZ;;+GAlBI,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAzC,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA0C,wBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,8HChBnC,8iCA+BA,EAAA,MAAA,EAAA,CAAA,2RAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAhC,aAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAiC,YAAA,EAAA,IAAA,EAAA,YAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAhE,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDfa,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBANlC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,cAGlB,KAAK,EAAA,QAAA,EAAA,8iCAAA,EAAA,MAAA,EAAA,CAAA,2RAAA,CAAA,EAAA;uHAGR,IAAI,EAAA,CAAA;sBAAZ;;;AEdL;AACA;AACA;AACA;MAmBa,qBAAqB,CAAA;AAjBlC,IAAA,WAAA,GAAA;QAqBI,IAAO,CAAA,OAAA,GAAG,KAAK;QACf,IAAS,CAAA,SAAA,GAAG,KAAK;AAyBpB;IAxBG,MAAM,WAAW,CAAC,OAAsB,EAAA;AACpC,QAAA,IAAI,CAAC,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;AACjE,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;;AAGnE,IAAA,MAAM,aAAa,CAAC,UAAsB,EAAE,IAAU,EAAA;AAClD,QAAA,IAAI,UAAU,CAAC,eAAe,EAAE;YAC5B,OAAO,MAAM,UAAU,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC;;QAEnD,OAAO,UAAU,CAAC,SAAS;;AAGvB,IAAA,MAAM,aAAa,CAAC,UAAsB,EAAE,IAAU,EAAA;AAC1D,QAAA,IAAI,UAAU,CAAC,YAAY,EAAE;YACzB,OAAO,UAAU,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC;;AAE1C,QAAA,OAAO,IAAI;;AAGf,IAAA,MAAM,KAAK,CAAC,MAAkB,EAAE,IAAU,EAAA;QACtC,IAAI,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;AACxC,YAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;;;+GA3BpB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EAfpB,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA;;;;;;;;;;;;AAYT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAiE,aAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAxE,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAiB,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAGQ,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAjBjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,QAAQ,EAAE;;;;;;;;;;;;AAYT,IAAA,CAAA;AACD,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;8BAEY,MAAM,EAAA,CAAA;sBAAd;gBACQ,IAAI,EAAA,CAAA;sBAAZ;;;MChBQ,wBAAwB,CAAA;AAMjC,IAAA,IACI,IAAI,GAAA;QACJ,OAAO,IAAI,CAAC,KAAK;;IAErB,IAAI,IAAI,CAAC,IAAU,EAAA;AACf,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;QACjB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;;AAO1D,IAAA,WAAA,CAEW,cAAwC,EAAA;QAAxC,IAAc,CAAA,cAAA,GAAd,cAAc;QApBhB,IAAW,CAAA,WAAA,GAAG,WAAW;QAElC,IAAgB,CAAA,gBAAA,GAAG,CAAC;QAcpB,IAAe,CAAA,eAAA,GAAyB,SAAS;;AAOzC,IAAA,mBAAmB,CAAC,IAAU,EAAA;AAClC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,GAAG,0BAA0B,CAAC,GAAG,CAAC,CAAC;QAChE,IAAI,KAAK,EAAE;AACP,YAAA,OAAO,QAAQ,CAAC,KAAK,CAAC;;aACnB;AACH,YAAA,OAAO,CAAC;;;+GA7BP,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAuD,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,yNCXrC,okCAuCA,EAAA,MAAA,EAAA,CAAA,s4CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAzE,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA+B,aAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAb,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAL,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FD5Ba,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBANpC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,cAGpB,KAAK,EAAA,QAAA,EAAA,okCAAA,EAAA,MAAA,EAAA,CAAA,s4CAAA,CAAA,EAAA;;0BAsBZ;yCAbD,IAAI,EAAA,CAAA;sBADP;gBAWD,eAAe,EAAA,CAAA;sBAFd,WAAW;uBAAC,sBAAsB;;sBAClC;;;MEGQ,wBAAwB,CAAA;AAcjC,IAAA,WAAA,CACW,cAAqC,EACrC,UAA6B,EAC7B,cAA8B,EAC9B,aAA4B,EAC5B,qBAA4C,EAC5C,gBAA6C,EAC7C,wBAAkD,EACrC,KAAY,EAAA;QAPzB,IAAc,CAAA,cAAA,GAAd,cAAc;QACd,IAAU,CAAA,UAAA,GAAV,UAAU;QACV,IAAc,CAAA,cAAA,GAAd,cAAc;QACd,IAAa,CAAA,aAAA,GAAb,aAAa;QACb,IAAqB,CAAA,qBAAA,GAArB,qBAAqB;QACrB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QAChB,IAAwB,CAAA,wBAAA,GAAxB,wBAAwB;QACX,IAAK,CAAA,KAAA,GAAL,KAAK;QArBpB,IAAe,CAAA,eAAA,GAAG,eAAe;QACjC,IAAM,CAAA,MAAA,GAAG,MAAM;QACf,IAAW,CAAA,WAAA,GAAG,WAAW;QACzB,IAAsB,CAAA,sBAAA,GAAG,sBAAsB;AAQxD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC;;AAaxC,IAAA,WAAW,CAAC,OAAsB,EAAA;AAC9B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC;;IAGpF,YAAY,GAAA;AACR,QAAA,OAAO,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,cAAc,CAAC;AAChF,cAAE;cACA,MAAM;;IAEhB,aAAa,GAAA;AACT,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC;AAC1D,QAAA,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC;QACnD,IAAI,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;AAClD,YAAA,OAAO,MAAM;;;AAGjB,QAAA,OAAO,EAAE;;;IAIb,eAAe,CAAC,KAAyB,EAAE,IAAO,EAAA;QAC9C,KAAK,CAAC,eAAe,EAAE;QACvB,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;;;YAGhB;;AAEJ,QAAA,IAAI,KAAK,YAAY,UAAU,EAAE;AAC7B,YAAA,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,KAAK;;aAC/D;YACH,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,GAC1C,KAAK,CAAC,MACT,CAAC,qBAAqB,EAAE;;QAE7B,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;;IAG5F,iBAAiB,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;;IAGhE,MAAM,QAAQ,CAAC,IAAO,EAAA;QAClB,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;;AAGzD,IAAA,MAAM,QAAQ,GAAA;AACV,QAAA,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE;AAClE,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CACjB,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,KAAK,MAAM;AACxD,aAAC,MAAM,IAAI,CAAC,qBAAqB,CAAC,iBAAiB,CAC/C,aAAa,CAAC,wBAAwB,CACzC,CAAC,CACT;;AAGL,IAAA,WAAW,CAAC,IAA4B,EAAA;AACpC,QAAA,OAAO,IAAI,CAAC,wBAAwB,CAAC,sBAAsB,CACvD;AACI,YAAA,IAAI,EAAE,MAAM;YACZ,IAAI;AACP,SAAA,EACD,IAAI,CAAC,IAAY,CACpB;;+GAxFI,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA4D,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAApC,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAApC,EAAA,CAAA,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAAyE,2BAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,kQC9BrC,szMAiLA,EAAA,MAAA,EAAA,CAAA,w1LAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAArE,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAsE,mBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,aAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,gBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,QAAA,EAAA,OAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,iBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,WAAA,EAAA,IAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAjC,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAkC,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,kBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,mBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,sBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,wBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAjF,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAkF,gBAAA,EAAA,IAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,iBAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDnJa,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBANpC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,cAGpB,KAAK,EAAA,QAAA,EAAA,szMAAA,EAAA,MAAA,EAAA,CAAA,w1LAAA,CAAA,EAAA;;0BAwBZ;yCAjBI,QAAQ,EAAA,CAAA;sBAAhB;gBAEyB,WAAW,EAAA,CAAA;sBAApC,SAAS;uBAAC,aAAa;gBAEf,IAAI,EAAA,CAAA;sBAAZ;;;MExBQ,6BAA6B,CAAA;AAKtC,IAAA,WAAA,CACW,cAAqC,EACrC,UAA6B,EAC7B,gBAA6C,EAAA;QAF7C,IAAc,CAAA,cAAA,GAAd,cAAc;QACd,IAAU,CAAA,UAAA,GAAV,UAAU;QACV,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QAPlB,IAAW,CAAA,WAAA,GAAG,WAAW;QACzB,IAAe,CAAA,eAAA,GAAG,eAAe;QACjC,IAAM,CAAA,MAAA,GAAG,MAAM;;IAQxB,aAAa,GAAA;AACT,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;AACxD,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC;QAClD,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;AACjD,YAAA,OAAO,MAAM;;AAEjB,QAAA,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;;AAG3F,IAAA,eAAe,CAAC,KAAyB,EAAA;QACrC,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;;+GAtBlB,6BAA6B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAnB,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAApC,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAwD,2BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA7B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,6BAA6B,iHCf1C,8nHAgHA,EAAA,MAAA,EAAA,CAAA,g1MAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA3E,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA4E,mBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,aAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,gBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,QAAA,EAAA,OAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,iBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDjGa,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBANzC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,4BAA4B,cAG1B,KAAK,EAAA,QAAA,EAAA,8nHAAA,EAAA,MAAA,EAAA,CAAA,g1MAAA,CAAA,EAAA;wJAMR,IAAI,EAAA,CAAA;sBAAZ;;;MENQ,iCAAiC,CAAA;AAG1C,IAAA,WAAA,CAAmB,cAAqC,EAAA;QAArC,IAAc,CAAA,cAAA,GAAd,cAAc;QAFxB,IAAsB,CAAA,sBAAA,GAAG,sBAAsB;;IAIxD,iBAAiB,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,IAAI,CAChD,GAAG,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,CACvD;;+GARI,iCAAiC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAzB,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iCAAiC,mICb9C,uzBAuBA,EAAA,MAAA,EAAA,CAAA,uzDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAzE,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA+B,aAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAb,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAlB,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAa,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FDVa,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAP7C,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gCAAgC,EAGzB,eAAA,EAAA,uBAAuB,CAAC,MAAM,cACnC,KAAK,EAAA,QAAA,EAAA,uzBAAA,EAAA,MAAA,EAAA,CAAA,uzDAAA,CAAA,EAAA;oFAIR,WAAW,EAAA,CAAA;sBAAnB;;;AEoBL,IAAI,iBAAiB,GAAa,EAAE;MASvB,4BAA4B,CAAA;IAWrC,IAA4C,OAAO,CAAC,KAA2B,EAAA;AAC3E,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;;IAE/B,IACI,SAAS,CAAC,KAA+B,EAAA;;QAEzC,UAAU,CAAC,MAAK;YACX,IAAI,CAAC,cAAc,CAAC,UAAkB,CAAC,SAAS,GAAG,KAAK;AAC7D,SAAC,CAAC;;;IAmCN,WACW,CAAA,cAAqC,EACrC,oBAA8C,EAC9C,gBAA6C,EAC7C,iBAAoC,EACpC,EAAa,EACZ,MAAc,EAAA;QALf,IAAc,CAAA,cAAA,GAAd,cAAc;QACd,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;QACpB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QAChB,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;QACjB,IAAE,CAAA,EAAA,GAAF,EAAE;QACD,IAAM,CAAA,MAAA,GAAN,MAAM;QA3DT,IAAsB,CAAA,sBAAA,GAAG,sBAAsB;QAC/C,IAAM,CAAA,MAAA,GAAG,MAAM;AACxB;;;AAGG;QACM,IAAyB,CAAA,yBAAA,GAAG,GAAG;AAExC,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC;AAkBlD,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC;AAEnB;;;;AAIG;QACH,IAAmB,CAAA,mBAAA,GAAG,KAAK;AAE3B;;;AAGG;AACH,QAAA,IAAA,CAAA,MAAM,GAAG;AACL,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,KAAK,EAAE,KAAK;SACf;AAKgB,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,eAAe,CAAgB,IAAI,CAAC;AACrE,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,QAAQ,EAAK;AAE7B,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,OAAO,EAAQ;AA4MvC,QAAA,IAAA,CAAA,YAAY,GAAG,CAAC,QAAqB,KAAK,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,WAAW,GAAG,QAAQ,CAAC;QAjM1F,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAC9C,SAAS,CAAC,CAAC,UAAU,KAAK,UAAU,EAAE,OAAO,EAAE,CAAC,CACnD;AACD,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAChD,GAAG,CAAC,CAAC,UAAU,KAAK,UAAU,EAAE,OAAO,IAAI,IAAI,CAAC,EAChD,oBAAoB,EAAE,CACzB;AACD,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAC/C,GAAG,CAAC,CAAC,UAAU,KAAK,UAAU,EAAE,MAAM,IAAI,MAAM,CAAC,EACjD,oBAAoB,EAAE,CACzB;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;YAC3E,IAAI,CAAC,iBAAiB,EAAE;AAC5B,SAAC,CAAC;AACF,QAAA,MAAM,CAAC,OAAO,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,cAAc,CAAC,mBAAmB,EAAE,CAAC,CAAC;;IAGxF,QAAQ,GAAA;QACJ,IAAI,CAAC,gBAAgB,EAAE;QACvB,IAAI,CAAC,cAAc,EAAE;QACrB,IAAI,CAAC,2BAA2B,EAAE;;IAGtC,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;AACrB,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;;AAGrB,IAAA,eAAe,CAAC,OAA6B,EAAA;QACjD,UAAU,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,GAAG,OAAO;AACpD,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAK;YAC1B,IAAI,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,KAAK,OAAO,EAAE;gBACpD,UAAU,CAAC,MAAK;AACZ,oBAAA,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,GAAG,IAAI;AACjD,iBAAC,CAAC;;AAEV,SAAC,CAAC;;IAGE,gBAAgB,GAAA;QACpB,IAAI,CAAC,cAAc,CAAC;AACf,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,UAAU,MAAM,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;AACrE,QAAA,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC;AACnF,aAAA,IAAI,CACD,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,OAAO,CAAC,KACvB,OAAO,GAAG,CAAC,IAAI,WAAW,KAAK,IAAI,GAAG,WAAW,GAAG,OAAO,GAAG,IAAI,CACrE;AAEJ,aAAA,SAAS,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;;IAG9C,cAAc,GAAA;AAClB,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,MAAM,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;;AAG9D,IAAA,YAAY,CAAC,IAAU,EAAA;QACnB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;QAC7C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;AACnD,QAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;;AAGjE,IAAA,QAAQ,CAAC,MAA2B,EAAA;;AAEhC,QAAA,IAAI,MAAM,KAAK,QAAQ,EAAE;;YAErB,MAAM,QAAQ,GAAG,QAAQ,CAAC,oBAAoB,CAAC,QAAQ,CAAC;AACxD,YAAA,IAAI,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE;gBACtD;;;QAGR,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC1D,QAAA,IAAI,aAAa,IAAI,MAAM,KAAK,QAAQ,EAAE;YACtC,IAAI,CAAC,2BAA2B,EAAE;;;IAI1C,+BAA+B,GAAA;AAC3B,QAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;QAC7D,UAAU,CAAC,MAAK;YACZ,IAAI,CAAC,gBAAgB,EAAE;AAC3B,SAAC,CAAC;;AAGN,IAAA,sBAAsB,CAAC,MAAoB,EAAA;QACvC,eAAe,CACX,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,EAAE,EACxC,MAAM,CAAC,IAAI,CAAC,IAAI,EAChB,MAAM,CAAC,SAAS,CAAC,IAAI,CACxB;;;AAGD,QAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAC1B,UAAU,CAAC,MACP,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,KAAM,IAAI,CAAC,YAAoB,CAAC,aAAa,CAAC,EAAE,CAAC,CACjF,CACJ;;IAGL,sBAAsB,GAAA;QAClB,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;QACxD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC;AACjD,QAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,GAAG,mCAAmC;;IAG1E,oBAAoB,GAAA;QAChB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC;AACjD,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;;IAGjC,iBAAiB,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE;AACpB,YAAA,OAAO,GAAG;;aACP;AACH,YAAA,OAAO,IAAI;;;IAIX,2BAA2B,GAAA;QAC/B,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,OAAO,KAAI;AAChC,YAAA,IAAI,CAAC,mBAAmB,GAAG,OAAO,GAAG,CAAC;AAC1C,SAAC,CAAC;;IAGE,gBAAgB,GAAA;QACpB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;;IAG1C,2BAA2B,GAAA;AAC/B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM;QACtC,IAAI,CAAC,QAAQ,CAAC;AACT,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,aAAA,SAAS,CAAC,CAAC,KAAkD,KAAI;AAC9D,YAAA,IAAI,KAAK,CAAC,MAAM,GAAG,SAAS,EAAE;AAC1B,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC;;AAE1D,SAAC,CAAC;;AAGF,IAAA,SAAS,CAAC,OAAoB,EAAA;AAClC,QAAA,OAAO,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC;QACtC,OAAO,CAAC,KAAK,EAAE;QACf,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;;IAG/F,iBAAiB,GAAA;AACb,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE;AACzC,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;QACzC,IAAI,CAAC,iBAAiB,EAAE;;IAGpB,cAAc,GAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE;AAC9B,YAAA,OAAO,IAAI;;AAEf,QAAA,OAAO,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa;aAC7C,gBAAgB,CAAC,uBAAuB;AACxC,aAAA,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM;;IAG1B,cAAc,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,KAAI;AACnD,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC;AAC9B,iBAAA,MAAM,CACH,IAAI,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,IAAI,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC,oCAAoC,CAAC,EAC5E,IAAI,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC,aAAa,CAAC,EACrD,IAAI,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,EAC/C,IAAI,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC,iBAAiB,CAAC,EACzD,IAAI,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC,gBAAgB,CAAC,EACxD,IAAI,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC,4BAA4B,CAAC,EACpE,IAAI,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC,mCAAmC,CAAC;iBAE9E,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC;YAC3D,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,gBAAgB,EAAE;AAClD,gBAAA,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO;AACxC;;;;;;;;;AASO;;AAEX,YAAA,OAAO,MAAM;AACjB,SAAC,CAAC;;AAKN,IAAA,cAAc,CAAC,QAAwB,EAAA;QACnC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE;YAClD,OAAO,EAAE,QAAQ,CAAC,YAAY;YAC9B,IAAI,EAAE,QAAQ,CAAC,MAAM;AACxB,SAAA,CAAC;;IAGN,cAAc,GAAA;QACV,OAAO,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAC9B,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,WAAW,CAAC,CACtE;;AAGL,IAAA,WAAW,CAAC,IAAO,EAAA;AACf,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS;AAC/C,QAAA,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;YAC5B,OAAO,SAAS,CAAC,QAAQ;;aACtB;YACH,OAAO,CAAC,IAAI,CAAC;;;AAIrB,IAAA,aAAa,CAAC,IAAO,EAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AACjD,YAAA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,EAAE;YACrC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;;AAE9C,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;;IAG1B,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;;AAGnB,IAAA,SAAS,CAAC,SAA2B,EAAA;AACzC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa;QAC3C,IAAI,OAAO,EAAE;AACT,YAAA,IAAI,SAAS,KAAK,MAAM,EAAE;AACtB,gBAAA,OAAO,OAAO,CAAC,UAAU,GAAG,CAAC;;AAC1B,iBAAA,IAAI,SAAS,KAAK,OAAO,EAAE;AAC9B;;;AAGG;AACH,gBAAA,OAAO,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,GAAG,EAAE;;;AAGlF,QAAA,OAAO,KAAK;;IAGhB,iBAAiB,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE;YAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;YACzC,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;;;AAInD,IAAA,QAAQ,CAAC,SAA2B,EAAA;;QAEhC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,UAAU;QACzD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,qBAAqB,EAAE;;AAEhE,QAAA,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC;AAC/B,YAAA,IAAI,EACA,UAAU;AACV,gBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,yBAAyB,CAAC;AACtD,qBAAC,SAAS,KAAK,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACxC,YAAA,QAAQ,EAAE,QAAQ;AACrB,SAAA,CAAC;;AAGN,IAAA,gBAAgB,CAAC,IAAO,EAAA;AACpB,QAAA,QACI,IAAI,CAAC,cAAc,CAAC,UAAU,YAAY,yBAAyB;YAClE,IAAY,CAAC,UAAU;;AAIhC,IAAA,SAAS,CAAC,IAAU,EAAA;AAChB,QAAA,QACI,IAAI,CAAC,UAAU,GAAG,aAAa,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM;YACxE,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,IAAI,CAAC;;+GAlVzC,4BAA4B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA4D,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAH,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAAuB,2BAAA,EAAA,EAAA,EAAA,KAAA,EAAAM,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA5B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,4BAA4B,kdAc1B,wBAAwB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,SAAA,EAQrB,WAAW,EAEK,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAA,UAAU,6BCpE5C,s9QAiOA,EAAA,MAAA,EAAA,CAAA,gpIAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAhF,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAb,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,4DAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA0D,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,4BAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,+BAAA,EAAA,2BAAA,EAAA,6BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,0BAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAoC,0BAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,iBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,aAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,uBAAA,EAAA,QAAA,EAAA,+DAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,EAAA,wBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,gBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAvB,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,cAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAuB,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,sBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,sBAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,4BAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,wBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,6BAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,wBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,WAAA,EAAA,SAAA,EAAA,yBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,+BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,wBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,iCAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA7F,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA8F,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FDrLa,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAPxC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,2BAA2B,EAGpB,eAAA,EAAA,uBAAuB,CAAC,MAAM,cACnC,KAAK,EAAA,QAAA,EAAA,s9QAAA,EAAA,MAAA,EAAA,CAAA,gpIAAA,CAAA,EAAA;sOAYkB,oBAAoB,EAAA,CAAA;sBAAtD,SAAS;uBAAC,sBAAsB;gBACW,OAAO,EAAA,CAAA;sBAAlD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAIlC,SAAS,EAAA,CAAA;sBADZ,SAAS;uBAAC,wBAAwB;gBAQR,cAAc,EAAA,CAAA;sBAAxC,YAAY;uBAAC,WAAW;gBACN,OAAO,EAAA,CAAA;sBAAzB,SAAS;uBAAC,MAAM;gBAC2B,QAAQ,EAAA,CAAA;sBAAnD,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;gBACjC,WAAW,EAAA,CAAA;sBAAnB;gBA2B6C,mBAAmB,EAAA,CAAA;sBAAhE,WAAW;uBAAC,+BAA+B;;;MExCnC,yBAAyB,CAAA;AAgClC,IAAA,WAAA,CACW,cAAqC,EACrC,oBAA8C,EAC7C,cAA8B,EAC9B,KAAY,EACZ,YAAiC,EACjC,iBAAoC,EACpC,iBAAoC,EACrC,EAAa,EACZ,MAAc,EACd,UAAmC,EAAA;QATpC,IAAc,CAAA,cAAA,GAAd,cAAc;QACd,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;QACnB,IAAc,CAAA,cAAA,GAAd,cAAc;QACd,IAAK,CAAA,KAAA,GAAL,KAAK;QACL,IAAY,CAAA,YAAA,GAAZ,YAAY;QACZ,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;QACjB,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;QAClB,IAAE,CAAA,EAAA,GAAF,EAAE;QACD,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAU,CAAA,UAAA,GAAV,UAAU;QAvCb,IAAe,CAAA,eAAA,GAAG,eAAe;QACjC,IAAW,CAAA,WAAA,GAAG,WAAW;QACzB,IAAsB,CAAA,sBAAA,GAAG,sBAAsB;QAC/C,IAAM,CAAA,MAAA,GAAG,MAAM;AAYxB,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC;AAC3C,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC;QAC1C,IAAoB,CAAA,oBAAA,GAAG,KAAK;QAC5B,IAAyB,CAAA,yBAAA,GAAG,KAAK;QAEjC,IAAe,CAAA,eAAA,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;QAC/B,IAAU,CAAA,UAAA,GAAG,KAAK;AAED,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,eAAe,CAAC,CAAC,CAAC;AAIvD,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,OAAO,EAAQ;AAwMvC,QAAA,IAAA,CAAA,OAAO,GAAG,CAAC,QAAqB,KAAa;YACzC,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,WAAW,GAAG,QAAQ,CAAC;AAC/D,SAAC;AA5LG,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,qBAAqB,EAAE;AACvD,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,qBAAqB,EAAE;QACvD,IAAI,CAAC,4BAA4B,EAAE;AACnC,QAAA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC;AACzB,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;aAC/C,SAAS,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;;IAGhE,eAAe,GAAA;QACX,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAK;YAC7B,IAAI,CAAC,mBAAmB,EAAE;YAC1B,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU,YAAY,oBAAoB,EAAE;gBAC/D,IAAI,CAAC,cAAc,CAAC,UAAmC,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI;;AAEtF,SAAC,CAAC;AACF,QAAA,IAAI,CAAC;aACA,IAAI,CAAC,KAAK,EAAE,EAAEpD,OAAK,CAAC,CAAC,CAAC;AACtB,aAAA,SAAS,CAAC,OAAO,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,CAAC;QAC7D,IAAI,CAAC,aAAa,CAAC;AACf,YAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAS,CAAC,CAAC;AAC/D,YAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAS,CAAC,CAAC;AAC5D,YAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAS,CAAC,CAAC;AAC/E,YAAA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAS,CAAC,CAAC;AACrE,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAS,CAAC,CAAC;SAClE;AACI,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;aAC9B,SAAS,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE;AAC1C,SAAC,CAAC;;AAGV,IAAA,WAAW,CAAC,OAAsB,EAAA;QAC9B,IAAI,CAAC,UAAU,EAAE;;IAGrB,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;AACrB,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;;AAG7B,IAAA,gBAAgB,CAAC,EAAE,KAAK,EAAE,IAAI,EAA0C,EAAA;QACpE,KAAK,CAAC,eAAe,EAAE;QACvB,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;;;YAGhB;;AAEJ,QAAA,IAAI,KAAK,YAAY,UAAU,EAAE;AAC7B,YAAA,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,KAAK;;aAC/D;YACH,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,GAC1C,KAAK,CAAC,MACT,CAAC,qBAAqB,EAAE;;QAE7B,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;;IAGpF,UAAU,GAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACX,YAAA,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM;AACpC,YAAA,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,SAA2B;AAC5D,YAAA,YAAY,EAAE,KAAK;AACtB,SAAA,CAAC;AACF;;;;;;;;;;;;;;;;;;;AAmBG;;IAGC,4BAA4B,GAAA;AAChC,QAAA,0BAA0B,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU;aACpD,IAAI,CACD,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,EACzB,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EACrD,oBAAoB,EAAE;aAEzB,SAAS,CAAC,CAAC,oBAAoB,KAC5B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAC/E;;AAGD,IAAA,uBAAuB,CAAC,UAAkB,EAAA;QAC9C,OAAO,IAAI,CAAC,GAAG,CACX,CAAC,EACD,IAAI,CAAC,KAAK;;QAEN,CAAC,UAAU,GAAG,GAAG;;YAEb,GAAG,CACV,CACJ;;IAGG,qBAAqB,GAAA;AACzB,QAAA,OAAO;AACF,aAAA,aAAa,CAAC;AACX,YAAA,IAAI,CAAC,qBAAqB;AAC1B,YAAA,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;SAClE;aACA,IAAI,CACD,GAAG,CAAC,CAAC,CAAC,oBAAoB,EAAE,OAAO,CAAC,KAAI;AACpC,YAAA,OAAO,CAAC,OAAO,IAAI,EAAE;iBAChB,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,OAAO;AACjC,iBAAA,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,KAAK,GAAG,oBAAoB,CAAC;AAC3D,SAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACjB;;IAGD,qBAAqB,GAAA;QACzB,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAChC,GAAG,CAAC,CAAC,kBAAkB,KAAI;YACvB,MAAM,OAAO,GAAG,EAAE;AAClB,YAAA,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;AAC9B,gBAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;;AAE1B,YAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;YACpB,OAAO,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC;AACpF,SAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACjB;;AAGL,IAAA,UAAU,CAAC,MAAgB,EAAA;AACvB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAC1C,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAC1D;;AAGL,IAAA,SAAS,CAAC,OAAgB,EAAA;QACtB,IAAI,OAAO,EAAE;AACT,YAAA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;;aAC9E;AACH,YAAA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,EAAE;;;IAIrC,mBAAmB,GAAA;QACvB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,IAAU,KAAI;YAC1C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;YAC7C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;AACnD,YAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;AAC7D;;;;;AAKK;AACT,SAAC,CAAC;AACF;;;;;;;;;;;;;;;;;AAiBG;;AAOP,IAAA,IAAI,CAAC,QAAwB,EAAA;QACzB,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE;YAClD,OAAO,EAAE,QAAQ,CAAC,YAAY;YAC9B,IAAI,EAAE,QAAQ,CAAC,MAAM;AACxB,SAAA,CAAC;;AAGN,IAAA,WAAW,CAAC,IAAO,EAAA;AACf,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS;AAC/C,QAAA,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;YAC5B,OAAO,SAAS,CAAC,QAAQ;;aACtB;YACH,OAAO,CAAC,IAAI,CAAC;;;AAIrB,IAAA,aAAa,CAAC,IAAO,EAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AACjD,YAAA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,EAAE;YACrC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;;AAE9C,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;;IAG1B,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;;AAG3B,IAAA,QAAQ,CAAC,MAA2B,EAAA;;AAEhC,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC;;IAGxC,MAAM,QAAQ,CAAC,IAAO,EAAA;QAClB,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;;AAGzD,IAAA,SAAS,CAAC,IAAU,EAAA;AAChB,QAAA,QACI,IAAI,CAAC,UAAU,GAAG,aAAa,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM;YACxE,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,IAAI,CAAC;;+GAlRzC,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAW,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAH,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAA6C,KAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,wHAQvB,OAAO,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACP,YAAY,EAEZ,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,iBAAiB,kKCnEhC,oxTA4QA,EAAA,MAAA,EAAA,CAAA,s/FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA/G,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA0D,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,oDAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAsD,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,4DAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,0BAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,iBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,aAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,uBAAA,EAAA,QAAA,EAAA,+DAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,EAAA,wBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,gBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,QAAA,EAAA,OAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,gBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,iBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,WAAA,EAAA,IAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,QAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,OAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,YAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,MAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAvC,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,kBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,aAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,eAAA,EAAA,OAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAwC,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,sBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,sBAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,4BAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,wBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,iCAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAjI,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAkI,YAAA,EAAA,IAAA,EAAA,YAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,iBAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FDpNa,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAPrC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAGhB,eAAA,EAAA,uBAAuB,CAAC,MAAM,cACnC,KAAK,EAAA,QAAA,EAAA,oxTAAA,EAAA,MAAA,EAAA,CAAA,s/FAAA,CAAA,EAAA;qUAUG,IAAI,EAAA,CAAA;sBAAvB,SAAS;uBAAC,OAAO;gBACO,SAAS,EAAA,CAAA;sBAAjC,SAAS;uBAAC,YAAY;gBACY,oBAAoB,EAAA,CAAA;sBAAtD,SAAS;uBAAC,sBAAsB;gBACH,QAAQ,EAAA,CAAA;sBAArC,SAAS;uBAAC,iBAAiB;gBACF,WAAW,EAAA,CAAA;sBAApC,SAAS;uBAAC,aAAa;;;AEjE5B;;;;;AAKG;MAEU,uBAAuB,CAAA;aACzB,IAA2B,CAAA,2BAAA,GAAG,mBAAH,CAAuB;;aAElD,IAA0B,CAAA,0BAAA,GAAG,kBAAH,CAAsB;aAChD,IAAiC,CAAA,iCAAA,GAAG,yBAAH,CAA6B;aAC9D,IAAoB,CAAA,oBAAA,GAAG,sBAAH,CAA0B;aAC9C,IAAuB,CAAA,uBAAA,GAAG,yBAAH,CAA6B;aAKpD,IAA0B,CAAA,0BAAA,GAAG,4BAAH,CAAgC;aAC1D,IAA6B,CAAA,6BAAA,GAAG,+BAAH,CAAmC;AAIvE,IAAA,WAAA,GAAA;QAFQ,IAAI,CAAA,IAAA,GAAQ,EAAE;;AAItB,IAAA,GAAG,CAAC,IAAY,EAAE,YAAA,GAAoB,IAAI,EAAA;QACtC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE;AACzB,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;;AAE1B,QAAA,OAAO,YAAY;;IAGvB,GAAG,CAAC,IAAY,EAAE,KAAU,EAAA;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK;;AAG3B;;AAEG;AACH,IAAA,GAAG,CAAC,IAAY,EAAE,YAAA,GAAoB,IAAI,EAAA;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC;AAC1C,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AACjB,QAAA,OAAO,KAAK;;AAGhB,IAAA,MAAM,CAAC,IAAY,EAAA;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI;;+GAvCjB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cADV,MAAM,EAAA,CAAA,CAAA;;4FACnB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACElB,SAAA,wBAAwB,CACpC,KAAoB,EACpB,SAAoC,EAAA;AAEpC,IAAA,QACI,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,OAAO;AAChC,QAAA,gBAAgB,CAAC,KAAK,EAAE,SAAS,CAAC,SAAS,CAAC;QAC5C,CAAC,SAAS,CAAC,UAAU,GAAG,KAAK,CAAC;AAEtC;AAEA,SAAS,gBAAgB,CAAC,KAAoB,EAAE,YAAwB,EAAE,EAAA;IACtE,QACI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,MAAM;QAC1C,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC,QAAQ;AAC9C,QAAA,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC;AAE3E;;ACzBA;;AAEG;MAIU,kBAAkB,CAAA;AAH/B,IAAA,WAAA,GAAA;AAII;;;;;AAKG;AACM,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAU;AAClD;;;;;;AAMG;AACM,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAU;AAClD;;;;;;AAMG;;;AAGM,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAU;AACrD;+GA1BY,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cAFf,MAAM,EAAA,CAAA,CAAA;;4FAET,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA;;;MCHqB,wBAAwB,CAAA;+GAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAxB,wBAAwB,EAAA,CAAA,CAAA;;4FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAD7C;;;MCAqB,oBAAoB,CAAA;AA4BzC;;MCWY,wBAAwB,CAAA;AAYjC,IAAA,WAAA,CACY,MAAc,EACd,KAAqB,EACrB,WAA+B,EAC/B,qBAA4C,EAC5C,KAAY,EACZ,WAAwB,EACxB,cAA8B,EAClB,wBAAkD,EAClD,oBAA0C,EAAA;QARtD,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAK,CAAA,KAAA,GAAL,KAAK;QACL,IAAW,CAAA,WAAA,GAAX,WAAW;QACX,IAAqB,CAAA,qBAAA,GAArB,qBAAqB;QACrB,IAAK,CAAA,KAAA,GAAL,KAAK;QACL,IAAW,CAAA,WAAA,GAAX,WAAW;QACX,IAAc,CAAA,cAAA,GAAd,cAAc;QACF,IAAwB,CAAA,wBAAA,GAAxB,wBAAwB;QACxB,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;AAhBpC,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,OAAO,EAAQ;AAE9B,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAAU;AAC9C,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAiB;AAChD,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAe;AAC9C,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,YAAY,EAA0B;QAapE,IAAI,CAAC,2BAA2B,EAAE;;;IAG9B,2BAA2B,GAAA;QAC/B,IAAI,CAAC,WAAW,CAAC;AACZ,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;QACpE,IAAI,CAAC,WAAW,CAAC;AACZ,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;;IAExE,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;AACrB,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;;IAG7B,MAAM,cAAc,CAChB,SAAgC,GAAA,IAAI,EACpC,IAAgD,GAAA,IAAI,EACpD,QAAA,GAA8B,IAAI,EAAA;QAElC,IAAI,CAAC,UAAU,GAAG;YACd,SAAS;YACT,IAAI;YACJ,QAAQ;SACX;QACD,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,MAAM,EAAE,aAAa,EAAE;AACvF,YAAA,MAAM,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE;;;IAI7E,OAAO,GAAA;QACH,OAAO,IAAI,CAAC,IAAI;;AAGpB,IAAA,OAAO,CAAC,IAAgB,EAAA;AACpB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,oBAAoB,EAAE,mBAAmB,CAAC,IAAI,CAAC,IAAI,IAAI;;AAG5E,IAAA,MAAM,iBAAiB,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE;AACnB,YAAA,OAAO,CAAC,IAAI,CAAC,4DAA4D,CAAC;YAC1E;;AAEJ,QAAA,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,EAAE;AACnC,YAAA,OAAO,CAAC,IAAI,CAAC,yEAAyE,CAAC;YACvF;;AAEJ,QAAA,IAAI,CAAC,aAAa,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAC;AACrE,QAAA,MAAM,IAAI,CAAC,oBAAoB,EAAE,iBAAiB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC;;AAGlF,IAAA,mBAAmB,CAAC,MAAc,EAAE,OAAA,GAAkB,IAAI,EAAA;AACtD,QAAA,OAAO,IAAI,CAAC,oBAAoB,EAAE,mBAAmB,CACjD,MAAM,EACN,OAAO,EACP,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,IAAI,CACZ;;AAGG,IAAA,iBAAiB,CAAC,OAAc,EAAA;QACpC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAM,KAAI;AAC7B,YAAA,CAAC,CAAC,OAAO,GAAG,IAAI;AAChB,YAAA,OAAO,CAAC;AACZ,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC;AACpC,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE;YACvB,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;;;IAItD,+BAA+B,GAAA;AAC3B,QAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAK;AAC/B,YAAA,IAAI,CAAC,IAAI,CAAC,6BAA6B,EAAE;gBACrC,IAAI,CAAC,6BAA6B,GAAG,SAAS,CAAC,QAAQ,EAAE,SAAS;AAC7D,qBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;AAC9B,qBAAA,SAAS,CAAC,CAAC,KAAoB,KAAK,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;;AAEjF,SAAC,CAAC;;IAGE,MAAM,mBAAmB,CAAC,KAAoB,EAAA;AAClD,QAAA,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,oBAAoB,CAAC,KAAK,CAAC,EAAE;AACnF,YAAA,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE;gBACrC,IACI,MAAM,CAAC,gBAAgB;oBACvB,wBAAwB,CAAC,KAAK,EAAE,MAAM,CAAC,gBAAgB,CAAC,EAC1D;oBACE,KAAK,CAAC,cAAc,EAAE;oBACtB,KAAK,CAAC,eAAe,EAAE;AACvB,oBAAA,IAAI,MAAM,MAAM,CAAC,eAAe,EAAE,EAAE;AAChC,wBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;;yBACzC;wBACH,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,sCAAsC,CAAC;;oBAElE;;;;;AAKhB,IAAA,aAAa,CAAC,OAAqB,EAAE,MAAc,EAAE,UAAwB,IAAI,EAAA;AAC7E,QAAA,OAAO,IAAI,CAAC,oBAAoB,EAAE,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,OAAO;;AAEnG;;;;AAIG;AACH,IAAA,eAAe,CAAC,SAA6B,EAAE,IAAA,GAAiC,IAAI,EAAA;QAChF,IAAI,IAAI,EAAE;AACN,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;;QAEzB,IAAI,SAAS,EAAE;AACX,YAAA,SAAS,CAAC,OAAO,GAAG,EAAE;;;IAI9B,SAAS,CAAC,QAAgB,EAAE,EAAA;AACxB,QAAA,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC;;+GA9IvE,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAnJ,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAoJ,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAA5I,EAAA,CAAA,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAA6I,KAAA,EAAA,EAAA,EAAA,KAAA,EAAA7I,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAA8I,wBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAxB,wBAAwB,EAAA,CAAA,CAAA;;4FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC;;0BAqBQ;;0BACA;;;MCrCI,oBAAoB,CAAA;AAU7B,IAAA,WAAA,CACW,iBAAoC,EACpC,oBAA8C,EAC9C,cAAqC,EACrC,gBAA6C,EAChC,uBAAiD,EAC7D,KAAqB,EACrB,SAA2B,EAAA;QAN5B,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;QACjB,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;QACpB,IAAc,CAAA,cAAA,GAAd,cAAc;QACd,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QACH,IAAuB,CAAA,uBAAA,GAAvB,uBAAuB;QACnC,IAAK,CAAA,KAAA,GAAL,KAAK;QACL,IAAS,CAAA,SAAA,GAAT,SAAS;QAdZ,IAAsB,CAAA,sBAAA,GAAG,sBAAsB;AAIvC,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,OAAO,EAAQ;AAC/B,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,OAAO,EAAQ;;IAY9D,QAAQ,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE;YACrC,IAAI,CAAC,+BAA+B,EAAE;;QAE1C,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU,YAAY,oBAAoB,EAAE;;;;;YAKhE,IAAI,CAAC,cAAc,CAAC;AACf,iBAAA,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC;AACnC,iBAAA,SAAS,CAAC,MACP,IAAI,CAAC,oBAAoB,CACrB,IAAI,CAAC,cAAc,CAAC,UAAqC,CAC5D,CACJ;;;IAIb,eAAe,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,KAAK,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;AACvC,YAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE;;;IAI9C,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;AACrB,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;;IAGrB,+BAA+B,GAAA;AACnC,QAAA,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CACjC;AACI,YAAA;gBACI,SAAS,EAAE,CAAC,UAAU,CAAC;AACvB,gBAAA,OAAO,EAAE,MAAM;AACf,gBAAA,UAAU,EAAE,CAAC,KAAK;;AAEd,gBAAA,IAAI,CAAC,cAAc,CAAC,WAAW,KAAK,sBAAsB,CAAC,SAAS;gBACxE,QAAQ,EAAE,MAAM,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE;AACxD,aAAA;SACJ,EACD,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,CAC5B;;AAGG,IAAA,oBAAoB,CAAC,UAAmC,EAAA;AAC5D,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,uBAAuB,CAC9D,IAAI,CAAC,cAAc,CAAC,KAAK,CAC5B,CAAC,CAAC,CAAC;QACJ,UAAU,CAAC,IAAI,CAAC;AACZ,YAAA,gBAAgB,EAAE;AACd,gBAAA,eAAe,EAAE,QAAQ;AACzB,gBAAA,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,kBAAkB;AACnD,aAAA;AACD,YAAA,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI;AACxC,SAAA,CAAC;AACF,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE;;AAErC,YAAA,UAAU,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC;;;IAI9C,MAAM,aAAa,CAAC,SAAuB,EAAA;QAC/C,SAAS,CAAC,KAAK,CAAC,iBAAiB,GAAG,MAAM,IAAI,CAAC;aAC1C,GAAG,CAAC,6BAA6B;AACjC,aAAA,SAAS,EAAE;QAChB,SAAS,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,IAAI,CAAC;aACtC,GAAG,CAAC,yBAAyB;AAC7B,aAAA,SAAS,EAAE;QAChB,SAAS,CAAC,KAAK,CAAC,iBAAiB,GAAG,MAAM,IAAI,CAAC;aAC1C,GAAG,CAAC,6BAA6B;AACjC,aAAA,SAAS,EAAE;QAChB,SAAS,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,KACnD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,yBAAyB,EAAE;YAC9C,IAAI,EAAE,IAAI,GAAG,CAAC;YACd,QAAQ;YACR,MAAM;YACN,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;AAC1C,SAAA,CAAC;;QAEN,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,KAAI;AACrF,YAAA,IAAI,UAAU,YAAY,oBAAoB,EAAE;AAC3C,gBAAA,UAAmC,CAAC,SAAS,GAAG,SAAS;;iBACvD;AACH,gBAAA,SAAS,CAAC,MAAM,GAAG,UAAU,EAAE,QAAQ,EAAE;gBACzC;AACI,sBAAE,iBAAiB;AAClB,qBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;qBAC9B,SAAS,CAAC,MAAK;AACZ,oBAAA,SAAS,CAAC,MAAM,GAAG,UAAU,CAAC,QAAQ,EAAE;AAC5C,iBAAC,CAAC;;AAEd,SAAC,CAAC;;AAGN,IAAA,QAAQ,CAAC,IAAe,EAAA;AACpB,QAAA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC;AAC/B,YAAA,MAAM,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ;YACtC,MAAM,EAAE,IAAI,CAAC,QAAQ;AACrB,YAAA,KAAK,EAAE,IAAI;AACd,SAAA,CAAC;;+GA1HG,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA7F,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAA8F,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAApD,2BAAA,EAAA,EAAA,EAAA,KAAA,EAAAqD,wBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAArI,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAO,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAApB,oBAAoB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAKlB,YAAY,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChC3B,k3CAiCA,EAAA,MAAA,EAAA,CAAA,qJAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAb,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA0D,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAkF,4BAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDNa,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBANhC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,cAGf,KAAK,EAAA,QAAA,EAAA,k3CAAA,EAAA,MAAA,EAAA,CAAA,qJAAA,CAAA,EAAA;;0BAiBZ;uGAVoB,SAAS,EAAA,CAAA;sBAAjC,SAAS;uBAAC,YAAY;;;MEgCd,2BAA2B,CAAA;AAyFpC,IAAA,WAAA,CACY,gBAAkC,EAClC,uBAAgD,EAChD,MAAc,EACd,cAAqC,EACrC,WAAwB,EACzB,aAAuC,EACtC,iBAAoC,EACpC,SAAoB;;;IAGpB,gBAA6C,EAC7C,iBAAoC,EACpC,UAAsB,EAAA;QAZtB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QAChB,IAAuB,CAAA,uBAAA,GAAvB,uBAAuB;QACvB,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAc,CAAA,cAAA,GAAd,cAAc;QACd,IAAW,CAAA,WAAA,GAAX,WAAW;QACZ,IAAa,CAAA,aAAA,GAAb,aAAa;QACZ,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;QACjB,IAAS,CAAA,SAAA,GAAT,SAAS;QAGT,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QAChB,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;QACjB,IAAU,CAAA,UAAA,GAAV,UAAU;QA9Eb,IAAQ,CAAA,QAAA,GAAG,IAAI;AACxB;;;AAGG;AACO,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAc;AAE/C,QAAA,IAAA,CAAA,WAAW,GAAG,sBAAsB,CAAC,IAAI;AACxC,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAA0B;AAC/D,QAAA,IAAA,CAAA,sBAAsB,GAAG,eAAe,CAAC,iBAAiB;AAKnE;;;AAGG;QACM,IAAmB,CAAA,mBAAA,GAAW,MAAM;AAgB7C;;;;;;;;;;;AAWG;;QAEM,IAAe,CAAA,eAAA,GAAyB,SAAS;AAC1D;;AAEG;QACM,IAAqB,CAAA,qBAAA,GAAG,KAAK;AAE5B,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAc;AAC1C,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAqB;AACjD,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAqB;AACpD,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAkB;AAOjD,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,OAAO,EAAQ;;AAkBnC;;;;AAIE;QACF,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,iBAAiB;QAC7D,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB;QAC/D,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,MAAK;AACjD,YAAA,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE;AAC9B,gBAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,eAAe;AACxC,oBAAA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,QAAQ;AAC1C,gBAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,QAAQ;;iBAChF;AACH,gBAAA,OAAO,CAAC,IAAI,CAAC,0DAA0D,CAAC;;AAE5E,YAAA,KAAK,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE;AAC/C,SAAC,CAAC;;IAGN,QAAQ,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACtB,YAAA,IAAI,CAAC,aAAa,CAAC,+BAA+B,EAAE;;QAExD,IAAI,CAAC,cAAc,CAAC;AACf,aAAA,IAAI,CACD,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,EACzB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC;AAE7B,aAAA,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;;IAG7D,WAAW,CAAC,UAA2C,EAAE,EAAA;AACrD,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACpB,IAAI,CAAC,IAAI,EAAE;;AAEf,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,IAAI;QAC/B,IAAI,CAAC,cAAc,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU;QAChD,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;AACtC,QAAA,IAAI,OAAO,CAAC,OAAO,EAAE;AACjB,YAAA,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC;gBACpC,OAAO,EAAE,IAAI,CAAC,OAAO;AACrB,gBAAA,QAAQ,EAAE,KAAK;AAClB,aAAA,CAAC;;QAEN,IAAI,CAAC,cAAc,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB;QAC5D,IAAI,CAAC,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;QAC5C,IAAI,CAAC,cAAc,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;QAClD,IAAI,CAAC,cAAc,CAAC,sBAAsB,GAAG,IAAI,CAAC,sBAAsB;QACxE,IAAI,CAAC,cAAc,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU;QAChD,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;QAC1C,IAAI,CAAC,cAAc,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa;QACtD,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;QACpC,IAAI,CAAC,cAAc,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU;QAChD,IAAI,CAAC,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;QAC5C,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;QAC9C,IAAI,CAAC,cAAc,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY;QACpD,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;QAC9C,IAAI,CAAC,cAAc,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe;QAC1D,IAAI,CAAC,cAAc,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe;QAC1D,IAAI,CAAC,cAAc,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB;QACtE,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC;AAErE,QAAA,IAAI,OAAO,CAAC,YAAY,CAAC,EAAE;YACvB,KAAK,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC;;AAEnD,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,iBAAiB,EAAE,aAAa,EAAE;;;QAGjE,IAAI,CAAC,eAAe,EAAE;;IAG1B,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;AACrB,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;;AAG7B;;AAEG;IACK,IAAI,GAAA;AACR,QAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAC3D,uBAAuB,CAAC,6BAA6B,EACrD,IAAI,CACP;AACD,QAAA,IAAI,IAAI,CAAC,uBAAuB,IAAI,IAAI,EAAE;YACtC;;QAEJ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,sBAAsB,CACrD,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,uBAAuB,EAC5B,IAAI,CAAC,UAAU,CAAC,aAAa;;AAE7B,QAAA,IAAI,CAAC,iBAAiB,EAAE,CAC3B;;AAEL;;AAEG;IACK,iBAAiB,GAAA;QACrB,MAAM,cAAc,GAA2B,EAAE;QACjD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACjC,YAAA,MAAM,KAAK,GAAI,IAAY,CAAC,GAAG,CAAC;AAChC,YAAA,IAAI,KAAK,YAAY,YAAY,EAAE;AAC/B,gBAAA,cAAc,CAAC,GAAG,CAAC,GAAG,KAAK;;;AAGnC,QAAA,OAAO,cAAc;;IAGzB,cAAc,GAAA;QACV,OAAO,IAAI,CAAC,WAAW;;IAG3B,mBAAmB,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;;AAGhD,IAAA,cAAc,CAAC,WAAmC,EAAA;AAC9C,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,GAAG,WAAW;QAC7C,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;;AAG5C,IAAA,WAAW,CAAC,KAAiB,EAAA;QACzB,IAAI,CAAC,KAAK,EAAE;YACR;;QAEJ,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AACpC,YAAA,IAAI,IAAI,GAAI,KAAa,CAAC,MAAM,CAAC,CAAC,CAAC,KAC9B,CAAU,EAAE;kBACN,CAAU,EAAE,GAAG,CAAC,EAAE,KAAM,CAAU,EAAE,GAAG,CAAC;kBACxC,CAAsB,EAAE,aAAa;oBACrC,CAAsB,EAAE,aAAa,CAC/C;AACD,YAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;;AAEnB,gBAAA,IAAI,GAAI,KAAa,CAAC,MAAM,CACxB,CAAC,CAAC,KACG,CAAU,EAAE,GAAG;oBACf,CAAU,EAAE,GAAG,EAAE,EAAE,KAAM,CAAoC,EAAE,UAAU,CACjF;;AAEL,YAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACnB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAS,EAAE,IAAI,CAAC,CAAC,CAAS,CAAC;;AAEzE,SAAC,CAAC;;AAEF,QAAA,IAAI,IAAI,CAAC,UAAU,YAAY,cAAc,EAAE;AAC1C,YAAA,IAAI,CAAC,UAAgC,CAAC,OAAO,EAAE;;QAEpD,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,QAAQ;AAC3D,QAAA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,EAAE;QACrC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,CAChC,GAAG,YAAY,CAAC,GAAG,CACf,CAAC,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CACjF,CACJ;AACD,QAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE;;AAG1C,IAAA,wBAAwB;AAExB,IAAA,eAAe,CAAC,OAAY,EAAA;QACxB,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AACvB,YAAA,CAAiB,CAAC,OAAO,GAAG,IAAI;AACjC,YAAA,OAAO,CAAC;AACZ,SAAC,CAAC;AACF,QAAA,OAAO,CAAC,OAAO,CAAC,CAAC,CAAI,KAAI;AACrB,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC;AACjB,iBAAA,OAAO;iBACP,IAAI,CAAC,CAAC,CAAC,KACH,CAAU,CAAC;kBACL,CAAU,CAAC,GAAG,EAAE,EAAE,KAAM,CAAU,CAAC,GAAG,EAAE;kBACxC,CAAU,CAAC,aAAa,KAAM,CAAU,CAAC,aAAa,CAChE;YACL,IAAI,QAAQ,EAAE;AACV,gBAAA,IAAK,CAAiB,CAAC,QAAQ,KAAK,KAAK,EAAE;AACvC,oBAAA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;;;iBAEtB;gBACH,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC;;AAE7C,YAAA,IAAK,CAAiB,CAAC,OAAO,EAAE;gBAC5B,QAAQ,CAAC,IAAI;AACR,qBAAA,IAAI,CACD,IAAI,CAAC,EAAE,CAAC,EACR,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,EACzB,SAAS,CAAC,MACN,IAAI,CAAC,WAAW,CAAC,OAAO,CAAE,CAAiB,CAAC,GAAG,CAAC,EAAE,EAAE;AAChD,oBAAA,UAAU,EAAG,CAAiB,CAAC,GAAG,CAAC,IAAI;AAC1C,iBAAA,CAAC,CACL;AAEJ,qBAAA,SAAS,CAAC,CAAC,IAAI,KAAI;AACf,oBAAA,IAAoB,CAAC,OAAO,GAAG,IAAI;AACpC,oBAAA,IAAI,CAAC,WAAW,CAAC,CAAC,IAAS,CAAC,CAAC;AACjC,iBAAC,CAAC;;AAEd,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,EAAE;QACrC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC;AAChD,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAiB,CAAC;AAC9C,QAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE;;AAG1C,IAAA,UAAU,CAAC,OAAoB,EAAA;AAC3B,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;QACtB,IAAI,CAAC,WAAW,EAAE;;IAGtB,SAAS,GAAA;AACL,QAAA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;;IAErF,YAAY,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS;;IAGxC,MAAM,oBAAoB,CAAC,MAAyB,EAAA;AAChD,QAAA,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC;AAC/D,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;AACvB,YAAA,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK;AAChC,YAAA,aAAa,EAAE,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,QAAQ;AACrD,YAAA,eAAe,EAAE,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,QAAQ;AACvD,YAAA,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;YACrC,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,aAAa,EAAE,MAAM,CAAC,aAAa;AACtC,SAAA,CAAC;AACF,QAAA,KAAK,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE;;IAG/C,eAAe,GAAA;;AAEX,QAAA,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;;IAGrD,eAAe,GAAA;QACnB,IAAI,CAAC,gBAAgB,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ;QAC3C,IAAI,CAAC,gBAAgB,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ;QAC3C,IAAI,CAAC,gBAAgB,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa;QACrD,IAAI,CAAC,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU;;AAGnD;;;AAGG;IACH,eAAe,GAAA;AACX,QAAA,IAAI,CAAC,uBAAuB,EAAE,SAAS,EAAE,SAAS,EAAE;;AAGxD,IAAA,WAAW,CAAC,OAAY,EAAA;AACpB,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC;AACnC,QAAA,IAAI,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE;;+GAvWtB,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,uBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAJ,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAhJ,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAqJ,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAAjC,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,SAAA,EAAA,EAAA,EAAA,KAAA,EAAAiC,2BAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAA3B,2BAA2B,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,eAAA,EAAA,WAAA,EAAA,aAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,SAAA,EAHzB,CAAC,kBAAkB,EAAE,wBAAwB,EAAE,2BAA2B,CAAC,EAJ5E,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,yBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;AAGU,uBAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAtF,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAuF,oBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAIX,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBATvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,QAAQ,EAAE,CAAA;;;AAGU,uBAAA,CAAA;AACpB,oBAAA,SAAS,EAAE,CAAC,kBAAkB,EAAE,wBAAwB,EAAE,2BAA2B,CAAC;AACtF,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;2XAO0B,QAAQ,EAAA,CAAA;sBAA9B,YAAY;uBAAC,OAAO;gBAIE,QAAQ,EAAA,CAAA;sBAA9B,YAAY;uBAAC,OAAO;gBAIO,aAAa,EAAA,CAAA;sBAAxC,YAAY;uBAAC,YAAY;gBAID,UAAU,EAAA,CAAA;sBAAlC,YAAY;uBAAC,SAAS;gBACY,uBAAuB,EAAA,CAAA;sBAAzD,SAAS;uBAAC,sBAAsB;gBACxB,UAAU,EAAA,CAAA;sBAAlB;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,gBAAgB,EAAA,CAAA;sBAAxB;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBAKS,aAAa,EAAA,CAAA;sBAAtB;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACS,iBAAiB,EAAA,CAAA;sBAA1B;gBACQ,sBAAsB,EAAA,CAAA;sBAA9B;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBAMQ,mBAAmB,EAAA,CAAA;sBAA3B;gBAKQ,UAAU,EAAA,CAAA;sBAAlB;gBAUQ,eAAe,EAAA,CAAA;sBAAvB;gBAcQ,eAAe,EAAA,CAAA;sBAAvB;gBAIQ,qBAAqB,EAAA,CAAA;sBAA7B;gBAES,SAAS,EAAA,CAAA;sBAAlB;gBACS,SAAS,EAAA,CAAA;sBAAlB;gBACS,YAAY,EAAA,CAAA;sBAArB;gBACS,UAAU,EAAA,CAAA;sBAAnB;gBACS,iBAAiB,EAAA,CAAA;sBAA1B;gBACS,kBAAkB,EAAA,CAAA;sBAA3B;;;MCtDQ,iBAAiB,CAAA;+GAAjB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,iBAnDtB,sBAAsB;YACtB,oBAAoB;YACpB,iBAAiB;YACjB,wBAAwB;YACxB,4BAA4B;YAC5B,6BAA6B;YAC7B,yBAAyB;YACzB,mBAAmB;YACnB,qBAAqB;YACrB,oBAAoB;YACpB,2BAA2B;YAC3B,mBAAmB;YACnB,sBAAsB;YACtB,qBAAqB;YACrB,qBAAqB;YACrB,wBAAwB;YACxB,kBAAkB;YAClB,wBAAwB;YACxB,wBAAwB;YACxB,iCAAiC;AACjC,YAAA,wBAAwB,aAGxB,YAAY;YACZ,WAAW;YACX,UAAU;YACV,aAAa;YACb,cAAc;YACd,wBAAwB;YACxB,eAAe;YACf,iBAAiB;YACjB,eAAe;YACf,cAAc;YACd,aAAa;YACb,cAAc;YACd,iBAAiB;YACjB,kBAAkB;YAClB,eAAe;YACf,oBAAoB;YACpB,aAAa;YACb,gBAAgB;AAChB,YAAA,eAAe,aAGf,2BAA2B;YAC3B,kBAAkB;YAClB,wBAAwB;YACxB,wBAAwB;YACxB,iBAAiB,CAAA,EAAA,CAAA,CAAA;AAGZ,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,YA5BtB,YAAY;YACZ,WAAW;YACX,UAAU;YACV,aAAa;YACb,cAAc;YACd,wBAAwB;YACxB,eAAe;YACf,iBAAiB;YACjB,eAAe;YACf,cAAc;YACd,aAAa;YACb,cAAc;YACd,iBAAiB;YACjB,kBAAkB;YAClB,eAAe;YACf,oBAAoB;YACpB,aAAa;YACb,gBAAgB;YAChB,eAAe,CAAA,EAAA,CAAA,CAAA;;4FAUV,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBArD7B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,YAAY,EAAE;wBACV,sBAAsB;wBACtB,oBAAoB;wBACpB,iBAAiB;wBACjB,wBAAwB;wBACxB,4BAA4B;wBAC5B,6BAA6B;wBAC7B,yBAAyB;wBACzB,mBAAmB;wBACnB,qBAAqB;wBACrB,oBAAoB;wBACpB,2BAA2B;wBAC3B,mBAAmB;wBACnB,sBAAsB;wBACtB,qBAAqB;wBACrB,qBAAqB;wBACrB,wBAAwB;wBACxB,kBAAkB;wBAClB,wBAAwB;wBACxB,wBAAwB;wBACxB,iCAAiC;wBACjC,wBAAwB;AAC3B,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACL,YAAY;wBACZ,WAAW;wBACX,UAAU;wBACV,aAAa;wBACb,cAAc;wBACd,wBAAwB;wBACxB,eAAe;wBACf,iBAAiB;wBACjB,eAAe;wBACf,cAAc;wBACd,aAAa;wBACb,cAAc;wBACd,iBAAiB;wBACjB,kBAAkB;wBAClB,eAAe;wBACf,oBAAoB;wBACpB,aAAa;wBACb,gBAAgB;wBAChB,eAAe;AAClB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACL,2BAA2B;wBAC3B,kBAAkB;wBAClB,wBAAwB;wBACxB,wBAAwB;wBACxB,iBAAiB;AACpB,qBAAA;AACJ,iBAAA;;;MClDY,kBAAkB,CAAA;IACpB,OAAO,OAAO,CACjB,MAAuC,EAAA;QAEvC,OAAO;AACH,YAAA,QAAQ,EAAE,kBAAkB;AAC5B,YAAA,SAAS,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;SACzC;;+GAPI,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,YAxBvB,YAAY;YACZ,eAAe;YACf,wBAAwB;YACxB,eAAe;AACf,YAAA,iBAAiB,aAMjB,YAAY;YACZ,SAAS;YACT,gBAAgB;YAChB,eAAe;YACf,wBAAwB;YACxB,eAAe;YACf,iBAAiB;YACjB,iBAAiB;YACjB,cAAc;YACd,eAAe;YACf,iBAAiB;YACjB,qBAAqB,CAAA,EAAA,CAAA,CAAA;AAGhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,YAxBvB,YAAY;YACZ,eAAe;YACf,wBAAwB;YACxB,eAAe;AACf,YAAA,iBAAiB,EAMjB,YAAY;YACZ,SAAS;YACT,gBAAgB;YAChB,eAAe;YACf,wBAAwB;YACxB,eAAe;YACf,iBAAiB;YAGjB,eAAe,CAAA,EAAA,CAAA,CAAA;;4FAKV,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBA3B9B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,OAAO,EAAE;wBACL,YAAY;wBACZ,eAAe;wBACf,wBAAwB;wBACxB,eAAe;wBACf,iBAAiB;;;;AAIpB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACL,YAAY;wBACZ,SAAS;wBACT,gBAAgB;wBAChB,eAAe;wBACf,wBAAwB;wBACxB,eAAe;wBACf,iBAAiB;wBACjB,iBAAiB;wBACjB,cAAc;wBACd,eAAe;wBACf,iBAAiB;wBACjB,qBAAqB;AACxB,qBAAA;AACJ,iBAAA;;;ACpCD;;;AAGG;AACG,MAAO,kBAAsD,SAAQ,cAAiB,CAAA;AACxF,IAAA,WAAA,CAAoB,WAAgC,EAAA;AAChD,QAAA,KAAK,EAAE;QADS,IAAW,CAAA,WAAA,GAAX,WAAW;;IAI/B,OAAO,GAAA;;AAEH,QAAA,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AACzB;;;;AAIG;;AAGP,IAAA,UAAU;IACV,OAAO,GAAA;QACH,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC;;IAGnE,OAAO,GAAA;QACH,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,CAClB,EAAE,EACF,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,CAAC,CAC7C;;IAGL,OAAO,GAAA;QACH,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,KAAK,CAAC;;IAGvC,QAAQ,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;;IAG9E,aAAa,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM;;AAGpD,IAAA,aAAa,CAAC,QAAgB,EAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;;AAExC;;MCvCY,SAAS,CAAA;AAAtB,IAAA,WAAA,GAAA;QACY,IAAO,CAAA,OAAA,GAAiC,EAAE;;AAElD,IAAA,GAAG,CAAC,KAAwB,EAAA;AACxB,QAAA,IAAI,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,UAAU,KAAK,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE;AACzD,YAAA,MAAM,IAAI,KAAK,CAAC,uCAAuC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;;AAEpF,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;;IAGlE,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE;;AAGrB,IAAA,GAAG,CAAC,KAAqB,EAAA;AACrB,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE;AAC9B,YAAA,IAAI,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,EAAE;gBAC1E,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CACnB,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,EACnC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,UAAU,CACpC;;;;QAIT,OAAO,CAAC,IAAI,CACR,yHAAyH,EACzH,KAAK,EACL,IAAI,CAAC,OAAO,CACf;AACD,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE;AAC9B,YAAA,IAAI,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,UAAU,EAAE;gBAC5E,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CACnB,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,EACnC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,UAAU,CACpC;;;QAGT,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC;AAC5E,QAAA,OAAO,IAAI;;AAGf,IAAA,eAAe,CAAC,cAA8B,EAAA;AAC1C,QAAA,IAAI,SAAS,GAAG,cAAc,CAAC,UAAU;AACzC,QAAA,IAAI,OAAO,GAAG,cAAc,CAAC,QAAQ;AACrC,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE;AAC9B,YAAA,IAAI,KAAK,CAAC,UAAU,IAAI,SAAS,IAAI,KAAK,CAAC,QAAQ,GAAG,SAAS,EAAE;AAC7D,gBAAA,SAAS,GAAG,KAAK,CAAC,QAAQ;;AACvB,iBAAA,IAAI,KAAK,CAAC,UAAU,GAAG,OAAO,IAAI,KAAK,CAAC,QAAQ,IAAI,OAAO,EAAE;AAChE,gBAAA,OAAO,GAAG,KAAK,CAAC,UAAU;;AAE9B,YAAA,IAAI,SAAS,IAAI,OAAO,EAAE;AACtB,gBAAA,OAAO,IAAI;;;QAGnB,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE;;AAG/C,IAAA,gBAAgB,CAAC,MAA2B,EAAA;AAChD,QAAA,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;AAC1D,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACxC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxC,gBAAA,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;AACtC,oBAAA,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AAC7C,oBAAA,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;;;;AAI7B,QAAA,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;;IAGzB,SAAS,CAAC,GAAsB,EAAE,GAAsB,EAAA;AAC5D,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE;AACd,YAAA,OAAO,KAAK;;AAEhB,QAAA,OAAO,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,UAAU;;IAGjC,MAAM,CAAC,GAAsB,EAAE,GAAsB,EAAA;QACzD,OAAO;YACH,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC;SACxE;;AAER;;MCzEY,mBAAmB,CAAA;IAC5B,WACY,CAAA,QAAkB,EAClB,YAA0B,EAC1B,gBAAsC,EACtC,aAAwC,EACxC,WAAwB,EACZ,wBAAkD,EAAA;QAL9D,IAAQ,CAAA,QAAA,GAAR,QAAQ;QACR,IAAY,CAAA,YAAA,GAAZ,YAAY;QACZ,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QAChB,IAAa,CAAA,aAAA,GAAb,aAAa;QACb,IAAW,CAAA,WAAA,GAAX,WAAW;QACC,IAAwB,CAAA,wBAAA,GAAxB,wBAAwB;;AAGhD,IAAA,MAAM,aAAa,CAAC,MAAc,EAAE,UAAkB,IAAI,EAAA;AACtD,QAAA,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;QAChE,MAAM,WAAW,GAAG,MAAM,cAAc,CACpC,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC;AACpC,YAAA,UAAU,EAAE,eAAe;AAC3B,YAAA,IAAI,EAAE,MAAM;AACf,SAAA,CAAC,CACL;AACD,QAAA,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI;AAC7B,QAAA,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,sBAAsB,EAAE,CAAC;AAC5E,QAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;AACzD,QAAA,IAAI,CAAC,wBAAwB,EAAE,OAAO,CAAC;YACnC,KAAK,EAAE,KAAK,CAAC,MAAM;YACnB,aAAa,EAAE,CAAC,IAAI,CAAC;AACrB,YAAA,MAAM,EAAE;AACJ,gBAAA,GAAG,EAAE;AACD,oBAAA,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;AACrB,iBAAA;AACJ,aAAA;AACD,YAAA,aAAa,EAAE;AACX,gBAAA,iBAAiB,EAAE,IAAI;AAC1B,aAAA;AACD,YAAA,kBAAkB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAI;gBACrC,IAAI,OAAO,IAAI,OAAO,KAAK,aAAa,CAAC,oBAAoB,EAAE;oBAC3D,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,KAAK;;aAE5E;AACJ,SAAA,CAAC;AACF,QAAA,MAAM,IAAI,CAAC,wBAAwB,EAAE,iBAAiB,EAAE;AACxD,QAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE;AAC1B,YAAA,OAAO,CAAC,KAAK,CAAC,+DAA+D,CAAC;YAC9E,OAAO;gBACH,IAAI;AACJ,gBAAA,KAAK,EAAE,oCAAoC;aAC9C;;QAEL,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,GAAG,CAAC;AAC1C,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE;YAC/B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAC/E,MAAM,EACN,EAAE,CACL;;aACE;YACH,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,OAAO,GAAG,aAAa;;AAEjE,QAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;AACnD,QAAA,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG;AAC7B,QAAA,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;AACzB,QAAA,MAAM,OAAO,GAAG;AACZ,YAAA,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE;AACnB,YAAA,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI;YACrB,WAAW,EAAE,WAAW,CAAC,UAAU;YACnC,SAAS,EAAE,WAAW,CAAC,SAAS;AAChC,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,QAAQ,EAAE;AACN,gBAAA,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa;gBAC7C,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS;gBAC7C,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ;gBAC1C,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK;AAC5C,aAAA;SAC0B;QAE/B,OAAO;YACH,IAAI;YACJ,OAAO;SACV;;IAGL,MAAM,mBAAmB,CACrB,WAAmB,EACnB,SAAiB,EACjB,GAAW,EACX,SAAiB,EACjB,WAAmB,EAAA;QAEnB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,OAAO,GAAG,SAAS;AACzD,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAS;QAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC9C,QAAA,MAAM,OAAO,GAAG;AACZ,YAAA,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE;AACnB,YAAA,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI;AACrB,YAAA,WAAW,EAAE,WAAW;AACxB,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,KAAK,EAAE,GAAG;AACV,YAAA,QAAQ,EAAE;AACN,gBAAA,aAAa,EAAE,QAAQ,CAAC,aAAa,IAAI,EAAE;AAC3C,gBAAA,SAAS,EAAE,QAAQ,CAAC,SAAS,IAAI,EAAE;AACnC,gBAAA,OAAO,EAAE,QAAQ,CAAC,QAAQ,IAAI,EAAE;AAChC,gBAAA,SAAS,EAAE,QAAQ,CAAC,KAAK,IAAI,EAAE;AAClC,aAAA;SAC0B;QAE/B,OAAO;YACH,IAAI;YACJ,OAAO;SACV;;+GA1GI,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAA/J,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,yBAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAgK,wBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAnB,mBAAmB,EAAA,CAAA,CAAA;;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B;;0BAQQ;;;MC3BI,0BAA0B,CAAA;AACnC,IAAA,MAAM,CAAC,MAAuC,EAAA;QAC1C,OAAQ,MAAM,CAAC,iBAAyB,EAAE,QAAQ,IAAI,MAAM,CAAC,GAAG;;AAEvE;;ACND;AACA,IAAY,iBAOX;AAPD,CAAA,UAAY,iBAAiB,EAAA;;AAEzB,IAAA,iBAAA,CAAA,iBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;;AAEJ,IAAA,iBAAA,CAAA,iBAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK;;AAEL,IAAA,iBAAA,CAAA,iBAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAU;AACd,CAAC,EAPW,iBAAiB,KAAjB,iBAAiB,GAO5B,EAAA,CAAA,CAAA;;;;;;;;;;;;ACGY,MAAA,gBAAgB,GAAG;IAC5B,QAAQ;IACR,OAAO;IACP,SAAS;IACT,WAAW;IACX,QAAQ;IACR,aAAa;IACb,OAAO;IACP,aAAa;IACb,KAAK;IACL,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,QAAQ;IACR,UAAU;;AAKD,IAAA,iBAAiB,GAAvB,mBAAA,GAAA,MAAM,iBAAiB,CAAA;AACnB,IAAP,OAAO,MAAM,CACT,IAAgB,EAChB,aAA4B,EAC5B,aAAwC,EACF,cAAuB,EAG7D,sBAAmD,EAAA;AAEnD,QAAA,OAAO,IAAI,mBAAiB,CACxB,cAAc,EACd,sBAAsB,EACtB,IAAI,EACJ,aAAa,EACb,aAAa,CAChB;;IAGL,WAC0C,CAAA,cAA8B,EAGpE,sBAA0D,EAClD,IAAgB,EAChB,aAA4B,EAC5B,aAAwC,EACxC,SAAiB,CAAC,cAAc,IAAI,EAAE,IAAI,aAAa,EACvD,SAAiB,OAAO,EAAA;QARc,IAAc,CAAA,cAAA,GAAd,cAAc;QAGpD,IAAsB,CAAA,sBAAA,GAAtB,sBAAsB;QACtB,IAAI,CAAA,IAAA,GAAJ,IAAI;QACJ,IAAa,CAAA,aAAA,GAAb,aAAa;QACb,IAAa,CAAA,aAAA,GAAb,aAAa;QACb,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAM,CAAA,MAAA,GAAN,MAAM;;;AAKD,QAAA,IAAA,CAAA,MAAM,GAAsB,iBAAiB,CAAC,IAAI;;AAEnE;;AAEG;AACH,IAAA,cAAc,CAAC,IAAY,EAAA;AACvB,QAAA,IAAI,IAAI,KAAK,MAAM,EAAE;AACjB,YAAA,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;AACnD,YAAA,OAAO,EAAE,CAAC,EAAE,CAAC;;;AAGjB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,IAAI;AACxD,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE;YACzB,OAAO,CAAC,KAAK,CAAC,8BAA8B,GAAG,IAAI,GAAG,KAAK,GAAG,WAAW,CAAC;;AAE9E,QAAA,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC;AAC1D,QAAA,OAAO;AACF,aAAA,QAAQ,CAAC;YACN,oBAAoB,EAAE,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,IAAI;;YAEzD,GAAG,CAAC,CAAC,YAAY,KAAK,YAAY,IAAI,EAAE,CAAC,CAC5C;YACD,oBAAoB,EAAE,IAAI,CAAC;AACtB,iBAAA,2BAA2B;iBAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;SACrB;aACA,IAAI,CACD,GAAG,CAAC,CAAC,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,KAAI;;YAEnD,OAAO,IAAI,CAAC,cAAc,CAAC,oBAAoB,EAAE,oBAAoB,CAAC;AAC1E,SAAC,CAAC,EACF,SAAS,CAAC,CAAC,YAAY,KAAI;AACvB,YAAA,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;AAC9B,gBAAA,OAAO,EAAE,CAAC,YAAY,CAAC;;YAE3B,MAAM,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC;AAC/C,YAAA,OAAO,CAAC,IAAI,CAAC,0BAA0B,EAAE,KAAK,CAAC;AAC/C,YAAA,OAAO,QAAQ,CACX,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAA2B,CAAC,CAC/D,CAAC,IAAI,CACF,GAAG,CAAC,CAAC,KAAK,KAAI;AACV,gBAAA,KAAK,IAAI,UAAU,IAAI,KAAK,EAAE;oBAC1B,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,UAAU,CAAC;;AAEpE,gBAAA,OAAO,YAAY;AACvB,aAAC,CAAC,EACF,UAAU,CAAC,CAAC,CAAC,KAAI;AACb,gBAAA,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,CAAC,CAAC;AAClD,gBAAA,OAAO,EAAE,CAAC,YAAY,CAAC;aAC1B,CAAC,CACL;SACJ,CAAC,EACF,GAAG,CAAC,CAAC,YAAY,KAAK,IAAI,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAC,EAChE,UAAU,CAAC,CAAC,KAAK,EAAE,GAAG,KAAI;AACtB,YAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;AACpB,YAAA,OAAO,EAAE,CAAC,KAAK,CAAC;SACnB,CAAC,CACL;;AAGD,IAAA,uBAAuB,CAAC,IAAY,EAAA;AACxC,QAAA,QAAQ,IAAI,CAAC,SAAS,EAAE;AACpB,YAAA,KAAK,YAAY;gBACb,OAAO,IAAI,CAAC,aAAa,CAAC,0BAA0B,EAAE,CAAC,IAAI,CACvD,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,MAAM,IAAI,GAAG,CAAC,QAAQ,KAAK,IAAI,CAAC,EACtD,SAAS,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,EACxD,KAAK,EAAE,CACV;AACL,YAAA,KAAK,OAAO;gBACR,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;;;IAI/D,SAAS,GAAA;AACb,QAAA,IACI,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,KAAK,iBAAiB,CAAC,IAAI;AACxE,YAAA,IAAI,CAAC,MAAM,KAAK,iBAAiB,CAAC,UAAU,EAC9C;AACE,YAAA,OAAO,YAAY;;aAChB;AACH,YAAA,OAAO,OAAO;;;AAItB;;;AAGG;AACK,IAAA,iBAAiB,CAAC,IAAY,EAAA;QAClC,OAAO,gBAAgB,CAAC,GAAG,CACvB,CAAC,WAAW,KAAK,CAAG,EAAA,IAAI,CAAC,MAAM,CAAA,CAAA,EAAI,WAAW,CAAI,CAAA,EAAA,IAAI,GAAG,IAAI,CAAC,MAAM,CAAA,CAAE;AAErE,aAAA,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAA2B;AACzD,aAAA,GAAG,CAAC,CAAC,GAAG,KACL,GAAG,CAAC,IAAI,CACJ,UAAU,CAAC,CAAC,CAAC,KAAI;YACb,OAAO,CAAC,IAAI,CACR,wCAAwC;gBACpC,IAAI;AACJ,gBAAA,uEAAuE,CAC9E;AACD,YAAA,OAAO,EAAE,CAAC,EAAE,CAAC;SAChB,CAAC,CACL,CACJ;;AAGT;;;AAGG;AACK,IAAA,iBAAiB,CAAC,YAAsC,EAAA;AAC5D,QAAA,OAAO,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,IAAI,CAC/B,MAAM,CAAC,CAAC,GAAe,EAAE,KAAiB,KAAI;AAC1C,YAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACtB,gBAAA,IAAI,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;oBAC5B,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;;;AAG/B,YAAA,OAAO,GAAG;AACd,SAAC,EAAE,EAAE,CAAC,CACT;;AAGL;;;;;;;;;;;;AAYG;IACK,cAAc,CAClB,YAAwB,EACxB,SAAoC,EAAA;QAEpC,IAAI,SAAS,EAAE;AACX,YAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAS,SAAS,CAAC,EAAE;gBAC1D,IAAI,GAAG,GAAG,YAAY;gBACtB,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;AAC3B,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE;AAC3B,gBAAA,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;AACrB,oBAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACZ,wBAAA,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE;;AAElB,oBAAA,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC;AACzB,oBAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AAC7B,wBAAA,MAAM,IAAI,KAAK,CAAC,0CAA0C,GAAG,IAAI,CAAC;;oBAEtE,GAAG,GAAG,OAAO;;AAEjB,gBAAA,GAAG,CAAC,QAAQ,CAAC,GAAG,KAAK;;;AAG7B,QAAA,OAAO,YAAY;;AAGf,IAAA,sBAAsB,CAAC,YAAwB,EAAE,IAAA,GAAiB,EAAE,EAAA;QACxE,KAAK,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;YACvC,IAAI,OAAO,YAAY,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE;;AAEvC;;AAEO;AACP,gBAAA,YAAY,CAAC,GAAG,CAAC,GAAI,YAAY,CAAC,GAAG,CAAY,CAAC,OAAO,CACrD,uBAAuB,EACvB,GAAG,CACN;;iBACE;gBACH,YAAY,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAC3C,YAAY,CAAC,GAAG,CAAe,EAC/B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CACnB;;;AAIT,QAAA,OAAO,YAAY;;IAGf,kBAAkB,CAAC,MAAkB,EAAE,QAAoB,EAAA;QAC/D,IAAI,CAAC,MAAM,EAAE;YACT,MAAM,GAAG,EAAE;;QAEf,KAAK,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;YACnC,IAAI,OAAO,QAAQ,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE;AACnC,gBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,kBAAkB,CACjC,MAAM,CAAC,GAAG,CAAe,EACzB,QAAQ,CAAC,GAAG,CAAe,CAC9B;;iBACE;gBACH,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC;;;AAGnC,QAAA,OAAO,MAAM;;;AAtOV,UAAA,CAAA;IAIF,OAAA,CAAA,CAAA,EAAA,QAAQ,EAAE,CAAA;AAAE,IAAA,OAAA,CAAA,CAAA,EAAA,MAAM,CAAC,gBAAgB,CAAC,CAAA;IACpC,OAAA,CAAA,CAAA,EAAA,QAAQ,EAAE,CAAA;AACV,IAAA,OAAA,CAAA,CAAA,EAAA,MAAM,CAAC,wBAAwB,CAAC;AAUpC,CAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,CAAA;AAjBQ,iBAAiB,GAAA,mBAAA,GAAA,UAAA,CAAA;IAoBrB,OAAA,CAAA,CAAA,EAAA,QAAQ,EAAE,CAAA;AAAE,IAAA,OAAA,CAAA,CAAA,EAAA,MAAM,CAAC,gBAAgB,CAAC,CAAA;IACpC,OAAA,CAAA,CAAA,EAAA,QAAQ,EAAE,CAAA;AACV,IAAA,OAAA,CAAA,CAAA,EAAA,MAAM,CAAC,wBAAwB,CAAC;AAtB5B,CAAA,EAAA,iBAAiB,CAyO7B;;AC/PD;;;;AAIG;MAwBU,kBAAkB,CAAA;AAC3B,IAAA,OAAO,OAAO,GAAA;QACV,OAAO;AACH,YAAA,QAAQ,EAAE,kBAAkB;AAC5B,YAAA,SAAS,EAAE,EAAE;SAChB;;AAGL,IAAA,WAAA,CAAoC,YAAiC,EAAA;QACjE,IAAI,YAAY,EAAE;AACd,YAAA,OAAO,CAAC,IAAI,CACR,uEAAuE,EACvE,YAAY,CACf;AACD;;AAEI;;;+GAhBH,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;gHAAlB,kBAAkB,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,EApBvB,OAAA,EAAA,CAAA,eAAe,CAAC,OAAO,CAAC;AACpB,gBAAA,MAAM,EAAE;AACJ,oBAAA,OAAO,EAAE,eAAe;oBACxB,UAAU,EAAE,iBAAiB,CAAC,MAAM;AACpC,oBAAA,IAAI,EAAE;wBACF,UAAU;wBACV,aAAa;wBACb,yBAAyB;AACzB,wBAAA,CAAC,IAAI,QAAQ,EAAE,EAAE,WAAW,CAAC;AAC7B,wBAAA,CAAC,IAAI,QAAQ,EAAE,EAAE,gBAAgB,CAAC;AAClC,wBAAA,CAAC,IAAI,QAAQ,EAAE,EAAE,wBAAwB,CAAC;AAC7C,qBAAA;AACJ,iBAAA;AACD,gBAAA,yBAAyB,EAAE;AACvB,oBAAA,OAAO,EAAE,yBAAyB;AAClC,oBAAA,QAAQ,EAAE,0BAA0B;AACvC,iBAAA;aACJ,CAAC,CAAA,EAAA,CAAA,CAAA;;4FAGG,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAvB9B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,OAAO,EAAE;wBACL,eAAe,CAAC,OAAO,CAAC;AACpB,4BAAA,MAAM,EAAE;AACJ,gCAAA,OAAO,EAAE,eAAe;gCACxB,UAAU,EAAE,iBAAiB,CAAC,MAAM;AACpC,gCAAA,IAAI,EAAE;oCACF,UAAU;oCACV,aAAa;oCACb,yBAAyB;AACzB,oCAAA,CAAC,IAAI,QAAQ,EAAE,EAAE,WAAW,CAAC;AAC7B,oCAAA,CAAC,IAAI,QAAQ,EAAE,EAAE,gBAAgB,CAAC;AAClC,oCAAA,CAAC,IAAI,QAAQ,EAAE,EAAE,wBAAwB,CAAC;AAC7C,iCAAA;AACJ,6BAAA;AACD,4BAAA,yBAAyB,EAAE;AACvB,gCAAA,OAAO,EAAE,yBAAyB;AAClC,gCAAA,QAAQ,EAAE,0BAA0B;AACvC,6BAAA;yBACJ,CAAC;AACL,qBAAA;AACJ,iBAAA;;0BASgB;;0BAAY;;;MCpChB,mBAAmB,CAAA;aACZ,IAAuB,CAAA,uBAAA,GAAG,GAAH,CAAO;AAE9C,IAAA,WAAA,GAAA;AAEA;;;;;AAKG;AACH,IAAA,gBAAgB,CAAC,UAAkB,EAAE,UAAuB,EAAE,WAAW,GAAG,IAAI,EAAA;QAC5E,MAAM,QAAQ,GAGR,EAAE;;AAER,QAAA,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AACnD,QAAA,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE;AAC/B,YAAA,IAAI,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC;YACxE,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,IAAI,gBAAgB,IAAI,WAAW,EAAE;AAC1D,gBAAA,IAAI,MAAM,GAAG,UAAU,CAAC,gBAAgB,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;gBACtE,IAAI,MAAM,EAAE;oBACR,IAAI,MAAM,CAAC,MAAM,GAAG,mBAAmB,CAAC,uBAAuB,EAAE;wBAC7D,OAAO,CAAC,IAAI,CACR,QAAQ;4BACJ,QAAQ;4BACR,+BAA+B;AAC/B,4BAAA,MAAM,CAAC,MAAM;AACb,4BAAA,8CAA8C,CACrD;;yBACE;AACH,wBAAA,UAAU,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;;;;YAItE,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;gBACnF,QAAQ,CAAC,IAAI,CAAC;AACV,oBAAA,QAAQ,EAAE,QAAQ;AAClB,oBAAA,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC;AAC/B,iBAAA,CAAC;;AAEV,QAAA,OAAO,QAAQ;;+GA1CV,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFhB,MAAM,EAAA,CAAA,CAAA;;4FAET,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA;;;ACRD;;AAEG;;ACFH;;AAEG;;;;"}
1
+ {"version":3,"file":"ngx-edu-sharing-ui.mjs","sources":["../../../projects/edu-sharing-ui/src/lib/util/ui-constants.ts","../../../projects/edu-sharing-ui/src/lib/util/rest-helper.ts","../../../projects/edu-sharing-ui/src/lib/pipes/file-size.pipe.ts","../../../projects/edu-sharing-ui/src/lib/util/VCard.ts","../../../projects/edu-sharing-ui/src/lib/pipes/vcard-name.pipe.ts","../../../projects/edu-sharing-ui/src/lib/util/isNumeric.ts","../../../projects/edu-sharing-ui/src/lib/util/DateHelper.ts","../../../projects/edu-sharing-ui/src/lib/mds-viewer/mds-viewer.service.ts","../../../projects/edu-sharing-ui/src/lib/mds-viewer/mds-editor-instance-service.abstract.ts","../../../projects/edu-sharing-ui/src/lib/services/ui.service.ts","../../../projects/edu-sharing-ui/src/lib/mds-viewer/view-instance.service.ts","../../../projects/edu-sharing-ui/src/lib/types/workflow.ts","../../../projects/edu-sharing-ui/src/lib/types/option-item.ts","../../../projects/edu-sharing-ui/src/lib/edu-sharing-ui-configuration.ts","../../../projects/edu-sharing-ui/src/lib/services/repo-url.service.ts","../../../projects/edu-sharing-ui/src/lib/services/node-helper.service.ts","../../../projects/edu-sharing-ui/src/lib/util/functions.ts","../../../projects/edu-sharing-ui/src/lib/directives/icon.directive.ts","../../../projects/edu-sharing-ui/src/lib/pipes/mds-duration.pipe.ts","../../../projects/edu-sharing-ui/src/lib/mds-viewer/widget/mds-widget.component.ts","../../../projects/edu-sharing-ui/src/lib/mds-viewer/widget/mds-widget.component.html","../../../projects/edu-sharing-ui/src/lib/mds-viewer/replace-element-with-div.ts","../../../projects/edu-sharing-ui/src/lib/spinner-small/spinner-small.component.ts","../../../projects/edu-sharing-ui/src/lib/spinner-small/spinner-small.component.html","../../../projects/edu-sharing-ui/src/lib/mds-viewer/mds-viewer.component.ts","../../../projects/edu-sharing-ui/src/lib/mds-viewer/mds-viewer.component.html","../../../projects/edu-sharing-ui/src/lib/util/ui-animation.ts","../../../projects/edu-sharing-ui/src/lib/util/helper.ts","../../../projects/edu-sharing-ui/src/lib/pipes/option-tooltip.pipe.ts","../../../projects/edu-sharing-ui/src/lib/pipes/replace-chars.pipe.ts","../../../projects/edu-sharing-ui/src/lib/dropdown/dropdown.component.ts","../../../projects/edu-sharing-ui/src/lib/dropdown/dropdown.component.html","../../../projects/edu-sharing-ui/src/lib/pipes/property-slug.pipe.ts","../../../projects/edu-sharing-ui/src/lib/actionbar/actionbar.component.ts","../../../projects/edu-sharing-ui/src/lib/actionbar/actionbar.component.html","../../../projects/edu-sharing-ui/src/lib/directives/border-box-observer.directive.ts","../../../projects/edu-sharing-ui/src/lib/directives/check-text-overflow.directive.ts","../../../projects/edu-sharing-ui/src/lib/directives/focus-state.directive.ts","../../../projects/edu-sharing-ui/src/lib/services/app-container.service.ts","../../../projects/edu-sharing-ui/src/lib/directives/infinite-scroll.directive.ts","../../../projects/edu-sharing-ui/src/lib/node-url/node-url.component.ts","../../../projects/edu-sharing-ui/src/lib/node-url/node-url.component.html","../../../projects/edu-sharing-ui/src/lib/pipes/format-date.pipe.ts","../../../projects/edu-sharing-ui/src/lib/pipes/node-icon.pipe.ts","../../../projects/edu-sharing-ui/src/lib/pipes/node-image-size.pipe.ts","../../../projects/edu-sharing-ui/src/lib/pipes/node-image.pipe.ts","../../../projects/edu-sharing-ui/src/lib/pipes/node-person-name.pipe.ts","../../../projects/edu-sharing-ui/src/lib/pipes/node-title.pipe.ts","../../../projects/edu-sharing-ui/src/lib/sort-dropdown/sort-dropdown.component.ts","../../../projects/edu-sharing-ui/src/lib/sort-dropdown/sort-dropdown.component.html","../../../projects/edu-sharing-ui/src/lib/spinner/spinner.component.ts","../../../projects/edu-sharing-ui/src/lib/spinner/spinner.component.html","../../../projects/edu-sharing-ui/src/lib/pipes/node-license.pipe.ts","../../../projects/edu-sharing-ui/src/lib/common/edu-sharing-ui-common.module.ts","../../../projects/edu-sharing-ui/src/lib/types/list-item.ts","../../../projects/edu-sharing-ui/src/lib/mds/mds-helper.service.ts","../../../projects/edu-sharing-ui/src/lib/mds/mds.module.ts","../../../projects/edu-sharing-ui/src/lib/directives/drag-nodes/drag-nodes.ts","../../../projects/edu-sharing-ui/src/lib/directives/drag-nodes/nodes-drag-source.directive.ts","../../../projects/edu-sharing-ui/src/lib/services/abstract/toast.service.ts","../../../projects/edu-sharing-ui/src/lib/services/nodes-drag-drop.service.ts","../../../projects/edu-sharing-ui/src/lib/directives/drag-nodes/nodes-drag.directive.ts","../../../projects/edu-sharing-ui/src/lib/directives/drag-nodes/nodes-drop-target.directive.ts","../../../projects/edu-sharing-ui/src/lib/util/duration-helper.ts","../../../projects/edu-sharing-ui/src/lib/list-items/format-duration.pipe.ts","../../../projects/edu-sharing-ui/src/lib/list-items/list-widget.ts","../../../projects/edu-sharing-ui/src/lib/types/accessibillity.ts","../../../projects/edu-sharing-ui/src/lib/services/accessibility.service.ts","../../../projects/edu-sharing-ui/src/lib/list-items/list-collection-info/list-collection-info.component.ts","../../../projects/edu-sharing-ui/src/lib/list-items/list-collection-info/list-collection-info.component.html","../../../projects/edu-sharing-ui/src/lib/list-items/list-counts/list-counts.component.ts","../../../projects/edu-sharing-ui/src/lib/list-items/list-counts/list-counts.component.html","../../../projects/edu-sharing-ui/src/lib/list-items/list-node-license/list-node-license.component.ts","../../../projects/edu-sharing-ui/src/lib/list-items/list-node-license/list-node-license.component.html","../../../projects/edu-sharing-ui/src/lib/list-items/node-source.pipe.ts","../../../projects/edu-sharing-ui/src/lib/list-items/list-node-replication-source/list-node-replication-source.component.ts","../../../projects/edu-sharing-ui/src/lib/list-items/list-node-replication-source/list-node-replication-source.component.html","../../../projects/edu-sharing-ui/src/lib/list-items/list-node-workflow/list-node-workflow.component.ts","../../../projects/edu-sharing-ui/src/lib/list-items/list-node-workflow/list-node-workflow.component.html","../../../projects/edu-sharing-ui/src/lib/list-items/list-text/list-text.component.ts","../../../projects/edu-sharing-ui/src/lib/list-items/list-text/list-text.component.html","../../../projects/edu-sharing-ui/src/lib/list-items/available-widgets.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/node-entries-global.service.ts","../../../projects/edu-sharing-ui/src/lib/list-items/list-base/list-base.component.ts","../../../projects/edu-sharing-ui/src/lib/list-items/list-base/list-base.component.html","../../../projects/edu-sharing-ui/src/lib/list-items/node-row/node-row.component.ts","../../../projects/edu-sharing-ui/src/lib/list-items/node-row/node-row.component.html","../../../projects/edu-sharing-ui/src/lib/list-items/list-items.module.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/drag-preview/drag-preview.component.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/drag-preview/drag-preview.component.html","../../../projects/edu-sharing-ui/src/lib/types/injection-tokens.ts","../../../projects/edu-sharing-ui/src/lib/services/abstract/app.service.ts","../../../projects/edu-sharing-ui/src/lib/translations/translations.service.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/list-item-label.pipe.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/entries-model.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/items-cap.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/sort-select-panel/sort-select-panel.component.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/sort-select-panel/sort-select-panel.component.html","../../../projects/edu-sharing-ui/src/lib/node-entries/node-data-source.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/custom-templates-data-source.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/node-data-source-remote.ts","../../../projects/edu-sharing-ui/src/lib/services/node-entries.service.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/node-entries-templates.service.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/node-entries-table/column-chooser/column-chooser.component.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/node-entries-table/column-chooser/column-chooser.component.html","../../../projects/edu-sharing-ui/src/lib/util/color-helper.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/node-rating/node-rating.component.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/node-rating/node-rating.component.html","../../../projects/edu-sharing-ui/src/lib/node-entries/preview-image/preview-image.component.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/preview-image/preview-image.component.html","../../../projects/edu-sharing-ui/src/lib/node-entries/node-type-badge/node-type-badge.component.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/node-type-badge/node-type-badge.component.html","../../../projects/edu-sharing-ui/src/lib/node-entries/option-button/option-button.component.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/node-stats-badges/node-stats-badges.component.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/node-stats-badges/node-stats-badges.component.html","../../../projects/edu-sharing-ui/src/lib/node-entries/node-entries-card/node-entries-card.component.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/node-entries-card/node-entries-card.component.html","../../../projects/edu-sharing-ui/src/lib/node-entries/node-entries-card-small/node-entries-card-small.component.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/node-entries-card-small/node-entries-card-small.component.html","../../../projects/edu-sharing-ui/src/lib/node-entries/node-entries-global-options/node-entries-global-options.component.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/node-entries-global-options/node-entries-global-options.component.html","../../../projects/edu-sharing-ui/src/lib/node-entries/node-entries-card-grid/node-entries-card-grid.component.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/node-entries-card-grid/node-entries-card-grid.component.html","../../../projects/edu-sharing-ui/src/lib/node-entries/node-entries-table/node-entries-table.component.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/node-entries-table/node-entries-table.component.html","../../../projects/edu-sharing-ui/src/lib/services/temporary-storage.service.ts","../../../projects/edu-sharing-ui/src/lib/types/keyboard-shortcuts.ts","../../../projects/edu-sharing-ui/src/lib/services/local-events.service.ts","../../../projects/edu-sharing-ui/src/lib/services/abstract/keyboard-shortcuts.service.ts","../../../projects/edu-sharing-ui/src/lib/services/abstract/options-helper.service.ts","../../../projects/edu-sharing-ui/src/lib/services/options-helper-data.service.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/node-entries.component.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/node-entries.component.html","../../../projects/edu-sharing-ui/src/lib/node-entries/node-entries-wrapper.component.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/node-entries.module.ts","../../../projects/edu-sharing-ui/src/lib/edu-sharing-ui.module.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/combined-data-source.ts","../../../projects/edu-sharing-ui/src/lib/node-entries/node-cache.ts","../../../projects/edu-sharing-ui/src/lib/services/render-helper.service.ts","../../../projects/edu-sharing-ui/src/lib/translations/fallback-translation-handler.ts","../../../projects/edu-sharing-ui/src/lib/translations/translation-source.ts","../../../projects/edu-sharing-ui/src/lib/translations/translation-loader.ts","../../../projects/edu-sharing-ui/src/lib/translations/translations.module.ts","../../../projects/edu-sharing-ui/src/lib/services/search-helper.service.ts","../../../projects/edu-sharing-ui/src/lib/index.ts","../../../projects/edu-sharing-ui/src/ngx-edu-sharing-ui.ts"],"sourcesContent":["export class UIConstants {\n public static ROUTER_PREFIX = 'components/';\n public static ROUTER_PREFIX_SHORT = 'v/';\n // also declared in scss!\n public static MOBILE_WIDTH = 700;\n public static MOBILE_HEIGHT = 750;\n public static MOBILE_HEIGHT_WITH_KEYBOARD = 550;\n public static MOBILE_STAGE = 100;\n public static MOBILE_TAB_SWITCH_WIDTH = UIConstants.MOBILE_WIDTH + UIConstants.MOBILE_STAGE * 2;\n public static MEDIA_QUERY_MIN_WIDTH = 'min-width';\n public static MEDIA_QUERY_MAX_WIDTH = 'max-width';\n public static MEDIA_QUERY_MIN_HEIGHT = 'min-height';\n public static MEDIA_QUERY_MAX_HEIGHT = 'max-height';\n\n public static QUERY_PARAM_LIST_VIEW_TYPE = 'displayType';\n}\nexport enum OPEN_URL_MODE {\n Current, // Current Window, or In App browser on cordova\n Blank, // New Window, or In App browser on cordova\n BlankSystemBrowser, // New Window, or system browser on cordova\n}\n","import { Node, RestConstants } from 'ngx-edu-sharing-api';\n\n/**\n * Different helper functions, may be used globally\n */\nexport class RestHelper {\n protected static SPACES_STORE_REF = 'workspace://SpacesStore/';\n public static getName(node: Node): string {\n if (node.name) return node.name;\n if (node.properties?.[RestConstants.CM_NAME])\n return node.properties[RestConstants.CM_NAME].join();\n if (node.title) return node.title;\n if (node.ref) return node.ref.id;\n return null;\n }\n public static getTitle(node: Node): string {\n if (node?.title) return node.title;\n if (node?.name) {\n return node?.name;\n }\n if (node?.properties) {\n return RestHelper.getTitleFromProperties(node?.properties);\n }\n return '';\n }\n public static getTitleFromProperties(properties: any): string {\n const value = properties[RestConstants.LOM_PROP_TITLE]\n ? properties[RestConstants.LOM_PROP_TITLE]\n : properties[RestConstants.CM_NAME];\n if (Array.isArray(value)) {\n return value.join(', ');\n }\n return value;\n }\n\n public static hasAccessPermission(node: Node, permission: string): boolean {\n return node.access && node.access.indexOf(permission) != -1;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Pipe({\n name: 'formatSize',\n standalone: false,\n})\nexport class FormatSizePipe implements PipeTransform {\n constructor(private translate: TranslateService) {}\n\n transform(value: any, args: string[] = null): string {\n let names = ['bytes', 'KB', 'MB', 'GB', 'TB'];\n let i = 0;\n if (isNaN(value)) return value;\n if (value == null) value = 0;\n while (value >= 1024 && i < names.length) {\n value /= 1024;\n i++;\n }\n let options: Intl.NumberFormatOptions = {\n maximumFractionDigits: i > 1 ? 1 : 0,\n };\n let numberFormat = new Intl.NumberFormat([], options);\n return numberFormat.format(value) + ' ' + names[i];\n }\n}\n","/**\n * Created by Torsten on 28.02.2017.\n */\n\nexport class VCard {\n public static TYPE_PERSON = 0;\n public static TYPE_ORG = 1;\n // was the vcard altered\n private isDirty = false;\n private lines: string[];\n constructor(vcard: string = null) {\n if (vcard) {\n this.lines = vcard.split('\\n');\n // this.remove(\"FN\");\n if (!this.get('BEGIN')) {\n this.lines.splice(0, 0, 'BEGIN:VCARD');\n }\n if (!this.get('VERSION')) {\n this.lines.splice(1, 0, 'VERSION:3.0');\n }\n if (!this.get('END')) {\n this.lines.splice(this.lines.length, 0, 'END:VCARD');\n }\n this.isDirty = true;\n } else {\n this.lines = [];\n this.lines.push('BEGIN:VCARD');\n this.lines.push('VERSION:3.0');\n this.lines.push('END:VCARD');\n this.isDirty = false;\n }\n }\n\n /**\n * returns true if this vcard seems to have valid data\n * @param {string} data\n */\n public isValid() {\n // return this.lines!=null && this.lines.length;\n return (\n this.givenname ||\n this.surname ||\n this.org ||\n this.street ||\n this.city ||\n this.zip ||\n this.country\n );\n }\n public set givenname(data: string) {\n this.set('Givenname', data);\n }\n public set surname(data: string) {\n this.set('Surname', data);\n }\n public set title(data: string) {\n this.set('TITLE', data);\n }\n public set org(data: string) {\n this.set('ORG', data);\n }\n public set orgPhone(data: string) {\n this.set('TEL;TYPE=WORK,VOICE', data);\n }\n public set url(data: string) {\n this.set('URL', data);\n }\n public set email(data: string) {\n this.set('EMAIL;TYPE=PREF,INTERNET', data);\n }\n public set uid(data: string) {\n this.set('UID:urn:uuid', data);\n }\n public set orcid(data: string) {\n this.set('X-ORCID', data);\n }\n public set gnduri(data: string) {\n this.set('X-GND-URI', data);\n }\n public set ror(data: string) {\n this.set('X-ROR', data);\n }\n public set wikidata(data: string) {\n this.set('X-Wikidata', data);\n }\n public set street(data: string) {\n this.set('ADR;TYPE=intl,postal,parcel,work', data, 2);\n }\n public set city(data: string) {\n this.set('ADR;TYPE=intl,postal,parcel,work', data, 3);\n }\n public set region(data: string) {\n this.set('ADR;TYPE=intl,postal,parcel,work', data, 4);\n }\n public set zip(data: string) {\n this.set('ADR;TYPE=intl,postal,parcel,work', data, 5);\n }\n public set country(data: string) {\n this.set('ADR;TYPE=intl,postal,parcel,work', data, 6);\n }\n public set contributeDate(data: string) {\n this.set('X-ES-LOM-CONTRIBUTE-DATE', data);\n }\n public get givenname() {\n return this.get('Givenname');\n }\n public get surname() {\n return this.get('Surname');\n }\n public get orcid() {\n return this.get('X-ORCID');\n }\n public get gnduri() {\n return this.get('X-GND-URI');\n }\n public get ror() {\n return this.get('X-ROR');\n }\n public get wikidata() {\n return this.get('X-Wikidata');\n }\n public get title() {\n return this.get('TITLE');\n }\n public get org() {\n return this.get('ORG');\n }\n public get contributeDate() {\n const string = this.get('X-ES-LOM-CONTRIBUTE-DATE');\n if (string) return string.split('T')[0];\n return string;\n }\n public get url() {\n return this.get('URL');\n }\n public get orgPhone() {\n return this.get('TEL;TYPE=WORK,VOICE');\n }\n public get email() {\n return this.get('EMAIL;TYPE=PREF,INTERNET');\n }\n public get uid() {\n return this.get('UID:urn:uuid');\n }\n public get street() {\n return this.get('ADR;TYPE=intl,postal,parcel,work', 2);\n }\n public get city() {\n return this.get('ADR;TYPE=intl,postal,parcel,work', 3);\n }\n public get region() {\n return this.get('ADR;TYPE=intl,postal,parcel,work', 4);\n }\n public get zip() {\n return this.get('ADR;TYPE=intl,postal,parcel,work', 5);\n }\n public get country() {\n return this.get('ADR;TYPE=intl,postal,parcel,work', 6);\n }\n public toVCardString() {\n // unaltered -> so return a null value\n if (!this.isDirty) return null;\n if (this.get('Givenname') || this.get('Surname'))\n this.set('FN', this.get('Givenname', -1, '') + ' ' + this.get('Surname', -1, ''));\n return this.lines.join('\\n');\n }\n public getDisplayName() {\n const string =\n (this.title ?? '') + ' ' + (this.givenname ?? '') + ' ' + (this.surname ?? '');\n if (string.trim() === '') {\n return this.org || this.get('FN') || '';\n }\n return string;\n }\n public get(key: string, splitIndex = -1, fallback: string = null) {\n if (key == 'Surname') {\n splitIndex = 0;\n key = 'N';\n }\n if (key == 'Givenname') {\n splitIndex = 1;\n key = 'N';\n }\n for (let line of this.lines) {\n line = line.trim();\n if (line.startsWith(key + ':')) {\n const value = line.substring(key.length + 1).trim();\n if (splitIndex != -1) return this.deEscape(value.split(';')[splitIndex]);\n return this.deEscape(value);\n }\n }\n return fallback;\n }\n public remove(key: string) {\n for (let i = 0; i < this.lines.length; i++) {\n if (this.lines[i].startsWith(key + ':')) {\n this.lines.splice(i, 1);\n return true;\n }\n }\n return false;\n }\n public set(key: string, value: string, splitIndex = -1) {\n // no value and empty vcard -> do nothing\n if (!this.isDirty && !value) return;\n if (key == 'Surname') {\n splitIndex = 0;\n key = 'N';\n }\n if (key == 'Givenname') {\n splitIndex = 1;\n key = 'N';\n }\n let i = 0;\n for (let line of this.lines) {\n line = line.trim();\n if (line.startsWith(key + ':')) {\n let lineValue = line.substring(key.length + 1).trim();\n if (splitIndex != -1) {\n const split = lineValue.split(';');\n split[splitIndex] = this.escape(value);\n lineValue = split.join(';');\n } else {\n lineValue = this.escape(value);\n }\n this.lines[i] = line.substring(0, key.length + 1) + lineValue;\n return;\n }\n i++;\n }\n let lineValue = this.escape(value);\n if (splitIndex >= 0) {\n lineValue = '';\n while (lineValue.length < splitIndex) lineValue += ';';\n lineValue += this.escape(value);\n }\n this.lines.splice(this.getNextLine(), 0, key + ':' + lineValue);\n this.isDirty = true;\n }\n\n private getNextLine() {\n let i = 0;\n for (const line of this.lines) {\n if (line.trim() == 'END:VCARD') return i - 1;\n i++;\n }\n return this.lines.length - 1;\n }\n private deEscape(value: string) {\n if (value == null) return '';\n return value.replace(/\\\\\\\\/g, '\\\\').replace(/\\\\,/g, ',');\n }\n private escape(value: string) {\n if (value == null) return '';\n return value.replace(/\\\\/g, '\\\\\\\\').replace(/,/g, '\\\\,').replace(/;/g, ' ');\n }\n\n public copy() {\n return new VCard(this.toVCardString());\n }\n\n /**\n * Apply all data from an other vcard to this object\n * @param other\n */\n public apply(other: VCard) {\n this.lines = other.lines;\n }\n\n getType(): number {\n return this.isValid()\n ? this.givenname || this.surname\n ? VCard.TYPE_PERSON\n : VCard.TYPE_ORG\n : VCard.TYPE_PERSON;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { VCard } from '../util/VCard';\n\n@Pipe({\n name: 'vcardName',\n standalone: false,\n})\nexport class VCardNamePipe implements PipeTransform {\n constructor(private translate: TranslateService) {}\n transform(authority: string | string[], args: string[] = null): string {\n if (Array.isArray(authority)) {\n return authority\n .map((a) => (a ? new VCard(a).getDisplayName() : ''))\n .filter((s) => !!s)\n .join(', ');\n }\n return authority ? new VCard(authority).getDisplayName() : '';\n }\n}\n","/**\n * Copy paste from rxjs/util/isNumeric since importing it from there will trigger a warning about\n * CommonJS or AMD dependencies and indeed increase the bundle size a bit.\n */\n\n// From https://github.com/ReactiveX/rxjs/blob/6.x/src/internal/util/isArray.ts\nconst isArray = (() =>\n Array.isArray || (<T>(x: any): x is T[] => x && typeof x.length === 'number'))();\n\n// From https://github.com/ReactiveX/rxjs/blob/6.x/src/internal/util/isNumeric.ts\nexport function isNumeric(val: any): val is number | string {\n return !isArray(val) && val - parseFloat(val) + 1 >= 0;\n}\n","import { TranslateService } from '@ngx-translate/core';\nimport { isNumeric } from './isNumeric';\nexport enum RelativeMode {\n off,\n short,\n medium,\n large,\n all,\n}\nexport class FormatOptions {\n showDate? = true;\n showAlwaysTime? = false;\n showSeconds? = false;\n // @Deprecated\n // this will be mapped to relativeLabels = MEDIUM\n // use relativeLabels instead\n useRelativeLabels? = true;\n relativeLabels?: RelativeMode;\n}\n\nexport class DateHelper {\n /**\n * Fill a date (day + month) string, e.g. 2 -> 02\n * @param date\n * @returns {string}\n */\n private static fillDate(date: number): string {\n if (date < 10) return '0' + date;\n return date + '';\n }\n\n /**\n * Convert date to a unix timestamp\n * @param date\n * @returns {number}\n */\n public static convertDate(date: any) {\n return new Date(date).getTime();\n }\n\n /**\n * format a date with a given, fixed string\n * For consistency, we use the patterns from\n * https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html\n * @param date\n * @param {string} format\n * @returns {string}\n */\n public static formatDateByPattern(date: number | any, format: string): string {\n if (!isNumeric(date)) {\n return date;\n }\n let dateObject = new Date((date as number) * 1);\n format = format.replace('y', '' + dateObject.getFullYear());\n format = format.replace('M', '' + DateHelper.fillDate(dateObject.getMonth() + 1));\n format = format.replace('d', '' + DateHelper.fillDate(dateObject.getDate()));\n return format;\n }\n\n /**\n * Format a date for the current language\n */\n public static formatDate(\n translation: TranslateService,\n date: number | any,\n options: FormatOptions = new FormatOptions(),\n ): string {\n try {\n if (options.useRelativeLabels && !options.relativeLabels) {\n options.relativeLabels = RelativeMode.medium;\n }\n if (date == null) {\n return null;\n }\n if (!isNumeric(date)) {\n date = Date.parse(date);\n }\n let dateObject = new Date((date as number) * 1);\n let dateToday = new Date();\n let dateYesterday = new Date();\n dateYesterday.setDate(dateYesterday.getDate() - 1);\n let isToday = dateObject.toDateString() == dateToday.toDateString();\n let isYesterday = dateObject.toDateString() == dateYesterday.toDateString();\n let prefix = '';\n let timeDiff = (dateToday.getTime() - dateObject.getTime()) / 1000;\n let diffDays = Math.floor(timeDiff / (3600 * 24));\n let diffMonths = new Date(timeDiff * 1000).getMonth();\n let diffYears = new Date(timeDiff * 1000).getFullYear() - 1970;\n let addDate = true;\n let timeFormat = 'HH:mm';\n if (options.showSeconds) {\n timeFormat += ':ss';\n }\n if (timeDiff < 3600 * 6 && options.relativeLabels >= RelativeMode.short) {\n if (timeDiff < 90) {\n prefix = translation.instant('JUST_NOW', { seconds: timeDiff });\n } else if (timeDiff < 60 * 100) {\n prefix = translation.instant('MINUTES_AGO', {\n minutes: Math.round(timeDiff / 60),\n });\n } else {\n prefix = translation.instant('HOURS_AGO', {\n hours: Math.round(timeDiff / (60 * 60)),\n });\n }\n addDate = false;\n timeFormat = '';\n } else if (isToday && options.relativeLabels >= RelativeMode.short) {\n prefix = translation.instant('TODAY');\n addDate = false;\n } else if (isYesterday && options.relativeLabels >= RelativeMode.medium) {\n prefix = translation.instant('YESTERDAY');\n addDate = false;\n } else if (\n (diffDays < 6 && options.relativeLabels >= RelativeMode.medium) ||\n (diffDays < 45 && options.relativeLabels >= RelativeMode.large)\n ) {\n prefix = translation.instant('DAYS_AGO', { days: diffDays });\n addDate = false;\n if (!options.showAlwaysTime) timeFormat = '';\n } else if (\n diffYears === 0 &&\n diffMonths < 12 &&\n options.relativeLabels >= RelativeMode.large\n ) {\n prefix = translation.instant('MONTHS_AGO', { months: diffMonths });\n addDate = false;\n if (!options.showAlwaysTime) timeFormat = '';\n } else if (options.relativeLabels === RelativeMode.all) {\n prefix = translation.instant('YEARS_AGO', { years: diffYears });\n addDate = false;\n if (!options.showAlwaysTime) timeFormat = '';\n } else {\n if (!options.showAlwaysTime) timeFormat = '';\n }\n\n // ng2's dateformatter is super slow, but it doesn't matter, we just iterate it once :)\n //return dateFormat+time;\n let str = prefix;\n if (addDate) {\n if (translation.currentLang === 'en') {\n str +=\n dateObject.getFullYear() +\n '-' +\n DateHelper.fillDate(dateObject.getMonth() + 1) +\n '-' +\n DateHelper.fillDate(dateObject.getDate());\n } else {\n str +=\n DateHelper.fillDate(dateObject.getDate()) +\n '.' +\n DateHelper.fillDate(dateObject.getMonth() + 1) +\n '.' +\n dateObject.getFullYear();\n }\n //str += DateFormatter.format(dateObject, Translation.getLanguage(), dateFormat).trim();\n }\n if (options.showDate == false) {\n str = '';\n }\n // ie fixes, timeFormat not working\n if (timeFormat) {\n if (str) str += ', ';\n\n //let timeValue=dateObject.toLocaleTimeString(Translation.getLanguage());\n //let times=timeValue.split(\":\");\n str += timeFormat\n .replace('HH', DateHelper.fillDate(dateObject.getHours()))\n .replace('mm', DateHelper.fillDate(dateObject.getMinutes()))\n .replace('ss', DateHelper.fillDate(dateObject.getSeconds()));\n }\n return str;\n /*\n let dateString=prefix+\" \";\n if(dateFormat!=\"\"){\n dateString+=dateObject.toLocaleDateString(Translation.getLanguage())+\" \";\n }\n if(time!=\"\"){\n dateString+=dateObject.toLocaleTimeString(Translation.getLanguage());\n }\n return dateString;\n */\n } catch (e) {\n return date as any;\n }\n }\n static getDateFromDatepicker(date: Date) {\n return new Date(date.getTime() - date.getTimezoneOffset() * 60 * 1000);\n }\n\n static getDateForNewFile() {\n return DateHelper.formatDate(null, new Date().getTime(), {\n showAlwaysTime: true,\n useRelativeLabels: false,\n });\n }\n}\n","import { ElementRef, Injectable, QueryList, ViewChildren } from '@angular/core';\nimport { MdsDefinition, MdsWidget } from 'ngx-edu-sharing-api';\nimport { BehaviorSubject } from 'rxjs';\nimport { Values } from '../services/search-helper.service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { DatePipe } from '@angular/common';\nimport { FormatSizePipe } from '../pipes/file-size.pipe';\nimport { VCardNamePipe } from '../pipes/vcard-name.pipe';\nimport { DateHelper } from '../util/DateHelper';\n\n@Injectable()\nexport class MdsViewerService {\n @ViewChildren('container') container: QueryList<ElementRef>;\n values$ = new BehaviorSubject<Values>(undefined);\n mds$ = new BehaviorSubject<MdsDefinition>(undefined);\n constructor(private translate: TranslateService) {}\n getFormattedValue(value: string[], definition: MdsWidget, basicType: string): string[] {\n switch (basicType) {\n case 'date':\n return this.formatDate(value, definition);\n case 'text':\n return this.formatText(value, definition);\n case 'number':\n return this.formatNumber(value, definition);\n case 'vcard':\n return this.formatVCard(value);\n }\n return value;\n }\n\n private formatVCard(value: string[]): string[] {\n return value.map((v) => {\n return new VCardNamePipe(this.translate).transform(v);\n });\n }\n\n private formatDate(value: string[], definition: MdsWidget): string[] {\n return value.map((v) => {\n if (definition.format) {\n try {\n return new DatePipe('en-US').transform(v, definition.format);\n } catch (e) {\n console.warn('Could not format date', e, definition);\n }\n }\n return DateHelper.formatDate(this.translate, v, { showAlwaysTime: true });\n });\n }\n\n private formatText(value: string[], definition: MdsWidget): string[] {\n return value.map((v) => {\n if (definition.format) {\n return definition.format.replace('${value}', v);\n }\n return v;\n });\n }\n\n private formatNumber(value: string[], definition: MdsWidget): string[] {\n return value.map((value) => {\n if (definition.format === 'bytes') {\n return new FormatSizePipe(this.translate).transform(value);\n }\n return value;\n });\n }\n\n /**\n * returns the basic type for a widget definition\n * @param flat (flatten trees?)\n */\n static getBasicType(definition: MdsWidget, flat: boolean = true): string {\n switch (definition?.id) {\n case 'license':\n return 'license';\n }\n switch (definition?.type) {\n case 'text':\n case 'email':\n case 'month':\n case 'color':\n case 'textarea':\n case 'singleoption':\n case 'radioVertical':\n case 'radioHorizontal':\n return 'text';\n case 'number':\n return 'number';\n case 'date':\n return 'date';\n case 'vcard':\n return 'vcard';\n case 'multivalueFixedBadges':\n case 'multivalueSuggestBadges':\n case 'singlevalueSuggestBadges':\n case 'multivalueBadges':\n case 'singlevalueTree':\n case 'multivalueTree':\n return flat ? 'array' : 'tree';\n case 'slider':\n return 'slider';\n case 'duration':\n return 'duration';\n case 'range':\n return 'range';\n }\n return 'unknown';\n }\n}\n","import { BehaviorSubject } from 'rxjs';\nimport { Node } from 'ngx-edu-sharing-api';\nimport { Values } from '../services/search-helper.service';\n\nexport type EditorMode =\n | 'nodes'\n | 'search'\n | 'form'\n | 'inline'\n | 'viewer'\n | 'searchFacetSuggestion';\n\nexport abstract class MdsEditorInstanceServiceAbstract {\n mdsId: string;\n editorMode: EditorMode;\n /** Current values (if not in node mode) */\n values$ = new BehaviorSubject<Values>(null);\n /** Nodes with updated and complete metadata. */\n nodes$ = new BehaviorSubject<Node[]>(null);\n\n // Mutable state\n shouldShowExtendedWidgets$ = new BehaviorSubject(false);\n\n abstract saveWidgetValue(widget: any): Promise<void>;\n\n abstract fetchDisplayValues(widget: any, additionalKeys?: string[]): Promise<void>;\n}\n","import {\n ComponentFactoryResolver,\n ComponentRef,\n EmbeddedViewRef,\n Injectable,\n Injector,\n NgZone,\n Type,\n ViewContainerRef,\n} from '@angular/core';\nimport * as rxjs from 'rxjs';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { UIConstants } from '../util/ui-constants';\nimport { OptionItem } from '../types/option-item';\nimport { distinctUntilChanged, map } from 'rxjs/operators';\nimport { Node } from 'ngx-edu-sharing-api';\n\n@Injectable({ providedIn: 'root' })\nexport class UIService {\n isTouchSubject = new BehaviorSubject(false);\n private metaKeyPressedSubject = new BehaviorSubject(false);\n private shiftKeyPressedSubject = new BehaviorSubject(false);\n private ctrlKeyPressedSubject = new BehaviorSubject(false);\n\n get shiftKeyPressed() {\n return this.shiftKeyPressedSubject.value;\n }\n\n constructor(\n protected componentFactoryResolver: ComponentFactoryResolver,\n protected injector: Injector,\n protected ngZone: NgZone,\n ) {\n // HostListener not working, so use window\n this.ngZone.runOutsideAngular(() => {\n window.addEventListener('keydown', (event) => {\n this.onKeyDownOrKeyUp(event);\n });\n window.addEventListener('keyup', (event) => {\n this.onKeyDownOrKeyUp(event);\n });\n window.addEventListener('pointerdown', (event) => {\n // Usually, properties for modifier keys will be set correctly on keydown and keyup\n // events, but there are situations where the operating system intercepts key\n // presses, e.g. the Windows key on Linux systems, so we update again on mouse\n // clicks to be sure.\n this.updateModifierKeys(event);\n });\n window.addEventListener('pointerdown', (event) => {\n // Usually, properties for modifier keys will be set correctly on keydown and keyup\n // events, but there are situations where the operating system intercepts key\n // presses, e.g. the Windows key on Linux systems, so we update again on mouse\n // clicks to be sure.\n const isTouch = (event as PointerEvent).pointerType === 'touch';\n if (this.isTouchSubject.value !== isTouch) {\n this.ngZone.run(() => this.isTouchSubject.next(isTouch));\n }\n });\n });\n }\n private onKeyDownOrKeyUp(event: KeyboardEvent) {\n // `event.metaKey` is not consistent across browsers on the actual keypress of the modifier\n // key. So we handle these events separately.\n if (event.key === 'Control') {\n this.ctrlKeyPressedSubject.next(event.type === 'keydown');\n } else if (event.key === 'Shift') {\n this.shiftKeyPressedSubject.next(event.type === 'keydown');\n } else if (event.key === 'Meta') {\n this.metaKeyPressedSubject.next(event.type === 'keydown');\n } else {\n // In case we miss modifier events because the browser didn't have focus during the\n // event, we update modifier keys on unrelated key events as well.\n this.updateModifierKeys(event);\n }\n }\n\n private updateModifierKeys(event: PointerEvent | KeyboardEvent) {\n this.metaKeyPressedSubject.next(event.metaKey);\n this.shiftKeyPressedSubject.next(event.shiftKey);\n this.ctrlKeyPressedSubject.next(event.ctrlKey);\n }\n\n observeCtrlOrCmdKeyPressedOutsideZone(): Observable<boolean> {\n return rxjs.combineLatest([this.metaKeyPressedSubject, this.ctrlKeyPressedSubject]).pipe(\n map(([metaKeyPressed, ctrlKeyPressed]) => metaKeyPressed || ctrlKeyPressed),\n distinctUntilChanged(),\n );\n }\n\n /**\n * @Deprecated\n * Prefer to subscribe to the isTouchSubject directly if viable\n *\n * Returns true if the current sessions seems to be running on a mobile device\n */\n public isMobile() {\n return this.isTouchSubject.value;\n }\n public static evaluateMediaQuery(type: string, value: number) {\n if (type == UIConstants.MEDIA_QUERY_MAX_WIDTH) return value > window.innerWidth;\n if (type == UIConstants.MEDIA_QUERY_MIN_WIDTH) return value < window.innerWidth;\n if (type == UIConstants.MEDIA_QUERY_MAX_HEIGHT) return value > window.innerHeight;\n if (type == UIConstants.MEDIA_QUERY_MIN_HEIGHT) return value < window.innerHeight;\n console.warn('Unsupported media query ' + type);\n return true;\n }\n filterValidOptions(options: OptionItem[]) {\n if (options == null) return null;\n options = options.filter((value) => value != null);\n let optionsFiltered: OptionItem[] = [];\n for (let option of options) {\n if (\n (!option.onlyMobile || (option.onlyMobile && this.isMobile())) &&\n (!option.onlyDesktop || (option.onlyDesktop && !this.isMobile())) &&\n (!option.mediaQueryType ||\n (option.mediaQueryType &&\n UIService.evaluateMediaQuery(\n option.mediaQueryType,\n option.mediaQueryValue,\n )))\n )\n optionsFiltered.push(option);\n }\n return optionsFiltered;\n }\n\n /**\n * helper that updates the \"isEnabled\" flag on all options for the given, selected node\n * can be used by dropdown or action menus to update the state for the current element\n * @param options\n */\n async updateOptionEnabledState(options: BehaviorSubject<OptionItem[]>, objects: Node[] = null) {\n options.value?.forEach((o) => {\n o.isEnabled = !o.customEnabledCallback;\n void o.enabledCallback(objects).then((result) => {\n o.isEnabled = result;\n options.next(options.value);\n });\n });\n options.next(options.value);\n }\n\n public filterToggleOptions(\n options: OptionItem[],\n toggle: boolean,\n togglePosition: 'before' | 'after' = 'after',\n ) {\n let result: OptionItem[] = [];\n for (let option of options) {\n if (\n (option.isToggle === toggle || (!toggle && !option.isToggle)) &&\n (!toggle || togglePosition === option.togglePosition)\n )\n result.push(option);\n }\n return result;\n }\n /**\n * dynamically inject an angular component into a regular html dom element\n * @param componentFactoryResolver The resolver service\n * @param viewContainerRef The viewContainerRef service\n * @param componentName The name of the angular component (e.g. SpinnerComponent)\n * @param targetElement The target element of the dom. If the element is null (not found), nothing is done\n * @param bindings Optional bindings (inputs & outputs) to the given component\n * @param delay Optional inflating delay in ms(some components may need some time to \"init\" the layout)\n * @param replace Whether to replace to previous `innerHTML` of `targetElement`\n * @param injector (to fetch templates for the component)\n */\n public injectAngularComponent<T>(\n viewContainerRef: ViewContainerRef,\n componentName: Type<T>,\n targetElement: Element,\n bindings: { [key: string]: any } = null,\n { delay = 0, replace = true } = {},\n injector?: Injector,\n ): ComponentRef<T> {\n if (targetElement == null) {\n return null;\n }\n const factory = this.componentFactoryResolver.resolveComponentFactory(componentName);\n const component: ComponentRef<T> = viewContainerRef.createComponent(\n factory,\n undefined,\n injector || this.injector,\n );\n if (bindings) {\n const instance: { [key: string]: any } = component.instance;\n for (const key in bindings) {\n const binding = bindings[key];\n if (binding instanceof Function) {\n // subscribe so callback can properly invoked\n instance[key].subscribe((value: any) => binding(value));\n } else {\n instance[key] = binding;\n // `ngOnChanges` won't be called on the component like this. Consider doing\n // something like this:\n // https://scm.edu-sharing.com/edu-sharing/projects/oeh-redaktion/ng-meta-widgets/-/blob/1603fb2dedadd3952401385bcbd91a4bd8407643/src/app/app.module.ts#L66-79\n }\n }\n }\n\n // 3. Get DOM element from component\n const domElem = (component.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n domElem.style.display = 'none';\n if (replace) {\n targetElement.innerHTML = null;\n }\n targetElement.appendChild(domElem);\n setTimeout(() => {\n domElem.style.display = null;\n }, delay);\n return component;\n }\n\n /**\n * returns true if the current browser is safari running\n */\n static isSafari() {\n return /AppleWebKit/.test(navigator.userAgent) && /Safari/.test(navigator.userAgent);\n }\n\n /**\n * dynamically inject an angular component into a regular html dom element\n * @param componentFactoryResolver The resolver service\n * @param viewContainerRef The viewContainerRef service\n * @param componentName The name of the angular component (e.g. SpinnerComponent)\n * @param targetElement The target element of the dom. If the element is null (not found), nothing is done\n * @param bindings Optional bindings (inputs & outputs) to the given component\n * @param delay Optional inflating delay in ms(some components may need some time to \"init\" the layout)\n * @param replace Whether to replace to previous `innerHTML` of `targetElement`\n * @param injector (to fetch templates for the component)\n */\n public static injectAngularComponent<T>(\n componentFactoryResolver: ComponentFactoryResolver,\n viewContainerRef: ViewContainerRef,\n componentName: Type<T>,\n targetElement: Element,\n bindings: { [key: string]: any } = null,\n { delay = 0, replace = true } = {},\n injector?: Injector,\n ): ComponentRef<T> {\n if (targetElement == null) {\n return null;\n }\n const factory = componentFactoryResolver.resolveComponentFactory(componentName);\n const component: ComponentRef<T> = viewContainerRef.createComponent(\n factory,\n undefined,\n injector,\n );\n if (bindings) {\n const instance: { [key: string]: any } = component.instance;\n for (const key in bindings) {\n const binding = bindings[key];\n if (binding instanceof Function) {\n // subscribe so callback can properly invoked\n instance[key].subscribe((value: any) => binding(value));\n } else {\n instance[key] = binding;\n // `ngOnChanges` won't be called on the component like this. Consider doing\n // something like this:\n // https://scm.edu-sharing.com/edu-sharing/projects/oeh-redaktion/ng-meta-widgets/-/blob/1603fb2dedadd3952401385bcbd91a4bd8407643/src/app/app.module.ts#L66-79\n }\n }\n }\n\n // 3. Get DOM element from component\n const domElem = (component.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n domElem.style.display = 'none';\n if (replace) {\n targetElement.innerHTML = null;\n }\n targetElement.appendChild(domElem);\n setTimeout(() => {\n domElem.style.display = null;\n }, delay);\n return component;\n }\n\n /**\n * smoothly scroll to the given child inside an element (The child will be placed around the first 1/3 of the parent's top)\n * @param child\n * @param element\n * @param smoothness\n */\n scrollSmoothElementToChild(child: Element, element: Element | 'auto' = 'auto', smoothness = 1) {\n let target: Element;\n if (element === 'auto') {\n let parent = child.parentElement;\n while (parent) {\n if (['scroll', 'auto'].includes(window.getComputedStyle(parent).overflowY)) {\n target = parent;\n break;\n }\n parent = parent.parentElement;\n }\n } else {\n target = element;\n }\n // y equals to the top of the child + any scrolling of the parent - the top of the parent\n let y =\n child.getBoundingClientRect().top +\n target.scrollTop -\n target.getBoundingClientRect().top;\n // move the focused element to 1/3 at the top of the container\n y += child.getBoundingClientRect().height / 2 - target.getBoundingClientRect().height / 3;\n return this.scrollSmoothElement(y, target, smoothness);\n }\n /**\n * Smoothly scrolls to the given y offset inside an element (use offsetTop on the child to\n * determine this position).\n *\n * @param smoothness lower numbers indicate less smoothness, higher more smoothness\n */\n scrollSmoothElement(pos: number = 0, element: Element, smoothness = 1, axis = 'y') {\n return new Promise<void>((resolve) => {\n this.ngZone.runOutsideAngular(() => {\n const currentPos = axis == 'x' ? element.scrollLeft : element.scrollTop;\n if (element.getAttribute('data-is-scrolling') == 'true') {\n return;\n }\n const mode = currentPos > pos;\n let lastPos = pos;\n const maxPos =\n axis == 'x'\n ? element.scrollWidth - element.clientWidth\n : element.scrollHeight - element.clientHeight;\n let limitReached = false;\n if (mode && pos <= 0) {\n pos = 0;\n limitReached = true;\n }\n if (!mode && pos >= maxPos) {\n pos = maxPos;\n limitReached = true;\n }\n let speed = 16;\n let last = new Date().getTime();\n const callback = () => {\n let currentPos = axis == 'x' ? element.scrollLeft : element.scrollTop;\n const posDiff = currentPos - lastPos;\n const speedFactor = speed / 16;\n const divider = (3 / speedFactor) * smoothness;\n const minSpeed = (5 * speedFactor) / smoothness;\n const maxSpeed = (50 * speedFactor) / smoothness;\n lastPos = currentPos;\n let finished = true;\n if (currentPos > pos) {\n currentPos -= Math.min(\n maxSpeed,\n Math.max((currentPos - pos) / divider, minSpeed),\n );\n finished = currentPos <= pos;\n } else if (currentPos < pos && !mode) {\n currentPos += Math.min(\n maxSpeed,\n Math.max((pos - currentPos) / divider, minSpeed),\n );\n finished = currentPos >= pos;\n }\n if (finished) {\n currentPos = pos;\n }\n\n if (axis == 'x') {\n element.scrollLeft = currentPos;\n } else {\n element.scrollTop = currentPos;\n }\n if (finished) {\n element.removeAttribute('data-is-scrolling');\n resolve();\n } else {\n speed = new Date().getTime() - last;\n last = new Date().getTime();\n window.requestAnimationFrame(callback);\n }\n };\n window.requestAnimationFrame(callback);\n\n element.setAttribute('data-is-scrolling', 'true');\n });\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable()\nexport class ViewInstanceService {\n readonly isExpanded$ = new BehaviorSubject(true);\n /**\n * The heading level from 1 to 6 to use for widget labels, equivalent to `h1` to `h6`.\n *\n * If not set, widget labels are not marked as headings and an invisible colon is added between\n * labels and values, that will be read out by screen readers.\n */\n headingLevel: number | null = null;\n /**\n * how to display tree entries\n * flat (only display the last entry)\n * full (display the full tree path)\n */\n treeDisplay: 'flat' | 'path' = 'flat';\n}\n","export interface WorkflowDefinition {\n id: string;\n color: string;\n hasReceiver: boolean;\n next: string[];\n}\n\nexport const WORKFLOW_STATUS_UNCHECKED: WorkflowDefinition = {\n id: '100_unchecked',\n color: '#539DD5',\n hasReceiver: true,\n next: null,\n};\nexport const WORKFLOW_STATUS_TO_CHECK: WorkflowDefinition = {\n id: '200_tocheck',\n color: '#3CB0B0',\n hasReceiver: true,\n next: null,\n};\nexport const WORKFLOW_STATUS_HASFLAWS: WorkflowDefinition = {\n id: '300_hasflaws',\n color: '#D58553',\n hasReceiver: true,\n next: null,\n};\nexport const WORKFLOW_STATUS_CHECKED: WorkflowDefinition = {\n id: '400_checked',\n color: '#42A053',\n hasReceiver: false,\n next: null,\n};\nexport type WorkflowDefinitionStatus = {\n current: WorkflowDefinition;\n initial: WorkflowDefinition;\n};\n","/**\n * A option from the actionbar+dropdown menu\n * Example:\n this.options.push(new OptionItem(\"RESTORE_SINGLE\",\"undo\", (node) => this.restoreSingle(node)));\n this.options.push(new OptionItem(\"DELETE_SINGLE\",\"archiveDelete\", (node) => this.deleteSingle(node)));\n\n */\nimport { KeyboardShortcutCondition } from '../types/keyboard-shortcuts';\nimport { Node } from 'ngx-edu-sharing-api';\n\nexport enum NodesRightMode {\n // rights on the current node, no matter if its a reference or origianl\n Local,\n // effective rights on the current node, only relevant for collection references (for non-refs, this equals to local)\n Effective,\n}\nexport class OptionItem {\n /**\n * If true, this option will be shown all the time in the node table\n * @type {boolean}\n */\n public showAlways = false;\n /**\n * If true, this option will be shown as an action (if room). If none of the items has showAsAction set, the first items will always be shown as action\n * @type {boolean}\n */\n public showAsAction = false;\n /**\n * If true, this option will be shown as a toggle on the right side (provide iconToggle as a toggle icon)\n * @type {boolean}\n */\n public isToggle = false;\n /**\n * toggle type. Default is a flat, grayish\n * primary is a primary colored button with label (if space is available)\n */\n public toggleType: 'default' | 'primary' = 'default';\n /**\n * Only when @isToggle. is the toggle currently visible\n */\n public isToggleVisible = true;\n /**\n * Only when @isToggle. Where to place the toggle, before or after all other actions\n * @type {boolean}\n */\n public togglePosition: 'before' | 'after' = 'after';\n /**\n * If true, shows a line at the top.\n *\n * This feature is usually handled now by associating an entry to a `group`\n * now. However `isSeparate` is kept as fallback for now.\n */\n public isSeparate = false;\n /**\n * The item will be indicated with an accent color in the menu.\n *\n * Used by the dropdown variant of the main menu to indicate the currently\n * active scope.\n */\n public isSelected = false;\n /**\n * If true, only displayed on a mobile device (based on the navigator agent)\n * @type {boolean}\n */\n public onlyMobile = false;\n /**\n * custom aria-label\n * @type {string}\n */\n public ariaLabel = '';\n /**\n * If true, only displayed on a desktop device (based on the navigator agent)\n * @type {boolean}\n */\n public onlyDesktop = false;\n /**\n * You can set a media-query similar to CSS, see the MEDIA_QUERY constants in ui-constants\n * Use in combination with mediaQueryValue\n * @type {boolean}\n */\n public mediaQueryType: string;\n /**\n * The value for the defined media query\n */\n public mediaQueryValue: number;\n\n /**\n * Set to false if the action should be shown, but should not be clickable\n * @type {boolean}\n */\n public isEnabled = true;\n\n /**\n * Whether the option should be manually marked as primary action when always visible on an\n * `actionbar`.\n */\n public isPrimary: boolean;\n\n /**\n * A function called with the node as param which should return true or false if the option should be shown for this node\n * Is handled by optionsHelper and may not be used otherwise\n * Please use @customShowCallback instead\n */\n public showCallback: (nodes?: Node[]) => Promise<boolean>;\n /**\n * A function called with the node as parm which should return true or false if the option should be shown for this node\n * Will be called by the optionsHelper\n */\n public customShowCallback: (nodes?: Node[] | any[]) => Promise<boolean>;\n /**\n * A function called with the node as param which should return true or false if the option should be enabled or not\n * Is handled by optionsHelper and may not be used otherwise\n * Please use @customEnabledCallback instead\n */\n public enabledCallback: (nodes?: Node[]) => Promise<boolean>;\n /**\n * A function called with the node as param which should return true or false if the option should be enabled or not\n * Will be called by the optionsHelper\n */\n public customEnabledCallback: (nodes?: Node[] | any[]) => Promise<boolean>;\n\n /**\n * Optional: A callback that is called when the user clicks on the option when it's currently disabled (greyed out)\n */\n public disabledCallback: (node?: Node | any) => void;\n /**\n * Show the given name (if false, only icon will show)\n */\n public showName = true;\n\n /**\n * element with 0 has highest priority in it's group, higher values mean lower priority\n */\n public priority: number;\n /**\n * the group this option belongs to\n */\n public group: OptionGroup;\n\n public keyboardShortcut: KeyboardShortcutCondition;\n\n /**\n * Or concat of supported element types for the action\n */\n public elementType = [ElementType.Node];\n public permissions: string[];\n public constrains: Constrain[];\n public permissionsMode = HideMode.Disable;\n public permissionsRightMode = NodesRightMode.Local;\n public toolpermissions: string[];\n public toolpermissionsMode = HideMode.Disable;\n public scopes: Scope[];\n\n /**\n *\n * @param name the option name, which is used for the translation\n * @param icon A material icon name\n * @param callback A function callback when this option is chosen. Will get the current node\n * passed as an argument. If available, the relevant nodes are passed as second argument,\n * i.e., the selection, if any, or the current node as single-item array otherwise.\n */\n constructor(\n public name: string,\n public icon: string,\n // TODO: Maybe switch to only providing the second parameter.\n public callback: (object?: Node | any, objects?: (Node | any)[]) => void,\n ) {}\n}\nexport class CustomOptions {\n /**\n * If true, all existing or available options for the object stay\n * If false, no options will be set, only the options in \"addOptions\" are used\n */\n public useDefaultOptions? = true;\n /**\n * List of ids of options to explicitly support\n */\n public supportedOptions?: string[];\n /**\n * List of ids of options to explicitly remove\n * Only supported if supportedOptions is empty\n */\n public removeOptions?: string[];\n /**\n * Options to add/insert into the menu\n */\n public addOptions?: OptionItem[];\n}\nexport enum HideMode {\n Disable,\n Hide,\n}\nexport enum Scope {\n Render = 'Render',\n Search = 'Search',\n SearchCollections = 'SearchCollections',\n SavedSearches = 'SavedSearches',\n CollectionsReferences = 'CollectionsReferences',\n CollectionsProposals = 'CollectionsProposals',\n CollectionsCollection = 'CollectionsCollection',\n WorkspaceList = 'WorkspaceList',\n WorkspaceTree = 'WorkspaceTree',\n Sharing = 'Sharing',\n Oer = 'Oer',\n UserManagement = 'UserManagement',\n UserProfile = 'UserProfile',\n Stream = 'Stream',\n CreateMenu = 'CreateMenu',\n\n MediacenterNodesList = 'MediacenterNodesList',\n Admin = 'Admin', // Admin Tools / Debugging\n DebugShowAll = 'DebugShowAll', // Full debug mode which enables all options\n}\nexport enum ElementType {\n Node,\n NodeChild, // Child object\n MapRef, // Map ref (link to another map)\n NodePublishedCopy,\n NodeRevoked, // revoked copy / revoked published node\n NodeBlockedImport, // node with property ccm:importblocked == true\n NodeProposal, // node proposal for a collection\n Person,\n Group,\n SavedSearch,\n Unknown,\n}\nexport class OptionGroup {\n /**\n * @param id The group identifier. Used to seperate elements based on the group\n * @param priority Group with 0 has highest priority, higher values mean lower priority\n */\n constructor(public id: string, public priority: number) {}\n}\nexport class DefaultGroups {\n static Primary = new OptionGroup('Primary', 10);\n static Create = new OptionGroup('Create', 15);\n static View = new OptionGroup('View', 20);\n static CreateConnector = new OptionGroup('CreateConnector', 25);\n static CreateLtiTools = new OptionGroup('CreateLtiTools', 28);\n static Reuse = new OptionGroup('Reuse', 30);\n static Edit = new OptionGroup('Edit', 40);\n static FileOperations = new OptionGroup('FileOperations', 50);\n static Delete = new OptionGroup('Delete', 60);\n static Toggles = new OptionGroup('Toggles', 70);\n}\nexport enum Constrain {\n CollectionReference, // option is only visible for collection references\n NoCollectionReference, // option is only visible for non-collection references\n Directory, // only visible for directories (ccm:map)\n Collections, // only visible for collections\n Files, // only visible for files (ccm:io)\n FilesAndDirectories, // only visible for files and directories (ccm:io / ccm:map) - no collections!\n Admin, // only visible if user is admin or esDebug is enabled on window component\n AdminOrDebug, // only visible if user is admin or esDebug is enabled on window component\n NoBulk, // No support for bulk (multiple objects)\n NoSelection, // Only visible when currently no element is selected\n ClipboardContent, // Only visible when the clipboard has content\n AddObjects, // Only visible when it is possible to add objects into the current list\n HomeRepository, // Only visible when the nodes are from the local (home) repository\n GuestOrNotLoggedIn, // Only visible when a user is NOT present (guest or not logged in)\n User, // Only visible when a user is present and logged in\n NoScope, // Only visible when no current scope (i.e \"safe\" scope) is set\n ReurlMode, // Only visible when a reurl is present (called to pick object from lms)\n LTIMode, // Only visible when a lti session is present (called to pick object from lti platform)\n}\n\nexport enum Target {\n List, // Target is the ListTableComponent\n ListDropdown,\n Actionbar,\n CreateMenu,\n}\n","import { Injectable, InjectionToken, Provider } from '@angular/core';\n\nexport const EDU_SHARING_UI_CONFIG = new InjectionToken<EduSharingUiConfigurationParams>(\n 'EDU_SHARING_API_CONFIG',\n);\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EduSharingUiConfiguration {\n production: boolean;\n /**\n * Whether this Angular application is being used embedded as a web component by a third-party\n * web page.\n */\n isEmbedded = false;\n\n /**\n * A custom base path for the assets directory.\n *\n * This is useful when the application cannot be served from the base HREF set in index.html. This\n * is the case when it is embedded as a web component into another website.\n */\n assetsBasePath?: string;\n\n static create(params: EduSharingUiConfigurationParams = {}): EduSharingUiConfiguration {\n return { ...new EduSharingUiConfiguration(), ...params };\n }\n}\n\nexport type EduSharingUiConfigurationParams = Partial<EduSharingUiConfiguration>;\n\nexport function getConfigProvider(params?: EduSharingUiConfigurationParams): Provider[] {\n return [\n // Provide the params given to `forRoot()`. These can be overridden by the application by\n // providing `EDU_SHARING_API_CONFIG` itself.\n {\n provide: EDU_SHARING_UI_CONFIG,\n useValue: params,\n },\n // Inject `configuration` as both, `ApiConfiguration` and `EduSharingApiConfiguration`, to pass\n // `rootUrl` on to `ApiModule` while also adding our custom configuration.\n {\n provide: EduSharingUiConfiguration,\n deps: [EDU_SHARING_UI_CONFIG],\n // deps: [[new Optional(), EDU_SHARING_API_CONFIG]],\n useFactory: (configParams: EduSharingUiConfigurationParams) =>\n EduSharingUiConfiguration.create(configParams),\n },\n {\n provide: EduSharingUiConfiguration,\n deps: [EDU_SHARING_UI_CONFIG],\n // deps: [[new Optional(), EDU_SHARING_API_CONFIG]],\n useFactory: (configParams: EduSharingUiConfigurationParams) =>\n EduSharingUiConfiguration.create(configParams),\n },\n ];\n}\n","import { Injectable } from '@angular/core';\nimport { NetworkService, Node } from 'ngx-edu-sharing-api';\nimport { take } from 'rxjs/operators';\nimport { EduSharingUiConfiguration } from '../edu-sharing-ui-configuration';\n\n/**\n * Replaces absolute backend URLs with proxied URLs when in dev environment.\n *\n * This is needed for content that requires authentication, so the browser provides the required\n * session cookie with the request, or when accessing the dev server from another device.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class RepoUrlService {\n private constructor(\n private networkService: NetworkService,\n private configuration: EduSharingUiConfiguration,\n ) {}\n\n /**\n * Replaces the given URL if the given node belongs to the home repository.\n */\n async getRepoUrl(url: string, node: Node) {\n if (\n !this.configuration.production &&\n !this.configuration.isEmbedded &&\n (await this.networkService.isFromHomeRepository(node).pipe(take(1)).toPromise())\n ) {\n return this.withCurrentOrigin(url);\n } else {\n return url;\n }\n }\n\n /**\n * Replaces the given URL.\n *\n * The caller needs to make sure that the given URL belongs to the home repository.\n */\n withCurrentOrigin(url: string): string {\n const urlObject = new URL(url);\n urlObject.host = window.location.host;\n urlObject.protocol = window.location.protocol;\n return urlObject.href;\n }\n}\n","import { Injectable } from '@angular/core';\nimport {\n ApiHelpersService,\n ConfigService,\n NetworkService,\n Node,\n ProposalNode,\n RestConstants,\n User,\n} from 'ngx-edu-sharing-api';\nimport { TranslateService } from '@ngx-translate/core';\nimport * as Workflow from '../types/workflow';\nimport { RepoUrlService } from './repo-url.service';\nimport { Params } from '@angular/router';\nimport { UIConstants } from '../util/ui-constants';\nimport { of } from 'rxjs';\nimport { NodesRightMode } from '../types/option-item';\nimport { EduSharingUiConfiguration } from '../edu-sharing-ui-configuration';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NodeHelperService {\n readonly LICENSE_URLS = {\n CC_BY_ABOUT: 'https://creativecommons.org/licenses/list.{{language}}',\n CC_BY: 'https://creativecommons.org/licenses/by/{{version}}/{{locale}}deed.{{language}}',\n CC_BY_ND:\n 'https://creativecommons.org/licenses/by-nd/{{version}}/{{locale}}deed.{{language}}',\n CC_BY_SA:\n 'https://creativecommons.org/licenses/by-sa/{{version}}/{{locale}}deed.{{language}}',\n CC_BY_NC:\n 'https://creativecommons.org/licenses/by-nc/{{version}}/{{locale}}deed.{{language}}',\n CC_BY_NC_ND:\n 'https://creativecommons.org/licenses/by-nc-nd/{{version}}/{{locale}}deed.{{language}}',\n CC_BY_NC_SA:\n 'https://creativecommons.org/licenses/by-nc-sa/{{version}}/{{locale}}deed.{{language}}',\n CC_0: 'https://creativecommons.org/publicdomain/zero/1.0/legalcode.{{language}}',\n PDM: 'https://creativecommons.org/public-domain/pdm/',\n } as { [key: string]: string };\n constructor(\n protected translate: TranslateService,\n protected apiHelpersService: ApiHelpersService,\n protected networkService: NetworkService,\n protected configService: ConfigService,\n protected configuration: EduSharingUiConfiguration,\n protected repoUrlService: RepoUrlService,\n ) {}\n\n public getCollectionScopeInfo(node: Node): { icon: string; scopeName: string } {\n const scope = node.collection ? node.collection.scope : null;\n let icon = 'help';\n let scopeName = 'UNKNOWN';\n if (scope === RestConstants.COLLECTIONSCOPE_MY) {\n icon = 'lock';\n scopeName = 'MY';\n }\n if (\n scope === RestConstants.COLLECTIONSCOPE_ORGA ||\n scope === RestConstants.COLLECTIONSCOPE_CUSTOM\n ) {\n icon = 'group';\n scopeName = 'SHARED';\n }\n if (\n scope === RestConstants.COLLECTIONSCOPE_ALL ||\n scope === RestConstants.COLLECTIONSCOPE_CUSTOM_PUBLIC\n ) {\n icon = 'language';\n scopeName = 'PUBLIC';\n }\n if (node.collection?.type === RestConstants.COLLECTIONTYPE_EDITORIAL) {\n icon = 'star';\n scopeName = 'TYPE_EDITORIAL';\n }\n if (node.collection?.type === RestConstants.COLLECTIONTYPE_MEDIA_CENTER) {\n icon = 'business';\n scopeName = 'TYPE_MEDIA_CENTER';\n }\n return { icon, scopeName };\n }\n /**\n * Return the license icon of a node\n */\n async getLicenseIcon(node: Node): Promise<string> {\n // prefer manual mapping instead of backend data to support custom states from local edits\n const license = node.properties?.[RestConstants.CCM_PROP_LICENSE]?.[0];\n if (license) {\n return this.getLicenseIconByString(license);\n }\n return node.license ? this.repoUrlService.getRepoUrl(node.license.icon, node) : null;\n }\n\n /**\n * Get a license icon by using the property value string\n */\n public getLicenseIconByString(string: String, useNoneAsFallback = true): string {\n let icon = string.replace(/_/g, '-').toLowerCase();\n if (icon == '') icon = 'none';\n\n const LICENSE_ICONS = [\n 'cc-0',\n 'cc-by-nc',\n 'cc-by-nc-nd',\n 'cc-by-nc-sa',\n 'cc-by-nd',\n 'cc-by-sa',\n 'cc-by',\n 'copyright-free',\n 'copyright-license',\n 'custom',\n 'edu-nc-nd-noDo',\n 'edu-nc-nd',\n 'edu-p-nr-nd-noDo',\n 'edu-p-nr-nd',\n 'none',\n 'pdm',\n 'schulfunk',\n 'unterrichts-und-lehrmedien',\n ];\n if (LICENSE_ICONS.indexOf(icon) == -1 && !useNoneAsFallback) return null; // icon='none';\n if (icon == 'none' && !useNoneAsFallback) return null;\n const result =\n this.apiHelpersService.getServerUrl() + '/../ccimages/licenses/' + icon + '.svg';\n return result;\n }\n /**\n * Return a translated name of a license name for a node\n * @param node\n * @param translate\n * @returns {string|any|string|any|string|any|string|any|string|any|string}\n */\n public getLicenseName(node: Node) {\n let prop = node.properties[RestConstants.CCM_PROP_LICENSE]?.[0];\n if (!prop) prop = '';\n return this.getLicenseNameByString(prop);\n }\n\n /**\n * Return a translated name for a license string\n * @param string\n * @param translate\n * @returns {any}\n */\n public getLicenseNameByString(name: string) {\n if (name == '') {\n name = 'NONE';\n }\n return this.translate.instant('LICENSE.NAMES.' + name);\n // return name.replace(/_/g,\"-\");\n }\n\n /**\n * return the License URL (e.g. for CC_BY licenses) for a license string and version\n * @param licenseProperty\n * @param licenseVersion\n * @param licenseLocale\n */\n public getLicenseUrlByString(\n licenseProperty: string,\n licenseVersion: string,\n licenseLocale: string,\n ) {\n const isV4 = licenseVersion === '4.0';\n const locale = isV4 || !licenseLocale ? '' : licenseLocale.toLowerCase() + '/';\n const url = this.LICENSE_URLS[licenseProperty];\n if (!url) {\n return of(null);\n }\n return of(\n url\n .replace('{{version}}', licenseVersion)\n .replace('{{locale}}', locale)\n // use base language for de- special variants\n .replace('{{language}}', this.translate.currentLang?.split('-')?.[0] || 'en'),\n );\n }\n\n public getWorkflowStatusById(id: string) {\n const workflows = this.getWorkflows();\n return workflows.filter((w) => w.id === id)?.[0];\n }\n public getWorkflowStatus(node: Node, useFromConfig = false): Workflow.WorkflowDefinitionStatus {\n let value = node.properties[RestConstants.CCM_PROP_WF_STATUS]?.[0];\n if (!value) {\n return this.getDefaultWorkflowStatus(useFromConfig);\n }\n return {\n current: this.getWorkflowStatusById(value),\n initial: this.getWorkflowStatusById(value),\n };\n }\n getDefaultWorkflowStatus(useFromConfig = false): Workflow.WorkflowDefinitionStatus {\n const result = {\n current: null as Workflow.WorkflowDefinition,\n initial: null as Workflow.WorkflowDefinition,\n };\n result.initial = this.getWorkflows()[0];\n let defaultStatus: string = null;\n if (useFromConfig) {\n defaultStatus = this.configService.instant('workflow.defaultStatus');\n }\n if (defaultStatus) {\n result.current = this.getWorkflows().find((w) => w.id === defaultStatus);\n } else {\n result.current = result.initial;\n }\n return result;\n }\n getWorkflows(): Workflow.WorkflowDefinition[] {\n return this.configService.instant('workflow.workflows', [\n Workflow.WORKFLOW_STATUS_UNCHECKED,\n Workflow.WORKFLOW_STATUS_TO_CHECK,\n Workflow.WORKFLOW_STATUS_HASFLAWS,\n Workflow.WORKFLOW_STATUS_CHECKED,\n ]);\n }\n\n getFilenameWithoutExtension(filename: string) {\n if (filename === null) {\n return null;\n }\n const components = filename.split('.');\n if (components.length === 1) {\n return filename;\n }\n components.splice(components.length - 1, 1);\n return components.join('.');\n }\n copyDataToNode<T extends Node | User>(target: T, source: T) {\n target.properties = source.properties;\n (target as Node).name = (source as Node).name;\n (target as Node).title = (source as Node).title;\n (target as Node).iconURL = (source as Node).iconURL;\n (target as Node).preview = (source as Node).preview;\n (target as User).authorityName = (source as User).authorityName;\n (target as User).profile = (source as User).profile;\n (target as User).status = (source as User).status;\n }\n isNodeCollection(node: Node): boolean {\n return node.aspects?.includes(RestConstants.CCM_ASPECT_COLLECTION) || !!node.collection;\n }\n public getSourceIconPath(src: string) {\n return (\n (this.configuration.assetsBasePath ?? '') +\n 'assets/images/sources/' +\n src.toLowerCase() +\n '.png'\n );\n }\n\n getNodeLink(mode: 'routerLink' | 'queryParams', node: Node, short = false) {\n if (!node?.ref) {\n return null;\n }\n let data: { routerLink: string; queryParams: Params } = null;\n if (this.isNodeCollection(node)) {\n const scope = node.collection?.scope;\n const type = node.collection?.type;\n const queryParams: Params = {\n id: node.ref.id,\n };\n if (type === RestConstants.COLLECTIONTYPE_EDITORIAL) {\n queryParams.scope = RestConstants.COLLECTIONSCOPE_TYPE_EDITORIAL;\n } else if (type === RestConstants.COLLECTIONTYPE_MEDIA_CENTER) {\n queryParams.scope = RestConstants.COLLECTIONSCOPE_TYPE_MEDIA_CENTER;\n } else if (scope === RestConstants.COLLECTIONSCOPE_CUSTOM_PUBLIC) {\n queryParams.scope = RestConstants.COLLECTIONSCOPE_ALL;\n }\n data = {\n routerLink: UIConstants.ROUTER_PREFIX + 'collections',\n queryParams,\n };\n } else {\n if (node.isDirectory) {\n let path;\n if (\n node.properties?.[RestConstants.CCM_PROP_EDUSCOPENAME]?.[0] ===\n RestConstants.SAFE_SCOPE\n ) {\n path = UIConstants.ROUTER_PREFIX + 'workspace/safe';\n } else {\n path = UIConstants.ROUTER_PREFIX + 'workspace';\n }\n data = {\n routerLink: path,\n queryParams: { id: node.ref.id },\n };\n } else if (node.ref) {\n const fromHome = this.networkService.isFromHomeRepository(node);\n data = {\n routerLink: short\n ? UIConstants.ROUTER_PREFIX_SHORT + node.ref.id\n : UIConstants.ROUTER_PREFIX + 'render/' + node.ref.id,\n queryParams: {\n repository: fromHome ? null : node.ref.repo,\n proposal: (node as ProposalNode).proposal?.ref.id,\n proposalCollection: (node as ProposalNode).proposalCollection?.ref.id,\n },\n };\n }\n }\n if (data === null) {\n return '';\n }\n if (mode === 'routerLink') {\n return '/' + data.routerLink;\n }\n // enforce clearing of parameters which should only be consumed once\n data.queryParams.redirectFromSSO = null;\n return data.queryParams;\n }\n\n /**\n * Returns true if this node is a copy of another node, just used as a publish target.\n */\n isNodePublishedCopy(o: Node): boolean {\n return !!o.properties?.[RestConstants.CCM_PROP_PUBLISHED_ORIGINAL]?.[0];\n }\n\n /**\n * returns true if this is a revoked node\n * (published copy that has been revoked)\n */\n isNodeRevoked(node: Node) {\n return node?.aspects?.includes(RestConstants.CCM_ASPECT_REVOKED);\n }\n /**\n * returns true if all nodes have the requested right\n * mode (only works for collection refs):\n * Local: check only rights of the node itself\n * Effective: check only rights of the original node this refers to (collection ref). If it is not a collection ref, fallback to local\n */\n public getNodesRight(nodes: Node[], right: string, mode = NodesRightMode.Local) {\n if (nodes == null) return true;\n for (const node of nodes) {\n let currentMode = mode;\n // if no access effective present and not a collection ref. use the local data\n if (\n !node.aspects?.includes(RestConstants.CCM_ASPECT_IO_REFERENCE) &&\n !node.accessEffective?.length\n ) {\n currentMode = NodesRightMode.Local;\n }\n if (currentMode === NodesRightMode.Effective) {\n if (!node.aspects?.includes(RestConstants.CCM_ASPECT_IO_REFERENCE)) {\n if (node.accessEffective && node.accessEffective.indexOf(right) !== -1) {\n continue;\n }\n }\n if (node.accessEffective && node.accessEffective.indexOf(right) !== -1) {\n continue;\n }\n if (RestConstants.IMPLICIT_COLLECTION_PERMISSIONS.indexOf(right) === -1) {\n // permission not matched on original -> implicit permissions from collection may apply\n return false;\n }\n }\n // check regular node rights\n if (!node.access || node.access.indexOf(right) === -1) {\n return false;\n }\n }\n return true;\n }\n}\n","export function notNull<T>(value: T): boolean {\n return value !== undefined && value !== null;\n}\n\nexport function isTrue(value: boolean): boolean {\n return value ?? false;\n}\n\nexport function microTick(): Promise<void> {\n return Promise.resolve();\n}\n\nexport function macroTick(): Promise<void> {\n return new Promise((resolve) => setTimeout(() => resolve()));\n}\n","/**\n * Created by Torsten on 13.01.2017.\n */\n\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { HttpClient } from '@angular/common/http';\nimport {\n Directive,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Renderer2,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ConfigService } from 'ngx-edu-sharing-api';\nimport { BehaviorSubject, combineLatest, firstValueFrom } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { notNull } from '../util/functions';\n\ntype IconsConfig = Array<{\n original: string;\n context?: string;\n replace?: string;\n cssClass?: string;\n}>;\n\n/**\n * Replaces the element's content with an icon.\n *\n * Example: `<i esIcon=\"save\"></i>`\n *\n * Optionally, a translated `aria-label` can be attached by setting `aria` to a truthy value: `<i\n * esIcon=\"save\" aria=\"true\"></i>`. Otherwise, `aria-hidden` will be set.\n *\n * For backwards compatibility, the directive is also activated on elements that set\n * `class=\"material-icons\"`. This is mainly to set the `aria-hidden` attribute. Occurrences should\n * be updated to the syntax above.\n */\n@Directive({\n selector: 'i[esIcon], i.material-icons',\n standalone: false,\n})\nexport class IconDirective implements OnInit, OnDestroy {\n private originalId$ = new BehaviorSubject<string>(null);\n private iconContext$ = new BehaviorSubject<string>(null);\n private _id: string;\n private _aria: boolean;\n private altTextSpan: HTMLElement;\n private isReady = false;\n private svg: SVGSVGElement;\n\n /**\n * An alt text to show to screen readers.\n *\n * If omitted, the icon will be invisible to screen readers.\n *\n * @see https://material.angular.io/components/icon/overview#indicator-icons\n */\n @Input() set altText(altText: string) {\n this.setAltText(altText);\n }\n\n /** If true, an alt text (see above) will be set based on the icon. */\n @Input() set aria(aria: boolean) {\n aria = coerceBooleanProperty(aria);\n if (aria !== this._aria) {\n this._aria = aria;\n if (this.isReady) {\n this.updateAria();\n }\n }\n }\n\n @Input() set esIcon(id: string) {\n this.originalId$.next(id);\n }\n @Input() set esIconContext(context: string) {\n this.iconContext$.next(context);\n }\n\n constructor(\n private element: ElementRef<HTMLElement>,\n private http: HttpClient,\n private translate: TranslateService,\n private renderer: Renderer2,\n @Optional() private config: ConfigService,\n ) {\n combineLatest([\n this.originalId$.pipe(filter(notNull)),\n this.iconContext$,\n this.config.get('icons', null).catch((_) => Promise.resolve([])),\n ])\n .pipe(takeUntilDestroyed())\n .subscribe(([originalId, iconContext, iconsConfig]) =>\n this.setIcon(originalId, iconContext, iconsConfig),\n );\n }\n\n async ngOnInit() {\n this.isReady = true;\n this.element.nativeElement.setAttribute('aria-hidden', 'true');\n // Material styles expect icons to have the class `mat-icon`, e.g.,\n // https://github.com/angular/components/blob/ae0b9e1c1bae5e937d039ea53652fe1656bc4623/src/material/form-field/form-field.scss#L156\n this.element.nativeElement.classList.add('mat-icon');\n this.updateAria();\n }\n\n ngOnDestroy(): void {\n if (this.altTextSpan) {\n this.altTextSpan.remove();\n }\n }\n\n private async setIcon(id: string, context: string, iconsConfig: IconsConfig) {\n if (this._id) {\n this.element.nativeElement.classList.remove(\n 'edu-icons',\n 'custom-icons',\n 'material-icons',\n );\n if (this.svg) {\n this.renderer.removeChild(this.element.nativeElement, this.svg);\n }\n }\n if (id.startsWith('svg-')) {\n try {\n const iconName = id.slice(4);\n const fileName = iconName.endsWith('.svg') ? iconName : `${iconName}.svg`;\n const path = `assets/images/icons/${fileName}`;\n\n const svgText = await firstValueFrom(this.http.get(path, { responseType: 'text' }));\n\n if (!svgText) return;\n\n const parser = new DOMParser();\n const doc = parser.parseFromString(svgText, 'image/svg+xml');\n const svgElement = doc.querySelector('svg');\n\n if (!svgElement) {\n console.error('No SVG element found in the file');\n return;\n }\n\n svgElement.classList.add('svg-icons');\n this.svg = svgElement;\n\n this.renderer.appendChild(this.element.nativeElement, this.svg);\n\n if (this._aria) {\n this.updateAria();\n }\n\n return;\n } catch (error) {\n console.error('Error loading SVG:', error);\n return;\n }\n }\n let customClass: string = null;\n let mapping = null;\n if (context) {\n mapping = iconsConfig?.filter((i) => i.original === id && i.context === context);\n }\n if (!mapping?.length) {\n mapping = iconsConfig?.filter((i) => i.original === id && !i.context);\n }\n if (mapping?.length === 1) {\n id = mapping[0].replace || '';\n customClass = mapping[0].cssClass;\n }\n this._id = id;\n if (this._aria) {\n this.updateAria();\n }\n let cssClass: string;\n if (id?.startsWith('edu-') && !customClass) {\n cssClass = 'edu-icons';\n id = id.substring(4);\n } else if (id?.startsWith('custom-') || customClass) {\n cssClass = 'custom-icons';\n id = id.substring(7);\n } else {\n cssClass = 'material-icons';\n }\n this.element.nativeElement.classList.add(cssClass);\n if (customClass) {\n this.element.nativeElement.classList.add(customClass);\n }\n this.element.nativeElement.innerText = id;\n }\n\n private updateAria() {\n if (this._aria !== undefined) {\n if (this._aria && this._id) {\n this.translate.get('ICON_LABELS.' + this._id).subscribe((lang) => {\n this.setAltText(lang);\n });\n } else {\n this.setAltText(null);\n }\n }\n }\n\n private setAltText(altText: string): void {\n if (this.svg) {\n // for SVG elements, add aria-label instead\n this.svg.setAttribute('aria-label', altText);\n }\n if (altText && !this.altTextSpan) {\n this.insertAltTextSpan();\n }\n if (this.altTextSpan) {\n this.altTextSpan.innerText = altText;\n }\n }\n\n private insertAltTextSpan(): void {\n this.altTextSpan = document.createElement('span');\n this.altTextSpan.classList.add('cdk-visually-hidden');\n this.element.nativeElement.insertAdjacentElement('afterend', this.altTextSpan);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'appMdsDuration',\n standalone: false,\n})\nexport class MdsDurationPipe implements PipeTransform {\n transform(value: string): string {\n if (isNaN(Number(value)) || !value) {\n return '-';\n }\n const totalSeconds = Math.floor(parseInt(value) / 1000);\n const hours: number = Math.floor(totalSeconds / 3600);\n const minutes: number = Math.round((totalSeconds - hours * 3600) / 60);\n if (hours > 0) {\n return hours + 'h ' + minutes + 'm';\n }\n return minutes + 'm';\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n Injector,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n signal,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { MatRipple } from '@angular/material/core';\nimport { filter, first, map, takeUntil } from 'rxjs/operators';\nimport { MdsValue, MdsWidget, Node, RestConstants, Suggestion } from 'ngx-edu-sharing-api';\nimport { UIConstants } from '../../util/ui-constants';\nimport { UIService } from '../../services/ui.service';\nimport { ViewInstanceService } from '../view-instance.service';\nimport { RestHelper } from '../../util/rest-helper';\nimport { BehaviorSubject, of, Subject } from 'rxjs';\nimport { MdsViewerService } from '../mds-viewer.service';\nimport { Values } from '../../services/search-helper.service';\nimport { NodeHelperService } from '../../services/node-helper.service';\nimport { MdsEditorInstanceServiceAbstract } from '../mds-editor-instance-service.abstract';\n\nexport enum MdsType {\n Io = 'io',\n IoBulk = 'io_bulk',\n Map = 'map',\n MapRef = 'map_ref',\n IoChildObject = 'io_childobject',\n Collection = 'collection',\n ToolDefinition = 'tool_definition',\n ToolInstance = 'tool_instance',\n SavedSearch = 'saved_search',\n}\n\nexport interface MdsValueList {\n values: Suggestion[];\n}\nexport abstract class MdsViewerWidget {\n definition: MdsWidget;\n focusTrigger: Subject<void>;\n abstract getInitalValuesAsync(): Promise<InitialValues>;\n abstract getInitialDisplayValues(): BehaviorSubject<MdsValueList>;\n}\nexport enum MdsWidgetType {\n Text = 'text',\n Number = 'number',\n Email = 'email',\n Date = 'date',\n Month = 'month',\n Color = 'color',\n Textarea = 'textarea',\n TinyMCE = 'tinyMCE',\n VCard = 'vcard',\n Checkbox = 'checkbox',\n RadioHorizontal = 'radioHorizontal',\n RadioVertical = 'radioVertical',\n CheckboxHorizontal = 'checkboxHorizontal',\n CheckboxVertical = 'checkboxVertical',\n MultiValueBadges = 'multivalueBadges',\n MultiValueFixedBadges = 'multivalueFixedBadges',\n MultiValueSuggestBadges = 'multivalueSuggestBadges',\n MultiValueAuthorityBadges = 'multivalueAuthorityBadges',\n Singleoption = 'singleoption',\n Slider = 'slider',\n Range = 'range',\n Duration = 'duration',\n SingleValueTree = 'singlevalueTree',\n SingleValueSuggestBadges = 'singlevalueSuggestBadges',\n MultiValueTree = 'multivalueTree',\n DefaultValue = 'defaultvalue',\n FacetList = 'facetList',\n Toggle = 'toggle',\n}\n\nexport interface InitialValues {\n /** Values that are initially present in all nodes. */\n readonly jointValues: string[];\n /**\n * Values that are initially present in some but not all nodes.\n *\n * Can be null but will never be set to an empty array.\n */\n readonly individualValues?: string[];\n}\nexport enum ValueType {\n String,\n MultiValue,\n Range,\n}\n\n@Component({\n selector: 'es-mds-widget',\n templateUrl: 'mds-widget.component.html',\n styleUrls: ['mds-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.Default,\n standalone: false,\n})\nexport class MdsWidgetComponent implements OnInit, OnDestroy, OnChanges {\n readonly ROUTER_PREFIX = UIConstants.ROUTER_PREFIX;\n readonly focusTrigger = new Subject<void>();\n readonly destroyed$ = new Subject<void>();\n private static readonly inlineEditing: MdsWidgetType[] = [\n MdsWidgetType.Text,\n MdsWidgetType.Number,\n MdsWidgetType.Date,\n MdsWidgetType.Email,\n MdsWidgetType.Textarea,\n MdsWidgetType.Singleoption,\n MdsWidgetType.SingleValueTree,\n MdsWidgetType.SingleValueSuggestBadges,\n MdsWidgetType.MultiValueBadges,\n MdsWidgetType.MultiValueFixedBadges,\n MdsWidgetType.MultiValueSuggestBadges,\n MdsWidgetType.MultiValueTree,\n ];\n\n readonly valueType = ValueType.String;\n\n // use any instead of `Widget` cause of external type\n @Input() widget: MdsViewerWidget;\n @Input() showCaption = true;\n /**\n * allow inline editing\n */\n @Input() inlineEditing: 'auto' | 'always' = 'auto';\n @Input() definition: MdsWidget;\n // use any instead of MdsEditorViewComponent cause of external type\n @Input() view: any;\n\n @ViewChild('editWrapper') editWrapper: ElementRef;\n @ViewChild(MatRipple) matRipple: MatRipple;\n basicType = signal<string>(null);\n rawValue: { path: MdsValue[]; id: string }[];\n\n isEmpty = computed(() => {\n if (this.basicType() === 'license') {\n return false;\n }\n return this.value()?.every((v) => !v) || this.value()?.length === 0 || !this.value();\n });\n license$ = new BehaviorSubject<{ name: string; icon: string }>(null);\n\n get headingLevel() {\n return this.viewInstance.headingLevel;\n }\n\n value = signal<string[]>(undefined);\n private temporaryValue: string[] = undefined;\n\n constructor(\n @Optional() public mdsEditorInstance: MdsEditorInstanceServiceAbstract,\n public translate: TranslateService,\n private ui: UIService,\n private viewInstance: ViewInstanceService,\n private mdsViewerService: MdsViewerService,\n private injector: Injector,\n private nodeHelper: NodeHelperService,\n ) {\n // super(toast, null, translate);\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n async ngOnChanges(changes: SimpleChanges) {\n this.value.set(await this.getNodeValue());\n }\n\n async ngOnInit() {\n this.widget.focusTrigger?.pipe(takeUntil(this.destroyed$)).subscribe(async () => {\n await this.focus();\n this.startEdit();\n });\n this.value.set(await this.getNodeValue());\n this.widget\n .getInitialDisplayValues()\n .pipe(filter((v: MdsValueList) => !!v?.values))\n .subscribe(async (value: MdsValueList) => {\n this.value.set(value.values.map((v) => v.displayString));\n });\n this.basicType.set(\n MdsViewerService.getBasicType(\n this.getDefinition(),\n this.viewInstance.treeDisplay === 'flat',\n ),\n );\n this.rawValue = await this.getRawValue().toPromise();\n }\n\n getDefinition(): MdsWidget {\n return this.widget?.definition || this.definition;\n }\n\n supportsInlineEditing() {\n return MdsWidgetComponent.inlineEditing.includes(\n this.widget?.definition.type as MdsWidgetType,\n );\n }\n private getNodeValues() {\n if (this.mdsEditorInstance) {\n return (\n (this.mdsEditorInstance.values$.value as Values) ||\n this.mdsEditorInstance.nodes$.value.map((n: Node) => n.properties)?.[0]\n );\n } else {\n return this.mdsViewerService.values$.value;\n }\n }\n private async getNodeValue() {\n if (this.temporaryValue !== undefined) {\n return this.getValue(this.temporaryValue);\n }\n const id = this.getDefinition().id;\n const values = this.getNodeValues();\n if (\n MdsViewerService.getBasicType(\n this.definition,\n this.viewInstance.treeDisplay === 'flat',\n ) === 'license'\n ) {\n this.license$.next({\n icon: await this.nodeHelper.getLicenseIcon({\n properties: this.getNodeValues(),\n } as Node),\n name: this.nodeHelper.getLicenseName({ properties: this.getNodeValues() } as Node),\n });\n }\n if (this.getDefinition().type === 'range') {\n if (values) {\n return [values[id + '_from']?.[0], values[id + '_to']?.[0]];\n }\n return null;\n } else if (values?.[id]) {\n // support on the fly changes+updates of the values\n return this.getValue(values[id]);\n } else if ((await this.widget.getInitalValuesAsync())?.jointValues) {\n return (await this.widget.getInitalValuesAsync()).jointValues;\n } else {\n return null;\n }\n }\n\n getValue(data: string[]) {\n let value = data;\n if (!value || value.every((v) => !v)) {\n return null;\n }\n\n if (this.getDefinition().values) {\n const mapping = this.widget.definition.values\n .filter((v: any) => data.filter((d) => d === v.id).length > 0)\n .map((v: any) => v.caption);\n if (mapping) {\n return mapping;\n }\n }\n\n return data;\n }\n\n click() {\n if (this.getDefinition().link === '_BLANK') {\n window.open(\n this.mdsViewerService.getFormattedValue(\n this.value(),\n this.getDefinition(),\n 'text',\n )[0],\n );\n } else if (this.getDefinition().link === '_SELF') {\n window.location.href = this.mdsViewerService.getFormattedValue(\n this.value(),\n this.definition,\n 'text',\n )[0];\n } else {\n console.warn('Unsupported link type ' + this.getDefinition().link);\n }\n }\n\n formatValue(): string[] {\n return this.mdsViewerService.getFormattedValue(\n this.value(),\n this.widget.definition,\n MdsViewerService.getBasicType(\n this.widget.definition,\n this.viewInstance.treeDisplay === 'flat',\n ),\n );\n }\n\n // instance: MdsEditorWidgetBase\n async finishEdit(instance: any, store = false) {\n if (store) {\n await this.mdsEditorInstance.saveWidgetValue(instance.widget);\n }\n this.temporaryValue = instance.widget.getValue();\n this.value.set(await this.getNodeValue());\n this.editWrapper.nativeElement.children[0].innerHTML = null;\n await this.mdsEditorInstance.fetchDisplayValues(this.widget, this.value());\n }\n\n isEditable() {\n if (!this.mdsEditorInstance) {\n return false;\n }\n if (this.inlineEditing === 'always') {\n return this.supportsInlineEditing();\n }\n const nodes = this.mdsEditorInstance.nodes$.value;\n return (\n this.mdsEditorInstance.editorMode === 'inline' &&\n this.widget.definition.interactionType === 'Input' &&\n nodes?.length === 1 &&\n RestHelper.hasAccessPermission(nodes[0], RestConstants.ACCESS_WRITE) &&\n this.supportsInlineEditing()\n );\n }\n\n async focus() {\n // this.matRipple.launch({});\n await this.ui.scrollSmoothElementToChild(this.editWrapper.nativeElement);\n this.matRipple.launch({});\n //const result = await this.view.injectEditField(this, this.editWrapper.nativeElement.children[0]);\n //await this.ui.scrollSmoothElementToChild(result.htmlElement);\n }\n\n /**\n * return the path for a given value in a tree\n */\n private getPath(v: string) {\n if (!this.getDefinition().values) {\n return [\n {\n id: v,\n caption: v,\n },\n ];\n }\n const path: MdsValue[] = [];\n let pointer: string = v;\n for (let i = 0; i < 100; i++) {\n const mapped = this.getDefinition().values.find((w) => w.id === pointer);\n if (mapped) {\n path.push(mapped);\n pointer = mapped.parent;\n } else {\n break;\n }\n }\n return path.reverse();\n }\n\n /**\n * fetch the raw node value\n * Note: Will not work in a bulk state!\n */\n private getRawValue() {\n return (\n this.mdsEditorInstance?.nodes$.pipe(\n first(),\n map((v: Node[]) =>\n (v?.[0]?.properties[this.widget.definition.id] as string[])?.map((id) => {\n return {\n id,\n path: this.getPath(id),\n };\n }),\n ),\n ) || of(null)\n );\n }\n\n getSearchParams(key: MdsValue) {\n const params: any = {};\n const mds: { [key: string]: string[] } = {};\n mds[this.widget.definition.id] = [key.id];\n params.mds = this.mdsEditorInstance.mdsId;\n params.sidenav = true;\n params.repo = this.mdsEditorInstance.nodes$.value?.[0].ref.repo;\n params.filters = JSON.stringify(mds);\n return params;\n }\n\n startEdit(event?: MouseEvent) {\n event?.stopPropagation();\n void this.view.injectEditField(this, this.editWrapper.nativeElement.children[0]);\n }\n}\n","<es-mds-editor-widget-container\n *ngIf=\"!editWrapper.innerText.trim()\"\n [injectedView]=\"this\"\n [widget]=\"widget\"\n [label]=\"false\"\n [wrapInFormField]=\"false\"\n [wrapInGroup]=\"false\"\n [valueType]=\"valueType\"\n matRipple\n [matRippleDisabled]=\"true\"\n>\n <div class=\"edit-wrapper\">\n <div\n *ngIf=\"\n (!isEmpty() || !widget.definition.hideIfEmpty || isEditable()) &&\n (!widget.definition.isExtended ||\n !mdsEditorInstance ||\n (mdsEditorInstance?.shouldShowExtendedWidgets$ | async))\n \"\n class=\"widget-wrapper\"\n >\n <div\n class=\"widget-label\"\n [attr.role]=\"headingLevel ? 'heading' : null\"\n [attr.aria-level]=\"headingLevel\"\n *ngIf=\"widget.definition.caption && showCaption\"\n >\n {{ widget.definition.caption\n }}<span *ngIf=\"!headingLevel\" class=\"cdk-visually-hidden\">: </span>\n </div>\n <div\n class=\"value-wrapper\"\n [class.value-wrapper-edit]=\"isEditable()\"\n (click)=\"isEditable() ? startEdit($event) : null\"\n >\n <div *ngIf=\"isEmpty()\" class=\"widget-data widget-no-data widget-type-{{ basicType() }}\">\n -\n </div>\n <div\n *ngIf=\"!isEmpty()\"\n class=\"widget-data widget-type-{{ basicType() }} {{\n widget.definition.link ? 'widget-link' : ''\n }}\"\n (click)=\"click()\"\n >\n <div *ngIf=\"['text', 'number', 'date'].includes(basicType())\">{{ formatValue() }}</div>\n <div *ngIf=\"basicType() === 'license' && (license$ | async) as license\">\n <img alt=\"\" [src]=\"license.icon\" /> {{ license.name }}\n </div>\n <div *ngIf=\"basicType() === 'array'\">\n <div class=\"array-entry\" *ngFor=\"let v of value()\">{{ v }}</div>\n </div>\n <div *ngIf=\"basicType() === 'tree'\">\n <div class=\"tree-entry\" *ngFor=\"let v of rawValue\">\n <ng-container *ngTemplateOutlet=\"treeEntry; context: { path: v.path }\"></ng-container>\n </div>\n </div>\n <div *ngIf=\"basicType() === 'vcard'\">\n <div class=\"array-entry\" *ngFor=\"let v of value()\">{{ v | vcardName }}</div>\n </div>\n <div *ngIf=\"basicType() === 'slider'\">\n <span class=\"slider-value\">{{ value() }}</span\n ><span> / </span><span class=\"slider-max\">{{ widget.definition.max }}</span>\n </div>\n <div *ngIf=\"basicType() === 'duration'\">\n <span class=\"duration-value\">{{ value()[0] | appMdsDuration }}</span>\n </div>\n <div *ngIf=\"basicType() === 'range'\">\n <span class=\"slider-value\">{{ value()[0] }}</span\n >-<span class=\"slider-value\">{{ value()[1] }}</span>\n </div>\n <div *ngIf=\"basicType() === 'unknown'\">\n The widget type {{ widget.definition.type }} is currently not supported via angular\n rendering\n </div>\n </div>\n </div>\n </div>\n <!--<button mat-icon-button\n *ngIf=\"mdsEditorInstance.editorMode === 'inline' && widget.definition.interactionType === 'Input'\"\n (click)=\"view.injectEditField(this, edit)\"\n class=\"btn-edit\">\n <i esIcon=\"edit\"></i>\n </button>-->\n </div>\n</es-mds-editor-widget-container>\n<div class=\"edit-wrapper\">\n <div #editWrapper><div #edit></div></div>\n <!--<button *ngIf=\"!!editWrapper.innerText.trim()\" mat-icon-button><i esIcon=\"save\"></i></button>-->\n</div>\n<ng-template #treeEntry let-path=\"path\">\n <ng-container *ngFor=\"let t of path; let first = first\">\n <ng-container *ngIf=\"!first\">\n <span class=\"cdk-visually-hidden\">{{ 'SUB_CATEGORY_ARIA' | translate }}</span>\n <i esIcon=\"keyboard_arrow_right\" [aria]=\"false\"></i>\n </ng-container>\n <a\n [routerLink]=\"'/' + ROUTER_PREFIX + 'search'\"\n [queryParams]=\"getSearchParams(t)\"\n *ngIf=\"widget.definition.isSearchable\"\n >{{ t.caption }}</a\n >\n <span *ngIf=\"!widget.definition.isSearchable\">{{ t.caption }}</span>\n </ng-container>\n</ng-template>\n","/**\n * Replaces the given element with a div within the DOM.\n *\n * The purpose is to comply with W3C specifications for element and attribute names.\n *\n * Sets the attribute \"data-element\" to the old element tag name.\n */\nexport function replaceElementWithDiv(\n element: Element,\n mode: 'append' | 'replace' = 'replace',\n): HTMLDivElement {\n const div = document.createElement('div');\n div.setAttribute('data-element', element.localName);\n for (const attribute of element.attributes) {\n const targetAttributeName = getTargetAttributeName(attribute);\n div.setAttribute(targetAttributeName, attribute.nodeValue);\n }\n if (element.parentNode) {\n if (mode === 'append') {\n // keep the positioning\n element.parentNode.insertBefore(div, element);\n // element.parentNode.append(div);\n } else if (mode === 'replace') {\n element.parentNode.replaceChild(div, element);\n }\n } else {\n console.warn('replace child failed for ' + element.localName);\n }\n return div;\n}\n\n/**\n * Returns the name with which to copy attributes to the new element.\n *\n * Keeps \"style\", \"class\", and \"data-\" attributes and prefixes everything else with\n * \"data-attribute-\".\n */\nfunction getTargetAttributeName(attr: Attr): string {\n if (['style', 'class'].includes(attr.nodeName)) {\n return attr.nodeName;\n } else if (attr.nodeName.startsWith('data-')) {\n return attr.nodeName;\n } else {\n return 'data-attribute-' + attr.nodeName;\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\n@Component({\n selector: 'es-spinner-small',\n templateUrl: 'spinner-small.component.html',\n styleUrls: ['spinner-small.component.scss'],\n imports: [MatProgressSpinnerModule],\n})\nexport class SpinnerSmallComponent {\n @Input() diameter = 20;\n constructor() {}\n}\n","<mat-progress-spinner\n color=\"primary\"\n mode=\"indeterminate\"\n [diameter]=\"diameter\"\n></mat-progress-spinner>\n","import {\n Component,\n ComponentFactoryResolver,\n ElementRef,\n Injector,\n Input,\n OnChanges,\n QueryList,\n signal,\n SimpleChanges,\n ViewChildren,\n ViewContainerRef,\n} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport {\n InitialValues,\n MdsValueList,\n MdsViewerWidget,\n MdsWidgetComponent,\n} from './widget/mds-widget.component';\nimport {\n HOME_REPOSITORY,\n MdsDefinition,\n MdsService,\n MdsView,\n RestConstants,\n} from 'ngx-edu-sharing-api';\nimport { Values } from '../services/search-helper.service';\nimport { replaceElementWithDiv } from './replace-element-with-div';\nimport { UIService } from '../services/ui.service';\nimport { MdsViewerService } from './mds-viewer.service';\nimport { ViewInstanceService } from './view-instance.service';\nimport { BehaviorSubject } from 'rxjs';\n\n@Component({\n selector: 'es-mds-viewer',\n templateUrl: 'mds-viewer.component.html',\n styleUrls: ['mds-viewer.component.scss'],\n providers: [MdsViewerService, ViewInstanceService],\n standalone: false,\n})\nexport class MdsViewerComponent implements OnChanges {\n @ViewChildren('container') container: QueryList<ElementRef>;\n\n @Input() mdsEditorInstanceService: any;\n @Input() groupId: string;\n @Input() setId: string;\n @Input() data: Values;\n @Input() mds: MdsDefinition;\n templates = signal<\n {\n view: MdsView;\n html: SafeHtml;\n }[]\n >(null);\n\n /**\n * show group headings (+ icons) for the individual templates\n */\n @Input() showGroupHeadings = true;\n\n /**\n * The heading level from 1 to 6 to use for widget labels, equivalent to `h1` to `h6`.\n *\n * If not set, widget labels are not marked as headings and an invisible colon is added between\n * labels and values, that will be read out by screen readers.\n */\n @Input()\n set headingLevel(value: number | null) {\n this.viewInstance.headingLevel = value;\n }\n get headingLevel() {\n return this.viewInstance.headingLevel;\n }\n\n constructor(\n private mdsService: MdsService,\n private mdsViewerService: MdsViewerService,\n private factoryResolver: ComponentFactoryResolver,\n private injector: Injector,\n private containerRef: ViewContainerRef,\n private sanitizer: DomSanitizer,\n private viewInstance: ViewInstanceService,\n ) {}\n\n getGroup() {\n return this.mds.groups.find((g: any) => g.id == this.groupId);\n }\n getView(id: string) {\n return this.mds.views.find((v: any) => v.id == id);\n }\n\n public async inflate() {\n if (!this.mds) {\n setTimeout(() => this.inflate(), 1000 / 60);\n return;\n }\n try {\n this.mdsViewerService.values$.next(this.data);\n this.mdsViewerService.mds$.next(this.mds);\n if (this.mdsEditorInstanceService) {\n const editor = await this.mdsEditorInstanceService.initWithoutNodes(\n this.groupId,\n this.setId,\n HOME_REPOSITORY,\n 'viewer',\n this.data,\n );\n if (!editor) {\n // Initialization was interrupted. Probably, this method was called again before it\n // could finish.\n return;\n }\n }\n } catch (e) {\n return;\n }\n const templates = [];\n for (const view of this.getGroup().views) {\n const v = this.getView(view);\n templates.push({\n view: v,\n html: this.sanitizer.bypassSecurityTrustHtml(this.prepareHTML(v.html)),\n });\n }\n this.templates.set(templates);\n // wait for angular to inflate the new binding\n setTimeout(() => {\n for (const widget of (this.mdsEditorInstanceService?.widgets.value ||\n this.mds.widgets.map((definition) => {\n return {\n definition,\n getInitalValuesAsync: async () => {\n return {\n jointValues: this.data[definition.id!!],\n } as InitialValues;\n },\n getInitialDisplayValues: () => new BehaviorSubject<MdsValueList>(null),\n } as MdsViewerWidget;\n })) as MdsViewerWidget[]) {\n this.container.toArray().forEach((c) => {\n let element: HTMLElement = c.nativeElement.getElementsByTagName(\n widget.definition.id,\n )?.[0];\n if (element) {\n // MdsEditorViewComponent.updateWidgetWithHTMLAttributes(element, w);\n element = replaceElementWithDiv(element);\n\n UIService.injectAngularComponent(\n this.factoryResolver,\n this.containerRef,\n MdsWidgetComponent,\n element,\n {\n widget,\n },\n {},\n this.injector,\n );\n }\n setTimeout(() => this.hideEmpty(c), 1);\n });\n }\n });\n }\n\n /**\n * close all custom tags inside the html which are not closed\n * e.g. <cm:name>\n * -> <cm:name></cm:name>\n * @param html\n */\n private prepareHTML(html: string) {\n for (const w of this.mds.widgets) {\n const start = html.indexOf('<' + w.id);\n if (start == -1) {\n continue;\n }\n const end = html.indexOf('>', start) + 1;\n html = html.substring(0, end) + '</' + w.id + '>' + html.substring(end);\n }\n return html;\n }\n\n async ngOnChanges(changes: SimpleChanges) {\n let inflate = false;\n if (changes.setId) {\n this.mds = await this.mdsService\n .getMetadataSet({ metadataSet: this.setId })\n .toPromise();\n inflate = true;\n }\n if (changes.data) {\n if (this.data[RestConstants.CM_PROP_METADATASET_EDU_METADATASET] != null) {\n this.mds = await this.mdsService\n .getMetadataSet({\n metadataSet:\n this.data[RestConstants.CM_PROP_METADATASET_EDU_METADATASET][0],\n })\n .toPromise();\n } else if (!this.mds) {\n this.mds = await this.mdsService.getMetadataSet({}).toPromise();\n }\n inflate = true;\n }\n if (inflate) {\n void this.inflate();\n }\n }\n\n private hideEmpty(c: ElementRef) {\n for (let emptyGroup of c.nativeElement.getElementsByTagName('hideifempty')) {\n console.log(emptyGroup);\n if (!emptyGroup.getElementsByTagName('hideifempty-content')?.[0]?.innerText?.trim()) {\n emptyGroup.parentElement.removeChild(emptyGroup);\n }\n }\n }\n}\n","<es-spinner-small *ngIf=\"!templates()\"></es-spinner-small>\n<div *ngFor=\"let t of templates()\" #container class=\"mds-viewer\">\n <div *ngIf=\"showGroupHeadings && t.view.caption\" class=\"card-title-element group-heading\">\n <i [esIcon]=\"t.view.icon\" *ngIf=\"t.view.icon\"></i><span>{{ t.view.caption }}</span>\n </div>\n <div class=\"template\" [innerHTML]=\"t.html\"></div>\n</div>\n","import { style, animate, transition, trigger, state } from '@angular/animations';\nexport class UIAnimation {\n public static ANIMATION_TIME_FAST = 100;\n public static ANIMATION_TIME_NORMAL = 200;\n public static ANIMATION_TIME_SLOW = 300;\n public static fade(time = UIAnimation.ANIMATION_TIME_NORMAL) {\n return [\n transition(':enter', [style({ opacity: 0 }), animate(time, style({ opacity: 1 }))]),\n transition(':leave', [animate(time, style({ opacity: 0 }))]),\n ];\n }\n public static fromBottom(time = UIAnimation.ANIMATION_TIME_NORMAL) {\n return [\n transition(':enter', [\n style({ transform: 'translateY(100%)' }),\n animate(time, style({ transform: 'translateY(0)' })),\n ]),\n transition(':leave', [\n style({ transform: 'translateY(0)' }),\n animate(time, style({ transform: 'translateY(100%)' })),\n ]),\n ];\n }\n public static fromLeft(time = UIAnimation.ANIMATION_TIME_NORMAL) {\n return [\n transition(':enter', [\n style({ transform: 'translateX(-100%)' }),\n animate(time, style({ transform: 'translateX(0)' })),\n ]),\n transition(':leave', [\n style({ transform: 'translateX(0)' }),\n animate(time, style({ transform: 'translateX(-100%)' })),\n ]),\n ];\n }\n public static fromRight(time: number | string = UIAnimation.ANIMATION_TIME_NORMAL) {\n return [\n transition(':enter', [\n style({ transform: 'translateX(100%)' }),\n animate(time, style({ transform: 'translateX(0)' })),\n ]),\n transition(':leave', [\n style({ transform: 'translateX(0)' }),\n animate(time, style({ transform: 'translateX(100%)' })),\n ]),\n ];\n }\n public static infobarBottom(time = UIAnimation.ANIMATION_TIME_NORMAL) {\n return [\n transition(':enter', [\n style({ bottom: '-70px' }),\n animate(time + 'ms ease', style({ bottom: '0' })),\n ]),\n transition(':leave', [\n style({ bottom: '0' }),\n animate(time + 'ms ease', style({ bottom: '-70px' })),\n ]),\n ];\n }\n /**\n * Useful animation for opening any overflow menus\n * @param time\n * @returns {AnimationStateTransitionMetadata[]}\n */\n public static openOverlay(time = UIAnimation.ANIMATION_TIME_NORMAL) {\n return [\n transition(':enter', [\n style({ 'transform-origin': '50% 0%', transform: 'scaleY(0.5)', opacity: 0 }),\n animate(time, style({ transform: 'scaleY(1)', opacity: 1 })),\n ]),\n transition(':leave', [\n style({ 'transform-origin': '50% 0%', transform: 'scaleY(1)', opacity: 1 }),\n animate(time, style({ transform: 'scaleY(0.5)', opacity: 0 })),\n ]),\n ];\n }\n /**\n * Useful animation for opening any overflow menus - inverted (from bottom to top)\n * @param time\n * @returns {AnimationStateTransitionMetadata[]}\n */\n public static openOverlayBottom(time = UIAnimation.ANIMATION_TIME_NORMAL) {\n return [\n transition(':enter', [\n style({ 'transform-origin': '50% 100%', transform: 'scaleY(0.5)', opacity: 0 }),\n animate(time, style({ transform: 'scaleY(1)', opacity: 1 })),\n ]),\n transition(':leave', [\n style({ 'transform-origin': '50% 100%', transform: 'scaleY(1)', opacity: 1 }),\n animate(time, style({ transform: 'scaleY(0.5)', opacity: 0 })),\n ]),\n ];\n }\n /**\n * Useful animation to switch different content insides a dialog (navigating between contents)\n * @param time\n * @returns {AnimationStateTransitionMetadata[]}\n */\n public static switchDialog(time = UIAnimation.ANIMATION_TIME_NORMAL) {\n return [\n transition(':enter', [\n style({ 'transform-origin': '50% 0%', transform: 'scaleY(0)', opacity: 0 }),\n animate(time, style({ transform: 'scaleY(1)', opacity: 1 })),\n ]),\n ];\n }\n /**\n * Useful animation to switch different content insides a dialog (navigating between contents)\n * This is a special variant which does work without ngIf fields, it will remove display states\n */\n public static switchDialogBoolean(time = UIAnimation.ANIMATION_TIME_NORMAL) {\n return [\n state(\n 'false',\n style({\n opacity: 0,\n 'transform-origin': '50% 0%',\n transform: 'scaleY(0)',\n display: 'none',\n }),\n ),\n state(\n 'true',\n style({ opacity: 1, 'transform-origin': '50% 0%', transform: 'scaleY(100%)' }),\n ),\n transition('false => true', [style({ display: '' }), animate(time + 'ms ease-in-out')]),\n transition('true => false', [animate(time + 'ms ease-in-out')]),\n ];\n }\n /**\n * Useful animation for showing any modal cards\n * @param time\n * @returns {AnimationStateTransitionMetadata[]}\n */\n public static cardAnimation(time = UIAnimation.ANIMATION_TIME_NORMAL) {\n return [\n transition(':enter', [\n style({\n 'transform-origin': '50% 0%',\n transform: 'scaleY(0.5) translateY(-100%)',\n opacity: 0,\n }),\n animate(\n time + 'ms ease',\n style({ transform: 'scaleY(1) translateY(0)', opacity: 1 }),\n ),\n ]),\n transition(':leave', [\n style({ 'transform-origin': '50% 0%', opacity: 1 }),\n animate(time + 'ms ease', style({ opacity: 0 })),\n ]),\n ];\n }\n}\n","import { isNumeric } from './isNumeric';\nimport { isArray } from 'lodash-es';\n\nexport class Helper {\n public static deepCopy(data: any) {\n if (data == null) return null;\n return JSON.parse(JSON.stringify(data));\n }\n\n public static deepCopyArray(data: any[]) {\n if (!Array.isArray(data)) return data;\n return data.slice();\n }\n\n /**\n * Returns true if both objects have the same values stored\n * will not work for classes including methods or similar dynamic data\n * @param object1\n * @param object2\n * @returns {boolean}\n */\n public static objectEquals(object1: any, object2: any) {\n if (object1 == null) return object2 == null;\n if (object2 == null) return object1 == null;\n return JSON.stringify(object1) == JSON.stringify(object2);\n }\n\n /**\n * get data from an object based on a dotted path\n * also supports arrays like \"array.0.key\"\n * @param nested the object to return the data from\n * @param path the path of the field location in dotted notation\n */\n public static getDotPathFromNestedObject(nested: any, path: string) {\n const split = path.split('.');\n let obj = nested;\n for (let key of split) {\n if (isNumeric(key)) {\n obj = obj?.[parseInt(key)];\n } else {\n if (isArray(obj)) {\n return obj;\n }\n obj = obj?.[key];\n }\n }\n return obj;\n }\n public static filterObjectPropertyNested(obj: any, property: string[]) {\n for (let i in obj) {\n if (!obj.hasOwnProperty(i)) continue;\n if (property.includes(i)) {\n delete obj[i];\n } else if (typeof obj[i] === 'object') {\n Helper.filterObjectPropertyNested(obj[i], property);\n }\n }\n return obj;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { OptionItem } from '../types/option-item';\n\n@Pipe({\n name: 'optionTooltip',\n standalone: false,\n})\nexport class OptionTooltipPipe implements PipeTransform {\n constructor(private translate: TranslateService) {}\n\n async transform(option: OptionItem, args: string[] = null) {\n return (\n (await this.translate.get(option.name).toPromise()) +\n (option.keyboardShortcut ? ' (' + this.getKeyInfo(option) + ')' : '')\n );\n }\n\n getKeyInfo(option: OptionItem) {\n if (!option.keyboardShortcut) {\n return '';\n }\n const modifiers = [];\n if (option.keyboardShortcut.modifiers?.includes('Shift')) {\n modifiers.push(this.translate.instant('KEY_MODIFIER.SHIFT'));\n }\n if (option.keyboardShortcut.modifiers?.includes('Ctrl/Cmd')) {\n modifiers.push(this.translate.instant('KEY_MODIFIER.CTRL'));\n }\n return (\n (modifiers.length ? modifiers.join(' + ') + ' + ' : '') +\n option.keyboardShortcut.keyCode.replace('Key', '')\n );\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Pipe({\n name: 'replaceChars',\n standalone: false,\n})\nexport class ReplaceCharsPipe implements PipeTransform {\n transform(value: string, args: any): string {\n let i = 0;\n if (!Array.isArray(args.search)) {\n args.search = [args.search];\n }\n if (args.replace && !Array.isArray(args.replace)) {\n args.replace = [args.replace];\n }\n for (let arg of args.search) {\n value = value.split(arg).join(args.replace ? args.replace[i] : '');\n i++;\n }\n return value;\n }\n constructor(private translate: TranslateService) {}\n}\n","import { Component, Input, OnChanges, SimpleChanges, ViewChild } from '@angular/core';\nimport { MatMenu, MatMenuTrigger } from '@angular/material/menu';\nimport { OptionItem } from '../types/option-item';\nimport { Helper } from '../util/helper';\nimport { UIService } from '../services/ui.service';\nimport { BehaviorSubject } from 'rxjs';\nimport { Node } from 'ngx-edu-sharing-api';\n\n/**\n * The dropdown is one base component of the action bar (showing more actions),\n * but can also be used standalone.\n */\n@Component({\n selector: 'es-dropdown',\n templateUrl: 'dropdown.component.html',\n styleUrls: ['dropdown.component.scss'],\n standalone: false,\n})\nexport class DropdownComponent implements OnChanges {\n @ViewChild('dropdown', { static: true }) menu: MatMenu;\n @ViewChild('menuTrigger') menuTrigger: MatMenuTrigger;\n\n @Input() position: 'left' | 'right' = 'left';\n @Input() options: OptionItem[];\n options$ = new BehaviorSubject<OptionItem[]>([]);\n\n /**\n * The objects that should be returned via the option's callback.\n *\n * Can be null\n */\n @Input() callbackObjects: Node[] = undefined;\n\n /**\n * Should disabled (\"greyed out\") options be shown or hidden?\n */\n @Input() showDisabled = true;\n\n /**\n * An additional class to add to the `mat-menu` instance.\n *\n * This is needed to customize the menu styling since the menu contents are\n * taken out of the host container by angular.\n */\n @Input() menuClass: string;\n\n constructor(private ui: UIService) {}\n\n ngOnChanges(changes?: SimpleChanges): void {\n if (changes == null || changes?.options || changes?.callbackObjects) {\n this.options$.next(this.ui.filterValidOptions(Helper.deepCopyArray(this.options)));\n if (this.callbackObjects !== undefined) {\n void this.ui.updateOptionEnabledState(this.options$, this.callbackObjects);\n }\n }\n }\n\n click(option: OptionItem) {\n if (!option.isEnabled) {\n return;\n }\n setTimeout(() => option.callback(null, this.callbackObjects));\n }\n\n isNewGroup(i: number) {\n if (i > 0) {\n return this.options$.value[i].group !== this.options$.value[i - 1].group;\n }\n return false;\n }\n\n /** Whether there are any enabled options so we can open the menu. */\n canShowDropdown(): boolean {\n // We can only open the dropdown menu, when there is at least one enabled option. Even when\n // there are options with `showDisabled: true`, showing a menu with no selectable option\n // causes a11y issues.\n return this.options$.value?.some((o) => o.isEnabled);\n }\n}\n","<mat-menu\n #dropdown=\"matMenu\"\n class=\"mat-dropdown-menu\"\n [class]=\"menuClass\"\n backdropClass=\"mat-dropdown-menu\"\n [xPosition]=\"position === 'right' ? 'after' : 'before'\"\n>\n <!-- MatMenu has role=\"menu\", so the only meaningful role of descendants is \"menuitem\" -->\n <ul role=\"none\">\n <ng-container *ngFor=\"let option of options$ | async; let i = index\">\n <li *ngIf=\"option.isEnabled || showDisabled\" role=\"none\">\n <button\n mat-menu-item\n class=\"mat-menu-item collection-item-{{\n option.name | replaceChars : { search: '.', replace: '-' }\n }}\"\n matTooltip=\"{{ option | optionTooltip | async }}\"\n matTooltipPosition=\"right\"\n matTooltipTouchGestures=\"off\"\n [attr.aria-label]=\"option.ariaLabel || option.name | translate\"\n [class.mat-menu-item-separate]=\"option.isSeparate || isNewGroup(i)\"\n [class.mat-menu-item-selected]=\"option.isSelected\"\n [disabled]=\"!option.isEnabled\"\n (click)=\"click(option)\"\n attr.data-test=\"menu-item-{{ option.name }}\"\n >\n <i [esIcon]=\"option.icon\" esIconContext=\"option\"></i> {{ option.name | translate }}\n </button>\n </li>\n </ng-container>\n </ul>\n</mat-menu>\n<div #menuTrigger=\"matMenuTrigger\" [matMenuTriggerFor]=\"menu\" class=\"display-none\"></div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'propertySlug',\n standalone: false,\n})\nexport class PropertySlugPipe implements PipeTransform {\n transform(value: string): string {\n return value?.replace(/[:. ]/g, '_');\n }\n}\n","import { trigger } from '@angular/animations';\nimport { Component, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { UIAnimation } from '../util/ui-animation';\nimport { UIConstants } from '../util/ui-constants';\nimport { OptionItem } from '../types/option-item';\nimport { UIService } from '../services/ui.service';\nimport { Helper } from '../util/helper';\nimport { TooltipPosition } from '@angular/material/tooltip';\nimport { BehaviorSubject } from 'rxjs';\n\n@Component({\n selector: 'es-actionbar',\n templateUrl: 'actionbar.component.html',\n styleUrls: ['actionbar.component.scss'],\n animations: [trigger('openOverlay', UIAnimation.openOverlay(UIAnimation.ANIMATION_TIME_FAST))],\n standalone: false,\n})\n/**\n * The action bar provides several icons, usually at the top right, with actions for a current context\n */\nexport class ActionbarComponent implements OnChanges {\n /**\n * The amount of options which are not hidden inside an overflow menu\n * (default: depending on mobile (1) or not (2))\n * Also use numberOfAlwaysVisibleOptionsMobile to control the amount of mobile options visible\n */\n @Input() numberOfAlwaysVisibleOptions = 2;\n @Input() numberOfAlwaysVisibleOptionsMobile = 1;\n /**\n * Visual style of the actionbar\n *\n * Values:\n * - 'button': material buttons with icons and text on medium to large screens\n * - 'icon-button': material buttons without text\n * - 'round': circular buttons without text\n * @default 'button'\n */\n @Input() appearance: 'round' | 'button' | 'icon-button' = 'button';\n /**\n * dropdownPosition is for position of dropdown (default = left)\n * Values 'left' or 'right'\n */\n @Input() dropdownPosition: 'left' | 'right' = 'left';\n\n /**\n * backgroundType for color matching, either bright, dark or primary\n */\n @Input() backgroundType: 'bright' | 'dark' | 'primary' = 'bright';\n /**\n * Style, currently default or 'flat' if all always visible icons should get a flat look\n */\n @Input() style: 'default' | 'flat' = 'default';\n /**\n * Highlight one or more of the always-visible buttons as primary action.\n *\n * - `first`, `last`: The first / last of `optionsAlways` by order.\n * - `manual`: Highlight all options that set `isPrimary = true`.\n */\n @Input() highlight: 'first' | 'last' | 'manual' = 'first';\n /**\n * Should disabled (\"greyed out\") options be shown or hidden?\n */\n @Input() showDisabled = true;\n\n /**\n * the position of the mat tooltips\n */\n @Input() tooltipPosition: TooltipPosition = 'below';\n\n /**\n * Set the options, see @OptionItem\n */\n @Input() set options(options: OptionItem[]) {\n this.optionsIn = options;\n this.prepareOptions(options);\n }\n\n /**\n * breakpoint width at which point the mobile display count is used\n */\n @Input() mobileBreakpoint = UIConstants.MOBILE_WIDTH;\n optionsIn: OptionItem[] = [];\n optionsAlways$ = new BehaviorSubject<OptionItem[]>([]);\n optionsMenu$ = new BehaviorSubject<OptionItem[]>([]);\n optionsToggleBefore: OptionItem[] = [];\n optionsToggleAfter: OptionItem[] = [];\n\n constructor(private uiService: UIService, private translate: TranslateService) {}\n\n private prepareOptions(options: OptionItem[]) {\n options = this.uiService.filterValidOptions(Helper.deepCopyArray(options));\n if (options == null) {\n this.optionsAlways$.next([]);\n this.optionsMenu$.next([]);\n return;\n }\n this.optionsToggleBefore = this.uiService.filterToggleOptions(options, true, 'before');\n this.optionsToggleAfter = this.uiService.filterToggleOptions(options, true, 'after');\n this.optionsAlways$.next(\n this.getActionOptions(this.uiService.filterToggleOptions(options, false)).slice(\n 0,\n this.getNumberOptions(),\n ),\n );\n if (!this.optionsAlways$.value.length) {\n this.optionsAlways$.next(\n this.uiService\n .filterToggleOptions(options, false)\n .slice(0, this.getNumberOptions()),\n );\n }\n this.optionsMenu$.next(\n this.hideActionOptions(\n this.uiService.filterToggleOptions(options, false),\n this.optionsAlways$.value,\n ),\n );\n void this.uiService.updateOptionEnabledState(this.optionsAlways$);\n void this.uiService.updateOptionEnabledState(this.optionsMenu$);\n // may causes weird looking\n /*if(this.optionsMenu.length<2) {\n this.optionsAlways = this.optionsAlways.concat(this.optionsMenu);\n this.optionsMenu = [];\n }*/\n }\n\n public getNumberOptions() {\n if (window.innerWidth < this.mobileBreakpoint) {\n return this.numberOfAlwaysVisibleOptionsMobile;\n }\n return this.numberOfAlwaysVisibleOptions;\n }\n\n click(option: OptionItem) {\n if (!option.isEnabled) {\n if (option.disabledCallback) {\n option.disabledCallback();\n }\n return;\n }\n option.callback();\n }\n\n private getActionOptions(options: OptionItem[]) {\n const result: OptionItem[] = [];\n for (const option of options) {\n if (option.showAsAction) result.push(option);\n }\n return result;\n }\n\n private hideActionOptions(options: OptionItem[], optionsAlways: OptionItem[]) {\n const result: OptionItem[] = [];\n for (const option of options) {\n if (optionsAlways.indexOf(option) === -1) result.push(option);\n }\n return result;\n }\n\n /**\n * Invalidate / refreshes all options based on their current callbacks\n */\n public invalidate() {\n this.prepareOptions(this.optionsIn);\n }\n\n private filterDisabled(options: OptionItem[]) {\n if (options == null) return null;\n const filtered = [];\n for (const option of options) {\n if (option.isEnabled || this.showDisabled) filtered.push(option);\n }\n return filtered;\n }\n\n canShowDropdown() {\n if (!this.optionsMenu$.value.length) {\n return false;\n }\n return this.optionsMenu$.value.filter((o) => o.isEnabled).length > 0;\n }\n\n shouldHighlight(optionIndex: number, option: OptionItem): boolean {\n switch (this.highlight) {\n case 'first':\n return optionIndex === 0;\n case 'last':\n return optionIndex === this.optionsAlways$.value.length - 1;\n case 'manual':\n return option.isPrimary;\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n this.invalidate();\n }\n}\n","<es-dropdown\n #dropdownRef\n [options]=\"optionsMenu$ | async\"\n [showDisabled]=\"showDisabled\"\n [position]=\"dropdownPosition\"\n></es-dropdown>\n<div\n class=\"actionbar\"\n [class.actionbar-all-flat]=\"style === 'flat'\"\n [class.actionbar-background-dark]=\"backgroundType === 'dark'\"\n [class.actionbar-background-primary]=\"backgroundType === 'primary'\"\n [class.actionbar-round]=\"appearance === 'round'\"\n [class.actionbar-icon-button]=\"appearance === 'icon-button'\"\n>\n <div\n *ngIf=\"optionsToggleBefore.length\"\n class=\"actionToggle before\"\n [class.actionToggleDivider]=\"(optionsAlways$ | async).length\"\n >\n <ng-container\n *ngTemplateOutlet=\"toggle; context: { optionsToggle: optionsToggleBefore }\"\n ></ng-container>\n </div>\n <ng-container *ngFor=\"let option of optionsAlways$ | async; let i = index\">\n <button\n *ngIf=\"shouldHighlight(i, option)\"\n mat-flat-button\n color=\"primary\"\n [disabled]=\"!option.isEnabled\"\n [class]=\"\n (!option.isEnabled && !showDisabled ? 'display-none ' : '') + (option.name | propertySlug)\n \"\n matTooltip=\"{{ option | optionTooltip | async }}\"\n [matTooltipPosition]=\"tooltipPosition\"\n [attr.aria-label]=\"option.ariaLabel || option.name | translate\"\n (click)=\"click(option)\"\n >\n <i [esIcon]=\"option.icon\"></i>\n <span class=\"action-always-caption\" *ngIf=\"option.showName && appearance === 'button'\">\n {{ option.name | translate }}</span\n >\n </button>\n <button\n *ngIf=\"!shouldHighlight(i, option)\"\n mat-button\n color=\"primary\"\n [disabled]=\"!option.isEnabled\"\n [class]=\"\n (!option.isEnabled && !showDisabled ? 'display-none ' : '') + (option.name | propertySlug)\n \"\n matTooltip=\"{{ option | optionTooltip | async }}\"\n [matTooltipPosition]=\"tooltipPosition\"\n [attr.aria-label]=\"option.ariaLabel || option.name | translate\"\n (click)=\"click(option)\"\n >\n <i [esIcon]=\"option.icon\"></i>\n <span class=\"action-always-caption\" *ngIf=\"option.showName && appearance === 'button'\">\n {{ option.name | translate }}</span\n >\n </button>\n </ng-container>\n <button\n mat-button\n color=\"primary\"\n class=\"more\"\n [attr.aria-label]=\"'OPTIONS.SHOW_ALL_OPTIONS' | translate\"\n [matMenuTriggerFor]=\"dropdownRef.menu\"\n *ngIf=\"canShowDropdown()\"\n data-test=\"more-actions-button\"\n >\n <i esIcon=\"more_vert\" [aria]=\"false\"></i>\n </button>\n <div\n *ngIf=\"optionsToggleAfter.length\"\n class=\"actionToggle after\"\n [class.actionToggleDivider]=\"(optionsAlways$ | async).length\"\n >\n <ng-container\n *ngTemplateOutlet=\"toggle; context: { optionsToggle: optionsToggleAfter }\"\n ></ng-container>\n </div>\n</div>\n<ng-template #toggle let-optionsToggle=\"optionsToggle\">\n <ng-container *ngFor=\"let option of optionsToggle\">\n <button\n *ngIf=\"option.isToggleVisible && option.toggleType === 'default'\"\n mat-icon-button\n matTooltip=\"{{ option.name | translate }}\"\n [attr.aria-label]=\"option.ariaLabel || option.name | translate\"\n (click)=\"click(option)\"\n [class]=\"\n 'toggle-default toggle-' +\n (option.name | replaceChars : { search: '.', replace: '-' }) +\n (option.isEnabled ? '' : ' disabled')\n \"\n attr.data-test=\"toggle-{{ option.name }}\"\n >\n <i [esIcon]=\"option.icon\" [aria]=\"false\"></i>\n </button>\n <button\n *ngIf=\"option.isToggleVisible && option.toggleType === 'primary'\"\n mat-flat-button\n color=\"primary\"\n matTooltip=\"{{ option.name | translate }}\"\n [attr.aria-label]=\"option.ariaLabel || option.name | translate\"\n (click)=\"click(option)\"\n [class]=\"\n 'toggle-primary toggle-' +\n (option.name | replaceChars : { search: '.', replace: '-' }) +\n (option.isEnabled ? '' : ' disabled')\n \"\n attr.data-test=\"toggle-{{ option.name }}\"\n >\n <i [esIcon]=\"option.icon\" [aria]=\"false\"></i>\n <span class=\"action-always-caption\"> {{ option.name | translate }}</span>\n </button>\n </ng-container>\n</ng-template>\n","import { Directive, ElementRef, EventEmitter, OnDestroy, OnInit, Output } from '@angular/core';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\ninterface BorderBox {\n width: number;\n height: number;\n}\n\n/**\n * Gets the border-box dimensions of an element in an asynchronous manner.\n *\n * This allows subscribing to changes and using values as input to other Angular components without\n * causing changed-after-checked errors.\n */\n@Directive({\n selector: '[esBorderBoxObserver]',\n exportAs: 'borderBoxObserver',\n standalone: false,\n})\nexport class BorderBoxObserverDirective implements OnInit, OnDestroy {\n static observeElement(elementRef: ElementRef<HTMLElement>): Observable<BorderBox> {\n return new Observable((subscriber) => {\n const borderBoxObserver = new BorderBoxObserverDirective(elementRef);\n borderBoxObserver.ngOnInit();\n borderBoxObserver.borderBoxSubject.subscribe(subscriber);\n return () => borderBoxObserver.ngOnDestroy();\n });\n }\n\n @Output('esBorderBoxObserver') borderBoxEmitter = new EventEmitter<BorderBox>();\n\n private observer: ResizeObserver;\n private readonly borderBoxSubject = new ReplaySubject<BorderBox>(1);\n\n width$ = this.borderBoxSubject.pipe(map(({ width }) => width));\n height$ = this.borderBoxSubject.pipe(map(({ height }) => height));\n\n constructor(private elementRef: ElementRef<HTMLElement>) {}\n\n ngOnInit(): void {\n this.registerEventEmitter();\n this.registerObserver();\n // Can cause changed-after-checked errors if done synchronously.\n void Promise.resolve().then(() => this.setInitialValue());\n }\n\n ngOnDestroy(): void {\n this.observer.disconnect();\n }\n\n private registerEventEmitter(): void {\n this.borderBoxSubject.subscribe((borderBox) => this.borderBoxEmitter.emit(borderBox));\n }\n\n private registerObserver(): void {\n this.observer = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n const borderBoxSize: ResizeObserverSize = entry.borderBoxSize[0];\n this.borderBoxSubject.next({\n width: borderBoxSize.inlineSize,\n height: borderBoxSize.blockSize,\n });\n });\n });\n this.observer.observe(this.elementRef.nativeElement);\n }\n\n private setInitialValue(): void {\n const boundingClientRect = this.elementRef.nativeElement.getBoundingClientRect();\n this.borderBoxSubject.next({\n width: boundingClientRect.width,\n height: boundingClientRect.height,\n });\n }\n}\n","import { Directive, ElementRef, Input, OnInit } from '@angular/core';\n\n/**\n * Checks whether text of the annotated element or a descendent (give a selector) was cut of, e.g.,\n * with an ellipsis.\n *\n * Call `hasTextOverflow()` for the result.\n */\n@Directive({\n selector: '[esCheckTextOverflow]',\n exportAs: 'esCheckTextOverflow',\n standalone: false,\n})\nexport class CheckTextOverflowDirective implements OnInit {\n @Input('esCheckTextOverflow') selector?: string;\n\n private textElement: HTMLElement;\n\n hasTextOverflow = delay(this.hasTextOverflow_);\n\n constructor(private readonly elementRef: ElementRef<HTMLElement>) {}\n\n ngOnInit(): void {\n this.textElement = this.getTextElement();\n }\n\n private hasTextOverflow_(): boolean {\n if (!this.textElement && this.selector) {\n // refetch element in case it has changed\n this.textElement = this.getTextElement();\n }\n const element = this.textElement;\n if (element) {\n return (\n element.offsetWidth < element.scrollWidth ||\n // use buffer to prevent overflow caused by small margins\n element.offsetHeight + 5 < element.scrollHeight\n );\n } else {\n return false;\n }\n }\n\n private getTextElement(): HTMLElement {\n if (this.selector) {\n return this.elementRef.nativeElement.querySelector(this.selector);\n } else {\n return this.elementRef.nativeElement;\n }\n }\n}\n\n/** Delay the result of a function one tick to avoid changed-after-checked errors. */\nfunction delay<T>(f: () => T): () => T {\n let previousValue: any = null;\n let updating = false;\n return function () {\n if (!updating) {\n const newValue = f.apply(this);\n if (newValue !== previousValue) {\n updating = true;\n void Promise.resolve().then(() => {\n previousValue = newValue;\n updating = false;\n });\n }\n }\n return previousValue;\n };\n}\n","import { Directive, HostListener } from '@angular/core';\n\n@Directive({\n selector: '[esFocusState]',\n exportAs: 'esFocusState',\n standalone: false,\n})\nexport class FocusStateDirective {\n /** Either the element or one of its descendants has focus. */\n hasFocus = false;\n /** The element is being hovered with the cursor. */\n hovering = false;\n\n constructor() {}\n\n @HostListener('focusin')\n onFocusIn() {\n this.hasFocus = true;\n }\n\n @HostListener('focusout')\n onFocusOut() {\n this.hasFocus = false;\n }\n\n @HostListener('mouseenter')\n onMouseOver() {\n this.hovering = true;\n }\n\n @HostListener('mouseleave')\n onMouseOut() {\n this.hovering = false;\n }\n}\n","import { Injectable, NgZone } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { take } from 'rxjs/operators';\n\n/**\n * Provides methods on the container that hosts the application.\n *\n * Usually, this will be `window`, but in case the application is embedded as a web component, it is\n * a `HTMLElement`.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AppContainerService {\n private scrollContainer?: HTMLElement;\n\n public scrollContainerChange = new Subject<HTMLElement>();\n\n constructor(private ngZone: NgZone) {}\n\n init(appElement: HTMLElement): void {\n this.registerScrollContainer(appElement);\n }\n\n /**\n * Registers one or more events on the application's scroll container.\n *\n * Note that the callback will be called outside of ng zone, so you must wrap any action that\n * should be reflected by Angular with `ngZone.run()`.\n */\n registerScrollEvents(\n callback: (event: Event) => void,\n until: Observable<void>,\n { events = ['scroll'] } = {},\n ) {\n this.ngZone.runOutsideAngular(() => {\n const scrollTarget = this.scrollContainer ?? window;\n for (const event of events) {\n scrollTarget.addEventListener(event, callback);\n until\n .pipe(take(1))\n .subscribe(() => scrollTarget.removeEventListener(event, callback));\n }\n });\n }\n\n /**\n * Return true if there is a scrolling ancestor that encompasses the app other than the document\n * element.\n */\n hasScrollContainer(): boolean {\n return this.scrollContainer != null;\n }\n\n /**\n * Returns the nearest scrolling container element that encompasses the app if the app is\n * embedded in another web page.\n *\n * If the app is served natively, returns the document element.\n */\n getScrollContainer(): HTMLElement;\n getScrollContainer<T>({ fallback }: { fallback: T }): T;\n getScrollContainer({ fallback = document.documentElement } = {}): HTMLElement {\n return this.scrollContainer ?? fallback;\n }\n\n private registerScrollContainer(appElement: HTMLElement): void {\n this.scrollContainer = this.getNearestScrollingAncestor(appElement);\n this.scrollContainerChange.next(this.scrollContainer);\n }\n\n private getNearestScrollingAncestor(element: HTMLElement): HTMLElement | null {\n while (element.parentElement) {\n const overflowStyle = window.getComputedStyle(element.parentElement).overflowY;\n if (['auto', 'scroll'].includes(overflowStyle)) {\n return element.parentElement;\n }\n element = element.parentElement;\n }\n return null;\n }\n}\n","import {\n Directive,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { AppContainerService } from '../services/app-container.service';\n\n@Directive({\n selector: '[esInfiniteScroll], [infinite-scroll], [data-infinite-scroll]',\n standalone: false,\n})\nexport class InfiniteScrollDirective implements OnInit, OnDestroy {\n @Output() scrolled = new EventEmitter<void>();\n\n @Input() infiniteScrollDistance: number = 1.5;\n @Input() infiniteScrollThrottle: number = 1000;\n @Input() scrollWindow: boolean = true;\n private lastEvent = 0;\n private lastScroll = 0;\n private destroyed$ = new Subject<void>();\n\n constructor(\n private appContainer: AppContainerService,\n private element: ElementRef,\n private zone: NgZone,\n ) {}\n\n ngOnInit(): void {\n this.zone.runOutsideAngular(() => {\n const handleScroll = () => this.handleOnScroll();\n const eventTarget = this.scrollWindow\n ? this.appContainer.getScrollContainer({ fallback: window })\n : this.element.nativeElement;\n eventTarget.addEventListener('scroll', handleScroll);\n this.destroyed$.subscribe(() =>\n eventTarget.removeEventListener('scroll', handleScroll),\n );\n });\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n\n handleOnScroll() {\n if (!this.element.nativeElement) return;\n if (this.scrollWindow) {\n const scrollContainer = this.appContainer.getScrollContainer();\n const height = scrollContainer.scrollHeight;\n const scroll = scrollContainer.scrollTop;\n if (\n scroll > this.lastScroll &&\n height - scroll < scrollContainer.clientHeight * this.infiniteScrollDistance\n ) {\n const time = new Date().getTime();\n if (time - this.lastEvent < this.infiniteScrollThrottle) return;\n this.lastEvent = time;\n this.emitScrolled();\n }\n this.lastScroll = scroll;\n } else {\n const element = this.element.nativeElement;\n const height = element.scrollHeight;\n const scroll = element.scrollTop;\n if (\n scroll > this.lastScroll &&\n height - scroll <\n element.getBoundingClientRect().height * this.infiniteScrollDistance\n ) {\n const time = new Date().getTime();\n if (time - this.lastEvent < this.infiniteScrollThrottle) return;\n this.lastEvent = time;\n this.emitScrolled();\n }\n this.lastScroll = scroll;\n }\n }\n\n private emitScrolled(): void {\n this.zone.run(() => this.scrolled.emit());\n }\n}\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { Node } from 'ngx-edu-sharing-api';\nimport { NodeHelperService } from '../services/node-helper.service';\n\n// TODO: Decide if providing focus highlights and ripples with this component is a good idea. When\n// using `app-node-url` for cards, we might need highlights and ripples for the whole card while\n// `app-node-url` should only wrap the title since links with lots of content confuse screen\n// readers.\n\nconst NODE_URL_TAG_NAME = 'es-node-url';\n\n@Component({\n selector: NODE_URL_TAG_NAME,\n templateUrl: 'node-url.component.html',\n styleUrls: ['node-url.component.scss'],\n standalone: false,\n})\nexport class NodeUrlComponent implements AfterViewInit {\n @ViewChild('link') link: ElementRef<HTMLAnchorElement>;\n\n @Input() node: Node;\n @Input() nodes: Node[];\n @Input() target: string;\n @Input() scope: string;\n /**\n * custom query params to include\n */\n @Input() queryParams: { [key: string]: string | number | boolean } = {};\n /**\n * link: a element\n * button: button element\n * wrapper: div element with behavior \"like\" a link\n */\n @Input() mode: 'link' | 'button' | 'wrapper' = 'link';\n @Input() disabled = false;\n /**\n * Show the ripple effect even when disabled.\n *\n * @deprecated Temporary workaround for list-table, which *sometimes* uses it's on click\n * bindings.\n */\n @Input() alwaysRipple = false;\n @Input('aria-describedby') ariaDescribedby: string;\n @Input('aria-label') ariaLabel = true;\n\n @Output() buttonClick = new EventEmitter<MouseEvent>();\n\n /**\n * Whether this instance of `NodeUrl` is nested inside another `NodeUrl`.\n */\n // We use nested `NodeUrl`s for a11y where we have a `NodeUrl` in wrapper mode to maximize\n // clickable area and one in link mode that only contains the title. We only want the outmost\n // `NodeUrl` to apply the ripple effect.\n //\n // Note that nesting `NodeUrl`s is only necessary when we want to provide hover effects on parts\n // of the outer `NodeUrl`. If we don't need that, it would be easier to attach a pseudo `:after`\n // element to the inner `NodeUrl` that expands its click area.\n isNested: boolean;\n\n constructor(\n private nodeHelper: NodeHelperService,\n private elementRef: ElementRef<HTMLElement>,\n ) {}\n\n ngAfterViewInit(): void {\n setTimeout(() => {\n this.isNested = this.getIsNested();\n });\n }\n\n getState() {\n return {\n scope: this.scope,\n };\n }\n\n get(mode: 'routerLink' | 'queryParams'): any {\n const result: any = this.nodeHelper.getNodeLink(mode, this.node);\n if (mode === 'queryParams') {\n // it is important that we remove the fromLogin info because otherwise the render component will redirect to the default page on back\n result.fromLogin = null;\n if (mode === 'queryParams') {\n Object.keys(this.queryParams).forEach((k) => (result[k] = this.queryParams[k]));\n }\n }\n return result;\n }\n\n focus(): void {\n this.link.nativeElement.focus();\n }\n\n clickWrapper(event: MouseEvent) {\n const eventCopy = copyClickEvent(event);\n this.link.nativeElement.dispatchEvent(eventCopy);\n event.preventDefault();\n }\n\n private getIsNested(): boolean {\n let ancestor = this.elementRef.nativeElement.parentElement;\n while (ancestor) {\n if (ancestor.tagName === NODE_URL_TAG_NAME.toUpperCase()) {\n return true;\n }\n ancestor = ancestor.parentElement;\n }\n return false;\n }\n}\n\nfunction copyClickEvent(event: MouseEvent): MouseEvent {\n // On Firefox, a middle click via neither the 'click', nor the 'auxclick' event cause a new tab\n // to be opened when triggered programmatically. As a workaround, we simulate a ctrl click\n // instead of a middle click. This matches Firefox's defaults, but we cannot account for\n // changed middle-click behavior.\n if (event.type === 'auxclick' && event.button === 1 && isFirefox()) {\n return copyClickEvent({ ...event, type: 'click', ctrlKey: true, button: 0 });\n }\n // It would seem better to use `event.type` instead of hard-coding 'click', but that doesn't\n // have the desired effect for non-click events when dispatched.\n return new MouseEvent('click', {\n cancelable: true,\n button: event.button,\n ctrlKey: event.ctrlKey,\n shiftKey: event.shiftKey,\n altKey: event.altKey,\n metaKey: event.metaKey,\n });\n}\n\nfunction isFirefox(): boolean {\n return navigator.userAgent.includes('Firefox');\n}\n","<ng-template #content><ng-content></ng-content></ng-template>\n<ng-container *ngIf=\"mode === 'link'\">\n <a\n *ngIf=\"!disabled\"\n #link\n matRipple\n matRippleColor=\"primary\"\n [matRippleDisabled]=\"isNested\"\n [routerLink]=\"get('routerLink')\"\n [state]=\"getState()\"\n [target]=\"target\"\n [queryParams]=\"get('queryParams')\"\n queryParamsHandling=\"merge\"\n cdkMonitorElementFocus\n [attr.aria-label]=\"ariaLabel ? node.name : null\"\n [attr.aria-describedby]=\"ariaDescribedby\"\n >\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </a>\n <!-- We use `div`s instead of `span`s here because the legacy `ListTable` component will insert\n `div` elements into this component's content. However, this will lead to invalid HTML for \"button\"\n mode. So really, users of this component should only insert flow content. -->\n <div *ngIf=\"disabled && !alwaysRipple\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </div>\n <div *ngIf=\"disabled && alwaysRipple\" matRipple matRippleColor=\"primary\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </div>\n</ng-container>\n<ng-container *ngIf=\"mode === 'wrapper'\">\n <div\n class=\"node-url-wrapper\"\n #wrapper\n matRipple\n matRippleColor=\"primary\"\n [matRippleDisabled]=\"disabled && !alwaysRipple\"\n (click)=\"clickWrapper($event)\"\n (auxclick)=\"clickWrapper($event)\"\n >\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </div>\n <!-- An invisible link that will by clicked programmatically by `clickWrapper()`. -->\n <a\n #link\n [routerLink]=\"get('routerLink')\"\n [state]=\"getState()\"\n [queryParams]=\"get('queryParams')\"\n queryParamsHandling=\"merge\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n class=\"cdk-visually-hidden\"\n ></a>\n</ng-container>\n<ng-container *ngIf=\"mode === 'button'\">\n <button\n [disabled]=\"disabled\"\n #link\n matRipple\n matRippleColor=\"primary\"\n [matRippleDisabled]=\"disabled && !alwaysRipple\"\n (click)=\"buttonClick.emit($event)\"\n cdkMonitorElementFocus\n >\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </button>\n</ng-container>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport * as rxjs from 'rxjs';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { DateHelper, FormatOptions } from '../util/DateHelper';\n\n@Pipe({\n name: 'formatDate',\n standalone: false,\n})\nexport class FormatDatePipe implements PipeTransform {\n constructor(private translate: TranslateService) {}\n\n transform(\n value: Date | number | string,\n args?: { time?: boolean; date?: boolean; relative?: boolean },\n ): string;\n transform(\n value: Date | number | string,\n args: { time?: boolean; date?: boolean; relative?: boolean; async: true },\n ): Observable<string>;\n transform(\n value: Date | number | string,\n args: { time?: boolean; date?: boolean; relative?: boolean; async?: boolean } = null,\n ): string | Observable<string> {\n if (!value) {\n return args?.async ? rxjs.of('') : '';\n }\n let options = new FormatOptions();\n if (args && args.time != null) options.showAlwaysTime = args.time;\n if (args && args.date != null) options.showDate = args.date;\n if (args && args.relative !== null) options.useRelativeLabels = args.relative;\n if (args?.async) {\n return this.translate\n .get('dummy') // Wait for the translation service to be ready\n .pipe(map(() => DateHelper.formatDate(this.translate, value, options)));\n } else {\n return DateHelper.formatDate(this.translate, value, options);\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Node } from 'ngx-edu-sharing-api';\nimport { RepoUrlService } from '../services/repo-url.service';\n\n@Pipe({\n name: 'esNodeIcon',\n standalone: false,\n})\nexport class NodeIconPipe implements PipeTransform {\n constructor(private repoUrlService: RepoUrlService) {}\n transform(node: Node) {\n return this.repoUrlService.getRepoUrl((node.relations?.Original || node).iconURL, node);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Node, RestConstants } from 'ngx-edu-sharing-api';\n\n@Pipe({\n name: 'NodeImageSize',\n standalone: false,\n})\nexport class NodeImageSizePipe implements PipeTransform {\n transform(node: Node, args: any = null): string {\n const width = parseFloat(node.properties[RestConstants.CCM_PROP_WIDTH]?.[0]);\n const height = parseFloat(node.properties[RestConstants.CCM_PROP_HEIGHT]?.[0]);\n const megapixel = Math.round((width * height) / 1000000);\n if (width && height) {\n if (megapixel > 1) {\n return megapixel + ' Megapixel';\n }\n return Math.round(width) + 'x' + Math.round(height);\n }\n return '';\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\nimport { NetworkService, Node, RestConstants } from 'ngx-edu-sharing-api';\nimport * as rxjs from 'rxjs';\nimport { Observable } from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\nimport { NodeHelperService } from '../services/node-helper.service';\nimport { RepoUrlService } from '../services/repo-url.service';\n\ninterface NodeImagePreferences {\n crop?: boolean;\n maxWidth?: number;\n maxHeight?: number;\n width?: number;\n height?: number;\n}\n\n@Pipe({\n name: 'esNodeImage',\n standalone: false,\n})\nexport class NodeImagePipe implements PipeTransform {\n constructor(\n private nodeHelper: NodeHelperService,\n private sanitizer: DomSanitizer,\n private repoUrlService: RepoUrlService,\n private networkApi: NetworkService,\n ) {}\n\n transform(node: Node, preferences: NodeImagePreferences = {}): Observable<SafeResourceUrl> {\n if (this.nodeHelper.isNodeCollection(node) && node.preview.isIcon) {\n return null;\n } else if (node.preview.data) {\n return rxjs.of(\n this.sanitizer.bypassSecurityTrustResourceUrl(\n 'data:' + node.preview.mimetype + ';base64,' + node.preview.data,\n ),\n );\n } else {\n return this.getPreviewUrl(node, preferences);\n }\n }\n\n private getPreviewUrl(node: Node, preferences: NodeImagePreferences): Observable<string> {\n return this.isEduSharingNode(node).pipe(\n switchMap(async (isEduSharingNode) => {\n let url = await this.repoUrlService.getRepoUrl(node.preview.url, node);\n if (isEduSharingNode) {\n url += Object.entries(preferences)\n .map(([key, value]) => `&${key}=${value}`)\n .join('');\n }\n return url;\n }),\n );\n }\n\n private isEduSharingNode(node: Node): Observable<boolean> {\n return rxjs\n .forkJoin([\n this.networkApi.isFromHomeRepository(node),\n this.networkApi.getRepositoryOfNode(node),\n ])\n .pipe(\n map(\n ([isFromHomeRepository, repository]) =>\n isFromHomeRepository ||\n repository?.repositoryType === RestConstants.REPOSITORY_TYPE_ALFRESCO,\n ),\n );\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ConfigService, Person } from 'ngx-edu-sharing-api';\n\n@Pipe({\n name: 'nodePersonName',\n standalone: false,\n})\nexport class NodePersonNamePipe implements PipeTransform {\n constructor(private config: ConfigService) {}\n transform(person: Person | any, args: any = null): string {\n let field = this.config.instant('userDisplayName', 'fullName');\n if (person == null) return null;\n if (field == 'authorityName') {\n if (person.authorityName == null) field = 'fullName';\n else return person.authorityName;\n }\n if (field == 'fullName') {\n if (person.profile) {\n return (\n (person.profile.firstName ? person.profile.firstName : '') +\n ' ' +\n (person.profile.lastName ? person.profile.lastName : '')\n ).trim();\n }\n return (\n (person.firstName ? person.firstName : '') +\n ' ' +\n (person.lastName ? person.lastName : '')\n ).trim();\n }\n if (field == 'firstName' || field == 'lastName') {\n if (person.profile) {\n return person.profile[field];\n }\n return person[field];\n }\n if (field == 'email') {\n if (person.profile && person.profile.email) return person.profile.email;\n if (person.email == null) return person.mailbox;\n return person.email;\n }\n return person[field];\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Node, RestConstants } from 'ngx-edu-sharing-api';\nimport { RestHelper } from '../util/rest-helper';\nimport { NodeRoot } from '../node-entries/entries-model';\nimport { isString } from 'lodash-es';\n\n@Pipe({\n name: 'nodeTitle',\n standalone: false,\n})\nexport class NodeTitlePipe implements PipeTransform {\n transform(node: Node | NodeRoot | 'HOME', args?: { type: 'name' | 'title' }): string {\n if (!(node as Node)?.name && isString(node)) {\n if (node === 'HOME') {\n return this.translate.instant('WORKSPACE.' + node);\n }\n return this.translate.instant('WORKSPACE.' + node);\n }\n const value =\n args?.type === 'name'\n ? RestHelper.getName(node as Node)\n : RestHelper.getTitle(node as Node);\n if ((node as Node)?.properties?.[RestConstants.CCM_PROP_MAPTYPE]) {\n return this.translate.instant(\n 'MAPTYPE.' + (node as Node)?.properties?.[RestConstants.CCM_PROP_MAPTYPE][0],\n {\n fallback: value,\n },\n );\n }\n return value;\n }\n constructor(private translate: TranslateService) {}\n}\n","import { trigger } from '@angular/animations';\nimport { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\nimport { MatMenu } from '@angular/material/menu';\nimport { UIAnimation } from '../util/ui-animation';\nimport { ListItem, SortEvent } from '../types/list-item';\n\n@Component({\n selector: 'es-sort-dropdown',\n templateUrl: 'sort-dropdown.component.html',\n styleUrls: ['sort-dropdown.component.scss'],\n animations: [trigger('openOverlay', UIAnimation.openOverlay(UIAnimation.ANIMATION_TIME_FAST))],\n standalone: false,\n})\nexport class SortDropdownComponent {\n @ViewChild('menu', { static: true }) menu: MatMenu;\n\n @Input() columns: ListItem[];\n @Input() sortBy: string;\n @Input() sortAscending: boolean;\n\n @Output() sort = new EventEmitter<SortEvent>();\n\n constructor() {}\n\n setSort(item: ListItem | any): void {\n let ascending = this.sortAscending;\n const itemAscending = item.mode === 'ascending';\n if (item.name === this.sortBy) {\n if (item.mode != null) {\n // element is limited to one mode, ignore the request\n if (itemAscending === this.sortAscending) {\n return;\n }\n }\n ascending = !ascending;\n } else if (item.mode != null) {\n // force mode when switching to item\n ascending = itemAscending;\n }\n (item as SortEvent).ascending = ascending;\n this.sort.emit(item);\n }\n}\n","<mat-menu #menu=\"matMenu\" class=\"sort-dropdown-menu\">\n <div class=\"collection-item-title\">{{ 'SORT_BY' | translate }}</div>\n <button\n *ngFor=\"let item of columns\"\n mat-menu-item\n (click)=\"setSort(item)\"\n class=\"collection-item\"\n [class.active]=\"sortBy === item.name\"\n >\n <span class=\"title\" *ngIf=\"item.label\">{{ item.label }}</span>\n <span class=\"title\" *ngIf=\"!item.label\">{{\n item.type + '_SORT.' + item.name\n | translate : { fallback: (item.type + '.' + item.name | translate) }\n }}</span>\n <ng-container *ngIf=\"sortBy === item.name && item.name !== 'ccm:collection_ordered_position'\">\n <i class=\"material-icons\" *ngIf=\"sortAscending\" [altText]=\"'ASCENDING' | translate\">\n arrow_upward\n </i>\n <i class=\"material-icons\" *ngIf=\"!sortAscending\" [altText]=\"'DESCENDING' | translate\">\n arrow_downward\n </i>\n <span class=\"cdk-visually-hidden\">{{ 'SELECTED' | translate }}</span>\n </ng-container>\n </button>\n</mat-menu>\n","import { Component, HostBinding } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@Component({\n selector: 'es-spinner',\n templateUrl: 'spinner.component.html',\n styleUrls: ['spinner.component.scss'],\n imports: [TranslateModule],\n})\nexport class SpinnerComponent {\n @HostBinding('attr.data-test') readonly dataTest = 'loading-spinner';\n\n constructor() {}\n}\n","<div class=\"spinner\">\n <span aria-live=\"polite\" class=\"cdk-visually-hidden\">{{ 'LOADING' | translate }}</span>\n <div class=\"spinnercontainer\">\n <div class=\"inner\">\n <div class=\"spinner1\"></div>\n </div>\n <div class=\"inner\">\n <div class=\"spinner2\"></div>\n </div>\n <div class=\"inner\">\n <div class=\"spinner3\"></div>\n </div>\n </div>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Node, RestConstants } from 'ngx-edu-sharing-api';\nimport { TranslateService } from '@ngx-translate/core';\nimport { of } from 'rxjs';\n\nexport type LicenseType = 'name';\n\n@Pipe({\n name: 'esNodeLicense',\n standalone: false,\n})\nexport class NodeLicensePipe implements PipeTransform {\n constructor(private translate: TranslateService) {}\n transform(node: Node, args: { type: LicenseType }) {\n if (node.properties[RestConstants.CCM_PROP_LICENSE]?.[0]) {\n if (args?.type === 'name') {\n return this.translate.get(\n 'LICENSE.NAMES.' + node.properties[RestConstants.CCM_PROP_LICENSE]?.[0],\n );\n }\n }\n if (args?.type === 'name') {\n return this.translate.get('LICENSE.NAMES.NONE');\n }\n return of(null);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatRippleModule } from '@angular/material/core';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { RouterModule } from '@angular/router';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { ActionbarComponent } from '../actionbar/actionbar.component';\nimport { BorderBoxObserverDirective } from '../directives/border-box-observer.directive';\nimport { CheckTextOverflowDirective } from '../directives/check-text-overflow.directive';\nimport { FocusStateDirective } from '../directives/focus-state.directive';\nimport { IconDirective } from '../directives/icon.directive';\nimport { InfiniteScrollDirective } from '../directives/infinite-scroll.directive';\nimport { DropdownComponent } from '../dropdown/dropdown.component';\nimport { NodeUrlComponent } from '../node-url/node-url.component';\nimport { FormatSizePipe } from '../pipes/file-size.pipe';\nimport { FormatDatePipe } from '../pipes/format-date.pipe';\nimport { NodeIconPipe } from '../pipes/node-icon.pipe';\nimport { NodeImageSizePipe } from '../pipes/node-image-size.pipe';\nimport { NodeImagePipe } from '../pipes/node-image.pipe';\nimport { NodePersonNamePipe } from '../pipes/node-person-name.pipe';\nimport { NodeTitlePipe } from '../pipes/node-title.pipe';\nimport { OptionTooltipPipe } from '../pipes/option-tooltip.pipe';\nimport { ReplaceCharsPipe } from '../pipes/replace-chars.pipe';\nimport { VCardNamePipe } from '../pipes/vcard-name.pipe';\nimport { SortDropdownComponent } from '../sort-dropdown/sort-dropdown.component';\nimport { SpinnerComponent } from '../spinner/spinner.component';\nimport { PropertySlugPipe } from '../pipes/property-slug.pipe';\nimport { NodeLicensePipe } from '../pipes/node-license.pipe';\nimport { MdsWidgetComponent } from '../mds-viewer/widget/mds-widget.component';\nimport { MdsDurationPipe } from '../pipes/mds-duration.pipe';\nimport { MdsViewerComponent } from '../mds-viewer/mds-viewer.component';\nimport { SpinnerSmallComponent } from '../spinner-small/spinner-small.component';\n\n@NgModule({\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n declarations: [\n MdsViewerComponent,\n MdsWidgetComponent,\n ActionbarComponent,\n BorderBoxObserverDirective,\n CheckTextOverflowDirective,\n DropdownComponent,\n FocusStateDirective,\n FormatDatePipe,\n FormatSizePipe,\n IconDirective,\n MdsDurationPipe,\n InfiniteScrollDirective,\n PropertySlugPipe,\n NodeIconPipe,\n NodeImagePipe,\n NodeImageSizePipe,\n NodeLicensePipe,\n NodePersonNamePipe,\n NodeTitlePipe,\n NodeUrlComponent,\n OptionTooltipPipe,\n ReplaceCharsPipe,\n SortDropdownComponent,\n VCardNamePipe,\n ],\n imports: [\n CommonModule,\n MatMenuModule,\n SpinnerComponent,\n SpinnerSmallComponent,\n MatButtonModule,\n MatTooltipModule,\n MatRippleModule,\n TranslateModule,\n RouterModule,\n ],\n exports: [\n MdsViewerComponent,\n MdsWidgetComponent,\n ActionbarComponent,\n BorderBoxObserverDirective,\n CheckTextOverflowDirective,\n DropdownComponent,\n FocusStateDirective,\n FormatDatePipe,\n FormatSizePipe,\n MdsDurationPipe,\n IconDirective,\n InfiniteScrollDirective,\n PropertySlugPipe,\n NodeIconPipe,\n NodeImagePipe,\n NodeImageSizePipe,\n NodePersonNamePipe,\n NodeTitlePipe,\n NodeUrlComponent,\n SortDropdownComponent,\n SpinnerComponent,\n SpinnerSmallComponent,\n VCardNamePipe,\n ],\n})\nexport class EduSharingUiCommonModule {}\n","import { Sort, SortDirection } from '@angular/material/sort';\nimport { EventEmitter } from '@angular/core';\n\nexport type ListItemType = 'NODE' | 'NODE_PROPOSAL' | 'COLLECTION' | 'ORG' | 'GROUP' | 'USER';\n\n/**\n * A list item info, which is basically a column\n * Example:\n this.columns.push(new ListItem(RestConstants.CM_NAME));\n this.columns.push(new ListItem(RestConstants.CM_ARCHIVED_DATE));\n */\nexport class ListItem {\n /**\n * Should this item be shown by default\n * @type {boolean}\n */\n public visible = true;\n\n /**\n * Label to display, if set, should be preferred instead of automatic i18n\n */\n public label: string;\n\n /**\n * custom format string for date fields, may be null\n */\n public format: string;\n constructor(\n public type: ListItemType,\n public name: string,\n public config = {\n showLabel: false,\n },\n ) {}\n\n static getCollectionDefaults() {\n let columns = [];\n columns.push(new ListItem('COLLECTION', 'title'));\n columns.push(new ListItem('COLLECTION', 'info'));\n columns.push(new ListItem('COLLECTION', 'scope'));\n return columns;\n }\n}\nexport class ListItemSort extends ListItem {\n constructor(\n public type: ListItemType,\n public name: string,\n public mode: 'ascending' | 'descending' | null = null,\n public config = {\n showLabel: false,\n },\n ) {\n super(type, name, config);\n }\n}\nexport class SortEvent extends ListItemSort {\n ascending: boolean;\n}\n\n/**\n * UI element that allows the user to choose sorting.\n */\nexport interface SortPanel {\n active: string;\n direction: SortDirection;\n readonly sortChange: EventEmitter<Sort>;\n}\n","import { TranslateService } from '@ngx-translate/core';\nimport {\n AuthenticationService,\n MdsDefinition,\n MdsSort,\n MdsWidget,\n RestConstants,\n} from 'ngx-edu-sharing-api';\nimport { Injectable } from '@angular/core';\nimport { ListItem, ListItemType } from '../types/list-item';\nimport { isArray } from 'lodash';\n\ntype ColumnTypeInternal<T extends string> = { [k in T]?: ListItem[] };\nexport type ColumnType = ColumnTypeInternal<'Default' | 'Table'>;\n@Injectable()\nexport class MdsHelperService {\n static getSortInfo(mdsSet: MdsDefinition, name: string): MdsSort {\n if (mdsSet) {\n if (mdsSet.sorts) {\n for (const list of mdsSet.sorts) {\n if (list.id == name) {\n return list;\n }\n }\n }\n console.error('mds does not define sort info for ' + name + ', invalid configuration!');\n }\n return null;\n }\n\n /**\n *\n * get columns as an object structure\n * There are always Columns in the result.Default but there can also be further types\n * See @ColumnType\n */\n getColumns(mdsSet: MdsDefinition, name: string) {\n let columns: ColumnType = {};\n if (mdsSet) {\n for (const list of mdsSet.lists) {\n if (list.id === name) {\n for (const column of Object.entries(list.columns)) {\n let type: ListItemType = 'NODE';\n if (name === 'mediacenterGroups') {\n type = 'GROUP';\n } else if (name === 'searchCollections') {\n type = 'COLLECTION';\n }\n if (isArray(column[1])) {\n (columns as any)[column[0]] = column[1].map((c) => {\n if (c.id.includes('.')) {\n const split = c.id.split('.');\n type = split[0] as ListItemType;\n c.id = split.slice(1).join('.');\n }\n const item = new ListItem(type, c.id);\n item.format = c.format;\n const key = item.type + '.' + item.name;\n if (item.type === 'NODE' && this.translate.instant(key) === key) {\n item.label = mdsSet.widgets.filter(\n (w: any) => w.id === item.name,\n )?.[0]?.caption;\n }\n return item;\n });\n } else {\n console.warn('Invalid column data from backend', column[0], column[1]);\n }\n }\n break;\n }\n }\n }\n if (!columns?.Default?.length) {\n const defaultColumns = [];\n if (mdsSet !== null) {\n console.warn(\n 'mds does not define columns for ' + name + ', invalid configuration!',\n );\n }\n if (name === 'search' || name === 'collectionReferences') {\n defaultColumns.push(new ListItem('NODE', RestConstants.LOM_PROP_TITLE));\n defaultColumns.push(new ListItem('NODE', RestConstants.CM_MODIFIED_DATE));\n defaultColumns.push(new ListItem('NODE', RestConstants.CCM_PROP_LICENSE));\n defaultColumns.push(new ListItem('NODE', RestConstants.CCM_PROP_REPLICATIONSOURCE));\n } else if (name === 'mediacenterManaged') {\n defaultColumns.push(new ListItem('NODE', RestConstants.LOM_PROP_TITLE));\n defaultColumns.push(\n new ListItem('NODE', RestConstants.CCM_PROP_REPLICATIONSOURCEID),\n );\n defaultColumns.push(new ListItem('NODE', RestConstants.CCM_PROP_REPLICATIONSOURCE));\n } else if (name === 'mediacenterGroups') {\n defaultColumns.push(new ListItem('GROUP', RestConstants.AUTHORITY_DISPLAYNAME));\n defaultColumns.push(new ListItem('GROUP', RestConstants.AUTHORITY_GROUPTYPE));\n } else if (name === 'searchCollections') {\n defaultColumns.push(...ListItem.getCollectionDefaults());\n }\n columns['Default'] = defaultColumns;\n }\n return columns;\n }\n\n /**\n * Finds the appropriate widget with the id, but will not check any widget conditions\n * @param cid\n * @param template\n * @param widgets\n */\n static getWidget(cid: string, template: string | undefined | null, widgets: MdsWidget[]) {\n if (widgets == null) {\n console.warn('Could not iterate widget ' + cid + ': no widgets data provided');\n return null;\n }\n for (let w of widgets) {\n if (w.id == cid) {\n if (template === undefined || w.template === template) {\n return w;\n }\n }\n }\n return null;\n }\n\n constructor(\n private authentication: AuthenticationService,\n private translate: TranslateService,\n ) {}\n\n /**\n * Same as getWidget, but will also check the widget conditions\n * @param connector\n * @param properties\n * @param id\n * @param template\n * @param widgets\n */\n async getWidgetWithCondition(\n properties: any,\n id: string,\n template: string = null,\n widgets: any,\n ) {\n for (let w of widgets) {\n if (w.id == id) {\n if (\n (template == null || w.template == template) &&\n (await this.isWidgetConditionTrue(w, properties))\n ) {\n return w;\n }\n }\n }\n return null;\n }\n\n async isWidgetConditionTrue(widget: any, properties: any) {\n if (!widget.condition) return true;\n let condition = widget.condition;\n if (condition.type == 'PROPERTY' && properties) {\n if (\n (!properties[condition.value] && !condition.negate) ||\n (properties[condition.value] && condition.negate)\n ) {\n return false;\n }\n }\n if (condition.type == 'TOOLPERMISSION') {\n let tp = await this.authentication.hasToolpermission(condition.value);\n if (tp == condition.negate) {\n return false;\n }\n }\n return true;\n }\n /**\n * Find a template by id in the given mds\n */\n static findTemplate(mds: MdsDefinition, id: string) {\n return (\n mds.views as Array<\n ArrayElement<MdsDefinition['views']> | ArrayElement<MdsDefinition['views']>\n >\n ).find((v) => v.id === id);\n }\n /**\n * Returns all widgets used by the given template\n */\n static getUsedWidgets(mds: MdsDefinition, template: string = null): any[] {\n const used: any = [];\n const templateData = MdsHelperService.findTemplate(mds, template);\n for (const w of mds.widgets) {\n if (\n templateData.html.indexOf('<' + w.id) !== -1 &&\n !used.find((w2: any) => w2.id === w.id)\n ) {\n used.push(w);\n }\n }\n return used;\n }\n}\n\ntype ArrayElement<ArrayType extends readonly unknown[]> =\n ArrayType extends readonly (infer ElementType)[] ? ElementType : never;\n","import { NgModule } from '@angular/core';\nimport { MdsHelperService } from './mds-helper.service';\n\n@NgModule({\n declarations: [],\n providers: [MdsHelperService],\n})\nexport class MdsModule {}\n","import { Node } from 'ngx-edu-sharing-api';\nimport { DropAction } from '../../types/drag-drop';\n\nexport interface DragDataLegacy {\n event?: DragEvent;\n nodes?: Node[];\n dropAction?: DropAction;\n}\nexport type DropActionLegacy = 'copy' | 'move' | 'link';\n\nexport interface DropDataLegacy extends DragDataLegacy {\n target: DragNodeTarget;\n}\n\nexport type DragNodeTarget = Node | 'HOME';\n\nexport const dragNodesTransferType = 'application/nodes';\n\nconst storageKey = 'app-drag-nodes';\n\nexport function readDraggedNodes(): Node[] {\n const json = window.localStorage.getItem(storageKey);\n return JSON.parse(json);\n}\n\nexport function saveDraggedNodes(nodes: Node[]): void {\n const json = JSON.stringify(nodes);\n window.localStorage.setItem(storageKey, json);\n}\n\nexport function clearDraggedNodes(): void {\n window.localStorage.removeItem(storageKey);\n}\n","import {\n Directive,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { Node } from 'ngx-edu-sharing-api';\nimport { clearDraggedNodes, dragNodesTransferType, saveDraggedNodes } from './drag-nodes';\n\n/**\n * Handle dragging and dropping of node elements.\n *\n * Use in combination with `NodesDropTargetDirective`.\n *\n * When nodes that set this directive are dragged, we save information about\n * these nodes that can be used by `NodesDropTargetDirective`.\n */\n@Directive({\n selector: '[esNodesDragSource]',\n standalone: false,\n})\nexport class NodesDragSourceDirective implements OnChanges {\n /**\n * The nodes to be dragged.\n *\n * When not set, this directive is effectively disabled.\n */\n @Input('esNodesDragSource') nodes?: Node[];\n\n /**\n * Triggered when processing the dragstart event.\n *\n * Changes to `nodes` performed by event handlers of `nodesDragStart` will\n * be taken into account for the drag operation.\n */\n @Output() nodesDragStart = new EventEmitter<DragEvent>(false);\n /**\n * Triggered when processing the dragend event.\n */\n @Output() nodesDragEnd = new EventEmitter<DragEvent>();\n\n constructor(private elementRef: ElementRef<Element>) {}\n\n ngOnChanges(changes: SimpleChanges) {\n // Set the `draggable` attribute when this directive is active.\n if (changes.nodes) {\n if (!!changes.nodes.currentValue !== !!changes.nodes.previousValue) {\n this.elementRef.nativeElement.setAttribute('draggable', (!!this.nodes).toString());\n }\n }\n }\n\n @HostListener('dragstart', ['$event']) onDragStart(event: DragEvent) {\n if (!this.nodes) {\n return;\n }\n this.nodesDragStart.emit(event);\n // Use the transfer-data type to identify a node-drag operation.\n event.dataTransfer.setData(dragNodesTransferType, '');\n // Chrome doesn't provide drag transfer data to dragover event listeners\n // for security reasons, so we provide the data via localStorage.\n //\n // Wait for updates by event handlers of `nodesDragStart` to propagate.\n setTimeout(() => {\n saveDraggedNodes(this.nodes);\n });\n }\n\n @HostListener('dragend', ['$event']) onDragEnd(event: DragEvent) {\n if (!this.nodes) {\n return;\n }\n this.nodesDragEnd.emit(event);\n clearDraggedNodes();\n }\n}\n","export abstract class Toast {\n abstract toast(message: string, translationParameters?: any): void;\n\n abstract error(errorObject: any, message?: string): void;\n}\n","import { Injectable, NgZone } from '@angular/core';\nimport * as rxjs from 'rxjs';\nimport { BehaviorSubject } from 'rxjs';\nimport { distinctUntilChanged, map, pairwise } from 'rxjs/operators';\nimport { CanDrop, DropAction } from '../types/drag-drop';\nimport { NodesDropTargetDirective } from '../directives/drag-nodes/nodes-drop-target.directive';\nimport { Node } from 'ngx-edu-sharing-api';\nimport { Toast } from './abstract/toast.service';\nimport { UIService } from './ui.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NodesDragDropService {\n /** The node(s) currently being dragged. */\n private draggedNodesSubject = new BehaviorSubject<Node[]>(null);\n /** The drop target that something is currently dragged above. */\n private dropTargetSubject = new BehaviorSubject<NodesDropTargetDirective>(null);\n /** Whether the current drop target allows dropping the dragged node(s). */\n private canDropSubject = new BehaviorSubject<CanDrop | null>(null);\n /** A target being hovered with the cursor. Does not mean anything is dragged yet. */\n private hoveredTargetSubject = new BehaviorSubject<NodesDropTargetDirective>(null);\n /** Current drop action based on pressed modifier keys. */\n private dropActionSubject = new BehaviorSubject<DropAction>('move');\n /** The current cursor style. */\n private curserSubject = new BehaviorSubject<string>(null);\n\n set draggedNodes(nodes: Node[]) {\n this.draggedNodesSubject.next(nodes);\n }\n\n get canDrop() {\n return this.canDropSubject.value;\n }\n\n constructor(private ngZone: NgZone, private toast: Toast, private uiService: UIService) {\n this.registerDropTarget();\n this.registerCanDrop();\n this.registerDropActionSubject();\n this.registerCursor();\n this.registerActiveDropTargetStyle();\n // this.draggedNodesSubject.subscribe((draggedNodes) =>\n // console.log('draggedNodes', draggedNodes),\n // );\n // this.dropTargetSubject.subscribe((dropTarget) => console.log('dropTarget', dropTarget));\n // this.canDropSubject.subscribe((canDrop) => console.log('canDrop', canDrop));\n }\n\n /** Call when the cursor enters a possible drop target. Runs outside ngZone. */\n onMouseEnter(target: NodesDropTargetDirective) {\n this.hoveredTargetSubject.next(target);\n }\n\n /** Call when the cursor leaves a possible drop target. Runs outside ngZone. */\n onMouseLeave(target: NodesDropTargetDirective) {\n if (this.hoveredTargetSubject.value === target) {\n this.hoveredTargetSubject.next(null);\n }\n }\n\n onDropped(nodes: Node[]) {\n if (this.canDrop?.accept) {\n this.dropTargetSubject.value?.nodeDropped.emit({\n draggedNodes: nodes,\n action: this.dropActionSubject.value,\n target: this.dropTargetSubject.value.target,\n });\n } else if (this.canDrop?.denyReason) {\n this.toast.error(null, this.canDrop.denyReason);\n }\n }\n\n private registerDropTarget() {\n rxjs.combineLatest([this.draggedNodesSubject, this.hoveredTargetSubject])\n .pipe(\n map(([draggedNodes, hoveredNode]) => draggedNodes && hoveredNode),\n distinctUntilChanged(),\n )\n .subscribe((target) => {\n this.ngZone.run(() => {\n this.dropTargetSubject.next(target);\n });\n });\n }\n\n private registerCanDrop() {\n rxjs.combineLatest([this.dropTargetSubject, this.dropActionSubject])\n .pipe(\n map(([dropTarget, dropAction]) =>\n dropTarget?.canDropNodes({\n draggedNodes: this.draggedNodesSubject.value,\n action: dropAction,\n target: dropTarget.target,\n }),\n ),\n // FIXME: this won't filter equal objects\n distinctUntilChanged(),\n )\n .subscribe((canDrop) => {\n this.ngZone.run(() => this.canDropSubject.next(canDrop));\n });\n }\n\n private registerCursor() {\n rxjs.combineLatest([\n this.draggedNodesSubject,\n this.canDropSubject,\n this.dropActionSubject,\n ]).subscribe(([draggedNodes, canDrop, dropAction]) => {\n this.curserSubject.next(this.getCursor(draggedNodes, canDrop, dropAction));\n });\n let style: HTMLStyleElement;\n this.curserSubject.subscribe((cursor) => {\n if (cursor && !style) {\n style = document.createElement('style');\n document.body.appendChild(style);\n } else if (style && !cursor) {\n document.body.removeChild(style);\n style = null;\n }\n if (cursor) {\n style.innerHTML = `* {cursor: ${cursor} !important; }`;\n }\n });\n }\n\n private registerActiveDropTargetStyle() {\n rxjs.combineLatest([this.dropTargetSubject, this.canDropSubject, this.dropActionSubject])\n .pipe(pairwise())\n .subscribe(([[previous], [current, canDrop, action]]) => {\n // console.log('can drop', canDrop);\n previous?._setActiveDropTarget(null);\n current?._setActiveDropTarget({ canDrop, action });\n });\n }\n\n private registerDropActionSubject() {\n this.uiService\n .observeCtrlOrCmdKeyPressedOutsideZone()\n .pipe(map((ctrlOrCmdPressed) => this.getDropAction(ctrlOrCmdPressed)))\n .subscribe((dropAction) =>\n this.ngZone.run(() => this.dropActionSubject.next(dropAction)),\n );\n }\n\n private getDropAction(ctrlOrCmdPressed: boolean): DropAction {\n if (ctrlOrCmdPressed) {\n return 'copy';\n } else {\n return 'move';\n }\n }\n\n private getCursor(draggedNodes: Node[], canDrop: CanDrop, dropAction: DropAction): string {\n if (!draggedNodes) {\n return null;\n } else if (canDrop?.denyExplicit) {\n return 'no-drop';\n } else if (dropAction === 'copy') {\n return 'copy';\n } else {\n return 'grabbing';\n }\n }\n}\n","import { CdkDrag } from '@angular/cdk/drag-drop';\nimport { Directive } from '@angular/core';\nimport { Node } from 'ngx-edu-sharing-api';\nimport { NodesDragDropService } from '../../services/nodes-drag-drop.service';\n\n/**\n * A draggable node.\n *\n * Use in combination with `cdkDrag`, setting `cdkDragData` to the array of nodes to be dragged.\n */\n@Directive({\n selector: '[esNodesDrag]',\n standalone: false,\n})\nexport class NodesDragDirective {\n constructor(private cdkDrag: CdkDrag<Node[]>, private nodesDragDrop: NodesDragDropService) {\n this.cdkDrag.started.subscribe((event) => {\n this.nodesDragDrop.draggedNodes = event.source.data;\n // Position the preview element (the one being dragged around) next to the cursor to\n // avoid covering possible drop targets with the preview.\n event.source._dragRef['_pickupPositionInElement'] = { x: 0, y: 0 };\n });\n this.cdkDrag.released.subscribe(() => {\n if (this.nodesDragDrop.canDrop?.accept) {\n this.inhibitPreviewAnimation();\n }\n });\n this.cdkDrag.dropped.subscribe(() => {\n this.nodesDragDrop.onDropped(this.cdkDrag.data);\n this.nodesDragDrop.draggedNodes = null;\n });\n }\n\n private inhibitPreviewAnimation() {\n const style = document.createElement('style');\n document.body.appendChild(style);\n style.innerHTML = `.cdk-drag-preview { transition: none !important; }`;\n // Don't need to go outside ng zone because `cdkDrag.released` already runs outside the\n // zone.\n setTimeout(() => {\n document.body.removeChild(style);\n });\n }\n}\n","import {\n Directive,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnDestroy,\n Output,\n} from '@angular/core';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { CanDrop, DragData, DropTargetState } from '../../types/drag-drop';\nimport { NodesDragDropService } from '../../services/nodes-drag-drop.service';\n\nconst ACTIVE_DROP_TARGET_ACCEPT_CLASS = 'es-nodes-active-drop-target-accept';\nconst ACTIVE_DROP_TARGET_DENY_CLASS = 'es-nodes-active-drop-target-deny';\n\n@Directive({\n selector: '[esNodesDropTarget]',\n exportAs: 'esNodesDropTarget',\n standalone: false,\n})\nexport class NodesDropTargetDirective<T = unknown> implements OnDestroy {\n @Input('esNodesDropTarget') target: T;\n @Input() canDropNodes: (dragData: DragData<T>) => CanDrop;\n @Output() nodeDropped = new EventEmitter<DragData<T>>();\n\n get active() {\n return this.activeDropTargetSubject.value;\n }\n\n private activeDropTargetSubject = new BehaviorSubject<DropTargetState | null>(null);\n private destroyed = new Subject<void>();\n\n constructor(\n private ngZone: NgZone,\n private elementRef: ElementRef<HTMLElement>,\n private nodesDragDrop: NodesDragDropService,\n ) {\n this.registerMouseEnterLeave();\n this.registerActiveDropTarget();\n }\n\n ngOnDestroy(): void {\n this.destroyed.next();\n this.destroyed.complete();\n }\n\n _setActiveDropTarget(value: DropTargetState | null) {\n this.activeDropTargetSubject.next(value);\n }\n\n private registerMouseEnterLeave() {\n this.ngZone.runOutsideAngular(() => {\n this.elementRef.nativeElement.addEventListener('mouseenter', () =>\n this.nodesDragDrop.onMouseEnter(this),\n );\n this.elementRef.nativeElement.addEventListener('mouseleave', () =>\n this.nodesDragDrop.onMouseLeave(this),\n );\n // Firefox does not fire a mouseleave event when the element is removed from the DOM\n // while being hovered. When an element is dragged, it will be replaced with a\n // placeholder. If the element was also a drop target, we would think that we are still\n // hovering the element.\n observeRemovedFromParent(this.elementRef.nativeElement)\n .pipe(takeUntil(this.destroyed))\n .subscribe(() => this.nodesDragDrop.onMouseLeave(this));\n });\n }\n\n private registerActiveDropTarget() {\n this.activeDropTargetSubject\n .pipe(takeUntil(this.destroyed))\n .subscribe((dropTargetState) => {\n const canDrop = dropTargetState?.canDrop;\n const classList = this.elementRef.nativeElement.classList;\n classList.remove(ACTIVE_DROP_TARGET_ACCEPT_CLASS, ACTIVE_DROP_TARGET_DENY_CLASS);\n if (canDrop?.accept) {\n classList.add(ACTIVE_DROP_TARGET_ACCEPT_CLASS);\n } else if (canDrop?.denyExplicit) {\n classList.add(ACTIVE_DROP_TARGET_DENY_CLASS);\n }\n });\n }\n}\n\nfunction observeRemovedFromParent(element: HTMLElement): Observable<void> {\n return new Observable((subscriber) => {\n const observer = new MutationObserver((event) => {\n for (const mutation of event) {\n // @ts-ignore\n if ([...mutation.removedNodes].includes(element)) {\n subscriber.next();\n }\n }\n });\n // Wait for `element` to be attached to the DOM.\n let timeout = setTimeout(() => {\n timeout = null;\n observer.observe(element.parentNode, { childList: true, subtree: false });\n });\n return () => {\n // In case the element was destroyed before we attached the mutation observer, we cancel\n // the observable returned by this function and don't attach the mutation observer.\n if (timeout !== null) {\n // TODO: Investigate elements that trigger the following warning.\n //\n // console.warn(\n // 'Possible performance leak: the element got destroyed before it could be added to the DOM.',\n // element,\n // );\n clearTimeout(timeout);\n }\n observer.disconnect();\n };\n });\n}\n","export enum DurationFormat {\n /**\n * format with colon, i.e. H:MM:SS\n */\n Colon = 'colon',\n /**\n * format with Hh Mm Ss\n */\n Hms = 'hms',\n}\nexport class DurationHelper {\n public static getDurationInSeconds(value: string): number {\n // PT1H5M23S\n // or 00:00:00\n // or 00:00\n if (!value) return 0;\n try {\n let result = value.split(':');\n if (result.length == 3) {\n let h = result[0] ? parseInt(result[0]) : 0;\n let m = result[1] ? parseInt(result[1]) : 0;\n let s = result[2] ? parseInt(result[2]) : 0;\n let time = h * 60 * 60 + m * 60 + s;\n return time;\n }\n if (result.length == 2) {\n let m = result[0] ? parseInt(result[0]) : 0;\n let s = result[1] ? parseInt(result[1]) : 0;\n let time = m * 60 + s;\n return time;\n }\n } catch (e) {\n return value as unknown as number;\n }\n try {\n let regexp = new RegExp('PT(\\\\d+H)?(\\\\d+M)?(\\\\d+S)?');\n let result = regexp.exec(value);\n let h = result[1] ? parseInt(result[1]) : 0;\n let m = result[2] ? parseInt(result[2]) : 0;\n let s = result[3] ? parseInt(result[3]) : 0;\n let time = h * 60 * 60 + m * 60 + s;\n return time;\n } catch (e) {\n return value as unknown as number;\n }\n }\n public static getDurationFormatted(\n duration: string,\n format: DurationFormat = DurationFormat.Colon,\n ): string {\n let time = DurationHelper.getDurationInSeconds(duration);\n if (!time) return '';\n let h = Math.floor(time / 60 / 60);\n let m = Math.floor(Math.floor(time / 60) % 60);\n let s = Math.floor(time % 60);\n let options: Intl.NumberFormatOptions = {\n minimumIntegerDigits: 2,\n maximumFractionDigits: 0,\n };\n let numberFormat = new Intl.NumberFormat([], options);\n let str = '';\n /*\n if(h>0) {\n str = format.format(h) + \"h\";\n }\n if(m>0) {\n if (str)\n str += \" \";\n str += format.format(m) + \"m\";\n }\n if(s>0) {\n if (str)\n str += \" \";\n str += format.format(s) + \"s\";\n }\n */\n if (format === DurationFormat.Colon) {\n str =\n numberFormat.format(h) +\n ':' +\n numberFormat.format(m) +\n ':' +\n numberFormat.format(s);\n } else {\n if (h > 0) {\n str += h + 'h';\n }\n if (m > 0) {\n str += ' ' + m + 'm';\n }\n if (s > 0) {\n str += ' ' + s + 's';\n }\n str = str.trim();\n }\n return str;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DurationFormat, DurationHelper } from '../util/duration-helper';\n\n@Pipe({\n name: 'formatDuration',\n standalone: false,\n})\nexport class FormatDurationPipe implements PipeTransform {\n transform(\n value: string,\n args = {\n format: DurationFormat.Hms,\n },\n ): string {\n return DurationHelper.getDurationFormatted(value, args.format);\n }\n}\n","import { Input, Type, Directive } from '@angular/core';\nimport { Person } from 'ngx-edu-sharing-api';\nimport { BehaviorSubject } from 'rxjs';\nimport { Node, ProposalNode, Group, Statistics } from 'ngx-edu-sharing-api';\nimport { ListItem } from '../types/list-item';\n\n@Directive()\nexport class ListWidget {\n @Input()\n get node(): Node | ProposalNode | Group | Person | Statistics {\n return this.nodeSubject.value;\n }\n set node(value: Node | ProposalNode | Group | Person | Statistics) {\n this.nodeSubject.next(value);\n }\n protected readonly nodeSubject = new BehaviorSubject<\n Node | ProposalNode | Group | Person | Statistics\n >(null); // node (or group/user)\n\n @Input()\n get item(): ListItem {\n return this.itemSubject.value;\n }\n set item(value: ListItem) {\n this.itemSubject.next(value);\n }\n protected readonly itemSubject = new BehaviorSubject<ListItem>(null);\n\n /**\n * Provide a label for non-obvious fields that describes the field the given value belongs to.\n *\n * The label is included in a tooltip and made available for a11y technologies.\n *\n * Useful when the value is displayed without context.\n *\n * Other tooltips might be added even with this input set to `false`.\n */\n @Input()\n get provideLabel() {\n return this.provideLabelSubject.value;\n }\n set provideLabel(value) {\n this.provideLabelSubject.next(value);\n }\n protected readonly provideLabelSubject = new BehaviorSubject(false);\n\n constructor() {}\n}\n\nexport type ListWidgetClass = {\n supportedItems: ListItem[];\n} & Type<ListWidget>;\n","export class AccessibilitySettings {\n toastMode: 'important' | 'all' = 'all';\n toastDuration: ToastDuration = ToastDuration.Seconds_5;\n contrastMode = false;\n indicatorIcons = true;\n}\nexport enum ToastDuration {\n Seconds_3 = 3,\n Seconds_5 = 5,\n Seconds_8 = 8,\n Seconds_15 = 15,\n Seconds_30 = 30,\n Seconds_60 = 60,\n Infinite = null,\n}\n","import { Injectable } from '@angular/core';\nimport * as rxjs from 'rxjs';\nimport { Observable } from 'rxjs';\nimport { first, map } from 'rxjs/operators';\nimport { AccessibilitySettings } from '../types/accessibillity';\nimport { SessionStorageService } from 'ngx-edu-sharing-api';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AccessibilityService {\n private static readonly STORAGE_PREFIX = 'accessibility_';\n\n constructor(private storage: SessionStorageService) {}\n\n async set(accessibilitySettings: Partial<AccessibilitySettings>): Promise<void> {\n const currentValues = await this.observeAll().pipe(first()).toPromise();\n const values = Object.entries(accessibilitySettings)\n .filter(\n ([key, value]) =>\n // check if value has been modified\n (currentValues as any)[key] !== value,\n )\n .reduce((acc, [key, value]) => {\n acc[AccessibilityService.STORAGE_PREFIX + key] = value;\n return acc;\n }, {} as { [key: string]: any });\n if (Object.keys(values).length > 0) {\n return this.storage.setValues(values);\n }\n }\n\n observe<K extends keyof AccessibilitySettings>(key: K): Observable<AccessibilitySettings[K]>;\n observe<K extends keyof AccessibilitySettings>(\n keys: K[],\n ): Observable<Pick<AccessibilitySettings, K>>;\n observe(): Observable<AccessibilitySettings>;\n observe<K extends keyof AccessibilitySettings>(\n keyOrKeys?: K | K[],\n ): Observable<AccessibilitySettings[K] | Pick<AccessibilitySettings, K>> {\n if (typeof keyOrKeys === 'string') {\n return this.observeSingle(keyOrKeys);\n } else if (Array.isArray(keyOrKeys)) {\n return this.observeMultiple(keyOrKeys);\n } else {\n return this.observeAll();\n }\n }\n\n private observeSingle<K extends keyof AccessibilitySettings>(\n key: K,\n ): Observable<AccessibilitySettings[K]> {\n const defaultValues = new AccessibilitySettings();\n return this.storage.observe(AccessibilityService.STORAGE_PREFIX + key, defaultValues[key]);\n }\n\n private observeMultiple<K extends keyof AccessibilitySettings>(\n keys: K[],\n ): Observable<Pick<AccessibilitySettings, K>> {\n const defaultValues = new AccessibilitySettings();\n return combineLatest(\n keys.reduce((acc, key) => {\n acc[key] = this.storage.observe(\n AccessibilityService.STORAGE_PREFIX + key,\n defaultValues[key],\n );\n return acc;\n }, {} as { [key in keyof AccessibilitySettings]: Observable<AccessibilitySettings[key]> }),\n );\n }\n\n private observeAll(): Observable<AccessibilitySettings> {\n return this.observeMultiple(\n Object.keys(new AccessibilitySettings()) as Array<keyof AccessibilitySettings>,\n );\n }\n}\n\n/**\n * Rxjs.combineLatest on objects instead of arrays.\n *\n * This is a standard function in Rxjs 7, but we wrap it here for Rxjs 6.\n */\nfunction combineLatest<T, K extends keyof T>(sources: {\n [key in K]: Observable<T[key]>;\n}): Observable<T> {\n return rxjs\n .combineLatest(\n Object.entries(sources).map(([key, source]) =>\n (source as Observable<T[K]>).pipe(map((result) => ({ key, result }))),\n ),\n )\n .pipe(\n map((results) =>\n results.reduce((acc, { key, result }) => {\n acc[key as K] = result;\n return acc;\n }, {} as T),\n ),\n );\n}\n","import { Component } from '@angular/core';\nimport { ListItem } from '../../types/list-item';\nimport { ListWidget } from '../list-widget';\nimport { NodeHelperService } from '../../services/node-helper.service';\nimport { AccessibilityService } from '../../services/accessibility.service';\n\n@Component({\n selector: 'es-list-collection-info',\n templateUrl: './list-collection-info.component.html',\n styleUrls: ['./list-collection-info.component.scss'],\n standalone: false,\n})\nexport class ListCollectionInfoComponent extends ListWidget {\n static supportedItems = [\n new ListItem('COLLECTION', 'info'),\n new ListItem('COLLECTION', 'scope'),\n ];\n\n readonly indicatorIcons$;\n\n constructor(private accessibility: AccessibilityService, public nodeHelper: NodeHelperService) {\n super();\n this.indicatorIcons$ = this.accessibility.observe('indicatorIcons');\n }\n}\n","<ng-container [ngSwitch]=\"item.name\">\n <ng-container *ngSwitchCase=\"'info'\">\n <ng-container *ngIf=\"indicatorIcons$ | async; else textRepresentation\">\n <i\n esIcon=\"layers\"\n [altText]=\"'COLLECTION.INFO_REFERENCES_MULTI' | translate\"\n [matTooltip]=\"'COLLECTION.INFO_REFERENCES_MULTI' | translate\"\n ></i>\n {{ $any(node).collection?.childCollectionsCount }}\n <i\n esIcon=\"insert_drive_file\"\n [altText]=\"'collections_content' | translate\"\n [matTooltip]=\"'collections_content' | translate\"\n ></i>\n {{ $any(node).collection?.childReferencesCount }}\n </ng-container>\n <ng-template #textRepresentation>\n <div class=\"rows\">\n <p>\n {{ 'COLLECTION.INFO_REFERENCES_MULTI' | translate }}:\n {{ $any(node).collection?.childCollectionsCount }}\n </p>\n <p>\n {{ 'collections_content' | translate }}:\n {{ $any(node).collection?.childReferencesCount }}\n </p>\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngSwitchCase=\"'scope'\">\n <i\n *ngIf=\"indicatorIcons$ | async; else textRepresentation\"\n class=\"collectionScope\"\n [esIcon]=\"nodeHelper.getCollectionScopeInfo($any(node)).icon\"\n esIconContext=\"collection-scope\"\n [matTooltip]=\"\n 'COLLECTION.SCOPE.' + nodeHelper.getCollectionScopeInfo($any(node)).scopeName | translate\n \"\n [altText]=\"\n 'COLLECTION.SCOPE.' + nodeHelper.getCollectionScopeInfo($any(node)).scopeName | translate\n \"\n ></i>\n <ng-template #textRepresentation>\n {{\n 'COLLECTION.SCOPE.' + nodeHelper.getCollectionScopeInfo($any(node)).scopeName | translate\n }}\n </ng-template>\n </ng-container>\n</ng-container>\n","import { Component } from '@angular/core';\nimport { ListWidget } from '../list-widget';\nimport { ListItem } from '../../types/list-item';\nimport { StatisticsGroup } from 'ngx-edu-sharing-api';\n\n@Component({\n selector: 'es-list-counts',\n templateUrl: './list-counts.component.html',\n styleUrls: ['./list-counts.component.scss'],\n standalone: false,\n})\nexport class ListCountsComponent extends ListWidget {\n static supportedItems = [\n new ListItem('NODE', 'counts.OVERALL'),\n new ListItem('NODE', 'counts.VIEW_MATERIAL'),\n new ListItem('NODE', 'counts.VIEW_COLLECTION'),\n new ListItem('NODE', 'counts.VIEW_MATERIAL_EMBEDDED'),\n new ListItem('NODE', 'counts.VIEW_MATERIAL_PLAY_MEDIA'),\n new ListItem('NODE', 'counts.OPEN_EXTERNAL_LINK'),\n new ListItem('NODE', 'counts.DOWNLOAD_MATERIAL'),\n ];\n\n static getCountSingle(node: StatisticsGroup, id: string, group: number = null) {\n const counts = (node as any).counts;\n if (id === 'OVERALL') {\n return Object.keys(counts.counts)\n .map((c) => (group ? group : counts.counts[c]))\n .reduce((a, b) => a + b);\n }\n return (group ? group : counts.counts[id]) || 0;\n }\n static getCount(node: StatisticsGroup, id: string) {\n const counts = (node as any).counts;\n let result = this.getCountSingle(node, id);\n if (Object.keys(counts.groups)?.length > 0) {\n const i1 = id;\n if (counts.groups[i1]) {\n const i2 = Object.keys(counts.groups[i1])[0];\n if (counts.groups?.[i1]?.[i2]) {\n result = Object.keys(counts.groups?.[i1]?.[i2])\n .map(\n (group) =>\n (group || '-') +\n ': ' +\n this.getCountSingle(node, id, counts.groups?.[i1]?.[i2][group]),\n )\n .join('\\n')\n .trim();\n }\n }\n }\n return result;\n }\n\n getId() {\n return this.item.name.split('.')[1];\n }\n\n getCount() {\n return ListCountsComponent.getCount(this.node as StatisticsGroup, this.getId());\n }\n}\n","{{ getCount() }}\n","import { Component } from '@angular/core';\nimport { ListWidget } from '../list-widget';\nimport { TranslateService } from '@ngx-translate/core';\nimport * as rxjs from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\nimport { ListItem } from '../../types/list-item';\nimport { NodeHelperService } from '../../services/node-helper.service';\nimport { Node, RestConstants } from 'ngx-edu-sharing-api';\nimport { AccessibilityService } from '../../services/accessibility.service';\n\n@Component({\n selector: 'es-list-node-license',\n templateUrl: './list-node-license.component.html',\n standalone: false,\n})\nexport class ListNodeLicenseComponent extends ListWidget {\n static supportedItems = [new ListItem('NODE', RestConstants.CCM_PROP_LICENSE)];\n\n readonly licenseName$ = this.nodeSubject.pipe(\n map((node) => this.nodeHelper.getLicenseName(node as Node)),\n );\n\n readonly licenseIcon$ = this.nodeSubject.pipe(\n switchMap((node) => this.nodeHelper.getLicenseIcon(node as Node)),\n );\n\n readonly tooltip$ = rxjs.combineLatest([this.licenseName$, this.provideLabelSubject]).pipe(\n switchMap(([licenseName, provideLabel]) => {\n if (provideLabel) {\n return this.translate\n .get('NODE.ccm:commonlicense_key')\n .pipe(map((commonLicenseKey) => `${commonLicenseKey}: ${licenseName}`));\n } else {\n return rxjs.of(licenseName);\n }\n }),\n );\n\n readonly indicatorIcons$ = this.accessibility.observe('indicatorIcons');\n\n constructor(\n private accessibility: AccessibilityService,\n private nodeHelper: NodeHelperService,\n private translate: TranslateService,\n ) {\n super();\n }\n}\n","<ng-container *ngIf=\"licenseIcon$ | async as licenseIcon\">\n <span *ngIf=\"indicatorIcons$ | async; else textRepresentation\" [matTooltip]=\"tooltip$ | async\"\n ><img [alt]=\"tooltip$ | async\" [src]=\"licenseIcon\"\n /></span>\n <ng-template #textRepresentation>\n <span>{{ tooltip$ | async }}</span>\n </ng-template>\n</ng-container>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { NetworkService, Repository } from 'ngx-edu-sharing-api';\nimport { NodeHelperService } from '../services/node-helper.service';\n\n@Pipe({\n name: 'appNodeSource',\n standalone: false,\n})\nexport class NodeSourcePipe implements PipeTransform {\n private homeRepository: Repository;\n\n constructor(private nodeHelper: NodeHelperService, private networkApi: NetworkService) {\n this.networkApi.getHomeRepository().subscribe((homeRepository) => {\n this.homeRepository = homeRepository;\n });\n }\n\n transform(\n replicationSource: string,\n args: {\n mode: 'text' | 'url' | 'escaped';\n },\n ): string {\n const rawSrc = replicationSource ? replicationSource.toString().trim() : 'home';\n if (args.mode === 'text') {\n if (rawSrc === 'home') {\n // FIXME: This will fix the pipe's return value to 'home' for calls before\n // `this.homeRepository` was populated (although that doesn't seem to happen).\n return this.homeRepository?.title || 'home';\n }\n return rawSrc;\n } else if (args.mode === 'url') {\n const src = this.escape(rawSrc);\n return this.nodeHelper.getSourceIconPath(src);\n } else if (args.mode === 'escaped') {\n return this.escape(rawSrc);\n }\n return null;\n }\n\n private escape(src: string) {\n if (!src) {\n return src;\n }\n src = src.substring(src.lastIndexOf(':') + 1).toLowerCase();\n src = src.replace(/\\s/g, '_');\n src = src.replace(/\\./g, '_');\n src = src.replace(/\\//g, '_');\n return src;\n }\n}\n","import { Component } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport * as rxjs from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\nimport { ListWidget } from '../list-widget';\nimport { NodeSourcePipe } from '../node-source.pipe';\nimport { AccessibilityService } from '../../services/accessibility.service';\nimport { NetworkService, Node, RestConstants } from 'ngx-edu-sharing-api';\nimport { ListItem } from '../../types/list-item';\n\n@Component({\n selector: 'es-list-node-replication-source',\n templateUrl: './list-node-replication-source.component.html',\n providers: [NodeSourcePipe],\n standalone: false,\n})\nexport class ListNodeReplicationSourceComponent extends ListWidget {\n static supportedItems = [new ListItem('NODE', RestConstants.CCM_PROP_REPLICATIONSOURCE)];\n\n readonly replicationSource$ = this.nodeSubject.pipe(\n map((node) => (node as Node).properties['ccm:replicationsource']?.[0]),\n );\n\n readonly text$ = this.replicationSource$.pipe(\n // Wait for repositories to be available to `restNetwork` since `nodeSource.transform` fails\n // if it isn't.\n switchMap((replicationSource) =>\n this.networkService.getRepositories().pipe(map(() => replicationSource)),\n ),\n switchMap((replicationSource) =>\n this.translate.get(\n 'REPOSITORIES.' + this.nodeSource.transform(replicationSource, { mode: 'escaped' }),\n { fallback: this.nodeSource.transform(replicationSource, { mode: 'text' }) },\n ),\n ),\n );\n\n readonly tooltip$ = rxjs.combineLatest([this.text$, this.provideLabelSubject]).pipe(\n switchMap(([text, provideLabel]) => {\n if (provideLabel) {\n return this.translate\n .get('NODE.ccm:replicationsource')\n .pipe(map((replicationSource) => `${replicationSource}: ${text}`));\n } else {\n return rxjs.of(text);\n }\n }),\n );\n\n readonly indicatorIcons$ = this.accessibility.observe('indicatorIcons');\n\n constructor(\n private accessibility: AccessibilityService,\n\n private nodeSource: NodeSourcePipe,\n private translate: TranslateService,\n private networkService: NetworkService,\n ) {\n super();\n }\n}\n","<span *ngIf=\"indicatorIcons$ | async; else textRepresentation\" [matTooltip]=\"tooltip$ | async\">\n <img\n [src]=\"replicationSource$ | async | appNodeSource : { mode: 'url' }\"\n (error)=\"$any($event.target).style.display = 'none'\"\n [alt]=\"tooltip$ | async\"\n />\n</span>\n\n<ng-template #textRepresentation>\n <span>{{ tooltip$ | async }}</span>\n</ng-template>\n","import { Component } from '@angular/core';\nimport { ListWidget } from '../list-widget';\nimport { ListItem } from '../../types/list-item';\nimport { NodeHelperService } from '../../services/node-helper.service';\nimport { Node, RestConstants } from 'ngx-edu-sharing-api';\n\n@Component({\n selector: 'es-list-node-workflow',\n templateUrl: './list-node-workflow.component.html',\n standalone: false,\n})\nexport class ListNodeWorkflowComponent extends ListWidget {\n static supportedItems = [new ListItem('NODE', RestConstants.CCM_PROP_WF_STATUS)];\n\n constructor(private nodeHelper: NodeHelperService) {\n super();\n }\n\n getWorkflowStatus() {\n return this.nodeHelper.getWorkflowStatus(this.node as Node).current;\n }\n}\n","<div class=\"workflowStatus\" [style.background-color]=\"getWorkflowStatus()?.color\">\n {{ 'WORKFLOW.' + getWorkflowStatus()?.id | translate }}\n</div>\n","import { ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport * as Constants from 'ngx-edu-sharing-api';\nimport { MdsService, Node, Organization, ProposalNode, RestConstants } from 'ngx-edu-sharing-api';\nimport { BehaviorSubject, merge } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport { ListItem } from '../../types/list-item';\nimport { ListWidget } from '../list-widget';\nimport { NodeHelperService } from '../../services/node-helper.service';\nimport { MdsHelperService } from '../../mds/mds-helper.service';\n\n@Component({\n selector: 'es-list-text',\n templateUrl: './list-text.component.html',\n styleUrls: ['./list-text.component.scss'],\n standalone: false,\n})\nexport class ListTextComponent extends ListWidget implements OnInit {\n static supportedItems = [\n new ListItem('NODE', '*'),\n new ListItem('NODE_PROPOSAL', '*'),\n new ListItem('COLLECTION', '*'),\n new ListItem('ORG', '*'),\n new ListItem('GROUP', '*'),\n new ListItem('USER', '*'),\n ];\n readonly DATE_FIELDS = RestConstants.DATE_FIELDS;\n readonly VCARD_FIELDS = RestConstants.getAllVCardFields();\n displayName$ = new BehaviorSubject<string>(null);\n\n constructor(\n private nodeHelper: NodeHelperService,\n private mds: MdsService,\n private changeDetectorRef: ChangeDetectorRef,\n ) {\n super();\n }\n\n async ngOnInit() {\n merge([this.nodeSubject, this.itemSubject])\n .pipe(switchMap(() => this.updateDisplayname()))\n .subscribe((displayName) => {});\n }\n getNode() {\n if (this.item.type === 'NODE_PROPOSAL') {\n return (this.node as ProposalNode).proposal || this.node;\n } else if ((this.node as Node).type === RestConstants.CCM_TYPE_COLLECTION_PROPOSAL) {\n return (this.node as Node).relations?.Original ?? this.node;\n }\n return this.node;\n }\n\n isUserProfileAttribute(attribute: string) {\n return (\n [\n RestConstants.AUTHORITY_FIRSTNAME,\n RestConstants.AUTHORITY_LASTNAME,\n RestConstants.AUTHORITY_EMAIL,\n ].indexOf(attribute) !== -1\n );\n }\n getWorkflowStatus() {\n return this.nodeHelper.getWorkflowStatus(this.node as Node).current;\n }\n\n getI18n(item: ListItem) {\n return (item.type === 'NODE_PROPOSAL' ? 'NODE_PROPOSAL' : 'NODE') + '.' + item.name;\n }\n\n isDangerousGroup() {\n return (\n (this.node as Organization).authorityName ===\n RestConstants.GROUP_ALFRESCO_ADMINISTRATORS\n );\n }\n\n private async updateDisplayname() {\n const node = this.getNode() as Node;\n if (!node.properties) {\n this.displayName$.next('');\n return;\n }\n this.displayName$.next(\n node.properties[this.item.name + '_DISPLAYNAME']?.length > 0\n ? node.properties[this.item.name + '_DISPLAYNAME'].join(', ')\n : node.properties[this.item.name]?.join(', '),\n );\n\n try {\n const mds = await this.mds\n .getMetadataSet({\n repository: node.ref?.repo || Constants.HOME_REPOSITORY,\n metadataSet: node.metadataset || Constants.DEFAULT,\n })\n .toPromise();\n const widget = MdsHelperService.getWidget(this.item.name, null, mds.widgets);\n if (widget?.values) {\n const i18n = node.properties[this.item.name]\n ?.map((prop) => widget.values.filter((v) => v.id === prop)?.[0]?.caption)\n .filter((cap) => !!cap);\n if (i18n) {\n this.displayName$.next(i18n.join(', '));\n }\n }\n } catch (e) {\n // access to mds might be forbidden\n e.preventDefault();\n }\n }\n}\n","<label *ngIf=\"item.config?.showLabel\">\n {{ getI18n(item) | translate }}\n</label>\n<ng-container *ngIf=\"item.type === 'ORG' || item.type === 'GROUP'\">\n <ng-container [ngSwitch]=\"item.name\">\n <span *ngSwitchCase=\"'displayName'\" [class.type-danger]=\"isDangerousGroup()\">\n {{ $any(getNode()).profile?.displayName || $any(getNode()).authorityName }}\n </span>\n <span *ngSwitchCase=\"'groupType'\">\n {{ 'PERMISSIONS.GROUP_TYPE.' + $any(getNode()).profile?.groupType | translate }}\n </span>\n <span *ngSwitchDefault>\n {{ $any(getNode())[item.name] }}\n </span>\n </ng-container>\n</ng-container>\n<ng-container *ngIf=\"item.type === 'USER'\">\n <span *ngIf=\"isUserProfileAttribute(item.name)\">\n {{ $any(getNode()).profile?.[item.name] }}\n </span>\n <span *ngIf=\"item.name === 'status'\">\n {{ 'PERMISSIONS.USER_STATUS.' + $any(getNode()).status.status | translate }}\n </span>\n <span *ngIf=\"!isUserProfileAttribute(item.name) && item.name !== 'status'\">\n {{ $any(getNode())[item.name] }}\n </span>\n</ng-container>\n<ng-container\n [ngSwitch]=\"item.name\"\n *ngIf=\"item.type === 'NODE' || item.type === 'NODE_PROPOSAL' || item.type === 'COLLECTION'\"\n>\n <span *ngSwitchCase=\"'name'\">\n {{ $any(getNode()).name }}\n </span>\n <span\n *ngSwitchCase=\"'mediatype'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ 'MEDIATYPE.' + $any(getNode()).mediatype | translate }}\n </span>\n <span *ngSwitchCase=\"'size'\" [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\">\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ $any(getNode()).size | formatSize }}\n </span>\n <span\n *ngSwitchCase=\"'cclom:size'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ $any(getNode()).size | formatSize }}\n </span>\n <span\n *ngSwitchCase=\"'dimensions'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ $any(getNode()) | NodeImageSize }}\n </span>\n <span\n *ngSwitchCase=\"'ccm:wf_status'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <es-list-node-workflow\n [item]=\"item\"\n [node]=\"node\"\n [provideLabel]=\"false\"\n ></es-list-node-workflow>\n <!--<span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ 'WORKFLOW.' + getWorkflowStatus().id | translate }}-->\n </span>\n <span\n *ngSwitchCase=\"'cm:creator'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ $any(getNode()).createdBy | nodePersonName }}\n </span>\n <span\n *ngSwitchCase=\"'cm:modifier'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.cm:modifier' | translate }}:</span\n >\n {{ $any(getNode()).modifiedBy | nodePersonName }}\n </span>\n <span\n *ngSwitchCase=\"'ccm:replicationsource'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.ccm:replicationsource' | translate }}:</span\n >\n {{ $any(getNode()).properties['ccm:replicationsource'] | appNodeSource : { mode: 'text' } }}\n </span>\n <span\n *ngSwitchCase=\"'ccm:commonlicense_key'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.ccm:commonlicense_key' | translate }}:</span\n >\n <ng-container *ngIf=\"$any(getNode()).properties['ccm:commonlicense_key'] as license\">\n {{\n license[0] === 'CUSTOM'\n ? $any(getNode()).properties['cclom:rights_description']\n : ('LICENSE.NAMES.' + $any(getNode()).properties['ccm:commonlicense_key']\n | translate : { fallback: $any(getNode()).properties['ccm:commonlicense_key'] })\n }}\n </ng-container>\n <ng-container *ngIf=\"!$any(getNode()).properties['ccm:commonlicense_key']\">\n {{ 'LICENSE.NAMES.NONE' | translate }}\n </ng-container>\n </span>\n <span\n *ngSwitchCase=\"'ccm:educationaltypicalagerange'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.ccm:educationaltypicalagerange' | translate }}:</span\n >\n <ng-container\n *ngIf=\"\n $any(getNode()).properties['ccm:educationaltypicalagerange_from'] ||\n $any(getNode()).properties['ccm:educationaltypicalagerange_to']\n \"\n >\n {{ $any(getNode()).properties['ccm:educationaltypicalagerange_from'] }} -\n {{ $any(getNode()).properties['ccm:educationaltypicalagerange_to'] }}\n </ng-container>\n </span>\n <span\n *ngSwitchCase=\"'cclom:duration'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.cclom:duration' | translate }}:</span\n >\n {{ $any(getNode()).properties['cclom:duration']?.[0] | formatDuration }}\n </span>\n <span\n *ngSwitchCase=\"'ccm:collection_proposal_status'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.ccm:collection_proposal_status' | translate }}:</span\n >\n <!-- use node instead of getNode() to access the raw proposal data! -->\n {{\n 'PROPOSAL_STATUS.' + $any(node).properties['ccm:collection_proposal_status']?.[0]\n | translate: { fallback: '' }\n }}\n </span>\n <span\n *ngSwitchDefault\n esCheckTextOverflow\n #text=\"esCheckTextOverflow\"\n [matTooltip]=\"\n provideLabel ? (getI18n(item) | translate) : text.hasTextOverflow() ? content.innerText : null\n \"\n #content\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n <ng-container *ngIf=\"['title', 'cm:title', 'cclom:title'].includes(item.name)\">\n {{ $any(getNode()) | nodeTitle }}\n </ng-container>\n <ng-container *ngIf=\"['name', 'cm:name'].includes(item.name)\">\n {{ $any(getNode()) | nodeTitle : { type: 'name' } }}\n </ng-container>\n <ng-container\n *ngIf=\"!['name', 'cm:name', 'title', 'cm:title', 'cclom:title'].includes(item.name)\"\n >\n <ng-container\n *ngIf=\"DATE_FIELDS.indexOf(item.name) === -1 && VCARD_FIELDS.indexOf(item.name) === -1\"\n >\n {{ displayName$ | async }}\n </ng-container>\n <ng-container *ngIf=\"DATE_FIELDS.includes(item.name)\">\n {{\n ($any(getNode()).properties[item.name + '_LONG']?.[0] || $any(getNode()).properties[item.name]?.[0])\n | formatDate: { async: true, time: true, relative: true }\n | async\n }}\n </ng-container>\n <ng-container *ngIf=\"VCARD_FIELDS.includes(item.name)\">\n {{\n $any(getNode()).properties[item.name]\n ? ($any(getNode()).properties[item.name] | vcardName)\n : ''\n }}\n </ng-container>\n </ng-container>\n </span>\n</ng-container>\n","import { ListCollectionInfoComponent } from './list-collection-info/list-collection-info.component';\nimport { ListCountsComponent } from './list-counts/list-counts.component';\nimport { ListNodeLicenseComponent } from './list-node-license/list-node-license.component';\nimport { ListNodeReplicationSourceComponent } from './list-node-replication-source/list-node-replication-source.component';\nimport { ListNodeWorkflowComponent } from './list-node-workflow/list-node-workflow.component';\nimport { ListTextComponent } from './list-text/list-text.component';\nimport { ListWidgetClass } from './list-widget';\n\nexport enum ListWidgetType {\n CollectionInfo = 'CollectionInfo',\n Text = 'Text',\n Custom = 'Custom',\n NodeLicense = 'NodeLicense',\n NodeReplicationSource = 'NodeReplicationSource',\n NodeWorkflow = 'NodeWorkflow',\n NodeCounts = 'NodeCounts',\n}\nexport const AVAILABLE_LIST_WIDGETS: {\n [widgetType in ListWidgetType]: ListWidgetClass;\n} = {\n CollectionInfo: ListCollectionInfoComponent,\n NodeLicense: ListNodeLicenseComponent,\n NodeReplicationSource: ListNodeReplicationSourceComponent,\n NodeWorkflow: ListNodeWorkflowComponent,\n NodeCounts: ListCountsComponent,\n Custom: null,\n\n // use the widgets with wildcards as last ones\n Text: ListTextComponent,\n};\n","import { Injectable, TemplateRef } from '@angular/core';\nimport { Node } from 'ngx-edu-sharing-api';\nimport { ListItemType } from '../types/list-item';\nimport { Scope } from '../types/option-item';\n\nexport type CustomField = {\n type: ListItemType;\n name: string | CustomFieldSpecialType;\n};\nexport enum CustomFieldSpecialType {\n preview,\n type,\n}\nexport type CustomFieldInfo = {\n type: ListItemType;\n /**\n * Either the property name (i.e. \"cm:name\") or a special value.\n */\n name: string | CustomFieldSpecialType;\n\n /**\n * Custom callback which should return true if the template should be used for the given item.\n */\n useCallback?: (node: Node) => boolean;\n templateRef: TemplateRef<unknown>;\n};\n\nexport type PaginationStrategy = 'infinite-scroll' | 'paginator';\n\ntype PaginationScope = Scope | 'DEFAULT';\n/**\n * this service is intended to add custom behaviour to the global tables & grid views\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class NodeEntriesGlobalService {\n private customFields: CustomFieldInfo[] = [];\n private paginationStrategy: { [key in PaginationScope]?: PaginationStrategy } = {\n [Scope.WorkspaceList]: 'infinite-scroll',\n [Scope.Search]: 'infinite-scroll',\n DEFAULT: 'infinite-scroll',\n };\n private paginatorSizeOptions: { [key in PaginationScope]?: number[] } = {\n DEFAULT: [25, 50, 75, 100],\n };\n private customCssClassProvider: (node: Node) => string;\n\n constructor() {}\n\n public setPaginationStrategy(scope: PaginationScope, strategy: PaginationStrategy) {\n this.paginationStrategy[scope] = strategy;\n }\n public getPaginationStrategy(scope: Scope) {\n return this.paginationStrategy[scope] ?? this.paginationStrategy['DEFAULT'];\n }\n public setPaginatorSizeOptions(scope: PaginationScope, size: number[]) {\n this.paginatorSizeOptions[scope] = size;\n }\n public getPaginatorSizeOptions(scope: Scope) {\n return this.paginatorSizeOptions[scope] ?? this.paginatorSizeOptions['DEFAULT'];\n }\n public getCustomCssClass(node: Node) {\n if (this.customCssClassProvider) {\n return this.customCssClassProvider(node);\n }\n return '';\n }\n\n /**\n * a custom provider for a css class based on a node\n * it should return the given css class that will be added to each node entry based on the given node\n */\n public setCustomCssClassProvider(provider: (node: Node) => string) {\n this.customCssClassProvider = provider;\n }\n public getCustomFieldTemplate(item: CustomField, node: Node) {\n return this.customFields.filter(\n (c) =>\n c.type === item.type &&\n c.name === item.name &&\n (!c.useCallback || c.useCallback(node)),\n )?.[0]?.templateRef;\n }\n\n /**\n * Registers a custom (node) attribute you want to render via the given template.\n *\n * You may also override existing attributes if you want to provide a custom view.\n * each template gets two bindings:\n * node: the current node\n * entriesService: the injected service which provides state & config infos of the current view *\n */\n registerCustomFieldRendering(customFieldInfo: CustomFieldInfo) {\n this.customFields.push(customFieldInfo);\n }\n}\n","import { Component, Input, OnChanges, SimpleChanges, TemplateRef } from '@angular/core';\nimport { AVAILABLE_LIST_WIDGETS, ListWidgetType } from '../available-widgets';\nimport { ListWidget } from '../list-widget';\nimport { NodeEntriesGlobalService } from '../../node-entries/node-entries-global.service';\nimport { Node } from 'ngx-edu-sharing-api';\n\n@Component({\n selector: 'es-list-base',\n templateUrl: './list-base.component.html',\n standalone: false,\n})\nexport class ListBaseComponent extends ListWidget implements OnChanges {\n /**\n * use text only widgets (for table)\n */\n @Input() forceText = false;\n widgetType: ListWidgetType;\n customTemplate: TemplateRef<unknown>;\n constructor(private nodeEntriesGlobalService: NodeEntriesGlobalService) {\n super();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this.node && this.item) {\n this.customTemplate = this.nodeEntriesGlobalService.getCustomFieldTemplate(\n this.item,\n this.node as Node,\n );\n this.widgetType = Object.entries(AVAILABLE_LIST_WIDGETS).find(\n ([id, w]) =>\n w?.supportedItems?.filter(\n (i) =>\n i.type === this.item.type &&\n (i.name === this.item.name || i.name === '*'),\n ).length > 0,\n )?.[0] as ListWidgetType;\n if (this.customTemplate) {\n this.widgetType = ListWidgetType.Custom;\n } else if (this.forceText) {\n if (![ListWidgetType.NodeCounts, ListWidgetType.Text].includes(this.widgetType)) {\n this.widgetType = ListWidgetType.Text;\n }\n }\n }\n }\n}\n","<ng-container [ngSwitch]=\"widgetType\">\n <ng-container *ngSwitchCase=\"'Custom'\">\n <ng-container\n *ngTemplateOutlet=\"\n customTemplate;\n context: {\n item: item,\n node: node,\n provideLabel: provideLabel,\n forceText: forceText\n }\n \"\n >\n </ng-container>\n </ng-container>\n <es-list-collection-info\n *ngSwitchCase=\"'CollectionInfo'\"\n [item]=\"item\"\n [node]=\"node\"\n [provideLabel]=\"provideLabel\"\n ></es-list-collection-info>\n <es-list-text\n *ngSwitchCase=\"'Text'\"\n [item]=\"item\"\n [node]=\"node\"\n [provideLabel]=\"provideLabel\"\n ></es-list-text>\n <es-list-counts\n *ngSwitchCase=\"'NodeCounts'\"\n [item]=\"item\"\n [node]=\"node\"\n [provideLabel]=\"provideLabel\"\n ></es-list-counts>\n <es-list-node-license\n *ngSwitchCase=\"'NodeLicense'\"\n [item]=\"item\"\n [node]=\"node\"\n [provideLabel]=\"provideLabel\"\n ></es-list-node-license>\n <es-list-node-replication-source\n *ngSwitchCase=\"'NodeReplicationSource'\"\n [item]=\"item\"\n [node]=\"node\"\n [provideLabel]=\"provideLabel\"\n ></es-list-node-replication-source>\n <es-list-node-workflow\n *ngSwitchCase=\"'NodeWorkflow'\"\n [item]=\"item\"\n [node]=\"node\"\n [provideLabel]=\"provideLabel\"\n ></es-list-node-workflow>\n</ng-container>\n","import { Component, ContentChild, Input, TemplateRef } from '@angular/core';\nimport { Node } from 'ngx-edu-sharing-api';\nimport { ListItem } from '../../types/list-item';\n\n@Component({\n selector: 'es-node-row',\n templateUrl: 'node-row.component.html',\n styleUrls: ['node-row.component.scss'],\n standalone: false,\n})\nexport class NodeRowComponent {\n @ContentChild('customMetadata') customMetadataRef: TemplateRef<any>;\n @Input() node: Node;\n @Input() columns: ListItem[];\n\n constructor() {}\n}\n","<div class=\"node-row\" *ngIf=\"node\">\n <div class=\"icon-bg\">\n <img\n [src]=\"node | esNodeIcon | async\"\n [alt]=\"\n node.mediatype\n ? ('NODE.mediatype' | translate) + ': ' + ('MEDIATYPE.' + node.mediatype | translate)\n : ''\n \"\n [matTooltip]=\"\n node.mediatype\n ? ('NODE.mediatype' | translate) + ': ' + ('MEDIATYPE.' + node.mediatype | translate)\n : ''\n \"\n />\n </div>\n <div class=\"node-data\">\n <div class=\"node-data-primary\">\n <es-list-text [node]=\"node\" [item]=\"columns[0]\"> </es-list-text>\n </div>\n <div class=\"node-data-secondary\">\n <es-list-text\n *ngFor=\"let column of columns.slice(1)\"\n [node]=\"node\"\n [item]=\"column\"\n [provideLabel]=\"true\"\n ></es-list-text>\n <ng-container *ngTemplateOutlet=\"customMetadataRef; context: { node: node }\"></ng-container>\n </div>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { FormatDurationPipe } from './format-duration.pipe';\nimport { ListBaseComponent } from './list-base/list-base.component';\nimport { ListCollectionInfoComponent } from './list-collection-info/list-collection-info.component';\nimport { ListCountsComponent } from './list-counts/list-counts.component';\nimport { ListNodeLicenseComponent } from './list-node-license/list-node-license.component';\nimport { ListNodeReplicationSourceComponent } from './list-node-replication-source/list-node-replication-source.component';\nimport { ListNodeWorkflowComponent } from './list-node-workflow/list-node-workflow.component';\nimport { ListTextComponent } from './list-text/list-text.component';\nimport { NodeRowComponent } from './node-row/node-row.component';\nimport { NodeSourcePipe } from './node-source.pipe';\nimport { CommonModule } from '@angular/common';\nimport { EduSharingUiCommonModule } from '../common/edu-sharing-ui-common.module';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@NgModule({\n declarations: [\n ListBaseComponent,\n ListCollectionInfoComponent,\n ListNodeLicenseComponent,\n ListNodeReplicationSourceComponent,\n ListNodeWorkflowComponent,\n ListTextComponent,\n ListCountsComponent,\n NodeSourcePipe,\n FormatDurationPipe,\n NodeRowComponent,\n ],\n imports: [CommonModule, EduSharingUiCommonModule, MatTooltipModule, TranslateModule],\n exports: [ListBaseComponent, ListTextComponent, FormatDurationPipe, NodeRowComponent],\n})\nexport class ListItemsModule {}\n","import { Component, Input } from '@angular/core';\nimport { ListItem } from '../../types/list-item';\nimport { Node } from 'ngx-edu-sharing-api';\nimport { NodeEntriesDataType } from '../entries-model';\n\n@Component({\n selector: 'es-drag-preview',\n templateUrl: './drag-preview.component.html',\n styleUrls: ['./drag-preview.component.scss'],\n standalone: false,\n})\nexport class DragPreviewComponent<T extends NodeEntriesDataType> {\n @Input() node: Node;\n @Input() selected: T[];\n @Input() item: ListItem;\n}\n","<div class=\"drag-preview\" [matBadge]=\"selected.length > 1 ? selected.length : null\">\n <div class=\"drag-preview-icon\">\n <img *ngIf=\"node.iconURL\" [src]=\"node | esNodeIcon | async\" />\n </div>\n <es-list-text class=\"drag-preview-text\" [node]=\"node\" [item]=\"item\"></es-list-text>\n</div>\n","import { InjectionToken } from '@angular/core';\n\nexport class I18nConfig {\n /**\n * shall the user profile be read\n * If not set, defaults to true\n */\n obeyUserProfile?: boolean = true;\n\n /**\n * custom additional uris to fetch language files from\n *\n * Might be used if additional angular modules require language data\n *\n * Example\n * {provide: I18N_CONFIG, useValue: { ... }},\n */\n additionalI18nProvider?: (lang: string) => string[];\n}\n\n/**\n * additional configuration options\n */\nexport const I18N_CONFIG = new InjectionToken<I18nConfig>('I18N_CONFIG');\n","export abstract class AppService {\n abstract isRunningApp(): boolean;\n abstract getLanguage(): Promise<string>;\n}\n","import { ApplicationRef, Inject, Injectable, Injector, Optional } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BehaviorSubject, from, Observable, of, of as observableOf } from 'rxjs';\nimport { first, map, switchMap, tap } from 'rxjs/operators';\nimport { ConfigService, LANGUAGES, SessionStorageService } from 'ngx-edu-sharing-api';\nimport { AppService } from '../services/abstract/app.service';\nimport { I18N_CONFIG, I18nConfig } from '../types/injection-tokens';\n\n// 'none' means that only labels should be shown (for dev)\nconst DEFAULT_SUPPORTED_LANGUAGES = [\n 'de',\n 'de-informal',\n 'de-no-binnen-i',\n 'en',\n 'fr',\n 'it',\n 'none',\n];\n\n@Injectable({ providedIn: 'root' })\nexport class TranslationsService {\n private language: string;\n private languageLoaded = new BehaviorSubject(false);\n\n constructor(\n private config: ConfigService,\n private injector: Injector,\n // optional, some web components may don't have it!\n @Optional() private route: ActivatedRoute,\n @Optional() @Inject(I18N_CONFIG) private i18nConfig: I18nConfig,\n private translate: TranslateService,\n private ref: ApplicationRef,\n @Optional() private appService: AppService,\n ) {\n if (!this.i18nConfig) {\n this.i18nConfig = new I18nConfig();\n }\n if (this.i18nConfig.obeyUserProfile) {\n this.injector\n .get(SessionStorageService)\n ?.observe('language')\n .subscribe((lang) => {\n // language has changed, i.e. user has different preference\n if (this.translate.currentLang && this.translate.currentLang !== lang) {\n this.initialize().subscribe(() => {\n this.ref.tick();\n });\n }\n });\n }\n }\n\n /**\n * Determines and configures the language to use and triggers loading of translations with\n * ngx-translate.\n *\n * Call this once in the app component.\n */\n initialize(): Observable<void> {\n const supportedLanguages$ = from(\n this.config.get('supportedLanguages', DEFAULT_SUPPORTED_LANGUAGES),\n );\n if (this.appService?.isRunningApp()) {\n return supportedLanguages$.pipe(\n switchMap((supportedLanguages: string[]) =>\n this.initializeCordova(supportedLanguages),\n ),\n map(() => undefined as void),\n );\n }\n supportedLanguages$\n .pipe(\n tap((supportedLanguages) => {\n if (!supportedLanguages.includes('none')) {\n supportedLanguages.push('none');\n }\n }),\n tap((supportedLanguages: string[]) => this.translate.addLangs(supportedLanguages)),\n // Select queryParams.locale if set meaningfully\n switchMap((supportedLanguages: string[]) =>\n (this.route ? this.route.queryParams : of(null)).pipe(\n first(),\n map((params) => {\n let selectedLanguage: string = null;\n if (supportedLanguages.indexOf(params?.locale) !== -1) {\n selectedLanguage = params?.locale;\n } else if (params?.locale) {\n if (params?.locale === 'de') {\n const deVariants = supportedLanguages.filter((l) =>\n l.startsWith('de-'),\n );\n if (deVariants?.length === 1) {\n selectedLanguage = deVariants[0];\n } else {\n console.warn(\n `Url requested language ${params.locale}, ` +\n 'but ambiguous variants are present: ' +\n supportedLanguages,\n );\n }\n } else {\n console.warn(\n `Url requested language ${params.locale}, ` +\n 'but it was not found or is not configured in the allowed languages: ' +\n supportedLanguages,\n );\n }\n }\n return {\n supportedLanguages,\n selectedLanguage,\n };\n }),\n ),\n ),\n // Select storage.get('language') if set meaningfully\n switchMap(({ supportedLanguages, selectedLanguage }) => {\n if (selectedLanguage) {\n return observableOf({\n supportedLanguages,\n selectedLanguage,\n useStored: false,\n });\n } else {\n if (!this.i18nConfig.obeyUserProfile) {\n console.info(\n 'obeyUserProfile is disabled, using default language ' +\n supportedLanguages[0],\n );\n return of({\n supportedLanguages,\n selectedLanguage,\n useStored: false,\n });\n }\n return this.injector\n .get(SessionStorageService)\n .get('language')\n .pipe(\n map((storageLanguage) => {\n let useStored = false;\n if (supportedLanguages.indexOf(storageLanguage) !== -1) {\n selectedLanguage = storageLanguage;\n useStored = true;\n }\n return {\n supportedLanguages,\n selectedLanguage,\n useStored,\n };\n }),\n );\n }\n }),\n // Use browser language if available, otherwise fall back to the first supported\n // language.\n map(({ supportedLanguages, selectedLanguage, useStored }) => {\n if (selectedLanguage) {\n return {\n supportedLanguages,\n selectedLanguage,\n useStored,\n };\n } else if (\n // Select browser language if set meaningfully\n supportedLanguages.indexOf(this.translate.getBrowserLang()) !== -1\n ) {\n return {\n supportedLanguages,\n selectedLanguage: this.translate.getBrowserLang(),\n useStored,\n };\n } else {\n // Select first supported language\n return {\n supportedLanguages,\n selectedLanguage: supportedLanguages[0],\n useStored,\n };\n }\n }),\n // Set fallback language\n tap(({ supportedLanguages, selectedLanguage, useStored }) => {\n if (!useStored && this.i18nConfig.obeyUserProfile) {\n void this.injector\n .get(SessionStorageService)\n .set('language', selectedLanguage);\n }\n if (selectedLanguage === 'none') {\n this.translate.setDefaultLang('none');\n } else if (selectedLanguage?.startsWith('de-')) {\n this.translate.setDefaultLang('de');\n } else {\n this.translate.setDefaultLang(supportedLanguages[0]);\n }\n }),\n // Configure `ngx-translate` to use the determined language and trigger loading of\n // translations.\n switchMap(({ selectedLanguage }) => {\n // console.log('language used: ' + selectedLanguage);\n this.language = selectedLanguage;\n return this.translate.use(selectedLanguage).pipe(map(() => null as void));\n }),\n )\n .subscribe(() => {\n // Notify anyone waiting for translations to be loaded.\n this.languageLoaded.next(true);\n });\n return this.waitForInit();\n }\n\n private async initializeCordova(supportedLanguages = DEFAULT_SUPPORTED_LANGUAGES) {\n this.translate.addLangs(supportedLanguages);\n let language = supportedLanguages[0];\n this.translate.setDefaultLang(language);\n this.translate.use(language);\n this.language = language;\n const data = await this.appService.getLanguage();\n if (supportedLanguages.indexOf(data) != -1) {\n language = data;\n }\n this.language = language;\n this.translate.use(language).subscribe(() => {\n this.languageLoaded.next(true);\n });\n // this.translate.getTranslation(language).subscribe(() => {\n // });\n return this.waitForInit();\n }\n\n waitForInit(): Observable<void> {\n return this.languageLoaded.pipe(\n first((languageLoaded) => languageLoaded),\n map(() => undefined as void),\n );\n }\n\n /** Same as `translate.currentLang`. */\n getLanguage(): string {\n return this.language;\n }\n\n getISOLanguage(): string {\n return LANGUAGES[this.language];\n }\n\n getLocale(): string {\n return this.getISOLanguage()?.replace('_', '-');\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport * as rxjs from 'rxjs';\nimport { Observable } from 'rxjs';\nimport { ListItem } from '../types/list-item';\nimport { TranslationsService } from '../translations/translations.service';\nimport { delay, startWith, switchMap } from 'rxjs/operators';\n\n@Pipe({\n name: 'esListItemLabel',\n standalone: false,\n})\nexport class ListItemLabelPipe implements PipeTransform {\n constructor(private translate: TranslateService, private translations: TranslationsService) {}\n\n transform(item: ListItem, args = { fallback: item.name }): Observable<string> {\n const mapping = {\n NODE: 'NODE',\n COLLECTION: 'NODE',\n NODE_PROPOSAL: 'NODE_PROPOSAL',\n ORG: 'ORG',\n GROUP: 'GROUP',\n USER: 'USER',\n };\n if (item.label) {\n return rxjs.of(item.label);\n } else {\n return this.translations.waitForInit().pipe(\n startWith(undefined as void),\n delay(1),\n switchMap(() =>\n this.translate.get(mapping[item.type] + '.' + item.name, {\n fallback: args.fallback,\n }),\n ),\n );\n }\n }\n}\n","import { Sort } from '@angular/material/sort';\n\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { CustomOptions, OptionItem, Target } from '../types/option-item';\nimport { ListItem, ListItemSort } from '../types/list-item';\nimport { CanDrop, DragData, DropAction } from '../types/drag-drop';\nimport { GenericAuthority, Node } from 'ngx-edu-sharing-api';\nimport { ActionbarComponent } from '../actionbar/actionbar.component';\nimport { Observable } from 'rxjs';\n\nexport type NodeRoot =\n | 'MY_FILES'\n | 'COLLECTION_HOME'\n | 'SHARED_FILES'\n | 'MY_SHARED_FILES'\n | 'TO_ME_SHARED_FILES'\n | 'WORKFLOW_RECEIVE'\n | 'RECYCLE'\n | 'ALL_FILES';\n\nexport enum NodeEntriesDisplayType {\n Table,\n Grid,\n SmallGrid,\n}\n\nexport enum InteractionType {\n // create router link\n DefaultActionLink,\n // emit an event\n Emitter,\n None,\n}\n\nexport type ListOptions = { [key in Target]?: OptionItem[] };\nexport type ListOptionsConfig = {\n actionbar?: ActionbarComponent;\n parent?: Node;\n customOptions?: CustomOptions;\n};\n\nexport interface ListSortConfig extends Sort {\n columns: ListItemSort[];\n allowed?: boolean;\n customSortingInProgress?: boolean;\n}\n\nexport type DropTarget = Node | NodeRoot;\n\nexport interface DropSource<T extends NodeEntriesDataType> {\n element: T[];\n // sourceList: ListEventInterface<T>;\n mode: DropAction;\n}\n\nexport interface ListDragGropConfig<T extends NodeEntriesDataType> {\n dragAllowed: boolean;\n dropAllowed?: (dragData: DragData<T>) => CanDrop;\n dropped?: (target: Node, source: DropSource<NodeEntriesDataType>) => void;\n}\n\nexport enum ClickSource {\n Preview,\n Icon,\n Metadata,\n Comments,\n Overlay,\n Dropdown, // keep: used in extensions\n}\n\nexport type NodeClickEvent<T extends NodeEntriesDataType> = {\n element: T;\n source: ClickSource;\n attribute?: ListItem; // only when source === Metadata\n};\nexport type FetchEvent = {\n offset: number;\n amount?: number;\n /**\n * is a reset of the current data required?\n * this should be true if this was a pagination request\n */\n reset?: boolean;\n};\nexport type NodeEntriesDataType = Node | GenericAuthority;\nexport type GridLayout = 'grid' | 'scroll';\nexport type GridConfig = {\n /**\n * max amount of rows that should be visible, unset for no limit\n */\n maxRows?: number;\n /**\n * layout, defaults to 'grid'\n * 'scroll' may only be used when maxRows is not set\n */\n layout?: GridLayout;\n};\nexport type TableConfig = {\n /* avg. column width for table layouts. */\n dataColumnWidth?: number;\n /**\n * how the columns should be shown (in table mode)\n * limit: limits the max amount based on the avgColumnWidth\n * scroll: horizontal scrolling\n */\n dataColumnLayout: 'scroll' | 'limit';\n};\n\nexport interface ListEventInterface<T extends NodeEntriesDataType> {\n updateNodes(nodes: void | T[]): void;\n\n onDisplayTypeChange(): Observable<NodeEntriesDisplayType>;\n\n getDisplayType(): NodeEntriesDisplayType;\n\n setDisplayType(displayType: NodeEntriesDisplayType): void;\n\n showReorderColumnsDialog(): void;\n\n addVirtualNodes(virtual: T[], options?: { select: boolean }): void;\n\n setOptions(options: ListOptions): void;\n\n /**\n * activate option (dropdown) generation\n */\n initOptionsGenerator(config: ListOptionsConfig): void | Promise<void>;\n\n selectAll(): void;\n\n getSelection(): SelectionModel<T>;\n\n /**\n * triggered when nodes/objects are deleted and should not be shown in the list anymore\n */\n deleteNodes(objects: T[]): void;\n}\n","import * as rxjs from 'rxjs';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { distinctUntilChanged, map } from 'rxjs/operators';\n\nexport class ItemsCap<T> {\n /** The number of items to which the data should be capped. */\n get cap(): number | null {\n return this._cap.value;\n }\n set cap(value: number | null) {\n this._cap.next(value ?? null);\n }\n private _cap = new BehaviorSubject<number | null>(null);\n\n /** Whether to temporarily disable capping. */\n get disabled(): boolean {\n return this._disabled.value;\n }\n set disabled(value: boolean) {\n this._disabled.next(value);\n }\n private _disabled = new BehaviorSubject(false);\n\n /** Whether there is more data available that is currently being capped. */\n get isActivelyCapping(): boolean {\n return this._isActivelyCapping;\n }\n private _isActivelyCapping = false;\n\n private _effectiveCap: Observable<number | null> = rxjs\n .combineLatest([this._cap, this._disabled])\n .pipe(\n map(([cap, disabled]) => (disabled ? null : cap)),\n distinctUntilChanged(),\n );\n\n connect(dataStream: Observable<T[]>): Observable<T[]> {\n return rxjs.combineLatest([this._effectiveCap, dataStream]).pipe(\n map(([effectiveCap, originalData]) => {\n const needToCap = this._needToCap(effectiveCap, originalData);\n this._isActivelyCapping = needToCap;\n if (needToCap) {\n return originalData.slice(0, effectiveCap);\n } else {\n return originalData;\n }\n }),\n );\n }\n\n private _needToCap(effectiveCap: number | null, originalData: T[]): boolean {\n return effectiveCap && originalData?.length > effectiveCap;\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { Sort, SortDirection } from '@angular/material/sort';\nimport { ListItemSort, SortEvent, SortPanel } from '../../types/list-item';\n\n@Component({\n selector: 'es-sort-select-panel',\n templateUrl: './sort-select-panel.component.html',\n styleUrls: ['./sort-select-panel.component.scss'],\n standalone: false,\n})\nexport class SortSelectPanelComponent implements SortPanel {\n @Input() active: string;\n @Input() direction: SortDirection;\n @Input() columns: ListItemSort[];\n @Output() sortChange = new EventEmitter<Sort>();\n @Input() customSortingInProgress: boolean;\n @Output() customSortingInProgressChange = new EventEmitter<boolean>();\n\n constructor() {}\n\n onSort(event: SortEvent) {\n this.sortChange.emit({\n active: event.name,\n direction: event.ascending ? 'asc' : 'desc',\n });\n }\n}\n","<mat-slide-toggle\n *ngIf=\"active === 'ccm:collection_ordered_position'\"\n [(ngModel)]=\"customSortingInProgress\"\n (ngModelChange)=\"customSortingInProgressChange.emit($event)\"\n>\n {{ 'COLLECTIONS.SORT_SLIDER' | translate }}\n</mat-slide-toggle>\n<ng-container *ngIf=\"columns?.length\">\n <button\n *ngIf=\"sortDropdown.menu\"\n [matMenuTriggerFor]=\"sortDropdown.menu\"\n mat-button\n color=\"primary\"\n >\n <span *ngIf=\"active\">{{\n 'NODE_SORT.' + active | translate : { fallback: ('NODE.' + active | translate) }\n }}</span>\n <span *ngIf=\"!active\">{{ 'SORT_BY' | translate }}</span>\n <i\n *ngIf=\"active && active !== 'ccm:collection_ordered_position'\"\n [esIcon]=\"'arrow_' + (direction === 'asc' ? 'upward' : 'downward')\"\n ></i>\n </button>\n\n <es-sort-dropdown\n #sortDropdown\n [columns]=\"columns\"\n [sortBy]=\"active\"\n [sortAscending]=\"direction === 'asc'\"\n (sort)=\"onSort($event)\"\n ></es-sort-dropdown>\n</ng-container>\n","import { DataSource } from '@angular/cdk/collections';\nimport { BehaviorSubject, Observable, Subscription } from 'rxjs';\nimport { ItemsCap } from './items-cap';\nimport { GenericAuthority, Node, Pagination } from 'ngx-edu-sharing-api';\nimport { Helper } from '../util/helper';\n\nexport type LoadingState =\n // The data source is loading data for the first time.\n | 'initial'\n // Loading data after change of parameters, i.e., it will replace the current data when done.\n | 'reset'\n // Loading another page with unchanged parameters.\n | 'page'\n // Loading done.\n | false;\n\nexport class NodeDataSource<T extends Node | GenericAuthority> extends DataSource<T> {\n protected dataStream = new BehaviorSubject<T[]>([]);\n private pagination$ = new BehaviorSubject<Pagination>(null);\n // Include `LoadingState` to be type-compatible to `NodeDataSourceRemote` although not used\n // here.\n public isLoadingSubject = new BehaviorSubject<LoadingState | boolean>(false);\n get isLoading() {\n return this.isLoadingSubject.value;\n }\n set isLoading(isLoading: LoadingState | boolean) {\n this.isLoadingSubject.next(isLoading);\n }\n initialPageLoaded = false;\n protected _itemsCap: ItemsCap<T> | null;\n get itemsCap(): ItemsCap<T> | null {\n return this._itemsCap;\n }\n set itemsCap(value: ItemsCap<T> | null) {\n this._itemsCap = value;\n this.connectRenderData();\n }\n protected renderData = new BehaviorSubject<T[]>([]);\n protected renderDataSubscription: Subscription | null;\n\n constructor(initialData: T[] = []) {\n super();\n this.setData(initialData);\n }\n\n connect(): Observable<T[]> {\n if (!this.renderDataSubscription) {\n this.connectRenderData();\n }\n return this.renderData;\n }\n\n private connectRenderData(): void {\n this.renderDataSubscription?.unsubscribe();\n if (this.itemsCap) {\n this.renderDataSubscription = this.itemsCap\n .connect(this.dataStream)\n .subscribe((data) => this.renderData.next(data));\n } else {\n this.renderDataSubscription = this.dataStream.subscribe((data) =>\n this.renderData.next(data),\n );\n }\n }\n\n connectPagination(): Observable<Pagination> {\n return this.pagination$;\n }\n\n disconnect() {}\n\n setData(data: T[], pagination: Pagination = null) {\n this.dataStream.next(data);\n this.setPagination(pagination);\n }\n\n appendData(appendData: T[], location: 'before' | 'after' = 'after') {\n let data = this.getData();\n if (location === 'after') {\n data = data.concat(appendData);\n } else {\n data = appendData.concat(data);\n }\n this.dataStream.next(data);\n }\n\n /**\n * Removes elements from the visible data.\n */\n removeData(toRemove: T[]): void {\n const newData = this.getData().filter(\n (value) =>\n !toRemove.some((d) => Helper.objectEquals((d as Node).ref, (value as Node).ref)),\n );\n const removedData = this.getData().filter((value) => !newData.includes(value));\n this.dataStream.next(newData);\n if (this.pagination$.value) {\n const pagination = this.pagination$.value;\n this.setPagination({\n count: pagination.count - removedData.length,\n from: pagination.from,\n total: pagination.total - removedData.length,\n });\n }\n }\n\n setPagination(pagination: Pagination) {\n this.pagination$.next(pagination);\n }\n\n reset() {\n this.setData([]);\n }\n\n hasMore() {\n if (!this.pagination$.value) {\n return undefined;\n }\n return this.pagination$.value.total > this.dataStream.value?.length;\n }\n\n // FIXME: This is somewhat dangerous because we rely on `connect` being called from outside, but\n // this method provides a way to access data without ever calling `connect`.\n getData() {\n return this.renderData.value;\n }\n\n isEmpty(): boolean {\n return this.dataStream.value?.length === 0;\n }\n\n getTotal() {\n return this.pagination$.value?.total\n ? Math.max(this.pagination$.value?.total, this.getData()?.length || 0)\n : this.dataStream.value?.length ?? 0;\n }\n\n isFullyLoaded() {\n return this.getTotal() <= this.dataStream.value?.length;\n }\n\n /**\n * force a refresh of all elements in the current data stream\n * trigger this to enforce a rebuild of the nodes in all sub-components\n * i.e. if data from some nodes has changed\n */\n refresh() {\n this.dataStream.next(Helper.deepCopy(this.dataStream.value));\n }\n}\n","import { NodeDataSource } from './node-data-source';\n\n/**\n * this is a special data source to provide custom card layouts into the node-entries components\n */\nexport class CustomTemplatesDataSource extends NodeDataSource<any> {}\n","import { NodeDataSource } from './node-data-source';\nimport { GenericAuthority, Node } from 'ngx-edu-sharing-api';\nimport { ActivatedRoute } from '@angular/router';\nimport { PaginationStrategy } from './node-entries-global.service';\nimport { Sort } from '@angular/material/sort';\nimport { SortPanel } from '../types/list-item';\nimport { MatPaginator } from '@angular/material/paginator';\n\nexport interface PaginationConfig {\n defaultPageSize: number;\n strategy: PaginationStrategy;\n}\n\nexport abstract class NodeDataSourceRemote<\n T extends Node | GenericAuthority = Node,\n P extends MatPaginator = MatPaginator,\n> extends NodeDataSource<T> {\n abstract get paginator(): P | null;\n abstract set paginator(value: P | null);\n abstract get sortPanel(): SortPanel;\n abstract set sortPanel(value: SortPanel);\n abstract loadMore(): boolean;\n\n abstract registerQueryParameters(route: ActivatedRoute): void;\n\n abstract init({\n paginationConfig,\n defaultSort,\n }: {\n paginationConfig: PaginationConfig;\n defaultSort: Sort;\n }): void;\n}\n","import { SelectionModel } from '@angular/cdk/collections';\nimport { EventEmitter, Injectable, Input, signal, WritableSignal } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { Node, RestConstants } from 'ngx-edu-sharing-api';\nimport {\n ClickSource,\n FetchEvent,\n GridConfig,\n InteractionType,\n ListDragGropConfig,\n ListEventInterface,\n ListOptions,\n ListSortConfig,\n NodeClickEvent,\n NodeEntriesDataType,\n NodeEntriesDisplayType,\n TableConfig,\n} from '../node-entries/entries-model';\nimport { NodeDataSource } from '../node-entries/node-data-source';\nimport {\n NodeEntriesGlobalService,\n PaginationStrategy,\n} from '../node-entries/node-entries-global.service';\n\nimport { OptionItem, Scope } from '../types/option-item';\nimport { ListItem, ListItemSort } from '../types/list-item';\nimport { UIService } from './ui.service';\nimport { NodeDataSourceRemote } from '../node-entries/node-data-source-remote';\nimport { delay, map } from 'rxjs/operators';\nimport { DropdownComponent } from '../dropdown/dropdown.component';\nimport { Toast } from './abstract/toast.service';\n\n/**\n Custom selection model which adds the click source of the selection.\n USED IN EXTENSIONS!\n */\nexport class CustomSelectionModel<T> extends SelectionModel<T> {\n private _clickSource: ClickSource;\n /**\n * used in extensions\n */\n readonly changedClickSource = this.changed.pipe(\n delay(0),\n map((c) => {\n return { ...c, clickSource: this._clickSource };\n }),\n );\n deselect(...values: T[]) {\n this._clickSource = null;\n super.deselect(...values);\n }\n\n toggle(value: T) {\n this._clickSource = null;\n super.toggle(value);\n }\n\n clear() {\n this._clickSource = null;\n super.clear();\n }\n\n select(...values: T[]) {\n this._clickSource = null;\n super.select(...values);\n }\n\n /**\n * used in extensions\n * @param value\n */\n set clickSource(value: ClickSource) {\n this._clickSource = value;\n }\n}\n\n@Injectable()\nexport class NodeEntriesService<T extends NodeEntriesDataType> {\n list: ListEventInterface<T>;\n readonly dataSource$ = new BehaviorSubject<NodeDataSource<T> | null>(null);\n /**\n * scope the current list is in, e.g. workspace\n * This is used for additional config injection based on the scope\n */\n scope: Scope;\n get dataSource(): NodeDataSource<T> {\n return this.dataSource$.value;\n }\n set dataSource(value: NodeDataSource<T>) {\n this.dataSource$.next(value);\n }\n get paginationStrategy(): PaginationStrategy {\n return this.entriesGlobal.getPaginationStrategy(this.scope);\n }\n /**\n * Subject that reflects the current columns configuration.\n *\n * Updated when loading configuration and through user interaction.\n */\n columnsSubject = new BehaviorSubject<{ columns: ListItem[]; fromUser: boolean }>(null);\n get columns(): ListItem[] {\n return this.columnsSubject.value?.columns;\n }\n set columns(columns: ListItem[]) {\n this.columnsSubject.next({ columns, fromUser: true });\n }\n configureColumns: boolean;\n displayType: NodeEntriesDisplayType;\n selection = new CustomSelectionModel<T>(true, []);\n elementInteractionType: InteractionType;\n options$ = new BehaviorSubject<ListOptions>(null);\n get options() {\n return this.options$.value;\n }\n set options(options: ListOptions) {\n this.options$.next(options);\n }\n checkbox: boolean;\n globalOptionsSubject = new BehaviorSubject<OptionItem[]>([]);\n set globalOptions(globalOptions: OptionItem[]) {\n this.globalOptionsSubject.next(globalOptions);\n }\n sortSubject = new BehaviorSubject<ListSortConfig>(void 0);\n get sort(): ListSortConfig {\n return this.sortSubject.value;\n }\n set sort(value: ListSortConfig) {\n this.sortSubject.next(value);\n }\n sortChange: EventEmitter<ListSortConfig>;\n dragDrop: ListDragGropConfig<T>;\n clickItem: EventEmitter<NodeClickEvent<T>>;\n dblClickItem: EventEmitter<NodeClickEvent<T>>;\n fetchData: EventEmitter<FetchEvent>;\n readonly gridConfig$ = new BehaviorSubject<GridConfig | null>(null);\n readonly tableConfig$ = new BehaviorSubject<TableConfig>(null);\n get gridConfig() {\n return this.gridConfig$.value;\n }\n set gridConfig(value: GridConfig) {\n this.gridConfig$.next(value);\n }\n get tableConfig() {\n return this.tableConfig$.value;\n }\n set tableConfig(value: TableConfig) {\n this.tableConfig$.next(value);\n }\n primaryInstance: boolean;\n singleClickHint: 'dynamic' | 'static';\n disableInfiniteScroll: boolean;\n showIconColumn = new BehaviorSubject(true);\n scrollGradientColor: WritableSignal<string> = signal('fff');\n\n constructor(\n private uiService: UIService,\n private toast: Toast,\n private entriesGlobal: NodeEntriesGlobalService,\n ) {}\n\n onClicked({ event, ...data }: NodeClickEvent<T> & { event: MouseEvent }) {\n if (event.ctrlKey || event.metaKey) {\n this.selection.toggle(data.element);\n } else if (event.shiftKey) {\n this.expandSelectionTo(data.element);\n } else {\n this.clickItem.emit(data);\n }\n }\n\n onCheckboxChanged(node: T, checked: boolean) {\n if (this.uiService.shiftKeyPressed) {\n this.expandSelectionTo(node);\n }\n\n if (checked !== this.selection.isSelected(node)) {\n this.selection.toggle(node);\n }\n }\n\n toggleSelectAll() {\n if (this.isAllSelected()) {\n this.selection.clear();\n } else {\n this.selectAll();\n }\n }\n\n loadMore(source: 'button' | 'scroll'): boolean {\n if (this.paginationStrategy !== 'infinite-scroll') {\n return false;\n }\n if (source === 'scroll' && this.disableInfiniteScroll) {\n return false;\n }\n // TODO: focus next item when triggered via button.\n if (this.dataSource instanceof NodeDataSourceRemote) {\n return (this.dataSource as NodeDataSourceRemote).loadMore();\n } else {\n if (this.dataSource.hasMore()) {\n this.fetchData.emit({\n offset: this.dataSource.getData().length,\n reset: false,\n });\n return true;\n } else {\n return false;\n }\n }\n }\n\n private selectAll() {\n this.selection.select(...this.dataSource.getData());\n }\n\n private isAllSelected(): boolean {\n return this.dataSource.getData().every((node) => this.selection.isSelected(node));\n }\n\n private expandSelectionTo(node: T) {\n const nodeIndex = this.dataSource.getData().indexOf(node);\n const selectionIndexes = this.selection.selected\n .map((node) => this.dataSource.getData().indexOf(node))\n .filter((index) => index >= 0);\n if (Math.min(...selectionIndexes) < nodeIndex) {\n for (let i = Math.min(...selectionIndexes) + 1; i <= nodeIndex; i++) {\n this.selection.select(this.dataSource.getData()[i]);\n }\n } else if (Math.max(...selectionIndexes) > nodeIndex) {\n for (let i = nodeIndex; i < Math.max(...selectionIndexes); i++) {\n this.selection.select(this.dataSource.getData()[i]);\n }\n }\n }\n\n openDropdown(dropdown: DropdownComponent, node: T, onDone: () => void = null) {\n if (!this.selection.selected.includes(node)) {\n this.selection.clear();\n this.selection.select(node);\n }\n // Wait for the menu to reflect changed options.\n setTimeout(() => {\n dropdown.callbackObjects = this.selection.selected as unknown as Node[];\n dropdown.ngOnChanges();\n if (dropdown.canShowDropdown()) {\n if (onDone) {\n onDone();\n }\n } else {\n this.toast.toast('NO_AVAILABLE_OPTIONS');\n }\n });\n }\n\n getSortColumns() {\n return this.sort?.columns?.filter((c) => {\n const result = this.columns\n ?.concat(\n new ListItemSort('NODE', 'score'),\n new ListItemSort('NODE', RestConstants.CCM_PROP_COLLECTION_ORDERED_POSITION),\n new ListItemSort('NODE', RestConstants.CM_PROP_TITLE),\n new ListItemSort('NODE', RestConstants.CM_NAME),\n new ListItemSort('NODE', RestConstants.CM_PROP_C_CREATED),\n new ListItemSort('NODE', RestConstants.CM_MODIFIED_DATE),\n new ListItemSort('NODE', RestConstants.CCM_PROP_REPLICATIONMODIFIED),\n new ListItemSort('NODE', RestConstants.CCM_PROP_REPLICATIONSOURCETIMESTAMP),\n )\n .some((c2) => c.type === c2.type && c2.name === c.name);\n if (!result && !this.configureColumns) {\n return this.sort?.columns;\n /*\n const warning =\n 'Sort field ' +\n c.name +\n ' was specified but is not present as a column. ' +\n 'It will be ignored. Please also configure this field in the <lists> section';\n if (!displayedWarnings.includes(warning)) {\n console.warn(warning);\n displayedWarnings.push(warning);\n }*/\n }\n return result;\n });\n }\n}\n","import { Injectable, TemplateRef } from '@angular/core';\n\n@Injectable()\nexport class NodeEntriesTemplatesService {\n /**\n * custom heading/title above the current result set\n */\n title: TemplateRef<any>;\n\n /**\n * Additional top matter that is provided by the selected node-entries component.\n */\n entriesTopMatter: TemplateRef<unknown>;\n\n /**\n * custom container in case the data source is empty\n */\n empty: TemplateRef<any>;\n\n /**\n * custom container for the action area on each element\n * (small grid only)\n */\n actionArea: TemplateRef<any>;\n /**\n * custom container for showing an overlay across each element\n */\n overlay: TemplateRef<any>;\n /**\n * custom container for showing an own card layout\n */\n customCard: TemplateRef<any>;\n\n constructor() {}\n}\n","import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { CdkOverlayOrigin } from '@angular/cdk/overlay';\nimport { ListItem } from '../../../types/list-item';\n\n@Component({\n selector: 'es-column-chooser',\n templateUrl: './column-chooser.component.html',\n styleUrls: ['./column-chooser.component.scss'],\n standalone: false,\n})\nexport class ColumnChooserComponent {\n @Input() origin: CdkOverlayOrigin;\n @Input() columnChooserVisible = false;\n @Output() columnChooserVisibleChange = new EventEmitter<boolean>();\n\n @Input() columns: ListItem[];\n @Output() columnsChange = new EventEmitter<ListItem[]>();\n\n constructor() {}\n\n columnChooserDrop(event: CdkDragDrop<string[]>) {\n moveItemInArray(this.columns, event.previousIndex, event.currentIndex);\n this.columnsChange.emit(this.columns);\n }\n\n columnChooserToggle(columnIndex: number): void {\n const column = this.columns[columnIndex];\n column.visible = !column.visible;\n this.columnsChange.emit(this.columns);\n }\n}\n","<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"columnChooserVisible\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n [cdkConnectedOverlayMinWidth]=\"250\"\n [cdkConnectedOverlayViewportMargin]=\"5\"\n (backdropClick)=\"columnChooserVisibleChange.emit(false)\"\n cdkConnectedOverlayBackdropClass=\"column-chooser-backdrop\"\n>\n <div\n cdkDropList\n class=\"column-chooser mat-elevation-z2\"\n (cdkDropListDropped)=\"columnChooserDrop($event)\"\n >\n <div class=\"column-chooser-item\" *ngFor=\"let column of columns; index as index\" cdkDrag>\n <mat-checkbox\n [checked]=\"column.visible\"\n (change)=\"columnChooserToggle(index)\"\n color=\"primary\"\n >\n {{ column | esListItemLabel | async }}\n </mat-checkbox>\n <div class=\"drag-handle\" cdkDragHandle>\n <i esIcon=\"drag_handle\"></i>\n </div>\n </div>\n </div>\n</ng-template>\n","export class ColorHelper {\n public static cssColorToRgb(color: string): number[] {\n color = color.trim();\n if (color.startsWith('rgb')) {\n let result = /rgb.?\\(\\s*([\\d]*)\\s*,\\s*([\\d]*)\\s*,\\s*([\\d*]*)\\s*/i.exec(color);\n return result ? [parseInt(result[1]), parseInt(result[2]), parseInt(result[3])] : null;\n }\n let result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(color);\n return result\n ? [parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)]\n : null;\n }\n\n /**\n * returns the estimated color brightness for a css color based on a pereceived brightness factor\n * Value between [0,1] and -1 if the css string was not readable\n * @param {string} color\n * @returns {number}\n */\n public static getColorBrightness(color: string) {\n const rgb = ColorHelper.cssColorToRgb(color);\n if (rgb) {\n // return (rgb[0]*0.2126 + rgb[1]*0.7152 + rgb[2]*0.0722) / 255;\n const a = rgb.map((v) => {\n v /= 255;\n return v <= 0.03928 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\n });\n return a[0] * 0.2126 + a[1] * 0.7152 + a[2] * 0.0722;\n }\n return -1;\n }\n\n private static getRatio(l1: number, l2: number) {\n // calculate the color contrast ratio\n return l1 > l2 ? (l2 + 0.05) / (l1 + 0.05) : (l1 + 0.05) / (l2 + 0.05);\n }\n /**\n * returns 0 (black) or 1 (white)\n * @param color\n */\n public static getPreferredColor(color: string): PreferredColor {\n if (!color) {\n return PreferredColor.Black;\n }\n const brightness = ColorHelper.getColorBrightness(color);\n const ratioBlack = ColorHelper.getRatio(0, brightness);\n const ratioWhite = ColorHelper.getRatio(1, brightness);\n return ratioBlack > ratioWhite ? PreferredColor.Black : PreferredColor.White;\n }\n\n public static rgbToHex(rgb: number[]): string {\n return (\n '#' +\n ColorHelper.componentToHex(rgb[0]) +\n ColorHelper.componentToHex(rgb[1]) +\n ColorHelper.componentToHex(rgb[2])\n );\n }\n public static componentToHex(c: number) {\n var hex = Math.max(0, Math.min(Math.round(c), 255)).toString(16);\n return hex.length == 1 ? '0' + hex : hex;\n }\n public static rgbToHsl(rgb: number[]) {\n const r = rgb[0] / 255;\n const g = rgb[1] / 255;\n const b = rgb[2] / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n // tslint:disable-next-line:one-variable-per-declaration prefer-const\n let h,\n s,\n l = (max + min) / 2;\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n return [h, s, l];\n }\n private static hue2rgb(p: number, q: number, t: number) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n }\n public static hslToRgb(hsl: number[]) {\n const h = hsl[0];\n const s = hsl[1];\n const l = hsl[2];\n // tslint:disable-next-line:one-variable-per-declaration\n let r, g, b;\n if (s === 0) {\n r = g = b = l;\n } else {\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = ColorHelper.hue2rgb(p, q, h + 1 / 3);\n g = ColorHelper.hue2rgb(p, q, h);\n b = ColorHelper.hue2rgb(p, q, h - 1 / 3);\n }\n\n return [r * 255, g * 255, b * 255];\n }\n}\nexport enum PreferredColor {\n Black,\n White,\n}\n","import { ChangeDetectorRef, Component, Input, OnInit } from '@angular/core';\nimport {\n AuthenticationService,\n ConfigService,\n NetworkService,\n Node,\n RatingV1Service,\n RestConstants,\n} from 'ngx-edu-sharing-api';\nimport { Toast } from '../../services/abstract/toast.service';\nimport { take } from 'rxjs/operators';\nimport { RestHelper } from '../../util/rest-helper';\n\n@Component({\n selector: 'es-node-rating',\n templateUrl: 'node-rating.component.html',\n styleUrls: ['node-rating.component.scss'],\n standalone: false,\n})\nexport class NodeRatingComponent<T extends Node> implements OnInit {\n @Input() node: T;\n mode: RatingMode;\n hasPermission: boolean;\n hoverStar: number;\n constructor(\n public toast: Toast,\n public configService: ConfigService,\n private networkApi: NetworkService,\n public authenticationService: AuthenticationService,\n public changeDetectorRef: ChangeDetectorRef,\n public ratingService: RatingV1Service,\n ) {}\n\n async ngOnInit() {\n await this.configService.observeConfig().pipe(take(1)).toPromise();\n this.mode = this.configService.instant('rating.mode', 'none');\n this.hasPermission = await this.authenticationService.hasToolpermission(\n RestConstants.TOOLPERMISSION_RATE_READ,\n );\n }\n\n async toogleLike() {\n const name = RestHelper.getTitle(this.node);\n if (this.node.rating?.user) {\n try {\n await this.ratingService\n .deleteRating({\n repository: this.node.ref.repo,\n node: this.node.ref.id,\n })\n .toPromise();\n this.toast.toast('RATING.TOAST.LIKE_REMOVED', { name });\n this.node.rating.user = 0;\n this.node.rating.overall.count--;\n } catch (e) {\n this.toast.error(e);\n }\n } else {\n try {\n await this.ratingService\n .addOrUpdateRating({\n repository: this.node.ref.repo,\n node: this.node.ref.id,\n rating: 5,\n body: null,\n })\n .toPromise();\n this.toast.toast('RATING.TOAST.LIKED', { name });\n this.node.rating.user = 5;\n this.node.rating.overall.count++;\n } catch (e) {\n this.toast.error(e);\n }\n }\n this.changeDetectorRef.detectChanges();\n }\n\n getPrimaryRating() {\n if (!this.node.rating) {\n return 0;\n }\n if (this.node.rating.user) {\n return this.node.rating.user;\n }\n return this.node.rating.overall.sum / this.node.rating.overall.count;\n }\n\n async setRating(rating: number) {\n const name = RestHelper.getTitle(this.node);\n try {\n await this.ratingService\n .addOrUpdateRating({\n repository: this.node.ref.repo,\n node: this.node.ref.id,\n rating,\n body: null,\n })\n .toPromise();\n this.toast.toast('RATING.TOAST.RATED', { name, rating });\n this.node.rating.overall.count += this.node.rating.user ? 0 : 1;\n this.node.rating.user = rating;\n this.changeDetectorRef.detectChanges();\n } catch (e) {\n this.toast.error(e);\n }\n }\n\n async deleteRating() {\n const name = RestHelper.getTitle(this.node);\n try {\n await this.ratingService\n .deleteRating({\n repository: this.node.ref.repo,\n node: this.node.ref.id,\n })\n .toPromise();\n this.toast.toast('RATING.TOAST.RATING_REMOVED', { name });\n this.node.rating.overall.count--;\n this.node.rating.overall.sum -= this.node.rating.user;\n this.node.rating.user = 0;\n this.changeDetectorRef.detectChanges();\n } catch (e) {\n this.toast.error(e);\n }\n }\n\n isFromHomeRepo(node: Node) {\n return this.networkApi.isFromHomeRepository(node);\n }\n}\nexport type RatingMode = 'none' | 'likes' | 'stars';\n","<ng-container *ngIf=\"hasPermission && node.type === 'ccm:io' && isFromHomeRepo(node)\">\n <div *ngIf=\"mode === 'likes'\" class=\"likes\">\n <button\n (click)=\"toogleLike()\"\n [disabled]=\"(authenticationService.observeLoginInfo() | async)?.isGuest\"\n mat-icon-button\n color=\"primary\"\n matTooltip=\"{{ 'RATING.LIKES' | translate }}\"\n >\n <i [esIcon]=\"'edu-thumb_up' + (!node.rating?.user ? '_off' : '')\"></i>\n </button>\n <span matTooltip=\"{{ 'RATING.COUNT_LIKES' | translate }}\">{{\n node.rating?.overall.count\n }}</span>\n </div>\n <div *ngIf=\"mode === 'stars'\" class=\"stars\" mat-icon-button color=\"primary\">\n <button\n *ngFor=\"let rating of [1, 2, 3, 4, 5]\"\n mat-icon-button\n color=\"primary\"\n class=\"star\"\n (click)=\"setRating(rating)\"\n [disabled]=\"(authenticationService.observeLoginInfo() | async)?.isGuest\"\n (focus)=\"hoverStar = rating\"\n (mouseenter)=\"hoverStar = rating\"\n (mouseleave)=\"hoverStar = 0\"\n (blur)=\"hoverStar = 0\"\n [class.star-hover]=\"hoverStar >= rating\"\n >\n <i\n [esIcon]=\"\n 'star' +\n ((hoverStar ? hoverStar >= rating : getPrimaryRating() >= rating) ? '' : '_border')\n \"\n matTooltip=\"{{ 'RATING.STARS_RATE' | translate : { rating: rating } }}\"\n ></i>\n </button>\n <button\n *ngIf=\"!!node.rating?.user\"\n mat-icon-button\n color=\"primary\"\n class=\"delete\"\n matTooltip=\"{{ 'RATING.DELETE_RATING' | translate }}\"\n (click)=\"deleteRating()\"\n [disabled]=\"(authenticationService.observeLoginInfo() | async)?.isGuest\"\n >\n <i esIcon=\"clear\"></i>\n </button>\n <span matTooltip=\"{{ 'RATING.COUNT_RATINGS' | translate }}\"\n >({{ node.rating?.overall.count }})</span\n >\n </div>\n</ng-container>\n","import { Component, ElementRef, Input, ViewChild } from '@angular/core';\nimport { Node } from 'ngx-edu-sharing-api';\n\n/**\n * Displays the preview image of `node`.\n *\n * When `node` is a video, the animated preview image is replaced with a static canvas unless\n * `playAnimation` is set to `true`.\n */\n@Component({\n selector: 'es-preview-image',\n templateUrl: './preview-image.component.html',\n styleUrls: ['./preview-image.component.scss'],\n standalone: false,\n})\nexport class PreviewImageComponent<T extends Node> {\n @Input() node: T;\n @Input() playAnimation = false;\n\n @ViewChild('image') imageRef: ElementRef<HTMLImageElement>;\n @ViewChild('canvas') canvasRef: ElementRef<HTMLCanvasElement>;\n // @ViewChild('backdropCanvas') backdropCanvasRef: ElementRef<HTMLCanvasElement>;\n\n showCanvas: boolean = false;\n replacedWithStatic: boolean = false;\n\n constructor() {}\n\n onImageLoad(event: Event): void {\n if (this.node.mimetype?.startsWith('video')) {\n const image = event.target as HTMLImageElement;\n this.showCanvas = true;\n setTimeout(() => {\n this.initCanvas(image, this.canvasRef.nativeElement);\n // this.initCanvas(image, this.backdropCanvasRef.nativeElement);\n this.replacedWithStatic = true;\n });\n }\n }\n\n private initCanvas(image: HTMLImageElement, canvas: HTMLCanvasElement): void {\n var width = image.naturalWidth;\n var height = image.naturalHeight;\n canvas.width = width;\n canvas.height = height;\n canvas.getContext('2d').drawImage(image, 0, 0, width, height);\n }\n}\n","<div class=\"card-image-backdrop\">\n <!-- The blur filter does not work with canvas as it does with img on Chrome, so we go for a black\n background for now. -->\n <!-- <canvas *ngIf=\"showCanvas\" #backdropCanvas role=\"presentation\" aria-hidden=\"true\"></canvas> -->\n <img\n [src]=\"node | esNodeImage : { maxWidth: 300, maxHeight: 300, crop: true } | async\"\n alt=\"\"\n *ngIf=\"!replacedWithStatic\"\n />\n</div>\n\n<canvas *ngIf=\"showCanvas\" #canvas role=\"presentation\" aria-hidden=\"true\"></canvas>\n<img\n (load)=\"onImageLoad($event)\"\n #image\n [src]=\"node | esNodeImage : { maxWidth: 300, maxHeight: 300, crop: true } | async\"\n alt=\"\"\n [class.display-none]=\"replacedWithStatic && !playAnimation\"\n/>\n","import { Component, Input, OnChanges, Optional } from '@angular/core';\nimport { GenericAuthority, Node } from 'ngx-edu-sharing-api';\nimport { CustomFieldSpecialType, NodeEntriesGlobalService } from '../node-entries-global.service';\nimport { NodeHelperService } from '../../services/node-helper.service';\nimport { NodeEntriesService } from '../../services/node-entries.service';\nimport { NodeEntriesDataType } from '../entries-model';\n\n/**\n * A small circular badge that depicts the node's type.\n *\n * To be used in the top bar of a card or similar places.\n */\n@Component({\n selector: 'es-node-type-badge',\n templateUrl: './node-type-badge.component.html',\n styleUrls: ['./node-type-badge.component.scss'],\n standalone: false,\n})\nexport class NodeTypeBadgeComponent implements OnChanges {\n @Input() node: NodeEntriesDataType;\n /**\n * when true, collection icons will resolve based on their type (editorial, private...)\n * When false, the generic svg image is used\n */\n @Input() collectionIcons = true;\n\n isCollection: boolean;\n\n constructor(\n public nodeHelper: NodeHelperService,\n private nodeEntriesGlobalService: NodeEntriesGlobalService,\n @Optional() public nodeEntriesService: NodeEntriesService<Node>,\n ) {}\n\n ngOnChanges(): void {\n this.isCollection = this.nodeHelper.isNodeCollection(this.node as Node);\n }\n\n getCustomTemplate() {\n return this.nodeEntriesGlobalService.getCustomFieldTemplate(\n { type: 'NODE', name: CustomFieldSpecialType.type },\n this.node as Node,\n );\n }\n\n materialIcon() {\n if ((this.node as GenericAuthority).authorityType === 'USER') {\n return 'person';\n } else if ((this.node as GenericAuthority).authorityType === 'GROUP') {\n return 'group';\n }\n\n return null;\n }\n}\n","<ng-container *ngIf=\"isCollection && collectionIcons\">\n <i\n [matTooltip]=\"\n 'COLLECTION.SCOPE.' + nodeHelper.getCollectionScopeInfo($any(node)).scopeName | translate\n \"\n [altText]=\"\n 'COLLECTION.SCOPE.' + nodeHelper.getCollectionScopeInfo($any(node)).scopeName | translate\n \"\n [esIcon]=\"nodeHelper.getCollectionScopeInfo($any(node)).icon\"\n ></i>\n</ng-container>\n<ng-container *ngIf=\"!(isCollection && collectionIcons)\">\n <ng-container *ngIf=\"getCustomTemplate() as ref\">\n <ng-container\n *ngTemplateOutlet=\"ref; context: { node: node, entriesService: nodeEntriesService }\"\n ></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!getCustomTemplate()\">\n <i *ngIf=\"materialIcon() as icon\" [esIcon]=\"icon\"></i>\n <ng-container *ngIf=\"!materialIcon()\">\n <img\n *ngIf=\"$any(node).relations?.Original || node as n\"\n [src]=\"n | esNodeIcon | async\"\n [alt]=\"\n n.mediatype\n ? ('NODE.mediatype' | translate) + ': ' + ('MEDIATYPE.' + n.mediatype | translate)\n : ''\n \"\n [matTooltip]=\"\n n.mediatype\n ? ('NODE.mediatype' | translate) + ': ' + ('MEDIATYPE.' + n.mediatype | translate)\n : ''\n \"\n />\n </ng-container>\n </ng-container>\n</ng-container>\n","import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { Node } from 'ngx-edu-sharing-api';\nimport { OptionItem } from '../../types/option-item';\n// TODO: Decide if providing focus highlights and ripples with this component is a good idea. When\n// using `app-node-url` for cards, we might need highlights and ripples for the whole card while\n// `app-node-url` should only wrap the title since links with lots of content confuse screen\n// readers.\n\n@Component({\n selector: 'es-option-button',\n template: `\n <button\n mat-icon-button\n color=\"primary\"\n matTooltip=\"{{ option.name | translate }}\"\n [class.display-none]=\"!isShown\"\n [disabled]=\"!isEnabled\"\n (click)=\"click(option, node)\"\n attr.data-test=\"option-button-{{ option.name }}\"\n >\n <i esIcon=\"{{ option.icon }}\" [aria]=\"false\"></i>\n </button>\n `,\n standalone: false,\n})\nexport class OptionButtonComponent implements OnChanges {\n @Input() option: OptionItem;\n @Input() node: Node;\n\n isShown = false;\n isEnabled = false;\n async ngOnChanges(changes: SimpleChanges) {\n this.isEnabled = await this.optionIsValid(this.option, this.node);\n this.isShown = await this.optionIsShown(this.option, this.node);\n }\n\n async optionIsValid(optionItem: OptionItem, node: Node): Promise<boolean> {\n if (optionItem.enabledCallback) {\n return await optionItem.enabledCallback([node]);\n }\n return optionItem.isEnabled;\n }\n\n private async optionIsShown(optionItem: OptionItem, node: Node): Promise<boolean> {\n if (optionItem.showCallback) {\n return optionItem.showCallback([node]);\n }\n return true;\n }\n\n async click(option: OptionItem, node: Node) {\n if (await this.optionIsShown(option, node)) {\n option.callback(node);\n }\n }\n}\n","import { Component, HostBinding, Input, Optional } from '@angular/core';\nimport { Node } from 'ngx-edu-sharing-api';\nimport { ClickSource } from '../entries-model';\nimport { NodeEntriesService } from '../../services/node-entries.service';\n\n@Component({\n selector: 'es-node-stats-badges',\n templateUrl: './node-stats-badges.component.html',\n styleUrls: ['./node-stats-badges.component.scss'],\n standalone: false,\n})\nexport class NodeStatsBadgesComponent {\n readonly ClickSource = ClickSource;\n\n childObjectCount = 0;\n\n private _node: Node;\n @Input()\n get node(): Node {\n return this._node;\n }\n set node(node: Node) {\n this._node = node;\n this.childObjectCount = this.getChildObjectCount(node);\n }\n\n @HostBinding('attr.backgroundStyle')\n @Input()\n backgroundStyle: 'darken' | 'lighten' = 'lighten';\n\n constructor(\n @Optional()\n public entriesService: NodeEntriesService<Node>,\n ) {}\n\n private getChildObjectCount(node: Node): number {\n const value = node.properties?.['virtual:childobjectcount']?.[0];\n if (value) {\n return parseInt(value);\n } else {\n return 0;\n }\n }\n}\n","<!--\n <div\n *ngIf=\"node.aspects?.includes('ccm:published')\"\n class=\"card-top-bar-published-copy\"\n >\n <div class=\"node-published-copy\">\n <i\n esIcon=\"content_copy\"\n [matTooltip]=\"'PUBLISHED_COPY_TOOLTIP' | translate\"\n ></i>\n </div>\n </div>\n -->\n<div class=\"card-top-bar-comments\">\n <div\n class=\"node-comments\"\n *ngIf=\"node.type === 'ccm:io'\"\n (click)=\"\n entriesService?.onClicked({\n event: $event,\n element: node,\n source: ClickSource.Comments\n })\n \"\n [matTooltip]=\"('COMMENTS_MULTIPLE' | translate) + ': ' + node.commentCount\"\n >\n <i esIcon=\"comment\"></i>\n <span>{{ node.commentCount }}</span>\n </div>\n</div>\n<div class=\"card-top-bar-childobjects\" *ngIf=\"childObjectCount > 0\">\n <div\n class=\"childobject-count\"\n matTooltip=\"{{ 'CHILDOBJECT_COUNT' | translate : { count: childObjectCount + 1 } }}\"\n >\n <span>{{ childObjectCount + 1 }}</span\n ><i esIcon=\"filter_none\"></i>\n </div>\n</div>\n","import {\n ApplicationRef,\n Component,\n Input,\n OnChanges,\n OnInit,\n Optional,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport { ClickSource, InteractionType } from '../entries-model';\nimport { NodeEntriesTemplatesService } from '../node-entries-templates.service';\nimport { CustomFieldSpecialType, NodeEntriesGlobalService } from '../node-entries-global.service';\nimport { Target } from '../../types/option-item';\nimport { NodeEntriesService } from '../../services/node-entries.service';\nimport { NodeHelperService } from '../../services/node-helper.service';\nimport { AuthenticationService, ConfigService, Node, RestConstants } from 'ngx-edu-sharing-api';\nimport { ColorHelper, PreferredColor } from '../../util/color-helper';\nimport { take } from 'rxjs/operators';\nimport { DropdownComponent } from '../../dropdown/dropdown.component';\nimport { Toast } from '../../services/abstract/toast.service';\nimport { BehaviorSubject } from 'rxjs';\n\n@Component({\n selector: 'es-node-entries-card',\n templateUrl: 'node-entries-card.component.html',\n styleUrls: ['node-entries-card.component.scss'],\n standalone: false,\n})\nexport class NodeEntriesCardComponent<T extends Node> implements OnChanges, OnInit {\n readonly InteractionType = InteractionType;\n readonly Target = Target;\n readonly ClickSource = ClickSource;\n readonly CustomFieldSpecialType = CustomFieldSpecialType;\n @Input() dropdown: DropdownComponent;\n\n @ViewChild('menuTrigger') menuTrigger: MatMenuTrigger;\n\n @Input() node: T;\n dropdownLeft: number;\n dropdownTop: number;\n showRatings = new BehaviorSubject(false);\n isCollection: boolean;\n constructor(\n public entriesService: NodeEntriesService<T>,\n public nodeHelper: NodeHelperService,\n public applicationRef: ApplicationRef,\n public configService: ConfigService,\n public authenticationService: AuthenticationService,\n public templatesService: NodeEntriesTemplatesService,\n public nodeEntriesGlobalService: NodeEntriesGlobalService,\n @Optional() private toast: Toast,\n ) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n this.isCollection = this.nodeHelper.isNodeCollection(changes.node?.currentValue);\n }\n\n getTextColor() {\n return ColorHelper.getPreferredColor(this.node.collection.color) === PreferredColor.Black\n ? '#000'\n : '#fff';\n }\n optionsOnCard() {\n const options = this.entriesService.options?.[Target.List];\n const always = options?.filter((o) => o.showAlways);\n if (always?.some((o) => o.showCallback([this.node]))) {\n return always;\n }\n // we do NOT show any additional actions\n return [];\n // return options.filter((o) => o.showAsAction && o.showCallback(this.node)).slice(0, 3);\n }\n\n openContextmenu(event: MouseEvent | Event, node: T) {\n event.stopPropagation();\n event.preventDefault();\n if (!this.dropdown) {\n // Call `preventDefault()` even when there is no menu, so we can use `cdkDrag` with a\n // start delay without being interrupted by the standard long-tap action.\n return;\n }\n if (event instanceof MouseEvent) {\n ({ clientX: this.dropdownLeft, clientY: this.dropdownTop } = event);\n } else {\n ({ x: this.dropdownLeft, y: this.dropdownTop } = (\n event.target as HTMLElement\n ).getBoundingClientRect());\n }\n this.entriesService.openDropdown(this.dropdown, node, () => this.menuTrigger.openMenu());\n }\n\n getVisibleColumns() {\n return this.entriesService.columns?.filter((c) => c.visible);\n }\n\n async openMenu(node: T) {\n this.entriesService.openDropdown(this.dropdown, node);\n }\n\n async ngOnInit() {\n await this.configService.observeConfig().pipe(take(1)).toPromise();\n this.showRatings.next(\n this.configService.instant('rating.mode', 'none') !== 'none' &&\n (await this.authenticationService.hasToolpermission(\n RestConstants.TOOLPERMISSION_RATE_READ,\n )),\n );\n }\n\n getTemplate(name: CustomFieldSpecialType) {\n return this.nodeEntriesGlobalService.getCustomFieldTemplate(\n {\n type: 'NODE',\n name,\n },\n this.node as Node,\n );\n }\n}\n","<div\n [class]=\"\n 'grid-card' +\n (isCollection\n ? ' grid-card-collection grid-card-collection-scope-' +\n node.collection.scope +\n ' grid-card-collection-type-' +\n node.collection.type\n : '') +\n ($any(node).virtual ? ' grid-card-virtual' : '') +\n ' ' +\n nodeEntriesGlobalService.getCustomCssClass(node)\n \"\n [style.background-color]=\"isCollection ? node.collection.color : null\"\n [class.dynamic-single-click]=\"entriesService.singleClickHint === 'dynamic'\"\n [class.selected]=\"entriesService.selection.isSelected(node)\"\n (contextmenu)=\"openContextmenu($event, node)\"\n (keydown.ContextMenu)=\"openContextmenu($event, node)\"\n>\n <div\n *ngIf=\"templatesService.overlay\"\n class=\"card-overlay\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Overlay,\n })\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"templatesService.overlay; context: { element: node }\"\n ></ng-container>\n </div>\n <button\n *ngIf=\"dropdown\"\n #menuTrigger=\"matMenuTrigger\"\n mat-button\n class=\"dropdown-dummy cdk-visually-hidden\"\n [style.left.px]=\"dropdownLeft\"\n [style.top.px]=\"dropdownTop\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n ></button>\n <div class=\"card-top-bar\" [style.background-color]=\"isCollection ? node.collection.color : null\">\n <div class=\"card-top-bar-collection-color\" *ngIf=\"nodeHelper.isNodeCollection(node)\"></div>\n <es-node-type-badge [node]=\"node\"></es-node-type-badge>\n <div *ngIf=\"isCollection && node.collection.pinned\" class=\"card-top-bar-flag\">\n <i esIcon=\"edu-pin\"></i>\n </div>\n <div class=\"card-top-bar-empty\"></div>\n <es-node-stats-badges [node]=\"node\"></es-node-stats-badges>\n <div class=\"card-top-bar-checkbox\" *ngIf=\"entriesService.checkbox\">\n <mat-checkbox\n [checked]=\"entriesService.selection.isSelected(node)\"\n (change)=\"entriesService.onCheckboxChanged(node, $event.checked)\"\n color=\"primary\"\n aria-label=\"{{ 'SELECT' | translate : { element: (node | nodeTitle) } }}\"\n ></mat-checkbox>\n </div>\n </div>\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n mode=\"wrapper\"\n [node]=\"node\"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </es-node-url>\n <button\n *ngIf=\"entriesService.elementInteractionType === InteractionType.Emitter\"\n class=\"card-body\"\n matRipple\n (click)=\"\n entriesService.onClicked({\n event: $event,\n element: node,\n source: ClickSource.Metadata,\n })\n \"\n (dblclick)=\"\n entriesService.dblClickItem.emit({\n element: node,\n source: ClickSource.Metadata,\n })\n \"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </button>\n <div\n *ngIf=\"entriesService.elementInteractionType === InteractionType.None\"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </div>\n <div class=\"card-options\" *ngIf=\"entriesService.options || showRatings\">\n <div class=\"card-rating-area\">\n <es-node-rating [node]=\"node\"></es-node-rating>\n </div>\n <div class=\"card-options-area\">\n <es-option-button\n *ngFor=\"let option of optionsOnCard()\"\n class=\"card-options-always\"\n [option]=\"option\"\n [node]=\"node\"\n ></es-option-button>\n <div class=\"card-options-spacer\"></div>\n <button\n *ngIf=\"dropdown\"\n mat-icon-button\n color=\"primary\"\n (click)=\"openMenu(node)\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n [attr.aria-label]=\"'OPTIONS_FOR' | translate : { element: (node | nodeTitle) }\"\n data-test=\"card-options-button\"\n >\n <i esIcon=\"more_vert\"></i>\n </button>\n </div>\n </div>\n <ng-template #image let-playAnimation=\"playAnimation\">\n <div\n class=\"card-image-area\"\n [style.background-color]=\"isCollection ? node.collection.color : null\"\n >\n <ng-container *ngIf=\"getTemplate(CustomFieldSpecialType.preview) as ref\">\n <ng-container\n *ngTemplateOutlet=\"ref; context: { node: node, entriesService: entriesService }\"\n ></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!getTemplate(CustomFieldSpecialType.preview)\">\n <es-preview-image\n *ngIf=\"!(isCollection && node.preview.isIcon)\"\n [node]=\"node\"\n [playAnimation]=\"playAnimation\"\n ></es-preview-image>\n <div *ngIf=\"isCollection && node.preview.isIcon\" class=\"card-collection-image\">\n <i esIcon=\"layers\"></i>\n </div>\n </ng-container>\n </div>\n </ng-template>\n <ng-template #meta let-link=\"link\">\n <div class=\"card-meta\">\n <div\n *ngFor=\"let displayPart of getVisibleColumns(); let first = first\"\n class=\"card-meta-row card-meta-row-{{ displayPart.name | lowercase | propertySlug }}\"\n [class.card-meta-row-primary]=\"first\"\n >\n <ng-container *ngIf=\"first\">\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n [node]=\"node\"\n #link\n >\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </es-node-url>\n <div *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!first\">\n <label>\n {{ displayPart | esListItemLabel | async }}\n </label>\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </ng-container>\n </div>\n </div>\n </ng-template>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { Target } from '../../types/option-item';\nimport { ClickSource, InteractionType } from '../entries-model';\n\nimport { NodeEntriesTemplatesService } from '../node-entries-templates.service';\nimport { NodeEntriesService } from '../../services/node-entries.service';\nimport { NodeHelperService } from '../../services/node-helper.service';\nimport { Node } from 'ngx-edu-sharing-api';\n\n@Component({\n selector: 'es-node-entries-card-small',\n templateUrl: 'node-entries-card-small.component.html',\n styleUrls: ['node-entries-card-small.component.scss'],\n standalone: false,\n})\nexport class NodeEntriesCardSmallComponent<T extends Node> {\n readonly ClickSource = ClickSource;\n readonly InteractionType = InteractionType;\n readonly Target = Target;\n @Input() node: T;\n constructor(\n public entriesService: NodeEntriesService<T>,\n public nodeHelper: NodeHelperService,\n public templatesService: NodeEntriesTemplatesService,\n ) {}\n\n optionsOnCard() {\n const options = this.entriesService.options[Target.List];\n const always = options.filter((o) => o.showAlways);\n if (always.some((o) => o.showCallback([this.node]))) {\n return always;\n }\n return options.filter((o) => o.showAsAction && o.showCallback([this.node])).slice(0, 3);\n }\n\n openContextmenu(event: MouseEvent | Event) {\n event.preventDefault();\n event.stopPropagation();\n }\n}\n","<div\n [class]=\"\n 'grid-card' +\n (nodeHelper.isNodeCollection(node)\n ? ' grid-card-collection grid-card-collection-scope-' +\n node.collection.scope +\n ' grid-card-collection-type-' +\n node.collection.type\n : '') +\n ($any(node).virtual ? ' grid-card-virtual' : '') +\n ' ' +\n (entriesService.singleClickHint === 'dynamic' ? ' dynamic-single-click' : '')\n \"\n [style.background-color]=\"nodeHelper.isNodeCollection(node) ? node.collection.color : null\"\n (contextmenu)=\"openContextmenu($event)\"\n (keydown.ContextMenu)=\"openContextmenu($event)\"\n>\n <div\n *ngIf=\"templatesService.overlay\"\n class=\"card-overlay\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Overlay,\n })\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"templatesService.overlay; context: { element: node }\"\n ></ng-container>\n </div>\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n mode=\"wrapper\"\n [node]=\"node\"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </es-node-url>\n <ng-container *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <ng-container *ngTemplateOutlet=\"image\"></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </ng-container>\n</div>\n<ng-template #image let-playAnimation=\"playAnimation\">\n <div\n class=\"card-image-area\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Preview,\n })\n \"\n >\n <div *ngIf=\"nodeHelper.isNodeCollection(node) && node.collection.pinned\" class=\"collection-pin\">\n <i esIcon=\"edu-pin\"></i>\n </div>\n <es-preview-image\n *ngIf=\"!(nodeHelper.isNodeCollection(node) && node.preview.isIcon)\"\n [node]=\"node\"\n [playAnimation]=\"playAnimation\"\n ></es-preview-image>\n <div\n *ngIf=\"nodeHelper.isNodeCollection(node) && node.preview.isIcon\"\n class=\"card-collection-image\"\n >\n <i esIcon=\"layers\"></i>\n </div>\n </div>\n</ng-template>\n<ng-template #meta>\n <div\n class=\"card-meta\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Metadata,\n })\n \"\n >\n <div\n *ngFor=\"let displayPart of entriesService.columns; let first = first\"\n class=\"card-meta-row\"\n >\n <ng-container *ngIf=\"first\">\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n [node]=\"node\"\n #link\n >\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </es-node-url>\n <div *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!first\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </ng-container>\n </div>\n </div>\n <ng-container\n *ngTemplateOutlet=\"templatesService.actionArea; context: { element: node }\"\n ></ng-container>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { Node } from 'ngx-edu-sharing-api';\nimport { NodeEntriesDisplayType } from '../entries-model';\nimport { NodeEntriesService } from '../../services/node-entries.service';\nimport { map } from 'rxjs/operators';\n\n@Component({\n selector: 'es-node-entries-global-options',\n templateUrl: './node-entries-global-options.component.html',\n styleUrls: ['./node-entries-global-options.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class NodeEntriesGlobalOptionsComponent<T extends Node> {\n readonly NodeEntriesDisplayType = NodeEntriesDisplayType;\n @Input() displayType: NodeEntriesDisplayType;\n constructor(public entriesService: NodeEntriesService<T>) {}\n\n getEnabledOptions() {\n return this.entriesService.globalOptionsSubject.pipe(\n map((options) => options.filter((e) => e.isEnabled)),\n );\n }\n}\n","<div\n *ngIf=\"(getEnabledOptions() | async)?.length\"\n role=\"listitem\"\n class=\"global-options\"\n [class.global-options-small]=\"displayType === NodeEntriesDisplayType.SmallGrid\"\n [class.global-options-table]=\"displayType === NodeEntriesDisplayType.Table\"\n>\n <button\n mat-button\n *ngFor=\"let option of getEnabledOptions() | async\"\n (click)=\"option.callback()\"\n class=\"global-option-btn\"\n attr.data-test=\"card-button-{{ option.name }}\"\n >\n <ng-container *ngTemplateOutlet=\"globalOption; context: { option: option }\"></ng-container>\n </button>\n</div>\n<ng-template #globalOption let-option=\"option\">\n <span class=\"global-option\">\n <i [esIcon]=\"option.icon\"></i>\n <span class=\"label\">{{ option.name | translate }}</span>\n </span>\n</ng-template>\n","import { CdkDragEnter, CdkDropList, moveItemInArray } from '@angular/cdk/drag-drop';\nimport {\n ChangeDetectionStrategy,\n Component,\n effect,\n ElementRef,\n HostBinding,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n QueryList,\n TemplateRef,\n ViewChild,\n ViewChildren,\n} from '@angular/core';\nimport { Sort } from '@angular/material/sort';\nimport { Node, RestConstants } from 'ngx-edu-sharing-api';\nimport * as rxjs from 'rxjs';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { distinctUntilChanged, map, switchMap, take, takeUntil } from 'rxjs/operators';\nimport { GridLayout, NodeEntriesDisplayType } from '../entries-model';\nimport { ItemsCap } from '../items-cap';\nimport { NodeEntriesGlobalService } from '../node-entries-global.service';\nimport { NodeEntriesTemplatesService } from '../node-entries-templates.service';\nimport { SortSelectPanelComponent } from '../sort-select-panel/sort-select-panel.component';\nimport { CustomTemplatesDataSource } from '../custom-templates-data-source';\nimport { Target } from '../../types/option-item';\nimport { NodeEntriesService } from '../../services/node-entries.service';\nimport { UIService } from '../../services/ui.service';\nimport { ListItemSort } from '../../types/list-item';\nimport { DragData } from '../../types/drag-drop';\nimport { CdkOverlayOrigin } from '@angular/cdk/overlay';\nimport { NodeHelperService } from '../../services/node-helper.service';\n\nlet displayedWarnings: string[] = [];\n\n@Component({\n selector: 'es-node-entries-card-grid',\n templateUrl: 'node-entries-card-grid.component.html',\n styleUrls: ['node-entries-card-grid.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class NodeEntriesCardGridComponent<T extends Node> implements OnInit, OnDestroy {\n readonly NodeEntriesDisplayType = NodeEntriesDisplayType;\n readonly Target = Target;\n /**\n * relative scrolling when a scrolling arrow (left or right) is used\n * a value of 1 would mean to scroll the full width of the entire content\n */\n readonly ScrollingOffsetPercentage = 0.4;\n\n columnChooserVisible$ = new BehaviorSubject(false);\n @ViewChild('columnChooserTrigger') columnChooserTrigger: CdkOverlayOrigin;\n @ViewChild('gridTop', { static: true }) set gridTop(value: TemplateRef<unknown>) {\n this.registerGridTop(value);\n }\n @ViewChild(SortSelectPanelComponent)\n set sortPanel(value: SortSelectPanelComponent) {\n // if (this.entriesService.dataSource instanceof NodeDataSourceRemote) {\n setTimeout(() => {\n (this.entriesService.dataSource as any).sortPanel = value;\n });\n // }\n }\n @ViewChildren(CdkDropList) dropListsQuery: QueryList<CdkDropList>;\n @ViewChild('grid') gridRef: ElementRef;\n @ViewChildren('item', { read: ElementRef }) itemRefs: QueryList<ElementRef<HTMLElement>>;\n @Input() displayType: NodeEntriesDisplayType;\n\n isDragging = false; // Drag-and-drop, not rearrange\n dropLists: CdkDropList[];\n /**\n * Whether the number of shown items is limited by `gridConfig.maxRows`.\n *\n * A value of `true` does not mean, that there would be more items available.\n */\n visibleItemsLimited = false;\n layout: GridLayout;\n /**\n * updates via boxObserver\n * and holds the information if scrolling in the direction is currently feasible\n */\n scroll = {\n left: false,\n right: false,\n };\n\n readonly nodes$;\n private readonly maxRows$;\n private readonly layout$;\n private readonly itemsPerRowSubject = new BehaviorSubject<number | null>(null);\n readonly itemsCap = new ItemsCap<T>();\n private globalCursorStyle: HTMLStyleElement;\n private destroyed = new Subject<void>();\n @HostBinding('style.--scroll-gradient-color') scrollGradientColor: string;\n\n constructor(\n public entriesService: NodeEntriesService<T>,\n public entriesGlobalService: NodeEntriesGlobalService,\n public templatesService: NodeEntriesTemplatesService,\n public nodeHelperService: NodeHelperService,\n public ui: UIService,\n private ngZone: NgZone,\n ) {\n this.nodes$ = this.entriesService.dataSource$.pipe(\n switchMap((dataSource) => dataSource?.connect()),\n );\n this.maxRows$ = this.entriesService.gridConfig$.pipe(\n map((gridConfig) => gridConfig?.maxRows || null),\n distinctUntilChanged(),\n );\n this.layout$ = this.entriesService.gridConfig$.pipe(\n map((gridConfig) => gridConfig?.layout || 'grid'),\n distinctUntilChanged(),\n );\n this.entriesService.dataSource$.pipe(takeUntil(this.destroyed)).subscribe(() => {\n this.updateScrollState();\n });\n effect(() => (this.scrollGradientColor = this.entriesService.scrollGradientColor()));\n }\n\n ngOnInit(): void {\n this.registerItemsCap();\n this.registerLayout();\n this.registerVisibleItemsLimited();\n }\n\n ngOnDestroy(): void {\n this.destroyed.next();\n this.destroyed.complete();\n }\n\n private registerGridTop(gridTop: TemplateRef<unknown>): void {\n setTimeout(() => {\n this.templatesService.entriesTopMatter = gridTop;\n });\n this.destroyed.subscribe(() => {\n if (this.templatesService.entriesTopMatter === gridTop) {\n setTimeout(() => {\n this.templatesService.entriesTopMatter = null;\n });\n }\n });\n }\n\n private registerItemsCap() {\n this.entriesService.dataSource$\n .pipe(takeUntil(this.destroyed))\n .subscribe((dataSource) => (dataSource.itemsCap = this.itemsCap));\n rxjs.combineLatest([this.itemsPerRowSubject.pipe(distinctUntilChanged()), this.maxRows$])\n .pipe(\n map(([itemsPerRow, maxRows]) =>\n maxRows > 0 && itemsPerRow !== null ? itemsPerRow * maxRows : null,\n ),\n )\n .subscribe((cap) => (this.itemsCap.cap = cap));\n }\n\n private registerLayout() {\n this.layout$.subscribe((layout) => (this.layout = layout));\n }\n\n onSortChange(sort: Sort) {\n this.entriesService.sort.active = sort.active;\n this.entriesService.sort.direction = sort.direction;\n this.entriesService.sortChange.emit(this.entriesService.sort);\n }\n\n loadData(source: 'scroll' | 'button') {\n // @TODO: Maybe this is better handled in a more centraled service\n if (source === 'scroll') {\n // check if there is a footer\n const elements = document.getElementsByTagName('footer');\n if (elements.length && elements.item(0).innerHTML.trim()) {\n return;\n }\n }\n const couldLoadMore = this.entriesService.loadMore(source);\n if (couldLoadMore && source === 'button') {\n this.focusFirstNewItemWhenLoaded();\n }\n }\n\n onCustomSortingInProgressChange() {\n this.entriesService.sortChange.emit(this.entriesService.sort);\n setTimeout(() => {\n this.refreshDropLists();\n });\n }\n\n onRearrangeDragEntered($event: CdkDragEnter) {\n moveItemInArray(\n this.entriesService.dataSource.getData(),\n $event.item.data,\n $event.container.data,\n );\n // `CdkDrag` doesn't really want us to rearrange the items while dragging. Its cached\n // element positions get out of sync unless we update them manually.\n this.ngZone.runOutsideAngular(() =>\n setTimeout(() =>\n this.dropLists?.forEach((list) => (list._dropListRef as any)['_cacheItems']()),\n ),\n );\n }\n\n onRearrangeDragStarted() {\n this.globalCursorStyle = document.createElement('style');\n document.body.appendChild(this.globalCursorStyle);\n this.globalCursorStyle.innerHTML = `* {cursor: grabbing !important; }`;\n }\n\n onRearrangeDragEnded() {\n document.body.removeChild(this.globalCursorStyle);\n this.globalCursorStyle = null;\n }\n\n getDragStartDelay(): number {\n if (this.ui.isMobile()) {\n return 500;\n } else {\n return null;\n }\n }\n\n private registerVisibleItemsLimited() {\n this.maxRows$.subscribe((maxRows) => {\n this.visibleItemsLimited = maxRows > 0;\n });\n }\n\n private refreshDropLists() {\n this.dropLists = this.dropListsQuery.toArray();\n }\n\n private focusFirstNewItemWhenLoaded() {\n const oldLength = this.itemRefs.length;\n this.itemRefs.changes\n .pipe(take(1))\n .subscribe((items: NodeEntriesCardGridComponent<T>['itemRefs']) => {\n if (items.length > oldLength) {\n this.focusOnce(items.get(oldLength).nativeElement);\n }\n });\n }\n\n private focusOnce(element: HTMLElement): void {\n element.setAttribute('tabindex', '-1');\n element.focus();\n element.addEventListener('blur', () => element.removeAttribute('tabindex'), { once: true });\n }\n\n onGridSizeChanges(): void {\n const itemsPerRow = this.getItemsPerRow();\n this.itemsPerRowSubject.next(itemsPerRow);\n this.updateScrollState();\n }\n\n private getItemsPerRow(): number | null {\n if (!this.gridRef?.nativeElement) {\n return null;\n }\n return getComputedStyle(this.gridRef.nativeElement)\n .getPropertyValue('grid-template-columns')\n .split(' ').length;\n }\n\n canDropNodes = (dragData: DragData<T>) => this.entriesService.dragDrop.dropAllowed?.(dragData);\n\n onNodesDropped(dragData: DragData<Node>) {\n this.entriesService.dragDrop.dropped(dragData.target, {\n element: dragData.draggedNodes,\n mode: dragData.action,\n });\n }\n\n getDragEnabled() {\n return this.ui.isTouchSubject.pipe(\n map((touch) => !touch && this.entriesService.dragDrop?.dragAllowed),\n );\n }\n\n getDragData(node: T): T[] {\n const selection = this.entriesService.selection;\n if (selection.isSelected(node)) {\n return selection.selected;\n } else {\n return [node];\n }\n }\n\n onDragStarted(node: T) {\n if (!this.entriesService.selection.isSelected(node)) {\n this.entriesService.selection.clear();\n this.entriesService.selection.select(node);\n }\n this.isDragging = true;\n }\n\n onDragEnded() {\n this.isDragging = false;\n }\n\n private canScroll(direction: 'left' | 'right') {\n const element = this.gridRef?.nativeElement;\n if (element) {\n if (direction === 'left') {\n return element.scrollLeft > 0;\n } else if (direction === 'right') {\n /*\n use a small pixel buffer (10px) because scrolling aligns with the start of each card and\n it can cause slight alignment issues on the end of the container\n */\n return element.scrollLeft < element.scrollWidth - element.clientWidth - 10;\n }\n }\n return false;\n }\n\n updateScrollState() {\n if (this.layout === 'scroll') {\n this.scroll.left = this.canScroll('left');\n this.scroll.right = this.canScroll('right');\n }\n }\n\n doScroll(direction: 'left' | 'right') {\n // 1 is enough because the browser will handle it via css snapping\n const leftScroll = this.gridRef?.nativeElement.scrollLeft;\n const rect = this.gridRef?.nativeElement.getBoundingClientRect();\n // using scroll because it works more reliable than scrollBy\n this.gridRef?.nativeElement.scroll({\n left:\n leftScroll +\n Math.max(250, rect.width * this.ScrollingOffsetPercentage) *\n (direction === 'right' ? 1 : -1),\n behavior: 'smooth',\n });\n }\n\n isCustomTemplate(node: T) {\n return (\n this.templatesService.customCard ||\n this.entriesService.dataSource instanceof CustomTemplatesDataSource ||\n (node as any).elementRef\n );\n }\n\n isBlocked(node: Node) {\n return (\n node.properties?.[RestConstants.CCM_PROP_IMPORT_BLOCKED]?.[0] === 'true' ||\n this.nodeHelperService.isNodeRevoked(node)\n );\n }\n}\n","<ng-template #gridTop>\n <button\n *ngIf=\"entriesService.configureColumns\"\n class=\"configure-columns\"\n mat-icon-button\n (click)=\"columnChooserVisible$.next(!columnChooserVisible$.value)\"\n cdkOverlayOrigin\n #columnChooserTrigger=\"cdkOverlayOrigin\"\n [matTooltip]=\"'LIST_TABLE.CONFIGURE_COLUMNS' | translate\"\n [attr.aria-label]=\"'LIST_TABLE.CONFIGURE_COLUMNS' | translate\"\n >\n <i esIcon=\"settings\"></i>\n </button>\n <es-sort-select-panel\n *ngIf=\"entriesService.sort?.allowed\"\n class=\"order-panel\"\n [active]=\"entriesService.sort.active\"\n [direction]=\"entriesService.sort.direction\"\n [columns]=\"entriesService.getSortColumns()\"\n (sortChange)=\"onSortChange($event)\"\n [(customSortingInProgress)]=\"entriesService.sort.customSortingInProgress\"\n (customSortingInProgressChange)=\"onCustomSortingInProgressChange()\"\n ></es-sort-select-panel>\n</ng-template>\n<es-column-chooser\n *ngIf=\"entriesService.configureColumns\"\n [(columns)]=\"entriesService.columns\"\n [columnChooserVisible]=\"columnChooserVisible$ | async\"\n [origin]=\"columnChooserTrigger\"\n (columnChooserVisibleChange)=\"columnChooserVisible$.next($event)\"\n></es-column-chooser>\n<es-dropdown #dropdown [options]=\"entriesService.options?.[Target.ListDropdown]\"></es-dropdown>\n\n<!-- Do not render the list element (`role=\"list\"` or `li`) when there are no list items. -->\n<ng-container\n *ngIf=\"(nodes$ | async)?.length > 0 || (entriesService.globalOptionsSubject | async)?.length > 0\"\n>\n <!-- FIXME: Ideally, we would use native `ul` and `li` elements, but these have a strict model,\n that only allows `li` elements as direct children of `ul` elements. So we would need to use the\n native elements at all places without any elements between `ul` and `li`. -->\n <div\n *ngIf=\"entriesService.sort?.customSortingInProgress\"\n role=\"list\"\n class=\"card-grid card-grid-reorder\"\n cdkDropListGroup\n >\n <ng-container *ngIf=\"nodes$ | async as nodes\">\n <div\n class=\"card-grid-order-wrapper\"\n *ngFor=\"let node of nodes; let i = index\"\n role=\"none\"\n cdkDropList\n [cdkDropListConnectedTo]=\"dropLists\"\n [cdkDropListData]=\"i\"\n >\n <es-node-entries-card\n *ngIf=\"displayType === NodeEntriesDisplayType.Grid\"\n #item\n [node]=\"node\"\n role=\"listitem\"\n cdkDrag\n [cdkDragData]=\"i\"\n [cdkDragStartDelay]=\"getDragStartDelay()\"\n cdkDragPreviewClass=\"es-card-grid-rearrange-drag-preview\"\n (cdkDragEntered)=\"onRearrangeDragEntered($event)\"\n (cdkDragStarted)=\"onRearrangeDragStarted()\"\n (cdkDragEnded)=\"onRearrangeDragEnded()\"\n ></es-node-entries-card>\n <es-node-entries-card-small\n *ngIf=\"displayType === NodeEntriesDisplayType.SmallGrid\"\n #item\n [node]=\"node\"\n role=\"listitem\"\n cdkDrag\n [cdkDragData]=\"i\"\n [cdkDragStartDelay]=\"getDragStartDelay()\"\n cdkDragPreviewClass=\"es-card-grid-rearrange-drag-preview\"\n (cdkDragEntered)=\"onRearrangeDragEntered($event)\"\n (cdkDragStarted)=\"onRearrangeDragStarted()\"\n (cdkDragEnded)=\"onRearrangeDragEnded()\"\n ></es-node-entries-card-small>\n </div>\n </ng-container>\n </div>\n <div class=\"card-grid-wrapper\" *ngIf=\"!entriesService.sort?.customSortingInProgress\">\n <ng-container *ngTemplateOutlet=\"scrollHelper\"></ng-container>\n <div\n role=\"list\"\n class=\"card-grid card-grid-layout-{{ layout }}\"\n #grid\n (esBorderBoxObserver)=\"onGridSizeChanges()\"\n esInfiniteScroll\n (scroll)=\"updateScrollState()\"\n (scrolled)=\"!visibleItemsLimited && loadData('scroll')\"\n >\n <es-node-entries-global-options\n *ngIf=\"(entriesService.globalOptionsSubject | async)?.length\"\n [displayType]=\"displayType\"\n >\n </es-node-entries-global-options>\n <ng-container *ngIf=\"nodes$ | async as nodes\">\n <div\n class=\"card-grid-drag-wrapper\"\n *ngFor=\"let node of nodes; let i = index\"\n role=\"none\"\n [esNodesDropTarget]=\"node\"\n [canDropNodes]=\"canDropNodes\"\n (nodeDropped)=\"onNodesDropped($event)\"\n #dropTarget=\"esNodesDropTarget\"\n >\n <ng-container *ngIf=\"isCustomTemplate(node)\">\n <ng-container\n *ngTemplateOutlet=\"\n templatesService.customCard || $any(node);\n context: { element: node, options: entriesService.options }\n \"\n ></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!isCustomTemplate(node)\">\n <es-node-entries-card\n *ngIf=\"displayType === NodeEntriesDisplayType.Grid\"\n #item\n [node]=\"node\"\n [dropdown]=\"dropdown\"\n role=\"listitem\"\n cdkDrag\n [cdkDragDisabled]=\"(getDragEnabled() | async) === false\"\n [cdkDragData]=\"getDragData(node)\"\n esNodesDrag\n (cdkDragStarted)=\"onDragStarted(node)\"\n (cdkDragEnded)=\"onDragEnded()\"\n [class.card-import-blocked]=\"isBlocked(node)\"\n [class.selected-when-dragging]=\"\n isDragging && entriesService.selection.isSelected(node)\n \"\n >\n <ng-container *ngIf=\"entriesService.selection.selected.length > 1\">\n <es-node-entries-card\n *cdkDragPreview\n [node]=\"node\"\n [matBadge]=\"\n entriesService.selection.selected.length > 1\n ? entriesService.selection.selected.length\n : null\n \"\n class=\"card-drag-preview\"\n ></es-node-entries-card>\n </ng-container>\n </es-node-entries-card>\n <es-node-entries-card-small\n *ngIf=\"displayType === NodeEntriesDisplayType.SmallGrid\"\n #item\n [node]=\"node\"\n role=\"listitem\"\n cdkDrag\n [cdkDragDisabled]=\"(getDragEnabled() | async) === false\"\n [cdkDragData]=\"[node]\"\n esNodesDrag\n >\n </es-node-entries-card-small>\n </ng-container>\n <div\n *ngIf=\"dropTarget.active?.canDrop?.denyExplicit\"\n class=\"card-grid-drop-blocked-container\"\n >\n <i esIcon=\"cancel\"></i>\n </div>\n <div *ngIf=\"dropTarget.active?.canDrop?.accept\" class=\"card-grid-drop-allowed-container\">\n <i\n [esIcon]=\"dropTarget.active.action === 'copy' ? 'add_circle_outline' : 'archive'\"\n ></i>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n</ng-container>\n<ng-container\n *ngIf=\"\n !entriesService.dataSource.isLoading &&\n entriesService.dataSource.hasMore() &&\n !visibleItemsLimited &&\n entriesService.paginationStrategy === 'infinite-scroll' &&\n layout !== 'scroll'\n \"\n>\n <div class=\"load-more\">\n <button mat-button color=\"primary\" (click)=\"loadData('button')\">\n <i esIcon=\"refresh\"></i>\n <span>{{ 'LOAD_MORE' | translate }}</span>\n </button>\n </div>\n</ng-container>\n<ng-container\n *ngIf=\"\n entriesService.dataSource.isLoading === true ||\n entriesService.dataSource.isLoading === 'initial' ||\n (entriesService.dataSource.isLoading === 'page' &&\n entriesService.paginationStrategy === 'infinite-scroll')\n \"\n>\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n</ng-container>\n\n<ng-template #loading>\n <es-spinner></es-spinner>\n</ng-template>\n<ng-template #scrollHelper>\n <ng-container *ngIf=\"layout === 'scroll'\">\n <div\n class=\"scroll-helper-left\"\n role=\"presentation\"\n (click)=\"doScroll('left')\"\n *ngIf=\"scroll.left\"\n >\n <button mat-icon-button color=\"primary\" (click)=\"$event.stopPropagation(); doScroll('left')\">\n <i esIcon=\"keyboard_arrow_left\" [aria]=\"true\"></i>\n </button>\n </div>\n <div\n class=\"scroll-helper-right\"\n role=\"presentation\"\n (click)=\"doScroll('right')\"\n *ngIf=\"scroll.right\"\n >\n <button mat-icon-button color=\"primary\" (click)=\"$event.stopPropagation(); doScroll('right')\">\n <i esIcon=\"keyboard_arrow_right\" [aria]=\"true\"></i>\n </button>\n </div>\n </ng-container>\n</ng-template>\n","import { CdkOverlayOrigin } from '@angular/cdk/overlay';\nimport {\n AfterViewInit,\n ApplicationRef,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n HostBinding,\n NgZone,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { MatSort, Sort } from '@angular/material/sort';\nimport * as rxjs from 'rxjs';\nimport { BehaviorSubject, combineLatest, Observable, Subject } from 'rxjs';\nimport {\n debounceTime,\n delay,\n distinctUntilChanged,\n first,\n map,\n shareReplay,\n startWith,\n takeUntil,\n tap,\n} from 'rxjs/operators';\nimport {\n ClickSource,\n InteractionType,\n NodeEntriesDataType,\n NodeEntriesDisplayType,\n} from '../entries-model';\nimport { NodeEntriesGlobalService } from '../node-entries-global.service';\nimport { NodeEntriesService } from '../../services/node-entries.service';\nimport { UIService } from '../../services/ui.service';\nimport { BorderBoxObserverDirective } from '../../directives/border-box-observer.directive';\nimport { ListItem } from '../../types/list-item';\nimport { CanDrop, DragData } from '../../types/drag-drop';\nimport { Node, RestConstants } from 'ngx-edu-sharing-api';\nimport { Target } from '../../types/option-item';\nimport { Toast } from '../../services/abstract/toast.service';\nimport { DropdownComponent } from '../../dropdown/dropdown.component';\nimport { NodeDataSourceRemote } from '../node-data-source-remote';\nimport { TranslationsService } from '../../translations/translations.service';\nimport { NodeHelperService } from '../../services/node-helper.service';\nimport { NodeEntriesTemplatesService } from '../node-entries-templates.service';\n\n@Component({\n selector: 'es-node-entries-table',\n templateUrl: './node-entries-table.component.html',\n styleUrls: ['./node-entries-table.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class NodeEntriesTableComponent<T extends NodeEntriesDataType>\n implements OnChanges, AfterViewInit, OnDestroy\n{\n readonly InteractionType = InteractionType;\n readonly ClickSource = ClickSource;\n readonly NodeEntriesDisplayType = NodeEntriesDisplayType;\n readonly Target = Target;\n\n @ViewChild(MatSort) sort: MatSort;\n @ViewChild(MatPaginator) paginator: MatPaginator;\n @ViewChild('columnChooserTrigger') columnChooserTrigger: CdkOverlayOrigin;\n @ViewChild(DropdownComponent) dropdown: DropdownComponent;\n @ViewChild('menuTrigger') menuTrigger: MatMenuTrigger;\n @HostBinding('class.scroll') isScroll = false;\n @ViewChild('gridTop', { static: false }) set gridTop(value: TemplateRef<unknown>) {\n this.registerGridTop(value);\n }\n dropdownLeft: number;\n dropdownTop: number;\n\n loading: Observable<boolean>;\n isPageSelected = new BehaviorSubject(false);\n isAllSelected = new BehaviorSubject(false);\n columnChooserVisible = false;\n columnChooserTriggerReady = false;\n error: Observable<any>;\n pageSizeOptions = [25, 50, 100];\n isDragging = false;\n\n private readonly maximumColumnsNumber$ = new BehaviorSubject(1);\n readonly hasHiddenSortColumns$ = new BehaviorSubject(false);\n readonly visibleDataColumns$;\n readonly visibleColumnNames$;\n\n private destroyed = new Subject<void>();\n containerWidth$ = new BehaviorSubject<number>(null);\n\n constructor(\n public entriesService: NodeEntriesService<T>,\n public entriesGlobalService: NodeEntriesGlobalService,\n private applicationRef: ApplicationRef,\n private toast: Toast,\n public templatesService: NodeEntriesTemplatesService,\n private translations: TranslationsService,\n private nodeHelperService: NodeHelperService,\n private changeDetectorRef: ChangeDetectorRef,\n public ui: UIService,\n private ngZone: NgZone,\n private elementRef: ElementRef<HTMLElement>,\n ) {\n this.visibleDataColumns$ = this.getVisibleDataColumns();\n this.visibleColumnNames$ = this.getVisibleColumnNames();\n this.registerMaximumColumnsNumber();\n this.entriesService.selection.changed\n .pipe(takeUntil(this.destroyed), debounceTime(0))\n .subscribe(() => this.changeDetectorRef.detectChanges());\n }\n\n ngAfterViewInit(): void {\n this.isScroll = this.entriesService.tableConfig?.dataColumnLayout === 'scroll';\n void Promise.resolve().then(() => {\n this.registerSortChanges();\n if (this.entriesService.dataSource instanceof NodeDataSourceRemote) {\n (this.entriesService.dataSource as NodeDataSourceRemote).sortPanel = this.sort;\n }\n });\n this.visibleDataColumns$\n .pipe(first(), delay(0))\n .subscribe(() => (this.columnChooserTriggerReady = true));\n rxjs.combineLatest([\n this.entriesService.dataSource$.pipe(startWith(void 0 as void)),\n this.entriesService.options$.pipe(startWith(void 0 as void)),\n this.entriesService.dataSource.isLoadingSubject.pipe(startWith(void 0 as void)),\n this.entriesService.selection.changed.pipe(startWith(void 0 as void)),\n this.translations.waitForInit().pipe(startWith(void 0 as void)),\n ])\n .pipe(takeUntil(this.destroyed))\n .subscribe(() => {\n this.changeDetectorRef.detectChanges();\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n this.updateSort();\n }\n\n ngOnDestroy(): void {\n this.destroyed.next();\n this.destroyed.complete();\n }\n\n onRowContextMenu({ event, node }: { event: MouseEvent | Event; node: T }) {\n event.stopPropagation();\n event.preventDefault();\n if (!this.dropdown) {\n // Call `preventDefault()` even when there is no menu, so we can use `cdkDrag` with a\n // start delay without being interrupted by the standard long-tap action.\n return;\n }\n if (event instanceof MouseEvent) {\n ({ clientX: this.dropdownLeft, clientY: this.dropdownTop } = event);\n } else {\n ({ x: this.dropdownLeft, y: this.dropdownTop } = (\n event.target as HTMLElement\n ).getBoundingClientRect());\n }\n this.entriesService.openDropdown(this.dropdown, node, () => this.menuTrigger.openMenu());\n }\n\n private updateSort(disableClear = false): void {\n this.sort.sort({\n id: this.entriesService.sort?.active,\n start: this.entriesService.sort?.direction as 'asc' | 'desc',\n disableClear,\n });\n /*\n this.route.queryParams.pipe(first()).subscribe((queryParams: Params) => {\n const sort: Sort = queryParams.sort ? JSON.parse(queryParams.sort) : null;\n if (sort && sort.direction) {\n this.sort.sort({ id: sort.active, start: sort.direction, disableClear: false });\n // Fix missing sorting indicators. See\n // https://github.com/angular/components/issues/10242#issuecomment-470726829. Seems\n // to be fixed upstream with Angular 11.\n (\n this.sort.sortables.get(sort.active) as MatSortHeader\n )._setAnimationTransitionState({\n toState: 'active',\n });\n }\n if (queryParams.pageIndex && queryParams.pageSize) {\n this.paginator.pageIndex = queryParams.pageIndex;\n this.paginator.pageSize = queryParams.pageSize;\n }\n });\n */\n }\n\n private registerMaximumColumnsNumber() {\n BorderBoxObserverDirective.observeElement(this.elementRef)\n .pipe(\n takeUntil(this.destroyed),\n tap((box) => this.containerWidth$.next(box.width)),\n map((box) => this.getMaximumColumnsNumber(box.width)),\n distinctUntilChanged(),\n )\n .subscribe((maximumColumnsNumber) =>\n this.ngZone.run(() => this.maximumColumnsNumber$.next(maximumColumnsNumber)),\n );\n }\n\n private getMaximumColumnsNumber(tableWidth: number): number {\n if (this.entriesService.tableConfig?.dataColumnLayout === 'scroll') {\n return 0xffffffff;\n }\n return Math.max(\n 1,\n Math.floor(\n // Subtract total width of always visible columns like checkboxes and icons.\n (tableWidth - 187) / (this.entriesService.tableConfig?.dataColumnWidth || 126),\n ),\n );\n }\n\n private getVisibleDataColumns(): Observable<ListItem[]> {\n return rxjs\n .combineLatest([\n this.maximumColumnsNumber$,\n this.entriesService.columnsSubject.pipe(map((c) => c?.columns)),\n ])\n .pipe(\n map(([maximumColumnsNumber, columns]) =>\n (columns ?? [])\n .filter((column) => column.visible)\n .filter((_, index) => index < maximumColumnsNumber),\n ),\n tap((columns) => {\n this.hasHiddenSortColumns$.next(\n this.entriesService\n .getSortColumns()\n ?.some((c) => !columns?.some((c2) => c2.name === c.name)),\n );\n }),\n shareReplay(1),\n );\n }\n\n private getVisibleColumnNames(): Observable<string[]> {\n return combineLatest([this.visibleDataColumns$, this.entriesService.showIconColumn]).pipe(\n map(([visibleDataColumns, showIconColumn]) => {\n const columns = [];\n if (this.entriesService.checkbox) {\n columns.push('select');\n }\n if (showIconColumn) {\n columns.push('icon');\n }\n return columns.concat(visibleDataColumns.map((c) => c.name)).concat(['actions']);\n }),\n shareReplay(1),\n );\n }\n\n isSortable(column: ListItem) {\n return this.entriesService.sort?.columns?.some(\n (c) => c.type === column.type && c.name === column.name,\n );\n }\n\n toggleAll(checked: boolean) {\n if (checked) {\n this.entriesService.selection.select(...this.entriesService.dataSource.getData());\n } else {\n this.entriesService.selection.clear();\n }\n }\n\n private registerGridTop(gridTop: TemplateRef<unknown>): void {\n setTimeout(() => {\n this.templatesService.entriesTopMatter = gridTop;\n });\n this.destroyed.subscribe(() => {\n if (this.templatesService.entriesTopMatter === gridTop) {\n setTimeout(() => {\n this.templatesService.entriesTopMatter = null;\n });\n }\n });\n }\n private registerSortChanges() {\n this.sort.sortChange.subscribe((sort: Sort) => {\n this.entriesService.sort.active = sort.active;\n this.entriesService.sort.direction = sort.direction;\n this.entriesService.sortChange.emit(this.entriesService.sort);\n /*this.router.navigate(['.'], {\n relativeTo: this.route,\n queryParams: { sort: JSON.stringify(sort) },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });*/\n });\n /*\n this.paginator.page\n .pipe(\n // As a response to changes of other parameters, the pageIndex might be reset to 0 and a\n // page event triggers. This change of other parameters is likely to cause a\n // `router.navigate()` call elsewhere. When this happens just before our call, our\n // updates are ignored. To shield against this, we wait a tick.\n delay(0),\n )\n .subscribe(({ pageIndex, pageSize }: PageEvent) => {\n this.router.navigate(['.'], {\n relativeTo: this.route,\n queryParams: { pageIndex, pageSize },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n });\n */\n }\n\n canDrop = (dragData: DragData<T>): CanDrop => {\n return this.entriesService.dragDrop.dropAllowed?.(dragData);\n };\n\n drop(dragData: DragData<Node>) {\n this.entriesService.dragDrop.dropped(dragData.target, {\n element: dragData.draggedNodes,\n mode: dragData.action,\n });\n }\n\n getDragData(node: T): T[] {\n const selection = this.entriesService.selection;\n if (selection.isSelected(node)) {\n return selection.selected;\n } else {\n return [node];\n }\n }\n\n onDragStarted(node: T) {\n if (!this.entriesService.selection.isSelected(node)) {\n this.entriesService.selection.clear();\n this.entriesService.selection.select(node);\n }\n this.isDragging = true;\n }\n\n onDragEnded() {\n this.isDragging = false;\n }\n\n loadData(source: 'scroll' | 'button') {\n // TODO: focus next item when triggered via button.\n this.entriesService.loadMore(source);\n }\n\n async openMenu(node: T) {\n this.entriesService.openDropdown(this.dropdown, node);\n }\n\n isBlocked(node: Node) {\n return (\n node.properties?.[RestConstants.CCM_PROP_IMPORT_BLOCKED]?.[0] === 'true' ||\n this.nodeHelperService.isNodeRevoked(node)\n );\n }\n\n selectSortChange(sort: Sort) {\n this.entriesService.sort.active = sort.active;\n this.entriesService.sort.direction = sort.direction;\n console.log(sort);\n this.updateSort(true);\n /*this.sort.active = sort.active;\n this.sort.direction = sort.direction;\n this.changeDetectorRef.detectChanges();*/\n }\n}\n","<ng-template #gridTop>\n <es-sort-select-panel\n *ngIf=\"entriesService.sort?.allowed && (hasHiddenSortColumns$ | async)\"\n class=\"order-panel\"\n [active]=\"entriesService.sort.active\"\n (sortChange)=\"selectSortChange($event)\"\n [direction]=\"entriesService.sort.direction\"\n [columns]=\"entriesService.getSortColumns()\"\n ></es-sort-select-panel>\n</ng-template>\n<es-dropdown #dropdown [options]=\"entriesService.options?.[Target.ListDropdown]\"></es-dropdown>\n<button\n #menuTrigger=\"matMenuTrigger\"\n mat-button\n class=\"dropdown-dummy cdk-visually-hidden\"\n [style.left.px]=\"dropdownLeft\"\n [style.top.px]=\"dropdownTop\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n></button>\n<es-node-entries-global-options\n *ngIf=\"(entriesService.globalOptionsSubject | async)?.length\"\n [displayType]=\"NodeEntriesDisplayType.Table\"\n>\n</es-node-entries-global-options>\n<mat-table\n [dataSource]=\"entriesService.dataSource\"\n matSort\n [matSortDisableClear]=\"true\"\n [matSortActive]=\"entriesService.sort?.active\"\n [matSortDirection]=\"entriesService.sort?.direction\"\n esInfiniteScroll\n (scrolled)=\"loadData('scroll')\"\n>\n <!-- Checkbox Column -->\n <ng-container matColumnDef=\"select\" [sticky]=\"isScroll\">\n <mat-header-cell *matHeaderCellDef>\n <mat-checkbox\n [ngModel]=\"entriesService.selection.selected.length > 0\"\n [indeterminate]=\"\n entriesService.selection.selected.length > 0 &&\n entriesService.selection.selected.length !== entriesService.dataSource.getData().length\n \"\n (ngModelChange)=\"toggleAll($event)\"\n color=\"primary\"\n aria-label=\"{{ 'LIST_TABLE.TOGGLE_ALL' | translate }}\"\n ></mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let node\">\n <mat-checkbox\n [checked]=\"entriesService.selection.isSelected(node)\"\n (change)=\"entriesService.onCheckboxChanged(node, $event.checked)\"\n aria-label=\"{{ 'SELECT' | translate : { element: (node | nodeTitle) } }}\"\n color=\"primary\"\n ></mat-checkbox>\n </mat-cell>\n </ng-container>\n <div matColumnDef=\"icon\" [sticky]=\"isScroll\">\n <mat-header-cell *matHeaderCellDef class=\"cell-icon cell-count\">\n ({{ entriesService.selection.selected.length\n }}<ng-container *ngIf=\"entriesService.dataSource?.getTotal() !== undefined\">\n / {{ entriesService.dataSource?.getTotal() }}</ng-container\n >)\n </mat-header-cell>\n <mat-cell *matCellDef=\"let node\" class=\"cell-icon\">\n <ng-container\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n >\n <ng-container *ngTemplateOutlet=\"icon; context: { node: node }\"></ng-container>\n </ng-container>\n <div\n *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\"\n (click)=\"\n entriesService.onClicked({ event: $event, element: node, source: ClickSource.Icon })\n \"\n (dblclick)=\"entriesService.dblClickItem.emit({ element: node, source: ClickSource.Icon })\"\n >\n <ng-container\n *ngTemplateOutlet=\"icon; context: { node: node }\"\n (click)=\"\n entriesService.onClicked({ event: $event, element: node, source: ClickSource.Icon })\n \"\n (dblclick)=\"entriesService.dblClickItem.emit({ element: node, source: ClickSource.Icon })\"\n ></ng-container>\n </div>\n </mat-cell>\n </div>\n <ng-container matColumnDef=\"actions\" [stickyEnd]=\"isScroll\">\n <mat-header-cell *matHeaderCellDef>\n <button\n *ngIf=\"entriesService.configureColumns\"\n mat-icon-button\n (click)=\"columnChooserVisible = !columnChooserVisible\"\n cdkOverlayOrigin\n #columnChooserTrigger=\"cdkOverlayOrigin\"\n [matTooltip]=\"'LIST_TABLE.CONFIGURE_COLUMNS' | translate\"\n [attr.aria-label]=\"'LIST_TABLE.CONFIGURE_COLUMNS' | translate\"\n >\n <i esIcon=\"settings\"></i>\n </button>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let node\">\n <button\n mat-icon-button\n *ngIf=\"entriesService.options?.[Target.List]?.length\"\n color=\"primary\"\n (click)=\"openMenu(node)\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n >\n <i esIcon=\"more_vert\" [aria]=\"true\"></i>\n </button>\n </mat-cell>\n </ng-container>\n <!-- Data Columns -->\n <ng-container\n *ngFor=\"let column of visibleDataColumns$ | async; let first = first\"\n [matColumnDef]=\"column.name\"\n [sticky]=\"first && isScroll\"\n >\n <ng-container>\n <mat-header-cell\n *matHeaderCellDef\n mat-sort-header\n [disabled]=\"!(entriesService.sort?.allowed && isSortable(column))\"\n [class.mat-column-primary]=\"first\"\n [style.min-width]=\"first ? (containerWidth$ | async) / 3 + 'px' : null\"\n >{{ column | esListItemLabel | async }}</mat-header-cell\n >\n </ng-container>\n <mat-cell\n *matCellDef=\"let node\"\n #cell\n [class.mat-column-primary]=\"first\"\n [style.min-width]=\"first ? (containerWidth$ | async) / 3 + 'px' : null\"\n attr.data-test=\"table-cell-{{ column.name }}\"\n >\n <ng-container\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n >\n <es-node-url cdkMonitorSubtreeFocus [node]=\"node\" [mode]=\"first ? 'link' : 'wrapper'\">\n <es-list-base\n [forceText]=\"true\"\n [node]=\"node\"\n [item]=\"column\"\n esCheckTextOverflow\n #text=\"esCheckTextOverflow\"\n [matTooltip]=\"text.hasTextOverflow() ? cell.innerText : null\"\n matTooltipTouchGestures=\"off\"\n ></es-list-base>\n </es-node-url>\n </ng-container>\n <es-list-base\n *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\"\n [forceText]=\"true\"\n [node]=\"node\"\n [item]=\"column\"\n (click)=\"\n entriesService.onClicked({\n event: $event,\n element: node,\n source: ClickSource.Metadata,\n attribute: column,\n })\n \"\n (dblclick)=\"\n entriesService.dblClickItem.emit({\n element: node,\n source: ClickSource.Metadata,\n attribute: column,\n })\n \"\n ></es-list-base>\n <ng-container *ngIf=\"first\">\n <div class=\"childobjects\" *ngIf=\"node.properties?.['virtual:childobjectcount'] > 0\">\n <div\n class=\"childobject-count\"\n matTooltip=\"{{\n 'CHILDOBJECT_COUNT'\n | translate : { count: node.properties['virtual:childobjectcount'] * 1 + 1 }\n }}\"\n >\n <span>{{ node.properties['virtual:childobjectcount'] * 1 + 1 }}</span\n ><i esIcon=\"filter_none\"></i>\n </div>\n </div>\n </ng-container>\n </mat-cell>\n </ng-container>\n <mat-header-row mat-header-row *matHeaderRowDef=\"visibleColumnNames$ | async\"></mat-header-row>\n <mat-row\n mat-row\n matRipple\n [matRippleDisabled]=\"isScroll\"\n cdkDrag\n esNodesDrag\n [cdkDragDisabled]=\"!entriesService.dragDrop?.dragAllowed || (ui.isTouchSubject | async)\"\n [cdkDragData]=\"getDragData(node)\"\n (cdkDragStarted)=\"onDragStarted(node)\"\n (cdkDragEnded)=\"onDragEnded()\"\n [esNodesDropTarget]=\"node\"\n [canDropNodes]=\"canDrop\"\n (nodeDropped)=\"drop($event)\"\n class=\"mat-row\"\n [class.mat-row-selected]=\"entriesService.selection.isSelected(node)\"\n [class.mat-row-import-blocked]=\"isBlocked(node)\"\n [class.selected-when-dragging]=\"isDragging && entriesService.selection.isSelected(node)\"\n [class.mat-row-virtual]=\"node.virtual\"\n [class.mat-row-virtual-first]=\"\n node.virtual && !$any(entriesService.dataSource.getData()[i - 1])?.virtual\n \"\n [class.mat-row-virtual-last]=\"\n node.virtual && !$any(entriesService.dataSource.getData()[i + 1])?.virtual\n \"\n [class.dynamic-single-click]=\"entriesService.singleClickHint === 'dynamic'\"\n *matRowDef=\"let node; let i = index; let last = last; columns: visibleColumnNames$ | async\"\n (contextmenu)=\"onRowContextMenu({ event: $event, node: node })\"\n (keydown.ContextMenu)=\"onRowContextMenu({ event: $event, node: node })\"\n >\n <es-drag-preview\n *cdkDragPreview\n [node]=\"node\"\n [selected]=\"entriesService.selection.selected\"\n [item]=\"(visibleDataColumns$ | async)[0]\"\n ></es-drag-preview>\n </mat-row>\n</mat-table>\n<ng-container\n *ngIf=\"\n (entriesService.dataSource.isLoadingSubject | async) === false &&\n entriesService.dataSource.hasMore() &&\n entriesService.paginationStrategy === 'infinite-scroll'\n \"\n>\n <div class=\"load-more\">\n <button mat-button color=\"primary\" (click)=\"loadData('button')\">\n <i esIcon=\"refresh\"></i>\n <span>{{ 'LOAD_MORE' | translate }}</span>\n </button>\n </div>\n</ng-container>\n<ng-container *ngIf=\"entriesService.dataSource.isLoadingSubject | async\">\n <ng-container *ngTemplateOutlet=\"loading\"> </ng-container>\n</ng-container>\n<!--\n<mat-paginator #paginator [pageSizeOptions]=\"pageSizeOptions\"></mat-paginator>\n-->\n\n<!-- Wait for ready state to avoid changed-after-checked error when `columnChooserTrigger` becomes\navailable. -->\n<es-column-chooser\n *ngIf=\"columnChooserTriggerReady\"\n [(columns)]=\"entriesService.columns\"\n [(columnChooserVisible)]=\"columnChooserVisible\"\n [origin]=\"columnChooserTrigger\"\n></es-column-chooser>\n<ng-template #loading>\n <es-spinner></es-spinner>\n</ng-template>\n<ng-template #icon let-node=\"node\">\n <div class=\"icon-bg\">\n <es-node-type-badge [node]=\"node\" [collectionIcons]=\"false\"></es-node-type-badge>\n </div>\n</ng-template>\n","import { Injectable } from '@angular/core';\nimport { Node } from 'ngx-edu-sharing-api';\n\n/**\n * Service to store any data temporary (lost after reloading page).\n *\n * Note that all components share the same data source. So uses prefixes for your name if\n * applicable!\n */\n@Injectable({ providedIn: 'root' })\nexport class TemporaryStorageService {\n static APPLY_TO_LMS_PARAMETER_NODE = 'apply_to_lms_node';\n // @Deprecated Use NODE_RENDER_PARAMETER_DATA_SOURCE instead\n static NODE_RENDER_PARAMETER_LIST = 'node_render_list';\n static NODE_RENDER_PARAMETER_DATA_SOURCE = 'node_render_data_source';\n static COLLECTION_ADD_NODES = 'collection_add_nodes';\n static WORKSPACE_LAST_LOCATION = 'WORKSPACE_LAST_LOCATION';\n // default: false\n static OPTION_HIDE_MAINNAV: 'option_hide_mainnav';\n // default: false\n static OPTION_DISABLE_SCROLL_LAYOUT: 'option_disable_scroll_layout';\n static CUSTOM_NODE_LIST_COMPONENT = 'custom_node_list_component';\n static CUSTOM_NODE_ENTRIES_COMPONENT = 'custom_node_entries_component';\n\n private data: any = {};\n\n constructor() {}\n\n get(name: string, defaultValue: any = null) {\n if (this.data[name] != null) {\n return this.data[name];\n }\n return defaultValue;\n }\n\n set(name: string, value: any) {\n this.data[name] = value;\n }\n\n /**\n * Same as get, but will remove the value after fetching it.\n */\n pop(name: string, defaultValue: any = null): any {\n const value = this.get(name, defaultValue);\n this.remove(name);\n return value;\n }\n\n remove(name: string) {\n this.data[name] = null;\n }\n}\n\nexport interface ClipboardObject {\n nodes: Node[];\n sourceNode: Node;\n copy: boolean;\n}\n","export type Modifier = 'Ctrl/Cmd' | 'Shift' | 'Alt';\n\nexport interface KeyboardShortcutCondition {\n modifiers?: Modifier[];\n keyCode: string;\n ignoreWhen?: (event: KeyboardEvent) => boolean;\n}\nexport interface KeyboardShortcut extends KeyboardShortcutCondition {\n callback: () => void;\n}\n\nexport function matchesShortcutCondition(\n event: KeyboardEvent,\n condition: KeyboardShortcutCondition,\n): boolean {\n return (\n event.code === condition.keyCode &&\n matchesModifiers(event, condition.modifiers) &&\n !condition.ignoreWhen?.(event)\n );\n}\n\nfunction matchesModifiers(event: KeyboardEvent, modifiers: Modifier[] = []): boolean {\n return (\n modifiers.includes('Alt') === event.altKey &&\n modifiers.includes('Shift') === event.shiftKey &&\n modifiers.includes('Ctrl/Cmd') === (event.ctrlKey || event.metaKey)\n );\n}\n","import { EventEmitter, Injectable } from '@angular/core';\nimport { Node } from 'ngx-edu-sharing-api';\n\n/**\n * An application-wide event broker.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class LocalEventsService {\n /**\n * One or more nodes have been created\n *\n * Triggers when the full creation process is done, i.e. the metadata/edit dialog after uploading\n * is closed\n */\n readonly nodesCreated = new EventEmitter<Node[]>();\n /**\n * The metadata of one or more nodes have been updated.\n *\n * The emitted value is the array of updated nodes.\n *\n * The emitter should not be triggered with an empty array or null.\n */\n readonly nodesChanged = new EventEmitter<Node[]>();\n /**\n * One or more nodes have been moved to the recycle bin.\n *\n * The emitted value is the array of former nodes.\n *\n * The emitter should not be triggered with an empty array or null.\n */\n // FIXME: Maybe a `nodesMoved` emitter would make for sense for updating lists that used to\n // include a node and lists that the node was moved to.\n readonly nodesDeleted = new EventEmitter<Node[]>();\n}\n","import { Injectable } from '@angular/core';\nimport { KeyboardShortcut } from '../../types/keyboard-shortcuts';\nimport { Observable } from 'rxjs';\n\n@Injectable()\nexport abstract class KeyboardShortcutsService {\n abstract register(shortcuts: KeyboardShortcut[], { until }: { until: Observable<void> }): void;\n\n abstract shouldIgnoreShortcut(event: KeyboardEvent): boolean;\n}\n","import { OptionData, OptionsHelperComponents } from '../options-helper-data.service';\nimport { OptionItem, Target } from '../../types/option-item';\nimport { Node } from 'ngx-edu-sharing-api';\n\nexport abstract class OptionsHelperService {\n abstract wrapOptionCallbacks(data: OptionData): OptionData;\n\n abstract refreshComponents(\n components: OptionsHelperComponents,\n data: OptionData,\n ): Promise<void>;\n\n abstract getAvailableOptions(\n target: Target,\n objects: Node[],\n components: OptionsHelperComponents,\n data: OptionData,\n ): Promise<OptionItem[]>;\n\n abstract pasteNode(\n components: OptionsHelperComponents,\n data: OptionData,\n addVirutalNodes: boolean,\n nodes: Node[],\n ): void;\n\n abstract filterOptions(\n options: OptionItem[],\n target: Target,\n data: OptionData,\n objects: Node[] | any,\n ): Promise<OptionItem[]>;\n}\n","import type { DropdownComponent } from '../dropdown/dropdown.component';\nimport type { ActionbarComponent } from '../actionbar/actionbar.component';\nimport type {\n ListEventInterface,\n NodeEntriesDataType,\n NodeEntriesDisplayType,\n} from '../node-entries/entries-model';\nimport { EventEmitter, Injectable, NgZone, OnDestroy, Optional } from '@angular/core';\nimport { AuthenticationService, ME, NetworkService, Node, UserService } from 'ngx-edu-sharing-api';\nimport { take, takeUntil } from 'rxjs/operators';\nimport { CustomOptions, OptionItem, Scope, Target } from '../types/option-item';\nimport { OptionsHelperService } from './abstract/options-helper.service';\nimport { fromEvent, Subject, Subscription } from 'rxjs';\nimport { matchesShortcutCondition } from '../types/keyboard-shortcuts';\nimport { KeyboardShortcutsService } from './abstract/keyboard-shortcuts.service';\nimport { ActivatedRoute } from '@angular/router';\nimport { LocalEventsService } from './local-events.service';\nimport { Toast } from './abstract/toast.service';\n\ntype DeleteEvent = {\n objects: Node[] | any;\n count: number;\n error: boolean;\n};\nexport interface OptionsHelperComponents {\n actionbar?: ActionbarComponent;\n dropdown?: DropdownComponent;\n list?: ListEventInterface<NodeEntriesDataType>;\n}\n\nexport interface OptionData {\n scope: Scope;\n activeObjects?: Node[] | any[];\n selectedObjects?: Node[] | any[];\n allObjects?: Node[] | any[];\n parent?: Node | any;\n customOptions?: CustomOptions;\n /**\n * custom interceptor to modify the default options array\n */\n postPrepareOptions?: (options: OptionItem[], objects: Node[]) => void;\n}\n@Injectable()\nexport class OptionsHelperDataService implements OnDestroy {\n private components: OptionsHelperComponents;\n private data: OptionData;\n private keyboardShortcutsSubscription: Subscription;\n private globalOptions: OptionItem[];\n private destroyed = new Subject<void>();\n\n readonly virtualNodesAdded = new EventEmitter<Node[]>();\n readonly nodesChanged = new EventEmitter<Node[] | void>();\n readonly nodesDeleted = new EventEmitter<DeleteEvent>();\n readonly displayTypeChanged = new EventEmitter<NodeEntriesDisplayType>();\n\n constructor(\n private ngZone: NgZone,\n private route: ActivatedRoute,\n private localEvents: LocalEventsService,\n private authenticationService: AuthenticationService,\n private toast: Toast,\n private userService: UserService,\n private networkService: NetworkService,\n @Optional() private keyboardShortcutsService: KeyboardShortcutsService,\n @Optional() private optionsHelperService: OptionsHelperService,\n ) {\n this.registerStaticSubscriptions();\n }\n /** Performs subscriptions that don't have to be refreshed. */\n private registerStaticSubscriptions(): void {\n this.localEvents.nodesDeleted\n .pipe(takeUntil(this.destroyed))\n .subscribe((nodes) => this.components?.list?.deleteNodes(nodes));\n this.localEvents.nodesChanged\n .pipe(takeUntil(this.destroyed))\n .subscribe((nodes) => this.components?.list?.updateNodes(nodes));\n }\n ngOnDestroy(): void {\n this.destroyed.next();\n this.destroyed.complete();\n }\n\n async initComponents(\n actionbar: ActionbarComponent = null,\n list: ListEventInterface<NodeEntriesDataType> = null,\n dropdown: DropdownComponent = null,\n ) {\n this.components = {\n actionbar,\n list,\n dropdown,\n };\n if ((await this.userService.getUser(ME).pipe(take(1)).toPromise())?.person?.authorityName) {\n await this.networkService.getRepositories().pipe(take(1)).toPromise();\n }\n }\n\n getData() {\n return this.data;\n }\n\n setData(data: OptionData) {\n this.data = this.optionsHelperService?.wrapOptionCallbacks(data) || data;\n }\n\n async refreshComponents() {\n if (this.data == null) {\n console.warn('options helper refresh called but no data previously bound');\n return;\n }\n if (this.optionsHelperService == null) {\n console.warn('optionsHelperService not provided. No default actions will be generated');\n return;\n }\n this.globalOptions = await this.getAvailableOptions(Target.Actionbar);\n await this.optionsHelperService?.refreshComponents(this.components, this.data);\n }\n\n getAvailableOptions(target: Target, objects: Node[] = null) {\n return this.optionsHelperService?.getAvailableOptions(\n target,\n objects,\n this.components,\n this.data,\n );\n }\n\n private addVirtualObjects(objects: any[]) {\n objects = objects.map((o: any) => {\n o.virtual = true;\n return o;\n });\n this.virtualNodesAdded.emit(objects);\n if (this.components?.list) {\n this.components?.list.addVirtualNodes(objects);\n }\n }\n\n registerGlobalKeyboardShortcuts() {\n this.ngZone.runOutsideAngular(() => {\n if (!this.keyboardShortcutsSubscription) {\n this.keyboardShortcutsSubscription = fromEvent(document, 'keydown')\n .pipe(takeUntil(this.destroyed))\n .subscribe((event: KeyboardEvent) => this.handleKeyboardEvent(event));\n }\n });\n }\n\n private async handleKeyboardEvent(event: KeyboardEvent) {\n if (this.globalOptions && !this.keyboardShortcutsService?.shouldIgnoreShortcut(event)) {\n for (const option of this.globalOptions) {\n if (\n option.keyboardShortcut &&\n matchesShortcutCondition(event, option.keyboardShortcut)\n ) {\n event.preventDefault();\n event.stopPropagation();\n if (await option.enabledCallback()) {\n this.ngZone.run(() => option.callback(null));\n } else {\n this.toast.error(null, 'TOAST.OPTION_DISABLED_OR_UNAVAILABLE');\n }\n break;\n }\n }\n }\n }\n filterOptions(options: OptionItem[], target: Target, objects: Node[] | any = null) {\n return (\n this.optionsHelperService?.filterOptions(options, target, this.data, objects) || options\n );\n }\n /**\n * shortcut to simply disable all options on the given compoennts\n * @param actionbar\n * @param list\n */\n clearComponents(actionbar: ActionbarComponent, list: ListEventInterface<Node> = null) {\n if (list) {\n list.setOptions(null);\n }\n if (actionbar) {\n actionbar.options = [];\n }\n }\n\n pasteNode(nodes: Node[] = []) {\n this.optionsHelperService.pasteNode(this.components, this.data, true, nodes);\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n OnDestroy,\n OnInit,\n Optional,\n ViewChild,\n} from '@angular/core';\nimport { MatPaginator, PageEvent } from '@angular/material/paginator';\nimport { ActivatedRoute } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Subject } from 'rxjs';\nimport { first, takeUntil } from 'rxjs/operators';\nimport { NodeEntriesDataType, NodeEntriesDisplayType } from './entries-model';\nimport { NodeEntriesGlobalService } from './node-entries-global.service';\nimport { NodeEntriesTemplatesService } from './node-entries-templates.service';\nimport { NodeEntriesService } from '../services/node-entries.service';\nimport { KeyboardShortcutsService } from '../services/abstract/keyboard-shortcuts.service';\nimport { NodeDataSourceRemote } from './node-data-source-remote';\n\n@Component({\n selector: 'es-node-entries',\n templateUrl: 'node-entries.component.html',\n styleUrls: ['node-entries.component.scss'],\n standalone: false,\n})\nexport class NodeEntriesComponent<T extends NodeEntriesDataType>\n implements OnInit, AfterViewInit, OnDestroy\n{\n readonly NodeEntriesDisplayType = NodeEntriesDisplayType;\n\n @ViewChild(MatPaginator) paginator: MatPaginator;\n\n private readonly destroyed = new Subject<void>();\n private readonly updateKeyboardShortcuts = new Subject<void>();\n\n constructor(\n public changeDetectorRef: ChangeDetectorRef,\n public entriesGlobalService: NodeEntriesGlobalService,\n public entriesService: NodeEntriesService<T>,\n public templatesService: NodeEntriesTemplatesService,\n @Optional() private globalKeyboardShortcuts: KeyboardShortcutsService,\n private route: ActivatedRoute,\n private translate: TranslateService,\n ) {}\n\n ngOnInit(): void {\n if (this.entriesService.primaryInstance) {\n this.registerGlobalKeyboardShortcuts();\n }\n if (this.entriesService.dataSource instanceof NodeDataSourceRemote) {\n // We don't require `sort` to be defined, but if it is set but not yet ready (`null`),\n // we wait for its value before initializing the data source, so the first request is\n // sent with the correct sort configuration. That is why we explicitly do not drop\n // `undefined` with the `first` operator below.\n this.entriesService.sortSubject\n .pipe(first((sort) => sort !== null))\n .subscribe(() =>\n this.initRemoteDataSource(\n this.entriesService.dataSource as NodeDataSourceRemote<T>,\n ),\n );\n }\n }\n\n ngAfterViewInit() {\n if (this.paginator) {\n void this.initPaginator(this.paginator);\n this.changeDetectorRef.detectChanges();\n }\n }\n\n ngOnDestroy(): void {\n this.destroyed.next();\n this.destroyed.complete();\n }\n\n private registerGlobalKeyboardShortcuts() {\n this.globalKeyboardShortcuts.register(\n [\n {\n modifiers: ['Ctrl/Cmd'],\n keyCode: 'KeyA',\n ignoreWhen: (event) =>\n // SmallGrid doesn't support selection\n this.entriesService.displayType === NodeEntriesDisplayType.SmallGrid,\n callback: () => this.entriesService.toggleSelectAll(),\n },\n ],\n { until: this.destroyed },\n );\n }\n\n private initRemoteDataSource(dataSource: NodeDataSourceRemote<T>): void {\n const pageSize = this.entriesGlobalService.getPaginatorSizeOptions(\n this.entriesService.scope,\n )[0];\n dataSource.init({\n paginationConfig: {\n defaultPageSize: pageSize,\n strategy: this.entriesService.paginationStrategy,\n },\n defaultSort: this.entriesService.sort,\n });\n if (this.entriesService.primaryInstance) {\n // Automatic query-params handling is only supported by node-data-source-remote.\n dataSource.registerQueryParameters(this.route);\n }\n }\n\n private async initPaginator(paginator: MatPaginator) {\n paginator._intl.itemsPerPageLabel = await this.translate\n .get('PAGINATOR.itemsPerPageLabel')\n .toPromise();\n paginator._intl.nextPageLabel = await this.translate\n .get('PAGINATOR.nextPageLabel')\n .toPromise();\n paginator._intl.previousPageLabel = await this.translate\n .get('PAGINATOR.previousPageLabel')\n .toPromise();\n paginator._intl.getRangeLabel = (page, pageSize, length) =>\n this.translate.instant('PAGINATOR.getRangeLabel', {\n page: page + 1,\n pageSize,\n length,\n pageCount: Math.ceil(length / pageSize),\n });\n // Connect data source.\n this.entriesService.dataSource$.pipe(takeUntil(this.destroyed)).subscribe((dataSource) => {\n if (dataSource instanceof NodeDataSourceRemote) {\n (dataSource as NodeDataSourceRemote).paginator = paginator;\n } else {\n paginator.length = dataSource?.getTotal();\n dataSource\n ?.connectPagination()\n .pipe(takeUntil(this.destroyed))\n .subscribe(() => {\n paginator.length = dataSource.getTotal();\n });\n }\n });\n }\n\n openPage(page: PageEvent) {\n this.entriesService.fetchData.emit({\n offset: page.pageIndex * page.pageSize,\n amount: page.pageSize,\n reset: true,\n });\n }\n}\n","<div class=\"top-matter\">\n <div class=\"title\">\n <ng-container *ngTemplateOutlet=\"templatesService.title\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"templatesService.entriesTopMatter\"></ng-container>\n</div>\n<ng-container *ngIf=\"entriesService.dataSource\">\n <ng-container *ngIf=\"entriesService.displayType === NodeEntriesDisplayType.Table\">\n <es-node-entries-table></es-node-entries-table>\n </ng-container>\n <ng-container\n *ngIf=\"\n entriesService.displayType === NodeEntriesDisplayType.SmallGrid ||\n entriesService.displayType === NodeEntriesDisplayType.Grid\n \"\n >\n <es-node-entries-card-grid [displayType]=\"entriesService.displayType\">\n </es-node-entries-card-grid>\n </ng-container>\n <ng-container *ngIf=\"entriesService.dataSource.isEmpty() && !entriesService.dataSource.isLoading\">\n <ng-container *ngTemplateOutlet=\"templatesService.empty\"></ng-container>\n </ng-container>\n</ng-container>\n<mat-paginator\n #paginator\n [pageSizeOptions]=\"entriesGlobalService.getPaginatorSizeOptions(entriesService.scope)\"\n *ngIf=\"entriesService.paginationStrategy === 'paginator'\"\n [class.display-none]=\"\n (entriesService.dataSource.isLoading && entriesService.dataSource.isLoading !== 'page') ||\n entriesService.dataSource.isEmpty()\n \"\n (page)=\"openPage($event)\"\n></mat-paginator>\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ComponentRef,\n ContentChild,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChange,\n TemplateRef,\n Type,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { interval, Subject } from 'rxjs';\nimport {\n debounceTime,\n distinctUntilChanged,\n filter,\n skip,\n switchMap,\n take,\n takeUntil,\n} from 'rxjs/operators';\nimport { NodeEntriesTemplatesService } from './node-entries-templates.service';\nimport { NodeEntriesComponent } from './node-entries.component';\nimport {\n FetchEvent,\n GridConfig,\n InteractionType,\n ListDragGropConfig,\n ListEventInterface,\n ListOptions,\n ListOptionsConfig,\n ListSortConfig,\n NodeClickEvent,\n NodeEntriesDataType,\n NodeEntriesDisplayType,\n TableConfig,\n} from './entries-model';\nimport { NodeDataSource } from './node-data-source';\nimport { Helper } from '../util/helper';\nimport { CustomSelectionModel, NodeEntriesService } from '../services/node-entries.service';\nimport { OptionItem, Scope } from '../types/option-item';\nimport { NodeHelperService } from '../services/node-helper.service';\nimport { ListItem } from '../types/list-item';\nimport { TemporaryStorageService } from '../services/temporary-storage.service';\nimport {\n CollectionReference,\n GenericAuthority,\n Node,\n NodeService,\n User,\n} from 'ngx-edu-sharing-api';\nimport { VirtualNode } from '../types/api-models';\nimport { OptionsHelperDataService } from '../services/options-helper-data.service';\nimport { UIService } from '../services/ui.service';\nimport { ColumnType } from '../mds/mds-helper.service';\n\n@Component({\n selector: 'es-node-entries-wrapper',\n template: `<es-node-entries\n #nodeEntriesComponent\n *ngIf=\"!customNodeListComponent\"\n ></es-node-entries>`,\n providers: [NodeEntriesService, OptionsHelperDataService, NodeEntriesTemplatesService],\n standalone: false,\n})\nexport class NodeEntriesWrapperComponent<T extends NodeEntriesDataType>\n implements AfterViewInit, OnInit, OnChanges, OnDestroy, ListEventInterface<T>\n{\n /**\n * title (above) the table/grid\n */\n @ContentChild('title') titleRef: TemplateRef<any>;\n /**\n * data shown when data source is empty\n */\n @ContentChild('empty') emptyRef: TemplateRef<any>;\n /**\n * custom area for actions only for NodeEntriesDisplayType.SmallGrid (per card at the bottom)\n */\n @ContentChild('actionArea') actionAreaRef: TemplateRef<any>;\n /**\n * custom area for an overlay \"above\" each card (i.e. to show disabled infos), only for NodeEntriesDisplayType.SmallGrid & odeEntriesDisplayType.Grid\n */\n @ContentChild('overlay') overlayRef: TemplateRef<any>;\n /**\n * custom card template for each card only for NodeEntriesDisplayType.Grid\n */\n @ContentChild('customCard') customCard: TemplateRef<any>;\n @ViewChild('nodeEntriesComponent') nodeEntriesComponentRef: NodeEntriesComponent<T>;\n @Input() dataSource: NodeDataSource<T>;\n @Input() scope: Scope;\n @Input() columns: ColumnType;\n @Input() configureColumns: boolean;\n @Input() checkbox = true;\n /**\n * emits when the user re-configures the columns\n * should be used in order to save the new configuration\n */\n @Output() columnsChange = new EventEmitter<ListItem[]>();\n @Input() globalOptions: OptionItem[];\n @Input() displayType = NodeEntriesDisplayType.Grid;\n @Output() displayTypeChange = new EventEmitter<NodeEntriesDisplayType>();\n @Input() elementInteractionType = InteractionType.DefaultActionLink;\n @Input() sort: ListSortConfig;\n @Input() dragDrop: ListDragGropConfig<T>;\n @Input() gridConfig: GridConfig;\n @Input() tableConfig: TableConfig;\n\n /**\n * This color defines the base color of gradients visually limiting a grid in scroll direction.\n * Defaults to white.\n */\n @Input() scrollGradientColor: string = '#fff';\n\n /**\n * this can be set instead of calling initOptionsGenerator()\n */\n @Input() initConfig: ListOptionsConfig;\n /**\n * Whether this node-entries instance represents the page's main content.\n *\n * Only set to true for one instance per page.\n *\n * If true, this instance will\n * - handle page-wide keyboard shortcuts\n * - take control of the `page` and `pageSize` query parameters for pagination\n */\n @Input() primaryInstance: boolean;\n /**\n * UI hints for whether a single click will cause a dynamic action.\n *\n * This does not configure the actual behavior but only UI hints to the user. Hints include\n * hover effects and a changed cursor.\n *\n * - When choosing 'static', the `clickItem` event should trigger some stationary action like\n * selecting the element or displaying information in a complementary page area. The\n * `dblClickItem` event can be used for a more disruptive action.\n * - When choosing 'dynamic', the `clickItem` event should trigger a major action like\n * navigating to a new page or closing a dialog.\n */\n // TODO: Consider controlling the ui hints and the actual behavior with a single option.\n @Input() singleClickHint: 'dynamic' | 'static' = 'dynamic';\n /**\n * Do not load more data on scroll.\n */\n @Input() disableInfiniteScroll = false;\n /**\n * show the icon column (table view only)\n */\n @Input() showIconColumn = true;\n\n @Output() fetchData = new EventEmitter<FetchEvent>();\n @Output() clickItem = new EventEmitter<NodeClickEvent<T>>();\n @Output() dblClickItem = new EventEmitter<NodeClickEvent<T>>();\n @Output() sortChange = new EventEmitter<ListSortConfig>();\n @Output() virtualNodesAdded;\n @Output() displayTypeChanged;\n\n customNodeListComponent: Type<NodeEntriesComponent<T>>;\n private componentRef: ComponentRef<NodeEntriesComponent<T>>;\n @HostBinding('attr.data-last-loading-completed') lastLoadingCompleted: number = -1;\n private options: ListOptions;\n private dataSourceDestroy$ = new Subject<void>();\n private destroyed = new Subject<void>();\n\n constructor(\n private viewContainerRef: ViewContainerRef,\n private temporaryStorageService: TemporaryStorageService,\n private ngZone: NgZone,\n private entriesService: NodeEntriesService<T>,\n private nodeService: NodeService,\n public optionsHelper: OptionsHelperDataService,\n private nodeHelperService: NodeHelperService,\n private uiService: UIService,\n // @TODO\n // private mainNav: MainNavService,\n private templatesService: NodeEntriesTemplatesService,\n private changeDetectorRef: ChangeDetectorRef,\n private elementRef: ElementRef,\n ) {\n // regulary re-bind template since it might have updated without ngChanges trigger\n /*\n ngZone.runOutsideAngular(() =>\n setInterval(() => this.componentRef.instance.emptyRef = this.emptyRef)\n );\n */\n this.virtualNodesAdded = this.optionsHelper.virtualNodesAdded;\n this.displayTypeChanged = this.optionsHelper.displayTypeChanged;\n this.entriesService.selection.changed.subscribe(() => {\n if (this.optionsHelper.getData()) {\n this.optionsHelper.getData().selectedObjects =\n this.entriesService.selection.selected;\n this.optionsHelper.getData().activeObjects = this.entriesService.selection.selected;\n } else {\n console.warn('optionsHelper is not initalized correctly; data is empty');\n }\n void this.optionsHelper.refreshComponents();\n });\n }\n\n ngOnInit(): void {\n if (this.primaryInstance) {\n this.optionsHelper.registerGlobalKeyboardShortcuts();\n }\n this.entriesService.columnsSubject\n .pipe(\n takeUntil(this.destroyed),\n filter((c) => c?.fromUser),\n )\n .subscribe((c) => this.columnsChange.emit(c.columns));\n }\n\n ngOnChanges(changes: { [key: string]: SimpleChange } = {}) {\n if (!this.componentRef) {\n this.init();\n }\n this.entriesService.list = this;\n this.entriesService.dataSource = this.dataSource;\n if (\n changes.dataSource &&\n changes.dataSource.currentValue !== changes.dataSource.previousValue\n ) {\n this.dataSourceDestroy$.next();\n this.entriesService.dataSource\n .connect()\n .pipe(distinctUntilChanged(), takeUntil(this.dataSourceDestroy$))\n .subscribe((o) => {\n if (this.optionsHelper.getData()) {\n this.optionsHelper.getData().allObjects = o;\n void this.optionsHelper.refreshComponents();\n }\n });\n this.entriesService.dataSource.isLoadingSubject\n .pipe(\n distinctUntilChanged(),\n skip(1),\n filter((l) => l === false),\n debounceTime(10),\n takeUntil(this.dataSourceDestroy$),\n )\n .subscribe(() => (this.lastLoadingCompleted = Date.now()));\n }\n this.entriesService.scope = this.scope;\n if (changes.columns || changes.displayType) {\n this.entriesService.columnsSubject.next({\n columns:\n this.columns?.[\n this.displayType === NodeEntriesDisplayType.Table ? 'Table' : 'Default'\n ] || this.columns?.Default,\n fromUser: false,\n });\n }\n this.entriesService.configureColumns = this.configureColumns;\n this.entriesService.checkbox = this.checkbox;\n this.entriesService.displayType = this.displayType;\n this.entriesService.elementInteractionType = this.elementInteractionType;\n this.entriesService.gridConfig = this.gridConfig;\n this.entriesService.tableConfig = this.tableConfig;\n this.entriesService.options = this.options;\n this.entriesService.globalOptions = this.globalOptions;\n this.entriesService.sort = this.sort;\n this.entriesService.sortChange = this.sortChange;\n this.entriesService.dragDrop = this.dragDrop;\n this.entriesService.clickItem = this.clickItem;\n this.entriesService.dblClickItem = this.dblClickItem;\n this.entriesService.fetchData = this.fetchData;\n this.entriesService.primaryInstance = this.primaryInstance;\n this.entriesService.singleClickHint = this.singleClickHint;\n this.entriesService.disableInfiniteScroll = this.disableInfiniteScroll;\n if (changes.showIconColumn) {\n this.entriesService.showIconColumn.next(this.showIconColumn);\n }\n this.entriesService.scrollGradientColor.set(this.scrollGradientColor);\n\n if (changes['initConfig']) {\n void this.initOptionsGenerator(this.initConfig);\n }\n if (this.componentRef) {\n this.componentRef.instance.changeDetectorRef?.detectChanges();\n }\n // This might need wrapping with `setTimeout`.\n this.updateTemplates();\n }\n\n ngOnDestroy(): void {\n this.dataSourceDestroy$.next();\n this.dataSourceDestroy$.complete();\n this.destroyed.next();\n this.destroyed.complete();\n }\n\n /**\n * Replaces this wrapper with the configured custom-node-list component.\n */\n private init(): void {\n this.customNodeListComponent = this.temporaryStorageService.get(\n TemporaryStorageService.CUSTOM_NODE_ENTRIES_COMPONENT,\n null,\n );\n if (this.customNodeListComponent == null) {\n return;\n }\n this.componentRef = this.uiService.injectAngularComponent(\n this.viewContainerRef,\n this.customNodeListComponent,\n this.elementRef.nativeElement,\n // Input bindings are initialized in `ngOnChanges`.\n this.getOutputBindings(),\n );\n }\n /**\n * Creates a simple map of the output bindings defined in this component.\n */\n private getOutputBindings(): { [key: string]: EventEmitter<any> } {\n const outputBindings: { [key: string]: any } = {};\n for (const key of Object.keys(this)) {\n const value = (this as any)[key];\n if (value instanceof EventEmitter) {\n outputBindings[key] = value;\n }\n }\n return outputBindings;\n }\n\n getDisplayType(): NodeEntriesDisplayType {\n return this.displayType;\n }\n\n onDisplayTypeChange() {\n return this.displayTypeChange.asObservable();\n }\n\n setDisplayType(displayType: NodeEntriesDisplayType): void {\n this.displayType = displayType;\n this.entriesService.displayType = displayType;\n this.ngOnChanges();\n this.displayTypeChange.emit(displayType);\n }\n\n updateNodes(nodes: void | T[]) {\n if (!nodes) {\n return;\n }\n this.dataSource.getData().forEach((d) => {\n let hits = (nodes as T[]).filter((n) =>\n (n as Node)?.ref\n ? (n as Node)?.ref.id === (d as Node)?.ref.id\n : (n as GenericAuthority)?.authorityName ===\n (d as GenericAuthority)?.authorityName,\n );\n if (hits.length === 0) {\n // handle if the original has changed (for collection refs)\n hits = (nodes as T[]).filter(\n (n) =>\n (n as Node)?.ref &&\n (n as Node)?.ref?.id === (d as unknown as CollectionReference)?.originalId,\n );\n }\n if (hits.length === 1) {\n this.nodeHelperService.copyDataToNode(d as Node, hits[0] as Node);\n }\n });\n // trigger rebuild\n if (this.dataSource instanceof NodeDataSource) {\n (this.dataSource as NodeDataSource<T>).refresh();\n }\n const oldSelection = this.entriesService.selection.selected;\n this.entriesService.selection.clear();\n this.entriesService.selection.select(\n ...oldSelection.map(\n (o) => this.dataSource.getData().filter((d) => Helper.objectEquals(o, d))?.[0],\n ),\n );\n this.changeDetectorRef.detectChanges();\n }\n\n showReorderColumnsDialog(): void {}\n\n addVirtualNodes(virtual: T[], options?: { select: boolean }): void {\n virtual = virtual.map((o) => {\n (o as VirtualNode).virtual = true;\n return o;\n });\n virtual.forEach((v: T) => {\n const contains = this.dataSource\n .getData()\n .some((d) =>\n (d as Node).ref\n ? (d as Node).ref?.id === (v as Node).ref?.id\n : (d as User).authorityName === (v as User).authorityName,\n );\n if (contains) {\n if ((v as VirtualNode).override !== false) {\n this.updateNodes([v]);\n }\n } else {\n this.dataSource.appendData([v], 'before');\n }\n if ((v as VirtualNode).observe) {\n interval(2000)\n .pipe(\n take(10),\n takeUntil(this.destroyed),\n switchMap(() =>\n this.nodeService.getNode((v as VirtualNode).ref.id, {\n repository: (v as VirtualNode).ref.repo,\n }),\n ),\n )\n .subscribe((node) => {\n (node as VirtualNode).virtual = true;\n this.updateNodes([node as T]);\n });\n }\n });\n if (options?.select !== false) {\n this.entriesService.selection.clear();\n this.entriesService.selection.select(...virtual);\n }\n this.virtualNodesAdded.emit(virtual as Node[]);\n this.changeDetectorRef.detectChanges();\n }\n\n setOptions(options: ListOptions): void {\n this.options = options;\n this.ngOnChanges();\n }\n\n selectAll() {\n this.entriesService.selection.select(...this.entriesService.dataSource.getData());\n }\n getSelection(): CustomSelectionModel<T> {\n return this.entriesService.selection;\n }\n\n async initOptionsGenerator(config: ListOptionsConfig) {\n await this.optionsHelper.initComponents(config.actionbar, this);\n this.optionsHelper.setData({\n scope: this.entriesService.scope,\n activeObjects: this.entriesService.selection.selected,\n selectedObjects: this.entriesService.selection.selected,\n allObjects: this.dataSource.getData(),\n parent: config.parent,\n customOptions: config.customOptions,\n });\n void this.optionsHelper.refreshComponents();\n }\n\n ngAfterViewInit(): void {\n // Prevent changed-after-checked error\n void Promise.resolve().then(() => this.updateTemplates());\n }\n\n private updateTemplates(): void {\n this.templatesService.title = this.titleRef;\n this.templatesService.empty = this.emptyRef;\n this.templatesService.actionArea = this.actionAreaRef;\n this.templatesService.overlay = this.overlayRef;\n this.templatesService.customCard = this.customCard;\n }\n\n /**\n * reset the pagination to the first page\n * hint: this will do nothing in case the paginationStrategy !== Pagination\n */\n resetPagination() {\n this.nodeEntriesComponentRef?.paginator?.firstPage();\n }\n\n deleteNodes(objects: T[]): void {\n this.dataSource.removeData(objects);\n this.getSelection().clear();\n }\n}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatRippleModule } from '@angular/material/core';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatSortModule } from '@angular/material/sort';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { EduSharingUiCommonModule } from '../common/edu-sharing-ui-common.module';\nimport { NodesDragSourceDirective } from '../directives/drag-nodes/nodes-drag-source.directive';\nimport { NodesDragDirective } from '../directives/drag-nodes/nodes-drag.directive';\nimport { NodesDropTargetDirective } from '../directives/drag-nodes/nodes-drop-target.directive';\nimport { ListItemsModule } from '../list-items/list-items.module';\nimport { DragPreviewComponent } from './drag-preview/drag-preview.component';\nimport { ListItemLabelPipe } from './list-item-label.pipe';\nimport { NodeEntriesCardGridComponent } from './node-entries-card-grid/node-entries-card-grid.component';\nimport { NodeEntriesCardSmallComponent } from './node-entries-card-small/node-entries-card-small.component';\nimport { NodeEntriesCardComponent } from './node-entries-card/node-entries-card.component';\nimport { NodeEntriesGlobalOptionsComponent } from './node-entries-global-options/node-entries-global-options.component';\nimport { ColumnChooserComponent } from './node-entries-table/column-chooser/column-chooser.component';\nimport { NodeEntriesTableComponent } from './node-entries-table/node-entries-table.component';\nimport { NodeEntriesWrapperComponent } from './node-entries-wrapper.component';\nimport { NodeEntriesComponent } from './node-entries.component';\nimport { NodeRatingComponent } from './node-rating/node-rating.component';\nimport { NodeStatsBadgesComponent } from './node-stats-badges/node-stats-badges.component';\nimport { NodeTypeBadgeComponent } from './node-type-badge/node-type-badge.component';\nimport { OptionButtonComponent } from './option-button/option-button.component';\nimport { PreviewImageComponent } from './preview-image/preview-image.component';\nimport { SortSelectPanelComponent } from './sort-select-panel/sort-select-panel.component';\n\n@NgModule({\n declarations: [\n ColumnChooserComponent,\n DragPreviewComponent,\n ListItemLabelPipe,\n NodeEntriesCardComponent,\n NodeEntriesCardGridComponent,\n NodeEntriesCardSmallComponent,\n NodeEntriesTableComponent,\n NodeRatingComponent,\n PreviewImageComponent,\n NodeEntriesComponent,\n NodeEntriesWrapperComponent,\n NodeRatingComponent,\n NodeTypeBadgeComponent,\n OptionButtonComponent,\n PreviewImageComponent,\n SortSelectPanelComponent,\n NodesDragDirective,\n NodesDragSourceDirective,\n NodesDropTargetDirective,\n NodeEntriesGlobalOptionsComponent,\n NodeStatsBadgesComponent,\n ],\n imports: [\n CommonModule,\n FormsModule,\n A11yModule,\n OverlayModule,\n DragDropModule,\n EduSharingUiCommonModule,\n ListItemsModule,\n MatCheckboxModule,\n MatButtonModule,\n MatBadgeModule,\n MatMenuModule,\n MatTableModule,\n MatCheckboxModule,\n MatPaginatorModule,\n MatRippleModule,\n MatSlideToggleModule,\n MatSortModule,\n MatTooltipModule,\n TranslateModule,\n ],\n exports: [\n ListItemLabelPipe,\n NodeEntriesWrapperComponent,\n NodeRatingComponent,\n NodesDragDirective,\n NodesDragSourceDirective,\n NodesDropTargetDirective,\n NodeStatsBadgesComponent,\n NodeTypeBadgeComponent,\n ],\n})\nexport class NodeEntriesModule {}\n","import { ModuleWithProviders, NgModule, Provider } from '@angular/core';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { CommonModule } from '@angular/common';\nimport { EduSharingUiConfigurationParams, getConfigProvider } from './edu-sharing-ui-configuration';\nimport { ListItemsModule } from './list-items/list-items.module';\nimport { NodeEntriesModule } from './node-entries/node-entries.module';\nimport { EduSharingUiCommonModule } from './common/edu-sharing-ui-common.module';\nimport { NodeImageSizePipe } from './pipes/node-image-size.pipe';\nimport { FormatDatePipe } from './pipes/format-date.pipe';\nimport { ListItemLabelPipe } from './node-entries/list-item-label.pipe';\nimport { SortDropdownComponent } from './sort-dropdown/sort-dropdown.component';\nimport { MdsModule } from './mds/mds.module';\nimport { I18N_CONFIG } from '../public-api';\n\n@NgModule({\n declarations: [],\n imports: [\n CommonModule,\n TranslateModule,\n EduSharingUiCommonModule,\n ListItemsModule,\n NodeEntriesModule,\n // Loading the TranslationsModule here causes errors for lazy-loaded pages like the search\n // page. For usage outside the context of edu-sharing, we probably need to import the\n // TranslationsModule at the main module that packages or uses this library.\n ],\n exports: [\n CommonModule,\n MdsModule,\n MatTooltipModule,\n TranslateModule,\n EduSharingUiCommonModule,\n ListItemsModule,\n NodeEntriesModule,\n NodeImageSizePipe,\n FormatDatePipe,\n ListItemsModule,\n ListItemLabelPipe,\n SortDropdownComponent,\n ],\n})\nexport class EduSharingUiModule {\n public static forRoot(\n config: EduSharingUiConfigurationParams,\n providers: Provider[] = [],\n ): ModuleWithProviders<EduSharingUiModule> {\n return {\n ngModule: EduSharingUiModule,\n providers: [getConfigProvider(config), ...providers],\n };\n }\n}\n","import { Observable, of } from 'rxjs';\nimport { NodeDataSource } from './node-data-source';\nimport { Node, GenericAuthority } from 'ngx-edu-sharing-api';\n\n/**\n * data source which joins multiple underlying data sources\n * used for the \"all\" search\n */\nexport class CombinedDataSource<T extends Node | GenericAuthority> extends NodeDataSource<T> {\n constructor(private dataSources: NodeDataSource<T>[]) {\n super();\n }\n\n connect(): Observable<T[]> {\n // @TODO: Using a forkJoin and real connect would be better\n return of(this.getData());\n /*\n return forkJoin(this.dataSources.map(ds => ds.connect())).pipe(\n switchMap(d => d)\n ) as Observable<T[]>;\n */\n }\n\n disconnect() {}\n hasMore() {\n return this.dataSources.filter((ds) => ds.hasMore()).length > 0;\n }\n\n getData() {\n return [].concat.apply(\n [],\n this.dataSources.map((ds) => ds.getData()),\n );\n }\n\n isEmpty(): boolean {\n return this.getData()?.length === 0;\n }\n\n getTotal() {\n return this.dataSources.map((ds) => ds.getTotal()).reduce((a, b) => a + b);\n }\n\n isFullyLoaded() {\n return this.getTotal() <= this.getData()?.length;\n }\n\n getDatasource(position: number) {\n return this.dataSources[position];\n }\n}\n","import { notNull } from '../util/functions';\n\nexport interface NodeCacheRange {\n startIndex: number;\n endIndex: number;\n}\n\nexport interface NodeCacheSlice<T> extends NodeCacheRange {\n data: readonly T[];\n}\n\nexport class NodeCache<T> {\n private _slices: readonly NodeCacheSlice<T>[] = [];\n\n add(slice: NodeCacheSlice<T>): void {\n if (slice.endIndex - slice.startIndex !== slice.data.length) {\n throw new Error('Tried to add invalid slice to cache: ' + JSON.stringify(slice));\n }\n this._slices = this._normalizeSlices([...this._slices, slice]);\n }\n\n clear() {\n this._slices = [];\n }\n\n get(range: NodeCacheRange): T[] | null {\n for (const slice of this._slices) {\n if (slice.startIndex <= range.startIndex && slice.endIndex >= range.endIndex) {\n return slice.data.slice(\n range.startIndex - slice.startIndex,\n range.endIndex - slice.startIndex,\n );\n }\n }\n // for the first request\n console.warn(\n 'Requested range was not found in the slices cache, falling back to a smaller slice (the backend resolved too less data)',\n range,\n this._slices,\n );\n for (const slice of this._slices) {\n if (slice.startIndex <= range.startIndex && slice.endIndex >= range.startIndex) {\n return slice.data.slice(\n range.startIndex - slice.startIndex,\n range.endIndex - slice.startIndex,\n );\n }\n }\n console.error('Could not find any slice for the range', range, this._slices);\n return null;\n }\n\n getMissingRange(requestedRange: NodeCacheRange): NodeCacheRange | null {\n let fromIndex = requestedRange.startIndex;\n let toIndex = requestedRange.endIndex;\n for (const slice of this._slices) {\n if (slice.startIndex <= fromIndex && slice.endIndex > fromIndex) {\n fromIndex = slice.endIndex;\n } else if (slice.startIndex < toIndex && slice.endIndex >= toIndex) {\n toIndex = slice.startIndex;\n }\n if (fromIndex >= toIndex) {\n return null;\n }\n }\n return { startIndex: fromIndex, endIndex: toIndex };\n }\n\n private _normalizeSlices(slices: NodeCacheSlice<T>[]): NodeCacheSlice<T>[] {\n slices.sort((lhs, rhs) => lhs.startIndex - rhs.startIndex);\n for (let i = 0; i < slices.length - 1; i++) {\n for (let j = i + 1; j < slices.length; j++) {\n if (this._canMerge(slices[i], slices[j])) {\n slices[i] = this._merge(slices[i], slices[j]);\n slices[j] = null; // Mark for deletion\n }\n }\n }\n return slices.filter(notNull);\n }\n\n private _canMerge(lhs: NodeCacheSlice<T>, rhs: NodeCacheSlice<T>): boolean {\n if (!lhs || !rhs) {\n return false;\n }\n return lhs.endIndex >= rhs.startIndex;\n }\n\n private _merge(lhs: NodeCacheSlice<T>, rhs: NodeCacheSlice<T>): NodeCacheSlice<T> {\n return {\n startIndex: lhs.startIndex,\n endIndex: rhs.endIndex,\n data: [...lhs.data, ...rhs.data.slice(lhs.endIndex - rhs.startIndex)],\n };\n }\n}\n","import { Injectable, Injector, Optional } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport { RenderDataRequestWithToken, RSApiConfiguration } from 'ngx-rendering-service-api';\nimport {\n AboutService,\n HOME_REPOSITORY,\n Node,\n NodeServiceUnwrapped,\n RestConstants,\n UserService,\n} from 'ngx-edu-sharing-api';\nimport { EduSharingUiConfiguration } from '../edu-sharing-ui-configuration';\nimport { OptionsHelperDataService } from './options-helper-data.service';\nimport { Scope } from '../types/option-item';\n\nexport type CombinedRenderData = {\n node: Node;\n request?: RenderDataRequestWithToken;\n error?: string;\n};\n@Injectable({ providedIn: 'root' })\nexport class RenderHelperService {\n constructor(\n private injector: Injector,\n private aboutService: AboutService,\n private nodeApiUnwrapped: NodeServiceUnwrapped,\n private configuration: EduSharingUiConfiguration,\n private userService: UserService,\n @Optional() private optionsHelperDataService: OptionsHelperDataService,\n ) {}\n\n async getRenderData(\n nodeId: string,\n version: string = null,\n repository = HOME_REPOSITORY,\n ): Promise<CombinedRenderData> {\n const about = await firstValueFrom(this.aboutService.getAbout());\n const securedNode = await firstValueFrom(\n this.nodeApiUnwrapped.getMetadataSigned({\n repository: repository || HOME_REPOSITORY,\n node: nodeId,\n version: version || RestConstants.NODE_VERSION_CURRENT,\n }),\n );\n const node = securedNode.node;\n const user = await firstValueFrom(this.userService.observeCurrentUserInfo());\n console.info(this.injector.get(OptionsHelperDataService));\n this.optionsHelperDataService?.setData({\n scope: Scope.Render,\n activeObjects: [node],\n parent: {\n ref: {\n id: node.parent.id,\n },\n },\n customOptions: {\n useDefaultOptions: true,\n },\n postPrepareOptions: (options, objects) => {\n if (version && version !== RestConstants.NODE_VERSION_CURRENT) {\n options.filter((o) => o.name === 'OPTIONS.OPEN')[0].isEnabled = false;\n }\n },\n });\n await this.optionsHelperDataService?.refreshComponents();\n if (!about.renderingService2) {\n console.error('no rendering service 2 url was configured. Will not continue.');\n return {\n node,\n error: 'RENDERING.ERROR.RS2_NOT_CONFIGURED',\n };\n }\n console.info(about.renderingService2?.url);\n this.prepareRootUrl();\n console.info(this.injector.get(RSApiConfiguration));\n const token = securedNode.jwt;\n console.info(token, node);\n const request = {\n nodeId: node.ref.id,\n repoId: node.ref.repo,\n securedNode: securedNode.signedNode,\n signature: securedNode.signature,\n token: token,\n userData: {\n authorityName: user.user.person.authorityName,\n firstName: user.user.person.profile.firstName,\n surName: user.user.person.profile.lastName,\n userEMail: user.user.person.profile.email,\n },\n } as RenderDataRequestWithToken;\n\n return {\n node,\n request,\n };\n }\n\n async getRenderDataForLms(\n encodedNode: string,\n signature: string,\n jwt: string,\n renderUrl: string,\n encodedUser: string,\n ): Promise<CombinedRenderData> {\n this.injector.get(RSApiConfiguration).rootUrl = renderUrl;\n const decodedNodeString = atob(encodedNode);\n const node = JSON.parse(decodedNodeString) as Node;\n const userData = JSON.parse(atob(encodedUser));\n const request = {\n nodeId: node.ref.id,\n repoId: node.ref.repo,\n securedNode: encodedNode,\n signature: signature,\n token: jwt,\n userData: {\n authorityName: userData.authorityName ?? '',\n firstName: userData.firstName ?? '',\n surName: userData.lastName ?? '',\n userEMail: userData.email ?? '',\n },\n } as RenderDataRequestWithToken;\n\n return {\n node,\n request,\n };\n }\n\n async prepareRootUrl() {\n const about = await firstValueFrom(this.aboutService.getAbout());\n if (this.configuration.production) {\n this.injector.get(RSApiConfiguration).rootUrl = about.renderingService2.url.replace(\n /\\/$/g,\n '',\n );\n } else {\n console.info('dev mode active, routing rendering to proxy');\n this.injector.get(RSApiConfiguration).rootUrl = '/rendering2';\n }\n console.info(this.injector.get(RSApiConfiguration));\n }\n}\n","import { MissingTranslationHandler, MissingTranslationHandlerParams } from '@ngx-translate/core';\n\nexport class FallbackTranslationHandler implements MissingTranslationHandler {\n handle(params: MissingTranslationHandlerParams) {\n return (params.interpolateParams as any)?.fallback ?? params.key;\n }\n}\n","/** The preferred source for language files. */\nexport enum TranslationSource {\n /** In dev mode, local files are used and in production, repository files are used (default). */\n Auto,\n /** Local files (assets/i18n) are used. */\n Local,\n /** Repository files are used. */\n Repository,\n}\n","import { HttpClient } from '@angular/common/http';\nimport { TranslateLoader } from '@ngx-translate/core';\nimport { ConfigService, LANGUAGES } from 'ngx-edu-sharing-api';\nimport * as rxjs from 'rxjs';\nimport { concat, forkJoin, Observable, of } from 'rxjs';\nimport { catchError, filter, first, map, reduce, switchMap } from 'rxjs/operators';\nimport { EduSharingUiConfiguration } from '../edu-sharing-ui-configuration';\nimport { TranslationSource } from './translation-source';\nimport { Inject, Optional } from '@angular/core';\nimport { I18N_CONFIG, I18nConfig } from '../types/injection-tokens';\n\nexport const TRANSLATION_LIST = [\n 'common',\n 'admin',\n 'recycle',\n 'workspace',\n 'search',\n 'collections',\n 'login',\n 'permissions',\n 'oer',\n 'messages',\n 'register',\n 'profiles',\n 'services',\n 'stream',\n 'override',\n];\n\ntype Dictionary = { [key: string]: string | Dictionary };\n\nexport class TranslationLoader implements TranslateLoader {\n static create(\n http: HttpClient,\n configService: ConfigService,\n configuration: EduSharingUiConfiguration,\n @Inject(I18N_CONFIG) i18nConfig: I18nConfig,\n ) {\n return new TranslationLoader(http, configService, configuration, i18nConfig);\n }\n\n private constructor(\n private http: HttpClient,\n private configService: ConfigService,\n private configuration: EduSharingUiConfiguration,\n @Optional() @Inject(I18N_CONFIG) private i18nConfig: I18nConfig,\n private prefix: string = (configuration.assetsBasePath ?? '') + 'assets/i18n',\n private suffix: string = '.json',\n ) {}\n\n // If you need to configure this, define an injectable configuration object. See\n // https://angular.io/guide/dependency-injection-providers#injecting-a-configuration-object.\n private readonly source: TranslationSource = TranslationSource.Auto;\n\n /**\n * Gets the translations from the server\n */\n getTranslation(lang: string): Observable<Dictionary> {\n if (lang === 'none') {\n this.configService.setLocale(LANGUAGES[lang], lang);\n return of({});\n }\n // backend can not handle sub-languages\n const langBackend = lang.startsWith('de-') ? 'de' : lang;\n if (!LANGUAGES[langBackend]) {\n console.error('unknown locale for language ' + lang + ' / ' + langBackend);\n }\n this.configService.setLocale(LANGUAGES[langBackend], lang);\n return rxjs\n .forkJoin({\n originalTranslations: this.getOriginalTranslations(lang).pipe(\n // Default to empty dictionary if we got nothing\n map((translations) => translations || {}),\n ),\n translationOverrides: this.configService\n .observeTranslationOverrides()\n .pipe(first()),\n })\n .pipe(\n map(({ originalTranslations, translationOverrides }) => {\n // FIXME: This will alter the object returned by `getOriginalTranslations`.\n return this.applyOverrides(originalTranslations, translationOverrides);\n }),\n switchMap((translations) => {\n if (!this.i18nConfig?.additionalI18nProvider) {\n return of(translations);\n }\n const files = this.i18nConfig.additionalI18nProvider(lang);\n console.info('additional i18n provided', files);\n return forkJoin(\n files.map((f) => this.http.get(f) as Observable<Dictionary>),\n ).pipe(\n map((value) => {\n for (let dictionary of value) {\n translations = this.overrideWithObject(translations, dictionary);\n }\n return translations;\n }),\n catchError((e) => {\n console.error('Error loading custom languages', e);\n return of(translations);\n }),\n );\n }),\n map((translations) => this.replaceGenderCharacter(translations)),\n catchError((error, obs) => {\n console.error(error);\n return of(error);\n }),\n );\n }\n\n private getOriginalTranslations(lang: string): Observable<Dictionary> {\n switch (this.getSource()) {\n case 'repository':\n return this.configService.observeDefaultTranslations().pipe(\n filter((arg) => !arg?.locale || arg.language === lang),\n switchMap((arg) => arg?.dict?.pipe(first()) || of(null)),\n first(),\n );\n case 'local':\n return this.mergeTranslations(this.fetchTranslations(lang));\n }\n }\n\n private getSource(): 'repository' | 'local' {\n if (\n (this.configuration.production && this.source === TranslationSource.Auto) ||\n this.source === TranslationSource.Repository\n ) {\n return 'repository';\n } else {\n return 'local';\n }\n }\n\n /**\n * Returns an array of Observables that will each fetch a translations json\n * file.\n */\n private fetchTranslations(lang: string): Observable<Dictionary>[] {\n return TRANSLATION_LIST.map(\n (translation) => `${this.prefix}/${translation}/${lang}${this.suffix}`,\n )\n .map((url) => this.http.get(url) as Observable<Dictionary>)\n .map((obs) =>\n obs.pipe(\n catchError((e) => {\n console.warn(\n 'missing translation file for language ' +\n lang +\n ', translations will be missing / falling back to the default language',\n );\n return of({});\n }),\n ),\n );\n }\n\n /**\n * Takes an array as returned by `fetchTranslations` and converts it to an\n * Observable that yields a single Dictionary object.\n */\n private mergeTranslations(translations: Observable<Dictionary>[]): Observable<Dictionary> {\n return concat(...translations).pipe(\n reduce((acc: Dictionary, value: Dictionary) => {\n for (const prop in value) {\n if (value.hasOwnProperty(prop)) {\n acc[prop] = value[prop];\n }\n }\n return acc;\n }, {}),\n );\n }\n\n /**\n * Applies `overrides` to `translations` and returns `translations`.\n *\n * Example:\n * translations = { foo: { bar: 'bar' } }\n * overrides = { 'foo.bar': 'baz' }\n * results in\n * translations = { foo: {bar: 'baz' } }\n *\n * @param translations Nested translations object.\n * @param overrides Flat object with dots (.) in keys interpreted as\n * separators.\n */\n private applyOverrides(\n translations: Dictionary,\n overrides: { [key: string]: string },\n ): Dictionary {\n if (overrides) {\n for (const [key, value] of Object.entries<string>(overrides)) {\n let ref = translations;\n const path = key.split('.');\n const pathLast = path.pop();\n for (const item of path) {\n if (!ref[item]) {\n ref[item] = {};\n }\n const refItem = ref[item];\n if (typeof refItem === 'string') {\n throw new Error('Trying to override leave with sub tree: ' + path);\n }\n ref = refItem;\n }\n ref[pathLast] = value;\n }\n }\n return translations;\n }\n\n private replaceGenderCharacter(translations: Dictionary, path: string[] = []) {\n for (let key of Object.keys(translations)) {\n if (typeof translations[key] === 'string') {\n // DO NOT REMOVE (required for csv language dumping)\n /*console.log(CsvHelper.fromArray(null, [[\n path.concat(key).join('.'), translations[key]\n ]]));*/\n translations[key] = (translations[key] as string).replace(\n /{{GENDER_SEPARATOR}}/g,\n '*',\n );\n } else {\n translations[key] = this.replaceGenderCharacter(\n translations[key] as Dictionary,\n path.concat(key),\n );\n }\n }\n\n return translations;\n }\n\n private overrideWithObject(source: Dictionary, override: Dictionary) {\n if (!source) {\n source = {};\n }\n for (let key of Object.keys(override)) {\n if (typeof override[key] === 'object') {\n source[key] = this.overrideWithObject(\n source[key] as Dictionary,\n override[key] as Dictionary,\n );\n } else {\n source[key] = override[key];\n }\n }\n return source;\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';\nimport { MissingTranslationHandler, TranslateLoader, TranslateModule } from '@ngx-translate/core';\nimport { ConfigService } from 'ngx-edu-sharing-api';\nimport { EduSharingUiConfiguration } from '../edu-sharing-ui-configuration';\nimport { FallbackTranslationHandler } from './fallback-translation-handler';\nimport { TranslationLoader } from './translation-loader';\nimport { I18N_CONFIG } from '../types/injection-tokens';\n\n/**\n * Import this module once in the app module to provide the `TranslateService`.\n *\n * Export `TranslateModule` in the shared module to provide directives and pipes.\n */\n@NgModule({\n declarations: [],\n imports: [\n TranslateModule.forRoot({\n loader: {\n provide: TranslateLoader,\n useFactory: TranslationLoader.create,\n deps: [\n HttpClient,\n ConfigService,\n EduSharingUiConfiguration,\n [new Optional(), I18N_CONFIG],\n ],\n },\n missingTranslationHandler: {\n provide: MissingTranslationHandler,\n useClass: FallbackTranslationHandler,\n },\n }),\n ],\n})\nexport class TranslationsModule {\n static forRoot(): ModuleWithProviders<TranslationsModule> {\n return {\n ngModule: TranslationsModule,\n providers: [],\n };\n }\n\n constructor(@Optional() @SkipSelf() parentModule?: TranslationsModule) {\n if (parentModule) {\n console.warn(\n 'TranslationsModule is already loaded. Import it in the AppModule only',\n parentModule,\n );\n /*throw new Error(\n 'TranslationsModule is already loaded. Import it in the AppModule only',\n );*/\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { MdsHelperService } from '../mds/mds-helper.service';\nimport { MdsService, MdsWidget } from 'ngx-edu-sharing-api';\n\nexport type Values = { [p: string]: string[] };\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SearchHelperService {\n static readonly MAX_QUERY_CONCAT_PARAMS = 400;\n\n constructor() {}\n\n /**\n * converts given filter criteria and converts them for a body to be used for a search request\n * @param properties\n * @param mdsWidgets\n * @param unfoldTrees\n */\n convertCritieria(properties: Values, mdsWidgets: MdsWidget[], unfoldTrees = true) {\n const criteria: {\n property: string;\n values: string[];\n }[] = [];\n // deep copy\n properties = JSON.parse(JSON.stringify(properties));\n for (const property in properties) {\n let widget = MdsHelperService.getWidget(property, undefined, mdsWidgets);\n if (widget && widget.type == 'multivalueTree' && unfoldTrees) {\n let attach = MdsService.unfoldTreeChilds(properties[property], widget);\n if (attach) {\n if (attach.length > SearchHelperService.MAX_QUERY_CONCAT_PARAMS) {\n console.info(\n 'param ' +\n property +\n ' has too many unfold childs (' +\n attach.length +\n '), falling back to basic prefix-based search',\n );\n } else {\n properties[property] = properties[property].concat(attach);\n }\n }\n }\n if (properties[property]?.length && properties[property].every((p) => p != null && !!p))\n criteria.push({\n property: property,\n values: properties[property],\n });\n }\n return criteria;\n }\n}\n","/*\n * Public API Surface of edu-sharing-ui\n */\n\nexport * from './mds-viewer/mds-viewer.component';\nexport * from './mds-viewer/mds-viewer.service';\nexport * from './mds-viewer/widget/mds-widget.component';\nexport * from './actionbar/actionbar.component';\nexport * from './common/edu-sharing-ui-common.module';\nexport * from './mds/mds.module';\nexport * from './mds-viewer/view-instance.service';\nexport * from './directives/border-box-observer.directive';\nexport * from './directives/check-text-overflow.directive';\nexport * from './directives/drag-nodes/drag-nodes';\nexport * from './directives/drag-nodes/nodes-drag-source.directive';\nexport * from './directives/drag-nodes/nodes-drag.directive';\nexport * from './directives/drag-nodes/nodes-drop-target.directive';\nexport * from './directives/focus-state.directive';\nexport * from './directives/icon.directive';\nexport * from './directives/infinite-scroll.directive';\nexport * from './dropdown/dropdown.component';\nexport * from './edu-sharing-ui-configuration';\nexport * from './edu-sharing-ui.module';\nexport * from './list-items/format-duration.pipe';\nexport * from './list-items/list-base/list-base.component';\nexport * from './list-items/list-counts/list-counts.component';\nexport * from './list-items/list-items.module';\nexport * from './list-items/list-text/list-text.component';\nexport * from './list-items/node-row/node-row.component';\nexport * from './node-entries/combined-data-source';\nexport * from './node-entries/custom-templates-data-source';\nexport * from './node-entries/entries-model';\nexport * from './node-entries/items-cap';\nexport * from './node-entries/list-item-label.pipe';\nexport * from './node-entries/node-cache';\nexport * from './node-entries/node-rating/node-rating.component';\nexport * from './node-entries/node-type-badge/node-type-badge.component';\nexport * from './node-entries/node-stats-badges/node-stats-badges.component';\nexport * from './node-entries/node-data-source';\nexport * from './node-entries/node-data-source-remote';\nexport * from './node-entries/node-entries-global.service';\nexport * from './node-entries/node-entries-wrapper.component';\nexport * from './node-entries/node-entries.module';\nexport * from './mds-viewer/mds-viewer.component';\nexport * from './mds-viewer/replace-element-with-div';\nexport * from './node-url/node-url.component';\nexport * from './pipes/property-slug.pipe';\nexport * from './pipes/file-size.pipe';\nexport * from './pipes/format-date.pipe';\nexport * from './pipes/mds-duration.pipe';\nexport * from './pipes/node-icon.pipe';\nexport * from './pipes/node-image-size.pipe';\nexport * from './pipes/node-image.pipe';\nexport * from './pipes/node-license.pipe';\nexport * from './pipes/node-person-name.pipe';\nexport * from './pipes/node-title.pipe';\nexport * from './pipes/vcard-name.pipe';\nexport * from './services/abstract/app.service';\nexport * from './services/abstract/keyboard-shortcuts.service';\nexport * from './services/abstract/options-helper.service';\nexport * from './services/abstract/toast.service';\nexport * from './services/accessibility.service';\nexport * from './services/app-container.service';\nexport * from './services/local-events.service';\nexport * from './services/node-helper.service';\nexport * from './services/node-entries.service';\nexport * from './services/nodes-drag-drop.service';\nexport * from './services/options-helper-data.service';\nexport * from './services/repo-url.service';\nexport * from './services/temporary-storage.service';\nexport * from './services/ui.service';\nexport * from './services/render-helper.service';\nexport * from './sort-dropdown/sort-dropdown.component';\nexport * from './spinner/spinner.component';\nexport * from './spinner-small/spinner-small.component';\nexport * from './translations/fallback-translation-handler';\nexport * from './translations/translation-loader';\nexport * from './translations/translations.module';\nexport * from './translations/translations.service';\nexport * from './types/api-models';\nexport * from './types/accessibillity';\nexport * from './types/drag-drop';\nexport * from './types/injection-tokens';\nexport * from './types/keyboard-shortcuts';\nexport * from './types/list-item';\nexport * from './types/option-item';\nexport * from './types/workflow';\nexport * from './util/DateHelper';\nexport * from './util/VCard';\nexport * from './util/color-helper';\nexport * from './util/duration-helper';\nexport * from './util/functions';\nexport * from './util/helper';\nexport * from './util/isNumeric';\nexport * from './util/rest-helper';\nexport * from './util/ui-animation';\nexport * from './util/ui-constants';\nexport * from './mds/mds-helper.service';\nexport * from './services/search-helper.service';\nexport * from './mds-viewer/mds-editor-instance-service.abstract';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2.EduSharingUiConfiguration","Workflow.WORKFLOW_STATUS_UNCHECKED","Workflow.WORKFLOW_STATUS_TO_CHECK","Workflow.WORKFLOW_STATUS_HASFLAWS","Workflow.WORKFLOW_STATUS_CHECKED","i3.EduSharingUiConfiguration","i4.RepoUrlService","combineLatest","i2","i3","i1.MdsEditorInstanceServiceAbstract","i3.UIService","i4.ViewInstanceService","i5.MdsViewerService","i6.NodeHelperService","i7","i9","i10.IconDirective","i11.MdsDurationPipe","i12.VCardNamePipe","i2.MdsViewerService","i5","i6.SpinnerSmallComponent","i7.IconDirective","isArray","i1.UIService","i4","i5.IconDirective","i6","i7.OptionTooltipPipe","i8.ReplaceCharsPipe","i7.DropdownComponent","i8.IconDirective","i9.PropertySlugPipe","i10.OptionTooltipPipe","i11.ReplaceCharsPipe","i1.AppContainerService","i1.NodeHelperService","i1.RepoUrlService","i3.RepoUrlService","i3.IconDirective","i1.Toast","i2.UIService","i2.NodesDragDropService","i1.NodesDragDropService","i1.AccessibilityService","i2.NodeHelperService","i4.IconDirective","i2.NodeSourcePipe","Constants","i4.CheckTextOverflowDirective","i6.ListNodeWorkflowComponent","i7.FormatDatePipe","i8.FormatSizePipe","i9.NodeImageSizePipe","i10.NodePersonNamePipe","i11.NodeTitlePipe","i13","i14.NodeSourcePipe","i15.FormatDurationPipe","i1.NodeEntriesGlobalService","i3.ListCollectionInfoComponent","i4.ListNodeLicenseComponent","i5.ListNodeReplicationSourceComponent","i7.ListTextComponent","i8.ListCountsComponent","i3.ListTextComponent","i4.NodeIconPipe","i2.ListTextComponent","observableOf","i4.AppService","delay","i2.TranslationsService","i4.SortDropdownComponent","i8","i2.Toast","i3.NodeEntriesGlobalService","i6.ListItemLabelPipe","i2.NodeImagePipe","i2.NodeEntriesGlobalService","i3.NodeEntriesService","i7.NodeIconPipe","i1.IconDirective","i1.NodeEntriesService","i4.NodeEntriesTemplatesService","i5.NodeEntriesGlobalService","i6.Toast","i8.FocusStateDirective","i9.IconDirective","i10.NodeUrlComponent","i11.ListBaseComponent","i12","i14","i15","i16.NodeRatingComponent","i17.PreviewImageComponent","i18.NodeTypeBadgeComponent","i19.OptionButtonComponent","i20.NodeStatsBadgesComponent","i21.PropertySlugPipe","i22.NodeTitlePipe","i23","i24.ListItemLabelPipe","i3.NodeEntriesTemplatesService","i5.FocusStateDirective","i6.IconDirective","i7.NodeUrlComponent","i8.ListBaseComponent","i9.PreviewImageComponent","i4.NodeHelperService","i5.UIService","i9.BorderBoxObserverDirective","i10.DropdownComponent","i11.IconDirective","i12.InfiniteScrollDirective","i13.SpinnerComponent","i16","i17.ColumnChooserComponent","i18.NodeEntriesCardComponent","i19.NodeEntriesCardSmallComponent","i20.SortSelectPanelComponent","i21.NodesDragDirective","i22.NodesDropTargetDirective","i23.NodeEntriesGlobalOptionsComponent","i24","i3.Toast","i5.TranslationsService","i7.UIService","i11","i13.CheckTextOverflowDirective","i14.DropdownComponent","i15.IconDirective","i16.InfiniteScrollDirective","i17.NodeUrlComponent","i18.SpinnerComponent","i19.ListBaseComponent","i20","i21","i22","i26","i27.ColumnChooserComponent","i28.DragPreviewComponent","i29.NodeTypeBadgeComponent","i30.SortSelectPanelComponent","i31.NodesDragDirective","i32.NodesDropTargetDirective","i33.NodeEntriesGlobalOptionsComponent","i34.NodeTitlePipe","i35","i36.ListItemLabelPipe","i2.LocalEventsService","i4.Toast","i5.KeyboardShortcutsService","i6.OptionsHelperService","i2.NodeEntriesService","i4.KeyboardShortcutsService","i9.NodeEntriesCardGridComponent","i10.NodeEntriesTableComponent","i1.TemporaryStorageService","i4.OptionsHelperDataService","i5.NodeHelperService","i6.UIService","i7.NodeEntriesTemplatesService","i9.NodeEntriesComponent","i3.OptionsHelperDataService"],"mappings":"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"}