@koobiq/components 19.4.1 → 19.6.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 (242) hide show
  1. package/LICENSE +1 -1
  2. package/accordion/accordion-content.d.ts +1 -1
  3. package/accordion/accordion-content.directive.d.ts +22 -7
  4. package/accordion/accordion-header.directive.d.ts +2 -2
  5. package/accordion/accordion-item.d.ts +74 -3
  6. package/accordion/accordion-trigger.component.d.ts +15 -2
  7. package/accordion/accordion-trigger.directive.d.ts +13 -5
  8. package/accordion/accordion.component.d.ts +67 -6
  9. package/accordion/accordion.component.scss +9 -27
  10. package/accordion/public-api.d.ts +0 -2
  11. package/actions-panel/actions-panel-container.scss +6 -0
  12. package/actions-panel/actions-panel-tokens.scss +4 -1
  13. package/autocomplete/autocomplete.component.d.ts +6 -1
  14. package/autocomplete/autocomplete.module.d.ts +1 -1
  15. package/autocomplete/autocomplete.scss +14 -3
  16. package/badge/badge-tokens.scss +3 -3
  17. package/button/button-group.d.ts +45 -0
  18. package/button/button-group.scss +17 -0
  19. package/button/button.component.d.ts +3 -0
  20. package/button/button.module.d.ts +2 -1
  21. package/button/public-api.d.ts +1 -0
  22. package/button-toggle/button-toggle-tokens.scss +1 -1
  23. package/checkbox/checkbox.d.ts +5 -4
  24. package/checkbox/checkbox.scss +5 -5
  25. package/clamped-text/clamped-list.d.ts +41 -0
  26. package/clamped-text/clamped-text.d.ts +10 -6
  27. package/clamped-text/constants.d.ts +21 -1
  28. package/clamped-text/index.d.ts +1 -0
  29. package/clamped-text/module.d.ts +2 -1
  30. package/code-block/code-block-tokens.scss +35 -16
  31. package/code-block/code-block.d.ts +17 -5
  32. package/code-block/code-block.module.d.ts +1 -1
  33. package/code-block/code-block.scss +1 -0
  34. package/code-block/types.d.ts +9 -0
  35. package/core/common-behaviors/flex.d.ts +4 -0
  36. package/core/common-behaviors/index.d.ts +1 -0
  37. package/core/error/error-state-matcher.d.ts +10 -0
  38. package/core/form-field/form-field-ref.d.ts +3 -1
  39. package/core/forms/_forms.scss +10 -3
  40. package/core/locales/en-US.d.ts +2 -0
  41. package/core/locales/es-LA.d.ts +2 -0
  42. package/core/locales/locale-service.d.ts +10 -0
  43. package/core/locales/pt-BR.d.ts +2 -0
  44. package/core/locales/ru-RU.d.ts +2 -0
  45. package/core/locales/tk-TM.d.ts +2 -0
  46. package/core/locales/types.d.ts +2 -0
  47. package/core/option/_option-action-theme.scss +1 -0
  48. package/core/option/_option-theme.scss +4 -17
  49. package/core/option/action-container.scss +4 -6
  50. package/core/option/option.d.ts +5 -1
  51. package/core/option/option.scss +5 -0
  52. package/core/pop-up/pop-up-trigger.d.ts +11 -2
  53. package/core/select/common.d.ts +4 -4
  54. package/core/selection/pseudo-checkbox/pseudo-checkbox.scss +2 -2
  55. package/core/styles/common/_groups-mixins.scss +79 -0
  56. package/core/styles/common/_groups.scss +4 -34
  57. package/core/styles/common/_overlay.scss +5 -1
  58. package/core/styles/common/_select.scss +4 -0
  59. package/core/styles/theming/scrollbar-tokens.scss +6 -6
  60. package/core/styles/visual/_layout.scss +0 -2
  61. package/core/utils/utils.d.ts +2 -0
  62. package/datepicker/datepicker-input.directive.d.ts +1 -0
  63. package/dropdown/dropdown-trigger.directive.d.ts +5 -0
  64. package/dropdown/dropdown.component.d.ts +2 -1
  65. package/ellipsis-center/ellipsis-center.directive.d.ts +0 -1
  66. package/fesm2022/koobiq-components-accordion.mjs +301 -237
  67. package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
  68. package/fesm2022/koobiq-components-actions-panel.mjs +12 -12
  69. package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -1
  70. package/fesm2022/koobiq-components-alert.mjs +16 -16
  71. package/fesm2022/koobiq-components-app-switcher.mjs +25 -25
  72. package/fesm2022/koobiq-components-app-switcher.mjs.map +1 -1
  73. package/fesm2022/koobiq-components-autocomplete.mjs +39 -23
  74. package/fesm2022/koobiq-components-autocomplete.mjs.map +1 -1
  75. package/fesm2022/koobiq-components-badge.mjs +14 -14
  76. package/fesm2022/koobiq-components-badge.mjs.map +1 -1
  77. package/fesm2022/koobiq-components-breadcrumbs.mjs +25 -25
  78. package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
  79. package/fesm2022/koobiq-components-button-toggle.mjs +12 -12
  80. package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
  81. package/fesm2022/koobiq-components-button.mjs +146 -24
  82. package/fesm2022/koobiq-components-button.mjs.map +1 -1
  83. package/fesm2022/koobiq-components-checkbox.mjs +18 -20
  84. package/fesm2022/koobiq-components-checkbox.mjs.map +1 -1
  85. package/fesm2022/koobiq-components-clamped-text.mjs +134 -47
  86. package/fesm2022/koobiq-components-clamped-text.mjs.map +1 -1
  87. package/fesm2022/koobiq-components-code-block.mjs +54 -22
  88. package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
  89. package/fesm2022/koobiq-components-content-panel.mjs +28 -28
  90. package/fesm2022/koobiq-components-core.mjs +313 -257
  91. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  92. package/fesm2022/koobiq-components-datepicker.mjs +40 -64
  93. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  94. package/fesm2022/koobiq-components-divider.mjs +7 -7
  95. package/fesm2022/koobiq-components-dl.mjs +13 -13
  96. package/fesm2022/koobiq-components-dropdown.mjs +48 -23
  97. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  98. package/fesm2022/koobiq-components-dynamic-translation.mjs +13 -13
  99. package/fesm2022/koobiq-components-ellipsis-center.mjs +8 -9
  100. package/fesm2022/koobiq-components-ellipsis-center.mjs.map +1 -1
  101. package/fesm2022/koobiq-components-empty-state.mjs +19 -19
  102. package/fesm2022/koobiq-components-file-upload.mjs +39 -39
  103. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  104. package/fesm2022/koobiq-components-filter-bar.mjs +118 -106
  105. package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
  106. package/fesm2022/koobiq-components-form-field.mjs +77 -65
  107. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  108. package/fesm2022/koobiq-components-icon.mjs +32 -28
  109. package/fesm2022/koobiq-components-icon.mjs.map +1 -1
  110. package/fesm2022/koobiq-components-inline-edit.mjs +115 -65
  111. package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
  112. package/fesm2022/koobiq-components-input.mjs +28 -26
  113. package/fesm2022/koobiq-components-input.mjs.map +1 -1
  114. package/fesm2022/koobiq-components-link.mjs +23 -17
  115. package/fesm2022/koobiq-components-link.mjs.map +1 -1
  116. package/fesm2022/koobiq-components-list.mjs +19 -19
  117. package/fesm2022/koobiq-components-loader-overlay.mjs +28 -19
  118. package/fesm2022/koobiq-components-loader-overlay.mjs.map +1 -1
  119. package/fesm2022/koobiq-components-markdown.mjs +54 -22
  120. package/fesm2022/koobiq-components-markdown.mjs.map +1 -1
  121. package/fesm2022/koobiq-components-modal.mjs +96 -63
  122. package/fesm2022/koobiq-components-modal.mjs.map +1 -1
  123. package/fesm2022/koobiq-components-navbar-ic.mjs +34 -34
  124. package/fesm2022/koobiq-components-navbar.mjs +53 -46
  125. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  126. package/fesm2022/koobiq-components-notification-center.mjs +16 -16
  127. package/fesm2022/koobiq-components-notification-center.mjs.map +1 -1
  128. package/fesm2022/koobiq-components-overflow-items.mjs +29 -17
  129. package/fesm2022/koobiq-components-overflow-items.mjs.map +1 -1
  130. package/fesm2022/koobiq-components-popover.mjs +52 -23
  131. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  132. package/fesm2022/koobiq-components-progress-bar.mjs +13 -13
  133. package/fesm2022/koobiq-components-progress-spinner.mjs +14 -14
  134. package/fesm2022/koobiq-components-progress-spinner.mjs.map +1 -1
  135. package/fesm2022/koobiq-components-radio.mjs +10 -10
  136. package/fesm2022/koobiq-components-resizer.mjs +10 -10
  137. package/fesm2022/koobiq-components-risk-level.mjs +7 -7
  138. package/fesm2022/koobiq-components-scrollbar.mjs +12 -12
  139. package/fesm2022/koobiq-components-scrollbar.mjs.map +1 -1
  140. package/fesm2022/koobiq-components-search-expandable.mjs +17 -8
  141. package/fesm2022/koobiq-components-search-expandable.mjs.map +1 -1
  142. package/fesm2022/koobiq-components-select.mjs +342 -58
  143. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  144. package/fesm2022/koobiq-components-sidebar.mjs +13 -13
  145. package/fesm2022/koobiq-components-sidepanel.mjs +50 -41
  146. package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
  147. package/fesm2022/koobiq-components-skeleton.mjs +62 -13
  148. package/fesm2022/koobiq-components-skeleton.mjs.map +1 -1
  149. package/fesm2022/koobiq-components-split-button.mjs +9 -9
  150. package/fesm2022/koobiq-components-split-button.mjs.map +1 -1
  151. package/fesm2022/koobiq-components-splitter.mjs +16 -16
  152. package/fesm2022/koobiq-components-table.mjs +10 -10
  153. package/fesm2022/koobiq-components-tabs.mjs +54 -54
  154. package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
  155. package/fesm2022/koobiq-components-tags.mjs +44 -47
  156. package/fesm2022/koobiq-components-tags.mjs.map +1 -1
  157. package/fesm2022/koobiq-components-textarea.mjs +10 -9
  158. package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
  159. package/fesm2022/koobiq-components-time-range.mjs +25 -25
  160. package/fesm2022/koobiq-components-time-range.mjs.map +1 -1
  161. package/fesm2022/koobiq-components-timepicker.mjs +10 -10
  162. package/fesm2022/koobiq-components-timezone.mjs +26 -26
  163. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  164. package/fesm2022/koobiq-components-title.mjs +8 -9
  165. package/fesm2022/koobiq-components-title.mjs.map +1 -1
  166. package/fesm2022/koobiq-components-toast.mjs +16 -16
  167. package/fesm2022/koobiq-components-toggle.mjs +12 -9
  168. package/fesm2022/koobiq-components-toggle.mjs.map +1 -1
  169. package/fesm2022/koobiq-components-tooltip.mjs +95 -52
  170. package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
  171. package/fesm2022/koobiq-components-top-bar.mjs +15 -15
  172. package/fesm2022/koobiq-components-top-bar.mjs.map +1 -1
  173. package/fesm2022/koobiq-components-tree-select.mjs +15 -12
  174. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  175. package/fesm2022/koobiq-components-tree.mjs +64 -52
  176. package/fesm2022/koobiq-components-tree.mjs.map +1 -1
  177. package/fesm2022/koobiq-components-username.mjs +28 -28
  178. package/fesm2022/koobiq-components-username.mjs.map +1 -1
  179. package/filter-bar/filter-search.d.ts +10 -1
  180. package/filter-bar/pipes/pipe-date.scss +5 -16
  181. package/form-field/form-field.d.ts +25 -1
  182. package/form-field/form-field.scss +26 -2
  183. package/icon/icon-button.component.d.ts +3 -0
  184. package/icon/icon-button.scss +4 -0
  185. package/inline-edit/inline-edit-tokens.scss +3 -3
  186. package/inline-edit/inline-edit.d.ts +31 -11
  187. package/inline-edit/inline-edit.scss +28 -30
  188. package/input/input-password.d.ts +1 -0
  189. package/input/input.d.ts +1 -0
  190. package/link/_link-theme.scss +18 -8
  191. package/link/link-tokens.scss +9 -6
  192. package/link/link.component.d.ts +9 -5
  193. package/loader-overlay/_loader-overlay-theme.scss +12 -0
  194. package/loader-overlay/loader-overlay-tokens.scss +1 -0
  195. package/loader-overlay/loader-overlay.component.d.ts +7 -1
  196. package/markdown/_markdown-theme.scss +3 -31
  197. package/markdown/markdown-tokens.scss +0 -11
  198. package/markdown/markdown.component.d.ts +12 -7
  199. package/markdown/markdown.scss +0 -11
  200. package/modal/modal-ref.class.d.ts +1 -0
  201. package/modal/modal.component.d.ts +14 -8
  202. package/modal/modal.scss +1 -0
  203. package/modal/modal.type.d.ts +5 -0
  204. package/navbar/navbar-item.component.d.ts +3 -1
  205. package/navbar/navbar.scss +3 -0
  206. package/overflow-items/overflow-items.d.ts +8 -2
  207. package/package.json +4 -5
  208. package/popover/popover.component.d.ts +15 -2
  209. package/prebuilt-themes/dark-theme.css +1 -1
  210. package/prebuilt-themes/light-theme.css +1 -1
  211. package/prebuilt-themes/theme.css +1 -1
  212. package/progress-spinner/progress-spinner.scss +1 -0
  213. package/schematics/ng-add/index.js +4 -6
  214. package/scrollbar/scrollbar-tokens.scss +7 -7
  215. package/search-expandable/search-expandable.d.ts +6 -2
  216. package/select/public-api.d.ts +1 -0
  217. package/select/select-common.d.ts +30 -0
  218. package/select/select.component.d.ts +193 -29
  219. package/select/select.module.d.ts +3 -2
  220. package/sidepanel/_sidepanel-theme.scss +1 -7
  221. package/sidepanel/sidepanel-config.d.ts +10 -2
  222. package/sidepanel/sidepanel.service.d.ts +0 -1
  223. package/skeleton/skeleton.d.ts +12 -3
  224. package/skeleton/skeleton.scss +22 -7
  225. package/split-button/_split-button-theme.scss +2 -1
  226. package/tabs/_tabs-common.scss +2 -1
  227. package/tags/tag-input.d.ts +4 -3
  228. package/tags/tag-list.component.d.ts +1 -0
  229. package/tags/tag-tokens.scss +4 -4
  230. package/textarea/textarea.component.d.ts +1 -0
  231. package/title/title.directive.d.ts +0 -1
  232. package/toggle/toggle.component.d.ts +4 -3
  233. package/tooltip/tooltip-tokens.scss +4 -4
  234. package/tooltip/tooltip.component.d.ts +22 -2
  235. package/top-bar/top-bar.scss +3 -0
  236. package/tree/_tree-theme.scss +0 -19
  237. package/tree/tree-option.component.d.ts +9 -3
  238. package/tree/tree-option.scss +9 -5
  239. package/tree/tree-selection.component.d.ts +2 -0
  240. package/tree-select/tree-select.component.d.ts +1 -0
  241. package/accordion/accordion-item.directive.d.ts +0 -72
  242. package/accordion/accordion-root.directive.d.ts +0 -64
