@koobiq/components 21.0.0 → 21.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (378) hide show
  1. package/badge/_badge-theme.scss +31 -0
  2. package/breadcrumbs/breadcrumbs.scss +5 -1
  3. package/checkbox/_checkbox-theme.scss +0 -17
  4. package/checkbox/checkbox-tokens.scss +0 -4
  5. package/code-block/_code-block-theme.scss +7 -6
  6. package/code-block/code-block-tokens.scss +8 -4
  7. package/code-block/code-block.scss +54 -32
  8. package/content-panel/content-panel-header.scss +2 -3
  9. package/content-panel/content-panel.scss +3 -0
  10. package/core/selection/pseudo-checkbox/pseudo-checkbox-tokens.scss +0 -2
  11. package/fesm2022/koobiq-components-accordion.mjs +4 -4
  12. package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
  13. package/fesm2022/koobiq-components-actions-panel.mjs +10 -2
  14. package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -1
  15. package/fesm2022/koobiq-components-app-switcher.mjs +1 -1
  16. package/fesm2022/koobiq-components-app-switcher.mjs.map +1 -1
  17. package/fesm2022/koobiq-components-badge.mjs +2 -2
  18. package/fesm2022/koobiq-components-badge.mjs.map +1 -1
  19. package/fesm2022/koobiq-components-breadcrumbs.mjs +2 -2
  20. package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
  21. package/fesm2022/koobiq-components-button-toggle.mjs +1 -1
  22. package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
  23. package/fesm2022/koobiq-components-checkbox.mjs +18 -8
  24. package/fesm2022/koobiq-components-checkbox.mjs.map +1 -1
  25. package/fesm2022/koobiq-components-clamped-text.mjs +78 -10
  26. package/fesm2022/koobiq-components-clamped-text.mjs.map +1 -1
  27. package/fesm2022/koobiq-components-code-block.mjs +106 -394
  28. package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
  29. package/fesm2022/koobiq-components-content-panel.mjs +4 -4
  30. package/fesm2022/koobiq-components-content-panel.mjs.map +1 -1
  31. package/fesm2022/koobiq-components-core.mjs +300 -37
  32. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  33. package/fesm2022/koobiq-components-datepicker.mjs +151 -60
  34. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  35. package/fesm2022/koobiq-components-divider.mjs +3 -3
  36. package/fesm2022/koobiq-components-divider.mjs.map +1 -1
  37. package/fesm2022/koobiq-components-dropdown.mjs +3 -3
  38. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  39. package/fesm2022/koobiq-components-file-upload.mjs +17 -8
  40. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  41. package/fesm2022/koobiq-components-filter-bar.mjs +124 -41
  42. package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
  43. package/fesm2022/koobiq-components-flag.mjs +3 -3
  44. package/fesm2022/koobiq-components-flag.mjs.map +1 -1
  45. package/fesm2022/koobiq-components-form-field.mjs +90 -27
  46. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  47. package/fesm2022/koobiq-components-icon.mjs +38 -17
  48. package/fesm2022/koobiq-components-icon.mjs.map +1 -1
  49. package/fesm2022/koobiq-components-inline-edit.mjs +19 -2
  50. package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
  51. package/fesm2022/koobiq-components-input.mjs +76 -17
  52. package/fesm2022/koobiq-components-input.mjs.map +1 -1
  53. package/fesm2022/koobiq-components-list.mjs +1 -1
  54. package/fesm2022/koobiq-components-list.mjs.map +1 -1
  55. package/fesm2022/koobiq-components-modal.mjs +3 -3
  56. package/fesm2022/koobiq-components-modal.mjs.map +1 -1
  57. package/fesm2022/koobiq-components-navbar.mjs +86 -25
  58. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  59. package/fesm2022/koobiq-components-notification-center.mjs +4 -4
  60. package/fesm2022/koobiq-components-notification-center.mjs.map +1 -1
  61. package/fesm2022/koobiq-components-overflow-items.mjs +116 -38
  62. package/fesm2022/koobiq-components-overflow-items.mjs.map +1 -1
  63. package/fesm2022/koobiq-components-popover.mjs +86 -7
  64. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  65. package/fesm2022/koobiq-components-radio.mjs +41 -19
  66. package/fesm2022/koobiq-components-radio.mjs.map +1 -1
  67. package/fesm2022/koobiq-components-search-expandable.mjs +29 -17
  68. package/fesm2022/koobiq-components-search-expandable.mjs.map +1 -1
  69. package/fesm2022/koobiq-components-select.mjs +49 -12
  70. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  71. package/fesm2022/koobiq-components-sidepanel.mjs +198 -186
  72. package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
  73. package/fesm2022/koobiq-components-splitter.mjs +49 -25
  74. package/fesm2022/koobiq-components-splitter.mjs.map +1 -1
  75. package/fesm2022/koobiq-components-tabs.mjs +30 -11
  76. package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
  77. package/fesm2022/koobiq-components-tags.mjs +1 -1
  78. package/fesm2022/koobiq-components-tags.mjs.map +1 -1
  79. package/fesm2022/koobiq-components-textarea.mjs +28 -11
  80. package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
  81. package/fesm2022/koobiq-components-time-range.mjs +2 -2
  82. package/fesm2022/koobiq-components-time-range.mjs.map +1 -1
  83. package/fesm2022/koobiq-components-timepicker.mjs +71 -16
  84. package/fesm2022/koobiq-components-timepicker.mjs.map +1 -1
  85. package/fesm2022/koobiq-components-timezone.mjs +2 -2
  86. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  87. package/fesm2022/koobiq-components-toast.mjs +2 -2
  88. package/fesm2022/koobiq-components-toast.mjs.map +1 -1
  89. package/fesm2022/koobiq-components-toggle.mjs +25 -9
  90. package/fesm2022/koobiq-components-toggle.mjs.map +1 -1
  91. package/fesm2022/koobiq-components-tooltip.mjs +90 -17
  92. package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
  93. package/fesm2022/koobiq-components-top-bar.mjs +27 -7
  94. package/fesm2022/koobiq-components-top-bar.mjs.map +1 -1
  95. package/fesm2022/koobiq-components-tree-select.mjs +24 -9
  96. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  97. package/fesm2022/koobiq-components-tree.mjs +288 -109
  98. package/fesm2022/koobiq-components-tree.mjs.map +1 -1
  99. package/file-upload/_file-upload-theme.scss +0 -12
  100. package/file-upload/file-upload-tokens.scss +0 -1
  101. package/file-upload/file-upload.scss +0 -1
  102. package/filter-bar/_filter-bar-theme.scss +7 -8
  103. package/filter-bar/filter-bar.scss +0 -1
  104. package/filter-bar/pipes/base-pipe.scss +36 -2
  105. package/filter-bar/pipes/pipe-multi-tree-select.scss +27 -0
  106. package/form-field/_fieldset-theme.scss +2 -7
  107. package/form-field/_form-field-theme.scss +9 -22
  108. package/form-field/_hint-theme.scss +20 -0
  109. package/form-field/fieldset-tokens.scss +0 -1
  110. package/form-field/fieldset.scss +0 -3
  111. package/form-field/form-field-tokens.scss +1 -1
  112. package/form-field/form-field.scss +9 -0
  113. package/form-field/hint-tokens.scss +3 -0
  114. package/modal/modal.scss +2 -0
  115. package/navbar/_navbar-item_vertical.scss +48 -2
  116. package/navbar/_navbar-theme.scss +11 -3
  117. package/navbar/navbar-item.scss +17 -0
  118. package/navbar/navbar-tokens.scss +3 -0
  119. package/package.json +4 -4
  120. package/popover/popover.scss +1 -1
  121. package/radio/_radio-theme.scss +0 -30
  122. package/radio/radio-tokens.scss +0 -2
  123. package/schematics/collection.json +94 -89
  124. package/schematics/migrations/accordion-state-saving-default/{index.js → index.cjs} +5 -4
  125. package/schematics/migrations/actions-panel-overlay-container/{index.js → index.cjs} +5 -4
  126. package/schematics/migrations/alert-signals/{index.js → index.cjs} +14 -13
  127. package/schematics/migrations/angular-animations-removal/index.cjs +21 -0
  128. package/schematics/migrations/app-switcher-signals/{index.js → index.cjs} +7 -6
  129. package/schematics/migrations/autocomplete-panel-width-auto/{index.js → index.cjs} +6 -5
  130. package/schematics/migrations/autocomplete-signals/{index.js → index.cjs} +7 -6
  131. package/schematics/migrations/badge-signals/{index.js → index.cjs} +7 -6
  132. package/schematics/migrations/button-state-and-styles/{index.js → index.cjs} +7 -6
  133. package/schematics/migrations/button-supported-colors/{index.js → index.cjs} +7 -6
  134. package/schematics/migrations/button-toggle-signals-and-aria/{index.js → index.cjs} +7 -6
  135. package/schematics/migrations/button-truncation/{index.js → index.cjs} +7 -6
  136. package/schematics/migrations/checkbox-signals/{index.js → index.cjs} +9 -8
  137. package/schematics/migrations/clamped-text-disclosure/{index.js → index.cjs} +5 -4
  138. package/schematics/migrations/code-block-highlight-js-core/README.md +53 -0
  139. package/schematics/migrations/code-block-highlight-js-core/data.cjs +64 -0
  140. package/schematics/migrations/code-block-highlight-js-core/index.cjs +319 -0
  141. package/schematics/migrations/code-block-highlight-js-core/schema.json +20 -0
  142. package/schematics/migrations/code-block-signals/{index.js → index.cjs} +7 -6
  143. package/schematics/migrations/color-signals/index.cjs +20 -0
  144. package/schematics/migrations/core-mixins-removal/index.cjs +18 -0
  145. package/schematics/migrations/css-selectors/{index.js → index.cjs} +4 -3
  146. package/schematics/migrations/datepicker-signals/index.cjs +18 -0
  147. package/schematics/migrations/deprecated-icons/README.md +21 -5
  148. package/schematics/migrations/deprecated-icons/{index.js → index.cjs} +15 -28
  149. package/schematics/migrations/deprecated-icons/schema.json +1 -1
  150. package/schematics/migrations/design-tokens-v4/{index.js → index.cjs} +3 -2
  151. package/schematics/migrations/divider-signals-and-aria/{index.js → index.cjs} +5 -4
  152. package/schematics/migrations/dl-attribute-coercion/{index.js → index.cjs} +7 -6
  153. package/schematics/migrations/dl-standalone-names/{index.js → index.cjs} +11 -10
  154. package/schematics/migrations/dropdown-demote-overlay/{index.js → index.cjs} +7 -6
  155. package/schematics/migrations/dropdown-signals/index.cjs +20 -0
  156. package/schematics/migrations/empty-state-error-color/{index.js → index.cjs} +5 -4
  157. package/schematics/migrations/empty-state-size-attr/{index.js → index.cjs} +6 -5
  158. package/schematics/migrations/file-upload-cva-and-primitives/{index.js → index.cjs} +5 -4
  159. package/schematics/migrations/file-upload-deprecated-outputs/{index.js → index.cjs} +5 -4
  160. package/schematics/migrations/filter-bar-rename-action/{index.js → index.cjs} +5 -4
  161. package/schematics/migrations/filter-bar-signals/{index.js → index.cjs} +16 -15
  162. package/schematics/migrations/filter-bar-state-saving-default/{index.js → index.cjs} +5 -4
  163. package/schematics/migrations/flag-inner-html/{index.js → index.cjs} +5 -4
  164. package/schematics/migrations/form-field-signals/{index.js → index.cjs} +18 -17
  165. package/schematics/migrations/icon-semantics-and-api/{data.js → data.cjs} +4 -4
  166. package/schematics/migrations/icon-semantics-and-api/{index.js → index.cjs} +6 -5
  167. package/schematics/migrations/icons-replacement/README.md +16 -2
  168. package/schematics/migrations/icons-replacement/{index.js → index.cjs} +21 -18
  169. package/schematics/migrations/icons-replacement/schema.json +12 -3
  170. package/schematics/migrations/inline-edit-a11y-and-types/{index.js → index.cjs} +5 -4
  171. package/schematics/migrations/input-number-surface/{index.js → index.cjs} +5 -4
  172. package/schematics/migrations/input-signals/index.cjs +18 -0
  173. package/schematics/migrations/link-deprecated-path/{index.js → index.cjs} +4 -3
  174. package/schematics/migrations/link-signals/{index.js → index.cjs} +5 -4
  175. package/schematics/migrations/list-signals/index.cjs +18 -0
  176. package/schematics/migrations/list-tree-multiple-input/{index.js → index.cjs} +7 -6
  177. package/schematics/migrations/loader-overlay-signals/{index.js → index.cjs} +7 -6
  178. package/schematics/migrations/loader-overlay-size-attr/{index.js → index.cjs} +6 -5
  179. package/schematics/migrations/locale-configuration-providers/{index.js → index.cjs} +5 -4
  180. package/schematics/migrations/mandatory-peer-dependencies/{index.js → index.cjs} +3 -2
  181. package/schematics/migrations/markdown-signals/{index.js → index.cjs} +7 -6
  182. package/schematics/migrations/modal-dialog-semantics/{index.js → index.cjs} +5 -4
  183. package/schematics/migrations/modal-signals/index.cjs +20 -0
  184. package/schematics/migrations/navbar-signals-and-aria/{index.js → index.cjs} +7 -6
  185. package/schematics/migrations/new-icons-pack/README.md +37 -25
  186. package/schematics/migrations/new-icons-pack/{index.js → index.cjs} +29 -38
  187. package/schematics/migrations/new-icons-pack/replacement.json +2 -14
  188. package/schematics/migrations/new-icons-pack/schema.json +3 -3
  189. package/schematics/migrations/notification-center-signals/{index.js → index.cjs} +5 -4
  190. package/schematics/migrations/option-signals/index.cjs +20 -0
  191. package/schematics/migrations/popover-leave-delay/{index.js → index.cjs} +5 -4
  192. package/schematics/migrations/progress-bar-percentage-and-aria/{index.js → index.cjs} +5 -4
  193. package/schematics/migrations/progress-spinner-signals/{index.js → index.cjs} +7 -6
  194. package/schematics/migrations/query-list-signals/index.cjs +18 -0
  195. package/schematics/migrations/radio-signals-and-aria/{index.js → index.cjs} +9 -8
  196. package/schematics/migrations/read-state-dwell-handlers/{index.js → index.cjs} +5 -4
  197. package/schematics/migrations/scrollbar-deprecated-path/{index.js → index.cjs} +4 -3
  198. package/schematics/migrations/select-signal-inputs/{index.js → index.cjs} +5 -4
  199. package/schematics/migrations/sidepanel-non-modal-behavior/{index.js → index.cjs} +5 -4
  200. package/schematics/migrations/signal-inputs-subclasses/index.cjs +18 -0
  201. package/schematics/migrations/split-button-optional-disabled/{index.js → index.cjs} +5 -4
  202. package/schematics/migrations/splitter-deprecated-path/{index.js → index.cjs} +4 -3
  203. package/schematics/migrations/state-saving-default/{index.js → index.cjs} +5 -4
  204. package/schematics/migrations/table-cell-content/{index.js → index.cjs} +5 -4
  205. package/schematics/migrations/tabs-signals-and-aria/{index.js → index.cjs} +5 -4
  206. package/schematics/migrations/tag-list-cleaner/{index.js → index.cjs} +7 -6
  207. package/schematics/migrations/tag-slots/{index.js → index.cjs} +6 -5
  208. package/schematics/migrations/tags-signals/{index.js → index.cjs} +7 -6
  209. package/schematics/migrations/textarea-signals/{index.js → index.cjs} +7 -6
  210. package/schematics/migrations/time-range-title-for/{index.js → index.cjs} +5 -4
  211. package/schematics/migrations/timepicker-signals/{index.js → index.cjs} +7 -6
  212. package/schematics/migrations/timezone-grouping-utils/{index.js → index.cjs} +5 -4
  213. package/schematics/migrations/title-encapsulation/{index.js → index.cjs} +5 -4
  214. package/schematics/migrations/toast-stack-and-defaults/{index.js → index.cjs} +5 -4
  215. package/schematics/migrations/tooltip-pointer-events-and-types/{index.js → index.cjs} +5 -4
  216. package/schematics/migrations/top-bar-container-selectors/{index.js → index.cjs} +5 -4
  217. package/schematics/migrations/tree-select-signals/{index.js → index.cjs} +5 -4
  218. package/schematics/migrations/tree-signals/{index.js → index.cjs} +5 -4
  219. package/schematics/migrations/tree-state-saving-default/{index.js → index.cjs} +5 -4
  220. package/schematics/migrations/username-pipe-injection/{index.js → index.cjs} +5 -4
  221. package/schematics/migrations/v20-upgrade/{data.js → data.cjs} +7 -7
  222. package/schematics/migrations/v20-upgrade/index.cjs +19 -0
  223. package/schematics/migrations/v21-upgrade/{data.js → data.cjs} +22 -22
  224. package/schematics/migrations/v21-upgrade/{index.js → index.cjs} +11 -10
  225. package/schematics/migrations/zoneless-change-detection/index.cjs +21 -0
  226. package/schematics/migrations.json +87 -82
  227. package/schematics/ng-add/{index.js → index.cjs} +15 -289
  228. package/schematics/utils/{angular-parsing.js → angular-parsing.cjs} +2 -2
  229. package/schematics/utils/custom-data.cjs +64 -0
  230. package/schematics/utils/{deprecated-path-migration.js → deprecated-path-migration.cjs} +4 -3
  231. package/schematics/utils/html-config.cjs +148 -0
  232. package/schematics/utils/{icon-migration.js → icon-migration.cjs} +11 -5
  233. package/schematics/utils/list-item-pattern.cjs +16 -0
  234. package/schematics/utils/{messages.js → messages.cjs} +4 -0
  235. package/schematics/utils/package-config.cjs +99 -0
  236. package/schematics/utils/project-files.cjs +25 -0
  237. package/schematics/utils/replacement-driver.cjs +337 -0
  238. package/schematics/utils/safe-rule.cjs +23 -0
  239. package/schematics/utils/signal-members-migration.cjs +779 -0
  240. package/schematics/utils/tag-patterns.cjs +21 -0
  241. package/schematics/utils/template-ref-access.cjs +155 -0
  242. package/schematics/utils/{typescript.js → typescript.cjs} +1 -1
  243. package/schematics/utils/warn-only-migration.cjs +52 -0
  244. package/schematics/utils/workspace-styles.cjs +123 -0
  245. package/select/select.scss +7 -0
  246. package/tabs/_tabs-common.scss +23 -0
  247. package/textarea/textarea-tokens.scss +4 -1
  248. package/toast/toast.component.scss +1 -0
  249. package/toggle/_toggle-theme.scss +0 -17
  250. package/tooltip/tooltip.scss +1 -1
  251. package/top-bar/top-bar-tokens.scss +1 -0
  252. package/top-bar/top-bar.scss +10 -0
  253. package/types/koobiq-components-accordion.d.ts +25 -0
  254. package/types/koobiq-components-button-toggle.d.ts +6 -0
  255. package/types/koobiq-components-checkbox.d.ts +30 -0
  256. package/types/koobiq-components-clamped-text.d.ts +16 -3
  257. package/types/koobiq-components-code-block.d.ts +55 -14
  258. package/types/koobiq-components-core.d.ts +226 -13
  259. package/types/koobiq-components-datepicker.d.ts +28 -1
  260. package/types/koobiq-components-divider.d.ts +28 -10
  261. package/types/koobiq-components-dropdown.d.ts +19 -0
  262. package/types/koobiq-components-filter-bar.d.ts +79 -6
  263. package/types/koobiq-components-flag.d.ts +18 -0
  264. package/types/koobiq-components-form-field.d.ts +87 -6
  265. package/types/koobiq-components-icon.d.ts +15 -0
  266. package/types/koobiq-components-inline-edit.d.ts +8 -1
  267. package/types/koobiq-components-input.d.ts +22 -3
  268. package/types/koobiq-components-list.d.ts +6 -0
  269. package/types/koobiq-components-modal.d.ts +7 -0
  270. package/types/koobiq-components-navbar.d.ts +71 -7
  271. package/types/koobiq-components-notification-center.d.ts +13 -0
  272. package/types/koobiq-components-overflow-items.d.ts +26 -2
  273. package/types/koobiq-components-popover.d.ts +38 -3
  274. package/types/koobiq-components-radio.d.ts +30 -0
  275. package/types/koobiq-components-search-expandable.d.ts +10 -0
  276. package/types/koobiq-components-select.d.ts +36 -4
  277. package/types/koobiq-components-sidepanel.d.ts +52 -1
  278. package/types/koobiq-components-splitter.d.ts +13 -4
  279. package/types/koobiq-components-tabs.d.ts +4 -0
  280. package/types/koobiq-components-tags.d.ts +6 -0
  281. package/types/koobiq-components-textarea.d.ts +9 -2
  282. package/types/koobiq-components-timepicker.d.ts +15 -0
  283. package/types/koobiq-components-toggle.d.ts +30 -0
  284. package/types/koobiq-components-tooltip.d.ts +55 -10
  285. package/types/koobiq-components-top-bar.d.ts +11 -3
  286. package/types/koobiq-components-tree-select.d.ts +23 -8
  287. package/types/koobiq-components-tree.d.ts +144 -60
  288. package/schematics/migrations/angular-animations-removal/index.js +0 -20
  289. package/schematics/migrations/color-signals/index.js +0 -19
  290. package/schematics/migrations/core-mixins-removal/index.js +0 -17
  291. package/schematics/migrations/datepicker-signals/index.js +0 -17
  292. package/schematics/migrations/dropdown-signals/index.js +0 -19
  293. package/schematics/migrations/input-signals/index.js +0 -17
  294. package/schematics/migrations/list-signals/index.js +0 -17
  295. package/schematics/migrations/modal-signals/index.js +0 -19
  296. package/schematics/migrations/option-signals/index.js +0 -19
  297. package/schematics/migrations/query-list-signals/index.js +0 -17
  298. package/schematics/migrations/signal-inputs-subclasses/index.js +0 -17
  299. package/schematics/migrations/v20-upgrade/index.js +0 -18
  300. package/schematics/migrations/zoneless-change-detection/index.js +0 -20
  301. package/schematics/utils/package-config.js +0 -13
  302. /package/schematics/migrations/accordion-state-saving-default/{data.js → data.cjs} +0 -0
  303. /package/schematics/migrations/actions-panel-overlay-container/{data.js → data.cjs} +0 -0
  304. /package/schematics/migrations/alert-signals/{data.js → data.cjs} +0 -0
  305. /package/schematics/migrations/angular-animations-removal/{data.js → data.cjs} +0 -0
  306. /package/schematics/migrations/app-switcher-signals/{data.js → data.cjs} +0 -0
  307. /package/schematics/migrations/autocomplete-signals/{data.js → data.cjs} +0 -0
  308. /package/schematics/migrations/badge-signals/{data.js → data.cjs} +0 -0
  309. /package/schematics/migrations/button-state-and-styles/{data.js → data.cjs} +0 -0
  310. /package/schematics/migrations/button-supported-colors/{data.js → data.cjs} +0 -0
  311. /package/schematics/migrations/button-toggle-signals-and-aria/{data.js → data.cjs} +0 -0
  312. /package/schematics/migrations/button-truncation/{data.js → data.cjs} +0 -0
  313. /package/schematics/migrations/checkbox-signals/{data.js → data.cjs} +0 -0
  314. /package/schematics/migrations/clamped-text-disclosure/{data.js → data.cjs} +0 -0
  315. /package/schematics/migrations/code-block-signals/{data.js → data.cjs} +0 -0
  316. /package/schematics/migrations/color-signals/{data.js → data.cjs} +0 -0
  317. /package/schematics/migrations/core-mixins-removal/{data.js → data.cjs} +0 -0
  318. /package/schematics/migrations/css-selectors/{data.js → data.cjs} +0 -0
  319. /package/schematics/migrations/datepicker-signals/{data.js → data.cjs} +0 -0
  320. /package/schematics/migrations/deprecated-icons/{data.js → data.cjs} +0 -0
  321. /package/schematics/migrations/divider-signals-and-aria/{data.js → data.cjs} +0 -0
  322. /package/schematics/migrations/dl-attribute-coercion/{data.js → data.cjs} +0 -0
  323. /package/schematics/migrations/dl-standalone-names/{data.js → data.cjs} +0 -0
  324. /package/schematics/migrations/dropdown-demote-overlay/{data.js → data.cjs} +0 -0
  325. /package/schematics/migrations/dropdown-signals/{data.js → data.cjs} +0 -0
  326. /package/schematics/migrations/empty-state-error-color/{data.js → data.cjs} +0 -0
  327. /package/schematics/migrations/file-upload-cva-and-primitives/{data.js → data.cjs} +0 -0
  328. /package/schematics/migrations/file-upload-deprecated-outputs/{data.js → data.cjs} +0 -0
  329. /package/schematics/migrations/filter-bar-rename-action/{data.js → data.cjs} +0 -0
  330. /package/schematics/migrations/filter-bar-signals/{data.js → data.cjs} +0 -0
  331. /package/schematics/migrations/filter-bar-state-saving-default/{data.js → data.cjs} +0 -0
  332. /package/schematics/migrations/flag-inner-html/{data.js → data.cjs} +0 -0
  333. /package/schematics/migrations/form-field-signals/{data.js → data.cjs} +0 -0
  334. /package/schematics/migrations/icons-replacement/{data.js → data.cjs} +0 -0
  335. /package/schematics/migrations/inline-edit-a11y-and-types/{data.js → data.cjs} +0 -0
  336. /package/schematics/migrations/input-number-surface/{data.js → data.cjs} +0 -0
  337. /package/schematics/migrations/input-signals/{data.js → data.cjs} +0 -0
  338. /package/schematics/migrations/link-signals/{data.js → data.cjs} +0 -0
  339. /package/schematics/migrations/list-signals/{data.js → data.cjs} +0 -0
  340. /package/schematics/migrations/list-tree-multiple-input/{data.js → data.cjs} +0 -0
  341. /package/schematics/migrations/loader-overlay-signals/{data.js → data.cjs} +0 -0
  342. /package/schematics/migrations/locale-configuration-providers/{data.js → data.cjs} +0 -0
  343. /package/schematics/migrations/markdown-signals/{data.js → data.cjs} +0 -0
  344. /package/schematics/migrations/modal-dialog-semantics/{data.js → data.cjs} +0 -0
  345. /package/schematics/migrations/modal-signals/{data.js → data.cjs} +0 -0
  346. /package/schematics/migrations/navbar-signals-and-aria/{data.js → data.cjs} +0 -0
  347. /package/schematics/migrations/new-icons-pack/{data.js → data.cjs} +0 -0
  348. /package/schematics/migrations/notification-center-signals/{data.js → data.cjs} +0 -0
  349. /package/schematics/migrations/option-signals/{data.js → data.cjs} +0 -0
  350. /package/schematics/migrations/popover-leave-delay/{data.js → data.cjs} +0 -0
  351. /package/schematics/migrations/progress-bar-percentage-and-aria/{data.js → data.cjs} +0 -0
  352. /package/schematics/migrations/progress-spinner-signals/{data.js → data.cjs} +0 -0
  353. /package/schematics/migrations/query-list-signals/{data.js → data.cjs} +0 -0
  354. /package/schematics/migrations/radio-signals-and-aria/{data.js → data.cjs} +0 -0
  355. /package/schematics/migrations/read-state-dwell-handlers/{data.js → data.cjs} +0 -0
  356. /package/schematics/migrations/select-signal-inputs/{data.js → data.cjs} +0 -0
  357. /package/schematics/migrations/sidepanel-non-modal-behavior/{data.js → data.cjs} +0 -0
  358. /package/schematics/migrations/signal-inputs-subclasses/{data.js → data.cjs} +0 -0
  359. /package/schematics/migrations/split-button-optional-disabled/{data.js → data.cjs} +0 -0
  360. /package/schematics/migrations/state-saving-default/{data.js → data.cjs} +0 -0
  361. /package/schematics/migrations/table-cell-content/{data.js → data.cjs} +0 -0
  362. /package/schematics/migrations/tabs-signals-and-aria/{data.js → data.cjs} +0 -0
  363. /package/schematics/migrations/tag-list-cleaner/{data.js → data.cjs} +0 -0
  364. /package/schematics/migrations/tags-signals/{data.js → data.cjs} +0 -0
  365. /package/schematics/migrations/textarea-signals/{data.js → data.cjs} +0 -0
  366. /package/schematics/migrations/time-range-title-for/{data.js → data.cjs} +0 -0
  367. /package/schematics/migrations/timepicker-signals/{data.js → data.cjs} +0 -0
  368. /package/schematics/migrations/timezone-grouping-utils/{data.js → data.cjs} +0 -0
  369. /package/schematics/migrations/title-encapsulation/{data.js → data.cjs} +0 -0
  370. /package/schematics/migrations/toast-stack-and-defaults/{data.js → data.cjs} +0 -0
  371. /package/schematics/migrations/tooltip-pointer-events-and-types/{data.js → data.cjs} +0 -0
  372. /package/schematics/migrations/top-bar-container-selectors/{data.js → data.cjs} +0 -0
  373. /package/schematics/migrations/tree-select-signals/{data.js → data.cjs} +0 -0
  374. /package/schematics/migrations/tree-signals/{data.js → data.cjs} +0 -0
  375. /package/schematics/migrations/tree-state-saving-default/{data.js → data.cjs} +0 -0
  376. /package/schematics/migrations/username-pipe-injection/{data.js → data.cjs} +0 -0
  377. /package/schematics/migrations/zoneless-change-detection/{data.js → data.cjs} +0 -0
  378. /package/schematics/utils/{ast.js → ast.cjs} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"koobiq-components-app-switcher.mjs","sources":["../../../packages/components/app-switcher/app-switcher-icon-sanitizer.ts","../../../packages/components/app-switcher/app-switcher-dropdown-app.ts","../../../packages/components/app-switcher/app-switcher-dropdown-site.ts","../../../packages/components/app-switcher/app-switcher-list-item.ts","../../../packages/components/app-switcher/app-switcher.ts","../../../packages/components/app-switcher/app-switcher.html","../../../packages/components/app-switcher/app-switcher.module.ts","../../../packages/components/app-switcher/koobiq-components-app-switcher.ts"],"sourcesContent":["import { DOCUMENT } from '@angular/common';\nimport { inject, Injectable } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n/**\n * SVG elements allowed inside `KbqAppSwitcherApp.icon`/`KbqAppSwitcherSite.icon`.\n *\n * Everything else is dropped, which is what neutralises the dangerous markup: `script` (inline JS),\n * `foreignObject` (re-opens an HTML parsing context inside the SVG), `style` (CSS-based exfiltration and\n * the classic mXSS vector), `a` (navigation) and every HTML element such as `img` or `iframe`.\n * Keys are lower-cased because SVG tag names are case-sensitive (`clipPath`, `linearGradient`, …).\n */\nconst ALLOWED_ELEMENTS: ReadonlySet<string> = new Set([\n 'circle',\n 'clippath',\n 'defs',\n 'desc',\n 'ellipse',\n 'feblend',\n 'fecolormatrix',\n 'fecomposite',\n 'fedropshadow',\n 'feflood',\n 'fegaussianblur',\n 'femerge',\n 'femergenode',\n 'feoffset',\n 'filter',\n 'g',\n 'lineargradient',\n 'line',\n 'marker',\n 'mask',\n 'path',\n 'pattern',\n 'polygon',\n 'polyline',\n 'radialgradient',\n 'rect',\n 'stop',\n 'svg',\n 'symbol',\n 'text',\n 'textpath',\n 'title',\n 'tspan',\n 'use'\n]);\n\n/**\n * Attributes allowed on the elements above — geometry, presentation and a few a11y hooks.\n * Anything absent from this list is removed, which covers every `on*` event handler.\n *\n * Note the asymmetry with `UNSAFE_STYLE_VALUE` below: `url(...)` is rejected inside `style`, but the paint\n * attributes that legitimately take it (`fill`, `stroke`, `filter`, `mask`, `clip-path`) are kept as-is,\n * because `fill=\"url(#gradient)\"` is how an inline icon references its own gradient. That is safe in practice\n * — browsers resolve those references only within the same document, so an external URL there neither loads\n * nor renders anything.\n */\nconst ALLOWED_ATTRIBUTES: ReadonlySet<string> = new Set([\n 'aria-hidden',\n 'aria-label',\n 'baseline-shift',\n 'class',\n 'clip-path',\n 'clip-rule',\n 'color',\n 'cx',\n 'cy',\n 'd',\n 'display',\n 'dominant-baseline',\n 'dx',\n 'dy',\n 'fill',\n 'fill-opacity',\n 'fill-rule',\n 'filter',\n 'filterunits',\n 'flood-color',\n 'flood-opacity',\n 'focusable',\n 'font-family',\n 'font-size',\n 'font-style',\n 'font-weight',\n 'fx',\n 'fy',\n 'gradienttransform',\n 'gradientunits',\n 'height',\n 'href',\n 'id',\n 'in',\n 'in2',\n 'letter-spacing',\n 'marker-end',\n 'marker-mid',\n 'marker-start',\n 'markerheight',\n 'markerwidth',\n 'mask',\n 'maskunits',\n 'mode',\n 'offset',\n 'opacity',\n 'orient',\n 'overflow',\n 'pathlength',\n 'patterncontentunits',\n 'patternunits',\n 'points',\n 'preserveaspectratio',\n 'primitiveunits',\n 'r',\n 'refx',\n 'refy',\n 'result',\n 'role',\n 'rx',\n 'ry',\n 'shape-rendering',\n 'spreadmethod',\n 'stddeviation',\n 'stop-color',\n 'stop-opacity',\n 'stroke',\n 'stroke-dasharray',\n 'stroke-dashoffset',\n 'stroke-linecap',\n 'stroke-linejoin',\n 'stroke-miterlimit',\n 'stroke-opacity',\n 'stroke-width',\n 'style',\n 'text-anchor',\n 'transform',\n 'type',\n 'values',\n 'vector-effect',\n 'viewbox',\n 'visibility',\n 'width',\n 'x',\n 'x1',\n 'x2',\n 'xlink:href',\n 'xmlns',\n 'xmlns:xlink',\n 'y',\n 'y1',\n 'y2'\n]);\n\n/** Attributes carrying a URL: only same-document fragment references (`#gradient-1`) survive. */\nconst URL_ATTRIBUTES: ReadonlySet<string> = new Set(['href', 'xlink:href']);\n\n/** Inline styles that can load or execute something are dropped rather than parsed. */\nconst UNSAFE_STYLE_VALUE = /url\\s*\\(|expression\\s*\\(|javascript\\s*:/i;\n\n/**\n * Turns the caller-supplied inline SVG of an app-switcher icon into markup that is safe to hand to\n * `[innerHtml]`.\n *\n * Angular's own HTML sanitizer cannot be used here: its allow-list contains no SVG elements at all, so it\n * would strip every icon. Instead the markup is parsed inert (inside a `<template>`, where no request is\n * issued and no script runs), filtered against a strict SVG allow-list, and only then marked as trusted.\n */\n@Injectable({ providedIn: 'root' })\nexport class KbqAppSwitcherIconSanitizer {\n private readonly document = inject(DOCUMENT);\n private readonly domSanitizer = inject(DomSanitizer);\n\n /**\n * Sanitizes inline SVG markup and wraps it as `SafeHtml`. Returns `null` for empty input, so callers can\n * use the result directly as the `@if` condition of the icon element.\n */\n sanitize(icon: string | null | undefined): SafeHtml | null {\n if (!icon) return null;\n\n const sanitized = this.filter(icon);\n\n if (!sanitized) return null;\n\n // Second pass: `[innerHtml]` re-parses our serialized output, and mutation-XSS works by making that\n // second parse differ from the first. Benign markup is already normalised by pass one, so a\n // difference here means the input was crafted to change shape on re-parse - drop it entirely.\n if (this.filter(sanitized) !== sanitized) return null;\n\n return this.domSanitizer.bypassSecurityTrustHtml(sanitized);\n }\n\n /** Parses the markup inertly, strips everything outside the allow-lists and serializes it back. */\n private filter(markup: string): string {\n const template = this.document.createElement('template');\n\n template.innerHTML = markup;\n\n this.sanitizeChildren(template.content);\n\n return template.innerHTML;\n }\n\n private sanitizeChildren(node: Node): void {\n // Snapshot the list: removing a node while iterating a live NodeList skips its sibling.\n for (const child of Array.from(node.childNodes)) {\n if (child.nodeType === Node.ELEMENT_NODE) {\n const element = child as Element;\n\n if (ALLOWED_ELEMENTS.has(element.localName.toLowerCase())) {\n this.sanitizeAttributes(element);\n this.sanitizeChildren(element);\n\n continue;\n }\n } else if (child.nodeType === Node.TEXT_NODE) {\n continue;\n }\n\n // Disallowed elements, comments and CDATA sections (a known mXSS carrier) all go.\n child.parentNode?.removeChild(child);\n }\n }\n\n private sanitizeAttributes(element: Element): void {\n for (const { name, value } of Array.from(element.attributes)) {\n const attribute = name.toLowerCase();\n const allowed =\n ALLOWED_ATTRIBUTES.has(attribute) &&\n (!URL_ATTRIBUTES.has(attribute) || value.trim().startsWith('#')) &&\n (attribute !== 'style' || !UNSAFE_STYLE_VALUE.test(value));\n\n if (!allowed) {\n element.removeAttribute(name);\n }\n }\n }\n}\n","import { NgOptimizedImage } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input, ViewEncapsulation } from '@angular/core';\nimport { KBQ_TITLE_TEXT_REF } from '@koobiq/components/core';\nimport { KbqDropdownItem } from '@koobiq/components/dropdown';\nimport { KbqIcon } from '@koobiq/components/icon';\nimport { KbqAppSwitcherApp } from './app-switcher';\nimport { KbqAppSwitcherIconSanitizer } from './app-switcher-icon-sanitizer';\n\n/** @docs-private */\n@Component({\n selector: '[kbq-app-switcher-dropdown-app]',\n imports: [KbqIcon, NgOptimizedImage],\n template: `\n @if (safeIcon(); as icon) {\n <span class=\"kbq-app-switcher-dropdown-app__icon\" aria-hidden=\"true\" [innerHtml]=\"icon\"></span>\n } @else if (app().iconSrc; as iconSrc) {\n <span class=\"kbq-app-switcher-dropdown-app__icon\" aria-hidden=\"true\">\n <img alt=\"\" width=\"24\" height=\"24\" [ngSrc]=\"iconSrc\" />\n </span>\n }\n\n <div class=\"kbq-app-switcher-dropdown-app__container\">\n <div class=\"kbq-app-switcher-dropdown-app__name\">\n <span>{{ app().name }}</span>\n\n @if (isNested) {\n <i\n kbq-icon=\"kbq-chevron-right-s_16\"\n aria-hidden=\"true\"\n class=\"kbq-app-switcher-dropdown-item-trigger__icon\"\n [color]=\"componentColors.ContrastFade\"\n ></i>\n }\n </div>\n @if (app().caption; as caption) {\n <div class=\"kbq-app-switcher-dropdown-app__caption\">{{ caption }}</div>\n }\n </div>\n `,\n styleUrls: ['app-switcher-dropdown-app.scss'],\n providers: [\n { provide: KBQ_TITLE_TEXT_REF, useExisting: KbqAppSwitcherDropdownApp },\n { provide: KbqDropdownItem, useExisting: KbqAppSwitcherDropdownApp }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-app-switcher-dropdown-app',\n role: 'menuitem',\n '[class.kbq-dropdown-item]': 'false',\n // `tabindex` comes from `KbqDropdownItem`: a second binding here would read its signal again after the others.\n '[attr.aria-haspopup]': \"isNested ? 'menu' : null\"\n },\n exportAs: 'kbqAppSwitcherDropdownApp'\n})\nexport class KbqAppSwitcherDropdownApp extends KbqDropdownItem {\n private readonly iconSanitizer = inject(KbqAppSwitcherIconSanitizer);\n\n /** Application (or synthetic app group) rendered by this flyout row. */\n readonly app = input.required<KbqAppSwitcherApp>({ alias: 'kbq-app-switcher-dropdown-app' });\n\n /** Inline SVG of the app icon, sanitized against an SVG allow-list. See `KbqAppSwitcherListItem.safeIcon`. */\n protected readonly safeIcon = computed(() => this.iconSanitizer.sanitize(this.app().icon));\n}\n","import { ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\nimport { KbqBadgeModule } from '@koobiq/components/badge';\nimport { KBQ_TITLE_TEXT_REF } from '@koobiq/components/core';\nimport { KbqDropdownItem } from '@koobiq/components/dropdown';\nimport { KbqIcon } from '@koobiq/components/icon';\nimport { KbqAppSwitcherSite } from './app-switcher';\n\n/** @docs-private */\n@Component({\n selector: '[kbq-app-switcher-dropdown-site]',\n imports: [\n KbqIcon,\n KbqBadgeModule\n ],\n template: `\n <span class=\"kbq-app-switcher-dropdown-site__name\">{{ site().name }}</span>\n\n @if (site().status; as status) {\n <kbq-badge class=\"kbq-app-switcher-dropdown-site__badge\" [compact]=\"true\">{{ status }}</kbq-badge>\n }\n\n @if (isNested) {\n <i\n kbq-icon=\"kbq-chevron-right-s_16\"\n aria-hidden=\"true\"\n class=\"kbq-app-switcher-dropdown-item-trigger__icon\"\n [color]=\"componentColors.ContrastFade\"\n ></i>\n }\n `,\n styleUrls: ['app-switcher-dropdown-site.scss'],\n providers: [\n { provide: KBQ_TITLE_TEXT_REF, useExisting: KbqAppSwitcherDropdownSite },\n { provide: KbqDropdownItem, useExisting: KbqAppSwitcherDropdownSite }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-app-switcher-dropdown-site',\n role: 'menuitem',\n '[class.kbq-dropdown-item]': 'false',\n // `tabindex` comes from `KbqDropdownItem`: a second binding here would read its signal again after the others.\n '[attr.aria-haspopup]': \"isNested ? 'menu' : null\"\n },\n exportAs: 'kbqAppSwitcherDropdownSite'\n})\nexport class KbqAppSwitcherDropdownSite extends KbqDropdownItem {\n /** Site rendered by this row. */\n readonly site = input.required<KbqAppSwitcherSite>({ alias: 'kbq-app-switcher-dropdown-site' });\n}\n","import { NgOptimizedImage } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n model,\n ViewEncapsulation\n} from '@angular/core';\nimport { KBQ_TITLE_TEXT_REF, KbqHighlightBackgroundPipe } from '@koobiq/components/core';\nimport { KbqDropdownItem } from '@koobiq/components/dropdown';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqAppSwitcherApp } from './app-switcher';\nimport { KbqAppSwitcherIconSanitizer } from './app-switcher-icon-sanitizer';\n\n/** @docs-private */\n@Component({\n selector: '[kbq-app-switcher-list-item]',\n imports: [\n KbqIconModule,\n NgOptimizedImage,\n KbqHighlightBackgroundPipe\n ],\n template: `\n @if (safeIcon(); as icon) {\n <span class=\"kbq-app-switcher-list-item__icon\" aria-hidden=\"true\" [innerHtml]=\"icon\"></span>\n } @else if (app().iconSrc; as iconSrc) {\n <span class=\"kbq-app-switcher-list-item__icon\" aria-hidden=\"true\">\n <img alt=\"\" width=\"24\" height=\"24\" [ngSrc]=\"iconSrc\" />\n </span>\n }\n\n <div class=\"kbq-app-switcher-list-item__container\">\n <div\n class=\"kbq-app-switcher-list-item__name\"\n [innerHTML]=\"app().name | kbqHighlightBackground: highlightText()\"\n ></div>\n @if (app().caption; as caption) {\n <div class=\"kbq-app-switcher-list-item__caption\">{{ caption }}</div>\n }\n </div>\n\n @if (toggle()) {\n <div class=\"kbq-app-switcher-list-item__toggle\" [class.kbq-expanded]=\"!collapsed()\">\n <i kbq-icon=\"kbq-chevron-down-s_16\" aria-hidden=\"true\" [color]=\"'contrast-fade'\"></i>\n </div>\n }\n `,\n styleUrls: ['app-switcher-list-item.scss'],\n providers: [\n { provide: KBQ_TITLE_TEXT_REF, useExisting: KbqAppSwitcherListItem },\n { provide: KbqDropdownItem, useExisting: KbqAppSwitcherListItem }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-app-switcher-list-item',\n role: 'menuitem',\n '[class.kbq-dropdown-item]': 'false',\n // `tabindex` comes from `KbqDropdownItem`: a second binding here would read its signal again after the others.\n '[attr.aria-expanded]': 'toggle() ? !collapsed() : null',\n '(click)': 'clickHandler($event)'\n },\n exportAs: 'kbqAppSwitcherApp'\n})\nexport class KbqAppSwitcherListItem extends KbqDropdownItem {\n private readonly iconSanitizer = inject(KbqAppSwitcherIconSanitizer);\n\n /** Application (or synthetic app group) rendered by this row. */\n readonly app = input.required<KbqAppSwitcherApp>();\n\n /** Whether the row is a group header carrying the expand/collapse toggle. */\n readonly toggle = input(false, { transform: booleanAttribute });\n\n /** Search query to highlight within the app name. */\n readonly highlightText = input<string>('');\n\n /** Whether the group's aliases are hidden. */\n readonly collapsed = model(false);\n\n /**\n * Inline SVG of the app icon, sanitized against an SVG allow-list.\n *\n * Computed from the `app` input instead of being called from the template, so the `SafeHtml` is produced\n * once per app rather than on every change-detection pass — a fresh object would make `[innerHtml]`\n * re-parse the SVG each time.\n */\n protected readonly safeIcon = computed(() => this.iconSanitizer.sanitize(this.app().icon));\n\n /** Toggles the group when this row is a group header; plain rows keep their link behaviour. */\n clickHandler(event: MouseEvent) {\n if (this.toggle()) {\n event.stopPropagation();\n event.preventDefault();\n\n this.collapsed.set(!this.collapsed());\n }\n }\n}\n","import { Directionality } from '@angular/cdk/bidi';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { CdkScrollable, Overlay, OverlayConfig, ScrollStrategy } from '@angular/cdk/overlay';\n\nimport {\n AfterContentInit,\n AfterViewChecked,\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n Directive,\n EventEmitter,\n InjectionToken,\n OnChanges,\n OnDestroy,\n OnInit,\n Provider,\n QueryList,\n SimpleChanges,\n TemplateRef,\n Type,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n inject,\n input,\n model,\n signal,\n viewChild,\n viewChildren\n} from '@angular/core';\nimport { outputFromObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { KbqBadgeModule } from '@koobiq/components/badge';\nimport {\n DOWN_ARROW,\n ENTER,\n ESCAPE,\n FocusKeyManager,\n KbqAppSwitcherLocaleConfiguration,\n KbqDeepPartial,\n KbqLocaleOverridesDirective,\n KbqOptionModule,\n KbqPopUp,\n KbqPopUpPlacementValues,\n KbqPopUpSizeValues,\n KbqPopUpTrigger,\n LEFT_ARROW,\n POSITION_TO_CSS_MAP,\n PopUpPlacements,\n PopUpSizes,\n PopUpTriggers,\n RIGHT_ARROW,\n SPACE,\n TAB,\n UP_ARROW,\n applyPopupMargins,\n kbqLocaleConfigurationOverrideProvider,\n kbqOptionalNumberAttribute,\n kbqQueryListFrom,\n kbqSiblingPopupProvider,\n ruRULocaleData\n} from '@koobiq/components/core';\nimport { KbqDividerModule } from '@koobiq/components/divider';\nimport { KbqDropdown, KbqDropdownItem, KbqDropdownModule } from '@koobiq/components/dropdown';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqInput, KbqInputModule } from '@koobiq/components/input';\nimport { defaultOffsetYWithArrow } from '@koobiq/components/popover';\nimport { KbqScrollbar } from '@koobiq/components/scrollbar';\nimport { merge } from 'rxjs';\nimport { auditTime, distinctUntilChanged, filter, startWith } from 'rxjs/operators';\nimport { KbqAppSwitcherDropdownApp } from './app-switcher-dropdown-app';\nimport { KbqAppSwitcherDropdownSite } from './app-switcher-dropdown-site';\nimport { KbqAppSwitcherListItem } from './app-switcher-list-item';\n\nexport interface KbqAppSwitcherApp {\n name: string;\n id: string | number;\n type?: string | number;\n\n /**\n * Inline SVG markup for the application icon. Use this for SVG icons that should be rendered directly in\n * the DOM.\n *\n * The markup is sanitized against a strict SVG allow-list before it is rendered\n * (see `KbqAppSwitcherIconSanitizer`): scripts, event handlers, `foreignObject`, `style` and external\n * references are removed. Prefer `iconSrc` when the icon comes from a URL.\n */\n icon?: string;\n /** Path to the icon file (URL or relative path). */\n iconSrc?: string;\n caption?: string;\n aliases?: KbqAppSwitcherApp[];\n link?: string;\n}\n\nexport interface KbqAppSwitcherSite {\n name: string;\n id: string | number;\n status?: string;\n\n /**\n * Inline SVG markup for the site icon. Use this for SVG icons that should be rendered directly in the DOM.\n * Sanitized the same way as `KbqAppSwitcherApp.icon`.\n */\n icon?: string;\n /** Path to the icon file (URL or relative path). */\n iconSrc?: string;\n apps: KbqAppSwitcherApp[];\n}\n\n/**\n * Reducer that assigns an application to a group. Called once per application; implementations either push the\n * app into `untyped` (rendered as a plain row) or add it to a synthetic group in `groups`.\n */\nexport type KbqAppSwitcherGroupBy = (\n app: KbqAppSwitcherApp,\n groups: Record<string, KbqAppSwitcherApp>,\n untyped: KbqAppSwitcherApp[]\n) => void;\n\n/** @docs-private */\nexport function defaultGroupBy(\n app: KbqAppSwitcherApp,\n groups: Record<string, KbqAppSwitcherApp>,\n untyped: KbqAppSwitcherApp[]\n) {\n if (!app.type) {\n untyped.push(app);\n } else {\n const appType = app.type.toString();\n\n if (groups[appType]) {\n groups[appType].aliases!.push(app);\n } else {\n groups[appType] = {\n name: appType,\n aliases: [app],\n icon: app.icon,\n iconSrc: app.iconSrc,\n // The type name, not an empty string: the rendered rows are tracked by `id`, and a falsy one\n // would make every group fall back to the name-based key.\n id: appType\n };\n }\n }\n}\n\n/**\n * Runs `groupBy` over `apps` and returns the rendered order: synthetic groups big enough to be collapsible\n * first, then every remaining application as a plain row.\n *\n * A group is kept only when it holds strictly more than `minAppsForGrouping` applications; smaller groups are\n * flattened back into plain rows.\n */\nexport function makeGroupsForApps(\n apps: KbqAppSwitcherApp[],\n minAppsForGrouping: number,\n groupBy: KbqAppSwitcherGroupBy = defaultGroupBy\n): KbqAppSwitcherApp[] {\n const groups: Record<string, KbqAppSwitcherApp> = {};\n const untyped: KbqAppSwitcherApp[] = [];\n const groupedApps: KbqAppSwitcherApp[] = [];\n\n apps.forEach((app) => groupBy(app, groups, untyped));\n\n Object.values(groups).forEach((group) => {\n const { aliases } = group;\n\n if (!aliases?.length) {\n // A custom `groupBy` is free to emit a group without aliases - render it as a plain row. An empty\n // array has to be dropped too: the template gates the group header on the presence of `aliases`,\n // and `[]` is truthy, so it would render a toggle that expands to nothing.\n untyped.push(aliases ? { ...group, aliases: undefined } : group);\n } else if (aliases.length > minAppsForGrouping) {\n groupedApps.push(group);\n } else {\n untyped.push(...aliases);\n }\n });\n\n groupedApps.push(...untyped);\n\n return groupedApps;\n}\n\nexport const KBQ_MIN_NUMBER_OF_APPS_TO_ENABLE_SEARCH: number = 7;\nexport const KBQ_MIN_NUMBER_OF_APPS_TO_ENABLE_GROUPING: number = 3;\n\n/**\n * `hideIfNotInViewPort` reads layout (`getBoundingClientRect`) and hangs off `CdkScrollable.elementScrolled()`,\n * which - unlike `ScrollDispatcher.scrolled()` - is not audited by the CDK; coalesce it to roughly one frame.\n */\nconst SCROLL_GEOMETRY_THROTTLE = 16;\n\nconst defaultPlacement = PopUpPlacements.BottomLeft;\n\nconst defaultBackdropClass = 'cdk-overlay-transparent-backdrop';\n\n/** @docs-private */\nexport const KBQ_APP_SWITCHER_SCROLL_STRATEGY = new InjectionToken<() => ScrollStrategy>(\n 'kbq-app-switcher-scroll-strategy'\n);\n\n/** @docs-private */\nexport function kbqAppSwitcherScrollStrategyFactory(overlay: Overlay): () => ScrollStrategy {\n return () => overlay.scrollStrategies.reposition({ scrollThrottle: 20 });\n}\n\n/** @docs-private */\nexport const KBQ_APP_SWITCHER_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n provide: KBQ_APP_SWITCHER_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: kbqAppSwitcherScrollStrategyFactory\n};\n\n/** default configuration of app-switcher */\n/** @docs-private */\nexport const KBQ_APP_SWITCHER_DEFAULT_LOCALE_CONFIGURATION: KbqAppSwitcherLocaleConfiguration =\n ruRULocaleData.appSwitcher;\n\n/** Injection Token for providing the default configuration of app-switcher */\n/** @docs-private */\nexport const KBQ_APP_SWITCHER_LOCALE_CONFIGURATION = new InjectionToken<KbqAppSwitcherLocaleConfiguration>(\n 'KbqAppSwitcherLocaleConfiguration',\n { factory: () => KBQ_APP_SWITCHER_DEFAULT_LOCALE_CONFIGURATION }\n);\n\n/**\n * Utility provider for `KBQ_APP_SWITCHER_LOCALE_CONFIGURATION`. Only the strings you pass are overridden; the rest\n * keep following the active locale.\n */\nexport const kbqAppSwitcherLocaleConfigurationProvider = (\n configuration: KbqDeepPartial<KbqAppSwitcherLocaleConfiguration>\n): Provider => kbqLocaleConfigurationOverrideProvider('appSwitcher', configuration);\n\n/** @deprecated Use {@link KBQ_APP_SWITCHER_DEFAULT_LOCALE_CONFIGURATION}. Will be removed in 22.0.0. */\nexport const KBQ_APP_SWITCHER_DEFAULT_CONFIGURATION = KBQ_APP_SWITCHER_DEFAULT_LOCALE_CONFIGURATION;\n/** @deprecated Use {@link KBQ_APP_SWITCHER_LOCALE_CONFIGURATION}. Will be removed in 22.0.0. */\nexport const KBQ_APP_SWITCHER_CONFIGURATION = KBQ_APP_SWITCHER_LOCALE_CONFIGURATION;\n\n/**\n * Providers used by the app-switcher. `KbqAppSwitcherModule` applies them for `NgModule` consumers;\n * standalone consumers that import `KbqAppSwitcherTrigger` directly may add them to their application (or\n * route) providers.\n *\n * Providing them is optional: the only entry is the scroll strategy, and the directive falls back to the\n * default repositioning strategy when the token is absent. The app-switcher renders no focus trap, so - unlike\n * `KbqPopoverModule` and `KbqNotificationCenterModule`, whose templates bind `[cdkTrapFocus]` - it must not\n * swap `FOCUS_TRAP_INERT_STRATEGY`/`FocusTrapFactory`: those are injector-wide and would disable the CDK\n * inert strategy for every other focus trap in the same scope.\n */\nexport function kbqAppSwitcherProvider(): Provider[] {\n return [KBQ_APP_SWITCHER_SCROLL_STRATEGY_FACTORY_PROVIDER];\n}\n\n/**\n * Popup rendered by `KbqAppSwitcherTrigger`. The trigger attaches it to a CDK overlay itself (see\n * `getOverlayHandleComponentType`) and assigns `trigger` on the created instance, so consumers never place\n * `<kbq-app-switcher>` in a template - `[kbqAppSwitcher]` on the trigger element is the whole public surface.\n */\n@Component({\n selector: 'kbq-app-switcher',\n imports: [\n FormsModule,\n ReactiveFormsModule,\n KbqInputModule,\n KbqIconModule,\n KbqDividerModule,\n KbqBadgeModule,\n KbqDropdownModule,\n KbqScrollbar,\n KbqOptionModule,\n KbqAppSwitcherDropdownApp,\n KbqAppSwitcherDropdownSite,\n KbqAppSwitcherListItem\n ],\n templateUrl: './app-switcher.html',\n styleUrls: ['./app-switcher.scss', './app-switcher-tokens.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-app-switcher',\n '(keydown)': 'keydownHandler($event)',\n '(focusin)': 'focusinHandler($event)',\n '(focusout)': 'focusoutHandler($event)'\n },\n // Carrier only: the popup is created through the overlay, so there is no element for a consumer to bind\n // on. It re-merges the carriers above the trigger and lets the popup read its strings through `read()`.\n hostDirectives: [KbqLocaleOverridesDirective],\n preserveWhitespaces: false\n})\nexport class KbqAppSwitcherComponent extends KbqPopUp implements AfterViewChecked, OnChanges, AfterViewInit, OnDestroy {\n /** Strings currently rendered by the popup. */\n readonly localeConfiguration = inject(KbqLocaleOverridesDirective, { self: true }).read(\n 'appSwitcher',\n KBQ_APP_SWITCHER_LOCALE_CONFIGURATION\n );\n\n /** @docs-private */\n readonly searchControl = new FormControl('');\n\n /** @docs-private */\n filteredSites: KbqAppSwitcherSite[] = [];\n\n /** @docs-private */\n prefix = 'kbq-app-switcher';\n\n /** @docs-private */\n trigger: KbqAppSwitcherTrigger;\n\n /** @docs-private */\n readonly input = viewChild(KbqInput);\n\n /**\n * The other-sites flyout, closed whenever the pointer moves back over the main list.\n *\n * Not `required`: it only exists in multi-site mode, and reading a required query with no match throws -\n * which a single-site switcher with a search field would do on the first `mouseenter`.\n *\n * @docs-private\n */\n readonly otherSites = viewChild<KbqDropdown>('otherSites');\n\n private readonly allItemsQuery = viewChildren(KbqDropdownItem);\n private readonly allItemsList = kbqQueryListFrom(this.allItemsQuery);\n\n /** @docs-private */\n protected get allItems(): QueryList<KbqDropdownItem> {\n return this.allItemsList();\n }\n\n /** Roving-focus manager over the inline menu items (flat app rows and other-site rows). */\n protected keyManager: FocusKeyManager<KbqDropdownItem>;\n\n private readonly menuItems = new QueryList<KbqDropdownItem>();\n\n private readonly dir = inject(Directionality, { optional: true });\n\n /**\n * CSS class marking a nested alias row, bound in the template (see app-switcher.html). Kept as a\n * single named constant, rather than a literal repeated in both places, so handleGroupHorizontal's\n * classList check can't silently drift from the template's class binding if the class is renamed.\n */\n protected readonly nestedAliasClass = 'kbq-app-switcher-site_nested';\n\n /** @docs-private */\n readonly triggerInput = input<KbqAppSwitcherTrigger | undefined>(undefined, { alias: 'trigger' });\n\n ngOnChanges(changes: SimpleChanges): void {\n // A bound input is handed to its member; unbound, it leaves what code wrote.\n if (changes['triggerInput']) {\n const trigger = this.triggerInput();\n\n if (trigger !== undefined) this.trigger = trigger;\n }\n }\n\n constructor() {\n super();\n }\n\n ngAfterViewInit() {\n const input = this.input();\n\n this.keyManager = new FocusKeyManager<KbqDropdownItem>(this.menuItems)\n .withVerticalOrientation()\n .withHomeAndEnd()\n .withTypeAhead();\n\n // Focus the first item only once, and only after it is actually rendered (see below).\n let initialItemFocused = false;\n\n // Build the roving menu from the inline (static-content) items: the flat app rows, expanded\n // aliases and search results (`KbqAppSwitcherListItem`) plus the other-site rows\n // (`KbqAppSwitcherDropdownSite`). The apps inside the site flyouts (`KbqAppSwitcherDropdownApp`)\n // live in their own overlay dropdowns, which drive their own key manager, so they are excluded.\n this.allItems.changes.pipe(startWith(null), takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.menuItems.reset(\n this.allItems.filter(\n (item) => item instanceof KbqAppSwitcherListItem || item instanceof KbqAppSwitcherDropdownSite\n )\n );\n this.menuItems.notifyOnChanges();\n\n // When there is no search field, focus the first item on open. The static-content rows live\n // inside a `kbq-dropdown` that only materialises after this component's `ngAfterViewInit`, so\n // focusing eagerly there races the render and silently no-ops in production builds — wait for\n // the items to appear in the query instead.\n if (!input && !initialItemFocused && this.menuItems.length) {\n initialItemFocused = true;\n this.keyManager.setFirstItemActive();\n }\n });\n\n if (input) {\n input.focus();\n }\n\n this.visibleChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((state) => {\n // Not memoized on `offset`: `applyPopupMargins` picks the margin side from the current\n // `kbq-app-switcher_placement-*` classes, so the write depends on the placement too.\n if (!state || this.offset === null) return;\n\n applyPopupMargins(this.renderer, this.elementRef.nativeElement, this.prefix, `${this.offset}px`);\n });\n\n this.searchControl.valueChanges\n .pipe(distinctUntilChanged(), takeUntilDestroyed(this.destroyRef))\n .subscribe((value) => {\n this.filteredSites = this.filterSites(value);\n // Switching between the flat list and the search results swaps the rendered items;\n // drop any stale active item so navigation restarts from the top.\n this.keyManager?.setActiveItem(-1);\n });\n }\n\n ngAfterViewChecked(): void {\n // Syncs the list here so `changes` emits once this view is checked.\n this.allItemsList();\n }\n\n /** Releases the internal roving-focus menu QueryList. */\n ngOnDestroy(): void {\n this.menuItems.destroy();\n\n super.ngOnDestroy();\n }\n\n /** @docs-private */\n updateClassMap(placement: string, customClass: string, size: KbqPopUpSizeValues) {\n super.updateClassMap(placement, customClass, { [`${this.prefix}_${size}`]: !!size });\n }\n\n /** @docs-private */\n escapeHandler() {\n this.hide(0);\n }\n\n /**\n * Handles keyboard navigation across the app-switcher menu items.\n *\n * @docs-private\n */\n protected keydownHandler(event: KeyboardEvent): void {\n const keyCode = event.keyCode;\n\n if (keyCode === ESCAPE) {\n // Spent by a control inside, such as a tooltip closing on it: one key closes one layer.\n if (event.defaultPrevented) return;\n\n // Stop here so Escape closes only this popup instead of bubbling into overlays opened\n // earlier (mirrors KbqDropdown.handleKeydown).\n event.preventDefault();\n event.stopPropagation();\n this.escapeHandler();\n\n return;\n }\n\n // The host `(keydown)` binding is live before `ngAfterViewInit` builds the key manager; until\n // then there is nothing to navigate, so ignore the key (mirrors `focusinHandler`).\n if (!this.keyManager) {\n return;\n }\n\n // Keep the search field's native typing/caret behaviour; only ArrowDown moves into the list.\n if (this.eventFromInput(event)) {\n if (keyCode === DOWN_ARROW) {\n event.preventDefault();\n this.keyManager.setFocusOrigin('keyboard').setFirstItemActive();\n }\n\n return;\n }\n\n // Tab leaves the menu (WAI-ARIA menu pattern): close and move focus to the trigger ourselves.\n // Preventing the default stops the browser from first shifting focus into its own chrome, which\n // would leave the real focus out of sync with the ring shown on the trigger.\n if (keyCode === TAB) {\n event.preventDefault();\n this.hide(0);\n this.trigger.focus();\n\n return;\n }\n\n // Any key past this point is a keyboard interaction on a menu item, so show the focus ring.\n this.keyManager.setFocusOrigin('keyboard');\n\n const activeItem = this.keyManager.activeItem;\n\n if ((keyCode === LEFT_ARROW || keyCode === RIGHT_ARROW) && this.handleGroupHorizontal(keyCode, activeItem)) {\n event.preventDefault();\n\n return;\n }\n\n if ((keyCode === ENTER || keyCode === SPACE) && activeItem && !this.keyManager.isTyping()) {\n event.preventDefault();\n\n // A group header toggles its aliases; any other item activates its underlying link.\n if (activeItem instanceof KbqAppSwitcherListItem && activeItem.toggle()) {\n activeItem.collapsed.set(!activeItem.collapsed());\n } else {\n activeItem.getHostElement().click();\n }\n\n return;\n }\n\n // ArrowUp on the first item returns focus to the search field (no wrap-around).\n if (keyCode === UP_ARROW && this.keyManager.activeItemIndex === 0 && this.input()) {\n event.preventDefault();\n this.keyManager.setActiveItem(-1);\n this.input()!.focus();\n\n return;\n }\n\n this.keyManager.onKeydown(event);\n }\n\n /**\n * Expands/collapses an app group (or steps from an alias back to its header) on Left/Right,\n * honouring the current text direction. Returns whether the key was consumed.\n */\n private handleGroupHorizontal(keyCode: number, activeItem: KbqDropdownItem | null): boolean {\n if (!(activeItem instanceof KbqAppSwitcherListItem)) {\n return false;\n }\n\n const rtl = this.dir?.value === 'rtl';\n const expandKey = rtl ? LEFT_ARROW : RIGHT_ARROW;\n const collapseKey = rtl ? RIGHT_ARROW : LEFT_ARROW;\n\n if (activeItem.toggle()) {\n if (keyCode === expandKey && activeItem.collapsed()) {\n activeItem.collapsed.set(false);\n\n return true;\n }\n\n if (keyCode === collapseKey && !activeItem.collapsed()) {\n activeItem.collapsed.set(true);\n\n return true;\n }\n\n return false;\n }\n\n // Collapse key on a nested alias row moves focus back to its parent group header.\n if (keyCode === collapseKey && activeItem.getHostElement().classList.contains(this.nestedAliasClass)) {\n const items = this.menuItems.toArray();\n\n for (let index = this.keyManager.activeItemIndex - 1; index >= 0; index--) {\n const candidate = items[index];\n\n if (candidate instanceof KbqAppSwitcherListItem && candidate.toggle()) {\n this.keyManager.setActiveItem(index);\n\n return true;\n }\n }\n }\n\n return false;\n }\n\n /** Whether the keyboard event originated from the search input. */\n private eventFromInput(event: KeyboardEvent): boolean {\n return !!(event.target as HTMLElement)?.attributes.getNamedItem('kbqinput');\n }\n\n /**\n * Syncs the key manager's active item with focus that arrives via Tab, click or a closing flyout.\n * Clears the active item (index -1) when focus lands on a focusable element that isn't one of\n * `menuItems` (e.g. the search field's clear button) - otherwise a stale `activeItem` from before\n * the focus move would keep receiving Enter/Space/arrow-key actions meant for the new target.\n *\n * @docs-private\n */\n protected focusinHandler(event: FocusEvent): void {\n if (!this.keyManager) return;\n\n const index = this.menuItems.toArray().findIndex((item) => item.getHostElement() === event.target);\n\n this.keyManager.updateActiveItem(index);\n }\n\n /**\n * Closes the popup once focus leaves the menu and its site flyouts, mirroring the dropdown.\n *\n * @docs-private\n */\n protected focusoutHandler(event: FocusEvent): void {\n const next = event.relatedTarget as HTMLElement | null;\n\n // Keep open while focus stays inside the popup or moves into a site flyout overlay\n // (flyouts are separate overlays whose panes carry the `.kbq-app-switcher-sites` class).\n if (!next || !next.closest('.kbq-app-switcher, .kbq-app-switcher-sites')) {\n this.hide(0);\n // Return focus to the trigger (the same landing spot as Shift+Tab), instead of\n // leaving it wherever it was heading.\n this.trigger.focus();\n }\n }\n\n /**\n * Selects an application belonging to one of the other sites.\n *\n * @docs-private\n */\n selectAppInSite(site: KbqAppSwitcherSite | undefined, app: KbqAppSwitcherApp) {\n if (!site) return;\n\n this.trigger.selectedSite.set(site);\n this.trigger.selectedApp.set(app);\n }\n\n private filterSites(query: string | null): KbqAppSwitcherSite[] {\n const sites = this.trigger.originalSites;\n\n if (!query) return sites;\n\n const search = query.toLowerCase();\n const matches = (app: KbqAppSwitcherApp): boolean =>\n app.name.toLowerCase().includes(search) || !!app.caption?.toLowerCase().includes(search);\n\n // Shallow copies only: a `structuredClone` of every site would be an O(all apps) deep copy per\n // keystroke, and would also hand `@for` brand-new app objects to re-render on every character.\n return sites\n .map((site) => ({ ...site, apps: site.apps.filter(matches) }))\n .filter((site) => site.apps.length > 0);\n }\n}\n\n@Directive({\n selector: '[kbqAppSwitcher]',\n providers: [kbqSiblingPopupProvider(KbqAppSwitcherTrigger)],\n host: {\n '[class.kbq-app-switcher_open]': 'isOpen',\n '[class.kbq-active]': 'hasClickTrigger && isOpen',\n '(keydown)': 'keydownHandler($event)',\n '(touchend)': 'touchendHandler()'\n },\n exportAs: 'kbqAppSwitcher'\n})\nexport class KbqAppSwitcherTrigger\n extends KbqPopUpTrigger<KbqAppSwitcherComponent>\n implements OnChanges, AfterContentInit, OnInit\n{\n /**\n * Optional so a standalone consumer works without `kbqAppSwitcherProvider()`; an application-level\n * provider for `KBQ_APP_SWITCHER_SCROLL_STRATEGY` still wins over this fallback.\n *\n * @docs-private\n */\n protected scrollStrategy: () => ScrollStrategy =\n inject(KBQ_APP_SWITCHER_SCROLL_STRATEGY, { optional: true }) ??\n kbqAppSwitcherScrollStrategyFactory(this.overlay);\n\n // Abstract members of `KbqPopUp`/`KbqPopUpTrigger` that the app-switcher has no use for: its content is\n // fixed (the app list), it never draws an arrow and it never renders a backdrop.\n /** @docs-private */\n arrow: boolean = false;\n /** @docs-private */\n customClass: string;\n private hasBackdrop: boolean = false;\n private size: KbqPopUpSizeValues = PopUpSizes.Medium;\n /** @docs-private */\n content: string | TemplateRef<any>;\n\n /** Whether search is used or not */\n get withSearch(): boolean {\n return this.appsCount > KBQ_MIN_NUMBER_OF_APPS_TO_ENABLE_SEARCH;\n }\n\n /**\n * Number of applications to choose from\n *\n * @docs-private\n */\n get appsCount(): number {\n return this.appsCountComputed();\n }\n\n /**\n * Whether the sites are used or not\n *\n * @docs-private\n */\n get sitesMode(): boolean {\n return this.sitesModeComputed();\n }\n\n /**\n * Applications of the currently selected site, grouped for rendering.\n *\n * @docs-private\n */\n get currentApps(): KbqAppSwitcherApp[] {\n return this.currentAppsComputed();\n }\n\n /** Selected application */\n readonly selectedApp = model<KbqAppSwitcherApp | undefined>(undefined);\n\n /** Placement of popUp */\n placement: KbqPopUpPlacementValues = defaultPlacement;\n\n /** Class that will be used in the background */\n backdropClass: string = defaultBackdropClass;\n\n /** Offset of popUp */\n offset: number | null = defaultOffsetYWithArrow;\n\n /** Array of sites, with the applications of each site grouped for rendering. */\n get sites(): KbqAppSwitcherSite[] {\n return this.parsedSites();\n }\n\n set sites(value: KbqAppSwitcherSite[]) {\n this.originalSites = value;\n }\n\n /**\n * Function to group the apps by type. The first argument is an app object with type.\n * The second is a groups object and third is an array for untyped apps\n */\n get groupBy(): KbqAppSwitcherGroupBy {\n return this.groupBySignal();\n }\n\n set groupBy(fn: KbqAppSwitcherGroupBy) {\n this.groupBySignal.set(fn);\n }\n\n /** Selected site */\n readonly selectedSite = model<KbqAppSwitcherSite | undefined>(undefined);\n\n /**\n * `selectedSite` with its applications grouped for rendering.\n *\n * Looked up by id among the parsed sites, so re-selecting a site never regroups it again. Falls back to\n * the raw value when the id is unknown (a stale id, or `selectedSite` set before `sites`) instead of\n * throwing.\n *\n * @docs-private\n */\n readonly parsedSelectedSite = computed<KbqAppSwitcherSite | undefined>(() => {\n const value = this.selectedSite();\n\n return value && (this.parsedSitesById().get(value.id) ?? value);\n });\n\n /** Whether the trigger is disabled. */\n get disabled(): boolean {\n return this._disabled;\n }\n\n set disabled(value) {\n this._disabled = coerceBooleanProperty(value);\n\n if (this._disabled) {\n this.hide();\n }\n }\n\n /** @docs-private */\n get hasClickTrigger(): boolean {\n return this.trigger.includes(PopUpTriggers.Click);\n }\n\n /** Emits a change event whenever the placement state changes. */\n readonly placementChange = new EventEmitter<KbqPopUpPlacementValues>();\n\n /** @docs-private */\n readonly placementChangeOutput = outputFromObservable(this.placementChange, { alias: 'kbqPlacementChange' });\n\n /** Emits a change event whenever the visible state changes. */\n readonly visibleChange = new EventEmitter<boolean>();\n\n /** @docs-private */\n readonly visibleChangeOutput = outputFromObservable(this.visibleChange, { alias: 'kbqVisibleChange' });\n\n /**\n * Space-separated list of DOM events that open the popup (`KbqPopUpTrigger.trigger`).\n *\n * Not to be confused with `KbqAppSwitcherComponent.trigger`, which is the back-reference from the popup to\n * this directive.\n *\n * @docs-private\n */\n trigger: string = `${PopUpTriggers.Click}, ${PopUpTriggers.Keydown}`;\n\n /**\n * Sites exactly as supplied through `sites`, without grouping.\n *\n * @docs-private\n */\n get originalSites(): KbqAppSwitcherSite[] {\n return this.originalSitesSignal();\n }\n\n set originalSites(value: KbqAppSwitcherSite[]) {\n this.originalSitesSignal.set(value ?? []);\n }\n\n /** @docs-private */\n protected originSelector = '.kbq-app-switcher';\n\n /** @docs-private */\n protected get overlayConfig(): OverlayConfig {\n return {\n panelClass: 'kbq-app-switcher__panel',\n hasBackdrop: this.hasBackdrop,\n backdropClass: this.backdropClass\n };\n }\n\n private readonly originalSitesSignal = signal<KbqAppSwitcherSite[]>([]);\n private readonly groupBySignal = signal<KbqAppSwitcherGroupBy>(defaultGroupBy);\n\n /**\n * Sites with their applications grouped, keyed by site id.\n *\n * Grouping runs once per `sites`/`groupBy` change instead of once per `selectedSite` assignment, and the\n * parsed objects keep their identity so `@for` can reuse the rendered rows.\n */\n private readonly parsedSitesById = computed(() => {\n const groupBy = this.groupBySignal();\n\n return new Map(\n this.originalSitesSignal().map((site) => [\n site.id,\n {\n ...site,\n apps: makeGroupsForApps(site.apps, KBQ_MIN_NUMBER_OF_APPS_TO_ENABLE_GROUPING, groupBy)\n } satisfies KbqAppSwitcherSite\n ])\n );\n });\n\n private readonly parsedSites = computed(() => [...this.parsedSitesById().values()]);\n\n private readonly appsCountComputed = computed(() =>\n this.originalSitesSignal().reduce((acc, site) => acc + site.apps.length, 0)\n );\n\n private readonly sitesModeComputed = computed(() => this.originalSitesSignal().length > 1);\n\n private readonly currentAppsComputed = computed(() =>\n this.sitesModeComputed()\n ? // A multi-site switcher can be opened before a site is selected; render nothing rather than crash.\n (this.parsedSelectedSite()?.apps ?? [])\n : (this.parsedSites()[0]?.apps ?? [])\n );\n\n /** @docs-private */\n readonly placementInput = input<KbqPopUpPlacementValues | undefined>(undefined, {\n alias: 'kbqAppSwitcherPlacement'\n });\n\n /** @docs-private */\n readonly backdropClassInput = input<string | undefined>(undefined, { alias: 'backdropClass' });\n\n /** @docs-private */\n readonly offsetInput = input<number | null | undefined, number | string | null | undefined>(undefined, {\n alias: 'offset',\n transform: kbqOptionalNumberAttribute\n });\n\n /** @docs-private */\n readonly sitesInput = input<KbqAppSwitcherSite[] | undefined>(undefined, { alias: 'sites' });\n\n /** @docs-private */\n readonly groupByInput = input<KbqAppSwitcherGroupBy | undefined>(undefined, { alias: 'groupBy' });\n\n /** @docs-private */\n readonly disabledInput = input<boolean | undefined, boolean | string | null | undefined>(undefined, {\n alias: 'disabled',\n transform: booleanAttribute\n });\n\n ngOnChanges(changes: SimpleChanges): void {\n // A bound input is handed to its member, a bound `undefined` as the member's default; unbound, it leaves\n // what code wrote.\n if (changes['placementInput']) {\n this.placement = this.placementInput() ?? defaultPlacement;\n }\n\n if (changes['backdropClassInput']) {\n this.backdropClass = this.backdropClassInput() ?? defaultBackdropClass;\n }\n\n if (changes['offsetInput']) {\n this.offset = this.offsetInput() ?? defaultOffsetYWithArrow;\n }\n\n if (changes['sitesInput']) {\n this.sites = this.sitesInput() ?? [];\n }\n\n if (changes['groupByInput']) {\n this.groupBy = this.groupByInput() ?? defaultGroupBy;\n }\n\n if (changes['disabledInput']) {\n const disabled = this.disabledInput();\n\n if (disabled !== undefined) this.disabled = disabled;\n }\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n\n this.scrollable\n ?.elementScrolled()\n .pipe(auditTime(SCROLL_GEOMETRY_THROTTLE), takeUntilDestroyed(this.destroyRef))\n .subscribe(this.hideIfNotInViewPort);\n }\n\n ngAfterContentInit(): void {\n // Hide the popup once it scrolls out of an ancestor that opted in with `kbq-hide-nested-popup`\n // (e.g. a tab body), mirroring `KbqPopover`. No extra throttle: `ScrollDispatcher.scrolled()`\n // already audits its output (20ms by default).\n this.scrollDispatcher\n .scrolled()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((scrollable: CdkScrollable | void) => {\n if (!scrollable?.getElementRef().nativeElement.classList.contains('kbq-hide-nested-popup')) return;\n\n const parentRects = scrollable.getElementRef().nativeElement.getBoundingClientRect();\n const childRects = this.elementRef.nativeElement.getBoundingClientRect();\n\n if (childRects.bottom < parentRects.top || childRects.top > parentRects.bottom) {\n this.hide();\n }\n });\n\n // On close, return focus to the trigger. Inner-scroll close suppression lives in\n // `closingActions()` (it filters scrolls originating inside the popup), so no per-visibility\n // subscription is needed here.\n this.visibleChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((visible: boolean) => {\n if (!visible) {\n this.focus();\n }\n });\n }\n\n /** @docs-private */\n updateData() {\n if (!this.instance) return;\n\n this.instance.content = this.content;\n this.instance.arrow = this.arrow;\n this.instance.offset = this.offset;\n this.instance.detectChanges();\n\n if (this.isOpen) {\n this.updatePosition(true);\n }\n }\n\n /** @docs-private */\n getOverlayHandleComponentType(): Type<KbqAppSwitcherComponent> {\n return KbqAppSwitcherComponent;\n }\n\n /** @docs-private */\n updateClassMap(newPlacement: string = this.placement) {\n if (!this.instance) return;\n\n this.instance.updateClassMap(POSITION_TO_CSS_MAP[newPlacement], this.customClass, this.size);\n }\n\n /** @docs-private */\n closingActions() {\n return merge(\n this.overlayRef!.outsidePointerEvents(),\n this.overlayRef!.backdropClick(),\n // Only an outer/ancestor scroll that moves the popup out of view should close it. Scrolling\n // the popup's own content must not: its `KbqScrollbar` viewport is a `CdkScrollable`, so it\n // reaches the root `ScrollDispatcher`, and keyboard navigation scrolls the focused item into\n // view through that viewport - without this filter every arrow key would close the panel.\n this.scrollDispatcher.scrolled().pipe(filter((scrollable) => !this.isInnerScroll(scrollable)))\n );\n }\n\n /** Whether a `ScrollDispatcher` emission originates from inside this popup's own scrollable content. */\n private isInnerScroll(scrollable: CdkScrollable | void): boolean {\n return (\n scrollable instanceof CdkScrollable &&\n !!scrollable.getElementRef().nativeElement.closest('.kbq-app-switcher, .kbq-app-switcher-sites')\n );\n }\n\n private hideIfNotInViewPort = () => {\n if (!this.scrollable) return;\n\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n const containerRect = this.scrollable.getElementRef().nativeElement.getBoundingClientRect();\n\n if (!(\n rect.bottom >= containerRect.top &&\n rect.right >= containerRect.left &&\n rect.top <= containerRect.bottom &&\n rect.left <= containerRect.right\n )) {\n this.hide();\n }\n };\n}\n","@if (trigger.withSearch) {\n <div class=\"kbq-app-switcher__search-container\" (mouseenter)=\"otherSites()?.close()\">\n <kbq-form-field noBorders>\n <i kbq-icon=\"kbq-magnifying-glass_16\" aria-hidden=\"true\" kbqPrefix></i>\n <input\n placeholder=\"{{ localeConfiguration().searchPlaceholder }}\"\n autocomplete=\"off\"\n kbqInput\n [attr.aria-label]=\"localeConfiguration().searchPlaceholder\"\n [formControl]=\"searchControl\"\n />\n <!-- `kbq-cleaner` is a button with a localized default name; here it clears the search specifically. -->\n <kbq-cleaner [aria-label]=\"localeConfiguration().clearSearch\" />\n </kbq-form-field>\n </div>\n\n <kbq-divider />\n}\n\n<!--\n Everything between `role=\"menu\"` and the `role=\"menuitem\"` rows is marked `role=\"none\"`: the menu role\n requires its owned elements to be menu items, and the layout wrappers (and the dropdown host that provides\n the panel styling) would otherwise break that ownership chain. The scrollbar host cannot carry the menu\n role for the same reason - it injects its own focusable viewport element in between.\n-->\n<kbq-scrollbar>\n @if (!searchControl.getRawValue()) {\n <div role=\"menu\" aria-orientation=\"vertical\">\n <div class=\"kbq-app-switcher__app-container\" role=\"none\" (mouseenter)=\"otherSites()?.close()\">\n @if (trigger.sitesMode) {\n <div class=\"kbq-app-switcher-group-header\" role=\"none\">\n <div class=\"kbq-app-switcher-group-header__text\">{{ trigger.selectedSite()?.name }}</div>\n @if (trigger.selectedSite()?.status; as status) {\n <kbq-badge class=\"kbq-app-switcher-group-header__badge\" [compact]=\"true\">\n {{ status }}\n </kbq-badge>\n }\n </div>\n }\n\n <kbq-dropdown role=\"none\" [class]=\"'kbq-app-switcher-sites'\">\n <div kbqDropdownStaticContent role=\"none\" class=\"kbq-app-switcher-site\">\n @for (app of trigger.currentApps; track app.id || app.name) {\n @if (!app.aliases) {\n <a\n rel=\"noopener noreferrer\"\n kbq-app-switcher-list-item\n [attr.href]=\"app.link ?? null\"\n [attr.aria-current]=\"app.id === trigger.selectedApp()?.id ? 'true' : null\"\n [class.kbq-selected]=\"app.id === trigger.selectedApp()?.id\"\n [app]=\"app\"\n [toggle]=\"!!app.aliases\"\n ></a>\n } @else {\n <div\n #appSwitcherApp=\"kbqAppSwitcherApp\"\n kbq-app-switcher-list-item\n [app]=\"app\"\n [toggle]=\"!!app.aliases\"\n ></div>\n\n @if (!appSwitcherApp.collapsed()) {\n @for (alias of app.aliases; track alias.id) {\n <a\n rel=\"noopener noreferrer\"\n kbq-app-switcher-list-item\n [attr.href]=\"alias.link ?? null\"\n [attr.aria-current]=\"alias.id === trigger.selectedApp()?.id ? 'true' : null\"\n [class]=\"nestedAliasClass\"\n [class.kbq-selected]=\"alias.id === trigger.selectedApp()?.id\"\n [app]=\"alias\"\n ></a>\n }\n }\n }\n }\n </div>\n </kbq-dropdown>\n </div>\n\n @if (trigger.sitesMode) {\n <kbq-divider />\n\n <div class=\"kbq-app-switcher__sites-container\" role=\"none\">\n <div class=\"kbq-app-switcher-group-header\" role=\"none\">\n <div class=\"kbq-app-switcher-group-header__text\">{{ localeConfiguration().sitesHeader }}</div>\n </div>\n\n <kbq-dropdown #otherSites=\"kbqDropdown\" role=\"none\">\n <div kbqDropdownStaticContent role=\"none\" class=\"kbq-app-switcher-sites\">\n @for (site of trigger.sites; track site.id) {\n @if (site.id !== trigger.selectedSite()?.id) {\n <div\n [kbq-app-switcher-dropdown-site]=\"site\"\n [kbqDropdownTriggerFor]=\"dropdownWithSelectedSite\"\n [kbqDropdownTriggerData]=\"{ site }\"\n [offsetX]=\"0\"\n ></div>\n }\n }\n </div>\n </kbq-dropdown>\n </div>\n\n <!--\n The flyout panels must stay in the same view as the triggers above: a template reference\n variable is only visible inside the view that declares it. Their hosts render empty (the\n content moves into an overlay when opened), so `role=\"none\"` keeps the menu ownership\n chain intact.\n\n Each panel is shared by its triggers, so it renders the data of the trigger that opened it\n (`kbqDropdownTriggerData`), not of the last hovered row: the safe area keeps a panel open\n while the pointer crosses other triggers.\n -->\n <kbq-dropdown #dropdownWithSelectedSite=\"kbqDropdown\" role=\"none\" [class]=\"'kbq-app-switcher-sites'\">\n <ng-template let-site=\"site\" kbqDropdownContent>\n @for (app of site.apps; track app.id || app.name) {\n @if (app.aliases) {\n <div\n #dropdownWithGroupedAppsTrigger=\"kbqDropdownTrigger\"\n [kbq-app-switcher-dropdown-app]=\"app\"\n [kbqDropdownTriggerFor]=\"dropdownWithGroupedApps\"\n [kbqDropdownTriggerData]=\"{ site, app }\"\n [offsetX]=\"0\"\n [class.kbq-pressed]=\"dropdownWithGroupedAppsTrigger.opened\"\n ></div>\n } @else {\n <a\n rel=\"noopener noreferrer\"\n [attr.href]=\"app.link ?? null\"\n [kbq-app-switcher-dropdown-app]=\"app\"\n (click)=\"selectAppInSite(site, app)\"\n ></a>\n }\n }\n </ng-template>\n </kbq-dropdown>\n\n <kbq-dropdown #dropdownWithGroupedApps=\"kbqDropdown\" role=\"none\" [class]=\"'kbq-app-switcher-sites'\">\n <ng-template let-site=\"site\" let-app=\"app\" kbqDropdownContent>\n @for (alias of app.aliases; track alias.id) {\n <a\n rel=\"noopener noreferrer\"\n [attr.href]=\"alias.link ?? null\"\n [kbq-app-switcher-dropdown-app]=\"alias\"\n (click)=\"selectAppInSite(site, alias)\"\n ></a>\n }\n </ng-template>\n </kbq-dropdown>\n }\n </div>\n } @else {\n <div class=\"kbq-app-switcher__search-result\">\n @if (filteredSites.length) {\n <div role=\"menu\" aria-orientation=\"vertical\">\n <kbq-dropdown role=\"none\" [class]=\"'kbq-app-switcher-sites'\">\n <div kbqDropdownStaticContent role=\"none\" class=\"kbq-app-switcher-site\">\n @for (site of filteredSites; track site.id) {\n @if (trigger.sitesMode && site.apps) {\n <kbq-optgroup label=\"{{ site.name }}\" role=\"none\" />\n }\n\n @for (app of site.apps; track app.id || app.name) {\n <a\n rel=\"noopener noreferrer\"\n kbq-app-switcher-list-item\n [attr.href]=\"app.link ?? null\"\n [app]=\"app\"\n [highlightText]=\"searchControl.getRawValue() ?? ''\"\n ></a>\n }\n }\n </div>\n </kbq-dropdown>\n </div>\n }\n\n <!--\n Outside the menu: a status message is not a menu item. The live region itself stays mounted\n while the query changes, so the message is announced once it appears - a region inserted into\n the DOM together with its text is announced unreliably. It collapses while there are results\n (`:empty`, see app-switcher.scss).\n -->\n <div class=\"kbq-app-switcher__empty-search-result\" role=\"status\">\n @if (!filteredSites.length) {\n {{ localeConfiguration().searchEmptyResult }}\n }\n </div>\n </div>\n }\n</kbq-scrollbar>\n","import { NgModule } from '@angular/core';\nimport { KbqAppSwitcherComponent, KbqAppSwitcherTrigger, kbqAppSwitcherProvider } from './app-switcher';\nimport { KbqAppSwitcherDropdownApp } from './app-switcher-dropdown-app';\nimport { KbqAppSwitcherDropdownSite } from './app-switcher-dropdown-site';\nimport { KbqAppSwitcherListItem } from './app-switcher-list-item';\n\n@NgModule({\n imports: [\n KbqAppSwitcherComponent,\n KbqAppSwitcherTrigger,\n KbqAppSwitcherListItem,\n KbqAppSwitcherDropdownApp,\n KbqAppSwitcherDropdownSite\n ],\n providers: kbqAppSwitcherProvider(),\n exports: [\n KbqAppSwitcherTrigger\n ]\n})\nexport class KbqAppSwitcherModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i5","i7"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA;;;;;;;AAOG;AACH,MAAM,gBAAgB,GAAwB,IAAI,GAAG,CAAC;IAClD,QAAQ;IACR,UAAU;IACV,MAAM;IACN,MAAM;IACN,SAAS;IACT,SAAS;IACT,eAAe;IACf,aAAa;IACb,cAAc;IACd,SAAS;IACT,gBAAgB;IAChB,SAAS;IACT,aAAa;IACb,UAAU;IACV,QAAQ;IACR,GAAG;IACH,gBAAgB;IAChB,MAAM;IACN,QAAQ;IACR,MAAM;IACN,MAAM;IACN,SAAS;IACT,SAAS;IACT,UAAU;IACV,gBAAgB;IAChB,MAAM;IACN,MAAM;IACN,KAAK;IACL,QAAQ;IACR,MAAM;IACN,UAAU;IACV,OAAO;IACP,OAAO;IACP;AACH,CAAA,CAAC;AAEF;;;;;;;;;AASG;AACH,MAAM,kBAAkB,GAAwB,IAAI,GAAG,CAAC;IACpD,aAAa;IACb,YAAY;IACZ,gBAAgB;IAChB,OAAO;IACP,WAAW;IACX,WAAW;IACX,OAAO;IACP,IAAI;IACJ,IAAI;IACJ,GAAG;IACH,SAAS;IACT,mBAAmB;IACnB,IAAI;IACJ,IAAI;IACJ,MAAM;IACN,cAAc;IACd,WAAW;IACX,QAAQ;IACR,aAAa;IACb,aAAa;IACb,eAAe;IACf,WAAW;IACX,aAAa;IACb,WAAW;IACX,YAAY;IACZ,aAAa;IACb,IAAI;IACJ,IAAI;IACJ,mBAAmB;IACnB,eAAe;IACf,QAAQ;IACR,MAAM;IACN,IAAI;IACJ,IAAI;IACJ,KAAK;IACL,gBAAgB;IAChB,YAAY;IACZ,YAAY;IACZ,cAAc;IACd,cAAc;IACd,aAAa;IACb,MAAM;IACN,WAAW;IACX,MAAM;IACN,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,UAAU;IACV,YAAY;IACZ,qBAAqB;IACrB,cAAc;IACd,QAAQ;IACR,qBAAqB;IACrB,gBAAgB;IAChB,GAAG;IACH,MAAM;IACN,MAAM;IACN,QAAQ;IACR,MAAM;IACN,IAAI;IACJ,IAAI;IACJ,iBAAiB;IACjB,cAAc;IACd,cAAc;IACd,YAAY;IACZ,cAAc;IACd,QAAQ;IACR,kBAAkB;IAClB,mBAAmB;IACnB,gBAAgB;IAChB,iBAAiB;IACjB,mBAAmB;IACnB,gBAAgB;IAChB,cAAc;IACd,OAAO;IACP,aAAa;IACb,WAAW;IACX,MAAM;IACN,QAAQ;IACR,eAAe;IACf,SAAS;IACT,YAAY;IACZ,OAAO;IACP,GAAG;IACH,IAAI;IACJ,IAAI;IACJ,YAAY;IACZ,OAAO;IACP,aAAa;IACb,GAAG;IACH,IAAI;IACJ;AACH,CAAA,CAAC;AAEF;AACA,MAAM,cAAc,GAAwB,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AAE3E;AACA,MAAM,kBAAkB,GAAG,0CAA0C;AAErE;;;;;;;AAOG;MAEU,2BAA2B,CAAA;AADxC,IAAA,WAAA,GAAA;AAEqB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AAkEvD,IAAA;AAhEG;;;AAGG;AACH,IAAA,QAAQ,CAAC,IAA+B,EAAA;AACpC,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI;QAEtB,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AAEnC,QAAA,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,IAAI;;;;AAK3B,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,SAAS;AAAE,YAAA,OAAO,IAAI;QAErD,OAAO,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAAC,SAAS,CAAC;IAC/D;;AAGQ,IAAA,MAAM,CAAC,MAAc,EAAA;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC;AAExD,QAAA,QAAQ,CAAC,SAAS,GAAG,MAAM;AAE3B,QAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC;QAEvC,OAAO,QAAQ,CAAC,SAAS;IAC7B;AAEQ,IAAA,gBAAgB,CAAC,IAAU,EAAA;;AAE/B,QAAA,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YAC7C,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,EAAE;gBACtC,MAAM,OAAO,GAAG,KAAgB;AAEhC,gBAAA,IAAI,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,EAAE;AACvD,oBAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;AAChC,oBAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;oBAE9B;gBACJ;YACJ;iBAAO,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,EAAE;gBAC1C;YACJ;;AAGA,YAAA,KAAK,CAAC,UAAU,EAAE,WAAW,CAAC,KAAK,CAAC;QACxC;IACJ;AAEQ,IAAA,kBAAkB,CAAC,OAAgB,EAAA;AACvC,QAAA,KAAK,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;AAC1D,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE;AACpC,YAAA,MAAM,OAAO,GACT,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC;AACjC,iBAAC,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAChE,iBAAC,SAAS,KAAK,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAE9D,IAAI,CAAC,OAAO,EAAE;AACV,gBAAA,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC;YACjC;QACJ;IACJ;kIAnES,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA3B,uBAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,cADd,MAAM,EAAA,CAAA,CAAA;;4FACnB,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBADvC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;AChKlC;AA+CM,MAAO,yBAA0B,SAAQ,eAAe,CAAA;AA9C9D,IAAA,WAAA,GAAA;;AA+CqB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,2BAA2B,CAAC;;QAG3D,IAAA,CAAA,GAAG,GAAG,KAAK,CAAC,QAAQ,0EAAsB,KAAK,EAAE,+BAA+B,EAAA,CAAG;;QAGzE,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,+EAAC;AAC7F,IAAA;kIARY,yBAAyB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,+BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,UAAA,EAAA,EAAA,UAAA,EAAA,EAAA,yBAAA,EAAA,OAAA,EAAA,oBAAA,EAAA,0BAAA,EAAA,EAAA,cAAA,EAAA,+BAAA,EAAA,EAAA,SAAA,EAfvB;AACP,YAAA,EAAE,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,yBAAyB,EAAE;AACvE,YAAA,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,yBAAyB;SACrE,EAAA,QAAA,EAAA,CAAA,2BAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA/BS;;;;;;;;;;;;;;;;;;;;;;;;;;KA0BT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,27KAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA3BS,OAAO,qHAAE,gBAAgB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,UAAA,EAAA,cAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FA4C1B,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBA9CrC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iCAAiC,WAClC,CAAC,OAAO,EAAE,gBAAgB,CAAC,EAAA,QAAA,EAC1B;;;;;;;;;;;;;;;;;;;;;;;;;;KA0BT,EAAA,SAAA,EAEU;AACP,wBAAA,EAAE,OAAO,EAAE,kBAAkB,EAAE,WAAW,2BAA2B,EAAE;AACvE,wBAAA,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,2BAA2B;AACrE,qBAAA,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACF,wBAAA,KAAK,EAAE,+BAA+B;AACtC,wBAAA,IAAI,EAAE,UAAU;AAChB,wBAAA,2BAA2B,EAAE,OAAO;;AAEpC,wBAAA,sBAAsB,EAAE;AAC3B,qBAAA,EAAA,QAAA,EACS,2BAA2B,EAAA,MAAA,EAAA,CAAA,27KAAA,CAAA,EAAA;;;AC9CzC;AAuCM,MAAO,0BAA2B,SAAQ,eAAe,CAAA;AAtC/D,IAAA,WAAA,GAAA;;;QAwCa,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,2EAAuB,KAAK,EAAE,gCAAgC,EAAA,CAAG;AAClG,IAAA;kIAHY,0BAA0B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,gCAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,UAAA,EAAA,EAAA,UAAA,EAAA,EAAA,yBAAA,EAAA,OAAA,EAAA,oBAAA,EAAA,0BAAA,EAAA,EAAA,cAAA,EAAA,gCAAA,EAAA,EAAA,SAAA,EAfxB;AACP,YAAA,EAAE,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,0BAA0B,EAAE;AACxE,YAAA,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,0BAA0B;SACtE,EAAA,QAAA,EAAA,CAAA,4BAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApBS;;;;;;;;;;;;;;;KAeT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,05JAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAlBG,OAAO,oHACP,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAkCT,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAtCtC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kCAAkC,EAAA,OAAA,EACnC;wBACL,OAAO;wBACP;qBACH,EAAA,QAAA,EACS;;;;;;;;;;;;;;;KAeT,EAAA,SAAA,EAEU;AACP,wBAAA,EAAE,OAAO,EAAE,kBAAkB,EAAE,WAAW,4BAA4B,EAAE;AACxE,wBAAA,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,4BAA4B;AACtE,qBAAA,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACF,wBAAA,KAAK,EAAE,gCAAgC;AACvC,wBAAA,IAAI,EAAE,UAAU;AAChB,wBAAA,2BAA2B,EAAE,OAAO;;AAEpC,wBAAA,sBAAsB,EAAE;AAC3B,qBAAA,EAAA,QAAA,EACS,4BAA4B,EAAA,MAAA,EAAA,CAAA,05JAAA,CAAA,EAAA;;;AC3B1C;AAkDM,MAAO,sBAAuB,SAAQ,eAAe,CAAA;AAjD3D,IAAA,WAAA,GAAA;;AAkDqB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,2BAA2B,CAAC;;AAG3D,QAAA,IAAA,CAAA,GAAG,GAAG,KAAK,CAAC,QAAQ,yEAAqB;;QAGzC,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,KAAK,8EAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;AAGtD,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAAS,EAAE,oFAAC;;AAGjC,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,KAAK,gFAAC;AAEjC;;;;;;AAMG;QACgB,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,+EAAC;AAW7F,IAAA;;AARG,IAAA,YAAY,CAAC,KAAiB,EAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;YACf,KAAK,CAAC,eAAe,EAAE;YACvB,KAAK,CAAC,cAAc,EAAE;YAEtB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACzC;IACJ;kIAhCS,sBAAsB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,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,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,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,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,UAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,sBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,yBAAA,EAAA,OAAA,EAAA,oBAAA,EAAA,gCAAA,EAAA,EAAA,cAAA,EAAA,4BAAA,EAAA,EAAA,SAAA,EAhBpB;AACP,YAAA,EAAE,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,sBAAsB,EAAE;AACpE,YAAA,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,sBAAsB;SAClE,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA7BS;;;;;;;;;;;;;;;;;;;;;;;;AAwBT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,gjRAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA5BG,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,WAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,gBAAgB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,UAAA,EAAA,cAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAChB,0BAA0B,EAAA,IAAA,EAAA,wBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FA4CrB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAjDlC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,8BAA8B,EAAA,OAAA,EAC/B;wBACL,aAAa;wBACb,gBAAgB;wBAChB;qBACH,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;KAwBT,EAAA,SAAA,EAEU;AACP,wBAAA,EAAE,OAAO,EAAE,kBAAkB,EAAE,WAAW,wBAAwB,EAAE;AACpE,wBAAA,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,wBAAwB;AAClE,qBAAA,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACF,wBAAA,KAAK,EAAE,4BAA4B;AACnC,wBAAA,IAAI,EAAE,UAAU;AAChB,wBAAA,2BAA2B,EAAE,OAAO;;AAEpC,wBAAA,sBAAsB,EAAE,gCAAgC;AACxD,wBAAA,SAAS,EAAE;AACd,qBAAA,EAAA,QAAA,EACS,mBAAmB,EAAA,MAAA,EAAA,CAAA,gjRAAA,CAAA,EAAA;;;ACwDjC;SACgB,cAAc,CAC1B,GAAsB,EACtB,MAAyC,EACzC,OAA4B,EAAA;AAE5B,IAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;AACX,QAAA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;IACrB;SAAO;QACH,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE;AAEnC,QAAA,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE;YACjB,MAAM,CAAC,OAAO,CAAC,CAAC,OAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;QACtC;aAAO;YACH,MAAM,CAAC,OAAO,CAAC,GAAG;AACd,gBAAA,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,CAAC,GAAG,CAAC;gBACd,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,OAAO,EAAE,GAAG,CAAC,OAAO;;;AAGpB,gBAAA,EAAE,EAAE;aACP;QACL;IACJ;AACJ;AAEA;;;;;;AAMG;AACG,SAAU,iBAAiB,CAC7B,IAAyB,EACzB,kBAA0B,EAC1B,UAAiC,cAAc,EAAA;IAE/C,MAAM,MAAM,GAAsC,EAAE;IACpD,MAAM,OAAO,GAAwB,EAAE;IACvC,MAAM,WAAW,GAAwB,EAAE;AAE3C,IAAA,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAEpD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AACpC,QAAA,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK;AAEzB,QAAA,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE;;;;YAIlB,OAAO,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;QACpE;AAAO,aAAA,IAAI,OAAO,CAAC,MAAM,GAAG,kBAAkB,EAAE;AAC5C,YAAA,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;QAC3B;aAAO;AACH,YAAA,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;QAC5B;AACJ,IAAA,CAAC,CAAC;AAEF,IAAA,WAAW,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;AAE5B,IAAA,OAAO,WAAW;AACtB;AAEO,MAAM,uCAAuC,GAAW;AACxD,MAAM,yCAAyC,GAAW;AAEjE;;;AAGG;AACH,MAAM,wBAAwB,GAAG,EAAE;AAEnC,MAAM,gBAAgB,GAAG,eAAe,CAAC,UAAU;AAEnD,MAAM,oBAAoB,GAAG,kCAAkC;AAE/D;MACa,gCAAgC,GAAG,IAAI,cAAc,CAC9D,kCAAkC;AAGtC;AACM,SAAU,mCAAmC,CAAC,OAAgB,EAAA;AAChE,IAAA,OAAO,MAAM,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC;AAC5E;AAEA;AACO,MAAM,iDAAiD,GAAG;AAC7D,IAAA,OAAO,EAAE,gCAAgC;IACzC,IAAI,EAAE,CAAC,OAAO,CAAC;AACf,IAAA,UAAU,EAAE;;AAGhB;AACA;AACO,MAAM,6CAA6C,GACtD,cAAc,CAAC;AAEnB;AACA;AACO,MAAM,qCAAqC,GAAG,IAAI,cAAc,CACnE,mCAAmC,EACnC,EAAE,OAAO,EAAE,MAAM,6CAA6C,EAAE;AAGpE;;;AAGG;AACI,MAAM,yCAAyC,GAAG,CACrD,aAAgE,KACrD,sCAAsC,CAAC,aAAa,EAAE,aAAa;AAElF;AACO,MAAM,sCAAsC,GAAG;AACtD;AACO,MAAM,8BAA8B,GAAG;AAE9C;;;;;;;;;;AAUG;SACa,sBAAsB,GAAA;IAClC,OAAO,CAAC,iDAAiD,CAAC;AAC9D;AAEA;;;;AAIG;AAgCG,MAAO,uBAAwB,SAAQ,QAAQ,CAAA;;AAoCjD,IAAA,IAAc,QAAQ,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,YAAY,EAAE;IAC9B;AAmBA,IAAA,WAAW,CAAC,OAAsB,EAAA;;AAE9B,QAAA,IAAI,OAAO,CAAC,cAAc,CAAC,EAAE;AACzB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE;YAEnC,IAAI,OAAO,KAAK,SAAS;AAAE,gBAAA,IAAI,CAAC,OAAO,GAAG,OAAO;QACrD;IACJ;AAEA,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;;AAjEF,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,2BAA2B,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CACnF,aAAa,EACb,qCAAqC,CACxC;;AAGQ,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC;;QAG5C,IAAA,CAAA,aAAa,GAAyB,EAAE;;QAGxC,IAAA,CAAA,MAAM,GAAG,kBAAkB;;AAMlB,QAAA,IAAA,CAAA,KAAK,GAAG,SAAS,CAAC,QAAQ,4EAAC;AAEpC;;;;;;;AAOG;AACM,QAAA,IAAA,CAAA,UAAU,GAAG,SAAS,CAAc,YAAY,iFAAC;AAEzC,QAAA,IAAA,CAAA,aAAa,GAAG,YAAY,CAAC,eAAe,oFAAC;AAC7C,QAAA,IAAA,CAAA,YAAY,GAAG,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC;AAUnD,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,SAAS,EAAmB;QAE5C,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAEjE;;;;AAIG;QACgB,IAAA,CAAA,gBAAgB,GAAG,8BAA8B;;QAG3D,IAAA,CAAA,YAAY,GAAG,KAAK,CAAoC,SAAS,oFAAI,KAAK,EAAE,SAAS,EAAA,CAAG;IAajG;IAEA,eAAe,GAAA;AACX,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;QAE1B,IAAI,CAAC,UAAU,GAAG,IAAI,eAAe,CAAkB,IAAI,CAAC,SAAS;AAChE,aAAA,uBAAuB;AACvB,aAAA,cAAc;AACd,aAAA,aAAa,EAAE;;QAGpB,IAAI,kBAAkB,GAAG,KAAK;;;;;QAM9B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;YAC5F,IAAI,CAAC,SAAS,CAAC,KAAK,CAChB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAChB,CAAC,IAAI,KAAK,IAAI,YAAY,sBAAsB,IAAI,IAAI,YAAY,0BAA0B,CACjG,CACJ;AACD,YAAA,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE;;;;;AAMhC,YAAA,IAAI,CAAC,KAAK,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;gBACxD,kBAAkB,GAAG,IAAI;AACzB,gBAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE;YACxC;AACJ,QAAA,CAAC,CAAC;QAEF,IAAI,KAAK,EAAE;YACP,KAAK,CAAC,KAAK,EAAE;QACjB;AAEA,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;;;AAG7E,YAAA,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI;gBAAE;YAEpC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,EAAE,CAAA,EAAG,IAAI,CAAC,MAAM,CAAA,EAAA,CAAI,CAAC;AACpG,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,aAAa,CAAC;aACd,IAAI,CAAC,oBAAoB,EAAE,EAAE,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AAChE,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;YACjB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;;;YAG5C,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;AACtC,QAAA,CAAC,CAAC;IACV;IAEA,kBAAkB,GAAA;;QAEd,IAAI,CAAC,YAAY,EAAE;IACvB;;IAGA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;QAExB,KAAK,CAAC,WAAW,EAAE;IACvB;;AAGA,IAAA,cAAc,CAAC,SAAiB,EAAE,WAAmB,EAAE,IAAwB,EAAA;QAC3E,KAAK,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,EAAE,EAAE,CAAC,CAAA,EAAG,IAAI,CAAC,MAAM,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACxF;;IAGA,aAAa,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAChB;AAEA;;;;AAIG;AACO,IAAA,cAAc,CAAC,KAAoB,EAAA;AACzC,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO;AAE7B,QAAA,IAAI,OAAO,KAAK,MAAM,EAAE;;YAEpB,IAAI,KAAK,CAAC,gBAAgB;gBAAE;;;YAI5B,KAAK,CAAC,cAAc,EAAE;YACtB,KAAK,CAAC,eAAe,EAAE;YACvB,IAAI,CAAC,aAAa,EAAE;YAEpB;QACJ;;;AAIA,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAClB;QACJ;;AAGA,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;AAC5B,YAAA,IAAI,OAAO,KAAK,UAAU,EAAE;gBACxB,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,kBAAkB,EAAE;YACnE;YAEA;QACJ;;;;AAKA,QAAA,IAAI,OAAO,KAAK,GAAG,EAAE;YACjB,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YAEpB;QACJ;;AAGA,QAAA,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,UAAU,CAAC;AAE1C,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU;AAE7C,QAAA,IAAI,CAAC,OAAO,KAAK,UAAU,IAAI,OAAO,KAAK,WAAW,KAAK,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE;YACxG,KAAK,CAAC,cAAc,EAAE;YAEtB;QACJ;QAEA,IAAI,CAAC,OAAO,KAAK,KAAK,IAAI,OAAO,KAAK,KAAK,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE;YACvF,KAAK,CAAC,cAAc,EAAE;;YAGtB,IAAI,UAAU,YAAY,sBAAsB,IAAI,UAAU,CAAC,MAAM,EAAE,EAAE;gBACrE,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;YACrD;iBAAO;AACH,gBAAA,UAAU,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE;YACvC;YAEA;QACJ;;AAGA,QAAA,IAAI,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,eAAe,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE;YAC/E,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AACjC,YAAA,IAAI,CAAC,KAAK,EAAG,CAAC,KAAK,EAAE;YAErB;QACJ;AAEA,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC;IACpC;AAEA;;;AAGG;IACK,qBAAqB,CAAC,OAAe,EAAE,UAAkC,EAAA;AAC7E,QAAA,IAAI,EAAE,UAAU,YAAY,sBAAsB,CAAC,EAAE;AACjD,YAAA,OAAO,KAAK;QAChB;QAEA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,KAAK,KAAK;QACrC,MAAM,SAAS,GAAG,GAAG,GAAG,UAAU,GAAG,WAAW;QAChD,MAAM,WAAW,GAAG,GAAG,GAAG,WAAW,GAAG,UAAU;AAElD,QAAA,IAAI,UAAU,CAAC,MAAM,EAAE,EAAE;YACrB,IAAI,OAAO,KAAK,SAAS,IAAI,UAAU,CAAC,SAAS,EAAE,EAAE;AACjD,gBAAA,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AAE/B,gBAAA,OAAO,IAAI;YACf;YAEA,IAAI,OAAO,KAAK,WAAW,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE;AACpD,gBAAA,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AAE9B,gBAAA,OAAO,IAAI;YACf;AAEA,YAAA,OAAO,KAAK;QAChB;;AAGA,QAAA,IAAI,OAAO,KAAK,WAAW,IAAI,UAAU,CAAC,cAAc,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE;YAClG,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AAEtC,YAAA,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE;AACvE,gBAAA,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;gBAE9B,IAAI,SAAS,YAAY,sBAAsB,IAAI,SAAS,CAAC,MAAM,EAAE,EAAE;AACnE,oBAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC;AAEpC,oBAAA,OAAO,IAAI;gBACf;YACJ;QACJ;AAEA,QAAA,OAAO,KAAK;IAChB;;AAGQ,IAAA,cAAc,CAAC,KAAoB,EAAA;AACvC,QAAA,OAAO,CAAC,CAAE,KAAK,CAAC,MAAsB,EAAE,UAAU,CAAC,YAAY,CAAC,UAAU,CAAC;IAC/E;AAEA;;;;;;;AAOG;AACO,IAAA,cAAc,CAAC,KAAiB,EAAA;QACtC,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE;QAEtB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,cAAc,EAAE,KAAK,KAAK,CAAC,MAAM,CAAC;AAElG,QAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,KAAK,CAAC;IAC3C;AAEA;;;;AAIG;AACO,IAAA,eAAe,CAAC,KAAiB,EAAA;AACvC,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,aAAmC;;;QAItD,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,4CAA4C,CAAC,EAAE;AACtE,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;;;AAGZ,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;QACxB;IACJ;AAEA;;;;AAIG;IACH,eAAe,CAAC,IAAoC,EAAE,GAAsB,EAAA;AACxE,QAAA,IAAI,CAAC,IAAI;YAAE;QAEX,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;QACnC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;IACrC;AAEQ,IAAA,WAAW,CAAC,KAAoB,EAAA;AACpC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa;AAExC,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,KAAK;AAExB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,EAAE;AAClC,QAAA,MAAM,OAAO,GAAG,CAAC,GAAsB,KACnC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;;;AAI5F,QAAA,OAAO;aACF,GAAG,CAAC,CAAC,IAAI,MAAM,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;AAC5D,aAAA,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAC/C;kIAvVS,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,wBAAA,EAAA,SAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAoBL,QAAQ,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,SAAA,EAYW,eAAe,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAAA,IAAA,CAAA,2BAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpUjE,o4UAgMA,EAAA,MAAA,EAAA,CAAA,knGAAA,EAAA,+PAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDwEQ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uCAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,IAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,WAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,4BAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,eAAA,EAAA,YAAA,EAAA,eAAA,EAAA,eAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,wBAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,6BAAA,EAAA,gCAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,uBAAA,EAAA,sCAAA,EAAA,gBAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,YAAY,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,uBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,yBAAyB,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,+BAAA,CAAA,EAAA,QAAA,EAAA,CAAA,2BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACzB,0BAA0B,mKAC1B,sBAAsB,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,QAAA,EAAA,eAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAiBjB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBA/BnC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EAAA,OAAA,EACnB;wBACL,WAAW;wBACX,mBAAmB;wBACnB,cAAc;wBACd,aAAa;wBACb,gBAAgB;wBAChB,cAAc;wBACd,iBAAiB;wBACjB,YAAY;wBACZ,eAAe;wBACf,yBAAyB;wBACzB,0BAA0B;wBAC1B;AACH,qBAAA,EAAA,eAAA,EAGgB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACF,wBAAA,KAAK,EAAE,kBAAkB;AACzB,wBAAA,WAAW,EAAE,wBAAwB;AACrC,wBAAA,WAAW,EAAE,wBAAwB;AACrC,wBAAA,YAAY,EAAE;AACjB,qBAAA,EAAA,cAAA,EAGe,CAAC,2BAA2B,CAAC,EAAA,mBAAA,EACxB,KAAK,EAAA,QAAA,EAAA,o4UAAA,EAAA,MAAA,EAAA,CAAA,knGAAA,EAAA,+PAAA,CAAA,EAAA;iHAsBC,QAAQ,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAUU,YAAY,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAEX,eAAe,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;AAqU3D,MAAO,qBACT,SAAQ,eAAwC,CAAA;AAZpD,IAAA,WAAA,GAAA;;AAeI;;;;;AAKG;QACO,IAAA,CAAA,cAAc,GACpB,MAAM,CAAC,gCAAgC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC5D,YAAA,mCAAmC,CAAC,IAAI,CAAC,OAAO,CAAC;;;;QAKrD,IAAA,CAAA,KAAK,GAAY,KAAK;QAGd,IAAA,CAAA,WAAW,GAAY,KAAK;AAC5B,QAAA,IAAA,CAAA,IAAI,GAAuB,UAAU,CAAC,MAAM;;AAqC3C,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAgC,SAAS,kFAAC;;QAGtE,IAAA,CAAA,SAAS,GAA4B,gBAAgB;;QAGrD,IAAA,CAAA,aAAa,GAAW,oBAAoB;;QAG5C,IAAA,CAAA,MAAM,GAAkB,uBAAuB;;AAwBtC,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAiC,SAAS,mFAAC;AAExE;;;;;;;;AAQG;AACM,QAAA,IAAA,CAAA,kBAAkB,GAAG,QAAQ,CAAiC,MAAK;AACxE,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE;AAEjC,YAAA,OAAO,KAAK,KAAK,IAAI,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC;AACnE,QAAA,CAAC,yFAAC;;AAqBO,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAA2B;;AAG7D,QAAA,IAAA,CAAA,qBAAqB,GAAG,oBAAoB,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;;AAGnG,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAW;;AAG3C,QAAA,IAAA,CAAA,mBAAmB,GAAG,oBAAoB,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;AAEtG;;;;;;;AAOG;QACH,IAAA,CAAA,OAAO,GAAW,CAAA,EAAG,aAAa,CAAC,KAAK,KAAK,aAAa,CAAC,OAAO,CAAA,CAAE;;QAgB1D,IAAA,CAAA,cAAc,GAAG,mBAAmB;AAW7B,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAuB,EAAE,0FAAC;AACtD,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAwB,cAAc,oFAAC;AAE9E;;;;;AAKG;AACc,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AAC7C,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE;AAEpC,YAAA,OAAO,IAAI,GAAG,CACV,IAAI,CAAC,mBAAmB,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK;AACrC,gBAAA,IAAI,CAAC,EAAE;AACP,gBAAA;AACI,oBAAA,GAAG,IAAI;oBACP,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,yCAAyC,EAAE,OAAO;AAC3D;AACjC,aAAA,CAAC,CACL;AACL,QAAA,CAAC,sFAAC;AAEe,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,EAAE,CAAC,kFAAC;AAElE,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAC1C,IAAI,CAAC,mBAAmB,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,wFAC9E;AAEgB,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC,MAAM,GAAG,CAAC,wFAAC;QAEzE,IAAA,CAAA,mBAAmB,GAAG,QAAQ,CAAC,MAC5C,IAAI,CAAC,iBAAiB;AAClB;iBACG,IAAI,CAAC,kBAAkB,EAAE,EAAE,IAAI,IAAI,EAAE;AACxC,eAAG,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC,0FAC5C;;QAGQ,IAAA,CAAA,cAAc,GAAG,KAAK,CAAsC,SAAS,sFAC1E,KAAK,EAAE,yBAAyB,EAAA,CAClC;;QAGO,IAAA,CAAA,kBAAkB,GAAG,KAAK,CAAqB,SAAS,0FAAI,KAAK,EAAE,eAAe,EAAA,CAAG;;AAGrF,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAgE,SAAS,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,aAAA,EAAA,8BAAA,EAAA,CAAA,EACjG,KAAK,EAAE,QAAQ;YACf,SAAS,EAAE,0BAA0B,EAAA,CACvC;;QAGO,IAAA,CAAA,UAAU,GAAG,KAAK,CAAmC,SAAS,kFAAI,KAAK,EAAE,OAAO,EAAA,CAAG;;QAGnF,IAAA,CAAA,YAAY,GAAG,KAAK,CAAoC,SAAS,oFAAI,KAAK,EAAE,SAAS,EAAA,CAAG;;AAGxF,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAA2D,SAAS,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,eAAA,EAAA,8BAAA,EAAA,CAAA,EAC9F,KAAK,EAAE,UAAU;YACjB,SAAS,EAAE,gBAAgB,EAAA,CAC7B;QAoHM,IAAA,CAAA,mBAAmB,GAAG,MAAK;YAC/B,IAAI,CAAC,IAAI,CAAC,UAAU;gBAAE;YAEtB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,qBAAqB,EAAE;AAClE,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,aAAa,CAAC,qBAAqB,EAAE;YAE3F,IAAI,EACA,IAAI,CAAC,MAAM,IAAI,aAAa,CAAC,GAAG;AAChC,gBAAA,IAAI,CAAC,KAAK,IAAI,aAAa,CAAC,IAAI;AAChC,gBAAA,IAAI,CAAC,GAAG,IAAI,aAAa,CAAC,MAAM;gBAChC,IAAI,CAAC,IAAI,IAAI,aAAa,CAAC,KAAK,CACnC,EAAE;gBACC,IAAI,CAAC,IAAI,EAAE;YACf;AACJ,QAAA,CAAC;AACJ,IAAA;;AApVG,IAAA,IAAI,UAAU,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,SAAS,GAAG,uCAAuC;IACnE;AAEA;;;;AAIG;AACH,IAAA,IAAI,SAAS,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,iBAAiB,EAAE;IACnC;AAEA;;;;AAIG;AACH,IAAA,IAAI,SAAS,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,iBAAiB,EAAE;IACnC;AAEA;;;;AAIG;AACH,IAAA,IAAI,WAAW,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,mBAAmB,EAAE;IACrC;;AAeA,IAAA,IAAI,KAAK,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE;IAC7B;IAEA,IAAI,KAAK,CAAC,KAA2B,EAAA;AACjC,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;IAC9B;AAEA;;;AAGG;AACH,IAAA,IAAI,OAAO,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,aAAa,EAAE;IAC/B;IAEA,IAAI,OAAO,CAAC,EAAyB,EAAA;AACjC,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;IAC9B;;AAqBA,IAAA,IAAI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,SAAS;IACzB;IAEA,IAAI,QAAQ,CAAC,KAAK,EAAA;AACd,QAAA,IAAI,CAAC,SAAS,GAAG,qBAAqB,CAAC,KAAK,CAAC;AAE7C,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,IAAI,EAAE;QACf;IACJ;;AAGA,IAAA,IAAI,eAAe,GAAA;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;IACrD;AAwBA;;;;AAIG;AACH,IAAA,IAAI,aAAa,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,mBAAmB,EAAE;IACrC;IAEA,IAAI,aAAa,CAAC,KAA2B,EAAA;QACzC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;IAC7C;;AAMA,IAAA,IAAc,aAAa,GAAA;QACvB,OAAO;AACH,YAAA,UAAU,EAAE,yBAAyB;YACrC,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,aAAa,EAAE,IAAI,CAAC;SACvB;IACL;AAkEA,IAAA,WAAW,CAAC,OAAsB,EAAA;;;AAG9B,QAAA,IAAI,OAAO,CAAC,gBAAgB,CAAC,EAAE;YAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,EAAE,IAAI,gBAAgB;QAC9D;AAEA,QAAA,IAAI,OAAO,CAAC,oBAAoB,CAAC,EAAE;YAC/B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,kBAAkB,EAAE,IAAI,oBAAoB;QAC1E;AAEA,QAAA,IAAI,OAAO,CAAC,aAAa,CAAC,EAAE;YACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,uBAAuB;QAC/D;AAEA,QAAA,IAAI,OAAO,CAAC,YAAY,CAAC,EAAE;YACvB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE;QACxC;AAEA,QAAA,IAAI,OAAO,CAAC,cAAc,CAAC,EAAE;YACzB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,cAAc;QACxD;AAEA,QAAA,IAAI,OAAO,CAAC,eAAe,CAAC,EAAE;AAC1B,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE;YAErC,IAAI,QAAQ,KAAK,SAAS;AAAE,gBAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;QACxD;IACJ;IAEA,QAAQ,GAAA;QACJ,KAAK,CAAC,QAAQ,EAAE;AAEhB,QAAA,IAAI,CAAC;AACD,cAAE,eAAe;AAChB,aAAA,IAAI,CAAC,SAAS,CAAC,wBAAwB,CAAC,EAAE,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AAC7E,aAAA,SAAS,CAAC,IAAI,CAAC,mBAAmB,CAAC;IAC5C;IAEA,kBAAkB,GAAA;;;;AAId,QAAA,IAAI,CAAC;AACA,aAAA,QAAQ;AACR,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,CAAC,UAAgC,KAAI;AAC5C,YAAA,IAAI,CAAC,UAAU,EAAE,aAAa,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,uBAAuB,CAAC;gBAAE;YAE5F,MAAM,WAAW,GAAG,UAAU,CAAC,aAAa,EAAE,CAAC,aAAa,CAAC,qBAAqB,EAAE;YACpF,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,qBAAqB,EAAE;AAExE,YAAA,IAAI,UAAU,CAAC,MAAM,GAAG,WAAW,CAAC,GAAG,IAAI,UAAU,CAAC,GAAG,GAAG,WAAW,CAAC,MAAM,EAAE;gBAC5E,IAAI,CAAC,IAAI,EAAE;YACf;AACJ,QAAA,CAAC,CAAC;;;;AAKN,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAgB,KAAI;YACxF,IAAI,CAAC,OAAO,EAAE;gBACV,IAAI,CAAC,KAAK,EAAE;YAChB;AACJ,QAAA,CAAC,CAAC;IACN;;IAGA,UAAU,GAAA;QACN,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE;QAEpB,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;QACpC,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;QAChC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;AAClC,QAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE;AAE7B,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACb,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;QAC7B;IACJ;;IAGA,6BAA6B,GAAA;AACzB,QAAA,OAAO,uBAAuB;IAClC;;AAGA,IAAA,cAAc,CAAC,YAAA,GAAuB,IAAI,CAAC,SAAS,EAAA;QAChD,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE;AAEpB,QAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,mBAAmB,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC;IAChG;;IAGA,cAAc,GAAA;AACV,QAAA,OAAO,KAAK,CACR,IAAI,CAAC,UAAW,CAAC,oBAAoB,EAAE,EACvC,IAAI,CAAC,UAAW,CAAC,aAAa,EAAE;;;;;QAKhC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CACjG;IACL;;AAGQ,IAAA,aAAa,CAAC,UAAgC,EAAA;QAClD,QACI,UAAU,YAAY,aAAa;AACnC,YAAA,CAAC,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,4CAA4C,CAAC;IAExG;kIA7VS,qBAAqB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,oiDATnB,CAAC,uBAAuB,CAAC,qBAAqB,CAAC,CAAC,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FASlD,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAXjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,SAAS,EAAE,CAAC,uBAAuB,CAAA,qBAAA,CAAuB,CAAC;AAC3D,oBAAA,IAAI,EAAE;AACF,wBAAA,+BAA+B,EAAE,QAAQ;AACzC,wBAAA,oBAAoB,EAAE,2BAA2B;AACjD,wBAAA,WAAW,EAAE,wBAAwB;AACrC,wBAAA,YAAY,EAAE;AACjB,qBAAA;AACD,oBAAA,QAAQ,EAAE;AACb,iBAAA;;;MErnBY,oBAAoB,CAAA;kIAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAApB,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,oBAAoB,YAXzB,uBAAuB;YACvB,qBAAqB;YACrB,sBAAsB;YACtB,yBAAyB;AACzB,YAAA,0BAA0B,aAI1B,qBAAqB,CAAA,EAAA,CAAA,CAAA;AAGhB,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,oBAAoB,EAAA,SAAA,EALlB,sBAAsB,EAAE,EAAA,OAAA,EAAA,CAN/B,uBAAuB;YAEvB,sBAAsB;YACtB,yBAAyB;YACzB,0BAA0B,CAAA,EAAA,CAAA,CAAA;;4FAOrB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAbhC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE;wBACL,uBAAuB;wBACvB,qBAAqB;wBACrB,sBAAsB;wBACtB,yBAAyB;wBACzB;AACH,qBAAA;oBACD,SAAS,EAAE,sBAAsB,EAAE;AACnC,oBAAA,OAAO,EAAE;wBACL;AACH;AACJ,iBAAA;;;AClBD;;AAEG;;;;"}
1
+ {"version":3,"file":"koobiq-components-app-switcher.mjs","sources":["../../../packages/components/app-switcher/app-switcher-icon-sanitizer.ts","../../../packages/components/app-switcher/app-switcher-dropdown-app.ts","../../../packages/components/app-switcher/app-switcher-dropdown-site.ts","../../../packages/components/app-switcher/app-switcher-list-item.ts","../../../packages/components/app-switcher/app-switcher.ts","../../../packages/components/app-switcher/app-switcher.html","../../../packages/components/app-switcher/app-switcher.module.ts","../../../packages/components/app-switcher/koobiq-components-app-switcher.ts"],"sourcesContent":["import { DOCUMENT } from '@angular/common';\nimport { inject, Injectable } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n/**\n * SVG elements allowed inside `KbqAppSwitcherApp.icon`/`KbqAppSwitcherSite.icon`.\n *\n * Everything else is dropped, which is what neutralises the dangerous markup: `script` (inline JS),\n * `foreignObject` (re-opens an HTML parsing context inside the SVG), `style` (CSS-based exfiltration and\n * the classic mXSS vector), `a` (navigation) and every HTML element such as `img` or `iframe`.\n * Keys are lower-cased because SVG tag names are case-sensitive (`clipPath`, `linearGradient`, …).\n */\nconst ALLOWED_ELEMENTS: ReadonlySet<string> = new Set([\n 'circle',\n 'clippath',\n 'defs',\n 'desc',\n 'ellipse',\n 'feblend',\n 'fecolormatrix',\n 'fecomposite',\n 'fedropshadow',\n 'feflood',\n 'fegaussianblur',\n 'femerge',\n 'femergenode',\n 'feoffset',\n 'filter',\n 'g',\n 'lineargradient',\n 'line',\n 'marker',\n 'mask',\n 'path',\n 'pattern',\n 'polygon',\n 'polyline',\n 'radialgradient',\n 'rect',\n 'stop',\n 'svg',\n 'symbol',\n 'text',\n 'textpath',\n 'title',\n 'tspan',\n 'use'\n]);\n\n/**\n * Attributes allowed on the elements above — geometry, presentation and a few a11y hooks.\n * Anything absent from this list is removed, which covers every `on*` event handler.\n *\n * Note the asymmetry with `UNSAFE_STYLE_VALUE` below: `url(...)` is rejected inside `style`, but the paint\n * attributes that legitimately take it (`fill`, `stroke`, `filter`, `mask`, `clip-path`) are kept as-is,\n * because `fill=\"url(#gradient)\"` is how an inline icon references its own gradient. That is safe in practice\n * — browsers resolve those references only within the same document, so an external URL there neither loads\n * nor renders anything.\n */\nconst ALLOWED_ATTRIBUTES: ReadonlySet<string> = new Set([\n 'aria-hidden',\n 'aria-label',\n 'baseline-shift',\n 'class',\n 'clip-path',\n 'clip-rule',\n 'color',\n 'cx',\n 'cy',\n 'd',\n 'display',\n 'dominant-baseline',\n 'dx',\n 'dy',\n 'fill',\n 'fill-opacity',\n 'fill-rule',\n 'filter',\n 'filterunits',\n 'flood-color',\n 'flood-opacity',\n 'focusable',\n 'font-family',\n 'font-size',\n 'font-style',\n 'font-weight',\n 'fx',\n 'fy',\n 'gradienttransform',\n 'gradientunits',\n 'height',\n 'href',\n 'id',\n 'in',\n 'in2',\n 'letter-spacing',\n 'marker-end',\n 'marker-mid',\n 'marker-start',\n 'markerheight',\n 'markerwidth',\n 'mask',\n 'maskunits',\n 'mode',\n 'offset',\n 'opacity',\n 'orient',\n 'overflow',\n 'pathlength',\n 'patterncontentunits',\n 'patternunits',\n 'points',\n 'preserveaspectratio',\n 'primitiveunits',\n 'r',\n 'refx',\n 'refy',\n 'result',\n 'role',\n 'rx',\n 'ry',\n 'shape-rendering',\n 'spreadmethod',\n 'stddeviation',\n 'stop-color',\n 'stop-opacity',\n 'stroke',\n 'stroke-dasharray',\n 'stroke-dashoffset',\n 'stroke-linecap',\n 'stroke-linejoin',\n 'stroke-miterlimit',\n 'stroke-opacity',\n 'stroke-width',\n 'style',\n 'text-anchor',\n 'transform',\n 'type',\n 'values',\n 'vector-effect',\n 'viewbox',\n 'visibility',\n 'width',\n 'x',\n 'x1',\n 'x2',\n 'xlink:href',\n 'xmlns',\n 'xmlns:xlink',\n 'y',\n 'y1',\n 'y2'\n]);\n\n/** Attributes carrying a URL: only same-document fragment references (`#gradient-1`) survive. */\nconst URL_ATTRIBUTES: ReadonlySet<string> = new Set(['href', 'xlink:href']);\n\n/** Inline styles that can load or execute something are dropped rather than parsed. */\nconst UNSAFE_STYLE_VALUE = /url\\s*\\(|expression\\s*\\(|javascript\\s*:/i;\n\n/**\n * Turns the caller-supplied inline SVG of an app-switcher icon into markup that is safe to hand to\n * `[innerHtml]`.\n *\n * Angular's own HTML sanitizer cannot be used here: its allow-list contains no SVG elements at all, so it\n * would strip every icon. Instead the markup is parsed inert (inside a `<template>`, where no request is\n * issued and no script runs), filtered against a strict SVG allow-list, and only then marked as trusted.\n */\n@Injectable({ providedIn: 'root' })\nexport class KbqAppSwitcherIconSanitizer {\n private readonly document = inject(DOCUMENT);\n private readonly domSanitizer = inject(DomSanitizer);\n\n /**\n * Sanitizes inline SVG markup and wraps it as `SafeHtml`. Returns `null` for empty input, so callers can\n * use the result directly as the `@if` condition of the icon element.\n */\n sanitize(icon: string | null | undefined): SafeHtml | null {\n if (!icon) return null;\n\n const sanitized = this.filter(icon);\n\n if (!sanitized) return null;\n\n // Second pass: `[innerHtml]` re-parses our serialized output, and mutation-XSS works by making that\n // second parse differ from the first. Benign markup is already normalised by pass one, so a\n // difference here means the input was crafted to change shape on re-parse - drop it entirely.\n if (this.filter(sanitized) !== sanitized) return null;\n\n return this.domSanitizer.bypassSecurityTrustHtml(sanitized);\n }\n\n /** Parses the markup inertly, strips everything outside the allow-lists and serializes it back. */\n private filter(markup: string): string {\n const template = this.document.createElement('template');\n\n template.innerHTML = markup;\n\n this.sanitizeChildren(template.content);\n\n return template.innerHTML;\n }\n\n private sanitizeChildren(node: Node): void {\n // Snapshot the list: removing a node while iterating a live NodeList skips its sibling.\n for (const child of Array.from(node.childNodes)) {\n if (child.nodeType === Node.ELEMENT_NODE) {\n const element = child as Element;\n\n if (ALLOWED_ELEMENTS.has(element.localName.toLowerCase())) {\n this.sanitizeAttributes(element);\n this.sanitizeChildren(element);\n\n continue;\n }\n } else if (child.nodeType === Node.TEXT_NODE) {\n continue;\n }\n\n // Disallowed elements, comments and CDATA sections (a known mXSS carrier) all go.\n child.parentNode?.removeChild(child);\n }\n }\n\n private sanitizeAttributes(element: Element): void {\n for (const { name, value } of Array.from(element.attributes)) {\n const attribute = name.toLowerCase();\n const allowed =\n ALLOWED_ATTRIBUTES.has(attribute) &&\n (!URL_ATTRIBUTES.has(attribute) || value.trim().startsWith('#')) &&\n (attribute !== 'style' || !UNSAFE_STYLE_VALUE.test(value));\n\n if (!allowed) {\n element.removeAttribute(name);\n }\n }\n }\n}\n","import { NgOptimizedImage } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input, ViewEncapsulation } from '@angular/core';\nimport { KBQ_TITLE_TEXT_REF } from '@koobiq/components/core';\nimport { KbqDropdownItem } from '@koobiq/components/dropdown';\nimport { KbqIcon } from '@koobiq/components/icon';\nimport { KbqAppSwitcherApp } from './app-switcher';\nimport { KbqAppSwitcherIconSanitizer } from './app-switcher-icon-sanitizer';\n\n/** @docs-private */\n@Component({\n selector: '[kbq-app-switcher-dropdown-app]',\n imports: [KbqIcon, NgOptimizedImage],\n template: `\n @if (safeIcon(); as icon) {\n <span class=\"kbq-app-switcher-dropdown-app__icon\" aria-hidden=\"true\" [innerHtml]=\"icon\"></span>\n } @else if (app().iconSrc; as iconSrc) {\n <span class=\"kbq-app-switcher-dropdown-app__icon\" aria-hidden=\"true\">\n <img alt=\"\" width=\"24\" height=\"24\" [ngSrc]=\"iconSrc\" />\n </span>\n }\n\n <div class=\"kbq-app-switcher-dropdown-app__container\">\n <div class=\"kbq-app-switcher-dropdown-app__name\">\n <span>{{ app().name }}</span>\n\n @if (isNested) {\n <i\n kbq-icon=\"kbq-chevron-right-s_16\"\n aria-hidden=\"true\"\n class=\"kbq-app-switcher-dropdown-item-trigger__icon\"\n [color]=\"componentColors.ContrastFade\"\n ></i>\n }\n </div>\n @if (app().caption; as caption) {\n <div class=\"kbq-app-switcher-dropdown-app__caption\">{{ caption }}</div>\n }\n </div>\n `,\n styleUrls: ['app-switcher-dropdown-app.scss'],\n providers: [\n { provide: KBQ_TITLE_TEXT_REF, useExisting: KbqAppSwitcherDropdownApp },\n { provide: KbqDropdownItem, useExisting: KbqAppSwitcherDropdownApp }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-app-switcher-dropdown-app',\n role: 'menuitem',\n '[class.kbq-dropdown-item]': 'false',\n // `tabindex` comes from `KbqDropdownItem`: a second binding here would read its signal again after the others.\n '[attr.aria-haspopup]': \"isNested ? 'menu' : null\"\n },\n exportAs: 'kbqAppSwitcherDropdownApp'\n})\nexport class KbqAppSwitcherDropdownApp extends KbqDropdownItem {\n private readonly iconSanitizer = inject(KbqAppSwitcherIconSanitizer);\n\n /** Application (or synthetic app group) rendered by this flyout row. */\n readonly app = input.required<KbqAppSwitcherApp>({ alias: 'kbq-app-switcher-dropdown-app' });\n\n /** Inline SVG of the app icon, sanitized against an SVG allow-list. See `KbqAppSwitcherListItem.safeIcon`. */\n protected readonly safeIcon = computed(() => this.iconSanitizer.sanitize(this.app().icon));\n}\n","import { ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\nimport { KbqBadgeModule } from '@koobiq/components/badge';\nimport { KBQ_TITLE_TEXT_REF } from '@koobiq/components/core';\nimport { KbqDropdownItem } from '@koobiq/components/dropdown';\nimport { KbqIcon } from '@koobiq/components/icon';\nimport { KbqAppSwitcherSite } from './app-switcher';\n\n/** @docs-private */\n@Component({\n selector: '[kbq-app-switcher-dropdown-site]',\n imports: [\n KbqIcon,\n KbqBadgeModule\n ],\n template: `\n <span class=\"kbq-app-switcher-dropdown-site__name\">{{ site().name }}</span>\n\n @if (site().status; as status) {\n <kbq-badge class=\"kbq-app-switcher-dropdown-site__badge\" [compact]=\"true\">{{ status }}</kbq-badge>\n }\n\n @if (isNested) {\n <i\n kbq-icon=\"kbq-chevron-right-s_16\"\n aria-hidden=\"true\"\n class=\"kbq-app-switcher-dropdown-item-trigger__icon\"\n [color]=\"componentColors.ContrastFade\"\n ></i>\n }\n `,\n styleUrls: ['app-switcher-dropdown-site.scss'],\n providers: [\n { provide: KBQ_TITLE_TEXT_REF, useExisting: KbqAppSwitcherDropdownSite },\n { provide: KbqDropdownItem, useExisting: KbqAppSwitcherDropdownSite }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-app-switcher-dropdown-site',\n role: 'menuitem',\n '[class.kbq-dropdown-item]': 'false',\n // `tabindex` comes from `KbqDropdownItem`: a second binding here would read its signal again after the others.\n '[attr.aria-haspopup]': \"isNested ? 'menu' : null\"\n },\n exportAs: 'kbqAppSwitcherDropdownSite'\n})\nexport class KbqAppSwitcherDropdownSite extends KbqDropdownItem {\n /** Site rendered by this row. */\n readonly site = input.required<KbqAppSwitcherSite>({ alias: 'kbq-app-switcher-dropdown-site' });\n}\n","import { NgOptimizedImage } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n model,\n ViewEncapsulation\n} from '@angular/core';\nimport { KBQ_TITLE_TEXT_REF, KbqHighlightBackgroundPipe } from '@koobiq/components/core';\nimport { KbqDropdownItem } from '@koobiq/components/dropdown';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqAppSwitcherApp } from './app-switcher';\nimport { KbqAppSwitcherIconSanitizer } from './app-switcher-icon-sanitizer';\n\n/** @docs-private */\n@Component({\n selector: '[kbq-app-switcher-list-item]',\n imports: [\n KbqIconModule,\n NgOptimizedImage,\n KbqHighlightBackgroundPipe\n ],\n template: `\n @if (safeIcon(); as icon) {\n <span class=\"kbq-app-switcher-list-item__icon\" aria-hidden=\"true\" [innerHtml]=\"icon\"></span>\n } @else if (app().iconSrc; as iconSrc) {\n <span class=\"kbq-app-switcher-list-item__icon\" aria-hidden=\"true\">\n <img alt=\"\" width=\"24\" height=\"24\" [ngSrc]=\"iconSrc\" />\n </span>\n }\n\n <div class=\"kbq-app-switcher-list-item__container\">\n <div\n class=\"kbq-app-switcher-list-item__name\"\n [innerHTML]=\"app().name | kbqHighlightBackground: highlightText()\"\n ></div>\n @if (app().caption; as caption) {\n <div class=\"kbq-app-switcher-list-item__caption\">{{ caption }}</div>\n }\n </div>\n\n @if (toggle()) {\n <div class=\"kbq-app-switcher-list-item__toggle\" [class.kbq-expanded]=\"!collapsed()\">\n <i kbq-icon=\"kbq-chevron-down-s_16\" aria-hidden=\"true\" [color]=\"'contrast-fade'\"></i>\n </div>\n }\n `,\n styleUrls: ['app-switcher-list-item.scss'],\n providers: [\n { provide: KBQ_TITLE_TEXT_REF, useExisting: KbqAppSwitcherListItem },\n { provide: KbqDropdownItem, useExisting: KbqAppSwitcherListItem }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-app-switcher-list-item',\n role: 'menuitem',\n '[class.kbq-dropdown-item]': 'false',\n // `tabindex` comes from `KbqDropdownItem`: a second binding here would read its signal again after the others.\n '[attr.aria-expanded]': 'toggle() ? !collapsed() : null',\n '(click)': 'clickHandler($event)'\n },\n exportAs: 'kbqAppSwitcherApp'\n})\nexport class KbqAppSwitcherListItem extends KbqDropdownItem {\n private readonly iconSanitizer = inject(KbqAppSwitcherIconSanitizer);\n\n /** Application (or synthetic app group) rendered by this row. */\n readonly app = input.required<KbqAppSwitcherApp>();\n\n /** Whether the row is a group header carrying the expand/collapse toggle. */\n readonly toggle = input(false, { transform: booleanAttribute });\n\n /** Search query to highlight within the app name. */\n readonly highlightText = input<string>('');\n\n /** Whether the group's aliases are hidden. */\n readonly collapsed = model(false);\n\n /**\n * Inline SVG of the app icon, sanitized against an SVG allow-list.\n *\n * Computed from the `app` input instead of being called from the template, so the `SafeHtml` is produced\n * once per app rather than on every change-detection pass — a fresh object would make `[innerHtml]`\n * re-parse the SVG each time.\n */\n protected readonly safeIcon = computed(() => this.iconSanitizer.sanitize(this.app().icon));\n\n /** Toggles the group when this row is a group header; plain rows keep their link behaviour. */\n clickHandler(event: MouseEvent) {\n if (this.toggle()) {\n event.stopPropagation();\n event.preventDefault();\n\n this.collapsed.set(!this.collapsed());\n }\n }\n}\n","import { Directionality } from '@angular/cdk/bidi';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { CdkScrollable, Overlay, OverlayConfig, ScrollStrategy } from '@angular/cdk/overlay';\n\nimport {\n AfterContentInit,\n AfterViewChecked,\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n Directive,\n EventEmitter,\n InjectionToken,\n OnChanges,\n OnDestroy,\n OnInit,\n Provider,\n QueryList,\n SimpleChanges,\n TemplateRef,\n Type,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n inject,\n input,\n model,\n signal,\n viewChild,\n viewChildren\n} from '@angular/core';\nimport { outputFromObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { KbqBadgeModule } from '@koobiq/components/badge';\nimport {\n DOWN_ARROW,\n ENTER,\n ESCAPE,\n FocusKeyManager,\n KbqAppSwitcherLocaleConfiguration,\n KbqDeepPartial,\n KbqLocaleOverridesDirective,\n KbqOptionModule,\n KbqPopUp,\n KbqPopUpPlacementValues,\n KbqPopUpSizeValues,\n KbqPopUpTrigger,\n LEFT_ARROW,\n POSITION_TO_CSS_MAP,\n PopUpPlacements,\n PopUpSizes,\n PopUpTriggers,\n RIGHT_ARROW,\n SPACE,\n TAB,\n UP_ARROW,\n applyPopupMargins,\n kbqLocaleConfigurationOverrideProvider,\n kbqOptionalNumberAttribute,\n kbqQueryListFrom,\n kbqSiblingPopupProvider,\n ruRULocaleData\n} from '@koobiq/components/core';\nimport { KbqDividerModule } from '@koobiq/components/divider';\nimport { KbqDropdown, KbqDropdownItem, KbqDropdownModule } from '@koobiq/components/dropdown';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqInput, KbqInputModule } from '@koobiq/components/input';\nimport { defaultOffsetYWithArrow } from '@koobiq/components/popover';\nimport { KbqScrollbar } from '@koobiq/components/scrollbar';\nimport { merge } from 'rxjs';\nimport { auditTime, distinctUntilChanged, filter, startWith } from 'rxjs/operators';\nimport { KbqAppSwitcherDropdownApp } from './app-switcher-dropdown-app';\nimport { KbqAppSwitcherDropdownSite } from './app-switcher-dropdown-site';\nimport { KbqAppSwitcherListItem } from './app-switcher-list-item';\n\nexport interface KbqAppSwitcherApp {\n name: string;\n id: string | number;\n type?: string | number;\n\n /**\n * Inline SVG markup for the application icon. Use this for SVG icons that should be rendered directly in\n * the DOM.\n *\n * The markup is sanitized against a strict SVG allow-list before it is rendered\n * (see `KbqAppSwitcherIconSanitizer`): scripts, event handlers, `foreignObject`, `style` and external\n * references are removed. Prefer `iconSrc` when the icon comes from a URL.\n */\n icon?: string;\n /** Path to the icon file (URL or relative path). */\n iconSrc?: string;\n caption?: string;\n aliases?: KbqAppSwitcherApp[];\n link?: string;\n}\n\nexport interface KbqAppSwitcherSite {\n name: string;\n id: string | number;\n status?: string;\n\n /**\n * Inline SVG markup for the site icon. Use this for SVG icons that should be rendered directly in the DOM.\n * Sanitized the same way as `KbqAppSwitcherApp.icon`.\n */\n icon?: string;\n /** Path to the icon file (URL or relative path). */\n iconSrc?: string;\n apps: KbqAppSwitcherApp[];\n}\n\n/**\n * Reducer that assigns an application to a group. Called once per application; implementations either push the\n * app into `untyped` (rendered as a plain row) or add it to a synthetic group in `groups`.\n */\nexport type KbqAppSwitcherGroupBy = (\n app: KbqAppSwitcherApp,\n groups: Record<string, KbqAppSwitcherApp>,\n untyped: KbqAppSwitcherApp[]\n) => void;\n\n/** @docs-private */\nexport function defaultGroupBy(\n app: KbqAppSwitcherApp,\n groups: Record<string, KbqAppSwitcherApp>,\n untyped: KbqAppSwitcherApp[]\n) {\n if (!app.type) {\n untyped.push(app);\n } else {\n const appType = app.type.toString();\n\n if (groups[appType]) {\n groups[appType].aliases!.push(app);\n } else {\n groups[appType] = {\n name: appType,\n aliases: [app],\n icon: app.icon,\n iconSrc: app.iconSrc,\n // The type name, not an empty string: the rendered rows are tracked by `id`, and a falsy one\n // would make every group fall back to the name-based key.\n id: appType\n };\n }\n }\n}\n\n/**\n * Runs `groupBy` over `apps` and returns the rendered order: synthetic groups big enough to be collapsible\n * first, then every remaining application as a plain row.\n *\n * A group is kept only when it holds strictly more than `minAppsForGrouping` applications; smaller groups are\n * flattened back into plain rows.\n */\nexport function makeGroupsForApps(\n apps: KbqAppSwitcherApp[],\n minAppsForGrouping: number,\n groupBy: KbqAppSwitcherGroupBy = defaultGroupBy\n): KbqAppSwitcherApp[] {\n const groups: Record<string, KbqAppSwitcherApp> = {};\n const untyped: KbqAppSwitcherApp[] = [];\n const groupedApps: KbqAppSwitcherApp[] = [];\n\n apps.forEach((app) => groupBy(app, groups, untyped));\n\n Object.values(groups).forEach((group) => {\n const { aliases } = group;\n\n if (!aliases?.length) {\n // A custom `groupBy` is free to emit a group without aliases - render it as a plain row. An empty\n // array has to be dropped too: the template gates the group header on the presence of `aliases`,\n // and `[]` is truthy, so it would render a toggle that expands to nothing.\n untyped.push(aliases ? { ...group, aliases: undefined } : group);\n } else if (aliases.length > minAppsForGrouping) {\n groupedApps.push(group);\n } else {\n untyped.push(...aliases);\n }\n });\n\n groupedApps.push(...untyped);\n\n return groupedApps;\n}\n\nexport const KBQ_MIN_NUMBER_OF_APPS_TO_ENABLE_SEARCH: number = 7;\nexport const KBQ_MIN_NUMBER_OF_APPS_TO_ENABLE_GROUPING: number = 3;\n\n/**\n * `hideIfNotInViewPort` reads layout (`getBoundingClientRect`) and hangs off `CdkScrollable.elementScrolled()`,\n * which - unlike `ScrollDispatcher.scrolled()` - is not audited by the CDK; coalesce it to roughly one frame.\n */\nconst SCROLL_GEOMETRY_THROTTLE = 16;\n\nconst defaultPlacement = PopUpPlacements.BottomLeft;\n\nconst defaultBackdropClass = 'cdk-overlay-transparent-backdrop';\n\n/** @docs-private */\nexport const KBQ_APP_SWITCHER_SCROLL_STRATEGY = new InjectionToken<() => ScrollStrategy>(\n 'kbq-app-switcher-scroll-strategy'\n);\n\n/** @docs-private */\nexport function kbqAppSwitcherScrollStrategyFactory(overlay: Overlay): () => ScrollStrategy {\n return () => overlay.scrollStrategies.reposition({ scrollThrottle: 20 });\n}\n\n/** @docs-private */\nexport const KBQ_APP_SWITCHER_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n provide: KBQ_APP_SWITCHER_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: kbqAppSwitcherScrollStrategyFactory\n};\n\n/** default configuration of app-switcher */\n/** @docs-private */\nexport const KBQ_APP_SWITCHER_DEFAULT_LOCALE_CONFIGURATION: KbqAppSwitcherLocaleConfiguration =\n ruRULocaleData.appSwitcher;\n\n/** Injection Token for providing the default configuration of app-switcher */\n/** @docs-private */\nexport const KBQ_APP_SWITCHER_LOCALE_CONFIGURATION = new InjectionToken<KbqAppSwitcherLocaleConfiguration>(\n 'KbqAppSwitcherLocaleConfiguration',\n { factory: () => KBQ_APP_SWITCHER_DEFAULT_LOCALE_CONFIGURATION }\n);\n\n/**\n * Utility provider for `KBQ_APP_SWITCHER_LOCALE_CONFIGURATION`. Only the strings you pass are overridden; the rest\n * keep following the active locale.\n */\nexport const kbqAppSwitcherLocaleConfigurationProvider = (\n configuration: KbqDeepPartial<KbqAppSwitcherLocaleConfiguration>\n): Provider => kbqLocaleConfigurationOverrideProvider('appSwitcher', configuration);\n\n/** @deprecated Use {@link KBQ_APP_SWITCHER_DEFAULT_LOCALE_CONFIGURATION}. Will be removed in 22.0.0. */\nexport const KBQ_APP_SWITCHER_DEFAULT_CONFIGURATION = KBQ_APP_SWITCHER_DEFAULT_LOCALE_CONFIGURATION;\n/** @deprecated Use {@link KBQ_APP_SWITCHER_LOCALE_CONFIGURATION}. Will be removed in 22.0.0. */\nexport const KBQ_APP_SWITCHER_CONFIGURATION = KBQ_APP_SWITCHER_LOCALE_CONFIGURATION;\n\n/**\n * Providers used by the app-switcher. `KbqAppSwitcherModule` applies them for `NgModule` consumers;\n * standalone consumers that import `KbqAppSwitcherTrigger` directly may add them to their application (or\n * route) providers.\n *\n * Providing them is optional: the only entry is the scroll strategy, and the directive falls back to the\n * default repositioning strategy when the token is absent. The app-switcher renders no focus trap, so - unlike\n * `KbqPopoverModule` and `KbqNotificationCenterModule`, whose templates bind `[cdkTrapFocus]` - it must not\n * swap `FOCUS_TRAP_INERT_STRATEGY`/`FocusTrapFactory`: those are injector-wide and would disable the CDK\n * inert strategy for every other focus trap in the same scope.\n */\nexport function kbqAppSwitcherProvider(): Provider[] {\n return [KBQ_APP_SWITCHER_SCROLL_STRATEGY_FACTORY_PROVIDER];\n}\n\n/**\n * Popup rendered by `KbqAppSwitcherTrigger`. The trigger attaches it to a CDK overlay itself (see\n * `getOverlayHandleComponentType`) and assigns `trigger` on the created instance, so consumers never place\n * `<kbq-app-switcher>` in a template - `[kbqAppSwitcher]` on the trigger element is the whole public surface.\n */\n@Component({\n selector: 'kbq-app-switcher',\n imports: [\n FormsModule,\n ReactiveFormsModule,\n KbqInputModule,\n KbqIconModule,\n KbqDividerModule,\n KbqBadgeModule,\n KbqDropdownModule,\n KbqScrollbar,\n KbqOptionModule,\n KbqAppSwitcherDropdownApp,\n KbqAppSwitcherDropdownSite,\n KbqAppSwitcherListItem\n ],\n templateUrl: './app-switcher.html',\n styleUrls: ['./app-switcher.scss', './app-switcher-tokens.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-app-switcher',\n '(keydown)': 'keydownHandler($event)',\n '(focusin)': 'focusinHandler($event)',\n '(focusout)': 'focusoutHandler($event)'\n },\n // Carrier only: the popup is created through the overlay, so there is no element for a consumer to bind\n // on. It re-merges the carriers above the trigger and lets the popup read its strings through `read()`.\n hostDirectives: [KbqLocaleOverridesDirective],\n preserveWhitespaces: false\n})\nexport class KbqAppSwitcherComponent extends KbqPopUp implements AfterViewChecked, OnChanges, AfterViewInit, OnDestroy {\n /** Strings currently rendered by the popup. */\n readonly localeConfiguration = inject(KbqLocaleOverridesDirective, { self: true }).read(\n 'appSwitcher',\n KBQ_APP_SWITCHER_LOCALE_CONFIGURATION\n );\n\n /** @docs-private */\n readonly searchControl = new FormControl('');\n\n /** @docs-private */\n filteredSites: KbqAppSwitcherSite[] = [];\n\n /** @docs-private */\n prefix = 'kbq-app-switcher';\n\n /** @docs-private */\n trigger: KbqAppSwitcherTrigger;\n\n /** @docs-private */\n readonly input = viewChild(KbqInput);\n\n /**\n * The other-sites flyout, closed whenever the pointer moves back over the main list.\n *\n * Not `required`: it only exists in multi-site mode, and reading a required query with no match throws -\n * which a single-site switcher with a search field would do on the first `mouseenter`.\n *\n * @docs-private\n */\n readonly otherSites = viewChild<KbqDropdown>('otherSites');\n\n private readonly allItemsQuery = viewChildren(KbqDropdownItem);\n private readonly allItemsList = kbqQueryListFrom(this.allItemsQuery);\n\n /** @docs-private */\n protected get allItems(): QueryList<KbqDropdownItem> {\n return this.allItemsList();\n }\n\n /** Roving-focus manager over the inline menu items (flat app rows and other-site rows). */\n protected keyManager: FocusKeyManager<KbqDropdownItem>;\n\n private readonly menuItems = new QueryList<KbqDropdownItem>();\n\n private readonly dir = inject(Directionality, { optional: true });\n\n /**\n * CSS class marking a nested alias row, bound in the template (see app-switcher.html). Kept as a\n * single named constant, rather than a literal repeated in both places, so handleGroupHorizontal's\n * classList check can't silently drift from the template's class binding if the class is renamed.\n */\n protected readonly nestedAliasClass = 'kbq-app-switcher-site_nested';\n\n /** @docs-private */\n readonly triggerInput = input<KbqAppSwitcherTrigger | undefined>(undefined, { alias: 'trigger' });\n\n ngOnChanges(changes: SimpleChanges): void {\n // A bound input is handed to its member; unbound, it leaves what code wrote.\n if (changes['triggerInput']) {\n const trigger = this.triggerInput();\n\n if (trigger !== undefined) this.trigger = trigger;\n }\n }\n\n constructor() {\n super();\n }\n\n ngAfterViewInit() {\n const input = this.input();\n\n this.keyManager = new FocusKeyManager<KbqDropdownItem>(this.menuItems)\n .withVerticalOrientation()\n .withHomeAndEnd()\n .withTypeAhead();\n\n // Focus the first item only once, and only after it is actually rendered (see below).\n let initialItemFocused = false;\n\n // Build the roving menu from the inline (static-content) items: the flat app rows, expanded\n // aliases and search results (`KbqAppSwitcherListItem`) plus the other-site rows\n // (`KbqAppSwitcherDropdownSite`). The apps inside the site flyouts (`KbqAppSwitcherDropdownApp`)\n // live in their own overlay dropdowns, which drive their own key manager, so they are excluded.\n this.allItems.changes.pipe(startWith(null), takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.menuItems.reset(\n this.allItems.filter(\n (item) => item instanceof KbqAppSwitcherListItem || item instanceof KbqAppSwitcherDropdownSite\n )\n );\n this.menuItems.notifyOnChanges();\n\n // When there is no search field, focus the first item on open. The static-content rows live\n // inside a `kbq-dropdown` that only materialises after this component's `ngAfterViewInit`, so\n // focusing eagerly there races the render and silently no-ops in production builds — wait for\n // the items to appear in the query instead.\n if (!input && !initialItemFocused && this.menuItems.length) {\n initialItemFocused = true;\n this.keyManager.setFirstItemActive();\n }\n });\n\n if (input) {\n input.focus();\n }\n\n this.visibleChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((state) => {\n // Not memoized on `offset`: `applyPopupMargins` picks the margin side from the current\n // `kbq-app-switcher_placement-*` classes, so the write depends on the placement too.\n if (!state || this.offset === null) return;\n\n applyPopupMargins(this.renderer, this.elementRef.nativeElement, this.prefix, `${this.offset}px`);\n });\n\n this.searchControl.valueChanges\n .pipe(distinctUntilChanged(), takeUntilDestroyed(this.destroyRef))\n .subscribe((value) => {\n this.filteredSites = this.filterSites(value);\n // Switching between the flat list and the search results swaps the rendered items;\n // drop any stale active item so navigation restarts from the top.\n this.keyManager?.setActiveItem(-1);\n });\n }\n\n ngAfterViewChecked(): void {\n // Syncs the list here so `changes` emits once this view is checked.\n this.allItemsList();\n }\n\n /** Releases the internal roving-focus menu QueryList. */\n ngOnDestroy(): void {\n this.menuItems.destroy();\n\n super.ngOnDestroy();\n }\n\n /** @docs-private */\n updateClassMap(placement: string, customClass: string, size: KbqPopUpSizeValues) {\n super.updateClassMap(placement, customClass, { [`${this.prefix}_${size}`]: !!size });\n }\n\n /** @docs-private */\n escapeHandler() {\n this.hide(0);\n }\n\n /**\n * Handles keyboard navigation across the app-switcher menu items.\n *\n * @docs-private\n */\n protected keydownHandler(event: KeyboardEvent): void {\n const keyCode = event.keyCode;\n\n if (keyCode === ESCAPE) {\n // Spent by a control inside, such as a tooltip closing on it: one key closes one layer.\n if (event.defaultPrevented) return;\n\n // Stop here so Escape closes only this popup instead of bubbling into overlays opened\n // earlier (mirrors KbqDropdown.handleKeydown).\n event.preventDefault();\n event.stopPropagation();\n this.escapeHandler();\n\n return;\n }\n\n // The host `(keydown)` binding is live before `ngAfterViewInit` builds the key manager; until\n // then there is nothing to navigate, so ignore the key (mirrors `focusinHandler`).\n if (!this.keyManager) {\n return;\n }\n\n // Keep the search field's native typing/caret behaviour; only ArrowDown moves into the list.\n if (this.eventFromInput(event)) {\n if (keyCode === DOWN_ARROW) {\n event.preventDefault();\n this.keyManager.setFocusOrigin('keyboard').setFirstItemActive();\n }\n\n return;\n }\n\n // Tab leaves the menu (WAI-ARIA menu pattern): close and move focus to the trigger ourselves.\n // Preventing the default stops the browser from first shifting focus into its own chrome, which\n // would leave the real focus out of sync with the ring shown on the trigger.\n if (keyCode === TAB) {\n event.preventDefault();\n this.hide(0);\n this.trigger.focus();\n\n return;\n }\n\n // Any key past this point is a keyboard interaction on a menu item, so show the focus ring.\n this.keyManager.setFocusOrigin('keyboard');\n\n const activeItem = this.keyManager.activeItem;\n\n if ((keyCode === LEFT_ARROW || keyCode === RIGHT_ARROW) && this.handleGroupHorizontal(keyCode, activeItem)) {\n event.preventDefault();\n\n return;\n }\n\n if ((keyCode === ENTER || keyCode === SPACE) && activeItem && !this.keyManager.isTyping()) {\n event.preventDefault();\n\n // A group header toggles its aliases; any other item activates its underlying link.\n if (activeItem instanceof KbqAppSwitcherListItem && activeItem.toggle()) {\n activeItem.collapsed.set(!activeItem.collapsed());\n } else {\n activeItem.getHostElement().click();\n }\n\n return;\n }\n\n // ArrowUp on the first item returns focus to the search field (no wrap-around).\n if (keyCode === UP_ARROW && this.keyManager.activeItemIndex === 0 && this.input()) {\n event.preventDefault();\n this.keyManager.setActiveItem(-1);\n this.input()!.focus();\n\n return;\n }\n\n this.keyManager.onKeydown(event);\n }\n\n /**\n * Expands/collapses an app group (or steps from an alias back to its header) on Left/Right,\n * honouring the current text direction. Returns whether the key was consumed.\n */\n private handleGroupHorizontal(keyCode: number, activeItem: KbqDropdownItem | null): boolean {\n if (!(activeItem instanceof KbqAppSwitcherListItem)) {\n return false;\n }\n\n const rtl = this.dir?.value === 'rtl';\n const expandKey = rtl ? LEFT_ARROW : RIGHT_ARROW;\n const collapseKey = rtl ? RIGHT_ARROW : LEFT_ARROW;\n\n if (activeItem.toggle()) {\n if (keyCode === expandKey && activeItem.collapsed()) {\n activeItem.collapsed.set(false);\n\n return true;\n }\n\n if (keyCode === collapseKey && !activeItem.collapsed()) {\n activeItem.collapsed.set(true);\n\n return true;\n }\n\n return false;\n }\n\n // Collapse key on a nested alias row moves focus back to its parent group header.\n if (keyCode === collapseKey && activeItem.getHostElement().classList.contains(this.nestedAliasClass)) {\n const items = this.menuItems.toArray();\n\n for (let index = this.keyManager.activeItemIndex - 1; index >= 0; index--) {\n const candidate = items[index];\n\n if (candidate instanceof KbqAppSwitcherListItem && candidate.toggle()) {\n this.keyManager.setActiveItem(index);\n\n return true;\n }\n }\n }\n\n return false;\n }\n\n /** Whether the keyboard event originated from the search input. */\n private eventFromInput(event: KeyboardEvent): boolean {\n return !!(event.target as HTMLElement)?.attributes.getNamedItem('kbqinput');\n }\n\n /**\n * Syncs the key manager's active item with focus that arrives via Tab, click or a closing flyout.\n * Clears the active item (index -1) when focus lands on a focusable element that isn't one of\n * `menuItems` (e.g. the search field's clear button) - otherwise a stale `activeItem` from before\n * the focus move would keep receiving Enter/Space/arrow-key actions meant for the new target.\n *\n * @docs-private\n */\n protected focusinHandler(event: FocusEvent): void {\n if (!this.keyManager) return;\n\n const index = this.menuItems.toArray().findIndex((item) => item.getHostElement() === event.target);\n\n this.keyManager.updateActiveItem(index);\n }\n\n /**\n * Closes the popup once focus leaves the menu and its site flyouts, mirroring the dropdown.\n *\n * @docs-private\n */\n protected focusoutHandler(event: FocusEvent): void {\n const next = event.relatedTarget as HTMLElement | null;\n\n // Keep open while focus stays inside the popup or moves into a site flyout overlay\n // (flyouts are separate overlays whose panes carry the `.kbq-app-switcher-sites` class).\n if (!next || !next.closest('.kbq-app-switcher, .kbq-app-switcher-sites')) {\n this.hide(0);\n // Return focus to the trigger (the same landing spot as Shift+Tab), instead of\n // leaving it wherever it was heading.\n this.trigger.focus();\n }\n }\n\n /**\n * Selects an application belonging to one of the other sites.\n *\n * @docs-private\n */\n selectAppInSite(site: KbqAppSwitcherSite | undefined, app: KbqAppSwitcherApp) {\n if (!site) return;\n\n this.trigger.selectedSite.set(site);\n this.trigger.selectedApp.set(app);\n }\n\n private filterSites(query: string | null): KbqAppSwitcherSite[] {\n const sites = this.trigger.originalSites;\n\n if (!query) return sites;\n\n const search = query.toLowerCase();\n const matches = (app: KbqAppSwitcherApp): boolean =>\n app.name.toLowerCase().includes(search) || !!app.caption?.toLowerCase().includes(search);\n\n // Shallow copies only: a `structuredClone` of every site would be an O(all apps) deep copy per\n // keystroke, and would also hand `@for` brand-new app objects to re-render on every character.\n return sites\n .map((site) => ({ ...site, apps: site.apps.filter(matches) }))\n .filter((site) => site.apps.length > 0);\n }\n}\n\n@Directive({\n selector: '[kbqAppSwitcher]',\n providers: [kbqSiblingPopupProvider(KbqAppSwitcherTrigger)],\n host: {\n '[class.kbq-app-switcher_open]': 'isOpen',\n '[class.kbq-active]': 'hasClickTrigger && isOpen',\n '(keydown)': 'keydownHandler($event)',\n '(touchend)': 'touchendHandler()'\n },\n exportAs: 'kbqAppSwitcher'\n})\nexport class KbqAppSwitcherTrigger\n extends KbqPopUpTrigger<KbqAppSwitcherComponent>\n implements OnChanges, AfterContentInit, OnInit\n{\n /**\n * Optional so a standalone consumer works without `kbqAppSwitcherProvider()`; an application-level\n * provider for `KBQ_APP_SWITCHER_SCROLL_STRATEGY` still wins over this fallback.\n *\n * @docs-private\n */\n protected scrollStrategy: () => ScrollStrategy =\n inject(KBQ_APP_SWITCHER_SCROLL_STRATEGY, { optional: true }) ??\n kbqAppSwitcherScrollStrategyFactory(this.overlay);\n\n // Abstract members of `KbqPopUp`/`KbqPopUpTrigger` that the app-switcher has no use for: its content is\n // fixed (the app list), it never draws an arrow and it never renders a backdrop.\n /** @docs-private */\n arrow: boolean = false;\n /** @docs-private */\n customClass: string;\n private hasBackdrop: boolean = false;\n private size: KbqPopUpSizeValues = PopUpSizes.Medium;\n /** @docs-private */\n content: string | TemplateRef<any>;\n\n /** Whether search is used or not */\n get withSearch(): boolean {\n return this.appsCount > KBQ_MIN_NUMBER_OF_APPS_TO_ENABLE_SEARCH;\n }\n\n /**\n * Number of applications to choose from\n *\n * @docs-private\n */\n get appsCount(): number {\n return this.appsCountComputed();\n }\n\n /**\n * Whether the sites are used or not\n *\n * @docs-private\n */\n get sitesMode(): boolean {\n return this.sitesModeComputed();\n }\n\n /**\n * Applications of the currently selected site, grouped for rendering.\n *\n * @docs-private\n */\n get currentApps(): KbqAppSwitcherApp[] {\n return this.currentAppsComputed();\n }\n\n /** Selected application */\n readonly selectedApp = model<KbqAppSwitcherApp | undefined>(undefined);\n\n /** Placement of popUp */\n placement: KbqPopUpPlacementValues = defaultPlacement;\n\n /** Class that will be used in the background */\n backdropClass: string = defaultBackdropClass;\n\n /** Offset of popUp */\n offset: number | null = defaultOffsetYWithArrow;\n\n /** Array of sites, with the applications of each site grouped for rendering. */\n get sites(): KbqAppSwitcherSite[] {\n return this.parsedSites();\n }\n\n set sites(value: KbqAppSwitcherSite[]) {\n this.originalSites = value;\n }\n\n /**\n * Function to group the apps by type. The first argument is an app object with type.\n * The second is a groups object and third is an array for untyped apps\n */\n get groupBy(): KbqAppSwitcherGroupBy {\n return this.groupBySignal();\n }\n\n set groupBy(fn: KbqAppSwitcherGroupBy) {\n this.groupBySignal.set(fn);\n }\n\n /** Selected site */\n readonly selectedSite = model<KbqAppSwitcherSite | undefined>(undefined);\n\n /**\n * `selectedSite` with its applications grouped for rendering.\n *\n * Looked up by id among the parsed sites, so re-selecting a site never regroups it again. Falls back to\n * the raw value when the id is unknown (a stale id, or `selectedSite` set before `sites`) instead of\n * throwing.\n *\n * @docs-private\n */\n readonly parsedSelectedSite = computed<KbqAppSwitcherSite | undefined>(() => {\n const value = this.selectedSite();\n\n return value && (this.parsedSitesById().get(value.id) ?? value);\n });\n\n /** Whether the trigger is disabled. */\n get disabled(): boolean {\n return this._disabled;\n }\n\n set disabled(value) {\n this._disabled = coerceBooleanProperty(value);\n\n if (this._disabled) {\n this.hide();\n }\n }\n\n /** @docs-private */\n get hasClickTrigger(): boolean {\n return this.trigger.includes(PopUpTriggers.Click);\n }\n\n /** Emits a change event whenever the placement state changes. */\n readonly placementChange = new EventEmitter<KbqPopUpPlacementValues>();\n\n /** @docs-private */\n readonly placementChangeOutput = outputFromObservable(this.placementChange, { alias: 'kbqPlacementChange' });\n\n /** Emits a change event whenever the visible state changes. */\n readonly visibleChange = new EventEmitter<boolean>();\n\n /** @docs-private */\n readonly visibleChangeOutput = outputFromObservable(this.visibleChange, { alias: 'kbqVisibleChange' });\n\n /**\n * Space-separated list of DOM events that open the popup (`KbqPopUpTrigger.trigger`).\n *\n * Not to be confused with `KbqAppSwitcherComponent.trigger`, which is the back-reference from the popup to\n * this directive.\n *\n * @docs-private\n */\n trigger: string = `${PopUpTriggers.Click}, ${PopUpTriggers.Keydown}`;\n\n /**\n * Sites exactly as supplied through `sites`, without grouping.\n *\n * @docs-private\n */\n get originalSites(): KbqAppSwitcherSite[] {\n return this.originalSitesSignal();\n }\n\n set originalSites(value: KbqAppSwitcherSite[]) {\n this.originalSitesSignal.set(value ?? []);\n }\n\n /** @docs-private */\n protected originSelector = '.kbq-app-switcher';\n\n /** @docs-private */\n protected get overlayConfig(): OverlayConfig {\n return {\n panelClass: 'kbq-app-switcher__panel',\n hasBackdrop: this.hasBackdrop,\n backdropClass: this.backdropClass\n };\n }\n\n private readonly originalSitesSignal = signal<KbqAppSwitcherSite[]>([]);\n private readonly groupBySignal = signal<KbqAppSwitcherGroupBy>(defaultGroupBy);\n\n /**\n * Sites with their applications grouped, keyed by site id.\n *\n * Grouping runs once per `sites`/`groupBy` change instead of once per `selectedSite` assignment, and the\n * parsed objects keep their identity so `@for` can reuse the rendered rows.\n */\n private readonly parsedSitesById = computed(() => {\n const groupBy = this.groupBySignal();\n\n return new Map(\n this.originalSitesSignal().map((site) => [\n site.id,\n {\n ...site,\n apps: makeGroupsForApps(site.apps, KBQ_MIN_NUMBER_OF_APPS_TO_ENABLE_GROUPING, groupBy)\n } satisfies KbqAppSwitcherSite\n ])\n );\n });\n\n private readonly parsedSites = computed(() => [...this.parsedSitesById().values()]);\n\n private readonly appsCountComputed = computed(() =>\n this.originalSitesSignal().reduce((acc, site) => acc + site.apps.length, 0)\n );\n\n private readonly sitesModeComputed = computed(() => this.originalSitesSignal().length > 1);\n\n private readonly currentAppsComputed = computed(() =>\n this.sitesModeComputed()\n ? // A multi-site switcher can be opened before a site is selected; render nothing rather than crash.\n (this.parsedSelectedSite()?.apps ?? [])\n : (this.parsedSites()[0]?.apps ?? [])\n );\n\n /** @docs-private */\n readonly placementInput = input<KbqPopUpPlacementValues | undefined>(undefined, {\n alias: 'kbqAppSwitcherPlacement'\n });\n\n /** @docs-private */\n readonly backdropClassInput = input<string | undefined>(undefined, { alias: 'backdropClass' });\n\n /** @docs-private */\n readonly offsetInput = input<number | null | undefined, number | string | null | undefined>(undefined, {\n alias: 'offset',\n transform: kbqOptionalNumberAttribute\n });\n\n /** @docs-private */\n readonly sitesInput = input<KbqAppSwitcherSite[] | undefined>(undefined, { alias: 'sites' });\n\n /** @docs-private */\n readonly groupByInput = input<KbqAppSwitcherGroupBy | undefined>(undefined, { alias: 'groupBy' });\n\n /** @docs-private */\n readonly disabledInput = input<boolean | undefined, boolean | string | null | undefined>(undefined, {\n alias: 'disabled',\n transform: booleanAttribute\n });\n\n ngOnChanges(changes: SimpleChanges): void {\n // A bound input is handed to its member, a bound `undefined` as the member's default; unbound, it leaves\n // what code wrote.\n if (changes['placementInput']) {\n this.placement = this.placementInput() ?? defaultPlacement;\n }\n\n if (changes['backdropClassInput']) {\n this.backdropClass = this.backdropClassInput() ?? defaultBackdropClass;\n }\n\n if (changes['offsetInput']) {\n this.offset = this.offsetInput() ?? defaultOffsetYWithArrow;\n }\n\n if (changes['sitesInput']) {\n this.sites = this.sitesInput() ?? [];\n }\n\n if (changes['groupByInput']) {\n this.groupBy = this.groupByInput() ?? defaultGroupBy;\n }\n\n if (changes['disabledInput']) {\n const disabled = this.disabledInput();\n\n if (disabled !== undefined) this.disabled = disabled;\n }\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n\n this.scrollable\n ?.elementScrolled()\n .pipe(auditTime(SCROLL_GEOMETRY_THROTTLE), takeUntilDestroyed(this.destroyRef))\n .subscribe(this.hideIfNotInViewPort);\n }\n\n ngAfterContentInit(): void {\n // Hide the popup once it scrolls out of an ancestor that opted in with `kbq-hide-nested-popup`\n // (e.g. a tab body), mirroring `KbqPopover`. No extra throttle: `ScrollDispatcher.scrolled()`\n // already audits its output (20ms by default).\n this.scrollDispatcher\n .scrolled()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((scrollable: CdkScrollable | void) => {\n if (!scrollable?.getElementRef().nativeElement.classList.contains('kbq-hide-nested-popup')) return;\n\n const parentRects = scrollable.getElementRef().nativeElement.getBoundingClientRect();\n const childRects = this.elementRef.nativeElement.getBoundingClientRect();\n\n if (childRects.bottom < parentRects.top || childRects.top > parentRects.bottom) {\n this.hide();\n }\n });\n\n // On close, return focus to the trigger. Inner-scroll close suppression lives in\n // `closingActions()` (it filters scrolls originating inside the popup), so no per-visibility\n // subscription is needed here.\n this.visibleChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((visible: boolean) => {\n if (!visible) {\n this.focus();\n }\n });\n }\n\n /** @docs-private */\n updateData() {\n if (!this.instance) return;\n\n this.instance.content = this.content;\n this.instance.arrow = this.arrow;\n this.instance.offset = this.offset;\n this.instance.detectChanges();\n\n if (this.isOpen) {\n this.updatePosition(true);\n }\n }\n\n /** @docs-private */\n getOverlayHandleComponentType(): Type<KbqAppSwitcherComponent> {\n return KbqAppSwitcherComponent;\n }\n\n /** @docs-private */\n updateClassMap(newPlacement: string = this.placement) {\n if (!this.instance) return;\n\n this.instance.updateClassMap(POSITION_TO_CSS_MAP[newPlacement], this.customClass, this.size);\n }\n\n /** @docs-private */\n closingActions() {\n return merge(\n this.overlayRef!.outsidePointerEvents(),\n this.overlayRef!.backdropClick(),\n // Only an outer/ancestor scroll that moves the popup out of view should close it. Scrolling\n // the popup's own content must not: its `KbqScrollbar` viewport is a `CdkScrollable`, so it\n // reaches the root `ScrollDispatcher`, and keyboard navigation scrolls the focused item into\n // view through that viewport - without this filter every arrow key would close the panel.\n this.scrollDispatcher.scrolled().pipe(filter((scrollable) => !this.isInnerScroll(scrollable)))\n );\n }\n\n /** Whether a `ScrollDispatcher` emission originates from inside this popup's own scrollable content. */\n private isInnerScroll(scrollable: CdkScrollable | void): boolean {\n return (\n scrollable instanceof CdkScrollable &&\n !!scrollable.getElementRef().nativeElement.closest('.kbq-app-switcher, .kbq-app-switcher-sites')\n );\n }\n\n private hideIfNotInViewPort = () => {\n if (!this.scrollable) return;\n\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n const containerRect = this.scrollable.getElementRef().nativeElement.getBoundingClientRect();\n\n if (!(\n rect.bottom >= containerRect.top &&\n rect.right >= containerRect.left &&\n rect.top <= containerRect.bottom &&\n rect.left <= containerRect.right\n )) {\n this.hide();\n }\n };\n}\n","@if (trigger.withSearch) {\n <div class=\"kbq-app-switcher__search-container\" (mouseenter)=\"otherSites()?.close()\">\n <kbq-form-field noBorders>\n <i kbq-icon=\"kbq-magnifying-glass_16\" aria-hidden=\"true\" kbqPrefix></i>\n <input\n placeholder=\"{{ localeConfiguration().searchPlaceholder }}\"\n autocomplete=\"off\"\n kbqInput\n [attr.aria-label]=\"localeConfiguration().searchPlaceholder\"\n [formControl]=\"searchControl\"\n />\n <!-- `kbq-cleaner` is a button with a localized default name; here it clears the search specifically. -->\n <kbq-cleaner [aria-label]=\"localeConfiguration().clearSearch\" />\n </kbq-form-field>\n </div>\n\n <kbq-divider />\n}\n\n<!--\n Everything between `role=\"menu\"` and the `role=\"menuitem\"` rows is marked `role=\"none\"`: the menu role\n requires its owned elements to be menu items, and the layout wrappers (and the dropdown host that provides\n the panel styling) would otherwise break that ownership chain. The scrollbar host cannot carry the menu\n role for the same reason - it injects its own focusable viewport element in between.\n-->\n<kbq-scrollbar>\n @if (!searchControl.getRawValue()) {\n <div role=\"menu\" aria-orientation=\"vertical\">\n <div class=\"kbq-app-switcher__app-container\" role=\"none\" (mouseenter)=\"otherSites()?.close()\">\n @if (trigger.sitesMode) {\n <div class=\"kbq-app-switcher-group-header\" role=\"none\">\n <div class=\"kbq-app-switcher-group-header__text\">{{ trigger.selectedSite()?.name }}</div>\n @if (trigger.selectedSite()?.status; as status) {\n <kbq-badge class=\"kbq-app-switcher-group-header__badge\" [compact]=\"true\">\n {{ status }}\n </kbq-badge>\n }\n </div>\n }\n\n <kbq-dropdown role=\"none\" [class]=\"'kbq-app-switcher-sites'\">\n <div kbqDropdownStaticContent role=\"none\" class=\"kbq-app-switcher-site\">\n @for (app of trigger.currentApps; track app.id || app.name) {\n @if (!app.aliases) {\n <a\n rel=\"noopener noreferrer\"\n kbq-app-switcher-list-item\n [attr.href]=\"app.link ?? null\"\n [attr.aria-current]=\"app.id === trigger.selectedApp()?.id ? 'true' : null\"\n [class.kbq-selected]=\"app.id === trigger.selectedApp()?.id\"\n [app]=\"app\"\n [toggle]=\"!!app.aliases\"\n ></a>\n } @else {\n <div\n #appSwitcherApp=\"kbqAppSwitcherApp\"\n kbq-app-switcher-list-item\n [app]=\"app\"\n [toggle]=\"!!app.aliases\"\n ></div>\n\n @if (!appSwitcherApp.collapsed()) {\n @for (alias of app.aliases; track alias.id) {\n <a\n rel=\"noopener noreferrer\"\n kbq-app-switcher-list-item\n [attr.href]=\"alias.link ?? null\"\n [attr.aria-current]=\"alias.id === trigger.selectedApp()?.id ? 'true' : null\"\n [class]=\"nestedAliasClass\"\n [class.kbq-selected]=\"alias.id === trigger.selectedApp()?.id\"\n [app]=\"alias\"\n ></a>\n }\n }\n }\n }\n </div>\n </kbq-dropdown>\n </div>\n\n @if (trigger.sitesMode) {\n <kbq-divider />\n\n <div class=\"kbq-app-switcher__sites-container\" role=\"none\">\n <div class=\"kbq-app-switcher-group-header\" role=\"none\">\n <div class=\"kbq-app-switcher-group-header__text\">{{ localeConfiguration().sitesHeader }}</div>\n </div>\n\n <kbq-dropdown #otherSites=\"kbqDropdown\" role=\"none\">\n <div kbqDropdownStaticContent role=\"none\" class=\"kbq-app-switcher-sites\">\n @for (site of trigger.sites; track site.id) {\n @if (site.id !== trigger.selectedSite()?.id) {\n <div\n [kbq-app-switcher-dropdown-site]=\"site\"\n [kbqDropdownTriggerFor]=\"dropdownWithSelectedSite\"\n [kbqDropdownTriggerData]=\"{ site }\"\n [offsetX]=\"0\"\n ></div>\n }\n }\n </div>\n </kbq-dropdown>\n </div>\n\n <!--\n The flyout panels must stay in the same view as the triggers above: a template reference\n variable is only visible inside the view that declares it. Their hosts render empty (the\n content moves into an overlay when opened), so `role=\"none\"` keeps the menu ownership\n chain intact.\n\n Each panel is shared by its triggers, so it renders the data of the trigger that opened it\n (`kbqDropdownTriggerData`), not of the last hovered row: the safe area keeps a panel open\n while the pointer crosses other triggers.\n -->\n <kbq-dropdown #dropdownWithSelectedSite=\"kbqDropdown\" role=\"none\" [class]=\"'kbq-app-switcher-sites'\">\n <ng-template let-site=\"site\" kbqDropdownContent>\n @for (app of site.apps; track app.id || app.name) {\n @if (app.aliases) {\n <div\n #dropdownWithGroupedAppsTrigger=\"kbqDropdownTrigger\"\n [kbq-app-switcher-dropdown-app]=\"app\"\n [kbqDropdownTriggerFor]=\"dropdownWithGroupedApps\"\n [kbqDropdownTriggerData]=\"{ site, app }\"\n [offsetX]=\"0\"\n [class.kbq-pressed]=\"dropdownWithGroupedAppsTrigger.opened\"\n ></div>\n } @else {\n <a\n rel=\"noopener noreferrer\"\n [attr.href]=\"app.link ?? null\"\n [kbq-app-switcher-dropdown-app]=\"app\"\n (click)=\"selectAppInSite(site, app)\"\n ></a>\n }\n }\n </ng-template>\n </kbq-dropdown>\n\n <kbq-dropdown #dropdownWithGroupedApps=\"kbqDropdown\" role=\"none\" [class]=\"'kbq-app-switcher-sites'\">\n <ng-template let-site=\"site\" let-app=\"app\" kbqDropdownContent>\n @for (alias of app.aliases; track alias.id) {\n <a\n rel=\"noopener noreferrer\"\n [attr.href]=\"alias.link ?? null\"\n [kbq-app-switcher-dropdown-app]=\"alias\"\n (click)=\"selectAppInSite(site, alias)\"\n ></a>\n }\n </ng-template>\n </kbq-dropdown>\n }\n </div>\n } @else {\n <div class=\"kbq-app-switcher__search-result\">\n @if (filteredSites.length) {\n <div role=\"menu\" aria-orientation=\"vertical\">\n <kbq-dropdown role=\"none\" [class]=\"'kbq-app-switcher-sites'\">\n <div kbqDropdownStaticContent role=\"none\" class=\"kbq-app-switcher-site\">\n @for (site of filteredSites; track site.id) {\n @if (trigger.sitesMode && site.apps) {\n <kbq-optgroup label=\"{{ site.name }}\" role=\"none\" />\n }\n\n @for (app of site.apps; track app.id || app.name) {\n <a\n rel=\"noopener noreferrer\"\n kbq-app-switcher-list-item\n [attr.href]=\"app.link ?? null\"\n [app]=\"app\"\n [highlightText]=\"searchControl.getRawValue() ?? ''\"\n ></a>\n }\n }\n </div>\n </kbq-dropdown>\n </div>\n }\n\n <!--\n Outside the menu: a status message is not a menu item. The live region itself stays mounted\n while the query changes, so the message is announced once it appears - a region inserted into\n the DOM together with its text is announced unreliably. It collapses while there are results\n (`:empty`, see app-switcher.scss).\n -->\n <div class=\"kbq-app-switcher__empty-search-result\" role=\"status\">\n @if (!filteredSites.length) {\n {{ localeConfiguration().searchEmptyResult }}\n }\n </div>\n </div>\n }\n</kbq-scrollbar>\n","import { NgModule } from '@angular/core';\nimport { KbqAppSwitcherComponent, KbqAppSwitcherTrigger, kbqAppSwitcherProvider } from './app-switcher';\nimport { KbqAppSwitcherDropdownApp } from './app-switcher-dropdown-app';\nimport { KbqAppSwitcherDropdownSite } from './app-switcher-dropdown-site';\nimport { KbqAppSwitcherListItem } from './app-switcher-list-item';\n\n@NgModule({\n imports: [\n KbqAppSwitcherComponent,\n KbqAppSwitcherTrigger,\n KbqAppSwitcherListItem,\n KbqAppSwitcherDropdownApp,\n KbqAppSwitcherDropdownSite\n ],\n providers: kbqAppSwitcherProvider(),\n exports: [\n KbqAppSwitcherTrigger\n ]\n})\nexport class KbqAppSwitcherModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i5","i7"],"mappings":"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"}