@koobiq/components 18.33.0 → 18.34.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 (235) hide show
  1. package/actions-panel/actions-panel-config.d.ts +4 -3
  2. package/actions-panel/actions-panel-container.scss +0 -6
  3. package/actions-panel/actions-panel-ref.d.ts +13 -0
  4. package/actions-panel/actions-panel.d.ts +1 -7
  5. package/clamped-text/clamped-text.d.ts +61 -0
  6. package/clamped-text/clamped-text.scss +17 -0
  7. package/clamped-text/constants.d.ts +14 -0
  8. package/clamped-text/index.d.ts +3 -0
  9. package/clamped-text/module.d.ts +7 -0
  10. package/content-panel/content-panel-aside.scss +9 -0
  11. package/content-panel/content-panel-body.scss +9 -0
  12. package/content-panel/content-panel-container.scss +32 -0
  13. package/content-panel/content-panel-footer.scss +5 -0
  14. package/content-panel/content-panel-header.scss +30 -0
  15. package/content-panel/content-panel-tokens.scss +9 -0
  16. package/content-panel/content-panel.d.ts +149 -0
  17. package/content-panel/content-panel.scss +25 -0
  18. package/content-panel/index.d.ts +3 -0
  19. package/content-panel/module.d.ts +7 -0
  20. package/content-panel/resizable.d.ts +70 -0
  21. package/core/locales/en-US.d.ts +4 -0
  22. package/core/locales/es-LA.d.ts +4 -0
  23. package/core/locales/fa-IR.d.ts +4 -0
  24. package/core/locales/locale-service.d.ts +28 -0
  25. package/core/locales/pt-BR.d.ts +4 -0
  26. package/core/locales/ru-RU.d.ts +4 -0
  27. package/core/locales/tk-TM.d.ts +4 -0
  28. package/core/locales/types.d.ts +5 -0
  29. package/core/locales/zh-CN.d.ts +4 -0
  30. package/core/styles/common/_select.scss +6 -3
  31. package/datepicker/calendar.component.d.ts +1 -1
  32. package/datepicker/datepicker-input.directive.d.ts +1 -1
  33. package/datepicker/datepicker-toggle.component.d.ts +1 -1
  34. package/datepicker/datepicker.component.d.ts +2 -2
  35. package/dynamic-translation/dynamic-translation.d.ts +72 -0
  36. package/dynamic-translation/index.d.ts +2 -0
  37. package/dynamic-translation/module.d.ts +7 -0
  38. package/esm2022/actions-panel/actions-panel-config.mjs +1 -1
  39. package/esm2022/actions-panel/actions-panel-container.mjs +7 -7
  40. package/esm2022/actions-panel/actions-panel-ref.mjs +17 -1
  41. package/esm2022/actions-panel/actions-panel.mjs +34 -24
  42. package/esm2022/button-toggle/button-toggle.component.mjs +9 -9
  43. package/esm2022/clamped-text/clamped-text.mjs +202 -0
  44. package/esm2022/clamped-text/constants.mjs +20 -0
  45. package/esm2022/clamped-text/index.mjs +4 -0
  46. package/esm2022/clamped-text/koobiq-components-clamped-text.mjs +5 -0
  47. package/esm2022/clamped-text/module.mjs +19 -0
  48. package/esm2022/content-panel/content-panel.mjs +432 -0
  49. package/esm2022/content-panel/index.mjs +4 -0
  50. package/esm2022/content-panel/koobiq-components-content-panel.mjs +5 -0
  51. package/esm2022/content-panel/module.mjs +42 -0
  52. package/esm2022/content-panel/resizable.mjs +138 -0
  53. package/esm2022/core/locales/en-US.mjs +5 -1
  54. package/esm2022/core/locales/es-LA.mjs +5 -1
  55. package/esm2022/core/locales/fa-IR.mjs +5 -1
  56. package/esm2022/core/locales/pt-BR.mjs +5 -1
  57. package/esm2022/core/locales/ru-RU.mjs +5 -1
  58. package/esm2022/core/locales/tk-TM.mjs +5 -1
  59. package/esm2022/core/locales/types.mjs +1 -1
  60. package/esm2022/core/locales/zh-CN.mjs +5 -1
  61. package/esm2022/core/version.mjs +2 -2
  62. package/esm2022/datepicker/calendar-header.component.mjs +5 -2
  63. package/esm2022/datepicker/calendar.component.mjs +9 -9
  64. package/esm2022/datepicker/datepicker-input.directive.mjs +1 -1
  65. package/esm2022/datepicker/datepicker-toggle.component.mjs +8 -8
  66. package/esm2022/datepicker/datepicker.component.mjs +3 -3
  67. package/esm2022/dropdown/dropdown.component.mjs +3 -3
  68. package/esm2022/dynamic-translation/dynamic-translation.mjs +175 -0
  69. package/esm2022/dynamic-translation/index.mjs +3 -0
  70. package/esm2022/dynamic-translation/koobiq-components-dynamic-translation.mjs +5 -0
  71. package/esm2022/dynamic-translation/module.mjs +25 -0
  72. package/esm2022/file-upload/file-drop.mjs +1 -1
  73. package/esm2022/file-upload/multiple-file-upload.component.mjs +11 -11
  74. package/esm2022/file-upload/single-file-upload.component.mjs +11 -11
  75. package/esm2022/filter-bar/filter-refresher.mjs +5 -5
  76. package/esm2022/filter-bar/filter-reset.mjs +3 -3
  77. package/esm2022/filter-bar/filter-search.mjs +11 -11
  78. package/esm2022/filter-bar/filters.mjs +3 -3
  79. package/esm2022/filter-bar/pipe-add.mjs +5 -5
  80. package/esm2022/filter-bar/pipes/base-pipe.mjs +2 -2
  81. package/esm2022/filter-bar/pipes/pipe-button.mjs +7 -7
  82. package/esm2022/filter-bar/pipes/pipe-date.mjs +9 -1
  83. package/esm2022/filter-bar/pipes/pipe-datetime.mjs +9 -1
  84. package/esm2022/filter-bar/pipes/pipe-multi-select.mjs +4 -10
  85. package/esm2022/filter-bar/pipes/pipe-multi-tree-select.mjs +10 -9
  86. package/esm2022/filter-bar/pipes/pipe-readonly.mjs +7 -7
  87. package/esm2022/filter-bar/pipes/pipe-select.mjs +3 -4
  88. package/esm2022/filter-bar/pipes/pipe-text.mjs +8 -2
  89. package/esm2022/filter-bar/pipes/pipe-tree-select.mjs +9 -3
  90. package/esm2022/form-field/cleaner.mjs +16 -11
  91. package/esm2022/form-field/fieldset.mjs +2 -2
  92. package/esm2022/form-field/form-field.mjs +5 -5
  93. package/esm2022/form-field/password-hint.mjs +14 -3
  94. package/esm2022/form-field/password-toggle.mjs +45 -10
  95. package/esm2022/form-field/reactive-password-hint.mjs +18 -17
  96. package/esm2022/form-field/stepper.mjs +9 -9
  97. package/esm2022/icon/icon-button.component.mjs +2 -2
  98. package/esm2022/input/input-number.mjs +15 -10
  99. package/esm2022/markdown/markdown.component.mjs +3 -3
  100. package/esm2022/modal/modal.component.mjs +14 -14
  101. package/esm2022/modal/modal.directive.mjs +7 -5
  102. package/esm2022/navbar/navbar-item.component.mjs +3 -3
  103. package/esm2022/popover/popover-confirm.component.mjs +3 -3
  104. package/esm2022/popover/popover.component.mjs +3 -3
  105. package/esm2022/scrollbar/scrollbar.component.mjs +5 -5
  106. package/esm2022/select/select.component.mjs +24 -11
  107. package/esm2022/sidebar/sidebar.component.mjs +46 -27
  108. package/esm2022/sidepanel/sidepanel-container.component.mjs +15 -4
  109. package/esm2022/sidepanel/sidepanel-directives.mjs +5 -5
  110. package/esm2022/sidepanel/sidepanel-ref.mjs +8 -6
  111. package/esm2022/splitter/splitter.component.mjs +1 -1
  112. package/esm2022/tabs/tab-body.component.mjs +3 -3
  113. package/esm2022/tabs/tab-group.component.mjs +27 -27
  114. package/esm2022/tabs/tab.component.mjs +4 -4
  115. package/esm2022/tags/tag-input.mjs +2 -2
  116. package/esm2022/tags/tag-list.component.mjs +13 -13
  117. package/esm2022/textarea/textarea.component.mjs +6 -4
  118. package/esm2022/timepicker/timepicker.directive.mjs +1 -1
  119. package/esm2022/timezone/timezone-select.component.mjs +3 -3
  120. package/esm2022/tooltip/tooltip.component.mjs +3 -3
  121. package/esm2022/tree/tree-selection.component.mjs +4 -4
  122. package/esm2022/tree-select/tree-select.component.mjs +11 -9
  123. package/esm2022/username/constants.mjs +25 -0
  124. package/esm2022/username/index.mjs +6 -0
  125. package/esm2022/username/koobiq-components-username.mjs +5 -0
  126. package/esm2022/username/module.mjs +35 -0
  127. package/esm2022/username/types.mjs +32 -0
  128. package/esm2022/username/username.mjs +129 -0
  129. package/esm2022/username/username.pipe.mjs +92 -0
  130. package/fesm2022/koobiq-components-actions-panel.mjs +56 -31
  131. package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -1
  132. package/fesm2022/koobiq-components-button-toggle.mjs +8 -8
  133. package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
  134. package/fesm2022/koobiq-components-clamped-text.mjs +242 -0
  135. package/fesm2022/koobiq-components-clamped-text.mjs.map +1 -0
  136. package/fesm2022/koobiq-components-content-panel.mjs +612 -0
  137. package/fesm2022/koobiq-components-content-panel.mjs.map +1 -0
  138. package/fesm2022/koobiq-components-core.mjs +29 -1
  139. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  140. package/fesm2022/koobiq-components-datepicker.mjs +21 -18
  141. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  142. package/fesm2022/koobiq-components-dropdown.mjs +2 -2
  143. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  144. package/fesm2022/koobiq-components-dynamic-translation.mjs +204 -0
  145. package/fesm2022/koobiq-components-dynamic-translation.mjs.map +1 -0
  146. package/fesm2022/koobiq-components-file-upload.mjs +20 -20
  147. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  148. package/fesm2022/koobiq-components-filter-bar.mjs +75 -58
  149. package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
  150. package/fesm2022/koobiq-components-form-field.mjs +100 -49
  151. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  152. package/fesm2022/koobiq-components-icon.mjs +2 -2
  153. package/fesm2022/koobiq-components-icon.mjs.map +1 -1
  154. package/fesm2022/koobiq-components-input.mjs +14 -9
  155. package/fesm2022/koobiq-components-input.mjs.map +1 -1
  156. package/fesm2022/koobiq-components-markdown.mjs +2 -2
  157. package/fesm2022/koobiq-components-markdown.mjs.map +1 -1
  158. package/fesm2022/koobiq-components-modal.mjs +19 -17
  159. package/fesm2022/koobiq-components-modal.mjs.map +1 -1
  160. package/fesm2022/koobiq-components-navbar.mjs +2 -2
  161. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  162. package/fesm2022/koobiq-components-popover.mjs +4 -4
  163. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  164. package/fesm2022/koobiq-components-scrollbar.mjs +4 -4
  165. package/fesm2022/koobiq-components-scrollbar.mjs.map +1 -1
  166. package/fesm2022/koobiq-components-select.mjs +23 -10
  167. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  168. package/fesm2022/koobiq-components-sidebar.mjs +45 -26
  169. package/fesm2022/koobiq-components-sidebar.mjs.map +1 -1
  170. package/fesm2022/koobiq-components-sidepanel.mjs +24 -12
  171. package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
  172. package/fesm2022/koobiq-components-splitter.mjs.map +1 -1
  173. package/fesm2022/koobiq-components-tabs.mjs +31 -31
  174. package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
  175. package/fesm2022/koobiq-components-tags.mjs +13 -13
  176. package/fesm2022/koobiq-components-tags.mjs.map +1 -1
  177. package/fesm2022/koobiq-components-textarea.mjs +5 -3
  178. package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
  179. package/fesm2022/koobiq-components-timepicker.mjs.map +1 -1
  180. package/fesm2022/koobiq-components-timezone.mjs +2 -2
  181. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  182. package/fesm2022/koobiq-components-tooltip.mjs +2 -2
  183. package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
  184. package/fesm2022/koobiq-components-tree-select.mjs +10 -8
  185. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  186. package/fesm2022/koobiq-components-tree.mjs +3 -3
  187. package/fesm2022/koobiq-components-tree.mjs.map +1 -1
  188. package/fesm2022/koobiq-components-username.mjs +308 -0
  189. package/fesm2022/koobiq-components-username.mjs.map +1 -0
  190. package/file-upload/_file-upload-theme.scss +1 -1
  191. package/file-upload/file-drop.d.ts +1 -1
  192. package/file-upload/multiple-file-upload.component.d.ts +1 -1
  193. package/file-upload/single-file-upload.component.d.ts +2 -2
  194. package/filter-bar/pipes/pipe-date.d.ts +3 -1
  195. package/filter-bar/pipes/pipe-datetime.d.ts +3 -1
  196. package/filter-bar/pipes/pipe-multi-select.d.ts +0 -1
  197. package/filter-bar/pipes/pipe-multi-tree-select.d.ts +3 -2
  198. package/filter-bar/pipes/pipe-select.d.ts +0 -1
  199. package/filter-bar/pipes/pipe-tree-select.d.ts +3 -2
  200. package/form-field/_form-field-theme.scss +27 -18
  201. package/form-field/cleaner.d.ts +4 -2
  202. package/form-field/cleaner.scss +6 -2
  203. package/form-field/form-field.scss +5 -1
  204. package/form-field/password-hint.d.ts +7 -0
  205. package/form-field/password-toggle.d.ts +23 -3
  206. package/form-field/password-toggle.scss +4 -8
  207. package/form-field/reactive-password-hint.d.ts +1 -0
  208. package/icon/_icon-button-theme.scss +8 -2
  209. package/modal/modal.component.d.ts +6 -6
  210. package/package.json +28 -4
  211. package/popover/popover-confirm.component.d.ts +1 -1
  212. package/popover/popover.component.d.ts +2 -2
  213. package/schematics/ng-add/index.js +3 -3
  214. package/scrollbar/scrollbar.component.d.ts +4 -4
  215. package/select/select.component.d.ts +14 -2
  216. package/sidebar/sidebar.component.d.ts +31 -5
  217. package/sidepanel/sidepanel-container.component.d.ts +9 -0
  218. package/sidepanel/sidepanel-ref.d.ts +3 -3
  219. package/splitter/splitter.component.d.ts +2 -2
  220. package/tabs/tab-group.component.d.ts +1 -1
  221. package/tabs/tab.component.d.ts +1 -1
  222. package/tags/tag-input.d.ts +1 -1
  223. package/tags/tag-list.component.d.ts +1 -1
  224. package/timepicker/timepicker.directive.d.ts +1 -1
  225. package/tooltip/tooltip.component.d.ts +2 -2
  226. package/tree/tree-selection.component.d.ts +1 -1
  227. package/tree-select/tree-select.component.d.ts +1 -1
  228. package/username/constants.d.ts +15 -0
  229. package/username/index.d.ts +5 -0
  230. package/username/module.d.ts +8 -0
  231. package/username/types.d.ts +62 -0
  232. package/username/username-tokens.scss +6 -0
  233. package/username/username.d.ts +68 -0
  234. package/username/username.pipe.d.ts +23 -0
  235. package/username/username.scss +107 -0
