@koobiq/components 20.1.0 → 20.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (249) hide show
  1. package/accordion/_accordion-theme.scss +6 -2
  2. package/accordion/accordion-tokens.scss +3 -0
  3. package/accordion/{accordion-trigger.component.scss → accordion-trigger.scss} +10 -0
  4. package/accordion/accordion.scss +71 -0
  5. package/accordion/index.d.ts +264 -121
  6. package/actions-panel/index.d.ts +25 -13
  7. package/alert/_alert-theme.scss +14 -0
  8. package/alert/alert.component.scss +24 -13
  9. package/alert/index.d.ts +63 -29
  10. package/app-switcher/app-switcher-dropdown-app.scss +7 -5
  11. package/app-switcher/app-switcher-dropdown-site.scss +6 -4
  12. package/app-switcher/index.d.ts +41 -4
  13. package/app-switcher/kbq-app-switcher-list-item.scss +6 -8
  14. package/autocomplete/autocomplete.scss +2 -1
  15. package/autocomplete/index.d.ts +58 -37
  16. package/badge/index.d.ts +2 -3
  17. package/breadcrumbs/index.d.ts +1 -1
  18. package/button/index.d.ts +2 -2
  19. package/button-toggle/button-toggle-tokens.scss +2 -0
  20. package/button-toggle/button-toggle.scss +9 -0
  21. package/button-toggle/index.d.ts +5 -0
  22. package/checkbox/index.d.ts +33 -29
  23. package/clamped-text/index.d.ts +3 -2
  24. package/code-block/index.d.ts +24 -19
  25. package/content-panel/index.d.ts +1 -1
  26. package/core/index.d.ts +1217 -186
  27. package/core/option/_action-container-mixins.scss +28 -0
  28. package/core/option/_option-theme.scss +24 -0
  29. package/core/option/action.scss +7 -0
  30. package/core/styles/_core.scss +2 -0
  31. package/core/styles/_koobiq-theme.scss +2 -0
  32. package/core/styles/_tokens.scss +1 -0
  33. package/core/styles/common/_animation.scss +31 -24
  34. package/core/styles/common/_connected-overlay.scss +39 -0
  35. package/core/styles/common/_select.scss +19 -2
  36. package/core/styles/common/_tokens.scss +0 -9
  37. package/core/styles/theming/_index.scss +0 -1
  38. package/core/styles/theming/_theming.scss +34 -5
  39. package/datepicker/index.d.ts +46 -15
  40. package/dl/dl.scss +26 -0
  41. package/dl/index.d.ts +8 -1
  42. package/dropdown/_dropdown-theme.scss +28 -2
  43. package/dropdown/dropdown-item.scss +29 -0
  44. package/dropdown/dropdown-tokens.scss +2 -1
  45. package/dropdown/dropdown.scss +16 -1
  46. package/dropdown/index.d.ts +331 -17
  47. package/dynamic-translation/index.d.ts +1 -1
  48. package/fesm2022/koobiq-components-accordion.mjs +480 -317
  49. package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
  50. package/fesm2022/koobiq-components-actions-panel.mjs +57 -46
  51. package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -1
  52. package/fesm2022/koobiq-components-alert.mjs +98 -58
  53. package/fesm2022/koobiq-components-alert.mjs.map +1 -1
  54. package/fesm2022/koobiq-components-app-switcher.mjs +233 -38
  55. package/fesm2022/koobiq-components-app-switcher.mjs.map +1 -1
  56. package/fesm2022/koobiq-components-autocomplete.mjs +89 -52
  57. package/fesm2022/koobiq-components-autocomplete.mjs.map +1 -1
  58. package/fesm2022/koobiq-components-badge.mjs +18 -17
  59. package/fesm2022/koobiq-components-badge.mjs.map +1 -1
  60. package/fesm2022/koobiq-components-breadcrumbs.mjs +25 -25
  61. package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
  62. package/fesm2022/koobiq-components-button-toggle.mjs +17 -12
  63. package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
  64. package/fesm2022/koobiq-components-button.mjs +25 -25
  65. package/fesm2022/koobiq-components-checkbox.mjs +69 -92
  66. package/fesm2022/koobiq-components-checkbox.mjs.map +1 -1
  67. package/fesm2022/koobiq-components-clamped-text.mjs +18 -13
  68. package/fesm2022/koobiq-components-clamped-text.mjs.map +1 -1
  69. package/fesm2022/koobiq-components-code-block.mjs +56 -69
  70. package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
  71. package/fesm2022/koobiq-components-content-panel.mjs +29 -29
  72. package/fesm2022/koobiq-components-core.mjs +2485 -735
  73. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  74. package/fesm2022/koobiq-components-datepicker.mjs +168 -126
  75. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  76. package/fesm2022/koobiq-components-divider.mjs +7 -7
  77. package/fesm2022/koobiq-components-dl.mjs +23 -15
  78. package/fesm2022/koobiq-components-dl.mjs.map +1 -1
  79. package/fesm2022/koobiq-components-dropdown.mjs +814 -136
  80. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  81. package/fesm2022/koobiq-components-dynamic-translation.mjs +13 -13
  82. package/fesm2022/koobiq-components-ellipsis-center.mjs +7 -7
  83. package/fesm2022/koobiq-components-empty-state.mjs +19 -19
  84. package/fesm2022/koobiq-components-file-upload.mjs +74 -42
  85. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  86. package/fesm2022/koobiq-components-filter-bar.mjs +783 -199
  87. package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
  88. package/fesm2022/koobiq-components-flag.mjs +7 -7
  89. package/fesm2022/koobiq-components-form-field.mjs +350 -162
  90. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  91. package/fesm2022/koobiq-components-icon.mjs +52 -25
  92. package/fesm2022/koobiq-components-icon.mjs.map +1 -1
  93. package/fesm2022/koobiq-components-inline-edit.mjs +175 -28
  94. package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
  95. package/fesm2022/koobiq-components-input.mjs +41 -24
  96. package/fesm2022/koobiq-components-input.mjs.map +1 -1
  97. package/fesm2022/koobiq-components-link.mjs +8 -8
  98. package/fesm2022/koobiq-components-list.mjs +657 -143
  99. package/fesm2022/koobiq-components-list.mjs.map +1 -1
  100. package/fesm2022/koobiq-components-loader-overlay.mjs +16 -16
  101. package/fesm2022/koobiq-components-markdown.mjs +14 -11
  102. package/fesm2022/koobiq-components-markdown.mjs.map +1 -1
  103. package/fesm2022/koobiq-components-modal.mjs +59 -35
  104. package/fesm2022/koobiq-components-modal.mjs.map +1 -1
  105. package/fesm2022/koobiq-components-navbar.mjs +177 -67
  106. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  107. package/fesm2022/koobiq-components-notification-center.mjs +40 -24
  108. package/fesm2022/koobiq-components-notification-center.mjs.map +1 -1
  109. package/fesm2022/koobiq-components-overflow-items.mjs +16 -17
  110. package/fesm2022/koobiq-components-overflow-items.mjs.map +1 -1
  111. package/fesm2022/koobiq-components-popover.mjs +31 -21
  112. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  113. package/fesm2022/koobiq-components-progress-bar.mjs +13 -13
  114. package/fesm2022/koobiq-components-progress-spinner.mjs +13 -13
  115. package/fesm2022/koobiq-components-radio.mjs +10 -10
  116. package/fesm2022/koobiq-components-resizer.mjs +33 -14
  117. package/fesm2022/koobiq-components-resizer.mjs.map +1 -1
  118. package/fesm2022/koobiq-components-scrollbar.mjs +10 -10
  119. package/fesm2022/koobiq-components-search-expandable.mjs +49 -14
  120. package/fesm2022/koobiq-components-search-expandable.mjs.map +1 -1
  121. package/fesm2022/koobiq-components-select.mjs +450 -146
  122. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  123. package/fesm2022/koobiq-components-sidebar.mjs +14 -14
  124. package/fesm2022/koobiq-components-sidepanel.mjs +26 -26
  125. package/fesm2022/koobiq-components-skeleton.mjs +10 -10
  126. package/fesm2022/koobiq-components-split-button.mjs +10 -17
  127. package/fesm2022/koobiq-components-split-button.mjs.map +1 -1
  128. package/fesm2022/koobiq-components-splitter.mjs +17 -17
  129. package/fesm2022/koobiq-components-table.mjs +15 -13
  130. package/fesm2022/koobiq-components-table.mjs.map +1 -1
  131. package/fesm2022/koobiq-components-tabs.mjs +80 -68
  132. package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
  133. package/fesm2022/koobiq-components-tags.mjs +283 -122
  134. package/fesm2022/koobiq-components-tags.mjs.map +1 -1
  135. package/fesm2022/koobiq-components-textarea.mjs +13 -8
  136. package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
  137. package/fesm2022/koobiq-components-time-range.mjs +29 -24
  138. package/fesm2022/koobiq-components-time-range.mjs.map +1 -1
  139. package/fesm2022/koobiq-components-timepicker.mjs +61 -30
  140. package/fesm2022/koobiq-components-timepicker.mjs.map +1 -1
  141. package/fesm2022/koobiq-components-timezone.mjs +77 -42
  142. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  143. package/fesm2022/koobiq-components-title.mjs +7 -7
  144. package/fesm2022/koobiq-components-toast.mjs +51 -26
  145. package/fesm2022/koobiq-components-toast.mjs.map +1 -1
  146. package/fesm2022/koobiq-components-toggle.mjs +72 -64
  147. package/fesm2022/koobiq-components-toggle.mjs.map +1 -1
  148. package/fesm2022/koobiq-components-tooltip.mjs +219 -28
  149. package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
  150. package/fesm2022/koobiq-components-top-bar.mjs +13 -13
  151. package/fesm2022/koobiq-components-tree-select.mjs +222 -80
  152. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  153. package/fesm2022/koobiq-components-tree.mjs +302 -81
  154. package/fesm2022/koobiq-components-tree.mjs.map +1 -1
  155. package/fesm2022/koobiq-components-username.mjs +27 -27
  156. package/file-upload/index.d.ts +25 -6
  157. package/file-upload/multiple-file-upload.component.scss +14 -0
  158. package/filter-bar/_filter-bar-theme.scss +0 -10
  159. package/filter-bar/filter-bar-tokens.scss +3 -0
  160. package/filter-bar/filters.scss +3 -2
  161. package/filter-bar/index.d.ts +281 -9
  162. package/filter-bar/pipes/base-pipe.scss +0 -11
  163. package/filter-bar/pipes/pipe-input.scss +10 -0
  164. package/filter-bar/pipes/pipe-multi-tree-select.scss +0 -6
  165. package/filter-bar/pipes/pipe-multiselect.scss +0 -6
  166. package/filter-bar/pipes/pipe-tree-select.scss +0 -6
  167. package/form-field/_form-field-theme.scss +76 -20
  168. package/form-field/fieldset.scss +10 -0
  169. package/form-field/form-field-tokens.scss +15 -1
  170. package/form-field/form-field.scss +15 -19
  171. package/form-field/index.d.ts +147 -65
  172. package/icon/icon-button.scss +3 -1
  173. package/icon/index.d.ts +45 -7
  174. package/inline-edit/index.d.ts +57 -4
  175. package/inline-edit/inline-edit.scss +10 -0
  176. package/input/index.d.ts +17 -2
  177. package/list/_list-theme.scss +42 -10
  178. package/list/index.d.ts +326 -79
  179. package/list/list-tokens.scss +43 -8
  180. package/list/list.scss +186 -12
  181. package/markdown/index.d.ts +1 -1
  182. package/modal/index.d.ts +21 -4
  183. package/modal/modal-tokens.scss +1 -1
  184. package/navbar/_navbar-item_vertical.scss +7 -5
  185. package/navbar/index.d.ts +54 -5
  186. package/navbar/navbar-brand.scss +23 -7
  187. package/navbar/vertical-navbar.scss +6 -0
  188. package/notification-center/index.d.ts +2 -1
  189. package/notification-center/notification-item.scss +6 -0
  190. package/package.json +3 -6
  191. package/popover/index.d.ts +2 -2
  192. package/prebuilt-themes/dark-theme.css +1 -1
  193. package/prebuilt-themes/light-theme.css +1 -1
  194. package/prebuilt-themes/theme.css +1 -1
  195. package/resizer/index.d.ts +12 -0
  196. package/schematics/collection.json +10 -0
  197. package/schematics/migrations/alert-signals/README.md +64 -0
  198. package/schematics/migrations/alert-signals/data.js +70 -0
  199. package/schematics/migrations/alert-signals/index.js +350 -0
  200. package/schematics/migrations/alert-signals/schema.json +20 -0
  201. package/schematics/migrations/autocomplete-panel-width-auto/README.md +68 -0
  202. package/schematics/migrations/autocomplete-panel-width-auto/index.js +70 -0
  203. package/schematics/migrations/autocomplete-panel-width-auto/schema.json +15 -0
  204. package/schematics/migrations/deprecated-icons/README.md +29 -4
  205. package/schematics/migrations/deprecated-icons/data.js +7 -0
  206. package/schematics/migrations/deprecated-icons/index.js +62 -35
  207. package/schematics/migrations/filter-bar-signals/README.md +1 -1
  208. package/schematics/migrations/new-icons-pack/README.md +37 -2
  209. package/schematics/migrations/new-icons-pack/data.js +8 -0
  210. package/schematics/migrations/new-icons-pack/index.js +144 -53
  211. package/schematics/migrations.json +11 -1
  212. package/schematics/ng-add/index.js +3 -3
  213. package/schematics/utils/angular-parsing.js +41 -14
  214. package/schematics/utils/ast.js +31 -0
  215. package/schematics/utils/icon-migration.js +530 -0
  216. package/schematics/utils/typescript.js +44 -0
  217. package/scrollbar/index.d.ts +1 -1
  218. package/search-expandable/index.d.ts +3 -0
  219. package/select/index.d.ts +212 -40
  220. package/select/select-tokens.scss +0 -1
  221. package/select/select.scss +0 -2
  222. package/splitter/index.d.ts +1 -1
  223. package/table/_table-theme.scss +4 -0
  224. package/table/index.d.ts +2 -1
  225. package/table/table.scss +8 -0
  226. package/tabs/_tabs-common.scss +60 -31
  227. package/tabs/_tabs-theme.scss +12 -0
  228. package/tabs/index.d.ts +2 -2
  229. package/tabs/tab-header.scss +14 -0
  230. package/tabs/tab-nav-bar.scss +4 -0
  231. package/tabs/tabs-tokens.scss +1 -0
  232. package/tags/index.d.ts +128 -29
  233. package/textarea/index.d.ts +5 -0
  234. package/time-range/index.d.ts +1 -1
  235. package/timepicker/index.d.ts +4 -0
  236. package/timezone/index.d.ts +10 -8
  237. package/toast/index.d.ts +26 -3
  238. package/toggle/index.d.ts +34 -14
  239. package/tooltip/index.d.ts +119 -7
  240. package/tree/_tree-theme.scss +25 -5
  241. package/tree/index.d.ts +71 -3
  242. package/tree/tree-option.scss +2 -8
  243. package/tree-select/_tree-select-theme.scss +22 -0
  244. package/tree-select/index.d.ts +127 -36
  245. package/accordion/accordion.component.scss +0 -50
  246. package/core/styles/_tokens.kbq.import.scss +0 -4
  247. package/core/styles/theming/_components-theming.scss +0 -1927
  248. package/filter-bar/pipes/pipe-select.scss +0 -5
  249. package/overflow-items/overflow-items.scss +0 -20
