@koobiq/components 20.1.0 → 20.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (249) hide show
  1. package/accordion/_accordion-theme.scss +6 -2
  2. package/accordion/accordion-tokens.scss +3 -0
  3. package/accordion/{accordion-trigger.component.scss → accordion-trigger.scss} +10 -0
  4. package/accordion/accordion.scss +71 -0
  5. package/accordion/index.d.ts +264 -121
  6. package/actions-panel/index.d.ts +25 -13
  7. package/alert/_alert-theme.scss +14 -0
  8. package/alert/alert.component.scss +24 -13
  9. package/alert/index.d.ts +63 -29
  10. package/app-switcher/app-switcher-dropdown-app.scss +7 -5
  11. package/app-switcher/app-switcher-dropdown-site.scss +6 -4
  12. package/app-switcher/index.d.ts +41 -4
  13. package/app-switcher/kbq-app-switcher-list-item.scss +6 -8
  14. package/autocomplete/autocomplete.scss +2 -1
  15. package/autocomplete/index.d.ts +58 -37
  16. package/badge/index.d.ts +2 -3
  17. package/breadcrumbs/index.d.ts +1 -1
  18. package/button/index.d.ts +2 -2
  19. package/button-toggle/button-toggle-tokens.scss +2 -0
  20. package/button-toggle/button-toggle.scss +9 -0
  21. package/button-toggle/index.d.ts +5 -0
  22. package/checkbox/index.d.ts +33 -29
  23. package/clamped-text/index.d.ts +3 -2
  24. package/code-block/index.d.ts +24 -19
  25. package/content-panel/index.d.ts +1 -1
  26. package/core/index.d.ts +1217 -186
  27. package/core/option/_action-container-mixins.scss +28 -0
  28. package/core/option/_option-theme.scss +24 -0
  29. package/core/option/action.scss +7 -0
  30. package/core/styles/_core.scss +2 -0
  31. package/core/styles/_koobiq-theme.scss +2 -0
  32. package/core/styles/_tokens.scss +1 -0
  33. package/core/styles/common/_animation.scss +31 -24
  34. package/core/styles/common/_connected-overlay.scss +39 -0
  35. package/core/styles/common/_select.scss +19 -2
  36. package/core/styles/common/_tokens.scss +0 -9
  37. package/core/styles/theming/_index.scss +0 -1
  38. package/core/styles/theming/_theming.scss +34 -5
  39. package/datepicker/index.d.ts +46 -15
  40. package/dl/dl.scss +26 -0
  41. package/dl/index.d.ts +8 -1
  42. package/dropdown/_dropdown-theme.scss +28 -2
  43. package/dropdown/dropdown-item.scss +29 -0
  44. package/dropdown/dropdown-tokens.scss +2 -1
  45. package/dropdown/dropdown.scss +16 -1
  46. package/dropdown/index.d.ts +331 -17
  47. package/dynamic-translation/index.d.ts +1 -1
  48. package/fesm2022/koobiq-components-accordion.mjs +480 -317
  49. package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
  50. package/fesm2022/koobiq-components-actions-panel.mjs +57 -46
  51. package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -1
  52. package/fesm2022/koobiq-components-alert.mjs +98 -58
  53. package/fesm2022/koobiq-components-alert.mjs.map +1 -1
  54. package/fesm2022/koobiq-components-app-switcher.mjs +233 -38
  55. package/fesm2022/koobiq-components-app-switcher.mjs.map +1 -1
  56. package/fesm2022/koobiq-components-autocomplete.mjs +89 -52
  57. package/fesm2022/koobiq-components-autocomplete.mjs.map +1 -1
  58. package/fesm2022/koobiq-components-badge.mjs +18 -17
  59. package/fesm2022/koobiq-components-badge.mjs.map +1 -1
  60. package/fesm2022/koobiq-components-breadcrumbs.mjs +25 -25
  61. package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
  62. package/fesm2022/koobiq-components-button-toggle.mjs +17 -12
  63. package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
  64. package/fesm2022/koobiq-components-button.mjs +25 -25
  65. package/fesm2022/koobiq-components-checkbox.mjs +69 -92
  66. package/fesm2022/koobiq-components-checkbox.mjs.map +1 -1
  67. package/fesm2022/koobiq-components-clamped-text.mjs +18 -13
  68. package/fesm2022/koobiq-components-clamped-text.mjs.map +1 -1
  69. package/fesm2022/koobiq-components-code-block.mjs +56 -69
  70. package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
  71. package/fesm2022/koobiq-components-content-panel.mjs +29 -29
  72. package/fesm2022/koobiq-components-core.mjs +2485 -735
  73. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  74. package/fesm2022/koobiq-components-datepicker.mjs +168 -126
  75. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  76. package/fesm2022/koobiq-components-divider.mjs +7 -7
  77. package/fesm2022/koobiq-components-dl.mjs +23 -15
  78. package/fesm2022/koobiq-components-dl.mjs.map +1 -1
  79. package/fesm2022/koobiq-components-dropdown.mjs +814 -136
  80. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  81. package/fesm2022/koobiq-components-dynamic-translation.mjs +13 -13
  82. package/fesm2022/koobiq-components-ellipsis-center.mjs +7 -7
  83. package/fesm2022/koobiq-components-empty-state.mjs +19 -19
  84. package/fesm2022/koobiq-components-file-upload.mjs +74 -42
  85. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  86. package/fesm2022/koobiq-components-filter-bar.mjs +783 -199
  87. package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
  88. package/fesm2022/koobiq-components-flag.mjs +7 -7
  89. package/fesm2022/koobiq-components-form-field.mjs +350 -162
  90. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  91. package/fesm2022/koobiq-components-icon.mjs +52 -25
  92. package/fesm2022/koobiq-components-icon.mjs.map +1 -1
  93. package/fesm2022/koobiq-components-inline-edit.mjs +175 -28
  94. package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
  95. package/fesm2022/koobiq-components-input.mjs +41 -24
  96. package/fesm2022/koobiq-components-input.mjs.map +1 -1
  97. package/fesm2022/koobiq-components-link.mjs +8 -8
  98. package/fesm2022/koobiq-components-list.mjs +657 -143
  99. package/fesm2022/koobiq-components-list.mjs.map +1 -1
  100. package/fesm2022/koobiq-components-loader-overlay.mjs +16 -16
  101. package/fesm2022/koobiq-components-markdown.mjs +14 -11
  102. package/fesm2022/koobiq-components-markdown.mjs.map +1 -1
  103. package/fesm2022/koobiq-components-modal.mjs +59 -35
  104. package/fesm2022/koobiq-components-modal.mjs.map +1 -1
  105. package/fesm2022/koobiq-components-navbar.mjs +177 -67
  106. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  107. package/fesm2022/koobiq-components-notification-center.mjs +40 -24
  108. package/fesm2022/koobiq-components-notification-center.mjs.map +1 -1
  109. package/fesm2022/koobiq-components-overflow-items.mjs +16 -17
  110. package/fesm2022/koobiq-components-overflow-items.mjs.map +1 -1
  111. package/fesm2022/koobiq-components-popover.mjs +31 -21
  112. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  113. package/fesm2022/koobiq-components-progress-bar.mjs +13 -13
  114. package/fesm2022/koobiq-components-progress-spinner.mjs +13 -13
  115. package/fesm2022/koobiq-components-radio.mjs +10 -10
  116. package/fesm2022/koobiq-components-resizer.mjs +33 -14
  117. package/fesm2022/koobiq-components-resizer.mjs.map +1 -1
  118. package/fesm2022/koobiq-components-scrollbar.mjs +10 -10
  119. package/fesm2022/koobiq-components-search-expandable.mjs +49 -14
  120. package/fesm2022/koobiq-components-search-expandable.mjs.map +1 -1
  121. package/fesm2022/koobiq-components-select.mjs +450 -146
  122. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  123. package/fesm2022/koobiq-components-sidebar.mjs +14 -14
  124. package/fesm2022/koobiq-components-sidepanel.mjs +26 -26
  125. package/fesm2022/koobiq-components-skeleton.mjs +10 -10
  126. package/fesm2022/koobiq-components-split-button.mjs +10 -17
  127. package/fesm2022/koobiq-components-split-button.mjs.map +1 -1
  128. package/fesm2022/koobiq-components-splitter.mjs +17 -17
  129. package/fesm2022/koobiq-components-table.mjs +15 -13
  130. package/fesm2022/koobiq-components-table.mjs.map +1 -1
  131. package/fesm2022/koobiq-components-tabs.mjs +80 -68
  132. package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
  133. package/fesm2022/koobiq-components-tags.mjs +283 -122
  134. package/fesm2022/koobiq-components-tags.mjs.map +1 -1
  135. package/fesm2022/koobiq-components-textarea.mjs +13 -8
  136. package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
  137. package/fesm2022/koobiq-components-time-range.mjs +29 -24
  138. package/fesm2022/koobiq-components-time-range.mjs.map +1 -1
  139. package/fesm2022/koobiq-components-timepicker.mjs +61 -30
  140. package/fesm2022/koobiq-components-timepicker.mjs.map +1 -1
  141. package/fesm2022/koobiq-components-timezone.mjs +77 -42
  142. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  143. package/fesm2022/koobiq-components-title.mjs +7 -7
  144. package/fesm2022/koobiq-components-toast.mjs +51 -26
  145. package/fesm2022/koobiq-components-toast.mjs.map +1 -1
  146. package/fesm2022/koobiq-components-toggle.mjs +72 -64
  147. package/fesm2022/koobiq-components-toggle.mjs.map +1 -1
  148. package/fesm2022/koobiq-components-tooltip.mjs +219 -28
  149. package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
  150. package/fesm2022/koobiq-components-top-bar.mjs +13 -13
  151. package/fesm2022/koobiq-components-tree-select.mjs +222 -80
  152. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  153. package/fesm2022/koobiq-components-tree.mjs +302 -81
  154. package/fesm2022/koobiq-components-tree.mjs.map +1 -1
  155. package/fesm2022/koobiq-components-username.mjs +27 -27
  156. package/file-upload/index.d.ts +25 -6
  157. package/file-upload/multiple-file-upload.component.scss +14 -0
  158. package/filter-bar/_filter-bar-theme.scss +0 -10
  159. package/filter-bar/filter-bar-tokens.scss +3 -0
  160. package/filter-bar/filters.scss +3 -2
  161. package/filter-bar/index.d.ts +281 -9
  162. package/filter-bar/pipes/base-pipe.scss +0 -11
  163. package/filter-bar/pipes/pipe-input.scss +10 -0
  164. package/filter-bar/pipes/pipe-multi-tree-select.scss +0 -6
  165. package/filter-bar/pipes/pipe-multiselect.scss +0 -6
  166. package/filter-bar/pipes/pipe-tree-select.scss +0 -6
  167. package/form-field/_form-field-theme.scss +76 -20
  168. package/form-field/fieldset.scss +10 -0
  169. package/form-field/form-field-tokens.scss +15 -1
  170. package/form-field/form-field.scss +15 -19
  171. package/form-field/index.d.ts +147 -65
  172. package/icon/icon-button.scss +3 -1
  173. package/icon/index.d.ts +45 -7
  174. package/inline-edit/index.d.ts +57 -4
  175. package/inline-edit/inline-edit.scss +10 -0
  176. package/input/index.d.ts +17 -2
  177. package/list/_list-theme.scss +42 -10
  178. package/list/index.d.ts +326 -79
  179. package/list/list-tokens.scss +43 -8
  180. package/list/list.scss +186 -12
  181. package/markdown/index.d.ts +1 -1
  182. package/modal/index.d.ts +21 -4
  183. package/modal/modal-tokens.scss +1 -1
  184. package/navbar/_navbar-item_vertical.scss +7 -5
  185. package/navbar/index.d.ts +54 -5
  186. package/navbar/navbar-brand.scss +23 -7
  187. package/navbar/vertical-navbar.scss +6 -0
  188. package/notification-center/index.d.ts +2 -1
  189. package/notification-center/notification-item.scss +6 -0
  190. package/package.json +3 -6
  191. package/popover/index.d.ts +2 -2
  192. package/prebuilt-themes/dark-theme.css +1 -1
  193. package/prebuilt-themes/light-theme.css +1 -1
  194. package/prebuilt-themes/theme.css +1 -1
  195. package/resizer/index.d.ts +12 -0
  196. package/schematics/collection.json +10 -0
  197. package/schematics/migrations/alert-signals/README.md +64 -0
  198. package/schematics/migrations/alert-signals/data.js +70 -0
  199. package/schematics/migrations/alert-signals/index.js +350 -0
  200. package/schematics/migrations/alert-signals/schema.json +20 -0
  201. package/schematics/migrations/autocomplete-panel-width-auto/README.md +68 -0
  202. package/schematics/migrations/autocomplete-panel-width-auto/index.js +70 -0
  203. package/schematics/migrations/autocomplete-panel-width-auto/schema.json +15 -0
  204. package/schematics/migrations/deprecated-icons/README.md +29 -4
  205. package/schematics/migrations/deprecated-icons/data.js +7 -0
  206. package/schematics/migrations/deprecated-icons/index.js +62 -35
  207. package/schematics/migrations/filter-bar-signals/README.md +1 -1
  208. package/schematics/migrations/new-icons-pack/README.md +37 -2
  209. package/schematics/migrations/new-icons-pack/data.js +8 -0
  210. package/schematics/migrations/new-icons-pack/index.js +144 -53
  211. package/schematics/migrations.json +11 -1
  212. package/schematics/ng-add/index.js +3 -3
  213. package/schematics/utils/angular-parsing.js +41 -14
  214. package/schematics/utils/ast.js +31 -0
  215. package/schematics/utils/icon-migration.js +530 -0
  216. package/schematics/utils/typescript.js +44 -0
  217. package/scrollbar/index.d.ts +1 -1
  218. package/search-expandable/index.d.ts +3 -0
  219. package/select/index.d.ts +212 -40
  220. package/select/select-tokens.scss +0 -1
  221. package/select/select.scss +0 -2
  222. package/splitter/index.d.ts +1 -1
  223. package/table/_table-theme.scss +4 -0
  224. package/table/index.d.ts +2 -1
  225. package/table/table.scss +8 -0
  226. package/tabs/_tabs-common.scss +60 -31
  227. package/tabs/_tabs-theme.scss +12 -0
  228. package/tabs/index.d.ts +2 -2
  229. package/tabs/tab-header.scss +14 -0
  230. package/tabs/tab-nav-bar.scss +4 -0
  231. package/tabs/tabs-tokens.scss +1 -0
  232. package/tags/index.d.ts +128 -29
  233. package/textarea/index.d.ts +5 -0
  234. package/time-range/index.d.ts +1 -1
  235. package/timepicker/index.d.ts +4 -0
  236. package/timezone/index.d.ts +10 -8
  237. package/toast/index.d.ts +26 -3
  238. package/toggle/index.d.ts +34 -14
  239. package/tooltip/index.d.ts +119 -7
  240. package/tree/_tree-theme.scss +25 -5
  241. package/tree/index.d.ts +71 -3
  242. package/tree/tree-option.scss +2 -8
  243. package/tree-select/_tree-select-theme.scss +22 -0
  244. package/tree-select/index.d.ts +127 -36
  245. package/accordion/accordion.component.scss +0 -50
  246. package/core/styles/_tokens.kbq.import.scss +0 -4
  247. package/core/styles/theming/_components-theming.scss +0 -1927
  248. package/filter-bar/pipes/pipe-select.scss +0 -5
  249. package/overflow-items/overflow-items.scss +0 -20