@@ -1 +1 @@
1
- {"version":3,"file":"koobiq-components-actions-panel.mjs","sources":["../../../packages/components/actions-panel/actions-panel-config.ts","../../../packages/components/actions-panel/actions-panel-container.ts","../../../packages/components/actions-panel/actions-panel-ref.ts","../../../packages/components/actions-panel/actions-panel.ts","../../../packages/components/actions-panel/module.ts","../../../packages/components/actions-panel/koobiq-components-actions-panel.ts"],"sourcesContent":["import { Direction } from '@angular/cdk/bidi';\nimport { Overlay, ScrollStrategy } from '@angular/cdk/overlay';\nimport { ElementRef, InjectionToken, Injector, Provider } from '@angular/core';\n\n/** Injection token that can be used to specify default actions panel config. */\nexport const KBQ_ACTIONS_PANEL_DEFAULT_CONFIG = new InjectionToken<KbqActionsPanelConfig>(\n 'KBQ_ACTIONS_PANEL_DEFAULT_CONFIG',\n { factory: () => new KbqActionsPanelConfig() }\n);\n\n/**\n * Utility for providing default actions panel config.\n *\n * @see `KBQ_ACTIONS_PANEL_DEFAULT_CONFIG`\n */\nexport const kbqActionsPanelDefaultConfigProvider = <D>(config: KbqActionsPanelConfig<D>): Provider => ({\n provide: KBQ_ACTIONS_PANEL_DEFAULT_CONFIG,\n useValue: config\n});\n\n/**\n * Configuration for opened actions panel.\n * Based on cdk `DialogConfig`.\n *\n * @see `DialogConfig`\n *\n */\nexport class KbqActionsPanelConfig<D = unknown> {\n /**\n * Injector used for the instantiation of the component to be attached.\n */\n injector?: Injector;\n\n /**\n * Data being injected into the child component.\n *\n * @see `KBQ_ACTIONS_PANEL_DATA`\n */\n data?: D | null = null;\n\n /** Extra CSS classes to be added to the actions panel container. */\n containerClass?: string | string[];\n\n /**\n * Whether the actions panel should be closed of when the user goes backwards/forwards in history.\n * NOTE! This does not apply to router navigation.\n *\n * @default true\n */\n closeOnNavigation?: boolean = true;\n\n /**\n * Overlay container element in which the actions panel are rendered.\n *\n * @default `document.body`\n */\n overlayContainer?: ElementRef<HTMLElement>;\n\n /**\n * Extra CSS classes to be added to the overlay panel.\n */\n overlayPanelClass?: string | string[];\n\n /**\n * Width of the actions panel.\n */\n width?: string;\n\n /**\n * Min-width of the actions panel.\n * If a number is provided, assumes pixel units.\n */\n minWidth?: number | string;\n\n /**\n * Max-width of the actions panel.\n * If a number is provided, assumes pixel units.\n */\n maxWidth?: number | string;\n\n /**\n * Direction of the text in the actions panel.\n *\n * @default 'ltr'\n */\n direction?: Direction = 'ltr';\n\n /**\n * Scroll strategy to be used for the actions panel.\n *\n * @default `RepositionScrollStrategy`\n */\n scrollStrategy?: (overlay: Overlay) => ScrollStrategy = (overlay) => overlay.scrollStrategies.reposition();\n\n /**\n * Whether the user can use ESC or click on close button to close the actions panel.\n *\n * @default false\n */\n disableClose?: boolean = false;\n}\n","import {\n animate,\n animateChild,\n AnimationEvent,\n group,\n query,\n state,\n style,\n transition,\n trigger\n} from '@angular/animations';\nimport { CdkDialogContainer } from '@angular/cdk/dialog';\nimport { CdkPortalOutlet } from '@angular/cdk/portal';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n inject,\n InjectionToken,\n OnDestroy,\n Provider,\n Renderer2,\n ViewEncapsulation\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport {\n KBQ_LOCALE_SERVICE,\n KbqActionsPanelLocaleConfiguration,\n KbqAnimationCurves,\n KbqAnimationDurations,\n ruRULocaleData\n} from '@koobiq/components/core';\nimport { KbqDividerModule } from '@koobiq/components/divider';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqToolTipModule } from '@koobiq/components/tooltip';\nimport { map, of } from 'rxjs';\nimport { KbqActionsPanel } from './actions-panel';\nimport { KbqActionsPanelConfig } from './actions-panel-config';\n\n/** Localization configuration provider. */\nexport const KBQ_ACTIONS_PANEL_LOCALE_CONFIGURATION = new InjectionToken<KbqActionsPanelLocaleConfiguration>(\n 'KBQ_ACTIONS_PANEL_LOCALE_CONFIGURATION',\n { factory: () => ruRULocaleData.actionsPanel }\n);\n\n/** Utility provider for `KBQ_ACTIONS_PANEL_LOCALE_CONFIGURATION`. */\nexport const kbqActionsPanelLocaleConfigurationProvider = (\n configuration: KbqActionsPanelLocaleConfiguration\n): Provider => ({\n provide: KBQ_ACTIONS_PANEL_LOCALE_CONFIGURATION,\n useValue: configuration\n});\n\n/**\n * Animation that shows and hides the actions panel.\n */\nconst KBQ_ACTIONS_PANEL_CONTAINER_ANIMATION = trigger('state', [\n state('void, hidden', style({ transform: 'translateY(100%)' })),\n state('visible', style({ transform: 'translateY(0%)' })),\n transition(\n 'visible => void, visible => hidden',\n group([\n animate(`${KbqAnimationDurations.Entering} ${KbqAnimationCurves.StandardCurve}`),\n query('@*', animateChild(), { optional: true })\n ])\n ),\n transition(\n 'void => visible',\n group([\n animate(`${KbqAnimationDurations.Exiting} ${KbqAnimationCurves.StandardCurve}`),\n query('@*', animateChild(), { optional: true })\n ])\n )\n]);\n\n/**\n * Internal component that wraps user-provided actions panel content.\n *\n * @docs-private\n */\n@Component({\n standalone: true,\n imports: [\n CdkPortalOutlet,\n KbqDividerModule,\n KbqButtonModule,\n KbqIconModule,\n KbqToolTipModule\n ],\n selector: 'kbq-actions-panel-container',\n template: `\n <div class=\"kbq-actions-panel-container__content\">\n <ng-template cdkPortalOutlet />\n </div>\n @if (!config.disableClose) {\n <kbq-divider class=\"kbq-actions-panel-container__vertical-divider\" [vertical]=\"true\" />\n <button\n class=\"kbq-actions-panel-container__close-button\"\n [kbqTooltip]=\"localeConfiguration()!.closeTooltip\"\n [kbqTooltipOffset]=\"16\"\n (click)=\"close()\"\n color=\"contrast\"\n kbq-button\n >\n <i kbq-icon=\"kbq-xmark-circle_16\"></i>\n </button>\n }\n `,\n styleUrls: [\n './actions-panel-tokens.scss',\n './actions-panel-container.scss'\n ],\n animations: [KBQ_ACTIONS_PANEL_CONTAINER_ANIMATION],\n host: {\n class: 'kbq-actions-panel-container',\n '[class.kbq-actions-panel-container_rtl]': 'config.direction === \"rtl\"',\n '[@state]': 'animationState',\n '(@state.start)': 'onAnimationStart($event)',\n '(@state.done)': 'onAnimationDone($event)',\n '(keydown.escape)': 'handleEscape($event)'\n },\n // Uses the `Default` change detection strategy as parent `CdkDialogContainer`:\n // https://github.com/angular/components/blob/18.2.14/src/cdk/dialog/dialog-container.ts#L60\n changeDetection: ChangeDetectionStrategy.Default,\n encapsulation: ViewEncapsulation.None\n})\nexport class KbqActionsPanelContainer extends CdkDialogContainer implements OnDestroy {\n /**\n * The state of the actions panel animations.\n *\n * @docs-private\n */\n protected animationState: 'void' | 'visible' | 'hidden' = 'void';\n\n /**\n * Emits whenever the state of the animation changes.\n *\n * @docs-private\n */\n readonly animationStateChanged = new EventEmitter<AnimationEvent>();\n\n /** Whether the actions panel container has been destroyed. */\n private destroyed: boolean;\n\n /**\n * Actions panel configuration.\n *\n * @docs-private\n */\n protected readonly config = inject(KbqActionsPanelConfig);\n\n private readonly actionsPanel = inject(KbqActionsPanel);\n private readonly renderer = inject(Renderer2);\n private readonly localeService = inject(KBQ_LOCALE_SERVICE, { optional: true });\n\n /**\n * Actions panel locale configuration.\n *\n * @docs-private\n */\n protected readonly localeConfiguration = toSignal<KbqActionsPanelLocaleConfiguration>(\n this.localeService\n ? this.localeService.changes.pipe(map(() => this.localeService!.getParams('actionsPanel')))\n : of(inject(KBQ_ACTIONS_PANEL_LOCALE_CONFIGURATION))\n );\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n this.destroyed = true;\n }\n\n /**\n * Close the actions panel.\n *\n * @docs-private\n */\n protected close(): void {\n this.actionsPanel.close();\n }\n\n /**\n * Start animation of the actions panel entrance into view.\n *\n * @docs-private\n */\n startOpenAnimation(): void {\n if (!this.destroyed) {\n this.animationState = 'visible';\n // animationState lives in host bindings and `detectChanges` does not refresh host bindings so we have to\n // call `markForCheck` to ensure the host view is refreshed eventually.\n this._changeDetectorRef.markForCheck();\n this._changeDetectorRef.detectChanges();\n }\n }\n\n /**\n * Start animation of the actions panel exiting from view.\n *\n * @docs-private\n */\n startCloseAnimation(): void {\n if (!this.destroyed) {\n this.animationState = 'hidden';\n this._changeDetectorRef.markForCheck();\n }\n }\n\n /**\n * Handles animation done events.\n *\n * @docs-private\n */\n protected onAnimationDone(event: AnimationEvent): void {\n if (event.toState === 'visible') {\n this._trapFocus();\n }\n\n this.animationStateChanged.emit(event);\n }\n\n /**\n * Handles animation start events.\n *\n * @docs-private\n */\n protected onAnimationStart(event: AnimationEvent): void {\n this.animationStateChanged.emit(event);\n }\n\n /**\n * Handles escape key events.\n *\n * @docs-private\n */\n protected handleEscape(event: KeyboardEvent): void {\n if (!this.config.disableClose) {\n event.preventDefault();\n this.close();\n }\n }\n\n /**\n * @docs-private\n */\n protected override _contentAttached(): void {\n this.applyContainerClass();\n }\n\n private applyContainerClass(): void {\n const { containerClass } = this.config;\n\n if (containerClass) {\n if (Array.isArray(containerClass)) {\n containerClass.forEach((cssClass) => this.renderer.addClass(this._elementRef.nativeElement, cssClass));\n } else {\n this.renderer.addClass(this._elementRef.nativeElement, containerClass);\n }\n }\n }\n}\n","import { DialogRef } from '@angular/cdk/dialog';\nimport { filter, Observable, Subject, take } from 'rxjs';\nimport { KbqActionsPanelContainer } from './actions-panel-container';\n\n/**\n * Reference to actions panel opened by `KbqActionsPanel` service.\n */\nexport class KbqActionsPanelRef<I = unknown, R = unknown> {\n /**\n * Instance of the component into which the actions panel content is projected.\n *\n * @docs-private\n */\n containerInstance: KbqActionsPanelContainer;\n\n /** Gets an observable that is notified when the actions panel is finished closing. */\n get afterClosed(): Observable<R | undefined> {\n return this.dialogRef.closed;\n }\n\n /** Gets an observable that emits when keydown events are targeted on the overlay. */\n get keydownEvents(): Observable<KeyboardEvent> {\n return this.dialogRef.keydownEvents;\n }\n\n /** Gets an observable that is notified when the actions panel has opened and appeared. */\n get afterOpened(): Observable<void> {\n return this._afterOpened;\n }\n\n private readonly _afterOpened = new Subject<void>();\n\n /** Result to be passed down to the `afterClosed` stream. */\n private result: R | undefined;\n\n /** Handle to the timeout that's running as a fallback in case the close animation doesn't fire. */\n private closeAnimationFallbackTimeout: ReturnType<typeof setTimeout>;\n\n constructor(\n private readonly dialogRef: DialogRef<R, I>,\n containerInstance: KbqActionsPanelContainer\n ) {\n this.containerInstance = containerInstance;\n this.handleAnimation();\n this.handleOverlayDetachments();\n }\n\n /** Closes the actions panel. */\n close(result?: R): void {\n if (!this.containerInstance) {\n return;\n }\n\n this.containerInstance.animationStateChanged\n .pipe(\n filter((event) => event.phaseName === 'start'),\n take(1)\n )\n .subscribe(({ totalTime }) => {\n this.closeAnimationFallbackTimeout = setTimeout(\n () => this.dialogRef.close(this.result),\n totalTime + 100\n );\n });\n\n this.result = result;\n this.containerInstance.startCloseAnimation();\n this.containerInstance = null!;\n }\n\n private handleAnimation(): void {\n this.containerInstance.animationStateChanged\n .pipe(\n filter((event) => event.phaseName === 'done' && event.toState === 'visible'),\n take(1)\n )\n .subscribe(() => {\n this._afterOpened.next();\n this._afterOpened.complete();\n });\n\n this.containerInstance.animationStateChanged\n .pipe(\n filter((event) => event.phaseName === 'done' && event.toState === 'hidden'),\n take(1)\n )\n .subscribe(() => {\n clearTimeout(this.closeAnimationFallbackTimeout);\n this.dialogRef.close(this.result);\n });\n }\n\n private handleOverlayDetachments(): void {\n this.dialogRef.overlayRef\n .detachments()\n .pipe(take(1))\n .subscribe(() => {\n this.dialogRef.close(this.result);\n });\n }\n}\n","import { Dialog } from '@angular/cdk/dialog';\nimport { ComponentType, Overlay, OverlayContainer } from '@angular/cdk/overlay';\nimport { inject, Injectable, InjectionToken, Injector, OnDestroy, TemplateRef } from '@angular/core';\nimport { KBQ_ACTIONS_PANEL_DEFAULT_CONFIG, KbqActionsPanelConfig } from './actions-panel-config';\nimport { KbqActionsPanelContainer } from './actions-panel-container';\nimport { KbqActionsPanelRef } from './actions-panel-ref';\n\n/** Injection token that can be used to access the data that was passed in to actions panel. */\nexport const KBQ_ACTIONS_PANEL_DATA = new InjectionToken('KBQ_ACTIONS_PANEL_DATA');\n\n/**\n * Context for actions panel template.\n */\nexport type KbqActionsPanelTemplateContext<T = unknown, D = unknown, R = unknown> = {\n /**\n * Data passed to actions panel.\n *\n * Example:\n *\n * ```html\n * <ng-template #actionsPanel let-data>{{ data.KEY }}</ng-template>\n * ````\n */\n $implicit?: D | null;\n /**\n * Data passed to actions panel.\n *\n * Example:\n *\n * ```html\n * <ng-template #actionsPanel let-data=\"data\">{{ data.KEY }}</ng-template>\n * ````\n */\n data?: D | null;\n /**\n * Opened actions panel reference.\n *\n * Example:\n *\n * ```html\n * <ng-template #actionsPanel let-actionsPanelRef=\"actionsPanelRef\">\n * <button (click)=\"actionsPanelRef.close()\">close</button>\n * </ng-template>\n * ````\n */\n actionsPanelRef: KbqActionsPanelRef<T, R>;\n};\n\n/**\n * Selector for actions panel overlay.\n *\n * @docs-private\n */\nexport const KBQ_ACTIONS_PANEL_OVERLAY_SELECTOR = 'kbq-actions-panel-overlay';\n\n/**\n * Selector for custom actions panel overlay container.\n *\n * @docs-private\n */\nexport const KBQ_ACTIONS_PANEL_OVERLAY_CONTAINER_SELECTOR = 'kbq-actions-panel-overlay-container';\n\n/**\n * Service for opening actions panel.\n */\n@Injectable({ providedIn: 'root' })\nexport class KbqActionsPanel implements OnDestroy {\n private readonly injector = inject(Injector);\n private readonly overlay = inject(Overlay);\n private readonly overlayContainer = inject(OverlayContainer);\n private readonly dialog = inject(Dialog);\n private readonly defaultConfig = inject(KBQ_ACTIONS_PANEL_DEFAULT_CONFIG);\n\n /** The reference to the currently opened actions panel. */\n private openedActionsPanelRef: KbqActionsPanelRef | null = null;\n\n ngOnDestroy() {\n this.close();\n }\n\n /**\n * Opens actions panel.\n *\n * @param componentOrTemplateRef Component to be opened into the actions panel.\n * @param config Additional configuration options for the actions panel.\n * @returns A reference to the opened actions panel.\n */\n open<T, D = unknown, R = unknown>(\n component: ComponentType<T>,\n config?: KbqActionsPanelConfig<D>\n ): KbqActionsPanelRef<T, R>;\n\n /**\n * Opens actions panel.\n *\n * @param template TemplateRef to be used as the content.\n * @param config Additional configuration options for the actions panel.\n * @returns A reference to the opened actions panel.\n */\n open<T, D = unknown, R = unknown>(\n template: TemplateRef<T>,\n config?: KbqActionsPanelConfig<D>\n ): KbqActionsPanelRef<T, R>;\n\n open<T, D = unknown, R = unknown>(\n componentOrTemplateRef: ComponentType<T> | TemplateRef<T>,\n config?: KbqActionsPanelConfig<D>\n ): KbqActionsPanelRef<T, R> {\n const _config: KbqActionsPanelConfig<D> = {\n ...(this.defaultConfig as KbqActionsPanelConfig<D>),\n ...config\n };\n const actionsPanelRef = this.openDialog<T, D, R>(componentOrTemplateRef, _config);\n\n actionsPanelRef.afterClosed.subscribe(() => {\n if (this.openedActionsPanelRef === actionsPanelRef) {\n this.openedActionsPanelRef = null;\n }\n });\n\n if (this.openedActionsPanelRef) {\n this.openedActionsPanelRef.afterClosed.subscribe(() => {\n actionsPanelRef.containerInstance?.startOpenAnimation();\n });\n this.openedActionsPanelRef.close();\n } else {\n actionsPanelRef.containerInstance.startOpenAnimation();\n }\n\n this.openedActionsPanelRef = actionsPanelRef as KbqActionsPanelRef;\n\n return actionsPanelRef;\n }\n\n /** Closes the currently opened actions panel. */\n close<R>(result?: R): void {\n this.openedActionsPanelRef?.close(result);\n }\n\n private openDialog<T, D = unknown, R = unknown>(\n componentOrTemplateRef: ComponentType<T> | TemplateRef<T>,\n config: KbqActionsPanelConfig<D> = {}\n ): KbqActionsPanelRef<T, R> {\n let actionsPanelRef!: KbqActionsPanelRef<T, R>;\n\n if (config.overlayContainer) {\n // We should override protected `_containerElement` property to set custom container without creating\n // new `OverlayContainer` instance.\n this.overlayContainer['_containerElement'] = config.overlayContainer.nativeElement;\n }\n\n const overlayContainerElement = this.overlayContainer.getContainerElement();\n\n overlayContainerElement.classList.add(KBQ_ACTIONS_PANEL_OVERLAY_CONTAINER_SELECTOR);\n\n const dialogRef = this.dialog.open<R, D, T>(componentOrTemplateRef, {\n ...config,\n container: KbqActionsPanelContainer,\n restoreFocus: false,\n autoFocus: null!,\n hasBackdrop: false,\n // Disable closing since we need to sync it up to the animation ourselves\n closeOnOverlayDetachments: false,\n // Disable closing since we need to sync it up to the animation ourselves\n closeOnDestroy: false,\n // Disable closing since we need to sync it up to the animation ourselves\n disableClose: true,\n scrollStrategy: config.scrollStrategy && config.scrollStrategy(this.overlay),\n positionStrategy: this.overlay.position().global().centerHorizontally().bottom(),\n templateContext: () => {\n return {\n $implicit: config.data,\n data: config.data,\n actionsPanelRef\n } satisfies KbqActionsPanelTemplateContext<T, D, R>;\n },\n injector: Injector.create({\n parent: config.injector || this.injector,\n providers: [{ provide: KbqActionsPanelConfig, useValue: config }]\n }),\n providers: (dialogRef, _dialogConfig, container) => {\n actionsPanelRef = new KbqActionsPanelRef<T, R>(dialogRef, container as KbqActionsPanelContainer);\n\n return [\n { provide: KbqActionsPanelRef, useValue: actionsPanelRef },\n { provide: KBQ_ACTIONS_PANEL_DATA, useValue: config.data }\n ];\n }\n });\n\n dialogRef.addPanelClass(KBQ_ACTIONS_PANEL_OVERLAY_SELECTOR);\n\n if (config.overlayPanelClass) {\n dialogRef.addPanelClass(config.overlayPanelClass);\n }\n\n actionsPanelRef?.afterClosed.subscribe(() => {\n overlayContainerElement.classList.remove(KBQ_ACTIONS_PANEL_OVERLAY_CONTAINER_SELECTOR);\n });\n\n return actionsPanelRef;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { KbqActionsPanel } from './actions-panel';\nimport { KbqActionsPanelContainer } from './actions-panel-container';\n\nconst COMPONENTS = [\n KbqActionsPanelContainer\n];\n\n@NgModule({\n imports: COMPONENTS,\n exports: COMPONENTS,\n providers: [KbqActionsPanel]\n})\nexport class KbqActionsPanelModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"koobiq-components-actions-panel.mjs","sources":["../../../packages/components/actions-panel/actions-panel-config.ts","../../../packages/components/actions-panel/actions-panel-container.ts","../../../packages/components/actions-panel/actions-panel-ref.ts","../../../packages/components/actions-panel/actions-panel.ts","../../../packages/components/actions-panel/module.ts","../../../packages/components/actions-panel/koobiq-components-actions-panel.ts"],"sourcesContent":["import { Direction } from '@angular/cdk/bidi';\nimport { Overlay, ScrollStrategy } from '@angular/cdk/overlay';\nimport { ElementRef, InjectionToken, Injector, Provider } from '@angular/core';\n\n/** Injection token that can be used to specify default actions panel config. */\nexport const KBQ_ACTIONS_PANEL_DEFAULT_CONFIG = new InjectionToken<KbqActionsPanelConfig>(\n 'KBQ_ACTIONS_PANEL_DEFAULT_CONFIG',\n { factory: () => new KbqActionsPanelConfig() }\n);\n\n/**\n * Utility for providing default actions panel config.\n *\n * @see `KBQ_ACTIONS_PANEL_DEFAULT_CONFIG`\n */\nexport const kbqActionsPanelDefaultConfigProvider = <D>(config: KbqActionsPanelConfig<D>): Provider => ({\n provide: KBQ_ACTIONS_PANEL_DEFAULT_CONFIG,\n useValue: config\n});\n\n/**\n * Configuration for opened actions panel.\n * Based on cdk `DialogConfig`.\n *\n * @see `DialogConfig`\n *\n */\nexport class KbqActionsPanelConfig<D = unknown> {\n /**\n * Injector used for the instantiation of the component to be attached.\n */\n injector?: Injector;\n\n /**\n * Data being injected into the child component.\n *\n * @see `KBQ_ACTIONS_PANEL_DATA`\n */\n data?: D | null = null;\n\n /** Extra CSS classes to be added to the actions panel container. */\n containerClass?: string | string[];\n\n /**\n * Whether the actions panel should be closed of when the user goes backwards/forwards in history.\n * NOTE! This does not apply to router navigation.\n *\n * @default true\n */\n closeOnNavigation?: boolean = true;\n\n /**\n * Element in which the actions panel overlay will be connected to.\n */\n overlayContainer?: ElementRef<HTMLElement>;\n\n /**\n * Extra CSS classes to be added to the overlay panel.\n */\n overlayPanelClass?: string | string[];\n\n /**\n * Width of the actions panel.\n */\n width?: string;\n\n /**\n * Min-width of the actions panel.\n * If a number is provided, assumes pixel units.\n */\n minWidth?: number | string;\n\n /**\n * Max-width of the actions panel.\n * If a number is provided, assumes pixel units.\n *\n * NOTE: this property is ignored if the `overlayContainer` property is provided, and will be calculated based on\n * the width of the `overlayContainer`.\n */\n maxWidth?: number | string;\n\n /**\n * Direction of the text in the actions panel.\n *\n * @default 'ltr'\n */\n direction?: Direction = 'ltr';\n\n /**\n * Scroll strategy to be used for the actions panel.\n *\n * @default `RepositionScrollStrategy`\n */\n scrollStrategy?: (overlay: Overlay) => ScrollStrategy = (overlay) => overlay.scrollStrategies.reposition();\n\n /**\n * Whether the user can use ESC or click on close button to close the actions panel.\n *\n * @default false\n */\n disableClose?: boolean = false;\n}\n","import {\n animate,\n animateChild,\n AnimationEvent,\n group,\n query,\n state,\n style,\n transition,\n trigger\n} from '@angular/animations';\nimport { CdkDialogContainer } from '@angular/cdk/dialog';\nimport { CdkPortalOutlet } from '@angular/cdk/portal';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n inject,\n InjectionToken,\n OnDestroy,\n Provider,\n Renderer2,\n ViewEncapsulation\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport {\n KBQ_LOCALE_SERVICE,\n KbqActionsPanelLocaleConfiguration,\n KbqAnimationCurves,\n KbqAnimationDurations,\n ruRULocaleData\n} from '@koobiq/components/core';\nimport { KbqDividerModule } from '@koobiq/components/divider';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqToolTipModule } from '@koobiq/components/tooltip';\nimport { map, of } from 'rxjs';\nimport { KbqActionsPanel } from './actions-panel';\nimport { KbqActionsPanelConfig } from './actions-panel-config';\n\n/** Localization configuration provider. */\nexport const KBQ_ACTIONS_PANEL_LOCALE_CONFIGURATION = new InjectionToken<KbqActionsPanelLocaleConfiguration>(\n 'KBQ_ACTIONS_PANEL_LOCALE_CONFIGURATION',\n { factory: () => ruRULocaleData.actionsPanel }\n);\n\n/** Utility provider for `KBQ_ACTIONS_PANEL_LOCALE_CONFIGURATION`. */\nexport const kbqActionsPanelLocaleConfigurationProvider = (\n configuration: KbqActionsPanelLocaleConfiguration\n): Provider => ({\n provide: KBQ_ACTIONS_PANEL_LOCALE_CONFIGURATION,\n useValue: configuration\n});\n\n/**\n * Animation that shows and hides the actions panel.\n */\nconst KBQ_ACTIONS_PANEL_CONTAINER_ANIMATION = trigger('state', [\n state('void, hidden', style({ transform: 'translateY(100%)' })),\n state('visible', style({ transform: 'translateY(0%)' })),\n transition(\n 'visible => void, visible => hidden',\n group([\n animate(`${KbqAnimationDurations.Entering} ${KbqAnimationCurves.StandardCurve}`),\n query('@*', animateChild(), { optional: true })\n ])\n ),\n transition(\n 'void => visible',\n group([\n animate(`${KbqAnimationDurations.Exiting} ${KbqAnimationCurves.StandardCurve}`),\n query('@*', animateChild(), { optional: true })\n ])\n )\n]);\n\n/**\n * Internal component that wraps user-provided actions panel content.\n *\n * @docs-private\n */\n@Component({\n standalone: true,\n imports: [\n CdkPortalOutlet,\n KbqDividerModule,\n KbqButtonModule,\n KbqIconModule,\n KbqToolTipModule\n ],\n selector: 'kbq-actions-panel-container',\n template: `\n <div class=\"kbq-actions-panel-container__content\">\n <ng-template cdkPortalOutlet />\n </div>\n @if (!config.disableClose) {\n <kbq-divider class=\"kbq-actions-panel-container__vertical-divider\" [vertical]=\"true\" />\n <button\n class=\"kbq-actions-panel-container__close-button\"\n color=\"contrast\"\n kbq-button\n [kbqTooltip]=\"localeConfiguration()!.closeTooltip\"\n [kbqTooltipOffset]=\"16\"\n (click)=\"close()\"\n >\n <i kbq-icon=\"kbq-xmark-circle_16\"></i>\n </button>\n }\n `,\n styleUrls: [\n './actions-panel-tokens.scss',\n './actions-panel-container.scss'\n ],\n animations: [KBQ_ACTIONS_PANEL_CONTAINER_ANIMATION],\n host: {\n class: 'kbq-actions-panel-container',\n '[class.kbq-actions-panel-container_rtl]': 'config.direction === \"rtl\"',\n '[@state]': 'animationState',\n '(@state.start)': 'onAnimationStart($event)',\n '(@state.done)': 'onAnimationDone($event)',\n '(keydown.escape)': 'handleEscape($event)'\n },\n // Uses the `Default` change detection strategy as parent `CdkDialogContainer`:\n // https://github.com/angular/components/blob/18.2.14/src/cdk/dialog/dialog-container.ts#L60\n changeDetection: ChangeDetectionStrategy.Default,\n encapsulation: ViewEncapsulation.None\n})\nexport class KbqActionsPanelContainer extends CdkDialogContainer implements OnDestroy {\n /**\n * The state of the actions panel animations.\n *\n * @docs-private\n */\n protected animationState: 'void' | 'visible' | 'hidden' = 'void';\n\n /**\n * Emits whenever the state of the animation changes.\n *\n * @docs-private\n */\n readonly animationStateChanged = new EventEmitter<AnimationEvent>();\n\n /** Whether the actions panel container has been destroyed. */\n private destroyed: boolean;\n\n /**\n * Actions panel configuration.\n *\n * @docs-private\n */\n protected readonly config = inject(KbqActionsPanelConfig);\n\n private readonly actionsPanel = inject(KbqActionsPanel);\n private readonly renderer = inject(Renderer2);\n private readonly localeService = inject(KBQ_LOCALE_SERVICE, { optional: true });\n\n /**\n * Actions panel locale configuration.\n *\n * @docs-private\n */\n protected readonly localeConfiguration = toSignal<KbqActionsPanelLocaleConfiguration>(\n this.localeService\n ? this.localeService.changes.pipe(map(() => this.localeService!.getParams('actionsPanel')))\n : of(inject(KBQ_ACTIONS_PANEL_LOCALE_CONFIGURATION))\n );\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n this.destroyed = true;\n }\n\n /**\n * Close the actions panel.\n *\n * @docs-private\n */\n protected close(): void {\n this.actionsPanel.close();\n }\n\n /**\n * Start animation of the actions panel entrance into view.\n *\n * @docs-private\n */\n startOpenAnimation(): void {\n if (!this.destroyed) {\n this.animationState = 'visible';\n // animationState lives in host bindings and `detectChanges` does not refresh host bindings so we have to\n // call `markForCheck` to ensure the host view is refreshed eventually.\n this._changeDetectorRef.markForCheck();\n this._changeDetectorRef.detectChanges();\n }\n }\n\n /**\n * Start animation of the actions panel exiting from view.\n *\n * @docs-private\n */\n startCloseAnimation(): void {\n if (!this.destroyed) {\n this.animationState = 'hidden';\n this._changeDetectorRef.markForCheck();\n }\n }\n\n /**\n * Handles animation done events.\n *\n * @docs-private\n */\n protected onAnimationDone(event: AnimationEvent): void {\n if (event.toState === 'visible') {\n this._trapFocus();\n }\n\n this.animationStateChanged.emit(event);\n }\n\n /**\n * Handles animation start events.\n *\n * @docs-private\n */\n protected onAnimationStart(event: AnimationEvent): void {\n this.animationStateChanged.emit(event);\n }\n\n /**\n * Handles escape key events.\n *\n * @docs-private\n */\n protected handleEscape(event: KeyboardEvent): void {\n if (!this.config.disableClose) {\n event.preventDefault();\n this.close();\n }\n }\n\n /**\n * @docs-private\n */\n protected override _contentAttached(): void {\n this.applyContainerClass();\n }\n\n private applyContainerClass(): void {\n const { containerClass } = this.config;\n\n if (containerClass) {\n if (Array.isArray(containerClass)) {\n containerClass.forEach((cssClass) => this.renderer.addClass(this._elementRef.nativeElement, cssClass));\n } else {\n this.renderer.addClass(this._elementRef.nativeElement, containerClass);\n }\n }\n }\n}\n","import { DialogRef } from '@angular/cdk/dialog';\nimport { OverlayRef } from '@angular/cdk/overlay';\nimport { filter, Observable, Subject, take } from 'rxjs';\nimport { KbqActionsPanelContainer } from './actions-panel-container';\n\n/**\n * Reference to actions panel opened by `KbqActionsPanel` service.\n */\nexport class KbqActionsPanelRef<I = unknown, R = unknown> {\n /**\n * Instance of the component into which the actions panel content is projected.\n *\n * @docs-private\n */\n containerInstance: KbqActionsPanelContainer;\n\n /** Gets an observable that is notified when the actions panel is finished closing. */\n get afterClosed(): Observable<R | undefined> {\n return this.dialogRef.closed;\n }\n\n /** Gets an observable that emits when keydown events are targeted on the overlay. */\n get keydownEvents(): Observable<KeyboardEvent> {\n return this.dialogRef.keydownEvents;\n }\n\n /** Gets an observable that is notified when the actions panel has opened and appeared. */\n get afterOpened(): Observable<void> {\n return this._afterOpened;\n }\n\n /**\n * Gets the overlay reference for the actions panel.\n *\n * @docs-private\n */\n get overlayRef(): OverlayRef {\n return this.dialogRef.overlayRef;\n }\n\n /**\n * Gets the ID of the actions panel.\n *\n * @docs-private\n */\n get id(): string {\n return this.dialogRef.id;\n }\n\n private readonly _afterOpened = new Subject<void>();\n\n /** Result to be passed down to the `afterClosed` stream. */\n private result: R | undefined;\n\n /** Handle to the timeout that's running as a fallback in case the close animation doesn't fire. */\n private closeAnimationFallbackTimeout: ReturnType<typeof setTimeout>;\n\n constructor(\n private readonly dialogRef: DialogRef<R, I>,\n containerInstance: KbqActionsPanelContainer\n ) {\n this.containerInstance = containerInstance;\n this.handleAnimation();\n this.handleOverlayDetachments();\n }\n\n /** Closes the actions panel. */\n close(result?: R): void {\n if (!this.containerInstance) {\n return;\n }\n\n this.containerInstance.animationStateChanged\n .pipe(\n filter((event) => event.phaseName === 'start'),\n take(1)\n )\n .subscribe(({ totalTime }) => {\n this.closeAnimationFallbackTimeout = setTimeout(\n () => this.dialogRef.close(this.result),\n totalTime + 100\n );\n });\n\n this.result = result;\n this.containerInstance.startCloseAnimation();\n this.containerInstance = null!;\n }\n\n private handleAnimation(): void {\n this.containerInstance.animationStateChanged\n .pipe(\n filter((event) => event.phaseName === 'done' && event.toState === 'visible'),\n take(1)\n )\n .subscribe(() => {\n this._afterOpened.next();\n this._afterOpened.complete();\n });\n\n this.containerInstance.animationStateChanged\n .pipe(\n filter((event) => event.phaseName === 'done' && event.toState === 'hidden'),\n take(1)\n )\n .subscribe(() => {\n clearTimeout(this.closeAnimationFallbackTimeout);\n this.dialogRef.close(this.result);\n });\n }\n\n private handleOverlayDetachments(): void {\n this.dialogRef.overlayRef\n .detachments()\n .pipe(take(1))\n .subscribe(() => {\n this.dialogRef.close(this.result);\n });\n }\n}\n","import { coerceCssPixelValue } from '@angular/cdk/coercion';\nimport { Dialog } from '@angular/cdk/dialog';\nimport { SharedResizeObserver } from '@angular/cdk/observers/private';\nimport { ComponentType, Overlay } from '@angular/cdk/overlay';\nimport { inject, Injectable, InjectionToken, Injector, OnDestroy, TemplateRef } from '@angular/core';\nimport { takeUntil } from 'rxjs';\nimport { KBQ_ACTIONS_PANEL_DEFAULT_CONFIG, KbqActionsPanelConfig } from './actions-panel-config';\nimport { KbqActionsPanelContainer } from './actions-panel-container';\nimport { KbqActionsPanelRef } from './actions-panel-ref';\n\n/** Injection token that can be used to access the data that was passed in to actions panel. */\nexport const KBQ_ACTIONS_PANEL_DATA = new InjectionToken('KBQ_ACTIONS_PANEL_DATA');\n\n/**\n * Context for actions panel template.\n */\nexport type KbqActionsPanelTemplateContext<T = unknown, D = unknown, R = unknown> = {\n /**\n * Data passed to actions panel.\n *\n * Example:\n *\n * ```html\n * <ng-template #actionsPanel let-data>{{ data.KEY }}</ng-template>\n * ````\n */\n $implicit?: D | null;\n /**\n * Data passed to actions panel.\n *\n * Example:\n *\n * ```html\n * <ng-template #actionsPanel let-data=\"data\">{{ data.KEY }}</ng-template>\n * ````\n */\n data?: D | null;\n /**\n * Opened actions panel reference.\n *\n * Example:\n *\n * ```html\n * <ng-template #actionsPanel let-actionsPanelRef=\"actionsPanelRef\">\n * <button (click)=\"actionsPanelRef.close()\">close</button>\n * </ng-template>\n * ````\n */\n actionsPanelRef: KbqActionsPanelRef<T, R>;\n};\n\n/**\n * Selector for actions panel overlay.\n *\n * @docs-private\n */\nexport const KBQ_ACTIONS_PANEL_OVERLAY_SELECTOR = 'kbq-actions-panel-overlay';\n\n/**\n * Service for opening actions panel.\n */\n@Injectable({ providedIn: 'root' })\nexport class KbqActionsPanel implements OnDestroy {\n private readonly injector = inject(Injector);\n private readonly overlay = inject(Overlay);\n private readonly dialog = inject(Dialog);\n private readonly defaultConfig = inject(KBQ_ACTIONS_PANEL_DEFAULT_CONFIG);\n private readonly resizeObserver = inject(SharedResizeObserver);\n\n /** The reference to the currently opened actions panel. */\n private openedActionsPanelRef: KbqActionsPanelRef | null = null;\n\n ngOnDestroy() {\n this.close();\n }\n\n /**\n * Opens actions panel.\n *\n * @param componentOrTemplateRef Component to be opened into the actions panel.\n * @param config Additional configuration options for the actions panel.\n * @returns A reference to the opened actions panel.\n */\n open<T, D = unknown, R = unknown>(\n component: ComponentType<T>,\n config?: KbqActionsPanelConfig<D>\n ): KbqActionsPanelRef<T, R>;\n\n /**\n * Opens actions panel.\n *\n * @param template TemplateRef to be used as the content.\n * @param config Additional configuration options for the actions panel.\n * @returns A reference to the opened actions panel.\n */\n open<T, D = unknown, R = unknown>(\n template: TemplateRef<T>,\n config?: KbqActionsPanelConfig<D>\n ): KbqActionsPanelRef<T, R>;\n\n open<T, D = unknown, R = unknown>(\n componentOrTemplateRef: ComponentType<T> | TemplateRef<T>,\n config?: KbqActionsPanelConfig<D>\n ): KbqActionsPanelRef<T, R> {\n const _config: KbqActionsPanelConfig<D> = {\n ...(this.defaultConfig as KbqActionsPanelConfig<D>),\n ...config\n };\n const actionsPanelRef = this.openDialog<T, D, R>(componentOrTemplateRef, _config);\n\n actionsPanelRef.afterClosed.subscribe(() => {\n if (this.openedActionsPanelRef === actionsPanelRef) {\n this.openedActionsPanelRef = null;\n }\n });\n\n if (this.openedActionsPanelRef) {\n this.openedActionsPanelRef.afterClosed.subscribe(() => {\n actionsPanelRef.containerInstance?.startOpenAnimation();\n });\n this.openedActionsPanelRef.close();\n } else {\n actionsPanelRef.containerInstance.startOpenAnimation();\n }\n\n this.openedActionsPanelRef = actionsPanelRef as KbqActionsPanelRef;\n\n return actionsPanelRef;\n }\n\n /** Closes the currently opened actions panel. */\n close<R>(result?: R): void {\n this.openedActionsPanelRef?.close(result);\n }\n\n private openDialog<T, D = unknown, R = unknown>(\n componentOrTemplateRef: ComponentType<T> | TemplateRef<T>,\n config: KbqActionsPanelConfig<D> = {}\n ): KbqActionsPanelRef<T, R> {\n let actionsPanelRef!: KbqActionsPanelRef<T, R>;\n const { overlayContainer, overlayPanelClass } = config;\n\n this.dialog.open<R, D, T>(componentOrTemplateRef, {\n ...config,\n container: KbqActionsPanelContainer,\n restoreFocus: false,\n autoFocus: null!,\n hasBackdrop: false,\n // Disable closing since we need to sync it up to the animation ourselves\n closeOnOverlayDetachments: false,\n // Disable closing since we need to sync it up to the animation ourselves\n closeOnDestroy: false,\n // Disable closing since we need to sync it up to the animation ourselves\n disableClose: true,\n scrollStrategy: config.scrollStrategy && config.scrollStrategy(this.overlay),\n positionStrategy: overlayContainer\n ? this.overlay\n .position()\n .flexibleConnectedTo(overlayContainer)\n .withPositions([{ originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'bottom' }])\n .withFlexibleDimensions()\n .withPush(false)\n .withLockedPosition()\n .withGrowAfterOpen()\n : this.overlay.position().global().centerHorizontally().bottom(),\n templateContext: () => {\n return {\n $implicit: config.data,\n data: config.data,\n actionsPanelRef\n } satisfies KbqActionsPanelTemplateContext<T, D, R>;\n },\n injector: Injector.create({\n parent: config.injector || this.injector,\n providers: [{ provide: KbqActionsPanelConfig, useValue: config }]\n }),\n providers: (dialogRef, _dialogConfig, container) => {\n actionsPanelRef = new KbqActionsPanelRef<T, R>(dialogRef, container as KbqActionsPanelContainer);\n\n return [\n { provide: KbqActionsPanelRef, useValue: actionsPanelRef },\n { provide: KBQ_ACTIONS_PANEL_DATA, useValue: config.data }\n ];\n }\n });\n\n const { overlayRef } = actionsPanelRef;\n\n overlayRef.addPanelClass(KBQ_ACTIONS_PANEL_OVERLAY_SELECTOR);\n\n if (overlayPanelClass) overlayRef.addPanelClass(overlayPanelClass);\n\n if (overlayContainer) {\n const { afterClosed } = actionsPanelRef;\n\n this.resizeObserver\n .observe(overlayContainer.nativeElement)\n .pipe(takeUntil(afterClosed))\n .subscribe(() => {\n const { width: maxWidth } = overlayContainer.nativeElement.getBoundingClientRect();\n\n if (!maxWidth) return;\n\n overlayRef.overlayElement.style.maxWidth = coerceCssPixelValue(maxWidth);\n overlayRef.updatePosition();\n });\n }\n\n return actionsPanelRef;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { KbqActionsPanel } from './actions-panel';\nimport { KbqActionsPanelContainer } from './actions-panel-container';\n\nconst COMPONENTS = [\n KbqActionsPanelContainer\n];\n\n@NgModule({\n imports: COMPONENTS,\n exports: COMPONENTS,\n providers: [KbqActionsPanel]\n})\nexport class KbqActionsPanelModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAIA;MACa,gCAAgC,GAAG,IAAI,cAAc,CAC9D,kCAAkC,EAClC,EAAE,OAAO,EAAE,MAAM,IAAI,qBAAqB,EAAE,EAAE,EAChD;AAEF;;;;AAIG;MACU,oCAAoC,GAAG,CAAI,MAAgC,MAAgB;AACpG,IAAA,OAAO,EAAE,gCAAgC;AACzC,IAAA,QAAQ,EAAE,MAAM;AACnB,CAAA,EAAE;AAEH;;;;;;AAMG;MACU,qBAAqB,CAAA;AAAlC,IAAA,WAAA,GAAA;AAMI;;;;AAIG;QACH,IAAI,CAAA,IAAA,GAAc,IAAI,CAAC;AAKvB;;;;;AAKG;QACH,IAAiB,CAAA,iBAAA,GAAa,IAAI,CAAC;AAgCnC;;;;AAIG;QACH,IAAS,CAAA,SAAA,GAAe,KAAK,CAAC;AAE9B;;;;AAIG;AACH,QAAA,IAAA,CAAA,cAAc,GAA0C,CAAC,OAAO,KAAK,OAAO,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;AAE3G;;;;AAIG;QACH,IAAY,CAAA,YAAA,GAAa,KAAK,CAAC;KAClC;AAAA;;AC7DD;MACa,sCAAsC,GAAG,IAAI,cAAc,CACpE,wCAAwC,EACxC,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC,YAAY,EAAE,EAChD;AAEF;MACa,0CAA0C,GAAG,CACtD,aAAiD,MACrC;AACZ,IAAA,OAAO,EAAE,sCAAsC;AAC/C,IAAA,QAAQ,EAAE,aAAa;AAC1B,CAAA,EAAE;AAEH;;AAEG;AACH,MAAM,qCAAqC,GAAG,OAAO,CAAC,OAAO,EAAE;IAC3D,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAC/D,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC;AACxD,IAAA,UAAU,CACN,oCAAoC,EACpC,KAAK,CAAC;QACF,OAAO,CAAC,CAAG,EAAA,qBAAqB,CAAC,QAAQ,IAAI,kBAAkB,CAAC,aAAa,CAAA,CAAE,CAAC;QAChF,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAClD,KAAA,CAAC,CACL;AACD,IAAA,UAAU,CACN,iBAAiB,EACjB,KAAK,CAAC;QACF,OAAO,CAAC,CAAG,EAAA,qBAAqB,CAAC,OAAO,IAAI,kBAAkB,CAAC,aAAa,CAAA,CAAE,CAAC;QAC/E,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAClD,KAAA,CAAC,CACL;AACJ,CAAA,CAAC,CAAC;AAEH;;;;AAIG;AA+CG,MAAO,wBAAyB,SAAQ,kBAAkB,CAAA;AA9ChE,IAAA,WAAA,GAAA;;AA+CI;;;;AAIG;QACO,IAAc,CAAA,cAAA,GAAkC,MAAM,CAAC;AAEjE;;;;AAIG;AACM,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,YAAY,EAAkB,CAAC;AAKpE;;;;AAIG;AACgB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;AAEzC,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;AACvC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QAC7B,IAAa,CAAA,aAAA,GAAG,MAAM,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAEhF;;;;AAIG;AACgB,QAAA,IAAA,CAAA,mBAAmB,GAAG,QAAQ,CAC7C,IAAI,CAAC,aAAa;cACZ,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,aAAc,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC;cACzF,EAAE,CAAC,MAAM,CAAC,sCAAsC,CAAC,CAAC,CAC3D,CAAC;AA+FL,KAAA;IA7FY,WAAW,GAAA;QAChB,KAAK,CAAC,WAAW,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;KACzB;AAED;;;;AAIG;IACO,KAAK,GAAA;AACX,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;KAC7B;AAED;;;;AAIG;IACH,kBAAkB,GAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACjB,YAAA,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;;;AAGhC,YAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;AACvC,YAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,CAAC;SAC3C;KACJ;AAED;;;;AAIG;IACH,mBAAmB,GAAA;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACjB,YAAA,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC;AAC/B,YAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;SAC1C;KACJ;AAED;;;;AAIG;AACO,IAAA,eAAe,CAAC,KAAqB,EAAA;AAC3C,QAAA,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE;YAC7B,IAAI,CAAC,UAAU,EAAE,CAAC;SACrB;AAED,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC1C;AAED;;;;AAIG;AACO,IAAA,gBAAgB,CAAC,KAAqB,EAAA;AAC5C,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC1C;AAED;;;;AAIG;AACO,IAAA,YAAY,CAAC,KAAoB,EAAA;AACvC,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;YAC3B,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,KAAK,EAAE,CAAC;SAChB;KACJ;AAED;;AAEG;IACgB,gBAAgB,GAAA;QAC/B,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC9B;IAEO,mBAAmB,GAAA;AACvB,QAAA,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QAEvC,IAAI,cAAc,EAAE;AAChB,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;gBAC/B,cAAc,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC;aAC1G;iBAAM;AACH,gBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;aAC1E;SACJ;KACJ;kIApIQ,wBAAwB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAxB,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,EApCvB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,cAAA,EAAA,0BAAA,EAAA,aAAA,EAAA,yBAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,uCAAA,EAAA,8BAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,cAAA,EAAA,6BAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;AAiBT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,qrBAAA,EAAA,y1BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAxBG,eAAe,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,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,iBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,kBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAyBR,CAAC,qCAAqC,CAAC,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,OAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;4FAc1C,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBA9CpC,SAAS;AACM,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,IAAI,EACP,OAAA,EAAA;wBACL,eAAe;wBACf,gBAAgB;wBAChB,eAAe;wBACf,aAAa;wBACb,gBAAgB;AACnB,qBAAA,EAAA,QAAA,EACS,6BAA6B,EAC7B,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;KAiBT,EAKW,UAAA,EAAA,CAAC,qCAAqC,CAAC,EAC7C,IAAA,EAAA;AACF,wBAAA,KAAK,EAAE,6BAA6B;AACpC,wBAAA,yCAAyC,EAAE,4BAA4B;AACvE,wBAAA,UAAU,EAAE,gBAAgB;AAC5B,wBAAA,gBAAgB,EAAE,0BAA0B;AAC5C,wBAAA,eAAe,EAAE,yBAAyB;AAC1C,wBAAA,kBAAkB,EAAE,sBAAsB;AAC7C,qBAAA,EAAA,eAAA,EAGgB,uBAAuB,CAAC,OAAO,EACjC,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,MAAA,EAAA,CAAA,qrBAAA,EAAA,y1BAAA,CAAA,EAAA,CAAA;;;ACxHzC;;AAEG;MACU,kBAAkB,CAAA;;AAS3B,IAAA,IAAI,WAAW,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;KAChC;;AAGD,IAAA,IAAI,aAAa,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;KACvC;;AAGD,IAAA,IAAI,WAAW,GAAA;QACX,OAAO,IAAI,CAAC,YAAY,CAAC;KAC5B;AAED;;;;AAIG;AACH,IAAA,IAAI,UAAU,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;KACpC;AAED;;;;AAIG;AACH,IAAA,IAAI,EAAE,GAAA;AACF,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;KAC5B;IAUD,WACqB,CAAA,SAA0B,EAC3C,iBAA2C,EAAA;QAD1B,IAAS,CAAA,SAAA,GAAT,SAAS,CAAiB;AAT9B,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAQ,CAAC;AAYhD,QAAA,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAC3C,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,wBAAwB,EAAE,CAAC;KACnC;;AAGD,IAAA,KAAK,CAAC,MAAU,EAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YACzB,OAAO;SACV;QAED,IAAI,CAAC,iBAAiB,CAAC,qBAAqB;AACvC,aAAA,IAAI,CACD,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,SAAS,KAAK,OAAO,CAAC,EAC9C,IAAI,CAAC,CAAC,CAAC,CACV;AACA,aAAA,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,KAAI;YACzB,IAAI,CAAC,6BAA6B,GAAG,UAAU,CAC3C,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EACvC,SAAS,GAAG,GAAG,CAClB,CAAC;AACN,SAAC,CAAC,CAAC;AAEP,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,CAAC;AAC7C,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAK,CAAC;KAClC;IAEO,eAAe,GAAA;QACnB,IAAI,CAAC,iBAAiB,CAAC,qBAAqB;aACvC,IAAI,CACD,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,SAAS,KAAK,MAAM,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,EAC5E,IAAI,CAAC,CAAC,CAAC,CACV;aACA,SAAS,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;AACzB,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;AACjC,SAAC,CAAC,CAAC;QAEP,IAAI,CAAC,iBAAiB,CAAC,qBAAqB;aACvC,IAAI,CACD,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,SAAS,KAAK,MAAM,IAAI,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,EAC3E,IAAI,CAAC,CAAC,CAAC,CACV;aACA,SAAS,CAAC,MAAK;AACZ,YAAA,YAAY,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;YACjD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACtC,SAAC,CAAC,CAAC;KACV;IAEO,wBAAwB,GAAA;QAC5B,IAAI,CAAC,SAAS,CAAC,UAAU;AACpB,aAAA,WAAW,EAAE;AACb,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACb,SAAS,CAAC,MAAK;YACZ,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACtC,SAAC,CAAC,CAAC;KACV;AACJ;;AC7GD;MACa,sBAAsB,GAAG,IAAI,cAAc,CAAC,wBAAwB,EAAE;AAwCnF;;;;AAIG;AACI,MAAM,kCAAkC,GAAG,4BAA4B;AAE9E;;AAEG;MAEU,eAAe,CAAA;AAD5B,IAAA,WAAA,GAAA;AAEqB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC5B,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;AAC1B,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AACxB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gCAAgC,CAAC,CAAC;AACzD,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;;QAGvD,IAAqB,CAAA,qBAAA,GAA8B,IAAI,CAAC;AA4InE,KAAA;IA1IG,WAAW,GAAA;QACP,IAAI,CAAC,KAAK,EAAE,CAAC;KAChB;IA0BD,IAAI,CACA,sBAAyD,EACzD,MAAiC,EAAA;AAEjC,QAAA,MAAM,OAAO,GAA6B;YACtC,GAAI,IAAI,CAAC,aAA0C;AACnD,YAAA,GAAG,MAAM;SACZ,CAAC;QACF,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAU,sBAAsB,EAAE,OAAO,CAAC,CAAC;AAElF,QAAA,eAAe,CAAC,WAAW,CAAC,SAAS,CAAC,MAAK;AACvC,YAAA,IAAI,IAAI,CAAC,qBAAqB,KAAK,eAAe,EAAE;AAChD,gBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;aACrC;AACL,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC5B,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,SAAS,CAAC,MAAK;AAClD,gBAAA,eAAe,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,CAAC;AAC5D,aAAC,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;SACtC;aAAM;AACH,YAAA,eAAe,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,CAAC;SAC1D;AAED,QAAA,IAAI,CAAC,qBAAqB,GAAG,eAAqC,CAAC;AAEnE,QAAA,OAAO,eAAe,CAAC;KAC1B;;AAGD,IAAA,KAAK,CAAI,MAAU,EAAA;AACf,QAAA,IAAI,CAAC,qBAAqB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;KAC7C;AAEO,IAAA,UAAU,CACd,sBAAyD,EACzD,MAAA,GAAmC,EAAE,EAAA;AAErC,QAAA,IAAI,eAA0C,CAAC;AAC/C,QAAA,MAAM,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAAC;AAEvD,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAU,sBAAsB,EAAE;AAC9C,YAAA,GAAG,MAAM;AACT,YAAA,SAAS,EAAE,wBAAwB;AACnC,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,SAAS,EAAE,IAAK;AAChB,YAAA,WAAW,EAAE,KAAK;;AAElB,YAAA,yBAAyB,EAAE,KAAK;;AAEhC,YAAA,cAAc,EAAE,KAAK;;AAErB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;AAC5E,YAAA,gBAAgB,EAAE,gBAAgB;kBAC5B,IAAI,CAAC,OAAO;AACP,qBAAA,QAAQ,EAAE;qBACV,mBAAmB,CAAC,gBAAgB,CAAC;qBACrC,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;AACjG,qBAAA,sBAAsB,EAAE;qBACxB,QAAQ,CAAC,KAAK,CAAC;AACf,qBAAA,kBAAkB,EAAE;AACpB,qBAAA,iBAAiB,EAAE;AAC1B,kBAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,kBAAkB,EAAE,CAAC,MAAM,EAAE;YACpE,eAAe,EAAE,MAAK;gBAClB,OAAO;oBACH,SAAS,EAAE,MAAM,CAAC,IAAI;oBACtB,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,eAAe;iBACgC,CAAC;aACvD;AACD,YAAA,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC;AACtB,gBAAA,MAAM,EAAE,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ;gBACxC,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;aACpE,CAAC;YACF,SAAS,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,KAAI;gBAC/C,eAAe,GAAG,IAAI,kBAAkB,CAAO,SAAS,EAAE,SAAqC,CAAC,CAAC;gBAEjG,OAAO;AACH,oBAAA,EAAE,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,eAAe,EAAE;oBAC1D,EAAE,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE;iBAC7D,CAAC;aACL;AACJ,SAAA,CAAC,CAAC;AAEH,QAAA,MAAM,EAAE,UAAU,EAAE,GAAG,eAAe,CAAC;AAEvC,QAAA,UAAU,CAAC,aAAa,CAAC,kCAAkC,CAAC,CAAC;AAE7D,QAAA,IAAI,iBAAiB;AAAE,YAAA,UAAU,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;QAEnE,IAAI,gBAAgB,EAAE;AAClB,YAAA,MAAM,EAAE,WAAW,EAAE,GAAG,eAAe,CAAC;AAExC,YAAA,IAAI,CAAC,cAAc;AACd,iBAAA,OAAO,CAAC,gBAAgB,CAAC,aAAa,CAAC;AACvC,iBAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;iBAC5B,SAAS,CAAC,MAAK;AACZ,gBAAA,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,gBAAgB,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC;AAEnF,gBAAA,IAAI,CAAC,QAAQ;oBAAE,OAAO;gBAEtB,UAAU,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;gBACzE,UAAU,CAAC,cAAc,EAAE,CAAC;AAChC,aAAC,CAAC,CAAC;SACV;AAED,QAAA,OAAO,eAAe,CAAC;KAC1B;kIAnJQ,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAf,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,eAAe,cADF,MAAM,EAAA,CAAA,CAAA,EAAA;;4FACnB,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;;ACzDlC,MAAM,UAAU,GAAG;IACf,wBAAwB;CAC3B,CAAC;MAOW,qBAAqB,CAAA;kIAArB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;mIAArB,qBAAqB,EAAA,OAAA,EAAA,CAR9B,wBAAwB,CAAA,EAAA,OAAA,EAAA,CAAxB,wBAAwB,CAAA,EAAA,CAAA,CAAA,EAAA;AAQf,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,qBAAqB,EAFnB,SAAA,EAAA,CAAC,eAAe,CAAC,YAFnB,UAAU,CAAA,EAAA,CAAA,CAAA,EAAA;;4FAIV,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBALjC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE,UAAU;AACnB,oBAAA,OAAO,EAAE,UAAU;oBACnB,SAAS,EAAE,CAAC,eAAe,CAAC;AAC/B,iBAAA,CAAA;;;ACZD;;AAEG;;;;"}
@@ -327,16 +327,16 @@ class KbqButtonToggle {
327
327
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KbqButtonToggle, deps: [{ token: KbqButtonToggleGroup, optional: true }, { token: i0.ChangeDetectorRef }, { token: i1.FocusMonitor }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
328
328
  /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: KbqButtonToggle, selector: "kbq-button-toggle", inputs: { checked: "checked", value: "value", tabIndex: "tabIndex", disabled: "disabled" }, outputs: { change: "change" }, host: { properties: { "class": "\"kbq-button-toggle\" + iconType" }, classAttribute: "kbq-button-toggle" }, queries: [{ propertyName: "icons", predicate: KbqIcon, descendants: true }], viewQueries: [{ propertyName: "mcButton", first: true, predicate: KbqButton, descendants: true }], exportAs: ["kbqButtonToggle"], ngImport: i0, template: `
329
329
  <button
330
+ kbq-button
331
+ kbq-title
332
+ type="button"
330
333
  [kbqStyle]="'transparent'"
331
334
  [class.kbq-selected]="checked"
332
335
  [disabled]="disabled"
333
336
  [tabIndex]="tabIndex || 0"
334
337
  (click)="onToggleClick()"
335
- kbq-button
336
- kbq-title
337
- type="button"
338
338
  >
339
- <div class="kbq-button-toggle-wrapper" #kbqTitleText>
339
+ <div #kbqTitleText class="kbq-button-toggle-wrapper">
340
340
  <ng-content />
341
341
  </div>
342
342
  </button>
@@ -346,16 +346,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
346
346
  type: Component,
347
347
  args: [{ selector: 'kbq-button-toggle', exportAs: 'kbqButtonToggle', template: `
348
348
  <button
349
+ kbq-button
350
+ kbq-title
351
+ type="button"
349
352
  [kbqStyle]="'transparent'"
350
353
  [class.kbq-selected]="checked"
351
354
  [disabled]="disabled"
352
355
  [tabIndex]="tabIndex || 0"
353
356
  (click)="onToggleClick()"
354
- kbq-button
355
- kbq-title
356
- type="button"
357
357
  >
358
- <div class="kbq-button-toggle-wrapper" #kbqTitleText>
358
+ <div #kbqTitleText class="kbq-button-toggle-wrapper">
359
359
  <ng-content />
360
360
  </div>
361
361
  </button>
@@ -1 +1 @@
1
- {"version":3,"file":"koobiq-components-button-toggle.mjs","sources":["../../../packages/components/button-toggle/button-toggle.component.ts","../../../packages/components/button-toggle/button-toggle.module.ts","../../../packages/components/button-toggle/koobiq-components-button-toggle.ts"],"sourcesContent":["import { FocusMonitor } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n QueryList,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { KbqButton } from '@koobiq/components/button';\nimport { getNodesWithoutComments } from '@koobiq/components/core';\nimport { KbqIcon } from '@koobiq/components/icon';\n\n/** Acceptable types for a button toggle. */\nexport type ToggleType = 'checkbox' | 'radio';\n\n/**\n * Provider Expression that allows kbq-button-toggle-group to register as a ControlValueAccessor.\n * This allows it to support [(ngModel)].\n * @docs-private\n */\nexport const KBQ_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => KbqButtonToggleGroup),\n multi: true\n};\n\n/** Change event object emitted by MсButtonToggle. */\nexport class KbqButtonToggleChange {\n constructor(\n /** The MсButtonToggle that emits the event. */\n public source: KbqButtonToggle,\n /** The value assigned to the MсButtonToggle. */\n public value: any\n ) {}\n}\n\n/** Exclusive selection button toggle group that behaves like a radio-button group. */\n@Directive({\n selector: 'kbq-button-toggle-group',\n providers: [KBQ_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR],\n host: {\n class: 'kbq-button-toggle-group',\n '[class.kbq-button-toggle_vertical]': 'vertical'\n },\n exportAs: 'kbqButtonToggleGroup'\n})\nexport class KbqButtonToggleGroup implements ControlValueAccessor, OnInit, AfterContentInit {\n /** Whether the toggle group is vertical. */\n @Input()\n get vertical(): boolean {\n return this._vertical;\n }\n\n set vertical(value: boolean) {\n this._vertical = coerceBooleanProperty(value);\n }\n\n /** Value of the toggle group. */\n @Input()\n get value(): any {\n const selected = this.selectionModel ? this.selectionModel.selected : [];\n\n if (this.multiple) {\n return selected.map((toggle) => toggle.value);\n }\n\n return selected[0] ? selected[0].value : undefined;\n }\n\n set value(newValue: any) {\n this.setSelectionByValue(newValue);\n this.valueChange.emit(this.value);\n }\n\n /** Selected button toggles in the group. */\n get selected(): any {\n const selected = this.selectionModel.selected;\n\n return this.multiple ? selected : selected[0] || null;\n }\n\n /** Whether multiple button toggles can be selected. */\n @Input()\n get multiple(): boolean {\n return this._multiple;\n }\n\n set multiple(value: boolean) {\n this._multiple = coerceBooleanProperty(value);\n }\n\n /** Child button toggle buttons. */\n @ContentChildren(forwardRef(() => KbqButtonToggle)) buttonToggles: QueryList<KbqButtonToggle>;\n\n /** Whether multiple button toggle group is disabled. */\n @Input()\n get disabled(): boolean {\n return this._disabled;\n }\n\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n\n if (!this.buttonToggles) {\n return;\n }\n\n this.buttonToggles.forEach((toggle) => toggle.markForCheck());\n }\n\n /**\n * Event that emits whenever the value of the group changes.\n * Used to facilitate two-way data binding.\n * @docs-private\n */\n @Output() readonly valueChange = new EventEmitter<any>();\n\n /** Event emitted when the group's value changes. */\n @Output() readonly change: EventEmitter<KbqButtonToggleChange> = new EventEmitter<KbqButtonToggleChange>();\n private _vertical = false;\n private _multiple = false;\n private _disabled = false;\n private selectionModel: SelectionModel<KbqButtonToggle>;\n\n /**\n * Reference to the raw value that the consumer tried to assign. The real\n * value will exclude any values from this one that don't correspond to a\n * toggle. Useful for the cases where the value is assigned before the toggles\n * have been initialized or at the same that they're being swapped out.\n */\n private rawValue: any;\n\n constructor(private _changeDetector: ChangeDetectorRef) {}\n\n /**\n * The method to be called in order to update ngModel.\n * Now `ngModel` binding is not supported in multiple selection mode.\n */\n controlValueAccessorChangeFn: (value: any) => void = () => {};\n\n /** onTouch function registered via registerOnTouch (ControlValueAccessor). */\n onTouched: () => any = () => {};\n\n ngOnInit() {\n this.selectionModel = new SelectionModel<KbqButtonToggle>(this.multiple, undefined, false);\n }\n\n ngAfterContentInit() {\n this.selectionModel.select(...this.buttonToggles.filter((toggle) => toggle.checked));\n this.disabled = this._disabled;\n }\n\n /**\n * Sets the model value. Implemented as part of ControlValueAccessor.\n * @param value Value to be set to the model.\n */\n writeValue(value: any) {\n this.value = value;\n this._changeDetector.markForCheck();\n }\n\n // Implemented as part of ControlValueAccessor.\n registerOnChange(fn: (value: any) => void) {\n this.controlValueAccessorChangeFn = fn;\n }\n\n // Implemented as part of ControlValueAccessor.\n registerOnTouched(fn: any) {\n this.onTouched = fn;\n }\n\n // Implemented as part of ControlValueAccessor.\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n /** Dispatch change event with current selection and group value. */\n emitChangeEvent(): void {\n const selected = this.selected;\n const source = Array.isArray(selected) ? selected[selected.length - 1] : selected;\n const event = new KbqButtonToggleChange(source, this.value);\n\n this.controlValueAccessorChangeFn(event.value);\n this.change.emit(event);\n }\n\n /**\n * Syncs a button toggle's selected state with the model value.\n * @param toggle Toggle to be synced.\n * @param select Whether the toggle should be selected.\n * @param isUserInput Whether the change was a result of a user interaction.\n */\n syncButtonToggle(toggle: KbqButtonToggle, select: boolean, isUserInput = false) {\n // Deselect the currently-selected toggle, if we're in single-selection\n // mode and the button being toggled isn't selected at the moment.\n if (!this.multiple && this.selected && !toggle.checked) {\n (this.selected as KbqButtonToggle).checked = false;\n }\n\n if (select) {\n this.selectionModel.select(toggle);\n } else {\n this.selectionModel.deselect(toggle);\n }\n\n // Only emit the change event for user input.\n if (isUserInput) {\n this.emitChangeEvent();\n }\n\n // Note: we emit this one no matter whether it was a user interaction, because\n // it is used by Angular to sync up the two-way data binding.\n this.valueChange.emit(this.value);\n }\n\n /** Checks whether a button toggle is selected. */\n isSelected(toggle: KbqButtonToggle) {\n return this.selectionModel.isSelected(toggle);\n }\n\n /** Determines whether a button toggle should be checked on init. */\n isPrechecked(toggle: KbqButtonToggle) {\n if (this.rawValue === undefined) {\n return false;\n }\n\n if (this.multiple && Array.isArray(this.rawValue)) {\n return this.rawValue.some((value) => toggle.value != null && value === toggle.value);\n }\n\n return toggle.value === this.rawValue;\n }\n\n /** Updates the selection state of the toggles in the group based on a value. */\n private setSelectionByValue(value: any | any[]) {\n this.rawValue = value;\n\n if (!this.buttonToggles) {\n return;\n }\n\n if (this.multiple && value) {\n if (!Array.isArray(value)) {\n throw Error('Value must be an array in multiple-selection mode.');\n }\n\n this.clearSelection();\n value.forEach((currentValue: any) => this.selectValue(currentValue));\n } else {\n this.clearSelection();\n this.selectValue(value);\n }\n }\n\n /** Clears the selected toggles. */\n private clearSelection() {\n this.selectionModel.clear();\n this.buttonToggles.forEach((toggle) => (toggle.checked = false));\n }\n\n /** Selects a value if there's a toggle that corresponds to it. */\n private selectValue(value: any) {\n const correspondingOption = this.buttonToggles.find((toggle) => {\n return toggle.value != null && toggle.value === value;\n });\n\n if (correspondingOption) {\n correspondingOption.checked = true;\n this.selectionModel.select(correspondingOption);\n }\n }\n}\n\n/** Single button inside of a toggle group. */\n@Component({\n selector: 'kbq-button-toggle',\n exportAs: 'kbqButtonToggle',\n template: `\n <button\n [kbqStyle]=\"'transparent'\"\n [class.kbq-selected]=\"checked\"\n [disabled]=\"disabled\"\n [tabIndex]=\"tabIndex || 0\"\n (click)=\"onToggleClick()\"\n kbq-button\n kbq-title\n type=\"button\"\n >\n <div class=\"kbq-button-toggle-wrapper\" #kbqTitleText>\n <ng-content />\n </div>\n </button>\n `,\n styleUrls: ['button-toggle.scss', 'button-toggle-tokens.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'kbq-button-toggle',\n '[class]': '\"kbq-button-toggle\" + iconType'\n }\n})\nexport class KbqButtonToggle implements OnInit, AfterContentInit, AfterViewInit, OnDestroy {\n @ContentChildren(KbqIcon, { descendants: true }) icons: QueryList<KbqIcon>;\n\n /** Whether the button is checked. */\n @Input()\n get checked(): boolean {\n return this.buttonToggleGroup ? this.buttonToggleGroup.isSelected(this) : this._checked;\n }\n\n set checked(value: boolean) {\n const newValue = coerceBooleanProperty(value);\n\n if (newValue !== this._checked) {\n this._checked = newValue;\n\n if (this.buttonToggleGroup) {\n this.buttonToggleGroup.syncButtonToggle(this, this._checked);\n }\n\n this.changeDetectorRef.markForCheck();\n }\n }\n\n type: ToggleType;\n iconType: string = '';\n\n @ViewChild(KbqButton, { static: false }) mcButton: KbqButton;\n\n /** KbqButtonToggleGroup reads this to assign its own value. */\n @Input() value: any;\n\n /** Tabindex for the toggle. */\n @Input() tabIndex: number | null;\n\n @Input()\n get disabled(): boolean {\n return this._disabled || (this.buttonToggleGroup && this.buttonToggleGroup.disabled);\n }\n\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n }\n\n /** Event emitted when the group value changes. */\n @Output() readonly change: EventEmitter<KbqButtonToggleChange> = new EventEmitter<KbqButtonToggleChange>();\n\n private isSingleSelector = false;\n private _checked = false;\n private _disabled: boolean = false;\n\n constructor(\n @Optional() public buttonToggleGroup: KbqButtonToggleGroup,\n private changeDetectorRef: ChangeDetectorRef,\n private focusMonitor: FocusMonitor,\n private element: ElementRef\n ) {}\n\n ngOnInit() {\n this.isSingleSelector = this.buttonToggleGroup && !this.buttonToggleGroup.multiple;\n this.type = this.isSingleSelector ? 'radio' : 'checkbox';\n\n if (this.buttonToggleGroup && this.buttonToggleGroup.isPrechecked(this)) {\n this.checked = true;\n }\n }\n\n ngAfterContentInit(): void {\n if (this.icons.length) {\n const nodesWithoutComments = getNodesWithoutComments(\n this.element.nativeElement.querySelector('.kbq-button-toggle-wrapper')!.childNodes as NodeList\n ).length;\n\n this.iconType = nodesWithoutComments === this.icons.length ? '-icon' : '-icon-text';\n }\n }\n\n ngAfterViewInit(): void {\n this.focusMonitor.monitor(this.element.nativeElement, true);\n }\n\n ngOnDestroy() {\n const group = this.buttonToggleGroup;\n\n this.focusMonitor.stopMonitoring(this.element.nativeElement);\n\n // Remove the toggle from the selection once it's destroyed. Needs to happen\n // on the next tick in order to avoid \"changed after checked\" errors.\n if (group && group.isSelected(this)) {\n Promise.resolve().then(() => group.syncButtonToggle(this, false));\n }\n }\n\n /** Focuses the button. */\n focus(): void {\n this.element.nativeElement.focus();\n }\n\n /** Checks the button toggle due to an interaction with the underlying native button. */\n onToggleClick() {\n if (this.disabled) {\n return;\n }\n\n const newChecked = this.isSingleSelector ? true : !this._checked;\n\n if (newChecked !== this._checked) {\n this._checked = newChecked;\n\n if (this.buttonToggleGroup) {\n this.buttonToggleGroup.syncButtonToggle(this, this._checked, true);\n this.buttonToggleGroup.onTouched();\n }\n }\n\n // Emit a change event when it's the single selector\n this.change.emit(new KbqButtonToggleChange(this, this.value));\n }\n\n /**\n * Marks the button toggle as needing checking for change detection.\n * This method is exposed because the parent button toggle group will directly\n * update bound properties of the radio button.\n */\n markForCheck() {\n // When the group value changes, the button will not be notified.\n // Use `markForCheck` to explicit update button toggle's status.\n this.changeDetectorRef.markForCheck();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport { KbqTitleModule } from '@koobiq/components/title';\nimport { KbqButtonToggle, KbqButtonToggleGroup } from './button-toggle.component';\n\n@NgModule({\n imports: [KbqButtonModule, KbqTitleModule],\n exports: [KbqButtonToggleGroup, KbqButtonToggle],\n declarations: [KbqButtonToggleGroup, KbqButtonToggle]\n})\nexport class KbqButtonToggleModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"koobiq-components-button-toggle.mjs","sources":["../../../packages/components/button-toggle/button-toggle.component.ts","../../../packages/components/button-toggle/button-toggle.module.ts","../../../packages/components/button-toggle/koobiq-components-button-toggle.ts"],"sourcesContent":["import { FocusMonitor } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n QueryList,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { KbqButton } from '@koobiq/components/button';\nimport { getNodesWithoutComments } from '@koobiq/components/core';\nimport { KbqIcon } from '@koobiq/components/icon';\n\n/** Acceptable types for a button toggle. */\nexport type ToggleType = 'checkbox' | 'radio';\n\n/**\n * Provider Expression that allows kbq-button-toggle-group to register as a ControlValueAccessor.\n * This allows it to support [(ngModel)].\n * @docs-private\n */\nexport const KBQ_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => KbqButtonToggleGroup),\n multi: true\n};\n\n/** Change event object emitted by MсButtonToggle. */\nexport class KbqButtonToggleChange {\n constructor(\n /** The MсButtonToggle that emits the event. */\n public source: KbqButtonToggle,\n /** The value assigned to the MсButtonToggle. */\n public value: any\n ) {}\n}\n\n/** Exclusive selection button toggle group that behaves like a radio-button group. */\n@Directive({\n selector: 'kbq-button-toggle-group',\n providers: [KBQ_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR],\n host: {\n class: 'kbq-button-toggle-group',\n '[class.kbq-button-toggle_vertical]': 'vertical'\n },\n exportAs: 'kbqButtonToggleGroup'\n})\nexport class KbqButtonToggleGroup implements ControlValueAccessor, OnInit, AfterContentInit {\n /** Whether the toggle group is vertical. */\n @Input()\n get vertical(): boolean {\n return this._vertical;\n }\n\n set vertical(value: boolean) {\n this._vertical = coerceBooleanProperty(value);\n }\n\n /** Value of the toggle group. */\n @Input()\n get value(): any {\n const selected = this.selectionModel ? this.selectionModel.selected : [];\n\n if (this.multiple) {\n return selected.map((toggle) => toggle.value);\n }\n\n return selected[0] ? selected[0].value : undefined;\n }\n\n set value(newValue: any) {\n this.setSelectionByValue(newValue);\n this.valueChange.emit(this.value);\n }\n\n /** Selected button toggles in the group. */\n get selected(): any {\n const selected = this.selectionModel.selected;\n\n return this.multiple ? selected : selected[0] || null;\n }\n\n /** Whether multiple button toggles can be selected. */\n @Input()\n get multiple(): boolean {\n return this._multiple;\n }\n\n set multiple(value: boolean) {\n this._multiple = coerceBooleanProperty(value);\n }\n\n /** Child button toggle buttons. */\n @ContentChildren(forwardRef(() => KbqButtonToggle)) buttonToggles: QueryList<KbqButtonToggle>;\n\n /** Whether multiple button toggle group is disabled. */\n @Input()\n get disabled(): boolean {\n return this._disabled;\n }\n\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n\n if (!this.buttonToggles) {\n return;\n }\n\n this.buttonToggles.forEach((toggle) => toggle.markForCheck());\n }\n\n /**\n * Event that emits whenever the value of the group changes.\n * Used to facilitate two-way data binding.\n * @docs-private\n */\n @Output() readonly valueChange = new EventEmitter<any>();\n\n /** Event emitted when the group's value changes. */\n @Output() readonly change: EventEmitter<KbqButtonToggleChange> = new EventEmitter<KbqButtonToggleChange>();\n private _vertical = false;\n private _multiple = false;\n private _disabled = false;\n private selectionModel: SelectionModel<KbqButtonToggle>;\n\n /**\n * Reference to the raw value that the consumer tried to assign. The real\n * value will exclude any values from this one that don't correspond to a\n * toggle. Useful for the cases where the value is assigned before the toggles\n * have been initialized or at the same that they're being swapped out.\n */\n private rawValue: any;\n\n constructor(private _changeDetector: ChangeDetectorRef) {}\n\n /**\n * The method to be called in order to update ngModel.\n * Now `ngModel` binding is not supported in multiple selection mode.\n */\n controlValueAccessorChangeFn: (value: any) => void = () => {};\n\n /** onTouch function registered via registerOnTouch (ControlValueAccessor). */\n onTouched: () => any = () => {};\n\n ngOnInit() {\n this.selectionModel = new SelectionModel<KbqButtonToggle>(this.multiple, undefined, false);\n }\n\n ngAfterContentInit() {\n this.selectionModel.select(...this.buttonToggles.filter((toggle) => toggle.checked));\n this.disabled = this._disabled;\n }\n\n /**\n * Sets the model value. Implemented as part of ControlValueAccessor.\n * @param value Value to be set to the model.\n */\n writeValue(value: any) {\n this.value = value;\n this._changeDetector.markForCheck();\n }\n\n // Implemented as part of ControlValueAccessor.\n registerOnChange(fn: (value: any) => void) {\n this.controlValueAccessorChangeFn = fn;\n }\n\n // Implemented as part of ControlValueAccessor.\n registerOnTouched(fn: any) {\n this.onTouched = fn;\n }\n\n // Implemented as part of ControlValueAccessor.\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n /** Dispatch change event with current selection and group value. */\n emitChangeEvent(): void {\n const selected = this.selected;\n const source = Array.isArray(selected) ? selected[selected.length - 1] : selected;\n const event = new KbqButtonToggleChange(source, this.value);\n\n this.controlValueAccessorChangeFn(event.value);\n this.change.emit(event);\n }\n\n /**\n * Syncs a button toggle's selected state with the model value.\n * @param toggle Toggle to be synced.\n * @param select Whether the toggle should be selected.\n * @param isUserInput Whether the change was a result of a user interaction.\n */\n syncButtonToggle(toggle: KbqButtonToggle, select: boolean, isUserInput = false) {\n // Deselect the currently-selected toggle, if we're in single-selection\n // mode and the button being toggled isn't selected at the moment.\n if (!this.multiple && this.selected && !toggle.checked) {\n (this.selected as KbqButtonToggle).checked = false;\n }\n\n if (select) {\n this.selectionModel.select(toggle);\n } else {\n this.selectionModel.deselect(toggle);\n }\n\n // Only emit the change event for user input.\n if (isUserInput) {\n this.emitChangeEvent();\n }\n\n // Note: we emit this one no matter whether it was a user interaction, because\n // it is used by Angular to sync up the two-way data binding.\n this.valueChange.emit(this.value);\n }\n\n /** Checks whether a button toggle is selected. */\n isSelected(toggle: KbqButtonToggle) {\n return this.selectionModel.isSelected(toggle);\n }\n\n /** Determines whether a button toggle should be checked on init. */\n isPrechecked(toggle: KbqButtonToggle) {\n if (this.rawValue === undefined) {\n return false;\n }\n\n if (this.multiple && Array.isArray(this.rawValue)) {\n return this.rawValue.some((value) => toggle.value != null && value === toggle.value);\n }\n\n return toggle.value === this.rawValue;\n }\n\n /** Updates the selection state of the toggles in the group based on a value. */\n private setSelectionByValue(value: any | any[]) {\n this.rawValue = value;\n\n if (!this.buttonToggles) {\n return;\n }\n\n if (this.multiple && value) {\n if (!Array.isArray(value)) {\n throw Error('Value must be an array in multiple-selection mode.');\n }\n\n this.clearSelection();\n value.forEach((currentValue: any) => this.selectValue(currentValue));\n } else {\n this.clearSelection();\n this.selectValue(value);\n }\n }\n\n /** Clears the selected toggles. */\n private clearSelection() {\n this.selectionModel.clear();\n this.buttonToggles.forEach((toggle) => (toggle.checked = false));\n }\n\n /** Selects a value if there's a toggle that corresponds to it. */\n private selectValue(value: any) {\n const correspondingOption = this.buttonToggles.find((toggle) => {\n return toggle.value != null && toggle.value === value;\n });\n\n if (correspondingOption) {\n correspondingOption.checked = true;\n this.selectionModel.select(correspondingOption);\n }\n }\n}\n\n/** Single button inside of a toggle group. */\n@Component({\n selector: 'kbq-button-toggle',\n exportAs: 'kbqButtonToggle',\n template: `\n <button\n kbq-button\n kbq-title\n type=\"button\"\n [kbqStyle]=\"'transparent'\"\n [class.kbq-selected]=\"checked\"\n [disabled]=\"disabled\"\n [tabIndex]=\"tabIndex || 0\"\n (click)=\"onToggleClick()\"\n >\n <div #kbqTitleText class=\"kbq-button-toggle-wrapper\">\n <ng-content />\n </div>\n </button>\n `,\n styleUrls: ['button-toggle.scss', 'button-toggle-tokens.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'kbq-button-toggle',\n '[class]': '\"kbq-button-toggle\" + iconType'\n }\n})\nexport class KbqButtonToggle implements OnInit, AfterContentInit, AfterViewInit, OnDestroy {\n @ContentChildren(KbqIcon, { descendants: true }) icons: QueryList<KbqIcon>;\n\n /** Whether the button is checked. */\n @Input()\n get checked(): boolean {\n return this.buttonToggleGroup ? this.buttonToggleGroup.isSelected(this) : this._checked;\n }\n\n set checked(value: boolean) {\n const newValue = coerceBooleanProperty(value);\n\n if (newValue !== this._checked) {\n this._checked = newValue;\n\n if (this.buttonToggleGroup) {\n this.buttonToggleGroup.syncButtonToggle(this, this._checked);\n }\n\n this.changeDetectorRef.markForCheck();\n }\n }\n\n type: ToggleType;\n iconType: string = '';\n\n @ViewChild(KbqButton, { static: false }) mcButton: KbqButton;\n\n /** KbqButtonToggleGroup reads this to assign its own value. */\n @Input() value: any;\n\n /** Tabindex for the toggle. */\n @Input() tabIndex: number | null;\n\n @Input()\n get disabled(): boolean {\n return this._disabled || (this.buttonToggleGroup && this.buttonToggleGroup.disabled);\n }\n\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n }\n\n /** Event emitted when the group value changes. */\n @Output() readonly change: EventEmitter<KbqButtonToggleChange> = new EventEmitter<KbqButtonToggleChange>();\n\n private isSingleSelector = false;\n private _checked = false;\n private _disabled: boolean = false;\n\n constructor(\n @Optional() public buttonToggleGroup: KbqButtonToggleGroup,\n private changeDetectorRef: ChangeDetectorRef,\n private focusMonitor: FocusMonitor,\n private element: ElementRef\n ) {}\n\n ngOnInit() {\n this.isSingleSelector = this.buttonToggleGroup && !this.buttonToggleGroup.multiple;\n this.type = this.isSingleSelector ? 'radio' : 'checkbox';\n\n if (this.buttonToggleGroup && this.buttonToggleGroup.isPrechecked(this)) {\n this.checked = true;\n }\n }\n\n ngAfterContentInit(): void {\n if (this.icons.length) {\n const nodesWithoutComments = getNodesWithoutComments(\n this.element.nativeElement.querySelector('.kbq-button-toggle-wrapper')!.childNodes as NodeList\n ).length;\n\n this.iconType = nodesWithoutComments === this.icons.length ? '-icon' : '-icon-text';\n }\n }\n\n ngAfterViewInit(): void {\n this.focusMonitor.monitor(this.element.nativeElement, true);\n }\n\n ngOnDestroy() {\n const group = this.buttonToggleGroup;\n\n this.focusMonitor.stopMonitoring(this.element.nativeElement);\n\n // Remove the toggle from the selection once it's destroyed. Needs to happen\n // on the next tick in order to avoid \"changed after checked\" errors.\n if (group && group.isSelected(this)) {\n Promise.resolve().then(() => group.syncButtonToggle(this, false));\n }\n }\n\n /** Focuses the button. */\n focus(): void {\n this.element.nativeElement.focus();\n }\n\n /** Checks the button toggle due to an interaction with the underlying native button. */\n onToggleClick() {\n if (this.disabled) {\n return;\n }\n\n const newChecked = this.isSingleSelector ? true : !this._checked;\n\n if (newChecked !== this._checked) {\n this._checked = newChecked;\n\n if (this.buttonToggleGroup) {\n this.buttonToggleGroup.syncButtonToggle(this, this._checked, true);\n this.buttonToggleGroup.onTouched();\n }\n }\n\n // Emit a change event when it's the single selector\n this.change.emit(new KbqButtonToggleChange(this, this.value));\n }\n\n /**\n * Marks the button toggle as needing checking for change detection.\n * This method is exposed because the parent button toggle group will directly\n * update bound properties of the radio button.\n */\n markForCheck() {\n // When the group value changes, the button will not be notified.\n // Use `markForCheck` to explicit update button toggle's status.\n this.changeDetectorRef.markForCheck();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport { KbqTitleModule } from '@koobiq/components/title';\nimport { KbqButtonToggle, KbqButtonToggleGroup } from './button-toggle.component';\n\n@NgModule({\n imports: [KbqButtonModule, KbqTitleModule],\n exports: [KbqButtonToggleGroup, KbqButtonToggle],\n declarations: [KbqButtonToggleGroup, KbqButtonToggle]\n})\nexport class KbqButtonToggleModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,242 @@
1
+ import { SharedResizeObserver } from '@angular/cdk/observers/private';
2
+ import * as i0 from '@angular/core';
3
+ import { InjectionToken, input, numberAttribute, output, viewChild, signal, inject, DestroyRef, ElementRef, Component, ViewEncapsulation, ChangeDetectionStrategy, NgModule } from '@angular/core';
4
+ import { toSignal, toObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';
5
+ import { KbqButtonModule } from '@koobiq/components/button';
6
+ import { ruRULocaleData, KBQ_LOCALE_SERVICE } from '@koobiq/components/core';
7
+ import { KbqIcon } from '@koobiq/components/icon';
8
+ import * as i1 from '@koobiq/components/link';
9
+ import { KbqLinkModule } from '@koobiq/components/link';
10
+ import { map, of, pairwise, skip, debounceTime } from 'rxjs';
11
+
12
+ /**
13
+ * Default maximum number of visible rows for the clamped text component
14
+ * before truncation and the "collapse/expand" toggle is shown.
15
+ */
16
+ const kbqClampedTextDefaultMaxRows = 5;
17
+ /** Localization configuration provider. */
18
+ const KBQ_CLAMPED_TEXT_LOCALE_CONFIGURATION = new InjectionToken('KbqClampedTextLocaleConfig', {
19
+ factory: () => ruRULocaleData.clampedText
20
+ });
21
+ /**
22
+ * Utility provider.
23
+ * @see KBQ_CLAMPED_TEXT_LOCALE_CONFIGURATION
24
+ */
25
+ const kbqClampedTextLocaleConfigurationProvider = (configuration) => ({
26
+ provide: KBQ_CLAMPED_TEXT_LOCALE_CONFIGURATION,
27
+ useValue: configuration
28
+ });
29
+
30
+ class KbqClampedText {
31
+ constructor() {
32
+ /**
33
+ * Max rows before text is clamped.
34
+ * @default kbqClampedTextDefaultMaxRows
35
+ */
36
+ this.rows = input(kbqClampedTextDefaultMaxRows);
37
+ /** Collapsed state: `true` = collapsed, `false` = expanded, `undefined` = auto. */
38
+ this.isCollapsed = input();
39
+ /**
40
+ * Debounce time on resize observer when recalculating toggle and text visibility.
41
+ * @default 0
42
+ */
43
+ this.debounceTime = input(0, { transform: numberAttribute });
44
+ /** Emits when collapsed state changes. Used for two-way binding with `isCollapsed`. */
45
+ this.isCollapsedChange = output();
46
+ /** @docs-private */
47
+ this.text = viewChild.required('text');
48
+ /** @docs-private */
49
+ this.textContainer = viewChild.required('textContainer');
50
+ /**
51
+ * This flag controls event emission, aria/css-class calculation
52
+ * @docs-private
53
+ */
54
+ this.collapsedState = signal(undefined);
55
+ /** @docs-private */
56
+ this.isToggleCollapsed = signal(undefined);
57
+ /** @docs-private */
58
+ this.hasToggle = signal(true);
59
+ /** @docs-private */
60
+ this.lineClamp = signal(null);
61
+ this.destroyRef = inject(DestroyRef);
62
+ this.elementRef = inject(ElementRef);
63
+ this.resizeObserver = inject(SharedResizeObserver);
64
+ this.localeService = inject(KBQ_LOCALE_SERVICE, { optional: true });
65
+ /**
66
+ * Clamped text locale configuration.
67
+ * @docs-private
68
+ */
69
+ this.localeConfiguration = toSignal(this.localeService
70
+ ? this.localeService.changes.pipe(map(() => this.localeService.getParams('clampedText')))
71
+ : of(inject(KBQ_CLAMPED_TEXT_LOCALE_CONFIGURATION)));
72
+ /**
73
+ * This flag is used to prevent trigger resize observer on toggle click.
74
+ */
75
+ this.isEventFromToggle = false;
76
+ /**
77
+ * Calculates next collapsed state according to previous one.
78
+ * `undefined` is treated as collapsed and not touched stated.
79
+ */
80
+ this.toggleCollapseState = (state) => {
81
+ const isCollapsed = state ?? true;
82
+ return !isCollapsed;
83
+ };
84
+ toObservable(this.isCollapsed)
85
+ .pipe(pairwise(), takeUntilDestroyed())
86
+ .subscribe(([previous, current]) => {
87
+ this.collapsedState.set(current);
88
+ // store previous collapsed value to reduce unnecessary changes
89
+ this.isToggleCollapsed.set(!this.hasToggle() ? previous : current);
90
+ });
91
+ toObservable(this.collapsedState)
92
+ .pipe(skip(1), takeUntilDestroyed())
93
+ .subscribe((collapsed) => {
94
+ if (collapsed === undefined)
95
+ return;
96
+ this.isCollapsedChange.emit(collapsed);
97
+ });
98
+ toObservable(this.rows)
99
+ .pipe(takeUntilDestroyed())
100
+ .subscribe((rows) => this.lineClamp.set(rows));
101
+ }
102
+ ngAfterViewInit() {
103
+ const textContainer = this.textContainer().nativeElement;
104
+ this.resizeObserver
105
+ .observe(textContainer)
106
+ .pipe(debounceTime(this.debounceTime()), takeUntilDestroyed(this.destroyRef))
107
+ .subscribe(() => {
108
+ this.updateToggleVisibilityState();
109
+ this.updateCollapsedState();
110
+ });
111
+ }
112
+ /** @docs-private */
113
+ toggleIsCollapsed(event) {
114
+ event.stopPropagation();
115
+ this.collapsedState.update((state) => this.toggleCollapseState(this.isToggleCollapsed() ?? state));
116
+ this.isToggleCollapsed.update(this.toggleCollapseState);
117
+ this.isEventFromToggle = true;
118
+ if (this.collapsedState()) {
119
+ setTimeout(() => this.elementRef.nativeElement.scrollIntoView({ block: 'center', inline: 'center' }));
120
+ }
121
+ }
122
+ updateToggleVisibilityState() {
123
+ this.hasToggle.set(this.getRowsCount() > this.rows() + 1);
124
+ }
125
+ updateCollapsedState() {
126
+ if (this.isEventFromToggle) {
127
+ this.isEventFromToggle = false;
128
+ return;
129
+ }
130
+ this.collapsedState.set(this.hasToggle() && (this.isToggleCollapsed() ?? true));
131
+ }
132
+ getRowsCount() {
133
+ const rects = Array.from(this.text().nativeElement.getClientRects());
134
+ return [...new Set(rects.map(({ top }) => top))].length;
135
+ }
136
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KbqClampedText, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
137
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: KbqClampedText, isStandalone: true, selector: "kbq-clamped-text", inputs: { rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, isCollapsed: { classPropertyName: "isCollapsed", publicName: "isCollapsed", isSignal: true, isRequired: false, transformFunction: null }, debounceTime: { classPropertyName: "debounceTime", publicName: "debounceTime", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { isCollapsedChange: "isCollapsedChange" }, host: { properties: { "attr.aria-expanded": "collapsedState() ? \"false\" : \"true\"" }, classAttribute: "kbq-clamped-text" }, viewQueries: [{ propertyName: "text", first: true, predicate: ["text"], descendants: true, isSignal: true }, { propertyName: "textContainer", first: true, predicate: ["textContainer"], descendants: true, isSignal: true }], exportAs: ["kbqClampedText"], ngImport: i0, template: `
138
+ <div
139
+ #textContainer
140
+ class="kbq-clamped-text__content"
141
+ [style.-webkit-line-clamp]="lineClamp()"
142
+ [style.line-clamp]="lineClamp()"
143
+ [class.kbq-clamped-text__content_collapsed]="collapsedState()"
144
+ >
145
+ <span #text>
146
+ <ng-content />
147
+ </span>
148
+ </div>
149
+
150
+ @if (hasToggle()) {
151
+ <span
152
+ class="kbq-clamped-text__toggle"
153
+ kbq-link
154
+ noUnderline
155
+ pseudo
156
+ role="button"
157
+ (click)="toggleIsCollapsed($event)"
158
+ (keydown.enter)="toggleIsCollapsed($event)"
159
+ (keydown.space)="toggleIsCollapsed($event)"
160
+ >
161
+ @let config = localeConfiguration();
162
+
163
+ @if (collapsedState()) {
164
+ <i kbq-icon="kbq-chevron-down_16"></i>
165
+ <span class="kbq-link__text">{{ config!.openText }}</span>
166
+ } @else {
167
+ <i kbq-icon="kbq-chevron-up_16"></i>
168
+ <span class="kbq-link__text">{{ config!.closeText }}</span>
169
+ }
170
+ </span>
171
+ }
172
+ `, isInline: true, styles: [".kbq-clamped-text{display:inline-flex;flex-direction:column}.kbq-clamped-text__content.kbq-clamped-text__content_collapsed{display:-webkit-box;overflow-y:hidden;-webkit-box-orient:vertical}.kbq-clamped-text__toggle{margin-top:var(--kbq-size-xxs);align-self:flex-start}\n"], dependencies: [{ kind: "component", type: KbqIcon, selector: "[kbq-icon]", inputs: ["small", "autoColor", "kbq-icon"] }, { kind: "ngmodule", type: KbqButtonModule }, { kind: "ngmodule", type: KbqLinkModule }, { kind: "directive", type: i1.KbqLink, selector: "[kbq-link]", inputs: ["disabled", "tabIndex", "pseudo", "noUnderline", "big", "compact", "useVisited", "print"], exportAs: ["kbqLink"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
173
+ }
174
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KbqClampedText, decorators: [{
175
+ type: Component,
176
+ args: [{ selector: 'kbq-clamped-text', standalone: true, exportAs: 'kbqClampedText', imports: [
177
+ KbqIcon,
178
+ KbqButtonModule,
179
+ KbqLinkModule
180
+ ], template: `
181
+ <div
182
+ #textContainer
183
+ class="kbq-clamped-text__content"
184
+ [style.-webkit-line-clamp]="lineClamp()"
185
+ [style.line-clamp]="lineClamp()"
186
+ [class.kbq-clamped-text__content_collapsed]="collapsedState()"
187
+ >
188
+ <span #text>
189
+ <ng-content />
190
+ </span>
191
+ </div>
192
+
193
+ @if (hasToggle()) {
194
+ <span
195
+ class="kbq-clamped-text__toggle"
196
+ kbq-link
197
+ noUnderline
198
+ pseudo
199
+ role="button"
200
+ (click)="toggleIsCollapsed($event)"
201
+ (keydown.enter)="toggleIsCollapsed($event)"
202
+ (keydown.space)="toggleIsCollapsed($event)"
203
+ >
204
+ @let config = localeConfiguration();
205
+
206
+ @if (collapsedState()) {
207
+ <i kbq-icon="kbq-chevron-down_16"></i>
208
+ <span class="kbq-link__text">{{ config!.openText }}</span>
209
+ } @else {
210
+ <i kbq-icon="kbq-chevron-up_16"></i>
211
+ <span class="kbq-link__text">{{ config!.closeText }}</span>
212
+ }
213
+ </span>
214
+ }
215
+ `, host: {
216
+ class: 'kbq-clamped-text',
217
+ '[attr.aria-expanded]': 'collapsedState() ? "false" : "true"'
218
+ }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".kbq-clamped-text{display:inline-flex;flex-direction:column}.kbq-clamped-text__content.kbq-clamped-text__content_collapsed{display:-webkit-box;overflow-y:hidden;-webkit-box-orient:vertical}.kbq-clamped-text__toggle{margin-top:var(--kbq-size-xxs);align-self:flex-start}\n"] }]
219
+ }], ctorParameters: () => [] });
220
+
221
+ const COMPONENTS = [
222
+ KbqClampedText
223
+ ];
224
+ class KbqClampedTextModule {
225
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KbqClampedTextModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
226
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: KbqClampedTextModule, imports: [KbqClampedText], exports: [KbqClampedText] }); }
227
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KbqClampedTextModule, imports: [COMPONENTS] }); }
228
+ }
229
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KbqClampedTextModule, decorators: [{
230
+ type: NgModule,
231
+ args: [{
232
+ imports: COMPONENTS,
233
+ exports: COMPONENTS
234
+ }]
235
+ }] });
236
+
237
+ /**
238
+ * Generated bundle index. Do not edit.
239
+ */
240
+
241
+ export { KBQ_CLAMPED_TEXT_LOCALE_CONFIGURATION, KbqClampedText, KbqClampedTextModule, kbqClampedTextDefaultMaxRows, kbqClampedTextLocaleConfigurationProvider };
242
+ //# sourceMappingURL=koobiq-components-clamped-text.mjs.map