@@ -1 +1 @@
1
- {"version":3,"file":"koobiq-components-select.mjs","sources":["../../../packages/components/select/select-common.ts","../../../packages/components/select/select-option.directive.ts","../../../packages/components/select/select.component.ts","../../../packages/components/select/select.html","../../../packages/components/select/select.module.ts","../../../packages/components/select/koobiq-components-select.ts"],"sourcesContent":["import { booleanAttribute, ChangeDetectionStrategy, Component, Directive, input } from '@angular/core';\nimport { KbqProgressSpinnerModule } from '@koobiq/components/progress-spinner';\n\n@Component({\n selector: 'kbq-select-loading, [kbq-select-loading]',\n imports: [\n KbqProgressSpinnerModule\n ],\n template: `\n <ng-content select=\"kbq-progress-spinner\">\n <div class=\"layout-row layout-margin-top-4xl layout-margin-bottom-4xl layout-align-center-center\">\n <kbq-progress-spinner [mode]=\"'indeterminate'\" />\n </div>\n </ng-content>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'kbq-select-loading'\n },\n exportAs: 'kbqSelectLoading'\n})\nexport class KbqSelectLoading {}\n\n/**\n * This component renders the error for a Select component.\n * The error message can be displayed in two visual variants: a default centered layout (when [paging] is falsy)\n * or a variant with left‑aligned text suitable for pagination controls (when [paging] is truthy).\n */\n@Component({\n selector: 'kbq-select-error, [kbq-select-error]',\n template: `\n <ng-content />\n `,\n styles: `\n :host {\n display: flex;\n flex-direction: column;\n\n &.kbq-select-error_default {\n align-items: center;\n justify-content: center;\n\n margin-bottom: var(--kbq-size-3xl);\n margin-top: var(--kbq-size-3xl);\n }\n\n &.kbq-select-error_paging {\n justify-content: start;\n\n & ::ng-deep.kbq-select-error__text {\n padding-left: var(--kbq-size-l);\n }\n }\n }\n\n ::ng-deep .kbq-select-error__text {\n margin-top: var(--kbq-size-xs);\n margin-bottom: var(--kbq-size-3xs);\n color: var(--kbq-foreground-error);\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'kbq-select-error',\n '[class.kbq-select-error_default]': '!paging()',\n '[class.kbq-select-error_paging]': 'paging()'\n },\n exportAs: 'kbqSelectError'\n})\nexport class KbqSelectError {\n /** Indicates whether styles for pagination controls should be used. */\n paging = input(false, { transform: booleanAttribute });\n}\n\n/**\n * Marks an element as the error text container for a *KbqSelect* component.\n */\n@Directive({\n selector: '[kbq-select-error-text]',\n host: {\n class: 'kbq-select-error__text'\n },\n exportAs: 'kbqSelectErrorText'\n})\nexport class KbqSelectErrorText {}\n\n/**\n * Component that represents the empty state of a select dropdown.\n */\n@Component({\n selector: 'kbq-select-no-options, [kbq-select-no-options]',\n template: `\n <ng-content />\n `,\n styles: `\n :host {\n display: flex;\n flex-direction: column;\n\n align-items: center;\n justify-content: center;\n\n padding-bottom: var(--kbq-size-3xl);\n padding-top: var(--kbq-size-3xl);\n\n color: var(--kbq-foreground-contrast-secondary);\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'kbq-select-no-options'\n },\n exportAs: 'kbqSelectNoOptions'\n})\nexport class KbqSelectNoOptions {}\n","import { ContentObserver } from '@angular/cdk/observers';\nimport { SharedResizeObserver } from '@angular/cdk/observers/private';\nimport { Platform } from '@angular/cdk/platform';\nimport { AfterViewInit, Directive, inject, OnDestroy } from '@angular/core';\nimport { KbqOption } from '@koobiq/components/core';\nimport { KbqTooltipTrigger } from '@koobiq/components/tooltip';\nimport { Subscription, throttleTime } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\n@Directive({\n selector: 'kbq-option',\n host: {\n '(mouseenter)': 'handleElementEnter()',\n '(mouseleave)': 'handleElementLeave()'\n }\n})\nexport class KbqOptionTooltip extends KbqTooltipTrigger implements AfterViewInit, OnDestroy {\n private readonly option = inject(KbqOption);\n private readonly resizeObserver = inject(SharedResizeObserver);\n private readonly contentObserver = inject(ContentObserver);\n private readonly isBrowser = inject(Platform).isBrowser;\n\n private readonly debounceInterval = 100;\n\n private resizeSubscription = Subscription.EMPTY;\n private contentObserverSubscription = Subscription.EMPTY;\n private focusMonitorSubscription = Subscription.EMPTY;\n\n get textElement(): HTMLElement {\n return this.option.textElement.nativeElement;\n }\n\n get isOverflown(): boolean {\n if (!this.isBrowser) return false;\n\n return this.textElement.clientWidth < this.textElement.scrollWidth;\n }\n\n constructor() {\n super();\n }\n\n ngAfterViewInit() {\n super.ngAfterViewInit();\n\n this.content = this.option.viewValue;\n this.disabled = !this.isOverflown;\n\n this.resizeSubscription = this.resizeObserver\n .observe(this.textElement)\n .pipe(debounceTime(this.debounceInterval))\n .subscribe(() => (this.disabled = !this.isOverflown));\n\n this.contentObserverSubscription = this.contentObserver\n .observe(this.textElement)\n .pipe(throttleTime(this.debounceInterval))\n .subscribe(() => {\n this.disabled = !this.isOverflown;\n this.content = this.option.viewValue;\n });\n\n this.focusMonitorSubscription = this.focusMonitor\n .monitor(this.elementRef)\n .subscribe((origin) => (origin === 'keyboard' ? this.handleElementEnter() : this.handleElementLeave()));\n }\n\n ngOnDestroy() {\n this.resizeSubscription.unsubscribe();\n this.contentObserverSubscription.unsubscribe();\n this.focusMonitorSubscription.unsubscribe();\n\n super.ngOnDestroy();\n }\n\n handleElementEnter() {\n this.disabled = !this.isOverflown;\n }\n\n handleElementLeave() {\n this.disabled = true;\n }\n}\n","import { CdkMonitorFocus } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { CdkConnectedOverlay, CdkOverlayOrigin, ConnectedPosition, OverlayContainer } from '@angular/cdk/overlay';\nimport { Platform } from '@angular/cdk/platform';\nimport { CdkVirtualForOf, CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n DestroyRef,\n DoCheck,\n ElementRef,\n EventEmitter,\n InjectionToken,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Output,\n Provider,\n QueryList,\n Renderer2,\n TemplateRef,\n ViewChild,\n ViewChildren,\n ViewEncapsulation,\n afterNextRender,\n booleanAttribute,\n contentChild,\n contentChildren,\n inject,\n input,\n isDevMode,\n numberAttribute,\n output,\n viewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, FormGroupDirective, NgControl, NgForm, UntypedFormControl } from '@angular/forms';\nimport {\n ActiveDescendantKeyManager,\n BACKSPACE,\n CanUpdateErrorState,\n DELETE,\n DOWN_ARROW,\n END,\n ENTER,\n ESCAPE,\n ErrorStateMatcher,\n HOME,\n KBQ_LOCALE_SERVICE,\n KBQ_OPTION_PARENT_COMPONENT,\n KBQ_PARENT_POPUP,\n KBQ_SELECT_SCROLL_STRATEGY,\n KBQ_WINDOW,\n KbqAbstractSelect,\n KbqComponentColors,\n KbqLocaleService,\n KbqOptgroup,\n KbqOption,\n KbqOptionBase,\n KbqOptionSelectionChange,\n KbqSelectAllEvent,\n KbqSelectFooter,\n KbqSelectMatcher,\n KbqSelectSearch,\n KbqSelectSearchEmptyResult,\n KbqSelectTrigger,\n KbqVirtualOption,\n LEFT_ARROW,\n PAGE_DOWN,\n PAGE_UP,\n RIGHT_ARROW,\n SPACE,\n TAB,\n UP_ARROW,\n defaultOffsetY,\n getKbqSelectDynamicMultipleError,\n getKbqSelectNonArrayValueError,\n getKbqSelectNonFunctionValueError,\n isInput,\n isSelectAll,\n isUndefined,\n kbqSelectAnimations,\n shouldSelectSearchText,\n toggleSelectAll\n} from '@koobiq/components/core';\nimport { KbqCleaner, KbqFormField, KbqFormFieldControl } from '@koobiq/components/form-field';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqTag } from '@koobiq/components/tags';\nimport { SizeXxs as SelectSizeMultipleContentGap } from '@koobiq/design-tokens';\nimport { BehaviorSubject, EMPTY, Observable, Subject, Subscription, defer, fromEvent, merge } from 'rxjs';\nimport {\n auditTime,\n debounceTime,\n delay,\n distinctUntilChanged,\n filter,\n map,\n startWith,\n switchMap,\n take,\n takeUntil\n} from 'rxjs/operators';\n\nlet nextUniqueId = 0;\n\nconst SCROLLED_TO_BOTTOM_THROTTLE_TIME = 100;\n\n/** Change event object that is emitted when the select value has changed. */\nexport class KbqSelectChange {\n constructor(\n public source: KbqSelect,\n public value: any\n ) {}\n}\n\n/** Select panel width type. */\nexport type KbqSelectPanelWidth = 'auto' | number | null;\n\n/** Options for the `kbq-select` that can be configured using the `KBQ_SELECT_OPTIONS` injection token. */\nexport type KbqSelectOptions = Partial<{\n /**\n * Width of the panel. If set to `auto`, the panel will match the trigger width.\n * If set to null or an empty string, the panel will grow to match the longest option's text.\n */\n panelWidth: KbqSelectPanelWidth;\n /**\n * Minimum width of the panel. If minWidth is larger than window width or property set to null, it will be ignored.\n */\n panelMinWidth: Exclude<KbqSelectPanelWidth, 'auto'>;\n /**\n * Whether to enable hiding search by default if options is less than minimum.\n *\n * - `'auto'` uses `KBQ_SELECT_SEARCH_MIN_OPTIONS_THRESHOLD` as min value.\n * - number - will enables search hiding and uses value as min.\n * @see KBQ_SELECT_SEARCH_MIN_OPTIONS_THRESHOLD\n */\n searchMinOptionsThreshold: 'auto' | number;\n}>;\n\n/** Injection token that can be used to provide the default options for the `kbq-select`. */\nexport const KBQ_SELECT_OPTIONS = new InjectionToken<KbqSelectOptions>('KBQ_SELECT_OPTIONS');\n\n/** Utility provider for `KBQ_SELECT_OPTIONS`. */\nexport const kbqSelectOptionsProvider = (options: KbqSelectOptions): Provider => {\n return {\n provide: KBQ_SELECT_OPTIONS,\n useValue: options\n };\n};\n\n/** Delay in milliseconds before displaying a result when there are no options. */\nexport const delayBeforeDisplayingResultWithoutOptions = 101;\n/** Minimum time in milliseconds to display the loading state. */\nexport const minimumTimeToDisplayLoading = 300;\n\n@Component({\n selector: 'kbq-select',\n imports: [\n CdkOverlayOrigin,\n KbqTag,\n NgTemplateOutlet,\n CdkMonitorFocus,\n CdkConnectedOverlay,\n KbqIconModule\n ],\n templateUrl: 'select.html',\n styleUrls: ['./select.scss', './select-tokens.scss'],\n providers: [\n { provide: KbqFormFieldControl, useExisting: KbqSelect },\n { provide: KBQ_OPTION_PARENT_COMPONENT, useExisting: KbqSelect },\n { provide: KBQ_PARENT_POPUP, useExisting: KbqSelect }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[attr.tabindex]': 'tabIndex',\n '[attr.disabled]': 'disabled || null',\n class: 'kbq-select',\n '[class.kbq-select_multiple]': 'multiple',\n '[class.kbq-select_multiline]': 'multiline()',\n '[class.kbq-disabled]': 'disabled',\n '[class.kbq-invalid]': 'errorState',\n '(click)': 'toggle()',\n '(keydown)': 'handleKeydown($event)',\n '(focus)': 'onFocus()',\n '(blur)': 'onBlur()'\n },\n animations: [\n kbqSelectAnimations.transformPanel,\n kbqSelectAnimations.fadeInContent\n ],\n exportAs: 'kbqSelect'\n})\nexport class KbqSelect\n extends KbqAbstractSelect\n implements\n AfterContentInit,\n OnDestroy,\n OnInit,\n DoCheck,\n ControlValueAccessor,\n KbqFormFieldControl<any>,\n CanUpdateErrorState\n{\n private readonly _changeDetectorRef = inject(ChangeDetectorRef);\n private readonly _ngZone = inject(NgZone);\n private readonly _renderer = inject(Renderer2);\n defaultErrorStateMatcher = inject(ErrorStateMatcher);\n elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private overlayContainer = inject(OverlayContainer);\n private readonly _dir = inject(Directionality, { optional: true });\n parentForm = inject(NgForm, { optional: true });\n parentFormGroup = inject(FormGroupDirective, { optional: true });\n private readonly parentFormField = inject(KbqFormField, { host: true, optional: true })!;\n ngControl = inject(NgControl, { self: true, optional: true });\n private readonly scrollStrategyFactory = inject(KBQ_SELECT_SCROLL_STRATEGY);\n protected localeService? = inject<KbqLocaleService>(KBQ_LOCALE_SERVICE, { optional: true });\n /** @docs-private */\n protected readonly destroyRef = inject(DestroyRef);\n\n protected readonly isBrowser = inject(Platform).isBrowser;\n\n protected readonly defaultOptions = inject(KBQ_SELECT_OPTIONS, { optional: true });\n private readonly window = inject(KBQ_WINDOW);\n\n /** Whether the component is in an error state. */\n errorState: boolean = false;\n /**\n * Emits whenever the component state changes and should cause the parent\n * form-field to update. Implemented as part of `KbqFormFieldControl`.\n * @docs-private\n */\n readonly stateChanges = new Subject<void>();\n\n /** A name for this control that can be used by `kbq-form-field`. */\n controlType = 'select';\n\n hiddenItems: number = 0;\n\n /** The last measured value for the trigger's client bounding rect. */\n triggerRect: DOMRect;\n\n /** The cached font-size of the trigger element in pixels. */\n triggerFontSize = 0;\n\n /** Deals with the selection logic. Manages selected options and their states. */\n selectionModel: SelectionModel<KbqOptionBase>;\n\n /** Previously selected options before the current selection was made. */\n previousSelectionModelSelected: KbqOptionBase[] = [];\n\n /** Manages keyboard events for options in the panel. */\n keyManager: ActiveDescendantKeyManager<KbqOption>;\n\n /** The value of the select panel's transform-origin property for animations. */\n transformOrigin: string = 'top';\n\n /** Emits when the panel element is finished transforming in. */\n panelDoneAnimatingStream = new Subject<string>();\n\n /** Strategy that will be used to handle scrolling while the select panel is open. */\n scrollStrategy = this.scrollStrategyFactory();\n\n /**\n * The y-offset of the overlay panel in relation to the trigger's top start corner.\n * This must be adjusted to align the selected option text over the trigger text\n * when the panel opens. Will change based on the y-position of the selected option.\n */\n offsetY = defaultOffsetY;\n\n /**\n * This position config ensures that the top \"start\" corner of the overlay\n * is aligned with the top \"start\" of the origin by default (overlapping\n * the trigger completely). If the panel cannot fit below the trigger, it\n * will fall back to a position above the trigger.\n */\n positions: ConnectedPosition[] = [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: this.offsetY\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -this.offsetY\n }\n ];\n\n /**\n * Trigger - is a clickable field to open select dropdown panel\n */\n readonly trigger = viewChild<ElementRef>('trigger');\n\n /** Reference to the overlay panel element. */\n readonly panel = viewChild<ElementRef>('panel');\n\n /** Reference to the container element that holds the options. */\n readonly optionsContainer = viewChild.required<ElementRef>('optionsContainer');\n\n /** Reference to the CDK connected overlay directive. */\n @ViewChild(CdkConnectedOverlay, { static: false }) overlayDir: CdkConnectedOverlay;\n\n /** Reference to the optional footer element in the panel. */\n readonly footer = contentChild(KbqSelectFooter, { read: ElementRef });\n\n /** Reference to the CDK virtual scroll directive for virtual scrolling support. */\n readonly cdkVirtualForOf = contentChild(CdkVirtualForOf);\n\n /** Reference to the CDK virtual scroll viewport for tracking scroll position in virtual mode. */\n readonly virtualScrollViewport = contentChild(CdkVirtualScrollViewport);\n\n /** Query list of tags displayed in multiple selection mode. */\n @ViewChildren(KbqTag) tags: QueryList<KbqTag>;\n\n /** User-supplied override of the trigger element for custom rendering. */\n readonly customTrigger = contentChild(KbqSelectTrigger);\n\n /** User-supplied matcher component for custom value matching logic. */\n readonly customMatcher = contentChild(KbqSelectMatcher);\n\n /** Custom template reference for rendering tag content. */\n readonly customTagTemplateRef = contentChild('kbqSelectTagContent', { read: TemplateRef });\n\n /** Reference to the optional cleaner element for clearing selection. */\n readonly cleaner = contentChild<KbqCleaner>('kbqSelectCleaner');\n\n /** All of the defined select options. */\n @ContentChildren(KbqOption, { descendants: true }) options: QueryList<KbqOption>;\n\n /** All of the defined groups of options. */\n readonly optionGroups = contentChildren(KbqOptgroup);\n\n /** Reference to the optional search component. */\n readonly search = contentChild(KbqSelectSearch);\n\n /** Reference to the optional empty search result component. */\n readonly searchEmpty = contentChild(KbqSelectSearchEmptyResult);\n\n /** Template string for hidden items text. Supports {{ number }} placeholder. */\n // TODO: Skipped for migration because:\n // Your application code writes to the input. This prevents migration.\n @Input() hiddenItemsText: string = '+{{ number }}';\n\n /** Determines whether preselected values are displayed. */\n readonly showPreselectedValues = input<boolean>(false);\n\n /**\n * Specifies the maximum number of trigger values allowed.\n * This constant limits the size of the trigger values array to ensure performance\n * and prevent excessive memory usage.\n * A value of `0` indicates that there is no limit.\n */\n readonly triggerValuesLimit = input<number>(0);\n\n /** Classes to be passed to the select panel. Supports the same syntax as the `[class]` binding. */\n readonly panelClass = input<\n | string\n | string[]\n | Set<string>\n | {\n [key: string]: any;\n }\n >(undefined!);\n\n /** Classes to be passed to the overlay backdrop. */\n readonly backdropClass = input<string>('cdk-overlay-transparent-backdrop');\n\n /** Object used to control when error messages are shown. */\n // TODO: Skipped for migration because:\n // This input overrides a field from a superclass, while the superclass field\n // is not migrated.\n @Input() errorStateMatcher: ErrorStateMatcher;\n\n /**\n * Function used to sort the values in a select in multiple mode.\n * Follows the same logic as `Array.prototype.sort`.\n */\n readonly sortComparator = input<(a: KbqOptionBase, b: KbqOptionBase, options: KbqOptionBase[]) => number>(\n undefined!\n );\n\n /**\n * Whether to use a multiline matcher or not. Default is false.\n * When true, allows multiple lines of text in the selected value display.\n */\n readonly multiline = input<boolean, unknown>(false, { transform: booleanAttribute });\n /**\n * Controls when the search functionality is displayed based on the number of available options.\n *\n * Automatically enables search hiding if value provided, even if `defaultOptions.searchMinOptionsThreshold` is provided.\n * @default undefined\n */\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input()\n set searchMinOptionsThreshold(value: 'auto' | number | undefined) {\n this._searchMinOptionsThreshold =\n this.resolveSearchMinOptionsThreshold(value) ??\n this.resolveSearchMinOptionsThreshold(this.defaultOptions?.searchMinOptionsThreshold);\n }\n\n get searchMinOptionsThreshold(): number | undefined {\n return this._searchMinOptionsThreshold;\n }\n\n private _searchMinOptionsThreshold = this.resolveSearchMinOptionsThreshold(\n this.defaultOptions?.searchMinOptionsThreshold\n );\n\n /** Combined stream of all of the child options' change events. */\n readonly optionSelectionChanges: Observable<KbqOptionSelectionChange> = defer(() => {\n if (this.options) {\n return merge(\n ...this.options.map((option) => option.onSelectionChange),\n this.options.changes.pipe(\n switchMap((list: QueryList<KbqOption>) =>\n list.length ? merge(...list.map((option) => option.onSelectionChange)) : EMPTY\n )\n ),\n this.selectionModel.changed.pipe(\n startWith(null as any),\n switchMap(() => {\n const optionsSet = new Set(this.options.toArray());\n const virtualSelected = this.selectionModel.selected.filter(\n (option) => !optionsSet.has(option as KbqOption)\n );\n\n return virtualSelected.length\n ? merge(...virtualSelected.map((option) => option.onSelectionChange))\n : EMPTY;\n })\n )\n );\n }\n\n return this._ngZone.onStable.asObservable().pipe(\n take(1),\n switchMap(() => this.optionSelectionChanges)\n );\n }) as Observable<KbqOptionSelectionChange>;\n\n /** Event emitted when the select panel has been toggled. Emits true when opened, false when closed. */\n @Output() readonly openedChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /** Event emitted before the select panel starts opening. */\n readonly beforeOpened = output<void>();\n\n /** Event emitted when the select has been opened. */\n @Output('opened') readonly openedStream: Observable<void> = this.openedChange.pipe(\n filter((o) => o),\n map(() => {})\n );\n\n /** Event emitted when the select has been closed. */\n @Output('closed') readonly closedStream: Observable<void> = this.openedChange.pipe(\n filter((o) => !o),\n map(() => {})\n );\n\n /** Event emitted when the selected value has been changed by the user. */\n readonly selectionChange = output<KbqSelectChange>();\n\n /**\n * Event emitted when all options are selected or deselected via the Ctrl/Cmd + A shortcut.\n * Not emitted when a custom `selectAllHandler` is supplied — the handler owns the behaviour then.\n */\n readonly onSelectAll = output<KbqSelectAllEvent<KbqOption, KbqSelect>>();\n\n /**\n * Event that emits whenever the raw value of the select changes. This is here primarily\n * to facilitate the two-way binding for the `value` input.\n * @docs-private\n */\n readonly valueChange = output<any>();\n\n /**\n * Distance in pixels from the bottom of the options panel at which `scrolledToBottom` fires.\n * Default `0` — emits only when the panel is fully scrolled to the bottom.\n */\n readonly scrolledToBottomOffset = input<number, unknown>(0, { transform: numberAttribute });\n\n /** Emits when the options panel is scrolled to (or within `scrolledToBottomOffset` of) the bottom. */\n readonly scrolledToBottom = output<void>();\n\n /**\n * Whether the overlay should have a backdrop.\n * When true, clicking the backdrop will close the select.\n */\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input()\n get hasBackdrop(): boolean {\n return this._hasBackdrop;\n }\n\n set hasBackdrop(value: boolean) {\n this._hasBackdrop = coerceBooleanProperty(value);\n }\n\n private _hasBackdrop: boolean = false;\n\n /**\n * Placeholder text to be shown when no value is selected.\n * Displayed in the trigger when the select is closed and no value is selected.\n */\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input()\n get placeholder(): string {\n return this._placeholder;\n }\n\n set placeholder(value: string) {\n this._placeholder = value;\n\n this.stateChanges.next();\n }\n\n private _placeholder: string;\n\n /**\n * Whether the select is required. Affects validation and display of placeholder.\n */\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input()\n get required(): boolean {\n return this._required;\n }\n\n set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n\n this.stateChanges.next();\n }\n\n private _required: boolean = false;\n\n /**\n * Whether multiple options can be selected.\n * Note: This cannot be changed dynamically after initialization.\n */\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input({ transform: booleanAttribute })\n get multiple(): boolean {\n return this._multiple;\n }\n\n set multiple(value: boolean) {\n if (this.selectionModel) {\n throw getKbqSelectDynamicMultipleError();\n }\n\n this._multiple = value;\n }\n\n private _multiple: boolean = false;\n\n /**\n * Function to compare the option values with the selected values.\n * The first argument is a value from an option.\n * The second is a value from the selection.\n * Should return true if the values match.\n * Defaults to strict equality comparison.\n */\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input()\n get compareWith() {\n return this._compareWith;\n }\n\n set compareWith(fn: (o1: any, o2: any) => boolean) {\n if (typeof fn !== 'function') {\n throw getKbqSelectNonFunctionValueError();\n }\n\n this._compareWith = fn;\n\n if (this.selectionModel) {\n // A different comparator means the selection could change.\n this.initializeSelection();\n }\n }\n\n /**\n * Factory used to construct a `KbqVirtualOption` for selected values whose\n * `KbqOption` is not currently rendered (e.g. virtual scroll out of viewport,\n * programmatically set initial value, `showPreselectedValues`).\n *\n * Required when option values are objects so the trigger (and tags in\n * multiple mode) can render a human-readable label. Also lets consumers\n * customise per-value `disabled` state or any future `KbqVirtualOption`\n * fields without adding new `@Input`s.\n *\n * Defaults to `new KbqVirtualOption(value, this.disabled)`, which is correct\n * for primitive values where `value` itself is the display label.\n */\n readonly virtualOptionFactory = input<(value: any) => KbqVirtualOption>();\n\n /** When `true`, a repeated Ctrl/Cmd+A deselects all options. Off by default (Ctrl+A only selects). */\n readonly selectAllToggle = input(false, { transform: booleanAttribute });\n\n /**\n * Function for handling the Ctrl + A (select all) keyboard combination.\n * By default, the internal handler selects all options.\n * @param event The keyboard event that triggered the handler.\n * @param select Reference to this select component.\n */\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input()\n get selectAllHandler() {\n return this._selectAllHandler;\n }\n\n set selectAllHandler(fn: (event: KeyboardEvent, select: KbqSelect) => void) {\n if (typeof fn !== 'function') {\n throw Error('`selectAllHandler` must be a function.');\n }\n\n this._selectAllHandler = fn;\n }\n\n /**\n * Width of the panel. If set to `auto`, the panel will match the trigger width.\n * If set to null or an empty string, the panel will grow to match the longest option's text.\n */\n // TODO: Skipped for migration because:\n // The input cannot be migrated because the field is overridden by a subclass.\n @Input() panelWidth: KbqSelectPanelWidth = this.defaultOptions?.panelWidth || null;\n\n /**\n * Minimum width of the panel in pixels.\n * If minWidth is larger than window width, it will be ignored.\n */\n // TODO: Skipped for migration because:\n // The input cannot be migrated because the field is overridden by a subclass.\n @Input({ transform: numberAttribute }) panelMinWidth: Exclude<KbqSelectPanelWidth, 'auto'> =\n this.defaultOptions?.panelMinWidth ?? 200;\n\n /** Value of the select control. Can be a single value or array of values for multiple selection. */\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input()\n get value(): any {\n return this._value;\n }\n\n set value(newValue: any) {\n if (newValue !== this._value) {\n this.writeValue(newValue);\n this._value = newValue;\n }\n }\n\n private _value: any;\n\n /**\n * Unique identifier for the select component.\n * Auto-generates an ID if not provided.\n */\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input()\n get id(): string {\n return this._id;\n }\n\n set id(value: string) {\n this._id = value || this.uid;\n this.stateChanges.next();\n }\n\n private _id: string;\n\n /**\n * Sets the tabIndex of the select element.\n * Automatically set to -1 when disabled.\n */\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input({ transform: numberAttribute })\n get tabIndex(): number {\n return this.disabled ? -1 : this._tabIndex;\n }\n\n set tabIndex(value: number) {\n this._tabIndex = value;\n }\n\n private _tabIndex = 0;\n\n /**\n * Whether the select is disabled.\n * When disabled, the select cannot be opened and its value cannot be changed.\n */\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input({ transform: booleanAttribute })\n get disabled(): boolean {\n return this._disabled;\n }\n\n set disabled(value: boolean) {\n if (value !== this.disabled) {\n this._disabled = value;\n\n if (this.parentFormField) {\n Promise.resolve().then(() => {\n if (this._disabled) {\n this.parentFormField.stopFocusMonitor();\n } else {\n this.parentFormField.runFocusMonitor();\n }\n });\n }\n\n // Let the parent form field know to run change detection when the disabled state changes.\n this.stateChanges.next();\n }\n }\n\n private _disabled: boolean = false;\n\n /** Whether the select is focused. */\n get focused(): boolean {\n return this._focused || this.panelOpen;\n }\n\n set focused(value: boolean) {\n this._focused = value;\n }\n\n /** Whether the select panel is currently open. */\n panelOpen = false;\n\n /** Whether virtual scrolling is enabled for the options panel. */\n withVirtualScroll: boolean;\n\n private _focused = false;\n\n /** Whether the search returned no results. */\n get isEmptySearchResult(): boolean {\n const search = this.search();\n\n return !!search && this.options?.filter((option) => option.selectable()).length === 0 && !!search.value();\n }\n\n /** Whether the cleaner (clear button) should be shown. */\n get canShowCleaner(): boolean {\n return !this.disabled && !!this.cleaner() && this.selectionModel.hasValue();\n }\n\n /** Returns the currently selected option(s). Single value or array for multiple selection. */\n get selected(): KbqOptionBase | KbqOptionBase[] {\n return this.multiSelection ? this.selectionModel.selected : this.selectionModel.selected[0];\n }\n\n /** Returns the display value for the trigger element. */\n get triggerValue(): string {\n if (this.empty) return '';\n\n return this.selectionModel.selected[0].viewValue;\n }\n\n /** Returns all selected options in display order. */\n get triggerValues(): KbqOptionBase[] {\n if (this.empty) {\n return [];\n }\n\n const selectedOptions = this.selectionModel.selected;\n\n if (this.isRtl()) {\n selectedOptions.reverse();\n }\n\n return this.triggerValuesLimit() > 0 ? selectedOptions.slice(0, this.triggerValuesLimit()) : selectedOptions;\n }\n\n /** Whether no option is currently selected. */\n get empty(): boolean {\n return !!this.selectionModel?.isEmpty();\n }\n\n /** Whether there are no options available. */\n get noOptions(): boolean {\n return this.options?.length === 0;\n }\n\n /** Returns the first selected option that is not disabled. */\n get firstSelected(): KbqOptionBase | null {\n return this.selectionModel.selected.filter((option) => !option.disabled)[0] || null;\n }\n\n /** Whether the first selected option is filtered (not visible in the list). */\n get firstFiltered(): boolean {\n return !this.options.find((option: KbqOption) => option === this.firstSelected);\n }\n\n /** @docs-private */\n get colorForState(): KbqComponentColors {\n const hasLegacyValidateDirective = this.elementRef.nativeElement.classList.contains(\n 'kbq-control_has-validate-directive'\n );\n\n if (this.disabled) return KbqComponentColors.Empty;\n\n return (hasLegacyValidateDirective && this.ngControl?.invalid) || this.errorState\n ? KbqComponentColors.Error\n : KbqComponentColors.ContrastFade;\n }\n\n /** Whether multiple choice is enabled. True if multiple or multiline mode is active. */\n get multiSelection(): boolean {\n return this.multiple || this.multiline();\n }\n\n /** Subscription to the close event of the overlay. */\n private closeSubscription = Subscription.EMPTY;\n\n /** Subscription to the options panel scroll event used by `scrolledToBottom`. */\n private scrollSubscription = Subscription.EMPTY;\n\n /** The scroll position of the overlay panel, calculated to center the selected option. */\n private scrollTop = 0;\n\n /** Unique id for this input. Auto-incremented for each instance. */\n private readonly uid = `kbq-select-${nextUniqueId++}`;\n\n /** Subject that emits when the component visibility changes. */\n private visibleChanges: BehaviorSubject<boolean> = new BehaviorSubject(false);\n\n /** Width of the overlay panel in pixels or as a string. */\n protected overlayWidth: string | number;\n\n /** Minimum width of the overlay panel in pixels. */\n protected overlayMinWidth: string | number;\n\n /** Origin element for the overlay panel positioning. */\n protected overlayOrigin?: CdkOverlayOrigin | ElementRef;\n\n /** Flag indicating if the dropdown class has been added to the overlay container. */\n private classAddedToOverlayContainer: boolean = false;\n\n private openPanelTimeout: ReturnType<typeof setTimeout>;\n\n constructor() {\n super();\n\n this.localeService?.changes.subscribe(this.updateLocaleParams);\n\n if (this.ngControl) {\n // Note: we provide the value accessor through here, instead of\n // the `providers` to avoid running into a circular import.\n this.ngControl.valueAccessor = this;\n }\n\n // Force setter to be called in case id was not specified.\n this.id = this.id;\n\n afterNextRender(() => {\n if (this.multiple && !this.multiline()) {\n merge(fromEvent(this.window, 'resize'), this.tags.changes)\n .pipe(delay(0), debounceTime(50), takeUntilDestroyed(this.destroyRef))\n .subscribe(this.calculateHiddenItems);\n }\n });\n }\n\n /** Lifecycle hook called after component initialization. Initializes selection model and subscriptions. */\n ngOnInit() {\n this.selectionModel = new SelectionModel(this.multiSelection);\n this.stateChanges.next();\n\n // We need `distinctUntilChanged` here, because some browsers will\n // fire the animation end event twice for the same animation. See:\n // https://github.com/angular/angular/issues/24084\n this.panelDoneAnimatingStream\n .pipe(distinctUntilChanged(), takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n if (this.panelOpen) {\n this.scrollTop = 0;\n\n const search = this.search();\n\n if (search) {\n search.focus();\n }\n\n this.openedChange.emit(true);\n } else {\n this.openedChange.emit(false);\n this._changeDetectorRef.markForCheck();\n }\n });\n\n merge(this.optionSelectionChanges, this.visibleChanges)\n .pipe(distinctUntilChanged(), takeUntilDestroyed(this.destroyRef))\n .subscribe(() =>\n setTimeout(() => {\n this.calculateHiddenItems();\n\n if (this.multiline()) {\n this.setOverlayPosition();\n }\n }, 0)\n );\n }\n\n /** Lifecycle hook for change detection. Updates visibility and error state. */\n ngDoCheck() {\n this.visibleChanges.next(this.isVisible());\n\n if (this.ngControl) {\n this.updateErrorState();\n }\n }\n\n /** Lifecycle hook after content initialization. Sets up key manager and option subscriptions. */\n ngAfterContentInit() {\n this.withVirtualScroll = !!this.cdkVirtualForOf();\n this.initKeyManager();\n\n this.selectionModel.changed.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {\n event.added.forEach((option) => option.select());\n event.removed.forEach((option) => option.deselect());\n });\n\n this.options.changes.pipe(startWith(null), takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.resetOptions();\n this.initializeSelection();\n });\n\n this.search()\n ?.changes.pipe(\n takeUntilDestroyed(this.destroyRef),\n delay(0),\n filter(() => {\n const activeItem = this.keyManager.activeItem as KbqOption | null;\n\n return !activeItem || !this.options.toArray().includes(activeItem);\n })\n )\n .subscribe(() => this.keyManager.setFirstItemActive());\n }\n\n /** Lifecycle hook when component is destroyed. Cleans up subscriptions. */\n ngOnDestroy() {\n this.stateChanges.complete();\n this.closeSubscription.unsubscribe();\n\n clearTimeout(this.openPanelTimeout);\n }\n\n /** Updates the error state based on the error state matcher. */\n updateErrorState() {\n const oldState = this.errorState;\n const parent = this.parentFormGroup || this.parentForm;\n const matcher = this.errorStateMatcher || this.defaultErrorStateMatcher;\n const control = this.ngControl ? (this.ngControl.control as UntypedFormControl) : null;\n const newState = matcher.isErrorState(control, parent);\n\n if (newState !== oldState) {\n this.errorState = newState;\n this.stateChanges.next();\n }\n }\n\n /**\n * Formats the hidden items text with the number of hidden items.\n * @param hiddenItemsText Template string with {{ number }} placeholder.\n * @param hiddenItems Number of hidden items to display.\n * @returns Formatted string with the number of hidden items.\n */\n @Input()\n hiddenItemsTextFormatter(hiddenItemsText: string, hiddenItems: number): string {\n return hiddenItemsText.replace('{{ number }}', hiddenItems.toString());\n }\n\n /**\n * Clears the current selection.\n * @param $event Mouse event to prevent default behavior.\n */\n clearValue($event): void {\n // need to prevent opening\n $event.stopPropagation();\n // need to prevent scrolling\n $event.preventDefault();\n\n this.selectionModel.clear();\n this.keyManager.setActiveItem(-1);\n\n this.propagateChanges();\n\n this.focus();\n }\n\n /** `View -> model callback called when value changes` */\n onChange: (value: any) => void = () => {};\n\n /** `View -> model callback called when select has been touched` */\n onTouched = () => {};\n\n /** Resets the search component if present. */\n resetSearch(): void {\n const search = this.search();\n\n if (!search) {\n return;\n }\n\n search.reset();\n /*\n todo the incorrect behaviour of keyManager is possible here\n to avoid first item selection (to provide correct options flipping on closed select)\n we should process options update like it is the first options appearance\n */\n search.isSearchChanged = false;\n }\n\n /** Toggles the overlay panel open or closed. */\n toggle(): void {\n if (this.panelOpen) {\n this.close();\n } else {\n this.open();\n }\n }\n\n /**\n * Triggers the opening of the panel component.\n * If the component is disabled or the panel is already open, the call is ignored.\n * Otherwise, the (beforeOpened) event is emitted.\n * When no options are available, the panel is opened after a short delay;\n * if options exist, it opens immediately.\n */\n open(): void {\n if (this.disabled || this.panelOpen) return;\n\n this.beforeOpened.emit();\n\n if (this.noOptions) {\n clearTimeout(this.openPanelTimeout);\n\n this.openPanelTimeout = setTimeout(() => this.openPanel(), delayBeforeDisplayingResultWithoutOptions);\n } else {\n this.openPanel();\n }\n }\n\n /**\n * Internal method to open the panel. Handles overlay positioning and sizing.\n * Sets up the overlay dimensions based on trigger size and configured options.\n */\n openPanel() {\n const trigger = this.trigger();\n\n if (!trigger || !this.keyManager) return;\n\n // add check for form-field bounding rectangles, since it adds extra padding around the trigger\n this.triggerRect = (\n this.parentFormField?.getConnectedOverlayOrigin().nativeElement || trigger.nativeElement\n ).getBoundingClientRect();\n\n // Note: The computed font-size will be a string pixel value (e.g. \"16px\").\n // `parseInt` ignores the trailing 'px' and converts this to a number.\n this.triggerFontSize = parseInt(this.window.getComputedStyle(trigger.nativeElement)['font-size']);\n\n // It's important that we read this as late as possible, because doing so earlier will\n // return a different element since it's based on queries in the form field which may\n // not have run yet. Also this needs to be assigned before we measure the overlay width.\n if (this.parentFormField) {\n this.overlayOrigin = this.parentFormField.getConnectedOverlayOrigin();\n }\n\n this.overlayWidth = this.getOverlayWidth(this.overlayOrigin);\n\n // set overlayMinWidth to the largest of `panelMinWidth` and `triggerRect.width`\n // only if `overlayWidth` falsy and `panelMinWidth` not provided.\n // This ensures panel isn't narrow.\n this.overlayMinWidth =\n this.panelMinWidth !== null && !this.overlayWidth\n ? Math.max(this.panelMinWidth, this.triggerRect.width)\n : '';\n\n this.panelOpen = true;\n\n this.keyManager.withHorizontalOrientation(null);\n this.highlightCorrectOption();\n this._changeDetectorRef.markForCheck();\n\n // Set the font size on the panel element once it exists.\n this._ngZone.onStable\n .asObservable()\n .pipe(take(1))\n .subscribe(() => {\n this.scrollActiveOptionIntoView();\n\n if (this.triggerFontSize && this.overlayDir.overlayRef && this.overlayDir.overlayRef.overlayElement) {\n this.overlayDir.overlayRef.overlayElement.style.fontSize = `${this.triggerFontSize}px`;\n }\n\n this.addClassToOverlayContainer();\n\n if (this.search() && !this.overlayWidth) {\n const measuredPanelWidth = this.panel()?.nativeElement.getBoundingClientRect().width;\n\n if (measuredPanelWidth) {\n this.overlayWidth = measuredPanelWidth;\n }\n }\n });\n }\n\n /** Closes the overlay panel and focuses the host element. */\n close(): void {\n if (!this.panelOpen) return;\n\n // the order of calls is important\n this.resetSearch();\n this.panelOpen = false;\n this.keyManager.withHorizontalOrientation(this.isRtl() ? 'rtl' : 'ltr');\n\n this._changeDetectorRef.markForCheck();\n this.onTouched();\n\n this.removeClassFromOverlayContainer();\n }\n\n /**\n * Sets the select's value. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n *\n * @param value New value to be written to the model.\n */\n writeValue(value: any): void {\n if (this.options) {\n this.setSelectionByValue(value);\n }\n }\n\n /**\n * Saves a callback function to be invoked when the select's value\n * changes from user input. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n *\n * @param fn Callback to be triggered when the value changes.\n */\n registerOnChange(fn: (value: any) => void): void {\n this.onChange = fn;\n }\n\n /**\n * Saves a callback function to be invoked when the select is blurred\n * by the user. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n *\n * @param fn Callback to be triggered when the component has been touched.\n */\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n registerOnTouched(fn: () => {}): void {\n this.onTouched = fn;\n }\n\n /**\n * Disables the select. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n *\n * @param isDisabled Sets whether the component is disabled.\n */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this._changeDetectorRef.markForCheck();\n this.stateChanges.next();\n }\n\n /**\n * Checks if the current direction is RTL (right-to-left).\n * @returns True if RTL mode is active, false otherwise.\n */\n isRtl(): boolean {\n return this._dir ? this._dir.value === 'rtl' : false;\n }\n\n /**\n * Handles all keyboard events for the select.\n * Delegates to appropriate handler based on panel state.\n * @param event The keyboard event to handle.\n */\n handleKeydown(event: KeyboardEvent): void {\n if (this.disabled) return;\n\n if (this.panelOpen) {\n this.handleOpenKeydown(event);\n } else {\n this.handleClosedKeydown(event);\n }\n }\n\n /** Handles focus event on the select element. */\n onFocus() {\n if (!this.disabled) {\n this._focused = true;\n\n this.stateChanges.next();\n }\n }\n\n /**\n * Calls the touched callback only if the panel is closed. Otherwise, the trigger will\n * \"blur\" to the panel when it opens, causing a false positive.\n */\n onBlur() {\n this._focused = false;\n\n if (!this.disabled && !this.panelOpen) {\n this.onTouched();\n this._changeDetectorRef.markForCheck();\n this.stateChanges.next();\n }\n }\n\n /**\n * Callback that is invoked when the overlay panel has been attached.\n * Sets up position change subscription and closing actions.\n */\n onAttached(): void {\n this.overlayDir.positionChange.pipe(take(1)).subscribe(() => {\n this._changeDetectorRef.detectChanges();\n this.setOverlayPosition();\n this.optionsContainer().nativeElement.scrollTop = this.scrollTop;\n\n this.updateScrollSize();\n this.subscribeToScrolledToBottom();\n });\n\n this.options.changes\n .pipe(delay(1), takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.setOverlayPosition());\n\n this.closeSubscription = this.closingActions().subscribe(() => this.close());\n }\n\n /** Returns the theme to be used on the panel based on parent form field color. */\n getPanelTheme(): string {\n return this.parentFormField ? `kbq-${this.parentFormField.color}` : '';\n }\n\n /** Returns the full set of classes for the panel: base class, theme and custom `panelClass`. */\n protected getPanelClasses(): string {\n const panelClass = this.panelClass();\n const classes = ['kbq-select__panel', this.getPanelTheme()];\n\n if (typeof panelClass === 'string') {\n classes.push(panelClass);\n } else if (Array.isArray(panelClass) || panelClass instanceof Set) {\n classes.push(...panelClass);\n } else if (panelClass) {\n classes.push(...Object.keys(panelClass).filter((key) => panelClass[key]));\n }\n\n return classes.filter(Boolean).join(' ');\n }\n\n /** Focuses the select element. */\n focus(): void {\n this.elementRef.nativeElement.focus();\n }\n\n /**\n * Implemented as part of KbqFormFieldControl.\n * @docs-private\n */\n onContainerClick() {\n this.focus();\n }\n\n /**\n * Handles removal of a matched item in the trigger.\n * @param option The option to remove from selection.\n * @param $event The mouse event that triggered the removal.\n */\n onRemoveMatcherItem(option: KbqOptionBase, $event): void {\n $event.stopPropagation();\n\n option.deselect();\n }\n\n /**\n * Calculates the number of hidden items in multiple selection mode.\n * Updates the hiddenItems property and triggers change detection.\n */\n calculateHiddenItems = () => {\n if (\n !this.isBrowser ||\n this.customTrigger() ||\n this.customMatcher() ||\n this.empty ||\n !this.multiple ||\n this.multiline()\n )\n return;\n\n const totalItemsWidth = this.getTotalItemsWidthInMatcher();\n const [totalVisibleItemsWidth, visibleItems] = this.getTotalVisibleItems();\n\n this.hiddenItems = (this.selected as ArrayLike<KbqOptionBase>).length - visibleItems;\n this._changeDetectorRef.detectChanges();\n\n if (this.hiddenItems) {\n const itemsCounter = this.trigger()!.nativeElement.querySelector('.kbq-select__match-hidden-text');\n const matcherList = this.trigger()!.nativeElement.querySelector('.kbq-select__match-list');\n\n if (!itemsCounter || !matcherList) {\n this._changeDetectorRef.markForCheck();\n\n return;\n }\n\n const itemsCounterShowed = itemsCounter.offsetTop < itemsCounter.offsetHeight;\n const itemsCounterWidth: number = Math.floor(itemsCounter.getBoundingClientRect().width);\n\n const matcherListWidth: number = Math.floor(matcherList.getBoundingClientRect().width);\n const matcherWidth: number = matcherListWidth + (itemsCounterShowed ? itemsCounterWidth : 0);\n\n if (itemsCounterShowed && totalItemsWidth < matcherWidth) {\n this.hiddenItems = 0;\n this._changeDetectorRef.detectChanges();\n }\n\n if (\n totalVisibleItemsWidth === matcherListWidth ||\n totalVisibleItemsWidth + itemsCounterWidth < matcherListWidth\n ) {\n this._changeDetectorRef.markForCheck();\n\n return;\n }\n }\n\n this._changeDetectorRef.markForCheck();\n };\n\n /**\n * Gets the height of a single option item.\n * @returns The height in pixels of the first option, or 0 if no options exist.\n */\n getItemHeight(): number {\n return this.options.first ? this.options.first.getHeight() : 0;\n }\n\n /**\n * Handles click events on the select.\n * Closes the panel if click is inside the footer.\n * @param $event The mouse event to handle.\n */\n handleClick($event: MouseEvent) {\n if (this.footer()?.nativeElement.contains($event.target)) {\n this.close();\n }\n }\n\n /** @docs-private */\n setSelectedOptionsByClick(option: KbqOption) {\n if (this.multiple || this.multiline()) {\n this.keyManager.setActiveItem(option);\n const options = this.options.toArray();\n\n let fromIndex = this.keyManager.previousActiveItemIndex;\n let toIndex = (this.keyManager.previousActiveItemIndex = this.keyManager.activeItemIndex);\n const selectedOptionState = options[fromIndex].selected;\n\n if (toIndex === fromIndex) {\n this.selectionModel.toggle(option);\n\n return;\n }\n\n if (fromIndex > toIndex) {\n [fromIndex, toIndex] = [toIndex, fromIndex];\n }\n\n options\n .slice(fromIndex, toIndex + 1)\n .filter((item) => !item.disabled)\n .forEach((option) => {\n if (selectedOptionState) {\n option.select();\n } else {\n option.deselect();\n }\n });\n } else {\n this.selectionModel.toggle(option);\n }\n }\n\n /** @docs-private */\n protected shouldShowSearch(): boolean {\n return (\n isUndefined(this.searchMinOptionsThreshold) ||\n !!this.search()?.value() ||\n this.options.length >= this.searchMinOptionsThreshold\n );\n }\n\n /** Updates locale parameters from the locale service. */\n private updateLocaleParams = () => {\n this.hiddenItemsText = this.localeService?.getParams('select').hiddenItemsText;\n\n this._changeDetectorRef.markForCheck();\n };\n\n /** Checks if the component is currently visible in the viewport. */\n private isVisible(): boolean {\n if (!this.isBrowser) return false;\n\n return this.elementRef.nativeElement.offsetTop < this.elementRef.nativeElement.offsetHeight;\n }\n\n /** Gets the current overlay position index in the container. */\n private currentOverlayPosition(): number {\n const element = this.overlayDir.overlayRef.hostElement;\n\n return Array.from(this.overlayContainer.getContainerElement().childNodes).findIndex((node) => {\n return node.firstChild?.['id'] === element.firstChild?.['id'];\n });\n }\n\n /** Gets the position index of modal overlay in the container. */\n private modalOverlayPosition(): number {\n return Array.from(this.overlayContainer.getContainerElement().childNodes).findIndex((childNode) =>\n (childNode as HTMLElement).classList.contains('kbq-modal-overlay')\n );\n }\n\n /**\n * Creates an observable of actions that should close the select panel.\n * Includes outside pointer events and overlay detachments.\n */\n private closingActions() {\n // used for calling toggle on select from outside of component\n const outsidePointerEvents = this.overlayDir\n .overlayRef!.outsidePointerEvents()\n .pipe(delay(0))\n .pipe(\n filter(() => {\n if (this.overlayContainer.getContainerElement().childElementCount > 1) {\n return this.currentOverlayPosition() > this.modalOverlayPosition();\n }\n\n return true;\n })\n );\n\n return merge(outsidePointerEvents, this.overlayDir.overlayRef!.detachments());\n }\n\n /** Gets the height of the options container element. */\n private getHeightOfOptionsContainer(): number {\n return this.optionsContainer().nativeElement.getClientRects()[0]?.height;\n }\n\n /** Updates the keyboard manager scroll size based on options container height. */\n private updateScrollSize(): void {\n if (!this.options.first) {\n return;\n }\n\n this.keyManager.withScrollSize(Math.floor(this.getHeightOfOptionsContainer() / this.options.first.getHeight()));\n }\n\n /**\n * Subscribes to scroll events of the options panel and emits `scrolledToBottom`\n * when the panel reaches `scrolledToBottomOffset` pixels from the bottom.\n * Re-subscribes on every panel attach; auto-unsubscribes when the panel closes\n * or the component is destroyed.\n */\n private subscribeToScrolledToBottom(): void {\n this.scrollSubscription.unsubscribe();\n\n const virtualScrollViewport = this.virtualScrollViewport();\n const distance =\n this.withVirtualScroll && virtualScrollViewport\n ? virtualScrollViewport\n .elementScrolled()\n .pipe(map(() => this.virtualScrollViewport()!.measureScrollOffset('bottom')))\n : fromEvent(this.optionsContainer().nativeElement, 'scroll').pipe(\n map(() => {\n const element = this.optionsContainer().nativeElement;\n\n return element.scrollHeight - element.scrollTop - element.clientHeight;\n })\n );\n\n this._ngZone.runOutsideAngular(() => {\n this.scrollSubscription = distance\n .pipe(\n auditTime(SCROLLED_TO_BOTTOM_THROTTLE_TIME),\n map((distance) => distance <= this.scrolledToBottomOffset()),\n distinctUntilChanged(),\n filter(Boolean),\n takeUntilDestroyed(this.destroyRef),\n takeUntil(this.closedStream)\n )\n .subscribe(() => this._ngZone.run(() => this.scrolledToBottom.emit()));\n });\n }\n\n /** Calculates the total width of all selected items in the matcher. */\n private getTotalItemsWidthInMatcher(): number {\n const triggerClone = this.buildTriggerClone();\n\n triggerClone.querySelector('.kbq-select__match-hidden-text')?.remove();\n this._renderer.appendChild(this.trigger()!.nativeElement, triggerClone);\n\n let totalItemsWidth: number = 0;\n const selectedItemsViewValueContainers = triggerClone.querySelectorAll<HTMLElement>('kbq-tag');\n\n selectedItemsViewValueContainers.forEach((item) => (totalItemsWidth += this.getItemWidth(item)));\n\n triggerClone.remove();\n\n return totalItemsWidth;\n }\n\n /**\n * Calculates the width of a single item including margins.\n * @param element The DOM element to measure.\n * @returns Total width including margins and gap.\n */\n private getItemWidth(element: HTMLElement): number {\n const computedStyle = this.window.getComputedStyle(element);\n\n const width: number = parseInt(computedStyle.width);\n const marginLeft: number = parseInt(computedStyle.marginLeft);\n const marginRight: number = parseInt(computedStyle.marginRight);\n\n return width + marginLeft + marginRight + parseInt(SelectSizeMultipleContentGap);\n }\n\n /** Handles keyboard events while the select is closed. */\n private handleClosedKeydown(event: KeyboardEvent): void {\n const keyCode = event.keyCode;\n const isArrowKey = [DOWN_ARROW, UP_ARROW, LEFT_ARROW, RIGHT_ARROW].includes(keyCode);\n const isOpenKey = [ENTER, SPACE].includes(keyCode);\n\n // Open the select on ALT + arrow key to match the native <select>\n if (isOpenKey || ((this.multiSelection || event.altKey) && isArrowKey)) {\n event.preventDefault(); // prevents the page from scrolling down when pressing space\n this.open();\n } else if (!this.multiSelection) {\n this.keyManager.onKeydown(event);\n }\n }\n\n /** Handles keyboard events when the select is open. */\n private handleOpenKeydown(event: KeyboardEvent): void {\n const keyCode = event.keyCode;\n const isArrowKey = keyCode === DOWN_ARROW || keyCode === UP_ARROW;\n\n if ((isArrowKey && event.altKey) || keyCode === ESCAPE || keyCode === TAB) {\n // Close the select on ALT + arrow key to match the native <select>\n event.preventDefault();\n this.close();\n this.focus();\n } else if (keyCode === HOME) {\n event.preventDefault();\n\n this.keyManager.setFirstItemActive();\n } else if (keyCode === END) {\n event.preventDefault();\n\n this.keyManager.setLastItemActive();\n } else if (keyCode === PAGE_UP) {\n event.preventDefault();\n\n this.keyManager.setPreviousPageItemActive();\n } else if (keyCode === PAGE_DOWN) {\n event.preventDefault();\n\n this.keyManager.setNextPageItemActive();\n } else if ((keyCode === ENTER || keyCode === SPACE) && this.keyManager.activeItem) {\n event.preventDefault();\n this.keyManager.activeItem.selectViaInteraction();\n } else if (this.multiSelection && isSelectAll(event)) {\n this.selectAllHandler(event, this);\n } else {\n const previouslyFocusedIndex = this.keyManager.activeItemIndex;\n\n this.keyManager.onKeydown(event);\n\n if (\n this.multiSelection &&\n isArrowKey &&\n event.shiftKey &&\n this.keyManager.activeItem &&\n this.keyManager.activeItemIndex !== previouslyFocusedIndex\n ) {\n this.keyManager.activeItem.selectViaInteraction();\n }\n\n // Ensure the active option's keyboard-focus indicator is shown even when the\n // index didn't change (e.g. ArrowDown on a single-option list) — without this\n // the panel never gains `cdk-keyboard-focused` and the active border is hidden.\n if (isArrowKey && this.keyManager.activeItemIndex === previouslyFocusedIndex) {\n this.keyManager.activeItem?.focus();\n }\n\n const search = this.search();\n\n if (search && this.shouldShowSearch()) {\n search.focus();\n }\n\n if (search && (this.keyManager.isTyping() || [BACKSPACE, DELETE].includes(keyCode))) {\n setTimeout(() => this.highlightCorrectOption());\n }\n }\n }\n\n /**\n * Initializes the selection based on the current value.\n * Defers execution to avoid change detection errors.\n */\n private initializeSelection(): void {\n // Defer setting the value in order to avoid the \"Expression\n // has changed after it was checked\" errors from Angular.\n Promise.resolve().then(() => {\n this.setSelectionByValue(this.ngControl ? this.ngControl.value : this._value);\n });\n }\n\n /**\n * Sets the selected option based on a value.\n * If no option can be found with the designated value, the select trigger is cleared.\n * @param value The value to select. Can be a single value or array for multiple selection.\n */\n private setSelectionByValue(value: any | any[]): void {\n this.previousSelectionModelSelected = this.selectionModel.selected;\n\n if (this.multiSelection && value) {\n if (!Array.isArray(value)) {\n throw getKbqSelectNonArrayValueError();\n }\n\n this.selectionModel.clear();\n value.forEach((currentValue: any) => this.selectValue(currentValue));\n this.sortValues();\n } else {\n this.selectionModel.clear();\n const correspondingOption = this.selectValue(value);\n\n // Shift focus to the active item. Note that we shouldn't do this in multiple\n // mode, because we don't know what option the user interacted with last.\n if (correspondingOption && !this.withVirtualScroll) {\n this.keyManager.setActiveItem(correspondingOption);\n }\n }\n\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Finds the option that corresponds to the given value.\n * @param value The value to find.\n * @returns The matching option or undefined if not found.\n */\n private getCorrespondOption(value: any): KbqOptionBase | undefined {\n return [\n ...this.options.toArray(),\n ...this.previousSelectionModelSelected\n ].find((option: KbqOptionBase) => {\n try {\n // Treat null as a special reset value.\n\n return option.value != null && this.compareWith(option.value, value);\n } catch (error) {\n if (isDevMode()) {\n // Notify developers of errors in their comparator.\n // eslint-disable-next-line no-console\n console.warn(error);\n }\n\n return false;\n }\n });\n }\n\n /**\n * Finds and selects and option based on its value.\n * @returns Option that has the corresponding value.\n */\n private selectValue(value: any): KbqOption | undefined {\n const correspondingOption = this.getCorrespondOption(value);\n\n if (correspondingOption) {\n this.selectionModel.select(correspondingOption);\n } else if (this.withVirtualScroll) {\n const source = this.cdkVirtualForOf()?.cdkVirtualForOf;\n const correspondingOptionVirtual =\n source instanceof Array ? source.find((item) => this.compareWith(item, value)) : undefined;\n\n if (correspondingOptionVirtual) {\n this.selectionModel.select(this.createVirtualOption(correspondingOptionVirtual));\n }\n } else if (this.showPreselectedValues()) {\n this.selectionModel.select(this.createVirtualOption(value));\n }\n\n return correspondingOption as KbqOption;\n }\n\n /**\n * Single entry point for building a `KbqVirtualOption` from a raw value.\n * Uses the consumer-provided `virtualOptionFactory` when set, otherwise\n * wraps the raw value with the select's current `disabled` state.\n */\n private createVirtualOption(value: any): KbqVirtualOption {\n const virtualOptionFactory = this.virtualOptionFactory();\n\n return virtualOptionFactory ? virtualOptionFactory(value) : new KbqVirtualOption(value, this.disabled);\n }\n\n /** Sets up a key manager to listen to keyboard events on the overlay panel. */\n private initKeyManager() {\n const typeAheadDebounce = 200;\n\n this.keyManager = new ActiveDescendantKeyManager<KbqOption>(this.options)\n .withTypeAhead(typeAheadDebounce, this.search() ? -1 : 0)\n .withVerticalOrientation()\n .withHorizontalOrientation(this.isRtl() ? 'rtl' : 'ltr');\n\n this.keyManager.change.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n if (this.panelOpen && this.panel()) {\n this.scrollActiveOptionIntoView();\n\n this.search()?.focus();\n } else if (!this.panelOpen && !this.multiSelection && this.keyManager.activeItem) {\n this.keyManager.activeItem.selectViaInteraction();\n }\n });\n }\n\n /** Drops current option subscriptions and IDs and resets from scratch. */\n private resetOptions(): void {\n this.optionSelectionChanges\n .pipe(takeUntilDestroyed(this.destroyRef), takeUntil(this.options.changes))\n .subscribe((event) => {\n this.onSelect(event.source, event.isUserInput);\n\n if (event.isUserInput && !this.multiSelection && this.panelOpen) {\n this.close();\n this.focus();\n }\n });\n\n // Listen to changes in the internal state of the options and react accordingly.\n // Handles cases like the labels of the selected options changing.\n (this.options.length ? merge(...this.options.map((option) => option.stateChanges)) : EMPTY)\n .pipe(takeUntilDestroyed(this.destroyRef), takeUntil(this.options.changes))\n .subscribe(() => {\n this._changeDetectorRef.markForCheck();\n this.stateChanges.next();\n });\n }\n\n /** Invoked when an option is clicked. */\n private onSelect(option: KbqOption, isUserInput: boolean): void {\n const wasSelected = this.selectionModel.isSelected(option);\n\n if (option.value == null && !this.multiSelection) {\n option.deselect();\n this.selectionModel.clear();\n this.propagateChanges(option.value);\n } else {\n if (option.selected) {\n this.selectionModel.select(option);\n } else {\n this.selectionModel.deselect(option);\n }\n\n if (isUserInput) {\n this.keyManager.setActiveItem(option);\n }\n\n if (this.multiSelection) {\n this.sortValues();\n }\n }\n\n if (wasSelected !== this.selectionModel.isSelected(option)) {\n this.propagateChanges();\n }\n\n this.stateChanges.next();\n }\n\n /** Sorts the selected values based on their order in the panel. */\n private sortValues() {\n if (this.multiSelection) {\n const options = this.options.toArray();\n\n this.selectionModel.sort((a, b) => {\n const sortComparator = this.sortComparator();\n\n return sortComparator ? sortComparator(a, b, options) : a.value - b.value;\n });\n this.stateChanges.next();\n }\n }\n\n /** Emits change event to set the model value. */\n private propagateChanges(fallbackValue?: any): void {\n let valueToEmit: any;\n\n if (this.multiSelection) {\n valueToEmit = (this.selected as KbqOption[]).map((option) => option.value);\n } else {\n valueToEmit = this.selected ? (this.selected as KbqOption).value : fallbackValue;\n }\n\n this._value = valueToEmit;\n this.valueChange.emit(valueToEmit);\n this.onChange(valueToEmit);\n this.selectionChange.emit(new KbqSelectChange(this, valueToEmit));\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Highlights the selected item. If no option is selected, it will highlight\n * the first item instead.\n */\n private highlightCorrectOption(): void {\n if (this.keyManager) {\n if (this.empty || !this.firstSelected || this.firstFiltered) {\n this.keyManager.setFirstItemActive();\n } else {\n this.keyManager.setActiveItem(this.firstSelected as KbqOption);\n }\n }\n }\n\n /** Scrolls the active option into view. */\n private scrollActiveOptionIntoView(): void {\n this.keyManager.activeItem?.focus();\n }\n\n /** Gets how wide the overlay panel should be. */\n private getOverlayWidth(origin?: ElementRef | CdkOverlayOrigin): string | number {\n if (this.panelWidth === 'auto') {\n const elementRef = origin instanceof CdkOverlayOrigin ? origin.elementRef : origin || this.elementRef;\n\n return elementRef.nativeElement.getBoundingClientRect().width;\n }\n\n return this.panelWidth ?? '';\n }\n\n /** Comparison function to specify which option is displayed. Defaults to object equality. */\n private _compareWith = (o1: any, o2: any) => o1 === o2;\n\n /** Function for handling the combination Ctrl + A (select all). By default, the internal handler is used. */\n private _selectAllHandler(event: KeyboardEvent, select: KbqSelect): void {\n const searchInput = isInput(event) ? (event.target as HTMLInputElement) : null;\n\n if (shouldSelectSearchText(searchInput)) {\n searchInput!.select();\n event.preventDefault();\n\n return;\n }\n\n event.preventDefault();\n\n const options = select.options.toArray();\n const selectableOptions = options.filter((option) => !option.disabled);\n\n toggleSelectAll<KbqOption>(\n {\n items: options,\n isSelectable: (option) => !option.disabled,\n isSelected: (option) => option.selected,\n setSelected: (option, selected) => (selected ? option.select() : option.deselect())\n },\n { allowDeselect: select.selectAllToggle() }\n );\n\n // `selected` per the KbqSelectAllEvent contract: `true` only when every selectable option is\n // now selected, `false` otherwise (deselected or partial). Reading the live option state keeps\n // this correct even on a no-op (Ctrl+A while everything is already selected, selectAllToggle off).\n const selected = selectableOptions.length > 0 && selectableOptions.every((option) => option.selected);\n\n select.onSelectAll.emit(new KbqSelectAllEvent(select, selectableOptions, selected));\n }\n\n /**\n * Calculates the total width and count of visible items.\n * @returns Tuple of [totalVisibleItemsWidth, visibleItemsCount].\n */\n private getTotalVisibleItems(): [number, number] {\n const triggerClone = this.buildTriggerClone();\n\n const hiddenText = triggerClone.querySelector('.kbq-select__match-hidden-text');\n\n if (hiddenText) {\n this._renderer.setStyle(hiddenText, 'display', 'block');\n }\n\n this._renderer.appendChild(this.trigger()!.nativeElement, triggerClone);\n\n let visibleItemsCount: number = 0;\n let totalVisibleItemsWidth: number = 0;\n\n (triggerClone.querySelectorAll('kbq-tag') as NodeListOf<HTMLElement>).forEach((item) => {\n if (item.offsetTop < item.offsetHeight) {\n totalVisibleItemsWidth += this.getItemWidth(item);\n visibleItemsCount++;\n }\n });\n\n triggerClone.remove();\n\n return [totalVisibleItemsWidth, visibleItemsCount];\n }\n\n /**\n * Creates a hidden clone of the trigger element for width calculations.\n * @returns Clone of the trigger element positioned off-screen.\n */\n private buildTriggerClone(): HTMLDivElement {\n const triggerClone = this.trigger()!.nativeElement.cloneNode(true);\n\n this._renderer.setStyle(triggerClone, 'position', 'absolute');\n this._renderer.setStyle(triggerClone, 'visibility', 'hidden');\n this._renderer.setStyle(triggerClone, 'top', '-100%');\n this._renderer.setStyle(triggerClone, 'left', '0');\n this._renderer.setStyle(triggerClone, 'max-width', '100%');\n\n return triggerClone;\n }\n\n /** Adds the dropdown class to the overlay container when first select opens. */\n private addClassToOverlayContainer() {\n const overlayContainer = this.overlayContainer?.getContainerElement();\n\n if (overlayContainer.childNodes.length === 1) {\n this.classAddedToOverlayContainer = true;\n\n this._renderer.addClass(overlayContainer, 'cdk-overlay-container_dropdown');\n }\n }\n\n /** Removes the dropdown class from the overlay container when select closes. */\n private removeClassFromOverlayContainer() {\n if (this.classAddedToOverlayContainer) {\n this._renderer.removeClass(this.overlayContainer.getContainerElement(), 'cdk-overlay-container_dropdown');\n }\n }\n}\n","<div\n #fallbackOverlayOrigin=\"cdkOverlayOrigin\"\n #trigger\n cdkOverlayOrigin\n class=\"kbq-select__trigger\"\n [class.kbq-select__trigger_empty]=\"empty\"\n [class.kbq-select__trigger_multiline]=\"multiline()\"\n [class.kbq-select__trigger_multiple]=\"multiple\"\n [class.kbq-select__trigger_single]=\"!multiple\"\n>\n @if (!!customMatcher()) {\n <ng-content select=\"kbq-select-matcher, [kbq-select-matcher]\" />\n } @else {\n <div class=\"kbq-select__matcher\">\n @if (empty) {\n <span class=\"kbq-select__placeholder\">\n {{ placeholder || '\\u00A0' }}\n </span>\n } @else {\n @if (!!customTrigger()) {\n <ng-content select=\"kbq-select-trigger, [kbq-select-trigger]\" />\n } @else {\n <div class=\"kbq-select__match-container\">\n @if (multiSelection) {\n <div\n [class.kbq-select__match-list]=\"!multiline()\"\n [class.kbq-select__multiline-match-list]=\"multiline()\"\n >\n @if (!customTagTemplateRef()) {\n @for (option of triggerValues; track option) {\n <kbq-tag\n [color]=\"colorForState\"\n [disabled]=\"option.disabled || disabled\"\n [selectable]=\"false\"\n >\n {{ option.viewValue }}\n @if (!option.disabled && !disabled) {\n <i\n kbq-icon=\"kbq-xmark-s_16\"\n kbqTagRemove\n (click)=\"onRemoveMatcherItem(option, $event)\"\n ></i>\n }\n </kbq-tag>\n }\n } @else {\n @for (option of triggerValues; track option) {\n <ng-container\n [ngTemplateOutlet]=\"$any(customTagTemplateRef())\"\n [ngTemplateOutletContext]=\"{ $implicit: option, select: this }\"\n />\n }\n }\n </div>\n\n @if (!multiline()) {\n <div\n class=\"kbq-select__match-hidden-text\"\n [style.display]=\"hiddenItems > 0 ? 'block' : 'none'\"\n >\n {{ hiddenItemsTextFormatter(hiddenItemsText, hiddenItems) }}\n </div>\n }\n } @else {\n <span class=\"kbq-select__matcher-text\">\n {{ triggerValue }}\n </span>\n }\n </div>\n }\n }\n\n @if (canShowCleaner) {\n <div\n class=\"kbq-select__cleaner\"\n (click)=\"clearValue($event)\"\n (keydown.enter)=\"clearValue($event)\"\n (keydown.space)=\"clearValue($event)\"\n >\n <ng-content select=\"kbq-cleaner\" />\n </div>\n }\n\n <div class=\"kbq-select__arrow-wrapper\">\n <i kbq-icon=\"kbq-chevron-down-s_16\" class=\"kbq-select__arrow\" [color]=\"colorForState\"></i>\n </div>\n </div>\n }\n</div>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayLockPosition\n [cdkConnectedOverlayBackdropClass]=\"backdropClass()\"\n [cdkConnectedOverlayHasBackdrop]=\"hasBackdrop\"\n [cdkConnectedOverlayMinWidth]=\"overlayMinWidth\"\n [cdkConnectedOverlayOffsetY]=\"offsetY\"\n [cdkConnectedOverlayOpen]=\"panelOpen\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin || fallbackOverlayOrigin\"\n [cdkConnectedOverlayPanelClass]=\"overlayPanelClass\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayWidth]=\"overlayWidth\"\n (attach)=\"onAttached()\"\n (backdropClick)=\"close()\"\n (detach)=\"close()\"\n>\n <div\n #panel\n cdkMonitorSubtreeFocus\n [class]=\"getPanelClasses()\"\n [style.font-size.px]=\"triggerFontSize\"\n [style.transformOrigin]=\"transformOrigin\"\n (click)=\"handleClick($event)\"\n (keydown)=\"handleKeydown($event)\"\n >\n @if (search() && shouldShowSearch()) {\n <div class=\"kbq-select__search-container\">\n <ng-content select=\"[kbqSelectSearch]\" />\n </div>\n }\n\n <div\n #optionsContainer\n class=\"kbq-select__content\"\n [class.kbq-scrollbar]=\"!withVirtualScroll\"\n [@fadeInContent]=\"'showing'\"\n (@fadeInContent.done)=\"panelDoneAnimatingStream.next($event.toState)\"\n >\n @if (isEmptySearchResult) {\n <ng-content select=\"[kbq-select-search-empty-result]\" />\n }\n <ng-content />\n </div>\n\n <ng-content select=\"kbq-select-footer,[kbq-select-footer]\" />\n </div>\n</ng-template>\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport {\n KBQ_SELECT_SCROLL_STRATEGY_PROVIDER,\n KbqOptionModule,\n KbqSelectFooter,\n KbqSelectMatcher,\n KbqSelectSearch,\n KbqSelectSearchEmptyResult,\n KbqSelectTrigger\n} from '@koobiq/components/core';\nimport { KbqFormFieldModule } from '@koobiq/components/form-field';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqTagsModule } from '@koobiq/components/tags';\nimport { KbqToolTipModule } from '@koobiq/components/tooltip';\nimport { KbqSelectError, KbqSelectErrorText, KbqSelectLoading, KbqSelectNoOptions } from './select-common';\nimport { KbqOptionTooltip } from './select-option.directive';\nimport { KbqSelect } from './select.component';\n\n@NgModule({\n imports: [\n OverlayModule,\n KbqOptionModule,\n KbqIconModule,\n KbqTagsModule,\n KbqToolTipModule,\n KbqSelectSearch,\n KbqSelectFooter,\n KbqSelectMatcher,\n KbqSelectTrigger,\n KbqSelectSearchEmptyResult,\n NgTemplateOutlet,\n A11yModule,\n KbqSelect,\n KbqOptionTooltip,\n KbqSelectLoading,\n KbqSelectError,\n KbqSelectNoOptions,\n KbqSelectErrorText\n ],\n providers: [KBQ_SELECT_SCROLL_STRATEGY_PROVIDER],\n exports: [\n KbqSelect,\n KbqOptionTooltip,\n KbqOptionModule,\n KbqSelectSearch,\n KbqSelectFooter,\n KbqSelectMatcher,\n KbqSelectTrigger,\n KbqSelectSearchEmptyResult,\n KbqSelectLoading,\n KbqFormFieldModule,\n KbqSelectError,\n KbqSelectNoOptions,\n KbqSelectErrorText\n ]\n})\nexport class KbqSelectModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["SelectSizeMultipleContentGap","i1"],"mappings":"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"}
1
+ {"version":3,"file":"koobiq-components-select.mjs","sources":["../../../packages/components/select/select-common.ts","../../../packages/components/select/select-option.directive.ts","../../../packages/components/select/select.component.ts","../../../packages/components/select/select.html","../../../packages/components/select/select.module.ts","../../../packages/components/select/koobiq-components-select.ts"],"sourcesContent":["import { booleanAttribute, ChangeDetectionStrategy, Component, Directive, input } from '@angular/core';\nimport { KbqProgressSpinnerModule } from '@koobiq/components/progress-spinner';\n\n@Component({\n selector: 'kbq-select-loading, [kbq-select-loading]',\n imports: [\n KbqProgressSpinnerModule\n ],\n template: `\n <ng-content select=\"kbq-progress-spinner\">\n <div class=\"layout-row layout-margin-top-4xl layout-margin-bottom-4xl layout-align-center-center\">\n <kbq-progress-spinner [mode]=\"'indeterminate'\" />\n </div>\n </ng-content>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'kbq-select-loading'\n },\n exportAs: 'kbqSelectLoading'\n})\nexport class KbqSelectLoading {}\n\n/**\n * This component renders the error for a Select component.\n * The error message can be displayed in two visual variants: a default centered layout (when [paging] is falsy)\n * or a variant with left‑aligned text suitable for pagination controls (when [paging] is truthy).\n */\n@Component({\n selector: 'kbq-select-error, [kbq-select-error]',\n template: `\n <ng-content />\n `,\n styles: `\n :host {\n display: flex;\n flex-direction: column;\n\n &.kbq-select-error_default {\n align-items: center;\n justify-content: center;\n\n margin-bottom: var(--kbq-size-3xl);\n margin-top: var(--kbq-size-3xl);\n }\n\n &.kbq-select-error_paging {\n justify-content: start;\n\n & ::ng-deep.kbq-select-error__text {\n padding-left: var(--kbq-size-l);\n }\n }\n }\n\n ::ng-deep .kbq-select-error__text {\n margin-top: var(--kbq-size-xs);\n margin-bottom: var(--kbq-size-3xs);\n color: var(--kbq-foreground-error);\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'kbq-select-error',\n '[class.kbq-select-error_default]': '!paging()',\n '[class.kbq-select-error_paging]': 'paging()'\n },\n exportAs: 'kbqSelectError'\n})\nexport class KbqSelectError {\n /** Indicates whether styles for pagination controls should be used. */\n paging = input(false, { transform: booleanAttribute });\n}\n\n/**\n * Marks an element as the error text container for a *KbqSelect* component.\n */\n@Directive({\n selector: '[kbq-select-error-text]',\n host: {\n class: 'kbq-select-error__text'\n },\n exportAs: 'kbqSelectErrorText'\n})\nexport class KbqSelectErrorText {}\n\n/**\n * Component that represents the empty state of a select dropdown.\n */\n@Component({\n selector: 'kbq-select-no-options, [kbq-select-no-options]',\n template: `\n <ng-content />\n `,\n styles: `\n :host {\n display: flex;\n flex-direction: column;\n\n align-items: center;\n justify-content: center;\n\n padding-bottom: var(--kbq-size-3xl);\n padding-top: var(--kbq-size-3xl);\n\n color: var(--kbq-foreground-contrast-secondary);\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'kbq-select-no-options'\n },\n exportAs: 'kbqSelectNoOptions'\n})\nexport class KbqSelectNoOptions {}\n","import { ContentObserver } from '@angular/cdk/observers';\nimport { SharedResizeObserver } from '@angular/cdk/observers/private';\nimport { Platform } from '@angular/cdk/platform';\nimport { AfterViewInit, Directive, inject, OnDestroy } from '@angular/core';\nimport { KbqOption } from '@koobiq/components/core';\nimport { KbqTooltipTrigger } from '@koobiq/components/tooltip';\nimport { Subscription, throttleTime } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\n@Directive({\n selector: 'kbq-option',\n host: {\n '(mouseenter)': 'handleElementEnter()',\n '(mouseleave)': 'handleElementLeave()'\n }\n})\nexport class KbqOptionTooltip extends KbqTooltipTrigger implements AfterViewInit, OnDestroy {\n private readonly option = inject(KbqOption);\n private readonly resizeObserver = inject(SharedResizeObserver);\n private readonly contentObserver = inject(ContentObserver);\n private readonly isBrowser = inject(Platform).isBrowser;\n\n private readonly debounceInterval = 100;\n\n private resizeSubscription = Subscription.EMPTY;\n private contentObserverSubscription = Subscription.EMPTY;\n private focusMonitorSubscription = Subscription.EMPTY;\n\n get textElement(): HTMLElement {\n return this.option.textElement.nativeElement;\n }\n\n get isOverflown(): boolean {\n if (!this.isBrowser) return false;\n\n return this.textElement.clientWidth < this.textElement.scrollWidth;\n }\n\n constructor() {\n super();\n }\n\n ngAfterViewInit() {\n super.ngAfterViewInit();\n\n this.content = this.option.viewValue;\n this.disabled = !this.isOverflown;\n\n this.resizeSubscription = this.resizeObserver\n .observe(this.textElement)\n .pipe(debounceTime(this.debounceInterval))\n .subscribe(() => (this.disabled = !this.isOverflown));\n\n this.contentObserverSubscription = this.contentObserver\n .observe(this.textElement)\n .pipe(throttleTime(this.debounceInterval))\n .subscribe(() => {\n this.disabled = !this.isOverflown;\n this.content = this.option.viewValue;\n });\n\n this.focusMonitorSubscription = this.focusMonitor\n .monitor(this.elementRef)\n .subscribe((origin) => (origin === 'keyboard' ? this.handleElementEnter() : this.handleElementLeave()));\n }\n\n ngOnDestroy() {\n this.resizeSubscription.unsubscribe();\n this.contentObserverSubscription.unsubscribe();\n this.focusMonitorSubscription.unsubscribe();\n\n super.ngOnDestroy();\n }\n\n handleElementEnter() {\n this.disabled = !this.isOverflown;\n }\n\n handleElementLeave() {\n this.disabled = true;\n }\n}\n","import { CdkMonitorFocus } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { CdkConnectedOverlay, CdkOverlayOrigin, ConnectedPosition, OverlayContainer } from '@angular/cdk/overlay';\nimport { Platform } from '@angular/cdk/platform';\nimport { CdkVirtualForOf, CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n DestroyRef,\n DoCheck,\n ElementRef,\n EventEmitter,\n InjectionToken,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Output,\n Provider,\n QueryList,\n Renderer2,\n TemplateRef,\n ViewChild,\n ViewChildren,\n ViewEncapsulation,\n afterNextRender,\n booleanAttribute,\n computed,\n contentChild,\n contentChildren,\n effect,\n inject,\n input,\n numberAttribute,\n output,\n viewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, FormGroupDirective, NgControl, NgForm, UntypedFormControl } from '@angular/forms';\nimport {\n ActiveDescendantKeyManager,\n BACKSPACE,\n CanUpdateErrorState,\n DELETE,\n DOWN_ARROW,\n END,\n ENTER,\n ESCAPE,\n ErrorStateMatcher,\n HOME,\n KBQ_CONNECTED_OVERLAY_ABOVE_CLASS,\n KBQ_CONNECTED_OVERLAY_BELOW_CLASS,\n KBQ_LOCALE_SERVICE,\n KBQ_OPTION_PARENT_COMPONENT,\n KBQ_PANEL_DEFAULT_MIN_WIDTH,\n KBQ_PARENT_POPUP,\n KBQ_SELECT_SCROLL_STRATEGY,\n KbqAbstractSelect,\n KbqComponentColors,\n KbqLocaleService,\n KbqOptgroup,\n KbqOption,\n KbqOptionBase,\n KbqOptionSelectionChange,\n KbqPanelMaxHeight,\n KbqPanelMaxWidth,\n KbqPanelMinWidth,\n KbqPanelWidth,\n KbqPseudoCheckbox,\n KbqPseudoCheckboxState,\n KbqSelectAllAdapter,\n KbqSelectAllEvent,\n KbqSelectFooter,\n KbqSelectMatcher,\n KbqSelectSearch,\n KbqSelectSearchEmptyResult,\n KbqSelectTrigger,\n KbqSiblingPopup,\n KbqVirtualOption,\n LEFT_ARROW,\n PAGE_DOWN,\n PAGE_UP,\n RIGHT_ARROW,\n SPACE,\n TAB,\n UP_ARROW,\n defaultOffsetY,\n getKbqSelectDynamicMultipleError,\n getKbqSelectNonArrayValueError,\n getKbqSelectNonFunctionValueError,\n getSelectAllState,\n isInput,\n isSelectAll,\n isUndefined,\n kbqResolvePanelMaxHeightToken,\n kbqSelectAnimations,\n kbqSiblingPopupProvider,\n ruRULocaleData,\n runCompareWith,\n shouldSelectSearchText,\n toggleSelectAll\n} from '@koobiq/components/core';\nimport {\n KBQ_FORM_FIELD,\n KbqCleaner,\n KbqFormFieldControl,\n kbqCleanerFactoryProvider\n} from '@koobiq/components/form-field';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqTag } from '@koobiq/components/tags';\nimport { SizeXxs as SelectSizeMultipleContentGap } from '@koobiq/design-tokens';\nimport { BehaviorSubject, EMPTY, Observable, Subject, Subscription, defer, fromEvent, merge } from 'rxjs';\nimport {\n auditTime,\n debounceTime,\n delay,\n distinctUntilChanged,\n filter,\n map,\n startWith,\n switchMap,\n take,\n takeUntil\n} from 'rxjs/operators';\n\nlet nextUniqueId = 0;\n\nconst SCROLLED_TO_BOTTOM_THROTTLE_TIME = 100;\n\n/** Change event object that is emitted when the select value has changed. */\nexport class KbqSelectChange {\n constructor(\n public source: KbqSelect,\n public value: any\n ) {}\n}\n\n/**\n * Select panel width type.\n * @deprecated Use `KbqPanelWidth` from `@koobiq/components/core` instead.\n */\nexport type KbqSelectPanelWidth = KbqPanelWidth;\n\n/** Options for the `kbq-select` that can be configured using the `KBQ_SELECT_OPTIONS` injection token. */\nexport type KbqSelectOptions = Partial<{\n /**\n * Width of the panel. If set to `auto`, the panel will match the trigger width.\n * If set to null or an empty string, the panel will grow to match the longest option's text.\n */\n panelWidth: KbqPanelWidth;\n /**\n * Minimum width of the panel. If minWidth is larger than window width or property set to null, it will be ignored.\n */\n panelMinWidth: KbqPanelMinWidth;\n /**\n * Maximum width of the panel. Caps growth by content only — it never overrides the trigger width or an\n * explicit `panelWidth`. If null, the `--kbq-panel-size-width-max` token applies.\n */\n panelMaxWidth: KbqPanelMaxWidth;\n /**\n * Maximum height of the panel's scrollable option list. Does not include the search field or the\n * footer. If null, the `--kbq-select-panel-size-max-height` token applies.\n */\n panelMaxHeight: KbqPanelMaxHeight;\n /**\n * Whether to enable hiding search by default if options is less than minimum.\n *\n * - `'auto'` uses `KBQ_SELECT_SEARCH_MIN_OPTIONS_THRESHOLD` as min value.\n * - number - will enables search hiding and uses value as min.\n * @see KBQ_SELECT_SEARCH_MIN_OPTIONS_THRESHOLD\n */\n searchMinOptionsThreshold: 'auto' | number;\n}>;\n\n/** Injection token that can be used to provide the default options for the `kbq-select`. */\nexport const KBQ_SELECT_OPTIONS = new InjectionToken<KbqSelectOptions>('KBQ_SELECT_OPTIONS');\n\n/** Utility provider for `KBQ_SELECT_OPTIONS`. */\nexport const kbqSelectOptionsProvider = (options: KbqSelectOptions): Provider => {\n return {\n provide: KBQ_SELECT_OPTIONS,\n useValue: options\n };\n};\n\n/** Delay in milliseconds before displaying a result when there are no options. */\nexport const delayBeforeDisplayingResultWithoutOptions = 101;\n/** Minimum time in milliseconds to display the loading state. */\nexport const minimumTimeToDisplayLoading = 300;\n\n@Component({\n selector: 'kbq-select',\n imports: [\n CdkOverlayOrigin,\n KbqTag,\n NgTemplateOutlet,\n CdkMonitorFocus,\n CdkConnectedOverlay,\n KbqIconModule,\n KbqOption,\n KbqPseudoCheckbox\n ],\n templateUrl: 'select.html',\n styleUrls: ['./select.scss', './select-tokens.scss'],\n providers: [\n { provide: KbqFormFieldControl, useExisting: KbqSelect },\n kbqCleanerFactoryProvider(() => {\n const select = inject(KbqSelect);\n\n return {\n get control() {\n return select;\n },\n get keydownTarget() {\n return select.elementRef.nativeElement;\n },\n clearByEscape: false,\n clear: () => select.clear()\n };\n }),\n { provide: KBQ_OPTION_PARENT_COMPONENT, useExisting: KbqSelect },\n { provide: KBQ_PARENT_POPUP, useExisting: KbqSelect },\n kbqSiblingPopupProvider(KbqSelect)\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[attr.tabindex]': 'tabIndex',\n '[attr.disabled]': 'disabled || null',\n class: 'kbq-select',\n '[class.kbq-select_multiple]': 'multiple',\n '[class.kbq-select_multiline]': 'multiline()',\n '[class.kbq-disabled]': 'disabled',\n '[class.kbq-invalid]': 'errorState',\n '(click)': 'toggle()',\n '(keydown)': 'handleKeydown($event)',\n '(focus)': 'onFocus()',\n '(blur)': 'onBlur()'\n },\n animations: [\n kbqSelectAnimations.transformPanel,\n kbqSelectAnimations.fadeInContent\n ],\n exportAs: 'kbqSelect'\n})\nexport class KbqSelect\n extends KbqAbstractSelect\n implements\n AfterContentInit,\n OnDestroy,\n OnInit,\n DoCheck,\n ControlValueAccessor,\n KbqFormFieldControl<any>,\n CanUpdateErrorState,\n KbqSiblingPopup\n{\n private readonly _changeDetectorRef = inject(ChangeDetectorRef);\n private readonly _ngZone = inject(NgZone);\n private readonly _renderer = inject(Renderer2);\n defaultErrorStateMatcher = inject(ErrorStateMatcher);\n elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private overlayContainer = inject(OverlayContainer);\n private readonly _dir = inject(Directionality, { optional: true });\n parentForm = inject(NgForm, { optional: true });\n parentFormGroup = inject(FormGroupDirective, { optional: true });\n private readonly parentFormField = inject(KBQ_FORM_FIELD, { host: true, optional: true })!;\n ngControl = inject(NgControl, { self: true, optional: true });\n private readonly scrollStrategyFactory = inject(KBQ_SELECT_SCROLL_STRATEGY);\n protected localeService? = inject<KbqLocaleService>(KBQ_LOCALE_SERVICE, { optional: true });\n /** @docs-private */\n protected readonly destroyRef = inject(DestroyRef);\n\n protected readonly isBrowser = inject(Platform).isBrowser;\n\n protected readonly defaultOptions = inject(KBQ_SELECT_OPTIONS, { optional: true });\n\n /** Whether the component is in an error state. */\n errorState: boolean = false;\n /**\n * Emits whenever the component state changes and should cause the parent\n * form-field to update. Implemented as part of `KbqFormFieldControl`.\n * @docs-private\n */\n readonly stateChanges = new Subject<void>();\n\n /** A name for this control that can be used by `kbq-form-field`. */\n controlType = 'select';\n\n hiddenItems: number = 0;\n\n /** The last measured value for the trigger's client bounding rect. */\n triggerRect: DOMRect;\n\n /** The cached font-size of the trigger element in pixels. */\n triggerFontSize = 0;\n\n /** Deals with the selection logic. Manages selected options and their states. */\n selectionModel: SelectionModel<KbqOptionBase>;\n\n /** Previously selected options before the current selection was made. */\n previousSelectionModelSelected: KbqOptionBase[] = [];\n\n /**\n * Detached copies of the selected options, captured while the option was still rendered.\n * `cdk-virtual-scroll` recycles option views, so a `KbqOption` kept in `selectionModel` can\n * silently start carrying another item's value and label — the copy preserves the original ones.\n */\n private readonly selectedOptionCopies = new WeakMap<KbqOptionBase, KbqVirtualOption>();\n\n /** Manages keyboard events for options in the panel. */\n keyManager: ActiveDescendantKeyManager<KbqOption>;\n\n /** The value of the select panel's transform-origin property for animations. */\n transformOrigin: string = 'top';\n\n /** Emits when the panel element is finished transforming in. */\n panelDoneAnimatingStream = new Subject<string>();\n\n /** Strategy that will be used to handle scrolling while the select panel is open. */\n scrollStrategy = this.scrollStrategyFactory();\n\n /**\n * The y-offset of the overlay panel in relation to the trigger.\n *\n * @deprecated noop. The trigger↔panel gap is now controlled by the `--kbq-connected-overlay-gap` CSS\n * variable (transparent padding inside the pane via the `kbq-connected-overlay_below/_above` panel\n * classes), not by a physical overlay offset — so setting this has no effect. Will be removed in 21.0.0.\n */\n offsetY = 0;\n\n /**\n * Minimum space to keep between the overlay and the viewport edge.\n * At least `defaultOffsetY` so CDK's fit check — which runs before the `kbq-connected-overlay_below/_above`\n * gap padding is applied to the pane — stays conservative enough to absorb that padding instead of\n * letting the panel overflow the viewport by the size of the gap.\n */\n protected readonly viewportMargin = defaultOffsetY;\n\n /**\n * Opens the panel below the trigger, falling back to above it when it does not fit.\n *\n * A third position is appended at runtime by `updatePanelAnchor`: a multiline trigger that has grown\n * taller than the panel gets it anchored to its first row and drawn over the rest of it.\n */\n positions: ConnectedPosition[] = [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n panelClass: KBQ_CONNECTED_OVERLAY_BELOW_CLASS\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n panelClass: KBQ_CONNECTED_OVERLAY_ABOVE_CLASS\n }\n ];\n\n /**\n * Trigger - is a clickable field to open select dropdown panel\n */\n readonly trigger = viewChild<ElementRef>('trigger');\n\n /** Reference to the overlay panel element. */\n readonly panel = viewChild<ElementRef>('panel');\n\n /** Reference to the container element that holds the options. */\n readonly optionsContainer = viewChild.required<ElementRef>('optionsContainer');\n\n /** Reference to the built-in \"select all\" row, rendered only while `selectAll` is on. */\n readonly selectAllOption = viewChild(KbqOption);\n\n /** Reference to the CDK connected overlay directive. */\n @ViewChild(CdkConnectedOverlay, { static: false }) overlayDir: CdkConnectedOverlay;\n\n /** Reference to the optional footer element in the panel. */\n readonly footer = contentChild(KbqSelectFooter, { read: ElementRef });\n\n /** Reference to the CDK virtual scroll directive for virtual scrolling support. */\n readonly cdkVirtualForOf = contentChild(CdkVirtualForOf);\n\n /** Reference to the CDK virtual scroll viewport for tracking scroll position in virtual mode. */\n readonly virtualScrollViewport = contentChild(CdkVirtualScrollViewport);\n\n /** Query list of tags displayed in multiple selection mode. */\n @ViewChildren(KbqTag) tags: QueryList<KbqTag>;\n\n /** User-supplied override of the trigger element for custom rendering. */\n readonly customTrigger = contentChild(KbqSelectTrigger);\n\n /** User-supplied matcher component for custom value matching logic. */\n readonly customMatcher = contentChild(KbqSelectMatcher);\n\n /** Custom template reference for rendering tag content. */\n readonly customTagTemplateRef = contentChild('kbqSelectTagContent', { read: TemplateRef });\n\n /**\n * Reference to the optional cleaner element for clearing selection.\n * @docs-private\n */\n readonly cleaner = contentChild(KbqCleaner, { descendants: false });\n\n /** All of the defined select options. */\n @ContentChildren(KbqOption, { descendants: true }) options: QueryList<KbqOption>;\n\n /**\n * Everything the key manager navigates: the built-in \"select all\" row first, then `options`.\n *\n * The row is rendered by the select's own template, so it never reaches the `options` content query.\n * Kept as a separate list rather than folded into `options` because `options` is public API — the\n * filter-bar pipes, `firstFiltered` and the tallies below all mean \"the options the consumer\n * projected\", and a synthetic entry there would quietly corrupt every one of them.\n * @docs-private\n */\n readonly navigableOptions = new QueryList<KbqOption>();\n\n /** All of the defined groups of options. */\n readonly optionGroups = contentChildren(KbqOptgroup);\n\n /** Reference to the optional search component. */\n readonly search = contentChild(KbqSelectSearch);\n\n /** Reference to the optional empty search result component. */\n readonly searchEmpty = contentChild(KbqSelectSearchEmptyResult);\n\n /** Template string for hidden items text. Supports {{ number }} placeholder. */\n // TODO: Skipped for migration because:\n // Your application code writes to the input. This prevents migration.\n @Input() hiddenItemsText: string = '+{{ number }}';\n\n /** Label of the \"select all\" row. Kept in step with the locale service. */\n protected selectAllText: string = ruRULocaleData.select.selectAll;\n\n /** Determines whether preselected values are displayed. */\n readonly showPreselectedValues = input<boolean>(false);\n\n /**\n * Specifies the maximum number of trigger values allowed.\n * This constant limits the size of the trigger values array to ensure performance\n * and prevent excessive memory usage.\n * A value of `0` indicates that there is no limit.\n */\n readonly triggerValuesLimit = input<number>(0);\n\n /** Classes to be passed to the select panel. Supports the same syntax as the `[class]` binding. */\n readonly panelClass = input<\n | string\n | string[]\n | Set<string>\n | {\n [key: string]: any;\n }\n >(undefined!);\n\n /** Classes to be passed to the overlay backdrop. */\n readonly backdropClass = input<string>('cdk-overlay-transparent-backdrop');\n\n /** Object used to control when error messages are shown. */\n // TODO: Skipped for migration because:\n // This input overrides a field from a superclass, while the superclass field\n // is not migrated.\n @Input() errorStateMatcher: ErrorStateMatcher;\n\n /**\n * Function used to sort the values in a select in multiple mode.\n * Follows the same logic as `Array.prototype.sort`.\n */\n readonly sortComparator = input<(a: KbqOptionBase, b: KbqOptionBase, options: KbqOptionBase[]) => number>(\n undefined!\n );\n\n /**\n * Whether to use a multiline matcher or not. Default is false.\n * When true, allows multiple lines of text in the selected value display.\n */\n readonly multiline = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /**\n * Controls when the search functionality is displayed based on the number of available options.\n *\n * Automatically enables search hiding if value provided, even if `defaultOptions.searchMinOptionsThreshold` is provided.\n * @default undefined\n */\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input()\n set searchMinOptionsThreshold(value: 'auto' | number | undefined) {\n this._searchMinOptionsThreshold =\n this.resolveSearchMinOptionsThreshold(value) ??\n this.resolveSearchMinOptionsThreshold(this.defaultOptions?.searchMinOptionsThreshold);\n }\n\n get searchMinOptionsThreshold(): number | undefined {\n return this._searchMinOptionsThreshold;\n }\n\n private _searchMinOptionsThreshold = this.resolveSearchMinOptionsThreshold(\n this.defaultOptions?.searchMinOptionsThreshold\n );\n\n /** Combined stream of all of the child options' change events. */\n readonly optionSelectionChanges: Observable<KbqOptionSelectionChange> = defer(() => {\n if (this.options) {\n return merge(\n ...this.options.map((option) => option.onSelectionChange),\n this.options.changes.pipe(\n switchMap((list: QueryList<KbqOption>) =>\n list.length ? merge(...list.map((option) => option.onSelectionChange)) : EMPTY\n )\n ),\n this.selectionModel.changed.pipe(\n startWith(null as any),\n switchMap(() => {\n const optionsSet = new Set(this.options.toArray());\n const virtualSelected = this.selectionModel.selected.filter(\n (option) => !optionsSet.has(option as KbqOption)\n );\n\n return virtualSelected.length\n ? merge(...virtualSelected.map((option) => option.onSelectionChange))\n : EMPTY;\n })\n )\n );\n }\n\n return this._ngZone.onStable.asObservable().pipe(\n take(1),\n switchMap(() => this.optionSelectionChanges)\n );\n }) as Observable<KbqOptionSelectionChange>;\n\n /**\n * Event emitted when the select panel has been toggled. Emits true when opened, false when closed.\n * Also serves as the `openedChange` member of the `KbqSiblingPopup` contract — a tooltip sharing\n * this element's host reacts to it, so its emission timing (gated on `panelDoneAnimatingStream`, see\n * `ngOnInit`) matters beyond this output's original consumers.\n */\n @Output() readonly openedChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /** Event emitted before the select panel starts opening. */\n readonly beforeOpened = output<void>();\n\n /** Event emitted when the select has been opened. */\n @Output('opened') readonly openedStream: Observable<void> = this.openedChange.pipe(\n filter((o) => o),\n map(() => {})\n );\n\n /** Event emitted when the select has been closed. */\n @Output('closed') readonly closedStream: Observable<void> = this.openedChange.pipe(\n filter((o) => !o),\n map(() => {})\n );\n\n /** Event emitted when the selected value has been changed by the user. */\n readonly selectionChange = output<KbqSelectChange>();\n\n /**\n * Event emitted when all options are selected or deselected via the Ctrl/Cmd + A shortcut.\n * Not emitted when a custom `selectAllHandler` is supplied — the handler owns the behaviour then.\n */\n readonly onSelectAll = output<KbqSelectAllEvent<KbqOption, KbqSelect>>();\n\n /**\n * Event that emits whenever the raw value of the select changes. This is here primarily\n * to facilitate the two-way binding for the `value` input.\n * @docs-private\n */\n readonly valueChange = output<any>();\n\n /**\n * Distance in pixels from the bottom of the options panel at which `scrolledToBottom` fires.\n * Default `0` — emits only when the panel is fully scrolled to the bottom.\n */\n readonly scrolledToBottomOffset = input<number, unknown>(0, { transform: numberAttribute });\n\n /** Emits when the options panel is scrolled to (or within `scrolledToBottomOffset` of) the bottom. */\n readonly scrolledToBottom = output<void>();\n\n /**\n * Whether the overlay should have a backdrop.\n * When true, clicking the backdrop will close the select.\n */\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input()\n get hasBackdrop(): boolean {\n return this._hasBackdrop;\n }\n\n set hasBackdrop(value: boolean) {\n this._hasBackdrop = coerceBooleanProperty(value);\n }\n\n private _hasBackdrop: boolean = false;\n\n /**\n * Placeholder text to be shown when no value is selected.\n * Displayed in the trigger when the select is closed and no value is selected.\n */\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input()\n get placeholder(): string {\n return this._placeholder;\n }\n\n set placeholder(value: string) {\n this._placeholder = value;\n\n this.stateChanges.next();\n }\n\n private _placeholder: string;\n\n /**\n * Whether the select is required. Affects validation and display of placeholder.\n */\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input()\n get required(): boolean {\n return this._required;\n }\n\n set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n\n this.stateChanges.next();\n }\n\n private _required: boolean = false;\n\n /**\n * Whether multiple options can be selected.\n * Note: This cannot be changed dynamically after initialization.\n */\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input({ transform: booleanAttribute })\n get multiple(): boolean {\n return this._multiple;\n }\n\n set multiple(value: boolean) {\n if (this.selectionModel) {\n throw getKbqSelectDynamicMultipleError();\n }\n\n this._multiple = value;\n }\n\n private _multiple: boolean = false;\n\n /**\n * Function to compare the option values with the selected values.\n * The first argument is a value from an option.\n * The second is a value from the selection.\n * Should return true if the values match.\n * Defaults to strict equality comparison.\n */\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input()\n get compareWith() {\n return this._compareWith;\n }\n\n set compareWith(fn: (o1: any, o2: any) => boolean) {\n if (typeof fn !== 'function') {\n throw getKbqSelectNonFunctionValueError();\n }\n\n this._compareWith = fn;\n\n if (this.selectionModel) {\n // A different comparator means the selection could change.\n this.initializeSelection();\n }\n }\n\n /**\n * Factory used to construct a `KbqVirtualOption` for selected values whose\n * `KbqOption` is not currently rendered (e.g. virtual scroll out of viewport,\n * programmatically set initial value, `showPreselectedValues`).\n *\n * Required when option values are objects so the trigger (and tags in\n * multiple mode) can render a human-readable label. Also lets consumers\n * customise per-value `disabled` state or any future `KbqVirtualOption`\n * fields without adding new `@Input`s.\n *\n * Defaults to `new KbqVirtualOption(value, this.disabled)`, which is correct\n * for primitive values where `value` itself is the display label.\n */\n readonly virtualOptionFactory = input<(value: any) => KbqVirtualOption>();\n\n /** When `true`, a repeated Ctrl/Cmd+A deselects all options. Off by default (Ctrl+A only selects). */\n readonly selectAllToggle = input(false, { transform: booleanAttribute });\n\n /**\n * Whether to render the \"select all\" master checkbox above the options. Multiple selection only.\n *\n * The row acts on the options the user can actually toggle — rendered, enabled and selectable. Since\n * search filtering removes options from the DOM, \"select all\" under an active query selects only the\n * matches. Enabling it also makes Ctrl/Cmd + A a two-way toggle, so the shortcut and the checkbox\n * never disagree (`selectAllToggle` is implied).\n */\n readonly selectAll = input(false, { transform: booleanAttribute });\n\n /**\n * Function for handling the Ctrl + A (select all) keyboard combination.\n * By default, the internal handler selects all options.\n * @param event The keyboard event that triggered the handler.\n * @param select Reference to this select component.\n */\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input()\n get selectAllHandler() {\n return this._selectAllHandler;\n }\n\n set selectAllHandler(fn: (event: KeyboardEvent, select: KbqSelect) => void) {\n if (typeof fn !== 'function') {\n throw Error('`selectAllHandler` must be a function.');\n }\n\n this._selectAllHandler = fn;\n }\n\n /**\n * Width of the panel. If set to `auto`, the panel will match the trigger width, but will never be\n * narrower than `panelMinWidth`. If set to null or an empty string, the panel will grow to match the\n * longest option's text. Any other value is used as an exact width, and `panelMinWidth` is not applied.\n */\n readonly panelWidth = input<KbqPanelWidth>(this.defaultOptions?.panelWidth || null);\n\n /**\n * Minimum width of the panel in pixels.\n * If minWidth is larger than window width, it will be ignored.\n */\n readonly panelMinWidth = input<KbqPanelMinWidth, unknown>(\n this.defaultOptions?.panelMinWidth === undefined\n ? KBQ_PANEL_DEFAULT_MIN_WIDTH\n : this.defaultOptions.panelMinWidth,\n { transform: numberAttribute }\n );\n\n /**\n * Maximum width of the panel in pixels. Caps how far the panel grows with its content — it never makes\n * the panel narrower than the trigger, and never clamps an explicit `panelWidth`.\n * When null, the `--kbq-panel-size-width-max` token applies.\n */\n readonly panelMaxWidth = input<KbqPanelMaxWidth, unknown>(\n this.defaultOptions?.panelMaxWidth === undefined ? null : this.defaultOptions.panelMaxWidth,\n { transform: numberAttribute }\n );\n\n /**\n * Maximum height of the panel's scrollable option list, in pixels. Applied as the\n * `--kbq-select-panel-size-max-height` custom property on the panel, so it also drives the pinned height\n * of a `cdk-virtual-scroll-viewport` — with virtual scroll the value is an exact height, not a cap.\n *\n * The search field and the footer sit outside the scrollable area and add to the panel's total height.\n * When null, the token default (256px) applies.\n */\n readonly panelMaxHeight = input<KbqPanelMaxHeight, unknown>(\n this.defaultOptions?.panelMaxHeight === undefined ? null : this.defaultOptions.panelMaxHeight,\n { transform: numberAttribute }\n );\n\n /**\n * `panelMaxHeight` rendered as a CSS length for the `--kbq-select-panel-size-max-height` token.\n * A non-finite value (e.g. `null`) leaves the stylesheet default in place.\n * @docs-private\n */\n protected readonly panelMaxHeightToken = computed(() => kbqResolvePanelMaxHeightToken(this.panelMaxHeight()));\n\n /** Value of the select control. Can be a single value or array of values for multiple selection. */\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input()\n get value(): any {\n return this._value;\n }\n\n set value(newValue: any) {\n if (newValue !== this._value) {\n this.writeValue(newValue);\n this._value = newValue;\n }\n }\n\n private _value: any;\n\n /**\n * Unique identifier for the select component.\n * Auto-generates an ID if not provided.\n */\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input()\n get id(): string {\n return this._id;\n }\n\n set id(value: string) {\n this._id = value || this.uid;\n this.stateChanges.next();\n }\n\n private _id: string;\n\n /**\n * Sets the tabIndex of the select element.\n * Automatically set to -1 when disabled.\n */\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input({ transform: numberAttribute })\n get tabIndex(): number {\n return this.disabled ? -1 : this._tabIndex;\n }\n\n set tabIndex(value: number) {\n this._tabIndex = value;\n }\n\n private _tabIndex = 0;\n\n /**\n * Whether the select is disabled.\n * When disabled, the select cannot be opened and its value cannot be changed.\n */\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input({ transform: booleanAttribute })\n get disabled(): boolean {\n return this._disabled;\n }\n\n set disabled(value: boolean) {\n if (value !== this.disabled) {\n this._disabled = value;\n\n if (this.parentFormField) {\n Promise.resolve().then(() => {\n if (this._disabled) {\n this.parentFormField.stopFocusMonitor();\n } else {\n this.parentFormField.runFocusMonitor();\n }\n });\n }\n\n // Let the parent form field know to run change detection when the disabled state changes.\n this.stateChanges.next();\n }\n }\n\n private _disabled: boolean = false;\n\n /** Whether the select is focused. */\n get focused(): boolean {\n return this._focused || this.panelOpen;\n }\n\n set focused(value: boolean) {\n this._focused = value;\n }\n\n /** Whether the select panel is currently open. */\n panelOpen = false;\n\n /** Whether the overlay panel is currently on screen. Part of the `KbqSiblingPopup` contract. */\n get isAttached(): boolean {\n return this.panelOpen;\n }\n\n /** Whether virtual scrolling is enabled for the options panel. */\n withVirtualScroll: boolean;\n\n private _focused = false;\n\n /** Whether the search returned no results. */\n get isEmptySearchResult(): boolean {\n const search = this.search();\n\n return !!search && this.options?.filter((option) => option.selectable()).length === 0 && !!search.value();\n }\n\n /**\n * Whether the \"select all\" row is currently rendered.\n *\n * Unsupported whenever a selected value can exist as a synthetic `KbqVirtualOption` instead of a\n * real, projected `KbqOption` (see `selectValue`) — under `withVirtualScroll` or\n * `showPreselectedValues`. `selectAllTargets` can only see `this.options`, the currently-rendered\n * `KbqOption`s, so a checkbox built on top of it would misreport \"everything selected\" after only\n * touching the values that happen to have a rendered option.\n */\n protected get showSelectAll(): boolean {\n return (\n this.selectAll() &&\n this.multiSelection &&\n !this.isEmptySearchResult &&\n !this.withVirtualScroll &&\n !this.showPreselectedValues()\n );\n }\n\n /** Whether every option \"select all\" can act on is selected. */\n get allOptionsSelected(): boolean {\n const targets = this.selectAllTargets;\n\n // `[].every()` is `true`: with nothing for \"select all\" to act on, claiming \"all selected\" would\n // send the toggle down the deselect branch and check the master checkbox over an untouchable list.\n return targets.length > 0 && targets.every((option) => option.selected);\n }\n\n /** State of the \"select all\" master checkbox. */\n get selectAllState(): KbqPseudoCheckboxState {\n return getSelectAllState(this.selectAllAdapter);\n }\n\n /**\n * Options \"select all\" acts on, and the ones its checkbox state is derived from.\n *\n * `KbqOption.select()` and `deselect()` do not consult `disabled` or `selectable()`, so the\n * filtering has to happen here rather than being left to the options themselves.\n */\n private get selectAllTargets(): KbqOption[] {\n return this.options?.filter((option) => option.selectable() && !option.disabled) ?? [];\n }\n\n /** Adapter shared by the master checkbox and the Ctrl/Cmd + A handler, so the two cannot drift apart. */\n private get selectAllAdapter(): KbqSelectAllAdapter<KbqOption> {\n return {\n items: this.selectAllTargets,\n isSelectable: () => true,\n isSelected: (option) => option.selected,\n setSelected: (option, selected) => (selected ? option.select() : option.deselect())\n };\n }\n\n /**\n * Whether the cleaner (clear button) should be shown.\n * @docs-private\n */\n get canShowCleaner(): boolean {\n return !!this.cleaner()?.canShow;\n }\n\n /** Returns the currently selected option(s). Single value or array for multiple selection. */\n get selected(): KbqOptionBase | KbqOptionBase[] {\n const selected = this.selectionModel.selected;\n\n return this.multiSelection\n ? selected.map((option) => this.resolveSelectedOption(option))\n : selected[0] && this.resolveSelectedOption(selected[0]);\n }\n\n /** Returns the display value for the trigger element. */\n get triggerValue(): string {\n if (this.empty) return '';\n\n return this.resolveSelectedOption(this.selectionModel.selected[0]).viewValue;\n }\n\n /** Returns all selected options in display order. */\n get triggerValues(): KbqOptionBase[] {\n if (this.empty) {\n return [];\n }\n\n const selectedOptions = this.selectionModel.selected.map((option) => this.resolveSelectedOption(option));\n\n if (this.isRtl()) {\n selectedOptions.reverse();\n }\n\n return this.triggerValuesLimit() > 0 ? selectedOptions.slice(0, this.triggerValuesLimit()) : selectedOptions;\n }\n\n /** Whether no option is currently selected. */\n get empty(): boolean {\n return !!this.selectionModel?.isEmpty();\n }\n\n /** Whether there are no options available. */\n get noOptions(): boolean {\n return this.options?.length === 0;\n }\n\n /** Returns the first selected option that is not disabled. */\n get firstSelected(): KbqOptionBase | null {\n return (\n this.selectionModel.selected\n .map((option) => this.resolveSelectedOption(option))\n .find((option) => !option.disabled) || null\n );\n }\n\n /** Whether the first selected option is filtered (not visible in the list). */\n get firstFiltered(): boolean {\n return !this.options.find((option: KbqOption) => option === this.firstSelected);\n }\n\n /** @docs-private */\n get colorForState(): KbqComponentColors {\n const hasLegacyValidateDirective = this.elementRef.nativeElement.classList.contains(\n 'kbq-control_has-validate-directive'\n );\n\n if (this.disabled) return KbqComponentColors.Empty;\n\n return (hasLegacyValidateDirective && this.ngControl?.invalid) || this.errorState\n ? KbqComponentColors.Error\n : KbqComponentColors.ContrastFade;\n }\n\n /** Whether multiple choice is enabled. True if multiple or multiline mode is active. */\n get multiSelection(): boolean {\n return this.multiple || this.multiline();\n }\n\n /** Whether a \"select all\" batch is running, so the per-option changes propagate only once. */\n private selectAllInProgress = false;\n\n /** Subscription to the close event of the overlay. */\n private closeSubscription = Subscription.EMPTY;\n\n /** Subscription to the options panel scroll event used by `scrolledToBottom`. */\n private scrollSubscription = Subscription.EMPTY;\n\n /** The scroll offset the panel is restored to when it attaches — the list always opens at the top. */\n private scrollTop = 0;\n\n /** Unique id for this input. Auto-incremented for each instance. */\n private readonly uid = `kbq-select-${nextUniqueId++}`;\n\n /** Subject that emits when the component visibility changes. */\n private visibleChanges: BehaviorSubject<boolean> = new BehaviorSubject(false);\n\n /** Origin element for the overlay panel positioning. */\n protected overlayOrigin?: CdkOverlayOrigin | ElementRef;\n\n /** Flag indicating if the dropdown class has been added to the overlay container. */\n private classAddedToOverlayContainer: boolean = false;\n\n private openPanelTimeout: ReturnType<typeof setTimeout>;\n\n constructor() {\n super();\n\n this.localeService?.changes.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(this.updateLocaleParams);\n\n // The \"select all\" row only exists while the panel is attached, so the key manager's list has to\n // be rebuilt whenever the view query resolves or drops it — `options.changes` alone never fires\n // for it.\n effect(() => {\n this.selectAllOption();\n\n this.syncNavigableOptions();\n });\n\n if (this.ngControl) {\n // Note: we provide the value accessor through here, instead of\n // the `providers` to avoid running into a circular import.\n this.ngControl.valueAccessor = this;\n }\n\n // Force setter to be called in case id was not specified.\n this.id = this.id;\n\n afterNextRender(() => {\n if (this.multiple && !this.multiline()) {\n merge(fromEvent(this.window, 'resize'), this.tags.changes)\n .pipe(delay(0), debounceTime(50), takeUntilDestroyed(this.destroyRef))\n .subscribe(this.calculateHiddenItems);\n }\n });\n }\n\n /** Lifecycle hook called after component initialization. Initializes selection model and subscriptions. */\n ngOnInit() {\n this.selectionModel = new SelectionModel(this.multiSelection);\n this.stateChanges.next();\n\n // We need `distinctUntilChanged` here, because some browsers will\n // fire the animation end event twice for the same animation. See:\n // https://github.com/angular/angular/issues/24084\n this.panelDoneAnimatingStream\n .pipe(distinctUntilChanged(), takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n if (this.panelOpen) {\n this.scrollTop = 0;\n\n const search = this.search();\n\n if (search) {\n search.focus();\n }\n\n this.openedChange.emit(true);\n } else {\n this.openedChange.emit(false);\n this._changeDetectorRef.markForCheck();\n }\n });\n\n merge(this.optionSelectionChanges, this.visibleChanges)\n // `delay(0)` rather than a `setTimeout` inside the subscriber: `takeUntilDestroyed` cancels a\n // scheduled emission, but not a timer the subscriber has already started, which would then run\n // its measurements against a destroyed view.\n .pipe(distinctUntilChanged(), delay(0), takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.calculateHiddenItems();\n\n if (this.multiline()) {\n // A multiline trigger grows with every selected option, and this is the one signal\n // guaranteed to arrive for it. The trigger's height has changed whatever the anchor\n // decides, so the panel is repositioned either way.\n this.updatePanelAnchor();\n this.setOverlayPosition();\n }\n });\n }\n\n /** Lifecycle hook for change detection. Updates visibility and error state. */\n ngDoCheck() {\n this.visibleChanges.next(this.isVisible());\n\n if (this.ngControl) {\n this.updateErrorState();\n }\n }\n\n /** Lifecycle hook after content initialization. Sets up key manager and option subscriptions. */\n ngAfterContentInit() {\n this.withVirtualScroll = !!this.cdkVirtualForOf();\n this.initKeyManager();\n\n this.selectionModel.changed.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {\n event.added.forEach((option) => option.select());\n event.removed.forEach((option) => option.deselect());\n });\n\n this.options.changes.pipe(startWith(null), takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.syncNavigableOptions();\n this.resetOptions();\n this.initializeSelection();\n });\n\n this.search()\n ?.changes.pipe(\n takeUntilDestroyed(this.destroyRef),\n delay(0),\n // Only while the panel is open. `beforeOpened` gives consumers a chance to (re)load\n // options, and with no options the panel itself opens with a delay, so search changes\n // can land while the panel is still closed. Moving the highlight then is read as\n // keyboard navigation of a closed select and silently overwrites the value.\n filter(() => this.panelOpen && this.isActiveItemStale())\n )\n .subscribe(() => this.keyManager.setFirstItemActive());\n }\n\n /** Lifecycle hook when component is destroyed. Cleans up subscriptions. */\n ngOnDestroy() {\n this.stateChanges.complete();\n this.closeSubscription.unsubscribe();\n this.unsubscribeFromPanelResize();\n\n clearTimeout(this.openPanelTimeout);\n }\n\n /** Updates the error state based on the error state matcher. */\n updateErrorState() {\n const oldState = this.errorState;\n const parent = this.parentFormGroup || this.parentForm;\n const matcher = this.errorStateMatcher || this.defaultErrorStateMatcher;\n const control = this.ngControl ? (this.ngControl.control as UntypedFormControl) : null;\n const newState = matcher.isErrorState(control, parent);\n\n if (newState !== oldState) {\n this.errorState = newState;\n this.stateChanges.next();\n }\n }\n\n /**\n * Formats the hidden items text with the number of hidden items.\n * @param hiddenItemsText Template string with {{ number }} placeholder.\n * @param hiddenItems Number of hidden items to display.\n * @returns Formatted string with the number of hidden items.\n */\n @Input()\n hiddenItemsTextFormatter(hiddenItemsText: string, hiddenItems: number): string {\n return hiddenItemsText.replace('{{ number }}', hiddenItems.toString());\n }\n\n /**\n * Selects every option \"select all\" can act on, or deselects them all when they are already selected.\n *\n * Backs both the master checkbox and Ctrl/Cmd + A while `selectAll` is on. Emits a single\n * `selectionChange` for the whole batch, followed by `onSelectAll`.\n */\n protected toggleSelectAll(): void {\n const targets = this.selectAllTargets;\n\n if (!targets.length) return;\n\n // The per-option selection events are what keep `selectionModel` in step, but each of them would\n // otherwise propagate a value of its own. Suppressing that and propagating once at the end turns\n // N events into the single change the user actually performed.\n this.selectAllInProgress = true;\n\n try {\n toggleSelectAll(this.selectAllAdapter, { allowDeselect: true });\n } finally {\n this.selectAllInProgress = false;\n }\n\n this.propagateChanges();\n this.stateChanges.next();\n\n this.onSelectAll.emit(new KbqSelectAllEvent(this, targets, this.allOptionsSelected));\n }\n\n /**\n * Clears the current selection.\n * @docs-private\n */\n clear(): void {\n this.selectionModel.clear();\n this.keyManager.setActiveItem(-1);\n\n this.propagateChanges();\n }\n\n /**\n * Clears the current selection.\n * @deprecated Activate the projected `KbqCleaner` instead.\n * @docs-private\n */\n clearValue(event: Event): void {\n const cleaner = this.cleaner();\n\n if (cleaner) {\n cleaner.clear(event);\n } else {\n event.stopPropagation();\n event.preventDefault();\n this.clear();\n this.focus();\n }\n }\n\n /** `View -> model callback called when value changes` */\n onChange: (value: any) => void = () => {};\n\n /** `View -> model callback called when select has been touched` */\n onTouched = () => {};\n\n /** Resets the search component if present. */\n resetSearch(): void {\n const search = this.search();\n\n if (!search) {\n return;\n }\n\n search.reset();\n /*\n todo the incorrect behaviour of keyManager is possible here\n to avoid first item selection (to provide correct options flipping on closed select)\n we should process options update like it is the first options appearance\n */\n search.isSearchChanged = false;\n }\n\n /** Toggles the overlay panel open or closed. */\n toggle(): void {\n if (this.panelOpen) {\n this.close();\n } else {\n this.open();\n }\n }\n\n /**\n * Triggers the opening of the panel component.\n * If the component is disabled or the panel is already open, the call is ignored.\n * Otherwise, the (beforeOpened) event is emitted.\n * When no options are available, the panel is opened after a short delay;\n * if options exist, it opens immediately.\n */\n open(): void {\n if (this.disabled || this.panelOpen) return;\n\n this.beforeOpened.emit();\n\n if (this.noOptions) {\n clearTimeout(this.openPanelTimeout);\n\n this.openPanelTimeout = setTimeout(() => this.openPanel(), delayBeforeDisplayingResultWithoutOptions);\n } else {\n this.openPanel();\n }\n }\n\n /**\n * Internal method to open the panel. Handles overlay positioning and sizing.\n * Sets up the overlay dimensions based on trigger size and configured options.\n */\n openPanel() {\n const trigger = this.trigger();\n\n if (!trigger || !this.keyManager) return;\n\n // add check for form-field bounding rectangles, since it adds extra padding around the trigger\n this.triggerRect = (\n this.parentFormField?.getConnectedOverlayOrigin().nativeElement || trigger.nativeElement\n ).getBoundingClientRect();\n\n // Note: The computed font-size will be a string pixel value (e.g. \"16px\").\n // `parseInt` ignores the trailing 'px' and converts this to a number.\n this.triggerFontSize = parseInt(this.window.getComputedStyle(trigger.nativeElement)['font-size']);\n\n // It's important that we read this as late as possible, because doing so earlier will\n // return a different element since it's based on queries in the form field which may\n // not have run yet. Also this needs to be assigned before we measure the overlay width.\n if (this.parentFormField) {\n this.overlayOrigin = this.parentFormField.getConnectedOverlayOrigin();\n }\n\n this.updateOverlayWidth(this.panelWidth(), this.panelMinWidth(), this.overlayOrigin ?? this.elementRef);\n\n this.panelOpen = true;\n\n this.keyManager.withHorizontalOrientation(null);\n this.highlightCorrectOption();\n this._changeDetectorRef.markForCheck();\n\n // Set the font size on the panel element once it exists.\n this._ngZone.onStable\n .asObservable()\n .pipe(take(1))\n .subscribe(() => {\n this.scrollActiveOptionIntoView();\n\n if (this.triggerFontSize && this.overlayDir.overlayRef && this.overlayDir.overlayRef.overlayElement) {\n this.overlayDir.overlayRef.overlayElement.style.fontSize = `${this.triggerFontSize}px`;\n }\n\n this.addClassToOverlayContainer();\n\n if (this.search()) {\n this.lockOverlayWidthForSearch(this.panel());\n }\n });\n }\n\n /** Closes the overlay panel and focuses the host element. */\n close(): void {\n if (!this.panelOpen) return;\n\n // the order of calls is important\n this.resetSearch();\n this.panelOpen = false;\n this.unsubscribeFromPanelResize();\n // Back to the two default sides, so the next open is not resolved against a first row that has since\n // changed height.\n this.positions = this.withOverlapPosition(this.positions, null) ?? this.positions;\n this.keyManager.withHorizontalOrientation(this.isRtl() ? 'rtl' : 'ltr');\n\n this._changeDetectorRef.markForCheck();\n this.onTouched();\n\n this.removeClassFromOverlayContainer();\n }\n\n /**\n * Sets the select's value. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n *\n * @param value New value to be written to the model.\n */\n writeValue(value: any): void {\n if (this.options) {\n this.setSelectionByValue(value);\n }\n }\n\n /**\n * Saves a callback function to be invoked when the select's value\n * changes from user input. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n *\n * @param fn Callback to be triggered when the value changes.\n */\n registerOnChange(fn: (value: any) => void): void {\n this.onChange = fn;\n }\n\n /**\n * Saves a callback function to be invoked when the select is blurred\n * by the user. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n *\n * @param fn Callback to be triggered when the component has been touched.\n */\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n registerOnTouched(fn: () => {}): void {\n this.onTouched = fn;\n }\n\n /**\n * Disables the select. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n *\n * @param isDisabled Sets whether the component is disabled.\n */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this._changeDetectorRef.markForCheck();\n this.stateChanges.next();\n }\n\n /**\n * Checks if the current direction is RTL (right-to-left).\n * @returns True if RTL mode is active, false otherwise.\n */\n isRtl(): boolean {\n return this._dir ? this._dir.value === 'rtl' : false;\n }\n\n /**\n * Handles all keyboard events for the select.\n * Delegates to appropriate handler based on panel state.\n * @param event The keyboard event to handle.\n */\n handleKeydown(event: KeyboardEvent): void {\n if (this.disabled) return;\n\n if (this.panelOpen) {\n this.handleOpenKeydown(event);\n } else {\n this.handleClosedKeydown(event);\n }\n }\n\n /** Handles focus event on the select element. */\n onFocus() {\n if (!this.disabled) {\n this._focused = true;\n\n this.stateChanges.next();\n }\n }\n\n /**\n * Calls the touched callback only if the panel is closed. Otherwise, the trigger will\n * \"blur\" to the panel when it opens, causing a false positive.\n */\n onBlur() {\n this._focused = false;\n\n if (!this.disabled && !this.panelOpen) {\n this.onTouched();\n this._changeDetectorRef.markForCheck();\n this.stateChanges.next();\n }\n }\n\n /**\n * Callback that is invoked when the overlay panel has been attached.\n * Sets up position change subscription and closing actions.\n */\n onAttached(): void {\n this.overlayDir.positionChange.pipe(take(1)).subscribe(() => {\n this._changeDetectorRef.detectChanges();\n this.setOverlayPosition();\n this.optionsContainer().nativeElement.scrollTop = this.scrollTop;\n\n this.updateScrollSize();\n this.subscribeToScrolledToBottom();\n // Deliberately out of this frame — see `reanchorPanel`. A microtask still lands before paint.\n queueMicrotask(() => this.reanchorPanel());\n });\n\n // The option list drives the panel's height, so a change to it can settle the anchor question\n // differently — and the panel is realigned on every such change regardless.\n this.options.changes.pipe(delay(1), takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.updatePanelAnchor();\n this.setOverlayPosition();\n });\n\n this.subscribeToPanelResize();\n this.closeSubscription = this.closingActions().subscribe(() => this.close());\n }\n\n /** Element the overlay is positioned and sized against. */\n protected getOverlayOriginElement(): HTMLElement | undefined {\n return this.parentFormField?.getConnectedOverlayOrigin().nativeElement ?? this.trigger()?.nativeElement;\n }\n\n protected isPanelOpen(): boolean {\n return this.panelOpen;\n }\n\n /**\n * A `cdk-virtual-scroll-viewport` pins its height to `--kbq-select-panel-size-max-height` in both\n * directions, so its `scrollHeight` follows the cap rather than the content.\n */\n protected override isListHeightPinnedToCap(): boolean {\n return this.withVirtualScroll;\n }\n\n /** Returns the theme to be used on the panel based on parent form field color. */\n getPanelTheme(): string {\n return this.parentFormField ? `kbq-${this.parentFormField.color}` : '';\n }\n\n /** Returns the full set of classes for the panel: base class, theme and custom `panelClass`. */\n protected getPanelClasses(): string {\n const panelClass = this.panelClass();\n const classes = ['kbq-select__panel', this.getPanelTheme()];\n\n if (typeof panelClass === 'string') {\n classes.push(panelClass);\n } else if (Array.isArray(panelClass) || panelClass instanceof Set) {\n classes.push(...panelClass);\n } else if (panelClass) {\n classes.push(...Object.keys(panelClass).filter((key) => panelClass[key]));\n }\n\n return classes.filter(Boolean).join(' ');\n }\n\n /** Focuses the select element. */\n focus(): void {\n this.elementRef.nativeElement.focus();\n }\n\n /**\n * Implemented as part of KbqFormFieldControl.\n * @docs-private\n */\n onContainerClick() {\n this.focus();\n }\n\n /**\n * Handles removal of a matched item in the trigger.\n * @param option The option to remove from selection.\n * @param $event The mouse event that triggered the removal.\n */\n onRemoveMatcherItem(option: KbqOptionBase, $event): void {\n $event.stopPropagation();\n\n option.deselect();\n }\n\n /**\n * Calculates the number of hidden items in multiple selection mode.\n * Updates the hiddenItems property and triggers change detection.\n */\n calculateHiddenItems = () => {\n if (\n !this.isBrowser ||\n this.customTrigger() ||\n this.customMatcher() ||\n this.empty ||\n !this.multiple ||\n this.multiline()\n )\n return;\n\n const totalItemsWidth = this.getTotalItemsWidthInMatcher();\n const [totalVisibleItemsWidth, visibleItems] = this.getTotalVisibleItems();\n\n this.hiddenItems = (this.selected as ArrayLike<KbqOptionBase>).length - visibleItems;\n this._changeDetectorRef.detectChanges();\n\n if (this.hiddenItems) {\n const itemsCounter = this.trigger()!.nativeElement.querySelector('.kbq-select__match-hidden-text');\n const matcherList = this.trigger()!.nativeElement.querySelector('.kbq-select__match-list');\n\n if (!itemsCounter || !matcherList) {\n this._changeDetectorRef.markForCheck();\n\n return;\n }\n\n const itemsCounterShowed = itemsCounter.offsetTop < itemsCounter.offsetHeight;\n const itemsCounterWidth: number = Math.floor(itemsCounter.getBoundingClientRect().width);\n\n const matcherListWidth: number = Math.floor(matcherList.getBoundingClientRect().width);\n const matcherWidth: number = matcherListWidth + (itemsCounterShowed ? itemsCounterWidth : 0);\n\n if (itemsCounterShowed && totalItemsWidth < matcherWidth) {\n this.hiddenItems = 0;\n this._changeDetectorRef.detectChanges();\n }\n\n if (\n totalVisibleItemsWidth === matcherListWidth ||\n totalVisibleItemsWidth + itemsCounterWidth < matcherListWidth\n ) {\n this._changeDetectorRef.markForCheck();\n\n return;\n }\n }\n\n this._changeDetectorRef.markForCheck();\n };\n\n /**\n * Gets the height of a single option item.\n * @returns The height in pixels of the first option, or 0 if no options exist.\n */\n getItemHeight(): number {\n return this.options.first ? this.options.first.getHeight() : 0;\n }\n\n /**\n * Handles click events on the select.\n * Closes the panel if click is inside the footer.\n * @param $event The mouse event to handle.\n */\n handleClick($event: MouseEvent) {\n if (this.footer()?.nativeElement.contains($event.target)) {\n this.close();\n }\n }\n\n /** @docs-private */\n setSelectedOptionsByClick(option: KbqOption) {\n // `KbqOption.handleClick` routes a shift-click straight here, skipping the `disabled`/`selectable`\n // check that `selectViaInteraction` applies to a plain click — so the guard has to live here.\n // It precedes `setActiveItem` deliberately: the range anchor must not come to rest on an option\n // the user cannot toggle, or the next shift-range would take its direction from that option's\n // (unchangeable) selected state. Mirrors `KbqTreeSelection.setSelectedOptionsByClick`.\n if (option.disabled || !option.selectable()) {\n return;\n }\n\n if (this.multiple || this.multiline()) {\n this.keyManager.setActiveItem(option);\n // The key manager's list, not `options`: with the \"select all\" row rendered the two are offset\n // by one, and a range read off `options` would land on the wrong options entirely.\n const options = this.navigableOptions.toArray();\n\n let fromIndex = this.keyManager.previousActiveItemIndex;\n let toIndex = (this.keyManager.previousActiveItemIndex = this.keyManager.activeItemIndex);\n const selectedOptionState = options[fromIndex]?.selected;\n\n if (toIndex === fromIndex) {\n this.selectionModel.toggle(option);\n\n return;\n }\n\n if (fromIndex > toIndex) {\n [fromIndex, toIndex] = [toIndex, fromIndex];\n }\n\n options\n .slice(fromIndex, toIndex + 1)\n .filter((item) => !item.disabled && item.selectable())\n .forEach((option) => {\n if (selectedOptionState) {\n option.select();\n } else {\n option.deselect();\n }\n });\n } else {\n this.selectionModel.toggle(option);\n }\n }\n\n /** @docs-private */\n protected shouldShowSearch(): boolean {\n return (\n isUndefined(this.searchMinOptionsThreshold) ||\n !!this.search()?.value() ||\n this.options.length >= this.searchMinOptionsThreshold\n );\n }\n\n /** Updates locale parameters from the locale service. */\n private updateLocaleParams = () => {\n // A consumer-supplied locale (`KBQ_LOCALE_DATA`/`addLocale`) may predate the `select` section\n // entirely, not just the `selectAll` key within it — guard the lookup itself, not just its fields.\n const params = this.localeService?.getParams('select');\n\n this.hiddenItemsText = params?.hiddenItemsText ?? this.hiddenItemsText;\n this.selectAllText = params?.selectAll ?? ruRULocaleData.select.selectAll;\n\n this._changeDetectorRef.markForCheck();\n };\n\n /** Checks if the component is currently visible in the viewport. */\n private isVisible(): boolean {\n if (!this.isBrowser) return false;\n\n return this.elementRef.nativeElement.offsetTop < this.elementRef.nativeElement.offsetHeight;\n }\n\n /** Gets the current overlay position index in the container. */\n private currentOverlayPosition(): number {\n const element = this.overlayDir.overlayRef.hostElement;\n\n return Array.from(this.overlayContainer.getContainerElement().childNodes).findIndex((node) => {\n return node.firstChild?.['id'] === element.firstChild?.['id'];\n });\n }\n\n /** Gets the position index of modal overlay in the container. */\n private modalOverlayPosition(): number {\n return Array.from(this.overlayContainer.getContainerElement().childNodes).findIndex((childNode) =>\n (childNode as HTMLElement).classList.contains('kbq-modal-overlay')\n );\n }\n\n /**\n * Creates an observable of actions that should close the select panel.\n * Includes outside pointer events and overlay detachments.\n */\n private closingActions() {\n // used for calling toggle on select from outside of component\n const outsidePointerEvents = this.overlayDir\n .overlayRef!.outsidePointerEvents()\n .pipe(delay(0))\n .pipe(\n filter(() => {\n if (this.overlayContainer.getContainerElement().childElementCount > 1) {\n return this.currentOverlayPosition() > this.modalOverlayPosition();\n }\n\n return true;\n })\n );\n\n return merge(outsidePointerEvents, this.overlayDir.overlayRef!.detachments());\n }\n\n /** Gets the height of the options container element. */\n private getHeightOfOptionsContainer(): number {\n return this.optionsContainer().nativeElement.getClientRects()[0]?.height;\n }\n\n /** Updates the keyboard manager scroll size based on options container height. */\n private updateScrollSize(): void {\n if (!this.options.first) {\n return;\n }\n\n this.keyManager.withScrollSize(Math.floor(this.getHeightOfOptionsContainer() / this.options.first.getHeight()));\n }\n\n /**\n * Subscribes to scroll events of the options panel and emits `scrolledToBottom`\n * when the panel reaches `scrolledToBottomOffset` pixels from the bottom.\n * Re-subscribes on every panel attach; auto-unsubscribes when the panel closes\n * or the component is destroyed.\n */\n private subscribeToScrolledToBottom(): void {\n this.scrollSubscription.unsubscribe();\n\n const virtualScrollViewport = this.virtualScrollViewport();\n const distance =\n this.withVirtualScroll && virtualScrollViewport\n ? virtualScrollViewport\n .elementScrolled()\n .pipe(map(() => this.virtualScrollViewport()!.measureScrollOffset('bottom')))\n : fromEvent(this.optionsContainer().nativeElement, 'scroll').pipe(\n map(() => {\n const element = this.optionsContainer().nativeElement;\n\n return element.scrollHeight - element.scrollTop - element.clientHeight;\n })\n );\n\n this._ngZone.runOutsideAngular(() => {\n this.scrollSubscription = distance\n .pipe(\n auditTime(SCROLLED_TO_BOTTOM_THROTTLE_TIME),\n map((distance) => distance <= this.scrolledToBottomOffset()),\n distinctUntilChanged(),\n filter(Boolean),\n takeUntilDestroyed(this.destroyRef),\n takeUntil(this.closedStream)\n )\n .subscribe(() => this._ngZone.run(() => this.scrolledToBottom.emit()));\n });\n }\n\n /** Calculates the total width of all selected items in the matcher. */\n private getTotalItemsWidthInMatcher(): number {\n const triggerClone = this.buildTriggerClone();\n\n triggerClone.querySelector('.kbq-select__match-hidden-text')?.remove();\n this._renderer.appendChild(this.trigger()!.nativeElement, triggerClone);\n\n let totalItemsWidth: number = 0;\n const selectedItemsViewValueContainers = triggerClone.querySelectorAll<HTMLElement>('kbq-tag');\n\n selectedItemsViewValueContainers.forEach((item) => (totalItemsWidth += this.getItemWidth(item)));\n\n triggerClone.remove();\n\n return totalItemsWidth;\n }\n\n /**\n * Calculates the width of a single item including margins.\n *\n * The elements measured here are `kbq-tag`s, which are `border-box` and carry horizontal\n * padding. `getComputedStyle().width` resolves to the used content-box width whatever\n * `box-sizing` says, so it dropped that padding from every tag and the matcher believed more\n * tags fit than actually do. `getBoundingClientRect()` is always the border box — the same fix\n * `kbqGetPanelWidthOrigin()` carries for the dropdown trigger.\n * @param element The DOM element to measure.\n * @returns Total width including margins and gap.\n */\n private getItemWidth(element: HTMLElement): number {\n const computedStyle = this.window.getComputedStyle(element);\n\n const width: number = element.getBoundingClientRect().width;\n const marginLeft: number = parseFloat(computedStyle.marginLeft) || 0;\n const marginRight: number = parseFloat(computedStyle.marginRight) || 0;\n\n return width + marginLeft + marginRight + parseInt(SelectSizeMultipleContentGap);\n }\n\n /** Handles keyboard events while the select is closed. */\n private handleClosedKeydown(event: KeyboardEvent): void {\n const keyCode = event.keyCode;\n const isArrowKey = [DOWN_ARROW, UP_ARROW, LEFT_ARROW, RIGHT_ARROW].includes(keyCode);\n const isOpenKey = [ENTER, SPACE].includes(keyCode);\n\n // Open the select on ALT + arrow key to match the native <select>\n if (isOpenKey || ((this.multiSelection || event.altKey) && isArrowKey)) {\n event.preventDefault(); // prevents the page from scrolling down when pressing space\n this.open();\n } else if (!this.multiSelection) {\n this.keyManager.onKeydown(event);\n }\n }\n\n /** Handles keyboard events when the select is open. */\n private handleOpenKeydown(event: KeyboardEvent): void {\n const keyCode = event.keyCode;\n const isArrowKey = keyCode === DOWN_ARROW || keyCode === UP_ARROW;\n\n if ((isArrowKey && event.altKey) || keyCode === ESCAPE || keyCode === TAB) {\n // Close the select on ALT + arrow key to match the native <select>\n event.preventDefault();\n\n // Prevent ESCAPE from bubbling to ancestor (when inside overlay)\n if (keyCode === ESCAPE) {\n event.stopPropagation();\n }\n\n this.close();\n this.focus();\n } else if (keyCode === HOME) {\n event.preventDefault();\n\n this.keyManager.setFirstItemActive();\n } else if (keyCode === END) {\n event.preventDefault();\n\n this.keyManager.setLastItemActive();\n } else if (keyCode === PAGE_UP) {\n event.preventDefault();\n\n this.keyManager.setPreviousPageItemActive();\n } else if (keyCode === PAGE_DOWN) {\n event.preventDefault();\n\n this.keyManager.setNextPageItemActive();\n } else if ((keyCode === ENTER || keyCode === SPACE) && this.keyManager.activeItem) {\n event.preventDefault();\n\n // The row is not selectable, so `selectViaInteraction()` would be a no-op on it. Handling it\n // here covers both focus positions — the row itself and the search field the panel keeps\n // focus in while the row is merely active.\n if (this.keyManager.activeItem === this.selectAllOption()) {\n this.toggleSelectAll();\n } else {\n this.keyManager.activeItem.selectViaInteraction();\n }\n } else if (this.multiSelection && isSelectAll(event)) {\n this.selectAllHandler(event, this);\n } else {\n const previouslyFocusedIndex = this.keyManager.activeItemIndex;\n\n this.keyManager.onKeydown(event);\n\n if (\n this.multiSelection &&\n isArrowKey &&\n event.shiftKey &&\n this.keyManager.activeItem &&\n this.keyManager.activeItemIndex !== previouslyFocusedIndex\n ) {\n this.keyManager.activeItem.selectViaInteraction();\n }\n\n // Ensure the active option's keyboard-focus indicator is shown even when the\n // index didn't change (e.g. ArrowDown on a single-option list) — without this\n // the panel never gains `cdk-keyboard-focused` and the active border is hidden.\n if (isArrowKey && this.keyManager.activeItemIndex === previouslyFocusedIndex) {\n this.keyManager.activeItem?.focus();\n }\n\n const search = this.search();\n\n if (search && this.shouldShowSearch()) {\n search.focus();\n }\n\n if (search && (this.keyManager.isTyping() || [BACKSPACE, DELETE].includes(keyCode))) {\n setTimeout(() => this.highlightCorrectOption());\n }\n }\n }\n\n /**\n * Initializes the selection based on the current value.\n * Defers execution to avoid change detection errors.\n */\n private initializeSelection(): void {\n // Defer setting the value in order to avoid the \"Expression\n // has changed after it was checked\" errors from Angular.\n Promise.resolve().then(() => {\n this.setSelectionByValue(this.ngControl ? this.ngControl.value : this._value);\n });\n }\n\n /** Whether the key manager has no active item, or its active item is missing from the current options list. */\n private isActiveItemStale(): boolean {\n const activeItem = this.keyManager.activeItem as KbqOption | null;\n\n return !activeItem || !this.navigableOptions.some((option) => option === activeItem);\n }\n\n /**\n * Rebuilds the key manager's list — the \"select all\" row first, then the projected options — and\n * re-applies the panel's initial highlight whenever the row is what just joined that list.\n *\n * Both callers have to be able to do the second part: whichever of the view query and\n * `options.changes` runs first is the one that brings the row in, and the other then sees a list\n * it is already part of.\n */\n private syncNavigableOptions(): void {\n const selectAllOption = this.selectAllOption();\n const options = this.options?.toArray() ?? [];\n // The row is created together with the overlay, so the highlight `openPanel()` applies is\n // computed against a list that does not hold it yet and lands on the option below it instead.\n // Re-apply it the moment the row takes the lead — the call is idempotent for every other case.\n const selectAllOptionAppeared = !!selectAllOption && this.navigableOptions.first !== selectAllOption;\n\n this.navigableOptions.reset(selectAllOption ? [selectAllOption, ...options] : options);\n this.navigableOptions.notifyOnChanges();\n\n if (selectAllOptionAppeared && this.panelOpen) {\n this.highlightCorrectOption();\n }\n }\n\n /**\n * Sets the selected option based on a value.\n * If no option can be found with the designated value, the select trigger is cleared.\n * @param value The value to select. Can be a single value or array for multiple selection.\n */\n private setSelectionByValue(value: any | any[]): void {\n this.previousSelectionModelSelected = this.selectionModel.selected;\n\n if (this.multiSelection && value) {\n if (!Array.isArray(value)) {\n throw getKbqSelectNonArrayValueError();\n }\n\n this.selectionModel.clear();\n value.forEach((currentValue: any) => this.selectValue(currentValue));\n this.sortValues();\n } else {\n this.selectionModel.clear();\n const correspondingOption = this.selectValue(value);\n\n // Shift focus to the active item. Note that we shouldn't do this in multiple\n // mode, because we don't know what option the user interacted with last.\n // While the panel is open and the user is already navigating a still-present\n // active item, keep it as is: `options.changes` re-runs this method on every\n // appended chunk (e.g. paging), and re-activating the selected option would\n // focus it and scroll the list back to it.\n if (correspondingOption && !this.withVirtualScroll && (!this.panelOpen || this.isActiveItemStale())) {\n this.keyManager.setActiveItem(correspondingOption);\n }\n }\n\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Finds the option that corresponds to the given value.\n * @param value The value to find.\n * @returns The matching option or undefined if not found.\n */\n private getCorrespondOption(value: any): KbqOptionBase | undefined {\n return [\n ...this.options.toArray(),\n ...this.previousSelectionModelSelected.map((option) => this.resolveSelectedOption(option))\n // Treat null as a special reset value.\n ].find(\n (option: KbqOptionBase) => option.value != null && runCompareWith(this.compareWith, option.value, value)\n );\n }\n\n /**\n * Finds and selects an option based on its value.\n * @returns Option that has the corresponding value, when it is currently rendered.\n */\n private selectValue(value: any): KbqOption | undefined {\n const correspondingOption = this.getCorrespondOption(value);\n\n if (correspondingOption) {\n this.selectionModel.select(correspondingOption);\n this.captureSelectedOptionCopy(correspondingOption);\n\n // Only a currently rendered option can be activated in the key manager.\n return this.options.find((option) => option === correspondingOption);\n }\n\n const virtualOption = this.createVirtualOptionForValue(value);\n\n if (virtualOption) {\n this.selectionModel.select(virtualOption);\n }\n\n return undefined;\n }\n\n /**\n * Builds a detached option for a value whose `KbqOption` is not rendered, or returns `undefined`\n * when the value cannot be resolved and the consumer gave no way to render it.\n */\n private createVirtualOptionForValue(value: any): KbqVirtualOption | undefined {\n // Treat null as a special reset value, the same way `getCorrespondOption` does.\n if (value == null) return undefined;\n\n if (this.withVirtualScroll) {\n const source = this.cdkVirtualForOf()?.cdkVirtualForOf;\n const correspondingOptionVirtual =\n source instanceof Array ? source.find((item) => this.compareWith(item, value)) : undefined;\n\n if (correspondingOptionVirtual) {\n return this.createVirtualOption(correspondingOptionVirtual);\n }\n\n // The value is missing from the currently loaded data (server-side search, a narrowed down\n // source) — it can still be rendered when a `virtualOptionFactory` maps it to a label.\n return this.virtualOptionFactory() ? this.createVirtualOption(value) : undefined;\n }\n\n // Without virtual scroll the whole list is rendered, so a value that matched nothing is only\n // kept in the selection when the consumer opted into unresolved values.\n return this.showPreselectedValues() ? this.createVirtualOption(value) : undefined;\n }\n\n /**\n * Single entry point for building a `KbqVirtualOption` from a raw value.\n * Uses the consumer-provided `virtualOptionFactory` when set, otherwise\n * wraps the raw value with the select's current `disabled` state.\n */\n private createVirtualOption(value: any): KbqVirtualOption {\n const virtualOptionFactory = this.virtualOptionFactory();\n\n return virtualOptionFactory ? virtualOptionFactory(value) : new KbqVirtualOption(value, this.disabled);\n }\n\n /**\n * Remembers the value and the label of a selected option while its view is still live, so that the\n * selection survives the view being recycled by `cdk-virtual-scroll` for another item.\n */\n private captureSelectedOptionCopy(option: KbqOptionBase): void {\n if (option instanceof KbqVirtualOption) return;\n\n this.selectedOptionCopies.set(option, new KbqVirtualOption(option.value, option.disabled, option.viewValue));\n }\n\n /** Copy of `option` when its view has been recycled for another item, otherwise `option` itself. */\n private resolveSelectedOption(option: KbqOptionBase): KbqOptionBase {\n const copy = this.selectedOptionCopies.get(option);\n\n if (!copy) return option;\n\n // A value that no longer matches the copy means the view was recycled for another item. A\n // comparator that throws reads as \"no match\" here too, falling back to the value actually selected.\n return runCompareWith(this.compareWith, option.value, copy.value) ? option : copy;\n }\n\n /** Sets up a key manager to listen to keyboard events on the overlay panel. */\n private initKeyManager() {\n const typeAheadDebounce = 200;\n\n this.keyManager = new ActiveDescendantKeyManager<KbqOption>(this.navigableOptions)\n .withTypeAhead(typeAheadDebounce, this.search() ? -1 : 0)\n .withVerticalOrientation()\n .withHorizontalOrientation(this.isRtl() ? 'rtl' : 'ltr');\n\n this.keyManager.change.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n if (this.panelOpen && this.panel()) {\n this.scrollActiveOptionIntoView();\n\n this.search()?.focus();\n } else if (!this.panelOpen && !this.multiSelection && this.keyManager.activeItem) {\n this.keyManager.activeItem.selectViaInteraction();\n }\n });\n }\n\n /** Drops current option subscriptions and IDs and resets from scratch. */\n private resetOptions(): void {\n this.optionSelectionChanges\n .pipe(takeUntilDestroyed(this.destroyRef), takeUntil(this.options.changes))\n .subscribe((event) => {\n this.onSelect(event.source, event.isUserInput);\n\n if (event.isUserInput && !this.multiSelection && this.panelOpen) {\n this.close();\n this.focus();\n }\n });\n\n // Listen to changes in the internal state of the options and react accordingly.\n // Handles cases like the labels of the selected options changing.\n (this.options.length ? merge(...this.options.map((option) => option.stateChanges)) : EMPTY)\n .pipe(takeUntilDestroyed(this.destroyRef), takeUntil(this.options.changes))\n .subscribe(() => {\n this._changeDetectorRef.markForCheck();\n this.stateChanges.next();\n });\n }\n\n /** Invoked when an option is clicked. */\n private onSelect(option: KbqOption, isUserInput: boolean): void {\n const wasSelected = this.selectionModel.isSelected(option);\n\n if (option.value == null && !this.multiSelection) {\n option.deselect();\n this.selectionModel.clear();\n this.propagateChanges(option.value);\n } else {\n if (option.selected) {\n this.selectionModel.select(option);\n this.captureSelectedOptionCopy(option);\n } else {\n this.selectionModel.deselect(option);\n }\n\n if (isUserInput) {\n this.keyManager.setActiveItem(option);\n }\n\n if (this.multiSelection) {\n this.sortValues();\n }\n }\n\n // `toggleSelectAll` propagates once for the whole batch instead.\n if (!this.selectAllInProgress && wasSelected !== this.selectionModel.isSelected(option)) {\n this.propagateChanges();\n }\n\n this.stateChanges.next();\n }\n\n /** Sorts the selected values based on their order in the panel. */\n private sortValues() {\n if (this.multiSelection) {\n const options = this.options.toArray();\n\n this.selectionModel.sort((a, b) => {\n const sortComparator = this.sortComparator();\n\n return sortComparator ? sortComparator(a, b, options) : a.value - b.value;\n });\n this.stateChanges.next();\n }\n }\n\n /** Emits change event to set the model value. */\n private propagateChanges(fallbackValue?: any): void {\n let valueToEmit: any;\n\n if (this.multiSelection) {\n valueToEmit = (this.selected as KbqOption[]).map((option) => option.value);\n } else {\n valueToEmit = this.selected ? (this.selected as KbqOption).value : fallbackValue;\n }\n\n this._value = valueToEmit;\n this.valueChange.emit(valueToEmit);\n this.onChange(valueToEmit);\n this.selectionChange.emit(new KbqSelectChange(this, valueToEmit));\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Highlights the selected item. If no option is selected, it will highlight\n * the first item instead.\n */\n private highlightCorrectOption(): void {\n if (this.keyManager) {\n if (this.empty || !this.firstSelected || this.firstFiltered) {\n this.keyManager.setFirstItemActive();\n } else {\n this.keyManager.setActiveItem(this.firstSelected as KbqOption);\n }\n }\n }\n\n private scrollActiveOptionIntoView(): void {\n this.keyManager.activeItem?.focus();\n }\n\n /** Comparison function to specify which option is displayed. Defaults to object equality. */\n private _compareWith = (o1: any, o2: any) => o1 === o2;\n\n /** Function for handling the combination Ctrl + A (select all). By default, the internal handler is used. */\n private _selectAllHandler(event: KeyboardEvent, select: KbqSelect): void {\n const searchInput = isInput(event) ? (event.target as HTMLInputElement) : null;\n\n if (shouldSelectSearchText(searchInput)) {\n searchInput!.select();\n event.preventDefault();\n\n return;\n }\n\n event.preventDefault();\n\n // With the master checkbox on screen the shortcut has to behave exactly like clicking it,\n // otherwise the same action would leave the checkbox showing something the selection contradicts.\n if (select.selectAll()) {\n select.toggleSelectAll();\n\n return;\n }\n\n const options = select.options.toArray();\n const selectableOptions = options.filter((option) => !option.disabled && option.selectable());\n\n toggleSelectAll<KbqOption>(\n {\n items: options,\n // A non-selectable option is not one the user could ever toggle by hand — sweeping it up\n // here would select the consumer's own \"select all\" row along with the real options.\n isSelectable: (option) => !option.disabled && option.selectable(),\n isSelected: (option) => option.selected,\n setSelected: (option, selected) => (selected ? option.select() : option.deselect())\n },\n { allowDeselect: select.selectAllToggle() }\n );\n\n // `selected` per the KbqSelectAllEvent contract: `true` only when every selectable option is\n // now selected, `false` otherwise (deselected or partial). Reading the live option state keeps\n // this correct even on a no-op (Ctrl+A while everything is already selected, selectAllToggle off).\n const selected = selectableOptions.length > 0 && selectableOptions.every((option) => option.selected);\n\n select.onSelectAll.emit(new KbqSelectAllEvent(select, selectableOptions, selected));\n }\n\n /**\n * Calculates the total width and count of visible items.\n * @returns Tuple of [totalVisibleItemsWidth, visibleItemsCount].\n */\n private getTotalVisibleItems(): [number, number] {\n const triggerClone = this.buildTriggerClone();\n\n const hiddenText = triggerClone.querySelector('.kbq-select__match-hidden-text');\n\n if (hiddenText) {\n this._renderer.setStyle(hiddenText, 'display', 'block');\n }\n\n this._renderer.appendChild(this.trigger()!.nativeElement, triggerClone);\n\n let visibleItemsCount: number = 0;\n let totalVisibleItemsWidth: number = 0;\n\n (triggerClone.querySelectorAll('kbq-tag') as NodeListOf<HTMLElement>).forEach((item) => {\n if (item.offsetTop < item.offsetHeight) {\n totalVisibleItemsWidth += this.getItemWidth(item);\n visibleItemsCount++;\n }\n });\n\n triggerClone.remove();\n\n return [totalVisibleItemsWidth, visibleItemsCount];\n }\n\n /**\n * Creates a hidden clone of the trigger element for width calculations.\n * @returns Clone of the trigger element positioned off-screen.\n */\n private buildTriggerClone(): HTMLDivElement {\n const triggerClone = this.trigger()!.nativeElement.cloneNode(true);\n\n this._renderer.setStyle(triggerClone, 'position', 'absolute');\n this._renderer.setStyle(triggerClone, 'visibility', 'hidden');\n this._renderer.setStyle(triggerClone, 'top', '-100%');\n this._renderer.setStyle(triggerClone, 'left', '0');\n this._renderer.setStyle(triggerClone, 'max-width', '100%');\n\n return triggerClone;\n }\n\n /** Adds the dropdown class to the overlay container when first select opens. */\n private addClassToOverlayContainer() {\n const overlayContainer = this.overlayContainer?.getContainerElement();\n\n if (overlayContainer.childNodes.length === 1) {\n this.classAddedToOverlayContainer = true;\n\n this._renderer.addClass(overlayContainer, 'cdk-overlay-container_dropdown');\n }\n }\n\n /** Removes the dropdown class from the overlay container when select closes. */\n private removeClassFromOverlayContainer() {\n if (this.classAddedToOverlayContainer) {\n this._renderer.removeClass(this.overlayContainer.getContainerElement(), 'cdk-overlay-container_dropdown');\n }\n }\n}\n","<div\n #fallbackOverlayOrigin=\"cdkOverlayOrigin\"\n #trigger\n cdkOverlayOrigin\n class=\"kbq-select__trigger\"\n [class.kbq-select__trigger_empty]=\"empty\"\n [class.kbq-select__trigger_multiline]=\"multiline()\"\n [class.kbq-select__trigger_multiple]=\"multiple\"\n [class.kbq-select__trigger_single]=\"!multiple\"\n>\n @if (!!customMatcher()) {\n <ng-content select=\"kbq-select-matcher, [kbq-select-matcher]\" />\n } @else {\n <div class=\"kbq-select__matcher\">\n @if (empty) {\n <span class=\"kbq-select__placeholder\">\n {{ placeholder || '\\u00A0' }}\n </span>\n } @else {\n @if (!!customTrigger()) {\n <ng-content select=\"kbq-select-trigger, [kbq-select-trigger]\" />\n } @else {\n <div class=\"kbq-select__match-container\">\n @if (multiSelection) {\n <div\n #multilineMatchList\n [class.kbq-select__match-list]=\"!multiline()\"\n [class.kbq-select__multiline-match-list]=\"multiline()\"\n >\n @if (!customTagTemplateRef()) {\n @for (option of triggerValues; track option) {\n <kbq-tag\n [color]=\"colorForState\"\n [disabled]=\"option.disabled || disabled\"\n [selectable]=\"false\"\n >\n {{ option.viewValue }}\n @if (!option.disabled && !disabled) {\n <i\n kbq-icon=\"kbq-xmark-s_16\"\n kbqTagRemove\n (click)=\"onRemoveMatcherItem(option, $event)\"\n ></i>\n }\n </kbq-tag>\n }\n } @else {\n @for (option of triggerValues; track option) {\n <ng-container\n [ngTemplateOutlet]=\"$any(customTagTemplateRef())\"\n [ngTemplateOutletContext]=\"{ $implicit: option, select: this }\"\n />\n }\n }\n </div>\n\n @if (!multiline()) {\n <div\n class=\"kbq-select__match-hidden-text\"\n [style.display]=\"hiddenItems > 0 ? 'block' : 'none'\"\n >\n {{ hiddenItemsTextFormatter(hiddenItemsText, hiddenItems) }}\n </div>\n }\n } @else {\n <span class=\"kbq-select__matcher-text\">\n {{ triggerValue }}\n </span>\n }\n </div>\n }\n }\n\n @if (canShowCleaner) {\n <div class=\"kbq-select__cleaner\">\n <ng-content select=\"kbq-cleaner\" />\n </div>\n }\n\n <div class=\"kbq-select__arrow-wrapper\">\n <i kbq-icon=\"kbq-chevron-down-s_16\" class=\"kbq-select__arrow\" [color]=\"colorForState\"></i>\n </div>\n </div>\n }\n</div>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayLockPosition\n [cdkConnectedOverlayBackdropClass]=\"backdropClass()\"\n [cdkConnectedOverlayHasBackdrop]=\"hasBackdrop\"\n [cdkConnectedOverlayMinWidth]=\"overlayMinWidth\"\n [cdkConnectedOverlayOpen]=\"panelOpen\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin || fallbackOverlayOrigin\"\n [cdkConnectedOverlayPanelClass]=\"overlayPanelClass\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayViewportMargin]=\"viewportMargin\"\n [cdkConnectedOverlayWidth]=\"overlayWidth\"\n (attach)=\"onAttached()\"\n (backdropClick)=\"close()\"\n (detach)=\"close()\"\n>\n <div\n #panel\n cdkMonitorSubtreeFocus\n [class]=\"getPanelClasses()\"\n [style.--kbq-select-panel-size-max-height]=\"panelMaxHeightToken()\"\n [style.font-size.px]=\"triggerFontSize\"\n [style.max-width.px]=\"panelMaxWidth()\"\n [style.transformOrigin]=\"transformOrigin\"\n (click)=\"handleClick($event)\"\n (keydown)=\"handleKeydown($event)\"\n >\n @if (search() && shouldShowSearch()) {\n <div class=\"kbq-select__search-container\">\n <ng-content select=\"[kbqSelectSearch]\" />\n </div>\n }\n\n <div\n #optionsContainer\n class=\"kbq-select__content\"\n [class.kbq-scrollbar]=\"!withVirtualScroll\"\n [@fadeInContent]=\"'showing'\"\n (@fadeInContent.done)=\"panelDoneAnimatingStream.next($event.toState)\"\n >\n @if (isEmptySearchResult) {\n <ng-content select=\"[kbq-select-search-empty-result]\" />\n }\n @if (showSelectAll) {\n <!-- Every read of selectAllState re-filters the whole option list, and allOptionsSelected\n is that same walk asking whether the state is \"checked\" — one read covers all four. -->\n @let selectAllCheckboxState = selectAllState;\n\n <kbq-option\n class=\"kbq-select__select-all\"\n [selectable]=\"false\"\n [class.kbq-selected]=\"selectAllCheckboxState === 'checked'\"\n [attr.role]=\"'checkbox'\"\n [attr.aria-checked]=\"\n selectAllCheckboxState === 'indeterminate' ? 'mixed' : selectAllCheckboxState === 'checked'\n \"\n (click)=\"toggleSelectAll()\"\n >\n <kbq-pseudo-checkbox [state]=\"selectAllCheckboxState\" />\n {{ selectAllText }}\n </kbq-option>\n }\n <ng-content />\n </div>\n\n <ng-content select=\"kbq-select-footer,[kbq-select-footer]\" />\n </div>\n</ng-template>\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport {\n KbqOptionModule,\n KbqSelectFooter,\n KbqSelectMatcher,\n KbqSelectSearch,\n KbqSelectSearchEmptyResult,\n KbqSelectTrigger\n} from '@koobiq/components/core';\nimport { KbqFormFieldModule } from '@koobiq/components/form-field';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqTagsModule } from '@koobiq/components/tags';\nimport { KbqToolTipModule } from '@koobiq/components/tooltip';\nimport { KbqSelectError, KbqSelectErrorText, KbqSelectLoading, KbqSelectNoOptions } from './select-common';\nimport { KbqOptionTooltip } from './select-option.directive';\nimport { KbqSelect } from './select.component';\n\n@NgModule({\n imports: [\n OverlayModule,\n KbqOptionModule,\n KbqIconModule,\n KbqTagsModule,\n KbqToolTipModule,\n KbqSelectSearch,\n KbqSelectFooter,\n KbqSelectMatcher,\n KbqSelectTrigger,\n KbqSelectSearchEmptyResult,\n NgTemplateOutlet,\n A11yModule,\n KbqSelect,\n KbqOptionTooltip,\n KbqSelectLoading,\n KbqSelectError,\n KbqSelectNoOptions,\n KbqSelectErrorText\n ],\n exports: [\n KbqSelect,\n KbqOptionTooltip,\n KbqOptionModule,\n KbqSelectSearch,\n KbqSelectFooter,\n KbqSelectMatcher,\n KbqSelectTrigger,\n KbqSelectSearchEmptyResult,\n KbqSelectLoading,\n KbqFormFieldModule,\n KbqSelectError,\n KbqSelectNoOptions,\n KbqSelectErrorText\n ]\n})\nexport class KbqSelectModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["SelectSizeMultipleContentGap","i1"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;MAqBa,gBAAgB,CAAA;kIAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0CAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAbf;;;;;;AAMT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EARG,wBAAwB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAenB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAlB5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,0CAA0C;AACpD,oBAAA,OAAO,EAAE;wBACL;AACH,qBAAA;AACD,oBAAA,QAAQ,EAAE;;;;;;AAMT,IAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,IAAI,EAAE;AACF,wBAAA,KAAK,EAAE;AACV,qBAAA;AACD,oBAAA,QAAQ,EAAE;AACb,iBAAA;;AAGD;;;;AAIG;MA0CU,cAAc,CAAA;AAzC3B,IAAA,WAAA,GAAA;;AA2CI,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,KAAK,0CAAI,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAA7B,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAC;AACzD,IAAA;kIAHY,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,gCAAA,EAAA,WAAA,EAAA,+BAAA,EAAA,UAAA,EAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAvCb;;AAET,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,8cAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAqCQ,cAAc,EAAA,UAAA,EAAA,CAAA;kBAzC1B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sCAAsC,EAAA,QAAA,EACtC;;KAET,EAAA,eAAA,EA6BgB,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACF,wBAAA,KAAK,EAAE,kBAAkB;AACzB,wBAAA,kCAAkC,EAAE,WAAW;AAC/C,wBAAA,iCAAiC,EAAE;AACtC,qBAAA,EAAA,QAAA,EACS,gBAAgB,EAAA,MAAA,EAAA,CAAA,8cAAA,CAAA,EAAA;;AAO9B;;AAEG;MAQU,kBAAkB,CAAA;kIAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;sHAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,wBAAA,EAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAP9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,IAAI,EAAE;AACF,wBAAA,KAAK,EAAE;AACV,qBAAA;AACD,oBAAA,QAAQ,EAAE;AACb,iBAAA;;AAGD;;AAEG;MA0BU,kBAAkB,CAAA;kIAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gDAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAvBjB;;AAET,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,yMAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAqBQ,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAzB9B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gDAAgD,EAAA,QAAA,EAChD;;KAET,EAAA,eAAA,EAegB,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACF,wBAAA,KAAK,EAAE;AACV,qBAAA,EAAA,QAAA,EACS,oBAAoB,EAAA,MAAA,EAAA,CAAA,yMAAA,CAAA,EAAA;;;AChG5B,MAAO,gBAAiB,SAAQ,iBAAiB,CAAA;AAYnD,IAAA,IAAI,WAAW,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,aAAa;IAChD;AAEA,IAAA,IAAI,WAAW,GAAA;QACX,IAAI,CAAC,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,KAAK;QAEjC,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW;IACtE;AAEA,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;AAtBM,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC;AAC1B,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAC7C,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS;QAEtC,IAAA,CAAA,gBAAgB,GAAG,GAAG;AAE/B,QAAA,IAAA,CAAA,kBAAkB,GAAG,YAAY,CAAC,KAAK;AACvC,QAAA,IAAA,CAAA,2BAA2B,GAAG,YAAY,CAAC,KAAK;AAChD,QAAA,IAAA,CAAA,wBAAwB,GAAG,YAAY,CAAC,KAAK;IAcrD;IAEA,eAAe,GAAA;QACX,KAAK,CAAC,eAAe,EAAE;QAEvB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS;AACpC,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,WAAW;AAEjC,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;AAC1B,aAAA,OAAO,CAAC,IAAI,CAAC,WAAW;AACxB,aAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC;AACxC,aAAA,SAAS,CAAC,OAAO,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAEzD,QAAA,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC;AACnC,aAAA,OAAO,CAAC,IAAI,CAAC,WAAW;AACxB,aAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC;aACxC,SAAS,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,WAAW;YACjC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS;AACxC,QAAA,CAAC,CAAC;AAEN,QAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;AAChC,aAAA,OAAO,CAAC,IAAI,CAAC,UAAU;aACvB,SAAS,CAAC,CAAC,MAAM,MAAM,MAAM,KAAK,UAAU,GAAG,IAAI,CAAC,kBAAkB,EAAE,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAC/G;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE;AACrC,QAAA,IAAI,CAAC,2BAA2B,CAAC,WAAW,EAAE;AAC9C,QAAA,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE;QAE3C,KAAK,CAAC,WAAW,EAAE;IACvB;IAEA,kBAAkB,GAAA;AACd,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,WAAW;IACrC;IAEA,kBAAkB,GAAA;AACd,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;IACxB;kIAhES,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;sHAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAP5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,IAAI,EAAE;AACF,wBAAA,cAAc,EAAE,sBAAsB;AACtC,wBAAA,cAAc,EAAE;AACnB;AACJ,iBAAA;;;ACoHD,IAAI,YAAY,GAAG,CAAC;AAEpB,MAAM,gCAAgC,GAAG,GAAG;AAE5C;MACa,eAAe,CAAA;IACxB,WAAA,CACW,MAAiB,EACjB,KAAU,EAAA;QADV,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,KAAK,GAAL,KAAK;IACb;AACN;AAuCD;MACa,kBAAkB,GAAG,IAAI,cAAc,CAAmB,oBAAoB;AAE3F;AACO,MAAM,wBAAwB,GAAG,CAAC,OAAyB,KAAc;IAC5E,OAAO;AACH,QAAA,OAAO,EAAE,kBAAkB;AAC3B,QAAA,QAAQ,EAAE;KACb;AACL;AAEA;AACO,MAAM,yCAAyC,GAAG;AACzD;AACO,MAAM,2BAA2B,GAAG;AAyDrC,MAAO,SACT,SAAQ,iBAAiB,CAAA;AA2OzB;;;;;AAKG;;;IAGH,IACI,yBAAyB,CAAC,KAAkC,EAAA;AAC5D,QAAA,IAAI,CAAC,0BAA0B;AAC3B,YAAA,IAAI,CAAC,gCAAgC,CAAC,KAAK,CAAC;gBAC5C,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,cAAc,EAAE,yBAAyB,CAAC;IAC7F;AAEA,IAAA,IAAI,yBAAyB,GAAA;QACzB,OAAO,IAAI,CAAC,0BAA0B;IAC1C;AAsFA;;;AAGG;;;AAGH,IAAA,IACI,WAAW,GAAA;QACX,OAAO,IAAI,CAAC,YAAY;IAC5B;IAEA,IAAI,WAAW,CAAC,KAAc,EAAA;AAC1B,QAAA,IAAI,CAAC,YAAY,GAAG,qBAAqB,CAAC,KAAK,CAAC;IACpD;AAIA;;;AAGG;;;AAGH,IAAA,IACI,WAAW,GAAA;QACX,OAAO,IAAI,CAAC,YAAY;IAC5B;IAEA,IAAI,WAAW,CAAC,KAAa,EAAA;AACzB,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AAEzB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAC5B;AAIA;;AAEG;;;AAGH,IAAA,IACI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,SAAS;IACzB;IAEA,IAAI,QAAQ,CAAC,KAAc,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,qBAAqB,CAAC,KAAK,CAAC;AAE7C,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAC5B;AAIA;;;AAGG;;;AAGH,IAAA,IACI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,SAAS;IACzB;IAEA,IAAI,QAAQ,CAAC,KAAc,EAAA;AACvB,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;YACrB,MAAM,gCAAgC,EAAE;QAC5C;AAEA,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;IAC1B;AAIA;;;;;;AAMG;;;AAGH,IAAA,IACI,WAAW,GAAA;QACX,OAAO,IAAI,CAAC,YAAY;IAC5B;IAEA,IAAI,WAAW,CAAC,EAAiC,EAAA;AAC7C,QAAA,IAAI,OAAO,EAAE,KAAK,UAAU,EAAE;YAC1B,MAAM,iCAAiC,EAAE;QAC7C;AAEA,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;AAEtB,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;;YAErB,IAAI,CAAC,mBAAmB,EAAE;QAC9B;IACJ;AA8BA;;;;;AAKG;;;AAGH,IAAA,IACI,gBAAgB,GAAA;QAChB,OAAO,IAAI,CAAC,iBAAiB;IACjC;IAEA,IAAI,gBAAgB,CAAC,EAAqD,EAAA;AACtE,QAAA,IAAI,OAAO,EAAE,KAAK,UAAU,EAAE;AAC1B,YAAA,MAAM,KAAK,CAAC,wCAAwC,CAAC;QACzD;AAEA,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;IAC/B;;;;AAqDA,IAAA,IACI,KAAK,GAAA;QACL,OAAO,IAAI,CAAC,MAAM;IACtB;IAEA,IAAI,KAAK,CAAC,QAAa,EAAA;AACnB,QAAA,IAAI,QAAQ,KAAK,IAAI,CAAC,MAAM,EAAE;AAC1B,YAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;AACzB,YAAA,IAAI,CAAC,MAAM,GAAG,QAAQ;QAC1B;IACJ;AAIA;;;AAGG;;;AAGH,IAAA,IACI,EAAE,GAAA;QACF,OAAO,IAAI,CAAC,GAAG;IACnB;IAEA,IAAI,EAAE,CAAC,KAAa,EAAA;QAChB,IAAI,CAAC,GAAG,GAAG,KAAK,IAAI,IAAI,CAAC,GAAG;AAC5B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAC5B;AAIA;;;AAGG;;;AAGH,IAAA,IACI,QAAQ,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS;IAC9C;IAEA,IAAI,QAAQ,CAAC,KAAa,EAAA;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;IAC1B;AAIA;;;AAGG;;;AAGH,IAAA,IACI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,SAAS;IACzB;IAEA,IAAI,QAAQ,CAAC,KAAc,EAAA;AACvB,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,QAAQ,EAAE;AACzB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AAEtB,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACtB,gBAAA,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAK;AACxB,oBAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,wBAAA,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE;oBAC3C;yBAAO;AACH,wBAAA,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE;oBAC1C;AACJ,gBAAA,CAAC,CAAC;YACN;;AAGA,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;QAC5B;IACJ;;AAKA,IAAA,IAAI,OAAO,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS;IAC1C;IAEA,IAAI,OAAO,CAAC,KAAc,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;IACzB;;AAMA,IAAA,IAAI,UAAU,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;IACzB;;AAQA,IAAA,IAAI,mBAAmB,GAAA;AACnB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAE5B,QAAA,OAAO,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE;IAC7G;AAEA;;;;;;;;AAQG;AACH,IAAA,IAAc,aAAa,GAAA;AACvB,QAAA,QACI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,cAAc;YACnB,CAAC,IAAI,CAAC,mBAAmB;YACzB,CAAC,IAAI,CAAC,iBAAiB;AACvB,YAAA,CAAC,IAAI,CAAC,qBAAqB,EAAE;IAErC;;AAGA,IAAA,IAAI,kBAAkB,GAAA;AAClB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB;;;AAIrC,QAAA,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,CAAC;IAC3E;;AAGA,IAAA,IAAI,cAAc,GAAA;AACd,QAAA,OAAO,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC;IACnD;AAEA;;;;;AAKG;AACH,IAAA,IAAY,gBAAgB,GAAA;QACxB,OAAO,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE;IAC1F;;AAGA,IAAA,IAAY,gBAAgB,GAAA;QACxB,OAAO;YACH,KAAK,EAAE,IAAI,CAAC,gBAAgB;AAC5B,YAAA,YAAY,EAAE,MAAM,IAAI;YACxB,UAAU,EAAE,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ;YACvC,WAAW,EAAE,CAAC,MAAM,EAAE,QAAQ,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE;SACrF;IACL;AAEA;;;AAGG;AACH,IAAA,IAAI,cAAc,GAAA;QACd,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO;IACpC;;AAGA,IAAA,IAAI,QAAQ,GAAA;AACR,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ;QAE7C,OAAO,IAAI,CAAC;AACR,cAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC;AAC7D,cAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAChE;;AAGA,IAAA,IAAI,YAAY,GAAA;QACZ,IAAI,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,EAAE;AAEzB,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;IAChF;;AAGA,IAAA,IAAI,aAAa,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACZ,YAAA,OAAO,EAAE;QACb;QAEA,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;AAExG,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE;YACd,eAAe,CAAC,OAAO,EAAE;QAC7B;QAEA,OAAO,IAAI,CAAC,kBAAkB,EAAE,GAAG,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,GAAG,eAAe;IAChH;;AAGA,IAAA,IAAI,KAAK,GAAA;QACL,OAAO,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE;IAC3C;;AAGA,IAAA,IAAI,SAAS,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,MAAM,KAAK,CAAC;IACrC;;AAGA,IAAA,IAAI,aAAa,GAAA;AACb,QAAA,QACI,IAAI,CAAC,cAAc,CAAC;AACf,aAAA,GAAG,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC;AAClD,aAAA,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI;IAEvD;;AAGA,IAAA,IAAI,aAAa,GAAA;AACb,QAAA,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAiB,KAAK,MAAM,KAAK,IAAI,CAAC,aAAa,CAAC;IACnF;;AAGA,IAAA,IAAI,aAAa,GAAA;AACb,QAAA,MAAM,0BAA0B,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAC/E,oCAAoC,CACvC;QAED,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,kBAAkB,CAAC,KAAK;AAElD,QAAA,OAAO,CAAC,0BAA0B,IAAI,IAAI,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;cACjE,kBAAkB,CAAC;AACrB,cAAE,kBAAkB,CAAC,YAAY;IACzC;;AAGA,IAAA,IAAI,cAAc,GAAA;QACd,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;IAC5C;AA4BA,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;AAhyBM,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC9C,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;AACxB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAC9C,QAAA,IAAA,CAAA,wBAAwB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACpD,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAA0B,UAAU,CAAC;AAChD,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;QAClC,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAClE,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC/C,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC/C,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAE;AAC1F,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC5C,QAAA,IAAA,CAAA,qBAAqB,GAAG,MAAM,CAAC,0BAA0B,CAAC;QACjE,IAAA,CAAA,aAAa,GAAI,MAAM,CAAmB,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;AAExE,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAE/B,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS;QAEtC,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;QAGlF,IAAA,CAAA,UAAU,GAAY,KAAK;AAC3B;;;;AAIG;AACM,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAQ;;QAG3C,IAAA,CAAA,WAAW,GAAG,QAAQ;QAEtB,IAAA,CAAA,WAAW,GAAW,CAAC;;QAMvB,IAAA,CAAA,eAAe,GAAG,CAAC;;QAMnB,IAAA,CAAA,8BAA8B,GAAoB,EAAE;AAEpD;;;;AAIG;AACc,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,OAAO,EAAmC;;QAMtF,IAAA,CAAA,eAAe,GAAW,KAAK;;AAG/B,QAAA,IAAA,CAAA,wBAAwB,GAAG,IAAI,OAAO,EAAU;;AAGhD,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,qBAAqB,EAAE;AAE7C;;;;;;AAMG;QACH,IAAA,CAAA,OAAO,GAAG,CAAC;AAEX;;;;;AAKG;QACgB,IAAA,CAAA,cAAc,GAAG,cAAc;AAElD;;;;;AAKG;AACH,QAAA,IAAA,CAAA,SAAS,GAAwB;AAC7B,YAAA;AACI,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,OAAO,EAAE,QAAQ;AACjB,gBAAA,QAAQ,EAAE,OAAO;AACjB,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,UAAU,EAAE;AACf,aAAA;AACD,YAAA;AACI,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,QAAQ,EAAE,OAAO;AACjB,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,UAAU,EAAE;AACf;SACJ;AAED;;AAEG;AACM,QAAA,IAAA,CAAA,OAAO,GAAG,SAAS,CAAa,SAAS,mDAAC;;AAG1C,QAAA,IAAA,CAAA,KAAK,GAAG,SAAS,CAAa,OAAO,iDAAC;;AAGtC,QAAA,IAAA,CAAA,gBAAgB,GAAG,SAAS,CAAC,QAAQ,CAAa,kBAAkB,CAAC;;AAGrE,QAAA,IAAA,CAAA,eAAe,GAAG,SAAS,CAAC,SAAS,2DAAC;;AAMtC,QAAA,IAAA,CAAA,MAAM,GAAG,YAAY,CAAC,eAAe,0CAAI,IAAI,EAAE,UAAU,EAAA,CAAA,GAAA,CAAlB,EAAE,IAAI,EAAE,UAAU,EAAE,GAAC;;AAG5D,QAAA,IAAA,CAAA,eAAe,GAAG,YAAY,CAAC,eAAe,2DAAC;;AAG/C,QAAA,IAAA,CAAA,qBAAqB,GAAG,YAAY,CAAC,wBAAwB,iEAAC;;AAM9D,QAAA,IAAA,CAAA,aAAa,GAAG,YAAY,CAAC,gBAAgB,yDAAC;;AAG9C,QAAA,IAAA,CAAA,aAAa,GAAG,YAAY,CAAC,gBAAgB,yDAAC;;AAG9C,QAAA,IAAA,CAAA,oBAAoB,GAAG,YAAY,CAAC,qBAAqB,wDAAI,IAAI,EAAE,WAAW,EAAA,CAAA,GAAA,CAAnB,EAAE,IAAI,EAAE,WAAW,EAAE,GAAC;AAE1F;;;AAGG;AACM,QAAA,IAAA,CAAA,OAAO,GAAG,YAAY,CAAC,UAAU,2CAAI,WAAW,EAAE,KAAK,EAAA,CAAA,GAAA,CAApB,EAAE,WAAW,EAAE,KAAK,EAAE,GAAC;AAKnE;;;;;;;;AAQG;AACM,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,SAAS,EAAa;;AAG7C,QAAA,IAAA,CAAA,YAAY,GAAG,eAAe,CAAC,WAAW,wDAAC;;AAG3C,QAAA,IAAA,CAAA,MAAM,GAAG,YAAY,CAAC,eAAe,kDAAC;;AAGtC,QAAA,IAAA,CAAA,WAAW,GAAG,YAAY,CAAC,0BAA0B,uDAAC;;;;QAKtD,IAAA,CAAA,eAAe,GAAW,eAAe;;AAGxC,QAAA,IAAA,CAAA,aAAa,GAAW,cAAc,CAAC,MAAM,CAAC,SAAS;;AAGxD,QAAA,IAAA,CAAA,qBAAqB,GAAG,KAAK,CAAU,KAAK,iEAAC;AAEtD;;;;;AAKG;AACM,QAAA,IAAA,CAAA,kBAAkB,GAAG,KAAK,CAAS,CAAC,8DAAC;;AAGrC,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAOzB,SAAU,sDAAC;;AAGJ,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAAS,kCAAkC,yDAAC;AAQ1E;;;AAGG;AACM,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAC3B,SAAU,0DACb;AAED;;;AAGG;AACM,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAmB,KAAK,6CAAI,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAA7B,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAC;QAqB5E,IAAA,CAAA,0BAA0B,GAAG,IAAI,CAAC,gCAAgC,CACtE,IAAI,CAAC,cAAc,EAAE,yBAAyB,CACjD;;AAGQ,QAAA,IAAA,CAAA,sBAAsB,GAAyC,KAAK,CAAC,MAAK;AAC/E,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,gBAAA,OAAO,KAAK,CACR,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,iBAAiB,CAAC,EACzD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CACrB,SAAS,CAAC,CAAC,IAA0B,KACjC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,iBAAiB,CAAC,CAAC,GAAG,KAAK,CACjF,CACJ,EACD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAC5B,SAAS,CAAC,IAAW,CAAC,EACtB,SAAS,CAAC,MAAK;AACX,oBAAA,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;oBAClD,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CACvD,CAAC,MAAM,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,MAAmB,CAAC,CACnD;oBAED,OAAO,eAAe,CAAC;AACnB,0BAAE,KAAK,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,iBAAiB,CAAC;0BAClE,KAAK;gBACf,CAAC,CAAC,CACL,CACJ;YACL;YAEA,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,CAC5C,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,MAAM,IAAI,CAAC,sBAAsB,CAAC,CAC/C;AACL,QAAA,CAAC,CAAyC;AAE1C;;;;;AAKG;AACgB,QAAA,IAAA,CAAA,YAAY,GAA0B,IAAI,YAAY,EAAW;;QAG3E,IAAA,CAAA,YAAY,GAAG,MAAM,EAAQ;;QAGX,IAAA,CAAA,YAAY,GAAqB,IAAI,CAAC,YAAY,CAAC,IAAI,CAC9E,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAChB,GAAG,CAAC,MAAK,EAAE,CAAC,CAAC,CAChB;;QAG0B,IAAA,CAAA,YAAY,GAAqB,IAAI,CAAC,YAAY,CAAC,IAAI,CAC9E,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EACjB,GAAG,CAAC,MAAK,EAAE,CAAC,CAAC,CAChB;;QAGQ,IAAA,CAAA,eAAe,GAAG,MAAM,EAAmB;AAEpD;;;AAGG;QACM,IAAA,CAAA,WAAW,GAAG,MAAM,EAA2C;AAExE;;;;AAIG;QACM,IAAA,CAAA,WAAW,GAAG,MAAM,EAAO;AAEpC;;;AAGG;AACM,QAAA,IAAA,CAAA,sBAAsB,GAAG,KAAK,CAAkB,CAAC,0DAAI,SAAS,EAAE,eAAe,EAAA,CAAA,GAAA,CAA5B,EAAE,SAAS,EAAE,eAAe,EAAE,GAAC;;QAGlF,IAAA,CAAA,gBAAgB,GAAG,MAAM,EAAQ;QAiBlC,IAAA,CAAA,YAAY,GAAY,KAAK;QAqC7B,IAAA,CAAA,SAAS,GAAY,KAAK;QAqB1B,IAAA,CAAA,SAAS,GAAY,KAAK;AA6BlC;;;;;;;;;;;;AAYG;QACM,IAAA,CAAA,oBAAoB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,sBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAoC;;AAGhE,QAAA,IAAA,CAAA,eAAe,GAAG,KAAK,CAAC,KAAK,mDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAA7B,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAC;AAExE;;;;;;;AAOG;AACM,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,KAAK,6CAAI,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAA7B,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAC;AAuBlE;;;;AAIG;QACM,IAAA,CAAA,UAAU,GAAG,KAAK,CAAgB,IAAI,CAAC,cAAc,EAAE,UAAU,IAAI,IAAI,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAEnF;;;AAGG;QACM,IAAA,CAAA,aAAa,GAAG,KAAK,CAC1B,IAAI,CAAC,cAAc,EAAE,aAAa,KAAK;AACnC,cAAE;AACF,cAAE,IAAI,CAAC,cAAc,CAAC,aAAa,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,eAAA,EACrC,SAAS,EAAE,eAAe,OAA5B,EAAE,SAAS,EAAE,eAAe,EAAE,GACjC;AAED;;;;AAIG;AACM,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAC1B,IAAI,CAAC,cAAc,EAAE,aAAa,KAAK,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,iDACzF,SAAS,EAAE,eAAe,EAAA,CAAA,GAAA,CAA5B,EAAE,SAAS,EAAE,eAAe,EAAE,GACjC;AAED;;;;;;;AAOG;AACM,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAC3B,IAAI,CAAC,cAAc,EAAE,cAAc,KAAK,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,kDAC3F,SAAS,EAAE,eAAe,EAAA,CAAA,GAAA,CAA5B,EAAE,SAAS,EAAE,eAAe,EAAE,GACjC;AAED;;;;AAIG;AACgB,QAAA,IAAA,CAAA,mBAAmB,GAAG,QAAQ,CAAC,MAAM,6BAA6B,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,+DAAC;QAoDrG,IAAA,CAAA,SAAS,GAAG,CAAC;QAgCb,IAAA,CAAA,SAAS,GAAY,KAAK;;QAYlC,IAAA,CAAA,SAAS,GAAG,KAAK;QAUT,IAAA,CAAA,QAAQ,GAAG,KAAK;;QAgJhB,IAAA,CAAA,mBAAmB,GAAG,KAAK;;AAG3B,QAAA,IAAA,CAAA,iBAAiB,GAAG,YAAY,CAAC,KAAK;;AAGtC,QAAA,IAAA,CAAA,kBAAkB,GAAG,YAAY,CAAC,KAAK;;QAGvC,IAAA,CAAA,SAAS,GAAG,CAAC;;AAGJ,QAAA,IAAA,CAAA,GAAG,GAAG,CAAA,WAAA,EAAc,YAAY,EAAE,EAAE;;AAG7C,QAAA,IAAA,CAAA,cAAc,GAA6B,IAAI,eAAe,CAAC,KAAK,CAAC;;QAMrE,IAAA,CAAA,4BAA4B,GAAY,KAAK;;AAmNrD,QAAA,IAAA,CAAA,QAAQ,GAAyB,MAAK,EAAE,CAAC;;AAGzC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAK,EAAE,CAAC;AA8SpB;;;AAGG;QACH,IAAA,CAAA,oBAAoB,GAAG,MAAK;YACxB,IACI,CAAC,IAAI,CAAC,SAAS;gBACf,IAAI,CAAC,aAAa,EAAE;gBACpB,IAAI,CAAC,aAAa,EAAE;AACpB,gBAAA,IAAI,CAAC,KAAK;gBACV,CAAC,IAAI,CAAC,QAAQ;gBACd,IAAI,CAAC,SAAS,EAAE;gBAEhB;AAEJ,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,2BAA2B,EAAE;YAC1D,MAAM,CAAC,sBAAsB,EAAE,YAAY,CAAC,GAAG,IAAI,CAAC,oBAAoB,EAAE;YAE1E,IAAI,CAAC,WAAW,GAAI,IAAI,CAAC,QAAqC,CAAC,MAAM,GAAG,YAAY;AACpF,YAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE;AAEvC,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AAClB,gBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAG,CAAC,aAAa,CAAC,aAAa,CAAC,gCAAgC,CAAC;AAClG,gBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAG,CAAC,aAAa,CAAC,aAAa,CAAC,yBAAyB,CAAC;AAE1F,gBAAA,IAAI,CAAC,YAAY,IAAI,CAAC,WAAW,EAAE;AAC/B,oBAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;oBAEtC;gBACJ;gBAEA,MAAM,kBAAkB,GAAG,YAAY,CAAC,SAAS,GAAG,YAAY,CAAC,YAAY;AAC7E,gBAAA,MAAM,iBAAiB,GAAW,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC;AAExF,gBAAA,MAAM,gBAAgB,GAAW,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC;AACtF,gBAAA,MAAM,YAAY,GAAW,gBAAgB,IAAI,kBAAkB,GAAG,iBAAiB,GAAG,CAAC,CAAC;AAE5F,gBAAA,IAAI,kBAAkB,IAAI,eAAe,GAAG,YAAY,EAAE;AACtD,oBAAA,IAAI,CAAC,WAAW,GAAG,CAAC;AACpB,oBAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE;gBAC3C;gBAEA,IACI,sBAAsB,KAAK,gBAAgB;AAC3C,oBAAA,sBAAsB,GAAG,iBAAiB,GAAG,gBAAgB,EAC/D;AACE,oBAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;oBAEtC;gBACJ;YACJ;AAEA,YAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;AAC1C,QAAA,CAAC;;QA6EO,IAAA,CAAA,kBAAkB,GAAG,MAAK;;;YAG9B,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,QAAQ,CAAC;YAEtD,IAAI,CAAC,eAAe,GAAG,MAAM,EAAE,eAAe,IAAI,IAAI,CAAC,eAAe;AACtE,YAAA,IAAI,CAAC,aAAa,GAAG,MAAM,EAAE,SAAS,IAAI,cAAc,CAAC,MAAM,CAAC,SAAS;AAEzE,YAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;AAC1C,QAAA,CAAC;;QAmhBO,IAAA,CAAA,YAAY,GAAG,CAAC,EAAO,EAAE,EAAO,KAAK,EAAE,KAAK,EAAE;QA3pClD,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC;;;;QAKxG,MAAM,CAAC,MAAK;YACR,IAAI,CAAC,eAAe,EAAE;YAEtB,IAAI,CAAC,oBAAoB,EAAE;AAC/B,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;;;AAGhB,YAAA,IAAI,CAAC,SAAS,CAAC,aAAa,GAAG,IAAI;QACvC;;AAGA,QAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE;QAEjB,eAAe,CAAC,MAAK;YACjB,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;AACpC,gBAAA,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO;AACpD,qBAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC,EAAE,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACpE,qBAAA,SAAS,CAAC,IAAI,CAAC,oBAAoB,CAAC;YAC7C;AACJ,QAAA,CAAC,CAAC;IACN;;IAGA,QAAQ,GAAA;QACJ,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC;AAC7D,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;;;;AAKxB,QAAA,IAAI,CAAC;aACA,IAAI,CAAC,oBAAoB,EAAE,EAAE,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aAChE,SAAS,CAAC,MAAK;AACZ,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,gBAAA,IAAI,CAAC,SAAS,GAAG,CAAC;AAElB,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;gBAE5B,IAAI,MAAM,EAAE;oBACR,MAAM,CAAC,KAAK,EAAE;gBAClB;AAEA,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;YAChC;iBAAO;AACH,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;AAC7B,gBAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;YAC1C;AACJ,QAAA,CAAC,CAAC;QAEN,KAAK,CAAC,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,cAAc;;;;AAIjD,aAAA,IAAI,CAAC,oBAAoB,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aAC1E,SAAS,CAAC,MAAK;YACZ,IAAI,CAAC,oBAAoB,EAAE;AAE3B,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;;;;gBAIlB,IAAI,CAAC,iBAAiB,EAAE;gBACxB,IAAI,CAAC,kBAAkB,EAAE;YAC7B;AACJ,QAAA,CAAC,CAAC;IACV;;IAGA,SAAS,GAAA;QACL,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;AAE1C,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,gBAAgB,EAAE;QAC3B;IACJ;;IAGA,kBAAkB,GAAA;QACd,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE;QACjD,IAAI,CAAC,cAAc,EAAE;QAErB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AACtF,YAAA,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;AAChD,YAAA,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,EAAE,CAAC;AACxD,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;YAC3F,IAAI,CAAC,oBAAoB,EAAE;YAC3B,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,mBAAmB,EAAE;AAC9B,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,MAAM;AACP,cAAE,OAAO,CAAC,IAAI,CACV,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,EACnC,KAAK,CAAC,CAAC,CAAC;;;;;AAKR,QAAA,MAAM,CAAC,MAAM,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;aAE3D,SAAS,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC;IAC9D;;IAGA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;AAC5B,QAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE;QACpC,IAAI,CAAC,0BAA0B,EAAE;AAEjC,QAAA,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC;IACvC;;IAGA,gBAAgB,GAAA;AACZ,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,UAAU;QACtD,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,wBAAwB;AACvE,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,GAAI,IAAI,CAAC,SAAS,CAAC,OAA8B,GAAG,IAAI;QACtF,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC;AAEtD,QAAA,IAAI,QAAQ,KAAK,QAAQ,EAAE;AACvB,YAAA,IAAI,CAAC,UAAU,GAAG,QAAQ;AAC1B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;QAC5B;IACJ;AAEA;;;;;AAKG;IAEH,wBAAwB,CAAC,eAAuB,EAAE,WAAmB,EAAA;QACjE,OAAO,eAAe,CAAC,OAAO,CAAC,cAAc,EAAE,WAAW,CAAC,QAAQ,EAAE,CAAC;IAC1E;AAEA;;;;;AAKG;IACO,eAAe,GAAA;AACrB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB;QAErC,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE;;;;AAKrB,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;AAE/B,QAAA,IAAI;YACA,eAAe,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QACnE;gBAAU;AACN,YAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;QACpC;QAEA,IAAI,CAAC,gBAAgB,EAAE;AACvB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AAExB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACxF;AAEA;;;AAGG;IACH,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;QAC3B,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAEjC,IAAI,CAAC,gBAAgB,EAAE;IAC3B;AAEA;;;;AAIG;AACH,IAAA,UAAU,CAAC,KAAY,EAAA;AACnB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;QAE9B,IAAI,OAAO,EAAE;AACT,YAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;QACxB;aAAO;YACH,KAAK,CAAC,eAAe,EAAE;YACvB,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,KAAK,EAAE;YACZ,IAAI,CAAC,KAAK,EAAE;QAChB;IACJ;;IASA,WAAW,GAAA;AACP,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;QAE5B,IAAI,CAAC,MAAM,EAAE;YACT;QACJ;QAEA,MAAM,CAAC,KAAK,EAAE;AACd;;;;AAIE;AACF,QAAA,MAAM,CAAC,eAAe,GAAG,KAAK;IAClC;;IAGA,MAAM,GAAA;AACF,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,KAAK,EAAE;QAChB;aAAO;YACH,IAAI,CAAC,IAAI,EAAE;QACf;IACJ;AAEA;;;;;;AAMG;IACH,IAAI,GAAA;AACA,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS;YAAE;AAErC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AAExB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC;AAEnC,YAAA,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,EAAE,yCAAyC,CAAC;QACzG;aAAO;YACH,IAAI,CAAC,SAAS,EAAE;QACpB;IACJ;AAEA;;;AAGG;IACH,SAAS,GAAA;AACL,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AAE9B,QAAA,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE;;QAGlC,IAAI,CAAC,WAAW,GAAG,CACf,IAAI,CAAC,eAAe,EAAE,yBAAyB,EAAE,CAAC,aAAa,IAAI,OAAO,CAAC,aAAa,EAC1F,qBAAqB,EAAE;;;AAIzB,QAAA,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,WAAW,CAAC,CAAC;;;;AAKjG,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,yBAAyB,EAAE;QACzE;QAEA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,UAAU,CAAC;AAEvG,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AAErB,QAAA,IAAI,CAAC,UAAU,CAAC,yBAAyB,CAAC,IAAI,CAAC;QAC/C,IAAI,CAAC,sBAAsB,EAAE;AAC7B,QAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;;QAGtC,IAAI,CAAC,OAAO,CAAC;AACR,aAAA,YAAY;AACZ,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;aACZ,SAAS,CAAC,MAAK;YACZ,IAAI,CAAC,0BAA0B,EAAE;AAEjC,YAAA,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,cAAc,EAAE;AACjG,gBAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAA,EAAG,IAAI,CAAC,eAAe,IAAI;YAC1F;YAEA,IAAI,CAAC,0BAA0B,EAAE;AAEjC,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;gBACf,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChD;AACJ,QAAA,CAAC,CAAC;IACV;;IAGA,KAAK,GAAA;QACD,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE;;QAGrB,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;QACtB,IAAI,CAAC,0BAA0B,EAAE;;;AAGjC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS;AACjF,QAAA,IAAI,CAAC,UAAU,CAAC,yBAAyB,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,KAAK,CAAC;AAEvE,QAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;QACtC,IAAI,CAAC,SAAS,EAAE;QAEhB,IAAI,CAAC,+BAA+B,EAAE;IAC1C;AAEA;;;;;AAKG;AACH,IAAA,UAAU,CAAC,KAAU,EAAA;AACjB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,YAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;QACnC;IACJ;AAEA;;;;;;AAMG;AACH,IAAA,gBAAgB,CAAC,EAAwB,EAAA;AACrC,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACtB;AAEA;;;;;;AAMG;;AAEH,IAAA,iBAAiB,CAAC,EAAY,EAAA;AAC1B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACvB;AAEA;;;;;AAKG;AACH,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAChC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;AAC1B,QAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;AACtC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAC5B;AAEA;;;AAGG;IACH,KAAK,GAAA;AACD,QAAA,OAAO,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK,GAAG,KAAK;IACxD;AAEA;;;;AAIG;AACH,IAAA,aAAa,CAAC,KAAoB,EAAA;QAC9B,IAAI,IAAI,CAAC,QAAQ;YAAE;AAEnB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;QACjC;aAAO;AACH,YAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;QACnC;IACJ;;IAGA,OAAO,GAAA;AACH,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAChB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AAEpB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;QAC5B;IACJ;AAEA;;;AAGG;IACH,MAAM,GAAA;AACF,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;QAErB,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnC,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;AACtC,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;QAC5B;IACJ;AAEA;;;AAGG;IACH,UAAU,GAAA;AACN,QAAA,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AACxD,YAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE;YACvC,IAAI,CAAC,kBAAkB,EAAE;YACzB,IAAI,CAAC,gBAAgB,EAAE,CAAC,aAAa,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;YAEhE,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAI,CAAC,2BAA2B,EAAE;;YAElC,cAAc,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;AAC9C,QAAA,CAAC,CAAC;;;QAIF,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;YACpF,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAI,CAAC,kBAAkB,EAAE;AAC7B,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,sBAAsB,EAAE;AAC7B,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IAChF;;IAGU,uBAAuB,GAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE,yBAAyB,EAAE,CAAC,aAAa,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa;IAC3G;IAEU,WAAW,GAAA;QACjB,OAAO,IAAI,CAAC,SAAS;IACzB;AAEA;;;AAGG;IACgB,uBAAuB,GAAA;QACtC,OAAO,IAAI,CAAC,iBAAiB;IACjC;;IAGA,aAAa,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,eAAe,GAAG,CAAA,IAAA,EAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAA,CAAE,GAAG,EAAE;IAC1E;;IAGU,eAAe,GAAA;AACrB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;QACpC,MAAM,OAAO,GAAG,CAAC,mBAAmB,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;AAE3D,QAAA,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;AAChC,YAAA,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;QAC5B;aAAO,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,YAAY,GAAG,EAAE;AAC/D,YAAA,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;QAC/B;aAAO,IAAI,UAAU,EAAE;YACnB,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7E;QAEA,OAAO,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IAC5C;;IAGA,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,EAAE;IACzC;AAEA;;;AAGG;IACH,gBAAgB,GAAA;QACZ,IAAI,CAAC,KAAK,EAAE;IAChB;AAEA;;;;AAIG;IACH,mBAAmB,CAAC,MAAqB,EAAE,MAAM,EAAA;QAC7C,MAAM,CAAC,eAAe,EAAE;QAExB,MAAM,CAAC,QAAQ,EAAE;IACrB;AAyDA;;;AAGG;IACH,aAAa,GAAA;QACT,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC;IAClE;AAEA;;;;AAIG;AACH,IAAA,WAAW,CAAC,MAAkB,EAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;YACtD,IAAI,CAAC,KAAK,EAAE;QAChB;IACJ;;AAGA,IAAA,yBAAyB,CAAC,MAAiB,EAAA;;;;;;QAMvC,IAAI,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE;YACzC;QACJ;QAEA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACnC,YAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC;;;YAGrC,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE;AAE/C,YAAA,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,uBAAuB;AACvD,YAAA,IAAI,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,uBAAuB,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC;YACzF,MAAM,mBAAmB,GAAG,OAAO,CAAC,SAAS,CAAC,EAAE,QAAQ;AAExD,YAAA,IAAI,OAAO,KAAK,SAAS,EAAE;AACvB,gBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC;gBAElC;YACJ;AAEA,YAAA,IAAI,SAAS,GAAG,OAAO,EAAE;gBACrB,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC;YAC/C;YAEA;AACK,iBAAA,KAAK,CAAC,SAAS,EAAE,OAAO,GAAG,CAAC;AAC5B,iBAAA,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;AACpD,iBAAA,OAAO,CAAC,CAAC,MAAM,KAAI;gBAChB,IAAI,mBAAmB,EAAE;oBACrB,MAAM,CAAC,MAAM,EAAE;gBACnB;qBAAO;oBACH,MAAM,CAAC,QAAQ,EAAE;gBACrB;AACJ,YAAA,CAAC,CAAC;QACV;aAAO;AACH,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC;QACtC;IACJ;;IAGU,gBAAgB,GAAA;AACtB,QAAA,QACI,WAAW,CAAC,IAAI,CAAC,yBAAyB,CAAC;AAC3C,YAAA,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE;YACxB,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,yBAAyB;IAE7D;;IAeQ,SAAS,GAAA;QACb,IAAI,CAAC,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,KAAK;AAEjC,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,YAAY;IAC/F;;IAGQ,sBAAsB,GAAA;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,WAAW;AAEtD,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AACzF,YAAA,OAAO,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;AACjE,QAAA,CAAC,CAAC;IACN;;IAGQ,oBAAoB,GAAA;AACxB,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,KACzF,SAAyB,CAAC,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CACrE;IACL;AAEA;;;AAGG;IACK,cAAc,GAAA;;AAElB,QAAA,MAAM,oBAAoB,GAAG,IAAI,CAAC;aAC7B,UAAW,CAAC,oBAAoB;AAChC,aAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACb,aAAA,IAAI,CACD,MAAM,CAAC,MAAK;YACR,IAAI,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,CAAC,iBAAiB,GAAG,CAAC,EAAE;gBACnE,OAAO,IAAI,CAAC,sBAAsB,EAAE,GAAG,IAAI,CAAC,oBAAoB,EAAE;YACtE;AAEA,YAAA,OAAO,IAAI;QACf,CAAC,CAAC,CACL;AAEL,QAAA,OAAO,KAAK,CAAC,oBAAoB,EAAE,IAAI,CAAC,UAAU,CAAC,UAAW,CAAC,WAAW,EAAE,CAAC;IACjF;;IAGQ,2BAA2B,GAAA;AAC/B,QAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM;IAC5E;;IAGQ,gBAAgB,GAAA;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YACrB;QACJ;QAEA,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;IACnH;AAEA;;;;;AAKG;IACK,2BAA2B,GAAA;AAC/B,QAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE;AAErC,QAAA,MAAM,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,EAAE;AAC1D,QAAA,MAAM,QAAQ,GACV,IAAI,CAAC,iBAAiB,IAAI;AACtB,cAAE;AACK,iBAAA,eAAe;AACf,iBAAA,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,qBAAqB,EAAG,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;AAClF,cAAE,SAAS,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,IAAI,CAC3D,GAAG,CAAC,MAAK;gBACL,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,aAAa;gBAErD,OAAO,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,YAAY;YAC1E,CAAC,CAAC,CACL;AAEX,QAAA,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAK;YAChC,IAAI,CAAC,kBAAkB,GAAG;AACrB,iBAAA,IAAI,CACD,SAAS,CAAC,gCAAgC,CAAC,EAC3C,GAAG,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC,EAC5D,oBAAoB,EAAE,EACtB,MAAM,CAAC,OAAO,CAAC,EACf,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,EACnC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC;iBAE/B,SAAS,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC;AAC9E,QAAA,CAAC,CAAC;IACN;;IAGQ,2BAA2B,GAAA;AAC/B,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,EAAE;QAE7C,YAAY,CAAC,aAAa,CAAC,gCAAgC,CAAC,EAAE,MAAM,EAAE;AACtE,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAG,CAAC,aAAa,EAAE,YAAY,CAAC;QAEvE,IAAI,eAAe,GAAW,CAAC;QAC/B,MAAM,gCAAgC,GAAG,YAAY,CAAC,gBAAgB,CAAc,SAAS,CAAC;AAE9F,QAAA,gCAAgC,CAAC,OAAO,CAAC,CAAC,IAAI,MAAM,eAAe,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;QAEhG,YAAY,CAAC,MAAM,EAAE;AAErB,QAAA,OAAO,eAAe;IAC1B;AAEA;;;;;;;;;;AAUG;AACK,IAAA,YAAY,CAAC,OAAoB,EAAA;QACrC,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC;QAE3D,MAAM,KAAK,GAAW,OAAO,CAAC,qBAAqB,EAAE,CAAC,KAAK;QAC3D,MAAM,UAAU,GAAW,UAAU,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC;QACpE,MAAM,WAAW,GAAW,UAAU,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC;QAEtE,OAAO,KAAK,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,CAACA,OAA4B,CAAC;IACpF;;AAGQ,IAAA,mBAAmB,CAAC,KAAoB,EAAA;AAC5C,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO;AAC7B,QAAA,MAAM,UAAU,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;AACpF,QAAA,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;;AAGlD,QAAA,IAAI,SAAS,KAAK,CAAC,IAAI,CAAC,cAAc,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,CAAC,EAAE;AACpE,YAAA,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,EAAE;QACf;AAAO,aAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AAC7B,YAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC;QACpC;IACJ;;AAGQ,IAAA,iBAAiB,CAAC,KAAoB,EAAA;AAC1C,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO;QAC7B,MAAM,UAAU,GAAG,OAAO,KAAK,UAAU,IAAI,OAAO,KAAK,QAAQ;AAEjE,QAAA,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,GAAG,EAAE;;YAEvE,KAAK,CAAC,cAAc,EAAE;;AAGtB,YAAA,IAAI,OAAO,KAAK,MAAM,EAAE;gBACpB,KAAK,CAAC,eAAe,EAAE;YAC3B;YAEA,IAAI,CAAC,KAAK,EAAE;YACZ,IAAI,CAAC,KAAK,EAAE;QAChB;AAAO,aAAA,IAAI,OAAO,KAAK,IAAI,EAAE;YACzB,KAAK,CAAC,cAAc,EAAE;AAEtB,YAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE;QACxC;AAAO,aAAA,IAAI,OAAO,KAAK,GAAG,EAAE;YACxB,KAAK,CAAC,cAAc,EAAE;AAEtB,YAAA,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE;QACvC;AAAO,aAAA,IAAI,OAAO,KAAK,OAAO,EAAE;YAC5B,KAAK,CAAC,cAAc,EAAE;AAEtB,YAAA,IAAI,CAAC,UAAU,CAAC,yBAAyB,EAAE;QAC/C;AAAO,aAAA,IAAI,OAAO,KAAK,SAAS,EAAE;YAC9B,KAAK,CAAC,cAAc,EAAE;AAEtB,YAAA,IAAI,CAAC,UAAU,CAAC,qBAAqB,EAAE;QAC3C;AAAO,aAAA,IAAI,CAAC,OAAO,KAAK,KAAK,IAAI,OAAO,KAAK,KAAK,KAAK,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE;YAC/E,KAAK,CAAC,cAAc,EAAE;;;;YAKtB,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,KAAK,IAAI,CAAC,eAAe,EAAE,EAAE;gBACvD,IAAI,CAAC,eAAe,EAAE;YAC1B;iBAAO;AACH,gBAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,oBAAoB,EAAE;YACrD;QACJ;aAAO,IAAI,IAAI,CAAC,cAAc,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE;AAClD,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC;QACtC;aAAO;AACH,YAAA,MAAM,sBAAsB,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe;AAE9D,YAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC;YAEhC,IACI,IAAI,CAAC,cAAc;gBACnB,UAAU;AACV,gBAAA,KAAK,CAAC,QAAQ;gBACd,IAAI,CAAC,UAAU,CAAC,UAAU;AAC1B,gBAAA,IAAI,CAAC,UAAU,CAAC,eAAe,KAAK,sBAAsB,EAC5D;AACE,gBAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,oBAAoB,EAAE;YACrD;;;;YAKA,IAAI,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,eAAe,KAAK,sBAAsB,EAAE;AAC1E,gBAAA,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,KAAK,EAAE;YACvC;AAEA,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAE5B,YAAA,IAAI,MAAM,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;gBACnC,MAAM,CAAC,KAAK,EAAE;YAClB;YAEA,IAAI,MAAM,KAAK,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE;gBACjF,UAAU,CAAC,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;YACnD;QACJ;IACJ;AAEA;;;AAGG;IACK,mBAAmB,GAAA;;;AAGvB,QAAA,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAK;YACxB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;AACjF,QAAA,CAAC,CAAC;IACN;;IAGQ,iBAAiB,GAAA;AACrB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,UAA8B;AAEjE,QAAA,OAAO,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,KAAK,UAAU,CAAC;IACxF;AAEA;;;;;;;AAOG;IACK,oBAAoB,GAAA;AACxB,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;;;;AAI7C,QAAA,MAAM,uBAAuB,GAAG,CAAC,CAAC,eAAe,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,KAAK,eAAe;QAEpG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,eAAe,GAAG,CAAC,eAAe,EAAE,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC;AACtF,QAAA,IAAI,CAAC,gBAAgB,CAAC,eAAe,EAAE;AAEvC,QAAA,IAAI,uBAAuB,IAAI,IAAI,CAAC,SAAS,EAAE;YAC3C,IAAI,CAAC,sBAAsB,EAAE;QACjC;IACJ;AAEA;;;;AAIG;AACK,IAAA,mBAAmB,CAAC,KAAkB,EAAA;QAC1C,IAAI,CAAC,8BAA8B,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ;AAElE,QAAA,IAAI,IAAI,CAAC,cAAc,IAAI,KAAK,EAAE;YAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACvB,MAAM,8BAA8B,EAAE;YAC1C;AAEA,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;AAC3B,YAAA,KAAK,CAAC,OAAO,CAAC,CAAC,YAAiB,KAAK,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;YACpE,IAAI,CAAC,UAAU,EAAE;QACrB;aAAO;AACH,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;YAC3B,MAAM,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;;;;;;;AAQnD,YAAA,IAAI,mBAAmB,IAAI,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC,EAAE;AACjG,gBAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,mBAAmB,CAAC;YACtD;QACJ;AAEA,QAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;IAC1C;AAEA;;;;AAIG;AACK,IAAA,mBAAmB,CAAC,KAAU,EAAA;QAClC,OAAO;AACH,YAAA,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;AACzB,YAAA,GAAG,IAAI,CAAC,8BAA8B,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC;;SAE5F,CAAC,IAAI,CACF,CAAC,MAAqB,KAAK,MAAM,CAAC,KAAK,IAAI,IAAI,IAAI,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAC3G;IACL;AAEA;;;AAGG;AACK,IAAA,WAAW,CAAC,KAAU,EAAA;QAC1B,MAAM,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;QAE3D,IAAI,mBAAmB,EAAE;AACrB,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,mBAAmB,CAAC;AAC/C,YAAA,IAAI,CAAC,yBAAyB,CAAC,mBAAmB,CAAC;;AAGnD,YAAA,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,KAAK,mBAAmB,CAAC;QACxE;QAEA,MAAM,aAAa,GAAG,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC;QAE7D,IAAI,aAAa,EAAE;AACf,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,aAAa,CAAC;QAC7C;AAEA,QAAA,OAAO,SAAS;IACpB;AAEA;;;AAGG;AACK,IAAA,2BAA2B,CAAC,KAAU,EAAA;;QAE1C,IAAI,KAAK,IAAI,IAAI;AAAE,YAAA,OAAO,SAAS;AAEnC,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACxB,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE,EAAE,eAAe;AACtD,YAAA,MAAM,0BAA0B,GAC5B,MAAM,YAAY,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,GAAG,SAAS;YAE9F,IAAI,0BAA0B,EAAE;AAC5B,gBAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,0BAA0B,CAAC;YAC/D;;;AAIA,YAAA,OAAO,IAAI,CAAC,oBAAoB,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,SAAS;QACpF;;;AAIA,QAAA,OAAO,IAAI,CAAC,qBAAqB,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,SAAS;IACrF;AAEA;;;;AAIG;AACK,IAAA,mBAAmB,CAAC,KAAU,EAAA;AAClC,QAAA,MAAM,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,EAAE;QAExD,OAAO,oBAAoB,GAAG,oBAAoB,CAAC,KAAK,CAAC,GAAG,IAAI,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC;IAC1G;AAEA;;;AAGG;AACK,IAAA,yBAAyB,CAAC,MAAqB,EAAA;QACnD,IAAI,MAAM,YAAY,gBAAgB;YAAE;QAExC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,gBAAgB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAChH;;AAGQ,IAAA,qBAAqB,CAAC,MAAqB,EAAA;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC;AAElD,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,MAAM;;;QAIxB,OAAO,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,MAAM,GAAG,IAAI;IACrF;;IAGQ,cAAc,GAAA;QAClB,MAAM,iBAAiB,GAAG,GAAG;QAE7B,IAAI,CAAC,UAAU,GAAG,IAAI,0BAA0B,CAAY,IAAI,CAAC,gBAAgB;AAC5E,aAAA,aAAa,CAAC,iBAAiB,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC;AACvD,aAAA,uBAAuB;AACvB,aAAA,yBAAyB,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,KAAK,CAAC;AAE5D,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;YAC5E,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE;gBAChC,IAAI,CAAC,0BAA0B,EAAE;AAEjC,gBAAA,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE;YAC1B;AAAO,iBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE;AAC9E,gBAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,oBAAoB,EAAE;YACrD;AACJ,QAAA,CAAC,CAAC;IACN;;IAGQ,YAAY,GAAA;AAChB,QAAA,IAAI,CAAC;AACA,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;AACzE,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;YACjB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC;AAE9C,YAAA,IAAI,KAAK,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,SAAS,EAAE;gBAC7D,IAAI,CAAC,KAAK,EAAE;gBACZ,IAAI,CAAC,KAAK,EAAE;YAChB;AACJ,QAAA,CAAC,CAAC;;;AAIN,QAAA,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,KAAK;AACrF,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;aACzE,SAAS,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;AACtC,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AAC5B,QAAA,CAAC,CAAC;IACV;;IAGQ,QAAQ,CAAC,MAAiB,EAAE,WAAoB,EAAA;QACpD,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC;QAE1D,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YAC9C,MAAM,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;AAC3B,YAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC;QACvC;aAAO;AACH,YAAA,IAAI,MAAM,CAAC,QAAQ,EAAE;AACjB,gBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC;AAClC,gBAAA,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC;YAC1C;iBAAO;AACH,gBAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC;YACxC;YAEA,IAAI,WAAW,EAAE;AACb,gBAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC;YACzC;AAEA,YAAA,IAAI,IAAI,CAAC,cAAc,EAAE;gBACrB,IAAI,CAAC,UAAU,EAAE;YACrB;QACJ;;AAGA,QAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,IAAI,WAAW,KAAK,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;YACrF,IAAI,CAAC,gBAAgB,EAAE;QAC3B;AAEA,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAC5B;;IAGQ,UAAU,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;YACrB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;YAEtC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AAC9B,gBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;gBAE5C,OAAO,cAAc,GAAG,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;AAC7E,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;QAC5B;IACJ;;AAGQ,IAAA,gBAAgB,CAAC,aAAmB,EAAA;AACxC,QAAA,IAAI,WAAgB;AAEpB,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACrB,YAAA,WAAW,GAAI,IAAI,CAAC,QAAwB,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,CAAC;QAC9E;aAAO;AACH,YAAA,WAAW,GAAG,IAAI,CAAC,QAAQ,GAAI,IAAI,CAAC,QAAsB,CAAC,KAAK,GAAG,aAAa;QACpF;AAEA,QAAA,IAAI,CAAC,MAAM,GAAG,WAAW;AACzB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;AAClC,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;AAC1B,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AACjE,QAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;IAC1C;AAEA;;;AAGG;IACK,sBAAsB,GAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,EAAE;AACzD,gBAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE;YACxC;iBAAO;gBACH,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,aAA0B,CAAC;YAClE;QACJ;IACJ;IAEQ,0BAA0B,GAAA;AAC9B,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,KAAK,EAAE;IACvC;;IAMQ,iBAAiB,CAAC,KAAoB,EAAE,MAAiB,EAAA;AAC7D,QAAA,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,GAAI,KAAK,CAAC,MAA2B,GAAG,IAAI;AAE9E,QAAA,IAAI,sBAAsB,CAAC,WAAW,CAAC,EAAE;YACrC,WAAY,CAAC,MAAM,EAAE;YACrB,KAAK,CAAC,cAAc,EAAE;YAEtB;QACJ;QAEA,KAAK,CAAC,cAAc,EAAE;;;AAItB,QAAA,IAAI,MAAM,CAAC,SAAS,EAAE,EAAE;YACpB,MAAM,CAAC,eAAe,EAAE;YAExB;QACJ;QAEA,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE;QACxC,MAAM,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;AAE7F,QAAA,eAAe,CACX;AACI,YAAA,KAAK,EAAE,OAAO;;;AAGd,YAAA,YAAY,EAAE,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,UAAU,EAAE;YACjE,UAAU,EAAE,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ;YACvC,WAAW,EAAE,CAAC,MAAM,EAAE,QAAQ,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE;SACrF,EACD,EAAE,aAAa,EAAE,MAAM,CAAC,eAAe,EAAE,EAAE,CAC9C;;;;QAKD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,GAAG,CAAC,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,CAAC;AAErG,QAAA,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,EAAE,QAAQ,CAAC,CAAC;IACvF;AAEA;;;AAGG;IACK,oBAAoB,GAAA;AACxB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,EAAE;QAE7C,MAAM,UAAU,GAAG,YAAY,CAAC,aAAa,CAAC,gCAAgC,CAAC;QAE/E,IAAI,UAAU,EAAE;YACZ,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC;QAC3D;AAEA,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAG,CAAC,aAAa,EAAE,YAAY,CAAC;QAEvE,IAAI,iBAAiB,GAAW,CAAC;QACjC,IAAI,sBAAsB,GAAW,CAAC;QAErC,YAAY,CAAC,gBAAgB,CAAC,SAAS,CAA6B,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YACnF,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE;AACpC,gBAAA,sBAAsB,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACjD,gBAAA,iBAAiB,EAAE;YACvB;AACJ,QAAA,CAAC,CAAC;QAEF,YAAY,CAAC,MAAM,EAAE;AAErB,QAAA,OAAO,CAAC,sBAAsB,EAAE,iBAAiB,CAAC;IACtD;AAEA;;;AAGG;IACK,iBAAiB,GAAA;AACrB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAG,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC;QAElE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,UAAU,EAAE,UAAU,CAAC;QAC7D,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,YAAY,EAAE,QAAQ,CAAC;QAC7D,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,KAAK,EAAE,OAAO,CAAC;QACrD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC;QAClD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,WAAW,EAAE,MAAM,CAAC;AAE1D,QAAA,OAAO,YAAY;IACvB;;IAGQ,0BAA0B,GAAA;QAC9B,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EAAE,mBAAmB,EAAE;QAErE,IAAI,gBAAgB,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1C,YAAA,IAAI,CAAC,4BAA4B,GAAG,IAAI;YAExC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,gCAAgC,CAAC;QAC/E;IACJ;;IAGQ,+BAA+B,GAAA;AACnC,QAAA,IAAI,IAAI,CAAC,4BAA4B,EAAE;AACnC,YAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,EAAE,gCAAgC,CAAC;QAC7G;IACJ;kIArjES,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAT,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,SAAS,mlEA+YE,gBAAgB,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAoLhB,eAAe,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAiBf,gBAAgB,EAAA,EAAA,wBAAA,EAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,UAAA,EAAA,0BAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,QAAA,EAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,UAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,OAAA,EAAA,WAAA,EAAA,MAAA,EAAA,UAAA,EAAA,EAAA,UAAA,EAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,2BAAA,EAAA,UAAA,EAAA,4BAAA,EAAA,aAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,YAAA,EAAA,EAAA,cAAA,EAAA,YAAA,EAAA,EAAA,SAAA,EA7nBzB;AACP,YAAA,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,SAAS,EAAE;YACxD,yBAAyB,EAAC,MAAK;AAC3B,gBAAA,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC;gBAEhC,OAAO;AACH,oBAAA,IAAI,OAAO,GAAA;AACP,wBAAA,OAAO,MAAM;oBACjB,CAAC;AACD,oBAAA,IAAI,aAAa,GAAA;AACb,wBAAA,OAAO,MAAM,CAAC,UAAU,CAAC,aAAa;oBAC1C,CAAC;AACD,oBAAA,aAAa,EAAE,KAAK;oBACpB,KAAK,GAAE,MAAM,MAAM,CAAC,KAAK,EAAE;iBAC9B;AACL,YAAA,CAAC,EAAC;AACF,YAAA,EAAE,OAAO,EAAE,2BAA2B,EAAE,WAAW,EAAE,SAAS,EAAE;AAChE,YAAA,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,SAAS,EAAE;YACrD,uBAAuB,CAAC,SAAS;SACpC,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EA6J8B,eAAe,2BAAU,UAAU,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAG1B,eAAe,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAGT,wBAAwB,gGAMhC,gBAAgB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAGhB,gBAAgB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAGsB,WAAW,uEAMvD,UAAU,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAiBF,WAAW,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAGpB,eAAe,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAGV,0BAA0B,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,SAAA,EAAA,SAAA,EApB7C,SAAS,8ZAjCW,SAAS,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAGnC,mBAAmB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,MAAA,EAAA,SAAA,EAYhB,MAAM,gGC3YxB,61NA2JA,EAAA,MAAA,EAAA,CAAA,okQAAA,EAAA,upBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED4CQ,gBAAgB,EAAA,QAAA,EAAA,4DAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,MAAM,EAAA,QAAA,EAAA,oDAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,OAAA,EAAA,YAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,SAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACN,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,eAAe,2JACf,mBAAmB,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,UAAA,EAAA,IAAA,EACnB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,SAAS,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,WAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACT,iBAAiB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAuCT;AACR,YAAA,mBAAmB,CAAC,cAAc;AAClC,YAAA,mBAAmB,CAAC;AACvB,SAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAGQ,SAAS,EAAA,UAAA,EAAA,CAAA;kBAvDrB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EAAA,OAAA,EACb;wBACL,gBAAgB;wBAChB,MAAM;wBACN,gBAAgB;wBAChB,eAAe;wBACf,mBAAmB;wBACnB,aAAa;wBACb,SAAS;wBACT;qBACH,EAAA,SAAA,EAGU;AACP,wBAAA,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,WAAW,EAAE;wBACxD,yBAAyB,EAAC,MAAK;AAC3B,4BAAA,MAAM,MAAM,GAAG,MAAM,CAAA,SAAA,CAAW;4BAEhC,OAAO;AACH,gCAAA,IAAI,OAAO,GAAA;AACP,oCAAA,OAAO,MAAM;gCACjB,CAAC;AACD,gCAAA,IAAI,aAAa,GAAA;AACb,oCAAA,OAAO,MAAM,CAAC,UAAU,CAAC,aAAa;gCAC1C,CAAC;AACD,gCAAA,aAAa,EAAE,KAAK;gCACpB,KAAK,GAAE,MAAM,MAAM,CAAC,KAAK,EAAE;6BAC9B;AACL,wBAAA,CAAC,EAAC;AACF,wBAAA,EAAE,OAAO,EAAE,2BAA2B,EAAE,WAAW,WAAW,EAAE;AAChE,wBAAA,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,WAAW,EAAE;AACrD,wBAAA,uBAAuB,CAAA,SAAA;AAC1B,qBAAA,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACF,wBAAA,iBAAiB,EAAE,UAAU;AAC7B,wBAAA,iBAAiB,EAAE,kBAAkB;AACrC,wBAAA,KAAK,EAAE,YAAY;AACnB,wBAAA,6BAA6B,EAAE,UAAU;AACzC,wBAAA,8BAA8B,EAAE,aAAa;AAC7C,wBAAA,sBAAsB,EAAE,UAAU;AAClC,wBAAA,qBAAqB,EAAE,YAAY;AACnC,wBAAA,SAAS,EAAE,UAAU;AACrB,wBAAA,WAAW,EAAE,uBAAuB;AACpC,wBAAA,SAAS,EAAE,WAAW;AACtB,wBAAA,QAAQ,EAAE;qBACb,EAAA,UAAA,EACW;AACR,wBAAA,mBAAmB,CAAC,cAAc;AAClC,wBAAA,mBAAmB,CAAC;AACvB,qBAAA,EAAA,QAAA,EACS,WAAW,EAAA,QAAA,EAAA,61NAAA,EAAA,MAAA,EAAA,CAAA,okQAAA,EAAA,upBAAA,CAAA,EAAA;AA0HoB,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,SAAS,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAGX,OAAO,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAGa,kBAAkB,6FAGxC,SAAS,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA;sBAG7C,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,mBAAmB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;6EAGlB,eAAe,CAAA,EAAA,EAAA,GAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAG5B,eAAe,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,qBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAGT,wBAAwB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA;sBAGrE,YAAY;uBAAC,MAAM;AAGkB,aAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,gBAAgB,+FAGhB,gBAAgB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,oBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAGT,qBAAqB,EAAA,EAAA,GAAE,EAAE,IAAI,EAAE,WAAW,EAAE,sFAMzD,UAAU,CAAA,EAAA,EAAA,GAAE,EAAE,WAAW,EAAE,KAAK,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA;sBAGjE,eAAe;AAAC,gBAAA,IAAA,EAAA,CAAA,SAAS,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;sFAcT,WAAW,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAGpB,eAAe,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAGV,0BAA0B,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA;sBAK7D;;sBAiCA;;sBAwBA;;sBAqDA;;sBAMA,MAAM;uBAAC,QAAQ;;sBAMf,MAAM;uBAAC,QAAQ;;sBAoCf;;sBAiBA;;sBAkBA;;sBAmBA,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBAwBrC;;sBAsDA;;sBAgEA;;sBAoBA;;sBAkBA,KAAK;uBAAC,EAAE,SAAS,EAAE,eAAe,EAAE;;sBAiBpC,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBAuWrC;;;ME7nCQ,eAAe,CAAA;kIAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAf,uBAAA,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,YAnCpB,aAAa;YACb,eAAe;YACf,aAAa;YACb,aAAa;YACb,gBAAgB;YAChB,eAAe;YACf,eAAe;YACf,gBAAgB;YAChB,gBAAgB;YAChB,0BAA0B;YAC1B,gBAAgB;YAChB,UAAU;YACV,SAAS;YACT,gBAAgB;YAChB,gBAAgB;YAChB,cAAc;YACd,kBAAkB;AAClB,YAAA,kBAAkB,aAGlB,SAAS;YACT,gBAAgB;YAChB,eAAe;YACf,eAAe;YACf,eAAe;YACf,gBAAgB;YAChB,gBAAgB;YAChB,0BAA0B;YAC1B,gBAAgB;YAChB,kBAAkB;YAClB,cAAc;YACd,kBAAkB;YAClB,kBAAkB,CAAA,EAAA,CAAA,CAAA;AAGb,uBAAA,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,YAnCpB,aAAa;YACb,eAAe;YACf,aAAa;YACb,aAAa;YACb,gBAAgB;YAOhB,UAAU;YACV,SAAS;AAET,YAAA,gBAAgB,EAQhB,eAAe;YAOf,kBAAkB,CAAA,EAAA,CAAA,CAAA;;4FAMb,eAAe,EAAA,UAAA,EAAA,CAAA;kBArC3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE;wBACL,aAAa;wBACb,eAAe;wBACf,aAAa;wBACb,aAAa;wBACb,gBAAgB;wBAChB,eAAe;wBACf,eAAe;wBACf,gBAAgB;wBAChB,gBAAgB;wBAChB,0BAA0B;wBAC1B,gBAAgB;wBAChB,UAAU;wBACV,SAAS;wBACT,gBAAgB;wBAChB,gBAAgB;wBAChB,cAAc;wBACd,kBAAkB;wBAClB;AACH,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACL,SAAS;wBACT,gBAAgB;wBAChB,eAAe;wBACf,eAAe;wBACf,eAAe;wBACf,gBAAgB;wBAChB,gBAAgB;wBAChB,0BAA0B;wBAC1B,gBAAgB;wBAChB,kBAAkB;wBAClB,cAAc;wBACd,kBAAkB;wBAClB;AACH;AACJ,iBAAA;;;ACxDD;;AAEG;;;;"}