@@ -3,21 +3,22 @@ import * as i1 from '@angular/cdk/a11y';
3
3
  import { CdkTrapFocus, CdkMonitorFocus } from '@angular/cdk/a11y';
4
4
  import { hasModifierKey } from '@angular/cdk/keycodes';
5
5
  import { SharedResizeObserver } from '@angular/cdk/observers/private';
6
- import { Overlay, CdkConnectedOverlay } from '@angular/cdk/overlay';
6
+ import { Overlay, ScrollDispatcher, CdkConnectedOverlay } from '@angular/cdk/overlay';
7
7
  import { DOCUMENT } from '@angular/common';
8
8
  import * as i0 from '@angular/core';
9
- import { output, Directive, inject, ElementRef, input, booleanAttribute, numberAttribute, contentChild, computed, contentChildren, viewChild, viewChildren, signal, effect, ViewEncapsulation, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
9
+ import { output, Directive, inject, ElementRef, NgZone, input, booleanAttribute, numberAttribute, contentChild, computed, contentChildren, viewChild, viewChildren, signal, effect, forwardRef, ViewEncapsulation, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
10
10
  import { toObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';
11
11
  import { AbstractControl, NgControl } from '@angular/forms';
12
12
  import * as i2 from '@koobiq/components/button';
13
13
  import { KbqButtonModule } from '@koobiq/components/button';
14
- import { KbqAnimationDurations, KbqAnimationCurves, PopUpPlacements, KbqComponentColors, isElement } from '@koobiq/components/core';
14
+ import { KbqAnimationDurations, KbqAnimationCurves, KBQ_WINDOW, PopUpPlacements, KbqComponentColors, isElement, KBQ_CONNECTED_OVERLAY_ORIGIN } from '@koobiq/components/core';
15
15
  import { KbqDropdownTrigger } from '@koobiq/components/dropdown';
16
16
  import { KbqLabel, KbqFormField } from '@koobiq/components/form-field';
17
17
  import { KbqIcon } from '@koobiq/components/icon';
18
+ import { KbqSelect } from '@koobiq/components/select';
18
19
  import { KbqTooltipTrigger } from '@koobiq/components/tooltip';
19
20
  import { skip, merge } from 'rxjs';
20
- import { takeUntil } from 'rxjs/operators';
21
+ import { take, takeUntil } from 'rxjs/operators';
21
22
 
22
23
  const KBQ_INLINE_EDIT_ACTION_BUTTONS_ANIMATION = trigger('panelAnimation', [
23
24
  transition(':enter', [
@@ -26,6 +27,11 @@ const KBQ_INLINE_EDIT_ACTION_BUTTONS_ANIMATION = trigger('panelAnimation', [
26
27
  ])
27
28
  ]);
28
29
  const baseClass = 'kbq-inline-edit';
30
+ /**
31
+ * Fallback delay before showing the validation tooltip if `scrollend` never fires — e.g. the browser doesn't
32
+ * support it, or nothing needed to scroll.
33
+ */
34
+ const VALIDATION_TOOLTIP_SCROLL_TIMEOUT = 800;
29
35
  /** @docs-private */
30
36
  class KbqFocusRegionItem {
31
37
  constructor() {
@@ -38,10 +44,10 @@ class KbqFocusRegionItem {
38
44
  }
39
45
  this.isFocused = !this.isFocused;
40
46
  }
41
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: KbqFocusRegionItem, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
42
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.25", 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 }); }
47
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqFocusRegionItem, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
48
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.30", 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 }); }
43
49
  }
44
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: KbqFocusRegionItem, decorators: [{
50
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqFocusRegionItem, decorators: [{
45
51
  type: Directive,
46
52
  args: [{
47
53
  selector: '[kbqFocusRegionItem]',
@@ -55,10 +61,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
55
61
  }], propDecorators: { tabOut: [{ type: i0.Output, args: ["tabOut"] }] } });
56
62
  /** Directive for easy using styles of inline edit placeholder publicly. */
57
63
  class KbqInlineEditPlaceholder {
58
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: KbqInlineEditPlaceholder, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
59
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.25", type: KbqInlineEditPlaceholder, isStandalone: true, selector: "[kbqInlineEditPlaceholder]", host: { classAttribute: "kbq-inline-edit__placeholder" }, exportAs: ["kbqInlineEditPlaceholder"], ngImport: i0 }); }
64
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqInlineEditPlaceholder, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
65
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.30", type: KbqInlineEditPlaceholder, isStandalone: true, selector: "[kbqInlineEditPlaceholder]", host: { classAttribute: "kbq-inline-edit__placeholder" }, exportAs: ["kbqInlineEditPlaceholder"], ngImport: i0 }); }
60
66
  }
61
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: KbqInlineEditPlaceholder, decorators: [{
67
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqInlineEditPlaceholder, decorators: [{
62
68
  type: Directive,
63
69
  args: [{
64
70
  selector: '[kbqInlineEditPlaceholder]',
@@ -78,10 +84,10 @@ class KbqInlineEditMenu {
78
84
  /** @docs-private */
79
85
  this.dropdownTrigger = inject(KbqDropdownTrigger, { optional: true });
80
86
  }
81
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: KbqInlineEditMenu, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
82
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.25", 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 }); }
87
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqInlineEditMenu, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
88
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.30", 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 }); }
83
89
  }
84
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: KbqInlineEditMenu, decorators: [{
90
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqInlineEditMenu, decorators: [{
85
91
  type: Directive,
86
92
  args: [{
87
93
  selector: '[kbqInlineEditMenu]',
@@ -105,8 +111,21 @@ class KbqInlineEdit {
105
111
  constructor() {
106
112
  this.overlay = inject(Overlay);
107
113
  this.document = inject(DOCUMENT);
114
+ this.window = inject(KBQ_WINDOW);
108
115
  this.resizeObserver = inject(SharedResizeObserver);
109
116
  this.elementRef = inject(ElementRef);
117
+ this.ngZone = inject(NgZone);
118
+ this.scrollDispatcher = inject(ScrollDispatcher);
119
+ /**
120
+ * The validation tooltip is anchored inside the edit-mode overlay — an overlay inside another
121
+ * overlay. Its default `close()` scroll strategy would close it the moment either overlay's
122
+ * origin scrolls (including the programmatic scroll `showValidationTooltip()` uses to bring an
123
+ * invalid control into view), so it's overridden to `reposition()` here — passed directly as a
124
+ * per-instance override to this tooltip's `[kbqTooltipScrollStrategy]` input, rather than a DI
125
+ * override, so it doesn't leak into any `kbqTooltip` in projected content.
126
+ * @docs-private
127
+ */
128
+ this.validationTooltipScrollStrategy = () => this.overlay.scrollStrategies.reposition();
110
129
  /**
111
130
  * Whether to show save/cancel action buttons in edit mode.
112
131
  * @default false
@@ -159,6 +178,17 @@ class KbqInlineEdit {
159
178
  /** @docs-private */
160
179
  this.formFieldRefList = contentChildren(KbqFormField, ...(ngDevMode ? [{ debugName: "formFieldRefList", descendants: true }] : [{ descendants: true }]));
161
180
  /** @docs-private */
181
+ this.selectRef = contentChild(KbqSelect, ...(ngDevMode ? [{ debugName: "selectRef", descendants: true }] : [{ descendants: true }]));
182
+ /**
183
+ * Whether edit mode contains a single-value select. When true, edit mode shows only the
184
+ * dropdown panel instead of a bordered field - see the "Select-style editor" example.
185
+ * @docs-private
186
+ */
187
+ this.isSingleSelect = computed(() => {
188
+ const select = this.selectRef();
189
+ return !!select && !select.multiple && !select.multiline();
190
+ }, ...(ngDevMode ? [{ debugName: "isSingleSelect" }] : []));
191
+ /** @docs-private */
162
192
  this.overlayOrigin = this.elementRef.nativeElement;
163
193
  /** @docs-private */
164
194
  this.tooltipTrigger = viewChild.required(KbqTooltipTrigger);
@@ -194,6 +224,8 @@ class KbqInlineEdit {
194
224
  this.placements = PopUpPlacements;
195
225
  /** @docs-private */
196
226
  this.colors = KbqComponentColors;
227
+ /** Handle for an in-flight `showValidationTooltip()` scroll/settle request, if any. */
228
+ this.validationTooltipScrollHandle = null;
197
229
  toObservable(this.mode)
198
230
  .pipe(skip(1), takeUntilDestroyed())
199
231
  .subscribe((currentMode) => this.modeChange.emit(currentMode));
@@ -210,6 +242,19 @@ class KbqInlineEdit {
210
242
  toggleMode() {
211
243
  this.mode.update((mode) => (mode === 'view' ? 'edit' : 'view'));
212
244
  }
245
+ /**
246
+ * Implements `KbqConnectedOverlayOriginProvider`, letting a nested `KbqFormField`'s control
247
+ * anchor its overlay to this element instead of the form-field's own container.
248
+ * When no override is needed, the form-field falls back to its default.
249
+ * @docs-private
250
+ */
251
+ getConnectedOverlayOrigin() {
252
+ return this.isSingleSelect() ? this.elementRef : undefined;
253
+ }
254
+ /** Saves the current value and returns to view mode, running the same validation as a normal save. */
255
+ commit() {
256
+ this.save();
257
+ }
213
258
  /** @docs-private */
214
259
  onClick(event) {
215
260
  if (this.disabled() || this.isEditMode() || this.isInteractiveElement(event.target))
@@ -222,8 +267,12 @@ class KbqInlineEdit {
222
267
  onAttach() {
223
268
  this.setOverlayWidth();
224
269
  this.setOverlayKeydownListener();
270
+ this.overlayDir()
271
+ .overlayRef.detachments()
272
+ .pipe(take(1))
273
+ .subscribe(() => this.validationTooltipScrollHandle?.cancel());
225
274
  const formFieldRefList = this.formFieldRefList();
226
- merge(formFieldRefList.map((ref) => ref.control().stateChanges))
275
+ merge(...formFieldRefList.map((ref) => ref.control().stateChanges))
227
276
  .pipe(takeUntil(this.overlayDir().overlayRef.detachments()))
228
277
  .subscribe(() => {
229
278
  if (!this.isInvalid()) {
@@ -247,10 +296,14 @@ class KbqInlineEdit {
247
296
  }
248
297
  /** @docs-private */
249
298
  save($event) {
299
+ // Guards against a control triggering both its own commit() and the overlay's outside-click handler for the
300
+ // same interaction — without this, the second call would toggle back into edit mode.
301
+ if (!this.isEditMode())
302
+ return;
250
303
  if (this.isInvalid()) {
251
304
  $event?.stopPropagation();
252
305
  if (this.showTooltipOnError() && this.validationTooltip()) {
253
- this.tooltipTrigger()?.show();
306
+ this.showValidationTooltip();
254
307
  }
255
308
  }
256
309
  else {
@@ -258,6 +311,99 @@ class KbqInlineEdit {
258
311
  this.saved.emit();
259
312
  }
260
313
  }
314
+ /**
315
+ * Whether `overlayOrigin` is fully within the viewport and every registered `CdkScrollable`
316
+ * ancestor between it and the viewport. Ancestors without the `CdkScrollable` directive aren't
317
+ * visible to `ScrollDispatcher` and aren't checked — same limitation as the rest of overlay
318
+ * positioning.
319
+ */
320
+ isOverlayOriginFullyVisible() {
321
+ const rect = this.overlayOrigin.getBoundingClientRect();
322
+ const isWithin = (container) => rect.top >= container.top &&
323
+ rect.left >= container.left &&
324
+ rect.bottom <= container.bottom &&
325
+ rect.right <= container.right;
326
+ if (!isWithin({ top: 0, left: 0, bottom: this.window.innerHeight, right: this.window.innerWidth })) {
327
+ return false;
328
+ }
329
+ return this.scrollDispatcher
330
+ .getAncestorScrollContainers(this.overlayOrigin)
331
+ .every((scrollable) => isWithin(scrollable.getElementRef().nativeElement.getBoundingClientRect()));
332
+ }
333
+ /**
334
+ * Shows the validation tooltip, scrolling the invalid control into view first if it isn't fully visible.
335
+ *
336
+ * `scrollIntoView({ behavior: 'smooth' })` finishes asynchronously — for a long scroll distance it can take
337
+ * a while — so showing the tooltip right away would anchor its overlay to a stale, pre-scroll position.
338
+ * `scrollend` reports when the scroll actually completes; the timeout is a fallback for browsers without
339
+ * `scrollend` support and cases where nothing ends up scrolling.
340
+ *
341
+ * TODO(DS-5420): "scroll an element into view, then act once settled" isn't inline-edit-specific — worth
342
+ * extracting into `packages/components/core` in a follow-up. Kept local to this fix for now.
343
+ */
344
+ showValidationTooltip() {
345
+ // save() can fire repeatedly while the control stays invalid (Save button + onOverlayOutsideClick on
346
+ // every outside click) — let an in-flight request finish rather than stacking a second scroll/listener/timer.
347
+ if (this.validationTooltipScrollHandle)
348
+ return;
349
+ if (this.isOverlayOriginFullyVisible()) {
350
+ this.ngZone.run(() => this.tooltipTrigger()?.show());
351
+ return;
352
+ }
353
+ let shown = false;
354
+ let timeoutId = null;
355
+ const removeScrollEndListener = () => this.window.removeEventListener('scrollend', onScrollEnd, { capture: true });
356
+ const clearFallbackTimer = () => {
357
+ if (timeoutId !== null) {
358
+ clearTimeout(timeoutId);
359
+ timeoutId = null;
360
+ }
361
+ };
362
+ const onScrollEnd = () => {
363
+ clearFallbackTimer();
364
+ if (!shown) {
365
+ shown = true;
366
+ removeScrollEndListener();
367
+ this.validationTooltipScrollHandle = null;
368
+ this.ngZone.run(() => this.showValidationTooltipIfStillInvalid());
369
+ return;
370
+ }
371
+ // Already shown via the fallback timeout at a stale position — this late scrollend corrects it
372
+ // instead of re-showing (which would re-trigger the enter animation).
373
+ removeScrollEndListener();
374
+ this.validationTooltipScrollHandle = null;
375
+ this.ngZone.run(() => {
376
+ if (this.isInvalid() && this.tooltipTrigger()?.isOpen) {
377
+ this.tooltipTrigger()?.updatePosition(true);
378
+ }
379
+ });
380
+ };
381
+ const onTimeout = () => {
382
+ timeoutId = null;
383
+ shown = true;
384
+ this.validationTooltipScrollHandle = null;
385
+ this.ngZone.run(() => this.showValidationTooltipIfStillInvalid());
386
+ // Deliberately keep the scrollend listener alive: a late scrollend still corrects the stale
387
+ // position via the branch above. Removed by cancel() or the next onScrollEnd call.
388
+ };
389
+ this.ngZone.runOutsideAngular(() => {
390
+ this.window.addEventListener('scrollend', onScrollEnd, { capture: true });
391
+ });
392
+ timeoutId = setTimeout(onTimeout, VALIDATION_TOOLTIP_SCROLL_TIMEOUT);
393
+ this.validationTooltipScrollHandle = {
394
+ cancel: () => {
395
+ removeScrollEndListener();
396
+ clearFallbackTimer();
397
+ this.validationTooltipScrollHandle = null;
398
+ }
399
+ };
400
+ this.overlayOrigin.scrollIntoView({ block: 'center', inline: 'nearest', behavior: 'smooth' });
401
+ }
402
+ showValidationTooltipIfStillInvalid() {
403
+ if (!(this.isInvalid() && this.showTooltipOnError() && this.validationTooltip()))
404
+ return;
405
+ this.tooltipTrigger()?.show();
406
+ }
261
407
  /** @docs-private */
262
408
  cancel() {
263
409
  this.setValue(this.initialValue);
@@ -399,11 +545,13 @@ class KbqInlineEdit {
399
545
  ? this.elementRef.nativeElement.querySelector('.kbq-inline-edit__focus_container')
400
546
  : this.elementRef.nativeElement;
401
547
  if (element) {
548
+ const overlayRef = this.overlayDir().overlayRef;
402
549
  this.resizeObserver
403
550
  .observe(element)
404
- .pipe(takeUntil(this.overlayDir().overlayRef.detachments()))
551
+ .pipe(takeUntil(overlayRef.detachments()))
405
552
  .subscribe(() => {
406
553
  this.overlayWidth.set(element.offsetWidth);
554
+ overlayRef.updatePosition();
407
555
  });
408
556
  }
409
557
  this.overlayWidth.set(element?.offsetWidth ?? '');
@@ -418,10 +566,10 @@ class KbqInlineEdit {
418
566
  markAllAsTouched() {
419
567
  this.formFieldRefList().forEach((formField) => formField.control().ngControl?.control?.markAsTouched());
420
568
  }
421
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: KbqInlineEdit, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
422
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", 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 }, overlayPanelClass: { classPropertyName: "overlayPanelClass", publicName: "overlayPanelClass", 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()", "class.kbq-inline-edit_anchor-focused": "anchorFocused()" }, 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 (hasInteractiveContent() && mode() === 'view' && !disabled()) {\n <div\n class=\"kbq-inline-edit__focus-anchor cdk-visually-hidden\"\n tabindex=\"0\"\n (focus)=\"anchorFocused.set(true)\"\n (blur)=\"anchorFocused.set(false)\"\n ></div>\n }\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 [cdkConnectedOverlayPanelClass]=\"overlayPanelClass()\"\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 [kbqTooltipDisabled]=\"!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 <div class=\"kbq-inline-edit__action-button\">\n <button kbq-button [color]=\"'contrast'\" (click)=\"save($event)\">\n <i kbq-icon=\"kbq-check_16\"></i>\n </button>\n </div>\n\n <div class=\"kbq-inline-edit__action-button\">\n <button kbq-button [color]=\"'contrast-fade'\" (click)=\"cancel()\">\n <i kbq-icon=\"kbq-xmark_16\"></i>\n </button>\n </div>\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,.kbq-inline-edit.kbq-inline-edit_anchor-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{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,.kbq-inline-edit.kbq-inline-edit_view .kbq-inline-edit__view-content{text-overflow:ellipsis}.kbq-inline-edit:hover .kbq-inline-edit__menu-mask,.kbq-inline-edit.cdk-keyboard-focused .kbq-inline-edit__menu-mask,.kbq-inline-edit.kbq-inline-edit_anchor-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);-webkit-mask-image:linear-gradient(90deg,transparent,var(--kbq-plt-black, var(--kbq-black-default)));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__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-button{box-shadow:var(--kbq-shadow-popup);background-color:var(--kbq-background-bg);border-radius:var(--kbq-size-border-radius)}\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", "kbqTooltipModifier", "kbqTooltipHeader"], 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 }); }
569
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqInlineEdit, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
570
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.30", 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 }, overlayPanelClass: { classPropertyName: "overlayPanelClass", publicName: "overlayPanelClass", 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()", "class.kbq-inline-edit_anchor-focused": "anchorFocused()", "class.kbq-inline-edit_select": "isSingleSelect()" }, classAttribute: "kbq-inline-edit" }, providers: [{ provide: KBQ_CONNECTED_OVERLAY_ORIGIN, useExisting: forwardRef((() => KbqInlineEdit)) }], 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 }, { propertyName: "selectRef", first: true, predicate: KbqSelect, 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 (hasInteractiveContent() && mode() === 'view' && !disabled()) {\n <div\n class=\"kbq-inline-edit__focus-anchor cdk-visually-hidden\"\n tabindex=\"0\"\n (focus)=\"anchorFocused.set(true)\"\n (blur)=\"anchorFocused.set(false)\"\n ></div>\n }\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 [cdkConnectedOverlayPanelClass]=\"overlayPanelClass()\"\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\n class=\"kbq-inline-edit__panel\"\n cdkTrapFocusAutoCapture\n [class.kbq-inline-edit__panel_select]=\"isSingleSelect()\"\n [cdkTrapFocus]=\"false\"\n >\n <div\n class=\"kbq-inline-edit__control-container\"\n [kbqTooltipColor]=\"colors.Error\"\n [kbqTooltip]=\"validationTooltip() ?? ''\"\n [kbqTooltipDisabled]=\"!validationTooltip()\"\n [kbqTooltipArrow]=\"false\"\n [kbqTrigger]=\"'manual'\"\n [kbqPlacement]=\"tooltipPlacement() ?? placements.TopLeft\"\n [kbqTooltipScrollStrategy]=\"validationTooltipScrollStrategy\"\n >\n <ng-content select=\"[kbqInlineEditEditMode]\" />\n </div>\n\n @if (showActions()) {\n <div class=\"kbq-inline-edit__action-buttons\" role=\"group\" [@panelAnimation]>\n <div class=\"kbq-inline-edit__action-button\">\n <button kbq-button [color]=\"'contrast'\" (click)=\"save($event)\">\n <i kbq-icon=\"kbq-check_16\"></i>\n </button>\n </div>\n\n <div class=\"kbq-inline-edit__action-button\">\n <button kbq-button [color]=\"'contrast-fade'\" (click)=\"cancel()\">\n <i kbq-icon=\"kbq-xmark_16\"></i>\n </button>\n </div>\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,.kbq-inline-edit.kbq-inline-edit_anchor-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{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,.kbq-inline-edit.kbq-inline-edit_view .kbq-inline-edit__view-content{text-overflow:ellipsis}.kbq-inline-edit.kbq-inline-edit_select.kbq-inline-edit_edit{--kbq-inline-edit-background: var(--kbq-states-background-transparent-active)}.kbq-inline-edit:hover .kbq-inline-edit__menu-mask,.kbq-inline-edit.cdk-keyboard-focused .kbq-inline-edit__menu-mask,.kbq-inline-edit.kbq-inline-edit_anchor-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);-webkit-mask-image:linear-gradient(90deg,transparent,var(--kbq-plt-black, var(--kbq-black-default)));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__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__panel_select .kbq-inline-edit__control-container{display:none}.kbq-inline-edit__panel .kbq-inline-edit__control-container,.kbq-inline-edit__panel .kbq-inline-edit__action-button{box-shadow:var(--kbq-shadow-popup);background-color:var(--kbq-background-bg);border-radius:var(--kbq-size-border-radius)}\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: ["kbqTooltipScrollStrategy", "forDisabledComponent", "ignoreTooltipPointerEvents", "kbqTooltipSingleInstance", "hideWithTimeout", "kbqVisible", "kbqPlacement", "kbqRelativeToPointer", "kbqPlacementPriority", "kbqTooltip", "kbqTooltipDisabled", "kbqEnterDelay", "kbqLeaveDelay", "kbqTrigger", "kbqTooltipClass", "kbqTooltipContext", "kbqTooltipColor", "kbqTooltipArrow", "kbqTooltipOffset", "kbqTooltipModifier", "kbqTooltipHeader"], 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 }); }
423
571
  }
424
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: KbqInlineEdit, decorators: [{
572
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqInlineEdit, decorators: [{
425
573
  type: Component,
426
574
  args: [{ selector: 'kbq-inline-edit', imports: [
427
575
  CdkConnectedOverlay,
@@ -430,7 +578,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
430
578
  KbqTooltipTrigger,
431
579
  KbqFocusRegionItem,
432
580
  CdkTrapFocus
433
- ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
581
+ ], providers: [{ provide: KBQ_CONNECTED_OVERLAY_ORIGIN, useExisting: forwardRef((() => KbqInlineEdit)) }], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
434
582
  class: baseClass,
435
583
  '[attr.tabindex]': 'tabIndex()',
436
584
  '[class]': 'className()',
@@ -438,13 +586,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
438
586
  '[class.kbq-inline-edit_with-menu]': '!!menu()',
439
587
  '[class.kbq-inline-edit_disabled]': 'disabled()',
440
588
  '[class.kbq-inline-edit_anchor-focused]': 'anchorFocused()',
589
+ '[class.kbq-inline-edit_select]': 'isSingleSelect()',
441
590
  '(click)': 'onClick($event)',
442
591
  '(keydown.enter)': 'onClick($event)',
443
592
  '(keydown.space)': 'onClick($event)'
444
- }, hostDirectives: [
445
- CdkMonitorFocus
446
- ], animations: [KBQ_INLINE_EDIT_ACTION_BUTTONS_ANIMATION], exportAs: 'kbqInlineEdit', 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 (hasInteractiveContent() && mode() === 'view' && !disabled()) {\n <div\n class=\"kbq-inline-edit__focus-anchor cdk-visually-hidden\"\n tabindex=\"0\"\n (focus)=\"anchorFocused.set(true)\"\n (blur)=\"anchorFocused.set(false)\"\n ></div>\n }\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 [cdkConnectedOverlayPanelClass]=\"overlayPanelClass()\"\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 [kbqTooltipDisabled]=\"!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 <div class=\"kbq-inline-edit__action-button\">\n <button kbq-button [color]=\"'contrast'\" (click)=\"save($event)\">\n <i kbq-icon=\"kbq-check_16\"></i>\n </button>\n </div>\n\n <div class=\"kbq-inline-edit__action-button\">\n <button kbq-button [color]=\"'contrast-fade'\" (click)=\"cancel()\">\n <i kbq-icon=\"kbq-xmark_16\"></i>\n </button>\n </div>\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,.kbq-inline-edit.kbq-inline-edit_anchor-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{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,.kbq-inline-edit.kbq-inline-edit_view .kbq-inline-edit__view-content{text-overflow:ellipsis}.kbq-inline-edit:hover .kbq-inline-edit__menu-mask,.kbq-inline-edit.cdk-keyboard-focused .kbq-inline-edit__menu-mask,.kbq-inline-edit.kbq-inline-edit_anchor-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);-webkit-mask-image:linear-gradient(90deg,transparent,var(--kbq-plt-black, var(--kbq-black-default)));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__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-button{box-shadow:var(--kbq-shadow-popup);background-color:var(--kbq-background-bg);border-radius:var(--kbq-size-border-radius)}\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"] }]
447
- }], ctorParameters: () => [], propDecorators: { showActions: [{ type: i0.Input, args: [{ isSignal: true, alias: "showActions", required: false }] }], showTooltipOnError: [{ type: i0.Input, args: [{ isSignal: true, alias: "showTooltipOnError", required: false }] }], validationTooltip: [{ type: i0.Input, args: [{ isSignal: true, alias: "validationTooltip", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], editModeWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "editModeWidth", required: false }] }], tooltipPlacement: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltipPlacement", required: false }] }], overlayPanelClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "overlayPanelClass", required: false }] }], getValueHandler: [{ type: i0.Input, args: [{ isSignal: true, alias: "getValueHandler", required: false }] }], setValueHandler: [{ type: i0.Input, args: [{ isSignal: true, alias: "setValueHandler", required: false }] }], canSaveOnEnter: [{ type: i0.Input, args: [{ isSignal: true, alias: "canSaveOnEnter", required: false }] }], interactiveSelectors: [{ type: i0.Input, args: [{ isSignal: true, alias: "interactiveSelectors", required: false }] }], saved: [{ type: i0.Output, args: ["saved"] }], canceled: [{ type: i0.Output, args: ["canceled"] }], modeChange: [{ type: i0.Output, args: ["modeChange"] }], menu: [{ type: i0.ContentChild, args: [i0.forwardRef(() => KbqInlineEditMenu), { isSignal: true }] }], label: [{ type: i0.ContentChild, args: [i0.forwardRef(() => KbqLabel), { isSignal: true }] }], formFieldRefList: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => KbqFormField), { ...{ descendants: true }, isSignal: true }] }], tooltipTrigger: [{ type: i0.ViewChild, args: [i0.forwardRef(() => KbqTooltipTrigger), { isSignal: true }] }], viewContainer: [{ type: i0.ViewChild, args: ['viewContainer', { isSignal: true }] }], overlayDir: [{ type: i0.ViewChild, args: [i0.forwardRef(() => CdkConnectedOverlay), { isSignal: true }] }], regionItems: [{ type: i0.ViewChildren, args: [i0.forwardRef(() => KbqFocusRegionItem), { isSignal: true }] }] } });
593
+ }, hostDirectives: [CdkMonitorFocus], animations: [KBQ_INLINE_EDIT_ACTION_BUTTONS_ANIMATION], exportAs: 'kbqInlineEdit', 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 (hasInteractiveContent() && mode() === 'view' && !disabled()) {\n <div\n class=\"kbq-inline-edit__focus-anchor cdk-visually-hidden\"\n tabindex=\"0\"\n (focus)=\"anchorFocused.set(true)\"\n (blur)=\"anchorFocused.set(false)\"\n ></div>\n }\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 [cdkConnectedOverlayPanelClass]=\"overlayPanelClass()\"\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\n class=\"kbq-inline-edit__panel\"\n cdkTrapFocusAutoCapture\n [class.kbq-inline-edit__panel_select]=\"isSingleSelect()\"\n [cdkTrapFocus]=\"false\"\n >\n <div\n class=\"kbq-inline-edit__control-container\"\n [kbqTooltipColor]=\"colors.Error\"\n [kbqTooltip]=\"validationTooltip() ?? ''\"\n [kbqTooltipDisabled]=\"!validationTooltip()\"\n [kbqTooltipArrow]=\"false\"\n [kbqTrigger]=\"'manual'\"\n [kbqPlacement]=\"tooltipPlacement() ?? placements.TopLeft\"\n [kbqTooltipScrollStrategy]=\"validationTooltipScrollStrategy\"\n >\n <ng-content select=\"[kbqInlineEditEditMode]\" />\n </div>\n\n @if (showActions()) {\n <div class=\"kbq-inline-edit__action-buttons\" role=\"group\" [@panelAnimation]>\n <div class=\"kbq-inline-edit__action-button\">\n <button kbq-button [color]=\"'contrast'\" (click)=\"save($event)\">\n <i kbq-icon=\"kbq-check_16\"></i>\n </button>\n </div>\n\n <div class=\"kbq-inline-edit__action-button\">\n <button kbq-button [color]=\"'contrast-fade'\" (click)=\"cancel()\">\n <i kbq-icon=\"kbq-xmark_16\"></i>\n </button>\n </div>\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,.kbq-inline-edit.kbq-inline-edit_anchor-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{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,.kbq-inline-edit.kbq-inline-edit_view .kbq-inline-edit__view-content{text-overflow:ellipsis}.kbq-inline-edit.kbq-inline-edit_select.kbq-inline-edit_edit{--kbq-inline-edit-background: var(--kbq-states-background-transparent-active)}.kbq-inline-edit:hover .kbq-inline-edit__menu-mask,.kbq-inline-edit.cdk-keyboard-focused .kbq-inline-edit__menu-mask,.kbq-inline-edit.kbq-inline-edit_anchor-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);-webkit-mask-image:linear-gradient(90deg,transparent,var(--kbq-plt-black, var(--kbq-black-default)));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__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__panel_select .kbq-inline-edit__control-container{display:none}.kbq-inline-edit__panel .kbq-inline-edit__control-container,.kbq-inline-edit__panel .kbq-inline-edit__action-button{box-shadow:var(--kbq-shadow-popup);background-color:var(--kbq-background-bg);border-radius:var(--kbq-size-border-radius)}\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"] }]
594
+ }], ctorParameters: () => [], propDecorators: { showActions: [{ type: i0.Input, args: [{ isSignal: true, alias: "showActions", required: false }] }], showTooltipOnError: [{ type: i0.Input, args: [{ isSignal: true, alias: "showTooltipOnError", required: false }] }], validationTooltip: [{ type: i0.Input, args: [{ isSignal: true, alias: "validationTooltip", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], editModeWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "editModeWidth", required: false }] }], tooltipPlacement: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltipPlacement", required: false }] }], overlayPanelClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "overlayPanelClass", required: false }] }], getValueHandler: [{ type: i0.Input, args: [{ isSignal: true, alias: "getValueHandler", required: false }] }], setValueHandler: [{ type: i0.Input, args: [{ isSignal: true, alias: "setValueHandler", required: false }] }], canSaveOnEnter: [{ type: i0.Input, args: [{ isSignal: true, alias: "canSaveOnEnter", required: false }] }], interactiveSelectors: [{ type: i0.Input, args: [{ isSignal: true, alias: "interactiveSelectors", required: false }] }], saved: [{ type: i0.Output, args: ["saved"] }], canceled: [{ type: i0.Output, args: ["canceled"] }], modeChange: [{ type: i0.Output, args: ["modeChange"] }], menu: [{ type: i0.ContentChild, args: [i0.forwardRef(() => KbqInlineEditMenu), { isSignal: true }] }], label: [{ type: i0.ContentChild, args: [i0.forwardRef(() => KbqLabel), { isSignal: true }] }], formFieldRefList: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => KbqFormField), { ...{ descendants: true }, isSignal: true }] }], selectRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => KbqSelect), { ...{ descendants: true }, isSignal: true }] }], tooltipTrigger: [{ type: i0.ViewChild, args: [i0.forwardRef(() => KbqTooltipTrigger), { isSignal: true }] }], viewContainer: [{ type: i0.ViewChild, args: ['viewContainer', { isSignal: true }] }], overlayDir: [{ type: i0.ViewChild, args: [i0.forwardRef(() => CdkConnectedOverlay), { isSignal: true }] }], regionItems: [{ type: i0.ViewChildren, args: [i0.forwardRef(() => KbqFocusRegionItem), { isSignal: true }] }] } });
448
595
 
449
596
  const COMPONENTS = [
450
597
  KbqInlineEdit,
@@ -452,15 +599,15 @@ const COMPONENTS = [
452
599
  KbqInlineEditMenu
453
600
  ];
454
601
  class KbqInlineEditModule {
455
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: KbqInlineEditModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
456
- /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.25", ngImport: i0, type: KbqInlineEditModule, imports: [KbqInlineEdit,
602
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqInlineEditModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
603
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.30", ngImport: i0, type: KbqInlineEditModule, imports: [KbqInlineEdit,
457
604
  KbqInlineEditPlaceholder,
458
605
  KbqInlineEditMenu], exports: [KbqInlineEdit,
459
606
  KbqInlineEditPlaceholder,
460
607
  KbqInlineEditMenu] }); }
461
- /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: KbqInlineEditModule, imports: [KbqInlineEdit] }); }
608
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqInlineEditModule, imports: [KbqInlineEdit] }); }
462
609
  }
463
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: KbqInlineEditModule, decorators: [{
610
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqInlineEditModule, decorators: [{
464
611
  type: NgModule,
465
612
  args: [{
466
613
  imports: COMPONENTS,