@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,20 +1,22 @@
1
1
  import { trigger, transition, style, animate } from '@angular/animations';
2
- import { FocusMonitor, CdkTrapFocus, CdkMonitorFocus } from '@angular/cdk/a11y';
2
+ import * as i1 from '@angular/cdk/a11y';
3
+ import { CdkTrapFocus, CdkMonitorFocus } from '@angular/cdk/a11y';
3
4
  import { hasModifierKey } from '@angular/cdk/keycodes';
4
- import { Overlay, CdkOverlayOrigin, CdkConnectedOverlay } from '@angular/cdk/overlay';
5
+ import { SharedResizeObserver } from '@angular/cdk/observers/private';
6
+ import { Overlay, CdkConnectedOverlay } from '@angular/cdk/overlay';
5
7
  import { DOCUMENT } from '@angular/common';
6
8
  import * as i0 from '@angular/core';
7
- import { output, Directive, inject, ElementRef, input, booleanAttribute, numberAttribute, contentChild, viewChild, viewChildren, signal, computed, ChangeDetectionStrategy, ViewEncapsulation, Component, NgModule } from '@angular/core';
9
+ import { output, Directive, inject, ElementRef, input, booleanAttribute, numberAttribute, contentChild, computed, contentChildren, viewChild, viewChildren, signal, effect, ChangeDetectionStrategy, ViewEncapsulation, Component, NgModule } from '@angular/core';
8
10
  import { toObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';
9
11
  import { AbstractControl, NgControl } from '@angular/forms';
10
- import * as i1 from '@koobiq/components/button';
12
+ import * as i2 from '@koobiq/components/button';
11
13
  import { KbqButtonModule } from '@koobiq/components/button';
12
- import { KbqAnimationDurations, KbqAnimationCurves, PopUpPlacements, KbqComponentColors } from '@koobiq/components/core';
14
+ import { KbqAnimationDurations, KbqAnimationCurves, PopUpPlacements, KbqComponentColors, isElement } from '@koobiq/components/core';
13
15
  import { KbqDropdownTrigger } from '@koobiq/components/dropdown';
14
16
  import { KbqLabel, KbqFormField } from '@koobiq/components/form-field';
15
17
  import { KbqIcon } from '@koobiq/components/icon';
16
18
  import { KbqTooltipTrigger } from '@koobiq/components/tooltip';
17
- import { skip } from 'rxjs';
19
+ import { skip, merge } from 'rxjs';
18
20
  import { takeUntil } from 'rxjs/operators';
19
21
 
20
22
  const KBQ_INLINE_EDIT_ACTION_BUTTONS_ANIMATION = trigger('panelAnimation', [
@@ -36,10 +38,10 @@ class KbqFocusRegionItem {
36
38
  }
37
39
  this.isFocused = !this.isFocused;
38
40
  }
39
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: KbqFocusRegionItem, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
40
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.18", type: KbqFocusRegionItem, isStandalone: true, selector: "[kbqFocusRegionItem]", outputs: { tabOut: "tabOut" }, host: { listeners: { "focusin": "isFocused = true", "keydown.tab": "onTabOut($event)", "keydown.shift.tab": "onTabOut($event)" } }, exportAs: ["kbqFocusRegionItem"], ngImport: i0 }); }
41
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: KbqFocusRegionItem, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
42
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.20", type: KbqFocusRegionItem, isStandalone: true, selector: "[kbqFocusRegionItem]", outputs: { tabOut: "tabOut" }, host: { listeners: { "focusin": "isFocused = true", "keydown.tab": "onTabOut($event)", "keydown.shift.tab": "onTabOut($event)" } }, exportAs: ["kbqFocusRegionItem"], ngImport: i0 }); }
41
43
  }
42
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: KbqFocusRegionItem, decorators: [{
44
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: KbqFocusRegionItem, decorators: [{
43
45
  type: Directive,
44
46
  args: [{
45
47
  selector: '[kbqFocusRegionItem]',
@@ -53,10 +55,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
53
55
  }] });
54
56
  /** Directive for easy using styles of inline edit placeholder publicly. */
55
57
  class KbqInlineEditPlaceholder {
56
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: KbqInlineEditPlaceholder, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
57
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.18", type: KbqInlineEditPlaceholder, isStandalone: true, selector: "[kbqInlineEditPlaceholder]", host: { classAttribute: "kbq-inline-edit__placeholder" }, exportAs: ["kbqInlineEditPlaceholder"], ngImport: i0 }); }
58
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: KbqInlineEditPlaceholder, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
59
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.20", type: KbqInlineEditPlaceholder, isStandalone: true, selector: "[kbqInlineEditPlaceholder]", host: { classAttribute: "kbq-inline-edit__placeholder" }, exportAs: ["kbqInlineEditPlaceholder"], ngImport: i0 }); }
58
60
  }
59
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: KbqInlineEditPlaceholder, decorators: [{
61
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: KbqInlineEditPlaceholder, decorators: [{
60
62
  type: Directive,
61
63
  args: [{
62
64
  selector: '[kbqInlineEditPlaceholder]',
@@ -76,10 +78,10 @@ class KbqInlineEditMenu {
76
78
  /** @docs-private */
77
79
  this.dropdownTrigger = inject(KbqDropdownTrigger, { optional: true });
78
80
  }
79
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: KbqInlineEditMenu, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
80
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.18", type: KbqInlineEditMenu, isStandalone: true, selector: "[kbqInlineEditMenu]", host: { attributes: { "role": "button" }, listeners: { "click": "$event.stopPropagation()", "keydown.enter": "$event.stopPropagation()", "keydown.space": "$event.stopPropagation()" }, properties: { "class.kbq-active": "dropdownTrigger?.opened" }, classAttribute: "kbq-inline-edit__menu" }, exportAs: ["kbqInlineEditMenu"], ngImport: i0 }); }
81
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: KbqInlineEditMenu, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
82
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.20", type: KbqInlineEditMenu, isStandalone: true, selector: "[kbqInlineEditMenu]", host: { attributes: { "role": "button" }, listeners: { "click": "$event.stopPropagation()", "keydown.enter": "$event.stopPropagation()", "keydown.space": "$event.stopPropagation()" }, properties: { "class.kbq-active": "dropdownTrigger?.opened" }, classAttribute: "kbq-inline-edit__menu" }, exportAs: ["kbqInlineEditMenu"], ngImport: i0 }); }
81
83
  }
82
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: KbqInlineEditMenu, decorators: [{
84
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: KbqInlineEditMenu, decorators: [{
83
85
  type: Directive,
84
86
  args: [{
85
87
  selector: '[kbqInlineEditMenu]',
@@ -101,10 +103,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
101
103
  */
102
104
  class KbqInlineEdit {
103
105
  constructor() {
104
- this.elementRef = inject(ElementRef);
105
- this.focusMonitor = inject(FocusMonitor);
106
106
  this.overlay = inject(Overlay);
107
107
  this.document = inject(DOCUMENT);
108
+ this.resizeObserver = inject(SharedResizeObserver);
109
+ this.elementRef = inject(ElementRef);
108
110
  /**
109
111
  * Whether to show save/cancel action buttons in edit mode.
110
112
  * @default false
@@ -130,10 +132,16 @@ class KbqInlineEdit {
130
132
  this.getValueHandler = input();
131
133
  /** Handler function to update the value */
132
134
  this.setValueHandler = input();
135
+ /** Customizable function that checks if saving on enter available. */
136
+ this.canSaveOnEnter = input((event) => hasModifierKey(event, 'ctrlKey', 'metaKey') || !(event.target instanceof HTMLTextAreaElement));
133
137
  /**
134
- * Customizable function that checks if saving on enter available.
138
+ * CSS selectors for elements in view mode that should handle clicks instead of opening edit mode.
139
+ * Override to replace or extend the default list.
140
+ *
141
+ * @example
142
+ * `<kbq-inline-edit [interactiveSelectors]="['a', 'kbq-tag', 'button']">`
135
143
  */
136
- this.canSaveOnEnter = input((event) => hasModifierKey(event, 'ctrlKey', 'metaKey') || !(event.target instanceof HTMLTextAreaElement));
144
+ this.interactiveSelectors = input(['a', 'kbq-tag']);
137
145
  /** Emitted when the inline edit is saved successfully. */
138
146
  this.saved = output();
139
147
  /** Emitted when the inline edit is canceled and changes are discarded. */
@@ -145,12 +153,16 @@ class KbqInlineEdit {
145
153
  /** @docs-private */
146
154
  this.label = contentChild(KbqLabel);
147
155
  /** @docs-private */
148
- this.formFieldRef = contentChild(KbqFormField);
156
+ this.formFieldRef = computed(() => this.formFieldRefList()[0]);
149
157
  /** @docs-private */
150
- this.overlayOrigin = viewChild.required(CdkOverlayOrigin);
158
+ this.formFieldRefList = contentChildren(KbqFormField, { descendants: true });
159
+ /** @docs-private */
160
+ this.overlayOrigin = this.elementRef.nativeElement;
151
161
  /** @docs-private */
152
162
  this.tooltipTrigger = viewChild(KbqTooltipTrigger);
153
163
  /** @docs-private */
164
+ this.viewContainer = viewChild.required('viewContainer');
165
+ /** @docs-private */
154
166
  this.overlayDir = viewChild(CdkConnectedOverlay);
155
167
  /** @docs-private */
156
168
  this.regionItems = viewChildren(KbqFocusRegionItem);
@@ -175,6 +187,9 @@ class KbqInlineEdit {
175
187
  toObservable(this.mode)
176
188
  .pipe(skip(1), takeUntilDestroyed())
177
189
  .subscribe((currentMode) => this.modeChange.emit(currentMode));
190
+ effect(() => {
191
+ this.overlayOrigin = this.label() ? this.viewContainer().nativeElement : this.elementRef.nativeElement;
192
+ });
178
193
  }
179
194
  /** Manually switch mode */
180
195
  toggleMode() {
@@ -182,19 +197,18 @@ class KbqInlineEdit {
182
197
  }
183
198
  /** @docs-private */
184
199
  onClick(event) {
185
- if (this.disabled() || this.isEditMode())
200
+ if (this.disabled() || this.isEditMode() || this.isInteractiveElement(event.target))
186
201
  return;
187
202
  event.preventDefault();
188
203
  event.stopPropagation();
189
- this.focusMonitor.focusVia(this.overlayOrigin().elementRef, 'program');
190
204
  this.toggleMode();
191
205
  }
192
206
  /** @docs-private */
193
207
  onAttach() {
194
208
  this.setOverlayWidth();
195
209
  this.setOverlayKeydownListener();
196
- const formFieldRef = this.formFieldRef();
197
- formFieldRef?.control.stateChanges
210
+ const formFieldRefList = this.formFieldRefList();
211
+ merge(formFieldRefList.map((ref) => ref.control.stateChanges))
198
212
  .pipe(takeUntil(this.overlayDir().overlayRef.detachments()))
199
213
  .subscribe(() => {
200
214
  if (!this.isInvalid()) {
@@ -203,14 +217,15 @@ class KbqInlineEdit {
203
217
  }
204
218
  });
205
219
  setTimeout(() => {
206
- formFieldRef?.focus();
220
+ const formFieldRef = this.formFieldRef();
221
+ if (!formFieldRef)
222
+ return;
223
+ formFieldRef.focus();
207
224
  this.initialValue = this.getValue();
208
225
  const input = this.getInputNativeElement();
209
226
  if (this.initialValue)
210
227
  input?.select();
211
- if (formFieldRef) {
212
- this.openPanel(formFieldRef);
213
- }
228
+ this.openPanel(formFieldRef);
214
229
  }, 0);
215
230
  }
216
231
  /** @docs-private */
@@ -236,7 +251,7 @@ class KbqInlineEdit {
236
251
  }
237
252
  /** @docs-private */
238
253
  onOverlayKeydown(event) {
239
- this.formFieldRef()?.control.ngControl?.control?.markAsTouched();
254
+ this.markAllAsTouched();
240
255
  const canSaveOnEnter = this.canSaveOnEnter();
241
256
  switch (event.key) {
242
257
  case 'Escape': {
@@ -246,7 +261,7 @@ class KbqInlineEdit {
246
261
  case 'Enter': {
247
262
  if (canSaveOnEnter(event)) {
248
263
  event.preventDefault();
249
- this.formFieldRef()?.control.ngControl?.control?.markAsTouched();
264
+ this.markAllAsTouched();
250
265
  setTimeout(() => this.save(event));
251
266
  }
252
267
  break;
@@ -256,6 +271,24 @@ class KbqInlineEdit {
256
271
  }
257
272
  }
258
273
  }
274
+ /**
275
+ * Block propagation of overlay outside click.
276
+ * Used to prevent reopening when target is inline edit itself.
277
+ * @docs-private
278
+ */
279
+ onOverlayOutsideClick($event) {
280
+ if (isElement($event.target) && this.elementRef.nativeElement.contains($event.target)) {
281
+ $event.preventDefault();
282
+ $event.stopPropagation();
283
+ }
284
+ this.save($event);
285
+ }
286
+ isInteractiveElement(target) {
287
+ const selectors = this.interactiveSelectors();
288
+ if (!selectors.length)
289
+ return false;
290
+ return isElement(target) && !!target.closest(this.interactiveSelectors().join(','));
291
+ }
259
292
  /**
260
293
  * Sets up Tab key listeners on region items.
261
294
  * Single item: Tab moves to next edit.
@@ -281,44 +314,48 @@ class KbqInlineEdit {
281
314
  return;
282
315
  setTimeout(() => {
283
316
  const activeElement = this.document.activeElement;
284
- if (activeElement?.classList?.contains('kbq-inline-edit__focus_container')) {
317
+ if (activeElement?.classList?.contains('kbq-inline-edit')) {
285
318
  activeElement.dispatchEvent(new KeyboardEvent('keydown', { key: 'Enter' }));
286
319
  }
287
320
  });
288
321
  }
289
322
  isInvalid() {
290
- const formFieldRef = this.formFieldRef();
291
- if (!formFieldRef)
323
+ const formFieldRefList = this.formFieldRefList();
324
+ if (!formFieldRefList.length)
292
325
  return false;
293
- return formFieldRef.invalid;
326
+ return formFieldRefList.some((ref) => ref.invalid);
294
327
  }
295
328
  getValue() {
296
329
  const getValueHandler = this.getValueHandler();
297
330
  if (getValueHandler)
298
331
  return getValueHandler();
299
- const control = this.coerceControl();
300
- return control?.value;
332
+ const formFieldRefList = this.formFieldRefList();
333
+ if (!formFieldRefList.length)
334
+ return;
335
+ return this.formFieldRefList().map((ref) => this.coerceControl(ref)?.value);
301
336
  }
302
337
  setValue(value) {
303
338
  const setValue = this.setValueHandler();
304
339
  if (setValue) {
305
- setValue(this.initialValue);
340
+ setValue(value);
306
341
  return;
307
342
  }
308
- const control = this.coerceControl();
309
- if (!control)
343
+ const formFieldRefList = this.formFieldRefList();
344
+ if (!formFieldRefList.length || !Array.isArray(value))
310
345
  return;
311
- if (control instanceof AbstractControl) {
312
- control.setValue(value);
313
- }
314
- else {
315
- control.value = value;
316
- }
346
+ value.forEach((controlValue, index) => {
347
+ const control = this.coerceControl(formFieldRefList[index]);
348
+ if (!control)
349
+ return;
350
+ if (control instanceof AbstractControl) {
351
+ control.setValue(controlValue);
352
+ }
353
+ else {
354
+ control.value = controlValue;
355
+ }
356
+ });
317
357
  }
318
- coerceControl() {
319
- const formFieldRef = this.formFieldRef();
320
- if (!formFieldRef)
321
- return null;
358
+ coerceControl(formFieldRef) {
322
359
  if (formFieldRef.control.ngControl instanceof NgControl) {
323
360
  return formFieldRef.control.ngControl.control;
324
361
  }
@@ -330,10 +367,18 @@ class KbqInlineEdit {
330
367
  this.overlayWidth.set(editModeWidth);
331
368
  return;
332
369
  }
333
- const elementRef = this.label()
334
- ? this.overlayOrigin().elementRef
335
- : this.elementRef;
336
- this.overlayWidth.set(elementRef?.nativeElement.offsetWidth ?? '');
370
+ const element = this.label()
371
+ ? this.elementRef.nativeElement.querySelector('.kbq-inline-edit__focus_container')
372
+ : this.elementRef.nativeElement;
373
+ if (element) {
374
+ this.resizeObserver
375
+ .observe(element)
376
+ .pipe(takeUntil(this.overlayDir().overlayRef.detachments()))
377
+ .subscribe(() => {
378
+ this.overlayWidth.set(element.offsetWidth);
379
+ });
380
+ }
381
+ this.overlayWidth.set(element?.offsetWidth ?? '');
337
382
  }
338
383
  openPanel(formFieldRef) {
339
384
  const control = formFieldRef.control;
@@ -342,22 +387,25 @@ class KbqInlineEdit {
342
387
  getInputNativeElement() {
343
388
  return this.overlayDir()?.overlayRef.overlayElement.querySelector('input:not([type="file"]),textarea') ?? null;
344
389
  }
345
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: KbqInlineEdit, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
346
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.18", type: KbqInlineEdit, isStandalone: true, selector: "kbq-inline-edit", inputs: { showActions: { classPropertyName: "showActions", publicName: "showActions", isSignal: true, isRequired: false, transformFunction: null }, showTooltipOnError: { classPropertyName: "showTooltipOnError", publicName: "showTooltipOnError", isSignal: true, isRequired: false, transformFunction: null }, validationTooltip: { classPropertyName: "validationTooltip", publicName: "validationTooltip", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, editModeWidth: { classPropertyName: "editModeWidth", publicName: "editModeWidth", isSignal: true, isRequired: false, transformFunction: null }, tooltipPlacement: { classPropertyName: "tooltipPlacement", publicName: "tooltipPlacement", isSignal: true, isRequired: false, transformFunction: null }, getValueHandler: { classPropertyName: "getValueHandler", publicName: "getValueHandler", isSignal: true, isRequired: false, transformFunction: null }, setValueHandler: { classPropertyName: "setValueHandler", publicName: "setValueHandler", isSignal: true, isRequired: false, transformFunction: null }, canSaveOnEnter: { classPropertyName: "canSaveOnEnter", publicName: "canSaveOnEnter", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { saved: "saved", canceled: "canceled", modeChange: "modeChange" }, host: { listeners: { "click": "onClick($event)", "keydown.enter": "onClick($event)", "keydown.space": "onClick($event)" }, properties: { "class": "className()", "class.kbq-inline-edit_with-label": "!!label()", "class.kbq-inline-edit_with-menu": "!!menu()", "class.kbq-inline-edit_disabled": "disabled()" }, classAttribute: "kbq-inline-edit" }, queries: [{ propertyName: "menu", first: true, predicate: KbqInlineEditMenu, descendants: true, isSignal: true }, { propertyName: "label", first: true, predicate: KbqLabel, descendants: true, isSignal: true }, { propertyName: "formFieldRef", first: true, predicate: KbqFormField, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "overlayOrigin", first: true, predicate: CdkOverlayOrigin, descendants: true, isSignal: true }, { propertyName: "tooltipTrigger", first: true, predicate: KbqTooltipTrigger, descendants: true, isSignal: true }, { propertyName: "overlayDir", first: true, predicate: CdkConnectedOverlay, descendants: true, isSignal: true }, { propertyName: "regionItems", predicate: KbqFocusRegionItem, descendants: true, isSignal: true }], exportAs: ["kbqInlineEdit"], ngImport: i0, template: "@if (label()) {\n <div class=\"kbq-inline-edit__label\">\n <ng-content select=\"kbq-label\" />\n </div>\n}\n\n<div class=\"kbq-inline-edit__view-container\">\n <ng-content select=\"[kbqInlineEditViewMode]\" />\n\n <div\n #overlayOrigin\n class=\"kbq-inline-edit__focus_container kbq-inline-edit__overlay-origin\"\n cdkMonitorElementFocus\n cdkOverlayOrigin\n [tabIndex]=\"tabIndex()\"\n (keydown.enter)=\"onClick($event)\"\n ></div>\n\n @if (menu() && mode() === 'view') {\n <div class=\"kbq-inline-edit__menu-mask kbq-mask\">\n <div class=\"kbq-inline-edit__menu-mask-fade kbq-mask__fade\"></div>\n <div class=\"kbq-inline-edit__menu-mask-container kbq-mask__container\">\n <ng-content select=\"[kbqInlineEditMenu]\" />\n </div>\n </div>\n }\n\n <ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayLockPosition\n [cdkConnectedOverlayOpen]=\"isEditMode()\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOffsetY]=\"-overlayOrigin.offsetHeight\"\n [cdkConnectedOverlayWidth]=\"overlayWidth()\"\n [cdkConnectedOverlayDisableClose]=\"true\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy()\"\n [cdkConnectedOverlayHasBackdrop]=\"false\"\n (attach)=\"onAttach()\"\n (overlayOutsideClick)=\"save($event)\"\n (overlayKeydown)=\"onOverlayKeydown($event)\"\n >\n <div class=\"kbq-inline-edit__panel\" cdkTrapFocus cdkTrapFocusAutoCapture>\n <div\n class=\"kbq-inline-edit__control-container\"\n kbqFocusRegionItem\n [kbqTooltipColor]=\"colors.Error\"\n [kbqTooltip]=\"validationTooltip() ?? ''\"\n [kbqTooltipArrow]=\"false\"\n [kbqTrigger]=\"'manual'\"\n [kbqPlacement]=\"tooltipPlacement() ?? placements.TopLeft\"\n >\n <ng-content select=\"[kbqInlineEditEditMode]\" />\n </div>\n\n @if (showActions()) {\n <div class=\"kbq-inline-edit__action-buttons\" role=\"group\" [@panelAnimation]>\n <button kbq-button [color]=\"'contrast'\" (click)=\"save($event)\">\n <i kbq-icon=\"kbq-check_16\"></i>\n </button>\n <button\n kbqFocusRegionItem\n kbq-button\n [color]=\"'contrast-fade'\"\n (click)=\"cancel()\"\n (keydown.enter)=\"cancel()\"\n >\n <i kbq-icon=\"kbq-xmark_16\"></i>\n </button>\n </div>\n }\n </div>\n </ng-template>\n</div>\n", styles: [".kbq-inline-edit{display:flex;flex-direction:column;justify-content:center;border-radius:var(--kbq-size-border-radius);padding:var(--kbq-inline-edit-padding-vertical) var(--kbq-inline-edit-padding-horizontal);min-height:var(--kbq-inline-edit-height);box-sizing:border-box}.kbq-inline-edit.kbq-inline-edit_view:not(.kbq-inline-edit_disabled):hover{--kbq-inline-edit-background: var(--kbq-states-background-transparent-hover);--kbq-mask-background: var(--kbq-states-background-contrast-less-hover);cursor:pointer}.kbq-inline-edit.kbq-inline-edit_view:not(.kbq-inline-edit_disabled):active,.kbq-inline-edit.kbq-inline-edit_view:not(.kbq-inline-edit_disabled):has(.kbq-inline-edit__menu.kbq-active){--kbq-inline-edit-background: var(--kbq-states-background-transparent-active);--kbq-mask-background: var(--kbq-states-background-contrast-less-active)}.kbq-inline-edit.kbq-inline-edit_view.kbq-inline-edit_disabled:hover,.kbq-inline-edit.kbq-inline-edit_view.kbq-inline-edit_disabled:has(.kbq-inline-edit__menu.kbq-active){--kbq-mask-background: var(--kbq-background-bg)}.kbq-inline-edit .kbq-label{color:var(--kbq-inline-edit-label-color)}.kbq-inline-edit .kbq-inline-edit__focus_container{background:var(--kbq-inline-edit-background);border-color:var(--kbq-inline-edit-background)}.kbq-inline-edit .kbq-inline-edit__focus_container:focus-visible{outline:none}.kbq-inline-edit .kbq-inline-edit__focus_container.cdk-keyboard-focused{outline:1px solid var(--kbq-states-line-focus-theme);border-color:var(--kbq-states-line-focus-theme)}.kbq-inline-edit{font-size:var(--kbq-typography-text-normal-font-size);font-style:var(--kbq-typography-text-normal-font-style);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}.kbq-inline-edit:not(.kbq-inline-edit_with-label){--kbq-inline-edit-padding-horizontal: var(--kbq-size-m)}.kbq-inline-edit.kbq-inline-edit_with-label{padding-top:var(--kbq-inline-edit-padding-vertical);padding-bottom:var(--kbq-inline-edit-padding-vertical)}.kbq-inline-edit.kbq-inline-edit_with-label.kbq-inline-edit_edit .kbq-inline-edit__view-container{position:relative}.kbq-inline-edit.kbq-inline-edit_with-label .kbq-inline-edit__label{margin-bottom:var(--kbq-size-3xs)}.kbq-inline-edit.kbq-inline-edit_view .kbq-inline-edit__view-container{text-overflow:ellipsis}.kbq-inline-edit:hover .kbq-inline-edit__menu-mask,.kbq-inline-edit.cdk-keyboard-focused .kbq-inline-edit__menu-mask{opacity:1}.kbq-inline-edit .kbq-inline-edit__placeholder{color:var(--kbq-foreground-contrast-secondary)}.kbq-inline-edit{position:relative}.kbq-inline-edit .kbq-mask{display:flex;position:absolute;top:0;right:0}.kbq-inline-edit .kbq-mask .kbq-mask__fade{background:var(--kbq-mask-background, transparent);mask-image:linear-gradient(90deg,transparent,var(--kbq-black-default))}.kbq-inline-edit .kbq-mask .kbq-mask__container{background:var(--kbq-mask-background, transparent)}.kbq-inline-edit .kbq-inline-edit__menu-mask{opacity:0;height:100%;justify-content:flex-end;border-top-right-radius:var(--kbq-size-border-radius);border-bottom-right-radius:var(--kbq-size-border-radius)}.kbq-inline-edit .kbq-inline-edit__menu-mask:has(.kbq-inline-edit__menu.kbq-pressed,.kbq-inline-edit__menu.cdk-keyboard-focused){opacity:1}.kbq-inline-edit .kbq-inline-edit__menu-mask .kbq-inline-edit__menu-mask-fade{width:32px}.kbq-inline-edit .kbq-inline-edit__menu-mask .kbq-inline-edit__menu-mask-container{display:flex;justify-content:flex-end;min-width:40px;border-radius:inherit}.kbq-inline-edit .kbq-inline-edit__menu-mask .kbq-inline-edit__menu{display:inline-flex;align-self:flex-start;padding:var(--kbq-size-s);z-index:2}.kbq-inline-edit .kbq-inline-edit__focus_container{position:absolute;top:0;left:0;width:calc(100% - 2 * var(--kbq-size-border-width));height:calc(100% - 2 * var(--kbq-size-border-width));border:var(--kbq-size-border-width) solid transparent;border-radius:var(--kbq-size-border-radius);z-index:1}.kbq-inline-edit__panel{width:100%}.kbq-inline-edit__panel .kbq-inline-edit__control-container{border-radius:var(--kbq-size-border-radius)}.kbq-inline-edit__panel .kbq-inline-edit__action-buttons{position:absolute;left:calc(-1 * var(--kbq-inline-edit-padding-horizontal));display:inline-flex;flex-direction:row;gap:var(--kbq-size-xxs);padding:var(--kbq-size-xxs) var(--kbq-size-s) var(--kbq-size-s)}.kbq-inline-edit__panel .kbq-inline-edit__control-container,.kbq-inline-edit__panel .kbq-inline-edit__action-buttons>.kbq-button-icon{box-shadow:var(--kbq-shadow-popup)}\n", ":where(.kbq-inline-edit,.kbq-inline-edit__panel){--kbq-inline-edit-background: transparent;--kbq-inline-edit-height: var(--kbq-size-3xl);--kbq-inline-edit-padding-horizontal: var(--kbq-size-s);--kbq-inline-edit-padding-vertical: var(--kbq-size-xs);--kbq-inline-edit-panel-shadow: var(--kbq-shadow-popup);--kbq-inline-edit-label-color: var(--kbq-foreground-contrast-secondary)}\n"], dependencies: [{ kind: "directive", type: CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "ngmodule", type: KbqButtonModule }, { kind: "component", type: i1.KbqButton, selector: "[kbq-button]", inputs: ["kbqStyle", "disabled", "tabIndex"] }, { kind: "directive", type: i1.KbqButtonCssStyler, selector: "[kbq-button]" }, { kind: "component", type: KbqIcon, selector: "[kbq-icon]", inputs: ["small", "autoColor", "kbq-icon"] }, { kind: "directive", type: KbqTooltipTrigger, selector: "[kbqTooltip]", inputs: ["hideWithTimeout", "kbqVisible", "kbqPlacement", "kbqRelativeToPointer", "kbqPlacementPriority", "kbqTooltip", "kbqTooltipDisabled", "kbqEnterDelay", "kbqLeaveDelay", "kbqTrigger", "kbqTooltipClass", "kbqTooltipContext", "kbqTooltipColor", "kbqTooltipArrow", "kbqTooltipOffset"], outputs: ["kbqPlacementChange", "kbqVisibleChange"], exportAs: ["kbqTooltip"] }, { kind: "directive", type: KbqFocusRegionItem, selector: "[kbqFocusRegionItem]", outputs: ["tabOut"], exportAs: ["kbqFocusRegionItem"] }, { kind: "directive", type: CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "directive", type: CdkMonitorFocus, selector: "[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]", outputs: ["cdkFocusChange"], exportAs: ["cdkMonitorFocus"] }], animations: [KBQ_INLINE_EDIT_ACTION_BUTTONS_ANIMATION], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
390
+ markAllAsTouched() {
391
+ this.formFieldRefList().forEach((formField) => formField.control.ngControl?.control?.markAsTouched());
392
+ }
393
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: KbqInlineEdit, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
394
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.20", type: KbqInlineEdit, isStandalone: true, selector: "kbq-inline-edit", inputs: { showActions: { classPropertyName: "showActions", publicName: "showActions", isSignal: true, isRequired: false, transformFunction: null }, showTooltipOnError: { classPropertyName: "showTooltipOnError", publicName: "showTooltipOnError", isSignal: true, isRequired: false, transformFunction: null }, validationTooltip: { classPropertyName: "validationTooltip", publicName: "validationTooltip", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, editModeWidth: { classPropertyName: "editModeWidth", publicName: "editModeWidth", isSignal: true, isRequired: false, transformFunction: null }, tooltipPlacement: { classPropertyName: "tooltipPlacement", publicName: "tooltipPlacement", isSignal: true, isRequired: false, transformFunction: null }, getValueHandler: { classPropertyName: "getValueHandler", publicName: "getValueHandler", isSignal: true, isRequired: false, transformFunction: null }, setValueHandler: { classPropertyName: "setValueHandler", publicName: "setValueHandler", isSignal: true, isRequired: false, transformFunction: null }, canSaveOnEnter: { classPropertyName: "canSaveOnEnter", publicName: "canSaveOnEnter", isSignal: true, isRequired: false, transformFunction: null }, interactiveSelectors: { classPropertyName: "interactiveSelectors", publicName: "interactiveSelectors", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { saved: "saved", canceled: "canceled", modeChange: "modeChange" }, host: { listeners: { "click": "onClick($event)", "keydown.enter": "onClick($event)", "keydown.space": "onClick($event)" }, properties: { "attr.tabindex": "tabIndex()", "class": "className()", "class.kbq-inline-edit_with-label": "!!label()", "class.kbq-inline-edit_with-menu": "!!menu()", "class.kbq-inline-edit_disabled": "disabled()" }, classAttribute: "kbq-inline-edit" }, queries: [{ propertyName: "menu", first: true, predicate: KbqInlineEditMenu, descendants: true, isSignal: true }, { propertyName: "label", first: true, predicate: KbqLabel, descendants: true, isSignal: true }, { propertyName: "formFieldRefList", predicate: KbqFormField, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "tooltipTrigger", first: true, predicate: KbqTooltipTrigger, descendants: true, isSignal: true }, { propertyName: "viewContainer", first: true, predicate: ["viewContainer"], descendants: true, isSignal: true }, { propertyName: "overlayDir", first: true, predicate: CdkConnectedOverlay, descendants: true, isSignal: true }, { propertyName: "regionItems", predicate: KbqFocusRegionItem, descendants: true, isSignal: true }], exportAs: ["kbqInlineEdit"], hostDirectives: [{ directive: i1.CdkMonitorFocus }], ngImport: i0, template: "<div class=\"kbq-inline-edit__focus_container\">\n @if (label()) {\n <div class=\"kbq-inline-edit__label\">\n <ng-content select=\"kbq-label\" />\n </div>\n }\n\n <div #viewContainer class=\"kbq-inline-edit__view-container\">\n <div class=\"kbq-inline-edit__view-content\">\n <ng-content select=\"[kbqInlineEditViewMode]\" />\n </div>\n\n @if (menu() && mode() === 'view') {\n <div class=\"kbq-inline-edit__menu-mask kbq-mask\">\n <div class=\"kbq-inline-edit__menu-mask-fade kbq-mask__fade\"></div>\n <div class=\"kbq-inline-edit__menu-mask-container kbq-mask__container\">\n <ng-content select=\"[kbqInlineEditMenu]\" />\n </div>\n </div>\n }\n\n <ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayLockPosition\n [cdkConnectedOverlayOpen]=\"isEditMode()\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOffsetY]=\"-overlayOrigin.offsetHeight\"\n [cdkConnectedOverlayWidth]=\"overlayWidth()\"\n [cdkConnectedOverlayDisableClose]=\"true\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy()\"\n [cdkConnectedOverlayHasBackdrop]=\"false\"\n (attach)=\"onAttach()\"\n (overlayOutsideClick)=\"onOverlayOutsideClick($event)\"\n (overlayKeydown)=\"onOverlayKeydown($event)\"\n >\n <div class=\"cdk-visually-hidden\" aria-hidden=\"true\" kbqFocusRegionItem tabindex=\"0\"></div>\n <div class=\"kbq-inline-edit__panel\" cdkTrapFocusAutoCapture [cdkTrapFocus]=\"false\">\n <div\n class=\"kbq-inline-edit__control-container\"\n [kbqTooltipColor]=\"colors.Error\"\n [kbqTooltip]=\"validationTooltip() ?? ''\"\n [kbqTooltipArrow]=\"false\"\n [kbqTrigger]=\"'manual'\"\n [kbqPlacement]=\"tooltipPlacement() ?? placements.TopLeft\"\n >\n <ng-content select=\"[kbqInlineEditEditMode]\" />\n </div>\n\n @if (showActions()) {\n <div class=\"kbq-inline-edit__action-buttons\" role=\"group\" [@panelAnimation]>\n <button kbq-button [color]=\"'contrast'\" (click)=\"save($event)\">\n <i kbq-icon=\"kbq-check_16\"></i>\n </button>\n <button kbq-button [color]=\"'contrast-fade'\" (click)=\"cancel()\">\n <i kbq-icon=\"kbq-xmark_16\"></i>\n </button>\n </div>\n }\n </div>\n <div class=\"cdk-visually-hidden\" aria-hidden=\"true\" kbqFocusRegionItem tabindex=\"0\"></div>\n </ng-template>\n </div>\n</div>\n", styles: [".kbq-inline-edit{display:flex;flex-direction:column;justify-content:center;box-sizing:border-box;border:var(--kbq-size-border-width) solid transparent;border-radius:var(--kbq-size-border-radius);padding:var(--kbq-inline-edit-padding-vertical) var(--kbq-inline-edit-padding-horizontal);min-height:var(--kbq-inline-edit-height);background:var(--kbq-inline-edit-background)}.kbq-inline-edit:focus-visible{outline:none}.kbq-inline-edit.cdk-keyboard-focused{box-shadow:inset 0 0 .1px 1px var(--kbq-states-line-focus-theme);border-color:var(--kbq-states-line-focus-theme)}.kbq-inline-edit.kbq-inline-edit_view:not(.kbq-inline-edit_disabled):hover{--kbq-inline-edit-background: var(--kbq-states-background-transparent-hover);--kbq-mask-background: var(--kbq-states-background-contrast-less-hover);cursor:pointer}.kbq-inline-edit.kbq-inline-edit_view:not(.kbq-inline-edit_disabled):active,.kbq-inline-edit.kbq-inline-edit_view:not(.kbq-inline-edit_disabled):has(.kbq-inline-edit__menu.kbq-active){--kbq-inline-edit-background: var(--kbq-states-background-transparent-active);--kbq-mask-background: var(--kbq-states-background-contrast-less-active)}.kbq-inline-edit.kbq-inline-edit_view.kbq-inline-edit_disabled:hover,.kbq-inline-edit.kbq-inline-edit_view.kbq-inline-edit_disabled:has(.kbq-inline-edit__menu.kbq-active){--kbq-mask-background: var(--kbq-background-bg)}.kbq-inline-edit .kbq-label{color:var(--kbq-inline-edit-label-color)}.kbq-inline-edit .kbq-inline-edit__focus_container{display:flex;flex-direction:column}.kbq-inline-edit{font-size:var(--kbq-typography-text-normal-font-size);font-style:var(--kbq-typography-text-normal-font-style);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}.kbq-inline-edit:not(.kbq-inline-edit_with-label){--kbq-inline-edit-padding-horizontal: calc(var(--kbq-size-m) - var(--kbq-size-border-width))}.kbq-inline-edit.kbq-inline-edit_with-label{padding-top:var(--kbq-inline-edit-padding-vertical);padding-bottom:var(--kbq-inline-edit-padding-vertical)}.kbq-inline-edit.kbq-inline-edit_with-label.kbq-inline-edit_edit .kbq-inline-edit__view-container{position:relative}.kbq-inline-edit.kbq-inline-edit_with-label .kbq-inline-edit__label{margin-bottom:var(--kbq-size-3xs)}.kbq-inline-edit.kbq-inline-edit_view .kbq-inline-edit__view-container{display:flex;text-overflow:ellipsis}.kbq-inline-edit.kbq-inline-edit_view .kbq-inline-edit__view-content{display:inline-block;text-overflow:ellipsis}.kbq-inline-edit:hover .kbq-inline-edit__menu-mask,.kbq-inline-edit.cdk-keyboard-focused .kbq-inline-edit__menu-mask{opacity:1}.kbq-inline-edit .kbq-inline-edit__placeholder{color:var(--kbq-foreground-contrast-secondary)}.kbq-inline-edit{position:relative}.kbq-inline-edit .kbq-mask{display:flex;position:absolute;top:calc(var(--kbq-size-border-width) * -1);right:calc(var(--kbq-size-border-width) * -1)}.kbq-inline-edit .kbq-mask .kbq-mask__fade{background:var(--kbq-mask-background, transparent);mask-image:linear-gradient(90deg,transparent,var(--kbq-plt-black, var(--kbq-black-default)))}.kbq-inline-edit .kbq-mask .kbq-mask__container{background:var(--kbq-mask-background, transparent)}.kbq-inline-edit .kbq-inline-edit__menu-mask{opacity:0;height:calc(100% + 2 * var(--kbq-size-border-width));justify-content:flex-end;border-top-right-radius:var(--kbq-size-border-radius);border-bottom-right-radius:var(--kbq-size-border-radius)}.kbq-inline-edit .kbq-inline-edit__menu-mask:has(.kbq-inline-edit__menu.kbq-pressed,.kbq-inline-edit__menu.cdk-keyboard-focused){opacity:1}.kbq-inline-edit .kbq-inline-edit__menu-mask .kbq-inline-edit__menu-mask-fade{width:32px}.kbq-inline-edit .kbq-inline-edit__menu-mask .kbq-inline-edit__menu-mask-container{display:flex;justify-content:flex-end;min-width:40px;border-radius:inherit}.kbq-inline-edit .kbq-inline-edit__menu-mask .kbq-inline-edit__menu{display:inline-flex;align-self:flex-start;padding:var(--kbq-size-s);z-index:2}.kbq-inline-edit__panel{width:100%}.kbq-inline-edit__panel .kbq-inline-edit__control-container{border-radius:var(--kbq-size-border-radius)}.kbq-inline-edit__panel .kbq-inline-edit__action-buttons{position:absolute;left:calc(-1 * var(--kbq-inline-edit-padding-horizontal));display:inline-flex;flex-direction:row;gap:var(--kbq-size-xxs);padding:var(--kbq-size-xxs) var(--kbq-size-s) var(--kbq-size-s)}.kbq-inline-edit__panel .kbq-inline-edit__control-container,.kbq-inline-edit__panel .kbq-inline-edit__action-buttons>.kbq-button-icon{box-shadow:var(--kbq-shadow-popup)}\n", ":where(.kbq-inline-edit,.kbq-inline-edit__panel){--kbq-inline-edit-background: transparent;--kbq-inline-edit-height: calc(var(--kbq-size-3xl) - 2 * var(--kbq-size-border-width));--kbq-inline-edit-padding-horizontal: calc(var(--kbq-size-s) - var(--kbq-size-border-width));--kbq-inline-edit-padding-vertical: calc(var(--kbq-size-xs) - var(--kbq-size-border-width));--kbq-inline-edit-panel-shadow: var(--kbq-shadow-popup);--kbq-inline-edit-label-color: var(--kbq-foreground-contrast-secondary)}\n"], dependencies: [{ kind: "directive", type: CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "ngmodule", type: KbqButtonModule }, { kind: "component", type: i2.KbqButton, selector: "[kbq-button]", inputs: ["kbqStyle", "disabled", "tabIndex"] }, { kind: "directive", type: i2.KbqButtonCssStyler, selector: "[kbq-button]" }, { kind: "component", type: KbqIcon, selector: "[kbq-icon]", inputs: ["small", "autoColor", "kbq-icon"] }, { kind: "directive", type: KbqTooltipTrigger, selector: "[kbqTooltip]", inputs: ["forDisabledComponent", "ignoreTooltipPointerEvents", "hideWithTimeout", "kbqVisible", "kbqPlacement", "kbqRelativeToPointer", "kbqPlacementPriority", "kbqTooltip", "kbqTooltipDisabled", "kbqEnterDelay", "kbqLeaveDelay", "kbqTrigger", "kbqTooltipClass", "kbqTooltipContext", "kbqTooltipColor", "kbqTooltipArrow", "kbqTooltipOffset"], outputs: ["kbqPlacementChange", "kbqVisibleChange"], exportAs: ["kbqTooltip"] }, { kind: "directive", type: KbqFocusRegionItem, selector: "[kbqFocusRegionItem]", outputs: ["tabOut"], exportAs: ["kbqFocusRegionItem"] }, { kind: "directive", type: CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }], animations: [KBQ_INLINE_EDIT_ACTION_BUTTONS_ANIMATION], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
347
395
  }
348
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: KbqInlineEdit, decorators: [{
396
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: KbqInlineEdit, decorators: [{
349
397
  type: Component,
350
398
  args: [{ selector: 'kbq-inline-edit', imports: [
351
399
  CdkConnectedOverlay,
352
- CdkOverlayOrigin,
353
400
  KbqButtonModule,
354
401
  KbqIcon,
355
402
  KbqTooltipTrigger,
356
403
  KbqFocusRegionItem,
357
- CdkTrapFocus,
358
- CdkMonitorFocus
404
+ CdkTrapFocus
359
405
  ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, exportAs: 'kbqInlineEdit', host: {
360
406
  class: baseClass,
407
+ // @TODO: resolve tab queue with content-first (DS-4810)
408
+ '[attr.tabindex]': 'tabIndex()',
361
409
  '[class]': 'className()',
362
410
  '[class.kbq-inline-edit_with-label]': '!!label()',
363
411
  '[class.kbq-inline-edit_with-menu]': '!!menu()',
@@ -365,7 +413,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
365
413
  '(click)': 'onClick($event)',
366
414
  '(keydown.enter)': 'onClick($event)',
367
415
  '(keydown.space)': 'onClick($event)'
368
- }, animations: [KBQ_INLINE_EDIT_ACTION_BUTTONS_ANIMATION], template: "@if (label()) {\n <div class=\"kbq-inline-edit__label\">\n <ng-content select=\"kbq-label\" />\n </div>\n}\n\n<div class=\"kbq-inline-edit__view-container\">\n <ng-content select=\"[kbqInlineEditViewMode]\" />\n\n <div\n #overlayOrigin\n class=\"kbq-inline-edit__focus_container kbq-inline-edit__overlay-origin\"\n cdkMonitorElementFocus\n cdkOverlayOrigin\n [tabIndex]=\"tabIndex()\"\n (keydown.enter)=\"onClick($event)\"\n ></div>\n\n @if (menu() && mode() === 'view') {\n <div class=\"kbq-inline-edit__menu-mask kbq-mask\">\n <div class=\"kbq-inline-edit__menu-mask-fade kbq-mask__fade\"></div>\n <div class=\"kbq-inline-edit__menu-mask-container kbq-mask__container\">\n <ng-content select=\"[kbqInlineEditMenu]\" />\n </div>\n </div>\n }\n\n <ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayLockPosition\n [cdkConnectedOverlayOpen]=\"isEditMode()\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOffsetY]=\"-overlayOrigin.offsetHeight\"\n [cdkConnectedOverlayWidth]=\"overlayWidth()\"\n [cdkConnectedOverlayDisableClose]=\"true\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy()\"\n [cdkConnectedOverlayHasBackdrop]=\"false\"\n (attach)=\"onAttach()\"\n (overlayOutsideClick)=\"save($event)\"\n (overlayKeydown)=\"onOverlayKeydown($event)\"\n >\n <div class=\"kbq-inline-edit__panel\" cdkTrapFocus cdkTrapFocusAutoCapture>\n <div\n class=\"kbq-inline-edit__control-container\"\n kbqFocusRegionItem\n [kbqTooltipColor]=\"colors.Error\"\n [kbqTooltip]=\"validationTooltip() ?? ''\"\n [kbqTooltipArrow]=\"false\"\n [kbqTrigger]=\"'manual'\"\n [kbqPlacement]=\"tooltipPlacement() ?? placements.TopLeft\"\n >\n <ng-content select=\"[kbqInlineEditEditMode]\" />\n </div>\n\n @if (showActions()) {\n <div class=\"kbq-inline-edit__action-buttons\" role=\"group\" [@panelAnimation]>\n <button kbq-button [color]=\"'contrast'\" (click)=\"save($event)\">\n <i kbq-icon=\"kbq-check_16\"></i>\n </button>\n <button\n kbqFocusRegionItem\n kbq-button\n [color]=\"'contrast-fade'\"\n (click)=\"cancel()\"\n (keydown.enter)=\"cancel()\"\n >\n <i kbq-icon=\"kbq-xmark_16\"></i>\n </button>\n </div>\n }\n </div>\n </ng-template>\n</div>\n", styles: [".kbq-inline-edit{display:flex;flex-direction:column;justify-content:center;border-radius:var(--kbq-size-border-radius);padding:var(--kbq-inline-edit-padding-vertical) var(--kbq-inline-edit-padding-horizontal);min-height:var(--kbq-inline-edit-height);box-sizing:border-box}.kbq-inline-edit.kbq-inline-edit_view:not(.kbq-inline-edit_disabled):hover{--kbq-inline-edit-background: var(--kbq-states-background-transparent-hover);--kbq-mask-background: var(--kbq-states-background-contrast-less-hover);cursor:pointer}.kbq-inline-edit.kbq-inline-edit_view:not(.kbq-inline-edit_disabled):active,.kbq-inline-edit.kbq-inline-edit_view:not(.kbq-inline-edit_disabled):has(.kbq-inline-edit__menu.kbq-active){--kbq-inline-edit-background: var(--kbq-states-background-transparent-active);--kbq-mask-background: var(--kbq-states-background-contrast-less-active)}.kbq-inline-edit.kbq-inline-edit_view.kbq-inline-edit_disabled:hover,.kbq-inline-edit.kbq-inline-edit_view.kbq-inline-edit_disabled:has(.kbq-inline-edit__menu.kbq-active){--kbq-mask-background: var(--kbq-background-bg)}.kbq-inline-edit .kbq-label{color:var(--kbq-inline-edit-label-color)}.kbq-inline-edit .kbq-inline-edit__focus_container{background:var(--kbq-inline-edit-background);border-color:var(--kbq-inline-edit-background)}.kbq-inline-edit .kbq-inline-edit__focus_container:focus-visible{outline:none}.kbq-inline-edit .kbq-inline-edit__focus_container.cdk-keyboard-focused{outline:1px solid var(--kbq-states-line-focus-theme);border-color:var(--kbq-states-line-focus-theme)}.kbq-inline-edit{font-size:var(--kbq-typography-text-normal-font-size);font-style:var(--kbq-typography-text-normal-font-style);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}.kbq-inline-edit:not(.kbq-inline-edit_with-label){--kbq-inline-edit-padding-horizontal: var(--kbq-size-m)}.kbq-inline-edit.kbq-inline-edit_with-label{padding-top:var(--kbq-inline-edit-padding-vertical);padding-bottom:var(--kbq-inline-edit-padding-vertical)}.kbq-inline-edit.kbq-inline-edit_with-label.kbq-inline-edit_edit .kbq-inline-edit__view-container{position:relative}.kbq-inline-edit.kbq-inline-edit_with-label .kbq-inline-edit__label{margin-bottom:var(--kbq-size-3xs)}.kbq-inline-edit.kbq-inline-edit_view .kbq-inline-edit__view-container{text-overflow:ellipsis}.kbq-inline-edit:hover .kbq-inline-edit__menu-mask,.kbq-inline-edit.cdk-keyboard-focused .kbq-inline-edit__menu-mask{opacity:1}.kbq-inline-edit .kbq-inline-edit__placeholder{color:var(--kbq-foreground-contrast-secondary)}.kbq-inline-edit{position:relative}.kbq-inline-edit .kbq-mask{display:flex;position:absolute;top:0;right:0}.kbq-inline-edit .kbq-mask .kbq-mask__fade{background:var(--kbq-mask-background, transparent);mask-image:linear-gradient(90deg,transparent,var(--kbq-black-default))}.kbq-inline-edit .kbq-mask .kbq-mask__container{background:var(--kbq-mask-background, transparent)}.kbq-inline-edit .kbq-inline-edit__menu-mask{opacity:0;height:100%;justify-content:flex-end;border-top-right-radius:var(--kbq-size-border-radius);border-bottom-right-radius:var(--kbq-size-border-radius)}.kbq-inline-edit .kbq-inline-edit__menu-mask:has(.kbq-inline-edit__menu.kbq-pressed,.kbq-inline-edit__menu.cdk-keyboard-focused){opacity:1}.kbq-inline-edit .kbq-inline-edit__menu-mask .kbq-inline-edit__menu-mask-fade{width:32px}.kbq-inline-edit .kbq-inline-edit__menu-mask .kbq-inline-edit__menu-mask-container{display:flex;justify-content:flex-end;min-width:40px;border-radius:inherit}.kbq-inline-edit .kbq-inline-edit__menu-mask .kbq-inline-edit__menu{display:inline-flex;align-self:flex-start;padding:var(--kbq-size-s);z-index:2}.kbq-inline-edit .kbq-inline-edit__focus_container{position:absolute;top:0;left:0;width:calc(100% - 2 * var(--kbq-size-border-width));height:calc(100% - 2 * var(--kbq-size-border-width));border:var(--kbq-size-border-width) solid transparent;border-radius:var(--kbq-size-border-radius);z-index:1}.kbq-inline-edit__panel{width:100%}.kbq-inline-edit__panel .kbq-inline-edit__control-container{border-radius:var(--kbq-size-border-radius)}.kbq-inline-edit__panel .kbq-inline-edit__action-buttons{position:absolute;left:calc(-1 * var(--kbq-inline-edit-padding-horizontal));display:inline-flex;flex-direction:row;gap:var(--kbq-size-xxs);padding:var(--kbq-size-xxs) var(--kbq-size-s) var(--kbq-size-s)}.kbq-inline-edit__panel .kbq-inline-edit__control-container,.kbq-inline-edit__panel .kbq-inline-edit__action-buttons>.kbq-button-icon{box-shadow:var(--kbq-shadow-popup)}\n", ":where(.kbq-inline-edit,.kbq-inline-edit__panel){--kbq-inline-edit-background: transparent;--kbq-inline-edit-height: var(--kbq-size-3xl);--kbq-inline-edit-padding-horizontal: var(--kbq-size-s);--kbq-inline-edit-padding-vertical: var(--kbq-size-xs);--kbq-inline-edit-panel-shadow: var(--kbq-shadow-popup);--kbq-inline-edit-label-color: var(--kbq-foreground-contrast-secondary)}\n"] }]
416
+ }, hostDirectives: [
417
+ CdkMonitorFocus
418
+ ], animations: [KBQ_INLINE_EDIT_ACTION_BUTTONS_ANIMATION], template: "<div class=\"kbq-inline-edit__focus_container\">\n @if (label()) {\n <div class=\"kbq-inline-edit__label\">\n <ng-content select=\"kbq-label\" />\n </div>\n }\n\n <div #viewContainer class=\"kbq-inline-edit__view-container\">\n <div class=\"kbq-inline-edit__view-content\">\n <ng-content select=\"[kbqInlineEditViewMode]\" />\n </div>\n\n @if (menu() && mode() === 'view') {\n <div class=\"kbq-inline-edit__menu-mask kbq-mask\">\n <div class=\"kbq-inline-edit__menu-mask-fade kbq-mask__fade\"></div>\n <div class=\"kbq-inline-edit__menu-mask-container kbq-mask__container\">\n <ng-content select=\"[kbqInlineEditMenu]\" />\n </div>\n </div>\n }\n\n <ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayLockPosition\n [cdkConnectedOverlayOpen]=\"isEditMode()\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOffsetY]=\"-overlayOrigin.offsetHeight\"\n [cdkConnectedOverlayWidth]=\"overlayWidth()\"\n [cdkConnectedOverlayDisableClose]=\"true\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy()\"\n [cdkConnectedOverlayHasBackdrop]=\"false\"\n (attach)=\"onAttach()\"\n (overlayOutsideClick)=\"onOverlayOutsideClick($event)\"\n (overlayKeydown)=\"onOverlayKeydown($event)\"\n >\n <div class=\"cdk-visually-hidden\" aria-hidden=\"true\" kbqFocusRegionItem tabindex=\"0\"></div>\n <div class=\"kbq-inline-edit__panel\" cdkTrapFocusAutoCapture [cdkTrapFocus]=\"false\">\n <div\n class=\"kbq-inline-edit__control-container\"\n [kbqTooltipColor]=\"colors.Error\"\n [kbqTooltip]=\"validationTooltip() ?? ''\"\n [kbqTooltipArrow]=\"false\"\n [kbqTrigger]=\"'manual'\"\n [kbqPlacement]=\"tooltipPlacement() ?? placements.TopLeft\"\n >\n <ng-content select=\"[kbqInlineEditEditMode]\" />\n </div>\n\n @if (showActions()) {\n <div class=\"kbq-inline-edit__action-buttons\" role=\"group\" [@panelAnimation]>\n <button kbq-button [color]=\"'contrast'\" (click)=\"save($event)\">\n <i kbq-icon=\"kbq-check_16\"></i>\n </button>\n <button kbq-button [color]=\"'contrast-fade'\" (click)=\"cancel()\">\n <i kbq-icon=\"kbq-xmark_16\"></i>\n </button>\n </div>\n }\n </div>\n <div class=\"cdk-visually-hidden\" aria-hidden=\"true\" kbqFocusRegionItem tabindex=\"0\"></div>\n </ng-template>\n </div>\n</div>\n", styles: [".kbq-inline-edit{display:flex;flex-direction:column;justify-content:center;box-sizing:border-box;border:var(--kbq-size-border-width) solid transparent;border-radius:var(--kbq-size-border-radius);padding:var(--kbq-inline-edit-padding-vertical) var(--kbq-inline-edit-padding-horizontal);min-height:var(--kbq-inline-edit-height);background:var(--kbq-inline-edit-background)}.kbq-inline-edit:focus-visible{outline:none}.kbq-inline-edit.cdk-keyboard-focused{box-shadow:inset 0 0 .1px 1px var(--kbq-states-line-focus-theme);border-color:var(--kbq-states-line-focus-theme)}.kbq-inline-edit.kbq-inline-edit_view:not(.kbq-inline-edit_disabled):hover{--kbq-inline-edit-background: var(--kbq-states-background-transparent-hover);--kbq-mask-background: var(--kbq-states-background-contrast-less-hover);cursor:pointer}.kbq-inline-edit.kbq-inline-edit_view:not(.kbq-inline-edit_disabled):active,.kbq-inline-edit.kbq-inline-edit_view:not(.kbq-inline-edit_disabled):has(.kbq-inline-edit__menu.kbq-active){--kbq-inline-edit-background: var(--kbq-states-background-transparent-active);--kbq-mask-background: var(--kbq-states-background-contrast-less-active)}.kbq-inline-edit.kbq-inline-edit_view.kbq-inline-edit_disabled:hover,.kbq-inline-edit.kbq-inline-edit_view.kbq-inline-edit_disabled:has(.kbq-inline-edit__menu.kbq-active){--kbq-mask-background: var(--kbq-background-bg)}.kbq-inline-edit .kbq-label{color:var(--kbq-inline-edit-label-color)}.kbq-inline-edit .kbq-inline-edit__focus_container{display:flex;flex-direction:column}.kbq-inline-edit{font-size:var(--kbq-typography-text-normal-font-size);font-style:var(--kbq-typography-text-normal-font-style);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}.kbq-inline-edit:not(.kbq-inline-edit_with-label){--kbq-inline-edit-padding-horizontal: calc(var(--kbq-size-m) - var(--kbq-size-border-width))}.kbq-inline-edit.kbq-inline-edit_with-label{padding-top:var(--kbq-inline-edit-padding-vertical);padding-bottom:var(--kbq-inline-edit-padding-vertical)}.kbq-inline-edit.kbq-inline-edit_with-label.kbq-inline-edit_edit .kbq-inline-edit__view-container{position:relative}.kbq-inline-edit.kbq-inline-edit_with-label .kbq-inline-edit__label{margin-bottom:var(--kbq-size-3xs)}.kbq-inline-edit.kbq-inline-edit_view .kbq-inline-edit__view-container{display:flex;text-overflow:ellipsis}.kbq-inline-edit.kbq-inline-edit_view .kbq-inline-edit__view-content{display:inline-block;text-overflow:ellipsis}.kbq-inline-edit:hover .kbq-inline-edit__menu-mask,.kbq-inline-edit.cdk-keyboard-focused .kbq-inline-edit__menu-mask{opacity:1}.kbq-inline-edit .kbq-inline-edit__placeholder{color:var(--kbq-foreground-contrast-secondary)}.kbq-inline-edit{position:relative}.kbq-inline-edit .kbq-mask{display:flex;position:absolute;top:calc(var(--kbq-size-border-width) * -1);right:calc(var(--kbq-size-border-width) * -1)}.kbq-inline-edit .kbq-mask .kbq-mask__fade{background:var(--kbq-mask-background, transparent);mask-image:linear-gradient(90deg,transparent,var(--kbq-plt-black, var(--kbq-black-default)))}.kbq-inline-edit .kbq-mask .kbq-mask__container{background:var(--kbq-mask-background, transparent)}.kbq-inline-edit .kbq-inline-edit__menu-mask{opacity:0;height:calc(100% + 2 * var(--kbq-size-border-width));justify-content:flex-end;border-top-right-radius:var(--kbq-size-border-radius);border-bottom-right-radius:var(--kbq-size-border-radius)}.kbq-inline-edit .kbq-inline-edit__menu-mask:has(.kbq-inline-edit__menu.kbq-pressed,.kbq-inline-edit__menu.cdk-keyboard-focused){opacity:1}.kbq-inline-edit .kbq-inline-edit__menu-mask .kbq-inline-edit__menu-mask-fade{width:32px}.kbq-inline-edit .kbq-inline-edit__menu-mask .kbq-inline-edit__menu-mask-container{display:flex;justify-content:flex-end;min-width:40px;border-radius:inherit}.kbq-inline-edit .kbq-inline-edit__menu-mask .kbq-inline-edit__menu{display:inline-flex;align-self:flex-start;padding:var(--kbq-size-s);z-index:2}.kbq-inline-edit__panel{width:100%}.kbq-inline-edit__panel .kbq-inline-edit__control-container{border-radius:var(--kbq-size-border-radius)}.kbq-inline-edit__panel .kbq-inline-edit__action-buttons{position:absolute;left:calc(-1 * var(--kbq-inline-edit-padding-horizontal));display:inline-flex;flex-direction:row;gap:var(--kbq-size-xxs);padding:var(--kbq-size-xxs) var(--kbq-size-s) var(--kbq-size-s)}.kbq-inline-edit__panel .kbq-inline-edit__control-container,.kbq-inline-edit__panel .kbq-inline-edit__action-buttons>.kbq-button-icon{box-shadow:var(--kbq-shadow-popup)}\n", ":where(.kbq-inline-edit,.kbq-inline-edit__panel){--kbq-inline-edit-background: transparent;--kbq-inline-edit-height: calc(var(--kbq-size-3xl) - 2 * var(--kbq-size-border-width));--kbq-inline-edit-padding-horizontal: calc(var(--kbq-size-s) - var(--kbq-size-border-width));--kbq-inline-edit-padding-vertical: calc(var(--kbq-size-xs) - var(--kbq-size-border-width));--kbq-inline-edit-panel-shadow: var(--kbq-shadow-popup);--kbq-inline-edit-label-color: var(--kbq-foreground-contrast-secondary)}\n"] }]
369
419
  }], ctorParameters: () => [] });
370
420
 
371
421
  const COMPONENTS = [
@@ -374,15 +424,15 @@ const COMPONENTS = [
374
424
  KbqInlineEditMenu
375
425
  ];
376
426
  class KbqInlineEditModule {
377
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: KbqInlineEditModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
378
- /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.18", ngImport: i0, type: KbqInlineEditModule, imports: [KbqInlineEdit,
427
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: KbqInlineEditModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
428
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.20", ngImport: i0, type: KbqInlineEditModule, imports: [KbqInlineEdit,
379
429
  KbqInlineEditPlaceholder,
380
430
  KbqInlineEditMenu], exports: [KbqInlineEdit,
381
431
  KbqInlineEditPlaceholder,
382
432
  KbqInlineEditMenu] }); }
383
- /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: KbqInlineEditModule, imports: [KbqInlineEdit] }); }
433
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: KbqInlineEditModule, imports: [KbqInlineEdit] }); }
384
434
  }
385
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: KbqInlineEditModule, decorators: [{
435
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: KbqInlineEditModule, decorators: [{
386
436
  type: NgModule,
387
437
  args: [{
388
438
  imports: COMPONENTS,