@@ -1,10 +1,12 @@
1
- import { CdkConnectedOverlay, CdkOverlayOrigin, ScrollStrategy } from '@angular/cdk/overlay';
2
- import { TemplateRef } from '@angular/core';
1
+ import { CdkConnectedOverlay, ScrollStrategy } from '@angular/cdk/overlay';
2
+ import { ElementRef, TemplateRef } from '@angular/core';
3
3
  import { KbqComponentColors, PopUpPlacements } from '@koobiq/components/core';
4
4
  import { KbqDropdownTrigger } from '@koobiq/components/dropdown';
5
5
  import { KbqFormField, KbqLabel } from '@koobiq/components/form-field';
6
6
  import { KbqTooltipTrigger } from '@koobiq/components/tooltip';
7
7
  import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/cdk/a11y";
9
+ export type KbqInlineEditMode = 'view' | 'edit';
8
10
  /** @docs-private */
9
11
  export declare class KbqFocusRegionItem {
10
12
  readonly tabOut: import("@angular/core").OutputEmitterRef<KeyboardEvent>;
@@ -35,10 +37,10 @@ export declare class KbqInlineEditMenu {
35
37
  * Edit mode opens in a positioned overlay that matches the view mode width or can be customized.
36
38
  */
37
39
  export declare class KbqInlineEdit {
38
- private readonly elementRef;
39
- private readonly focusMonitor;
40
40
  private readonly overlay;
41
41
  private readonly document;
42
+ private readonly resizeObserver;
43
+ protected readonly elementRef: ElementRef<HTMLElement>;
42
44
  /**
43
45
  * Whether to show save/cancel action buttons in edit mode.
44
46
  * @default false
@@ -64,16 +66,22 @@ export declare class KbqInlineEdit {
64
66
  readonly getValueHandler: import("@angular/core").InputSignal<(() => unknown) | undefined>;
65
67
  /** Handler function to update the value */
66
68
  readonly setValueHandler: import("@angular/core").InputSignal<((value: any) => void) | undefined>;
69
+ /** Customizable function that checks if saving on enter available. */
70
+ readonly canSaveOnEnter: import("@angular/core").InputSignal<(event: KeyboardEvent) => boolean>;
67
71
  /**
68
- * Customizable function that checks if saving on enter available.
72
+ * CSS selectors for elements in view mode that should handle clicks instead of opening edit mode.
73
+ * Override to replace or extend the default list.
74
+ *
75
+ * @example
76
+ * `<kbq-inline-edit [interactiveSelectors]="['a', 'kbq-tag', 'button']">`
69
77
  */
70
- readonly canSaveOnEnter: import("@angular/core").InputSignal<(event: KeyboardEvent) => boolean>;
78
+ readonly interactiveSelectors: import("@angular/core").InputSignal<string[]>;
71
79
  /** Emitted when the inline edit is saved successfully. */
72
80
  protected readonly saved: import("@angular/core").OutputEmitterRef<void>;
73
81
  /** Emitted when the inline edit is canceled and changes are discarded. */
74
82
  protected readonly canceled: import("@angular/core").OutputEmitterRef<void>;
75
83
  /** Emitted when mode switched to edit/view */
76
- protected readonly modeChange: import("@angular/core").OutputEmitterRef<"view" | "edit">;
84
+ protected readonly modeChange: import("@angular/core").OutputEmitterRef<KbqInlineEditMode>;
77
85
  /** @docs-private */
78
86
  protected readonly menu: import("@angular/core").Signal<KbqInlineEditMenu | undefined>;
79
87
  /** @docs-private */
@@ -81,21 +89,25 @@ export declare class KbqInlineEdit {
81
89
  /** @docs-private */
82
90
  protected readonly formFieldRef: import("@angular/core").Signal<KbqFormField | undefined>;
83
91
  /** @docs-private */
84
- protected readonly overlayOrigin: import("@angular/core").Signal<CdkOverlayOrigin>;
92
+ protected readonly formFieldRefList: import("@angular/core").Signal<readonly KbqFormField[]>;
93
+ /** @docs-private */
94
+ protected overlayOrigin: HTMLElement;
85
95
  /** @docs-private */
86
96
  protected readonly tooltipTrigger: import("@angular/core").Signal<KbqTooltipTrigger | undefined>;
87
97
  /** @docs-private */
98
+ protected readonly viewContainer: import("@angular/core").Signal<ElementRef<HTMLElement>>;
99
+ /** @docs-private */
88
100
  protected readonly overlayDir: import("@angular/core").Signal<CdkConnectedOverlay | undefined>;
89
101
  /** @docs-private */
90
102
  protected readonly regionItems: import("@angular/core").Signal<readonly KbqFocusRegionItem[]>;
91
103
  /** @docs-private */
92
- protected readonly mode: import("@angular/core").WritableSignal<"view" | "edit">;
104
+ protected readonly mode: import("@angular/core").WritableSignal<KbqInlineEditMode>;
93
105
  /** @docs-private */
94
106
  protected readonly overlayWidth: import("@angular/core").WritableSignal<string | number>;
95
107
  /** @docs-private */
96
108
  protected readonly scrollStrategy: import("@angular/core").WritableSignal<ScrollStrategy>;
97
109
  /** @docs-private */
98
- readonly modeAsReadonly: import("@angular/core").Signal<"view" | "edit">;
110
+ readonly modeAsReadonly: import("@angular/core").Signal<KbqInlineEditMode>;
99
111
  /** @docs-private */
100
112
  protected readonly className: import("@angular/core").Signal<string>;
101
113
  /** @docs-private */
@@ -120,6 +132,13 @@ export declare class KbqInlineEdit {
120
132
  protected cancel(): void;
121
133
  /** @docs-private */
122
134
  protected onOverlayKeydown(event: KeyboardEvent): void;
135
+ /**
136
+ * Block propagation of overlay outside click.
137
+ * Used to prevent reopening when target is inline edit itself.
138
+ * @docs-private
139
+ */
140
+ protected onOverlayOutsideClick($event: Event): void;
141
+ private isInteractiveElement;
123
142
  /**
124
143
  * Sets up Tab key listeners on region items.
125
144
  * Single item: Tab moves to next edit.
@@ -134,6 +153,7 @@ export declare class KbqInlineEdit {
134
153
  private setOverlayWidth;
135
154
  private openPanel;
136
155
  private getInputNativeElement;
156
+ private markAllAsTouched;
137
157
  static ɵfac: i0.ɵɵFactoryDeclaration<KbqInlineEdit, never>;
138
- static ɵcmp: i0.ɵɵComponentDeclaration<KbqInlineEdit, "kbq-inline-edit", ["kbqInlineEdit"], { "showActions": { "alias": "showActions"; "required": false; "isSignal": true; }; "showTooltipOnError": { "alias": "showTooltipOnError"; "required": false; "isSignal": true; }; "validationTooltip": { "alias": "validationTooltip"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "editModeWidth": { "alias": "editModeWidth"; "required": false; "isSignal": true; }; "tooltipPlacement": { "alias": "tooltipPlacement"; "required": false; "isSignal": true; }; "getValueHandler": { "alias": "getValueHandler"; "required": false; "isSignal": true; }; "setValueHandler": { "alias": "setValueHandler"; "required": false; "isSignal": true; }; "canSaveOnEnter": { "alias": "canSaveOnEnter"; "required": false; "isSignal": true; }; }, { "saved": "saved"; "canceled": "canceled"; "modeChange": "modeChange"; }, ["menu", "label", "formFieldRef"], ["kbq-label", "[kbqInlineEditViewMode]", "[kbqInlineEditMenu]", "[kbqInlineEditEditMode]"], true, never>;
158
+ static ɵcmp: i0.ɵɵComponentDeclaration<KbqInlineEdit, "kbq-inline-edit", ["kbqInlineEdit"], { "showActions": { "alias": "showActions"; "required": false; "isSignal": true; }; "showTooltipOnError": { "alias": "showTooltipOnError"; "required": false; "isSignal": true; }; "validationTooltip": { "alias": "validationTooltip"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "editModeWidth": { "alias": "editModeWidth"; "required": false; "isSignal": true; }; "tooltipPlacement": { "alias": "tooltipPlacement"; "required": false; "isSignal": true; }; "getValueHandler": { "alias": "getValueHandler"; "required": false; "isSignal": true; }; "setValueHandler": { "alias": "setValueHandler"; "required": false; "isSignal": true; }; "canSaveOnEnter": { "alias": "canSaveOnEnter"; "required": false; "isSignal": true; }; "interactiveSelectors": { "alias": "interactiveSelectors"; "required": false; "isSignal": true; }; }, { "saved": "saved"; "canceled": "canceled"; "modeChange": "modeChange"; }, ["menu", "label", "formFieldRefList"], ["kbq-label", "[kbqInlineEditViewMode]", "[kbqInlineEditMenu]", "[kbqInlineEditEditMode]"], true, [{ directive: typeof i1.CdkMonitorFocus; inputs: {}; outputs: {}; }]>;
139
159
  }
@@ -29,7 +29,8 @@
29
29
 
30
30
  .kbq-mask__fade {
31
31
  background: var(--kbq-mask-background, transparent);
32
- mask-image: linear-gradient(90deg, transparent, var(--kbq-black-default));
32
+ // @TODO remove fallback (#DS-3002)
33
+ mask-image: linear-gradient(90deg, transparent, var(--kbq-plt-black, var(--kbq-black-default)));
33
34
  }
34
35
 
35
36
  .kbq-mask__container {
@@ -39,6 +40,17 @@
39
40
  }
40
41
 
41
42
  @mixin _inline-edit-theme {
43
+ background: var(--kbq-inline-edit-background);
44
+
45
+ &:focus-visible {
46
+ outline: none;
47
+ }
48
+
49
+ &.cdk-keyboard-focused {
50
+ box-shadow: inset 0 0 0.1px 1px var(--kbq-states-line-focus-theme);
51
+ border-color: var(--kbq-states-line-focus-theme);
52
+ }
53
+
42
54
  &.kbq-inline-edit_view {
43
55
  &:not(.kbq-inline-edit_disabled) {
44
56
  &:hover {
@@ -68,18 +80,8 @@
68
80
  }
69
81
 
70
82
  .kbq-inline-edit__focus_container {
71
- background: var(--kbq-inline-edit-background);
72
- border-color: var(--kbq-inline-edit-background);
73
-
74
- &:focus-visible {
75
- outline: none;
76
- }
77
-
78
- &.cdk-keyboard-focused {
79
- $focused-color: var(--kbq-states-line-focus-theme);
80
- outline: 1px solid $focused-color;
81
- border-color: $focused-color;
82
- }
83
+ display: flex;
84
+ flex-direction: column;
83
85
  }
84
86
  }
85
87
 
@@ -91,16 +93,18 @@
91
93
  display: flex;
92
94
  flex-direction: column;
93
95
  justify-content: center;
96
+ box-sizing: border-box;
97
+
98
+ border: var(--kbq-size-border-width) solid transparent;
94
99
  border-radius: var(--kbq-size-border-radius);
95
100
  padding: var(--kbq-inline-edit-padding-vertical) var(--kbq-inline-edit-padding-horizontal);
96
101
  min-height: var(--kbq-inline-edit-height);
97
- box-sizing: border-box;
98
102
 
99
103
  @include _inline-edit-theme();
100
104
  @include _inline-edit-typography();
101
105
 
102
106
  &:not(.kbq-inline-edit_with-label) {
103
- --kbq-inline-edit-padding-horizontal: var(--kbq-size-m);
107
+ --kbq-inline-edit-padding-horizontal: calc(var(--kbq-size-m) - var(--kbq-size-border-width));
104
108
  }
105
109
 
106
110
  &.kbq-inline-edit_with-label {
@@ -120,6 +124,12 @@
120
124
 
121
125
  &.kbq-inline-edit_view {
122
126
  .kbq-inline-edit__view-container {
127
+ display: flex;
128
+ text-overflow: ellipsis;
129
+ }
130
+
131
+ .kbq-inline-edit__view-content {
132
+ display: inline-block;
123
133
  text-overflow: ellipsis;
124
134
  }
125
135
  }
@@ -137,14 +147,14 @@
137
147
 
138
148
  @include _mask(
139
149
  (
140
- 'top': 0,
141
- 'right': 0
150
+ 'top': calc(var(--kbq-size-border-width) * -1),
151
+ 'right': calc(var(--kbq-size-border-width) * -1)
142
152
  )
143
153
  );
144
154
 
145
155
  .kbq-inline-edit__menu-mask {
146
156
  opacity: 0;
147
- height: 100%;
157
+ height: calc(100% + 2 * var(--kbq-size-border-width));
148
158
  justify-content: flex-end;
149
159
  border-top-right-radius: var(--kbq-size-border-radius);
150
160
  border-bottom-right-radius: var(--kbq-size-border-radius);
@@ -171,18 +181,6 @@
171
181
  z-index: 2;
172
182
  }
173
183
  }
174
-
175
- .kbq-inline-edit__focus_container {
176
- position: absolute;
177
- top: 0;
178
- left: 0;
179
- width: calc(100% - 2 * var(--kbq-size-border-width));
180
- height: calc(100% - 2 * var(--kbq-size-border-width));
181
- border: var(--kbq-size-border-width) solid transparent;
182
- border-radius: var(--kbq-size-border-radius);
183
- // set z-index to hide mask borders
184
- z-index: 1;
185
- }
186
184
  }
187
185
 
188
186
  .kbq-inline-edit__panel {
@@ -10,6 +10,7 @@ export declare class KbqInputPassword implements KbqFormFieldControl<any>, OnCha
10
10
  parentForm: NgForm;
11
11
  parentFormGroup: FormGroupDirective;
12
12
  defaultErrorStateMatcher: ErrorStateMatcher;
13
+ private readonly useLegacyValidation;
13
14
  /** Whether the component is in an error state. */
14
15
  errorState: boolean;
15
16
  /** An object used to control when error messages are shown. */
package/input/input.d.ts CHANGED
@@ -12,6 +12,7 @@ export declare class KbqInput implements KbqFormFieldControl<any>, OnChanges, On
12
12
  parentForm: NgForm;
13
13
  parentFormGroup: FormGroupDirective;
14
14
  defaultErrorStateMatcher: ErrorStateMatcher;
15
+ private readonly useLegacyValidation;
15
16
  /** Whether the component is in an error state. */
16
17
  errorState: boolean;
17
18
  /** An object used to control when error messages are shown. */
@@ -16,9 +16,17 @@
16
16
 
17
17
  &.kbq-text-only,
18
18
  & .kbq-link__text {
19
- border-bottom-style: solid;
20
- border-bottom-width: 1px;
21
- border-bottom-color: transparent;
19
+ text-decoration-line: underline;
20
+ text-decoration-style: solid;
21
+ text-decoration-thickness: var(--kbq-link-underline-width);
22
+ text-decoration-color: transparent;
23
+ text-underline-offset: calc(var(--kbq-link-size-multiline-hit-area-gap) + var(--kbq-link-underline-width));
24
+ }
25
+
26
+ &.kbq-link_multiline {
27
+ padding-top: var(--kbq-link-size-multiline-hit-area-gap);
28
+ padding-bottom: var(--kbq-link-size-multiline-hit-area-gap);
29
+ box-decoration-break: clone;
22
30
  }
23
31
 
24
32
  &.kbq-text-with-icon .kbq-icon {
@@ -104,7 +112,7 @@
104
112
  &:not(.kbq-link_pseudo, .kbq-link_no-underline) {
105
113
  &.kbq-text-only:not(.kbq-text-with-dot),
106
114
  & .kbq-link__text {
107
- border-bottom-color: var(--kbq-#{$base-path}-border-bottom);
115
+ text-decoration-color: var(--kbq-#{$base-path}-border-bottom);
108
116
  }
109
117
  }
110
118
 
@@ -130,7 +138,7 @@
130
138
  &.kbq-link_pseudo {
131
139
  &.kbq-text-only:not(.kbq-text-with-dot),
132
140
  & .kbq-link__text {
133
- border-bottom-color: var(--kbq-link-state-hover-border-bottom);
141
+ text-decoration-color: var(--kbq-link-state-hover-border-bottom);
134
142
  }
135
143
  }
136
144
  }
@@ -142,7 +150,7 @@
142
150
  &.kbq-link_pseudo {
143
151
  &.kbq-text-only:not(.kbq-text-with-dot),
144
152
  & .kbq-link__text {
145
- border-bottom-color: var(--kbq-link-state-active-border-bottom);
153
+ text-decoration-color: var(--kbq-link-state-active-border-bottom);
146
154
  }
147
155
  }
148
156
  }
@@ -163,7 +171,9 @@
163
171
  }
164
172
 
165
173
  &.cdk-keyboard-focused {
166
- outline: var(--kbq-link-state-focused-outline) solid;
174
+ outline-style: solid;
175
+ outline-width: var(--kbq-link-size-state-focused-outline-width);
176
+ outline-color: var(--kbq-link-state-focused-outline);
167
177
  }
168
178
 
169
179
  &.kbq-disabled {
@@ -178,7 +188,7 @@
178
188
  &.kbq-text-only,
179
189
  &.kbq-text-with-icon .kbq-link__text,
180
190
  &.kbq-text-with-dot .kbq-link__text {
181
- border-bottom: none;
191
+ text-decoration: none;
182
192
  }
183
193
 
184
194
  &::after {
@@ -1,22 +1,25 @@
1
1
  .kbq-link {
2
2
  --kbq-link-size-state-focused-outline-offset: 0px;
3
3
  --kbq-link-size-state-focused-outline-width: 2px;
4
+ --kbq-link-size-multiline-hit-area-gap: calc((1lh - 1em) / 2);
4
5
  --kbq-link-size-compact-content-padding: var(--kbq-size-xxs);
5
6
  --kbq-link-size-normal-content-padding: var(--kbq-size-xxs);
6
7
  --kbq-link-size-big-content-padding: var(--kbq-size-xxs);
8
+ --kbq-link-underline-width: 1px;
7
9
  /* THEME TOKENS */
8
10
  --kbq-link-text: var(--kbq-foreground-theme);
9
- --kbq-link-border-bottom: var(--kbq-line-theme-less);
11
+ --kbq-link-border-bottom: var(--kbq-line-theme-fade);
10
12
  --kbq-link-state-visited-text: var(--kbq-foreground-visited);
11
- --kbq-link-state-visited-border-bottom: var(--kbq-line-visited);
13
+ /* @TODO (#DS-3002) */
14
+ --kbq-link-state-visited-border-bottom: var(--kbq-line-visited-fade, var(--kbq-line-visited));
12
15
  --kbq-link-state-visited-hover-text: var(--kbq-states-foreground-visited-hover);
13
- --kbq-link-state-visited-hover-border-bottom: var(--kbq-line-visited);
16
+ --kbq-link-state-visited-hover-border-bottomm: var(--kbq-line-visited-fade, var(--kbq-line-visited));
14
17
  --kbq-link-state-visited-active-text: var(--kbq-states-foreground-visited-active);
15
- --kbq-link-state-visited-active-border-bottom: var(--kbq-line-visited);
18
+ --kbq-link-state-visited-active-border-bottomm: var(--kbq-line-visited-fade, var(--kbq-line-visited));
16
19
  --kbq-link-state-hover-text: var(--kbq-states-foreground-theme-hover);
17
- --kbq-link-state-hover-border-bottom: var(--kbq-line-theme-less);
20
+ --kbq-link-state-hover-border-bottom: var(--kbq-line-theme-fade);
18
21
  --kbq-link-state-active-text: var(--kbq-states-foreground-theme-active);
19
- --kbq-link-state-active-border-bottom: var(--kbq-line-theme-less);
22
+ --kbq-link-state-active-border-bottom: var(--kbq-line-theme-fade);
20
23
  --kbq-link-state-focused-outline: var(--kbq-states-line-focus-theme);
21
24
  --kbq-link-state-disabled-text: var(--kbq-states-foreground-disabled);
22
25
  --kbq-link-state-disabled-border-bottom: var(--kbq-states-line-disabled);
@@ -1,12 +1,11 @@
1
1
  import { FocusMonitor } from '@angular/cdk/a11y';
2
- import { AfterContentInit, AfterViewInit, ChangeDetectorRef, DestroyRef, ElementRef, OnDestroy, QueryList, Renderer2 } from '@angular/core';
2
+ import { AfterContentInit, AfterViewInit, DestroyRef, ElementRef, OnDestroy, QueryList, Renderer2 } from '@angular/core';
3
3
  import { KbqIcon } from '@koobiq/components/icon';
4
4
  import * as i0 from "@angular/core";
5
5
  export declare const baseURLRegex: RegExp;
6
6
  export declare class KbqLink implements AfterContentInit, AfterViewInit, OnDestroy {
7
7
  private elementRef;
8
8
  private focusMonitor;
9
- private changeDetector;
10
9
  protected readonly renderer: Renderer2;
11
10
  protected readonly destroyRef: DestroyRef;
12
11
  protected readonly nativeElement: HTMLElement;
@@ -14,7 +13,8 @@ export declare class KbqLink implements AfterContentInit, AfterViewInit, OnDestr
14
13
  /** Whether the link is disabled. */
15
14
  get disabled(): boolean;
16
15
  set disabled(value: boolean);
17
- private _disabled;
16
+ /** @docs-private */
17
+ readonly disabledSignal: import("@angular/core").WritableSignal<boolean>;
18
18
  get tabIndex(): number;
19
19
  set tabIndex(value: number);
20
20
  private _tabIndex;
@@ -22,14 +22,17 @@ export declare class KbqLink implements AfterContentInit, AfterViewInit, OnDestr
22
22
  noUnderline: boolean;
23
23
  big: boolean;
24
24
  compact: boolean;
25
+ /** Whether the link has an increased hit area for multiline usage. */
26
+ multiline: boolean;
25
27
  useVisited: boolean;
26
28
  get hasIcon(): boolean;
27
29
  set print(value: any);
28
30
  private _print;
29
31
  printMode: boolean;
30
32
  printUrl: string;
33
+ private _disabled;
31
34
  icon: KbqIcon;
32
- constructor(elementRef: ElementRef<HTMLAnchorElement>, focusMonitor: FocusMonitor, changeDetector: ChangeDetectorRef);
35
+ constructor(elementRef: ElementRef<HTMLAnchorElement>, focusMonitor: FocusMonitor);
33
36
  ngAfterViewInit(): void;
34
37
  ngOnDestroy(): void;
35
38
  focus(): void;
@@ -38,12 +41,13 @@ export declare class KbqLink implements AfterContentInit, AfterViewInit, OnDestr
38
41
  private updateClassModifierForIcons;
39
42
  private updatePrintUrl;
40
43
  static ɵfac: i0.ɵɵFactoryDeclaration<KbqLink, never>;
41
- static ɵdir: i0.ɵɵDirectiveDeclaration<KbqLink, "[kbq-link]", ["kbqLink"], { "disabled": { "alias": "disabled"; "required": false; }; "tabIndex": { "alias": "tabIndex"; "required": false; }; "pseudo": { "alias": "pseudo"; "required": false; }; "noUnderline": { "alias": "noUnderline"; "required": false; }; "big": { "alias": "big"; "required": false; }; "compact": { "alias": "compact"; "required": false; }; "useVisited": { "alias": "useVisited"; "required": false; }; "print": { "alias": "print"; "required": false; }; }, {}, ["icon", "icons"], never, true, never>;
44
+ static ɵdir: i0.ɵɵDirectiveDeclaration<KbqLink, "[kbq-link]", ["kbqLink"], { "disabled": { "alias": "disabled"; "required": false; }; "tabIndex": { "alias": "tabIndex"; "required": false; }; "pseudo": { "alias": "pseudo"; "required": false; }; "noUnderline": { "alias": "noUnderline"; "required": false; }; "big": { "alias": "big"; "required": false; }; "compact": { "alias": "compact"; "required": false; }; "multiline": { "alias": "multiline"; "required": false; }; "useVisited": { "alias": "useVisited"; "required": false; }; "print": { "alias": "print"; "required": false; }; }, {}, ["icon", "icons"], never, true, never>;
42
45
  static ngAcceptInputType_disabled: unknown;
43
46
  static ngAcceptInputType_tabIndex: unknown;
44
47
  static ngAcceptInputType_pseudo: unknown;
45
48
  static ngAcceptInputType_noUnderline: unknown;
46
49
  static ngAcceptInputType_big: unknown;
47
50
  static ngAcceptInputType_compact: unknown;
51
+ static ngAcceptInputType_multiline: unknown;
48
52
  static ngAcceptInputType_useVisited: unknown;
49
53
  }
@@ -29,6 +29,18 @@
29
29
  color: var(--kbq-loader-overlay-transparent-caption-color);
30
30
  }
31
31
  }
32
+
33
+ .kbq-loader-overlay_card {
34
+ &.kbq-loader-overlay_filled,
35
+ &.kbq-loader-overlay_transparent {
36
+ background: color-mix(
37
+ in srgb,
38
+ var(--kbq-loader-overlay-card-overlay-background) /* color-mix only allows percentage value */
39
+ calc(var(--kbq-opacity-overlay) * 100%),
40
+ transparent
41
+ );
42
+ }
43
+ }
32
44
  }
33
45
 
34
46
  @mixin kbq-loader-overlay-typography() {
@@ -15,4 +15,5 @@
15
15
  --kbq-loader-overlay-filled-overlay-background: var(--kbq-background-bg);
16
16
  --kbq-loader-overlay-filled-text-color: var(--kbq-foreground-contrast);
17
17
  --kbq-loader-overlay-filled-caption-color: var(--kbq-foreground-contrast-secondary);
18
+ --kbq-loader-overlay-card-overlay-background: var(--kbq-background-card);
18
19
  }
@@ -20,6 +20,11 @@ export declare class KbqLoaderOverlay implements OnInit, OnDestroy {
20
20
  caption: string;
21
21
  size: KbqDefaultSizes;
22
22
  transparent: boolean;
23
+ /**
24
+ * Uses a semi-transparent background to blend
25
+ * with the underlying card or modal surface. When enabled, overrides `transparent`.
26
+ */
27
+ card: boolean;
23
28
  private parent;
24
29
  get isExternalIndicator(): boolean;
25
30
  get isExternalText(): boolean;
@@ -37,5 +42,6 @@ export declare class KbqLoaderOverlay implements OnInit, OnDestroy {
37
42
  ngOnInit(): void;
38
43
  ngOnDestroy(): void;
39
44
  static ɵfac: i0.ɵɵFactoryDeclaration<KbqLoaderOverlay, never>;
40
- static ɵcmp: i0.ɵɵComponentDeclaration<KbqLoaderOverlay, "kbq-loader-overlay", never, { "text": { "alias": "text"; "required": false; }; "caption": { "alias": "caption"; "required": false; }; "size": { "alias": "size"; "required": false; }; "transparent": { "alias": "transparent"; "required": false; }; }, {}, ["externalIndicator", "externalText", "externalCaption"], ["[kbq-loader-overlay-indicator]", "[kbq-loader-overlay-text]", "[kbq-loader-overlay-caption]"], true, never>;
45
+ static ɵcmp: i0.ɵɵComponentDeclaration<KbqLoaderOverlay, "kbq-loader-overlay", never, { "text": { "alias": "text"; "required": false; }; "caption": { "alias": "caption"; "required": false; }; "size": { "alias": "size"; "required": false; }; "transparent": { "alias": "transparent"; "required": false; }; "card": { "alias": "card"; "required": false; }; }, {}, ["externalIndicator", "externalText", "externalCaption"], ["[kbq-loader-overlay-indicator]", "[kbq-loader-overlay-text]", "[kbq-loader-overlay-caption]"], true, never>;
46
+ static ngAcceptInputType_card: unknown;
41
47
  }
@@ -30,7 +30,7 @@
30
30
  }
31
31
 
32
32
  .kbq-markdown__pre,
33
- .kbq-markdown__code:not(.kbq-markdown__a .kbq-markdown__code) {
33
+ .kbq-markdown__code:not(.kbq-markdown__pre > .kbq-markdown__code, .kbq-markdown__a .kbq-markdown__code) {
34
34
  color: var(--kbq-markdown-code-text);
35
35
  background-color: var(--kbq-markdown-code-background);
36
36
  }
@@ -39,36 +39,8 @@
39
39
  background-color: var(--kbq-markdown-code-background);
40
40
  }
41
41
 
42
- .kbq-markdown__a {
43
- color: var(--kbq-markdown-link-text, var(--kbq-foreground-theme));
44
- border-bottom-color: var(--kbq-markdown-link-border-bottom, var(--kbq-line-theme-less));
45
-
46
- &:has(.kbq-markdown__code) {
47
- display: inline;
48
- border-bottom: none;
49
- }
50
-
51
- &:visited {
52
- color: var(--kbq-markdown-link-state-visited-text, var(--kbq-foreground-visited));
53
- border-bottom-color: var(--kbq-markdown-link-state-visited-border-bottom, var(--kbq-line-visited));
54
- }
55
-
56
- &:hover {
57
- color: var(--kbq-markdown-link-state-hover-text, var(--kbq-states-foreground-theme-hover));
58
- transition: color 0ms;
59
- border-bottom-color: var(--kbq-markdown-link-state-hover-border-bottom, var(--kbq-line-theme-less));
60
- }
61
-
62
- &:active {
63
- color: var(--kbq-markdown-link-state-active, var(--kbq-states-foreground-theme-active));
64
- }
65
-
66
- &:focus {
67
- outline: var(--kbq-markdown-link-state-focused-outline, var(--kbq-link-state-focused-outline)) solid
68
- var(--kbq-markdown-link-size-state-focused-outline-width, var(--kbq-size-3xs));
69
-
70
- outline-offset: var(--kbq-markdown-link-size-state-focused-outline-offset, 0);
71
- }
42
+ .kbq-markdown__a:has(.kbq-markdown__code) {
43
+ text-decoration-line: none;
72
44
  }
73
45
 
74
46
  .kbq-markdown__img + em {
@@ -41,9 +41,6 @@
41
41
  --kbq-markdown-code-size-multiline-padding: var(--kbq-size-m) var(--kbq-size-l);
42
42
  --kbq-markdown-code-size-border-radius: var(--kbq-size-border-radius);
43
43
  --kbq-markdown-code-size-border-width: var(--kbq-size-border-width);
44
- --kbq-markdown-link-size-icon-margin: var(--kbq-link-size-normal-content-padding, var(--kbq-size-xxs));
45
- --kbq-markdown-link-size-state-focused-outline-offset: var(--kbq-link-size-state-focused-outline-offset);
46
- --kbq-markdown-link-size-state-focused-outline-width: var(--kbq-link-size-state-focused-outline-width);
47
44
  --kbq-markdown-image-size-max-width: var(--kbq-markdown-size-max-width);
48
45
  --kbq-markdown-image-size-margin-top: var(--kbq-size-m);
49
46
  --kbq-markdown-image-size-margin-bottom: var(--kbq-size-m);
@@ -71,14 +68,6 @@
71
68
  --kbq-markdown-code-text: var(--kbq-foreground-contrast);
72
69
  --kbq-markdown-code-background: var(--kbq-background-contrast-fade);
73
70
  --kbq-markdown-code-border: var(--kbq-line-contrast-less);
74
- --kbq-markdown-link-text: var(--kbq-link-text);
75
- --kbq-markdown-link-border-bottom: var(--kbq-link-border-bottom);
76
- --kbq-markdown-link-state-visited-text: var(--kbq-link-state-visited-text);
77
- --kbq-markdown-link-state-visited-border-bottom: var(--kbq-link-state-visited-border-bottom);
78
- --kbq-markdown-link-state-hover-text: var(--kbq-link-state-hover-text);
79
- --kbq-markdown-link-state-hover-border-bottom: var(--kbq-link-state-hover-border-bottom);
80
- --kbq-markdown-link-state-active: var(--kbq-link-state-active-text);
81
- --kbq-markdown-link-state-focused-outline: var(--kbq-link-state-focused-outline);
82
71
  --kbq-markdown-image-caption-text: var(--kbq-foreground-contrast-secondary);
83
72
  --kbq-markdown-hr-color: var(--kbq-line-contrast-less);
84
73
  --kbq-markdown-table-header: var(--kbq-foreground-contrast-secondary);
@@ -1,26 +1,31 @@
1
- import { ChangeDetectorRef, InjectionToken, Provider } from '@angular/core';
1
+ import { InjectionToken, OnDestroy, Provider } from '@angular/core';
2
2
  import { DomSanitizer, SafeHtml } from '@angular/platform-browser';
3
3
  import { MarkedOptions } from 'marked';
4
4
  import { KbqMarkdownService } from './markdown.service';
5
5
  import * as i0 from "@angular/core";
6
6
  /** List of options for `marked` library. */
7
- export declare const KBQ_MARKDOWN_MARKED_OPTIONS: InjectionToken<MarkedOptions>;
7
+ export declare const KBQ_MARKDOWN_MARKED_OPTIONS: InjectionToken<MarkedOptions<string, string>>;
8
8
  /** Utility provider for `KBQ_MARKDOWN_MARKED_OPTIONS`. */
9
9
  export declare const kbqMarkdownMarkedOptionsProvider: (options: MarkedOptions) => Provider;
10
10
  /** Component which allows to convert `Markdown` into `HTML` */
11
- export declare class KbqMarkdown {
11
+ export declare class KbqMarkdown implements OnDestroy {
12
12
  private readonly markdownService;
13
- private readonly cdr;
14
13
  private sanitizer;
15
14
  private readonly markedOptions?;
16
15
  private readonly contentWrapper;
16
+ private readonly outputWrapper;
17
+ protected resultHtml: import("@angular/core").WritableSignal<SafeHtml | null>;
17
18
  /** `Markdown` text. */
18
19
  get markdownText(): string | null;
19
20
  set markdownText(value: string | null);
20
21
  private _markdownText;
21
- protected resultHtml: SafeHtml;
22
- constructor(markdownService: KbqMarkdownService, cdr: ChangeDetectorRef, sanitizer: DomSanitizer, markedOptions?: MarkedOptions | undefined);
22
+ private readonly focusMonitor;
23
+ private readonly links;
24
+ constructor(markdownService: KbqMarkdownService, sanitizer: DomSanitizer, markedOptions?: MarkedOptions | undefined);
25
+ ngOnDestroy(): void;
23
26
  private getResultHTML;
24
- static ɵfac: i0.ɵɵFactoryDeclaration<KbqMarkdown, [null, null, null, { optional: true; }]>;
27
+ private startMonitoringLinks;
28
+ private stopMonitoringLinks;
29
+ static ɵfac: i0.ɵɵFactoryDeclaration<KbqMarkdown, [null, null, { optional: true; }]>;
25
30
  static ɵcmp: i0.ɵɵComponentDeclaration<KbqMarkdown, "kbq-markdown", never, { "markdownText": { "alias": "markdownText"; "required": false; }; }, {}, never, ["*"], true, never>;
26
31
  }
@@ -33,17 +33,6 @@
33
33
  }
34
34
  }
35
35
 
36
- .kbq-markdown__a {
37
- display: inline;
38
-
39
- text-decoration: none;
40
- cursor: pointer;
41
-
42
- border-bottom-style: solid;
43
- border-bottom-width: 1px;
44
- transition: color ease-out 300ms;
45
- }
46
-
47
36
  .kbq-markdown__p {
48
37
  margin-top: var(--kbq-markdown-p-size-margin-top);
49
38
  margin-bottom: var(--kbq-markdown-p-size-margin-bottom);
@@ -6,6 +6,7 @@ import { KbqModalComponent } from './modal.component';
6
6
  */
7
7
  export declare abstract class KbqModalRef<C = any, R = unknown> {
8
8
  abstract afterOpen: Observable<void>;
9
+ abstract beforeClose: Observable<R | undefined>;
9
10
  abstract afterClose: Observable<R | undefined>;
10
11
  abstract open(): void;
11
12
  abstract close(result?: R): void;