@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
@@ -0,0 +1,28 @@
1
+ /// Decides when the trailing `<kbq-option-action>` of an option becomes visible.
2
+ ///
3
+ /// `.kbq-action-container` is `display: none` by default (see `action-container.scss`),
4
+ /// so this mixin is the single source of truth for the reveal rules shared by
5
+ /// `kbq-list-option` and `kbq-tree-option`. Include it inside the option's own rule.
6
+ ///
7
+ /// @param {String} $keyboard-focused-host - selector of the focus-monitored selection host
8
+ /// that CDK's `FocusMonitor` marks with `cdk-keyboard-focused`.
9
+ @mixin kbq-option-action-visibility($keyboard-focused-host) {
10
+ &:not(.kbq-disabled) {
11
+ &:hover,
12
+ &.kbq-hovered,
13
+ &.kbq-action-button-focused {
14
+ & .kbq-action-container {
15
+ display: flex;
16
+ }
17
+ }
18
+ }
19
+
20
+ // Roving focus reveals the action only when focus arrived from the keyboard.
21
+ // `.kbq-focused` alone is not enough: options are `tabindex="-1"`, so a mouse click
22
+ // focuses them too and the action would stay visible after the pointer moves away.
23
+ #{$keyboard-focused-host} &:not(.kbq-disabled).kbq-focused {
24
+ & .kbq-action-container {
25
+ display: flex;
26
+ }
27
+ }
28
+ }
@@ -24,18 +24,33 @@
24
24
  @include kbq-option(states-hover);
25
25
  }
26
26
 
27
+ &:active:not(.kbq-disabled),
28
+ &.kbq-pressed:not(.kbq-disabled) {
29
+ // the active state defines only a background token; the mixin would emit undefined text/icon/caption color vars
30
+ background: var(--kbq-list-states-active-container-background);
31
+ }
32
+
27
33
  &.kbq-selected:not(.kbq-disabled) {
28
34
  @include kbq-option(states-selected);
29
35
 
30
36
  &.kbq-active {
31
37
  @include kbq-option(states-selected-hover);
32
38
  }
39
+
40
+ &:active,
41
+ &.kbq-pressed {
42
+ background: var(--kbq-list-states-selected-active-container-background);
43
+ }
33
44
  }
34
45
 
35
46
  &.kbq-disabled {
36
47
  @include kbq-option(states-disabled);
37
48
  }
38
49
 
50
+ &.kbq-selected.kbq-disabled {
51
+ background: var(--kbq-list-states-selected-container-background);
52
+ }
53
+
39
54
  &:is(.kbq-selected, .kbq-active):has(+ :is(.kbq-selected, .kbq-active)) {
40
55
  border-bottom-left-radius: 0;
41
56
  border-bottom-right-radius: 0;
@@ -54,6 +69,15 @@
54
69
  &.kbq-active {
55
70
  @include kbq-option(multiple-states-selected-hover);
56
71
  }
72
+
73
+ &:active,
74
+ &.kbq-pressed {
75
+ background: var(--kbq-list-multiple-states-selected-active-container-background);
76
+ }
77
+ }
78
+
79
+ &.kbq-selected.kbq-disabled {
80
+ background: var(--kbq-list-multiple-states-selected-container-background);
57
81
  }
58
82
  }
59
83
  }
@@ -11,6 +11,13 @@
11
11
 
12
12
  outline: none;
13
13
 
14
+ // The transparent border reserves the focus ring, and the size token below is the icon box
15
+ // without it: 20px + 2 * 2px comes out at the 24px the action actually occupies. Declared so a
16
+ // global `border-box` reset in a consuming application cannot pull the ring inside and leave the
17
+ // icon box at 16px. Note that `.kbq-option` next to it uses the same transparent-border trick
18
+ // the other way round — it is `border-box`, and its 32px is the whole row.
19
+ box-sizing: content-box;
20
+
14
21
  border: var(--kbq-size-3xs) solid transparent;
15
22
  border-radius: var(--kbq-size-xs);
16
23
 
@@ -1,8 +1,10 @@
1
1
  @use 'common/overlay' as *;
2
+ @use 'common/connected-overlay' as *;
2
3
  @use 'common/visually-hidden' as *;
3
4
 
4
5
  // Mixin that renders all of the core styles that are not theme-dependent.
5
6
  @mixin kbq-core() {
6
7
  @include a11y-visually-hidden();
7
8
  @include overlay();
9
+ @include kbq-connected-overlay-gap();
8
10
  }
@@ -11,6 +11,7 @@
11
11
  @use '../forms/forms-theme' as *;
12
12
  @use '../highlight/highlight-theme' as *;
13
13
 
14
+ // @TODO: Argument is unused. will be removed in next major release
14
15
  @mixin koobiq-theme($theme: null) {
15
16
  @include kbq-core-theme();
16
17
 
@@ -25,6 +26,7 @@
25
26
  @include kbq-tag-theme();
26
27
  }
27
28
 
29
+ // @TODO: Argument is unused. will be removed in next major release
28
30
  @mixin koobiq-typography($tokens: null, $config: null, $md-config: null) {
29
31
  @include kbq-base-typography();
30
32
  @include kbq-markdown-base-typography();
@@ -1,5 +1,6 @@
1
1
  @use 'sass:color' as *;
2
2
 
3
+ // @deprecated @TODO: Will be removed in a future major version.
3
4
  @forward '@koobiq/design-tokens/web/variables';
4
5
  @forward '@koobiq/design-tokens/web/palette';
5
6
  @forward '@koobiq/design-tokens/web/typography';
@@ -8,34 +8,41 @@
8
8
  }
9
9
  }
10
10
 
11
+ // Renders the striped "loading" shimmer used by .kbq-progress. Extracted into a mixin so
12
+ // components whose `::before`/`::after` pseudo-elements are already spoken for (e.g. kbq-dropdown-item's
13
+ // hit-area extension) can apply the same overlay to a real element instead.
14
+ @mixin kbq-progress-overlay() {
15
+ content: '';
16
+ position: absolute;
17
+ border-radius: inherit;
18
+
19
+ top: 0;
20
+ right: 0;
21
+ bottom: 0;
22
+ left: 0;
23
+
24
+ $lighter: rgba(255, 255, 255, 0.1);
25
+ $darker: rgba(0, 0, 0, 0.04);
26
+
27
+ background: linear-gradient(
28
+ 135deg,
29
+ $darker 12px,
30
+ $lighter 12px,
31
+ $lighter 22px,
32
+ $darker 22px,
33
+ $darker 34px,
34
+ $lighter 34px
35
+ )
36
+ repeat;
37
+ background-size: 32px 32px;
38
+ animation: kbq-progress 1s linear infinite;
39
+ }
40
+
11
41
  .kbq-progress {
12
42
  position: relative;
13
43
 
14
44
  &:after {
15
- content: '';
16
- position: absolute;
17
- border-radius: inherit;
18
-
19
- top: 0;
20
- right: 0;
21
- bottom: 0;
22
- left: 0;
23
-
24
- $lighter: rgba(255, 255, 255, 0.1);
25
- $darker: rgba(0, 0, 0, 0.04);
26
-
27
- background: linear-gradient(
28
- 135deg,
29
- $darker 12px,
30
- $lighter 12px,
31
- $lighter 22px,
32
- $darker 22px,
33
- $darker 34px,
34
- $lighter 34px
35
- )
36
- repeat;
37
- background-size: 32px 32px;
38
- animation: kbq-progress 1s linear infinite;
45
+ @include kbq-progress-overlay();
39
46
 
40
47
  @media (prefers-reduced-motion: reduce) {
41
48
  animation: none;
@@ -0,0 +1,39 @@
1
+ /// Recreates the trigger↔panel gap for connected dropdown panels as transparent padding
2
+ /// INSIDE the `.cdk-overlay-pane`, instead of a physical overlay `offsetY`.
3
+
4
+ // Previously the gap was produced by the CDK overlay `offsetY` (`defaultOffsetY`,
5
+ // packages/components/core/pop-up/constants.ts), which shifted the whole pane away from the trigger and
6
+ // left a dead band that was not covered by any overlay element — so the cursor/clicks passed through it
7
+ // onto the content underneath. Now the pane is flush with the trigger (`offsetY: 0`) and the gap is padded
8
+ // inside the pane. Because the pane has `pointer-events: auto`, the band is covered and no longer
9
+ // click/hover-through, while the visible panel keeps the exact same on-screen position.
10
+
11
+ // The class names must match KBQ_CONNECTED_OVERLAY_BELOW_CLASS / KBQ_CONNECTED_OVERLAY_ABOVE_CLASS /
12
+ // KBQ_CONNECTED_OVERLAY_OVERLAP_CLASS
13
+ // (packages/components/core/pop-up/constants.ts), applied per-position via `ConnectedPosition.panelClass`.
14
+ // The compound `.cdk-overlay-pane.<class>` selector (specificity 0,2,0) deterministically overrides the
15
+ // `.cdk-overlay-pane { padding: 0 }` reset from `overlay()`.
16
+
17
+ // The gap size is the `--kbq-connected-overlay-gap` custom property, falling back to the `--kbq-size-xxs`
18
+ // token (4px) when unset — so the default is unchanged. The pane is portaled to <body>, so the variable
19
+ // must be set on `:root` or on the pane itself, never on the component that opens it:
20
+ // * globally: :root { --kbq-connected-overlay-gap: 8px; }
21
+ // * per overlay type: .cdk-overlay-pane.kbq-select-overlay { --kbq-connected-overlay-gap: 8px; }
22
+
23
+ // Caveat: the `--kbq-size-xxs`/4px default is kept in sync with `defaultOffsetY`
24
+ // (packages/components/core/pop-up/constants.ts), off which components size their viewport-fit compensation
25
+ // (`withViewportMargin`). Enlarging the gap past that can let the pane overflow the viewport edge by
26
+ // `gap - margin`px, so bump the corresponding margin to match.
27
+ @mixin kbq-connected-overlay-gap() {
28
+ // Panel is below the trigger, or below the first row of a trigger it overlaps: the gap sits at the top
29
+ // of the pane either way.
30
+ .cdk-overlay-pane.kbq-connected-overlay_below,
31
+ .cdk-overlay-pane.kbq-connected-overlay_overlap {
32
+ padding-top: var(--kbq-connected-overlay-gap, var(--kbq-size-xxs, 4px));
33
+ }
34
+
35
+ // Panel is flipped above the trigger: the gap sits at the bottom of the pane.
36
+ .cdk-overlay-pane.kbq-connected-overlay_above {
37
+ padding-bottom: var(--kbq-connected-overlay-gap, var(--kbq-size-xxs, 4px));
38
+ }
39
+ }
@@ -122,9 +122,16 @@
122
122
  overflow: hidden;
123
123
 
124
124
  & .kbq-select__match-hidden-text {
125
- flex: 0 0 40px;
125
+ // This is the box the matcher reserves for the "+N" counter, and `flex-basis` obeys
126
+ // `box-sizing` exactly as `width` does. Under a global `border-box` reset in a consuming
127
+ // application the padding would come out of the reserved width, so the counter would get
128
+ // 8px less room than `KbqSelect` measured for it and the tag count would be off by one
129
+ // at the boundary.
130
+ box-sizing: content-box;
131
+
132
+ flex: 0 0 var(--kbq-form-field-size-addon-width);
126
133
  align-self: center;
127
- padding-left: 4px;
134
+ padding-left: var(--kbq-size-xxs);
128
135
  padding-right: var(--kbq-select-size-multiple-content-gap, var(--kbq-size-xxs));
129
136
 
130
137
  text-align: right;
@@ -167,6 +174,11 @@
167
174
  %kbq-select-panel {
168
175
  min-width: 100%; // prevents some animation twitching and test inconsistencies in IE11
169
176
 
177
+ // Caps how far the panel grows with its content. `min-width` above intentionally wins over this,
178
+ // so the panel is never narrower than its trigger and an explicit `panelWidth` is never clamped.
179
+ // The token is deliberately left undeclared so that a `:root` override reaches every panel.
180
+ max-width: var(--kbq-panel-size-width-max, 640px);
181
+
170
182
  overflow: hidden;
171
183
 
172
184
  border-radius: var(--kbq-select-panel-size-border-radius, var(--kbq-size-border-radius));
@@ -212,6 +224,11 @@
212
224
  }
213
225
 
214
226
  %kbq-select-content {
227
+ // Content-box so that the cap counts whole options and is not eaten by the padding below — and so
228
+ // that a global `border-box` reset in a consuming app cannot change what `panelMaxHeight` means.
229
+ // The token is deliberately left undeclared so that a `:root` override reaches every panel.
230
+ box-sizing: initial;
231
+
215
232
  max-height: var(--kbq-select-panel-size-max-height, 256px);
216
233
  padding: var(--kbq-size-xxs);
217
234
  overflow: hidden auto;
@@ -1,14 +1,5 @@
1
- @use 'sass:map';
2
1
  @use 'sass:meta';
3
2
 
4
- @use '../tokens';
5
-
6
- $tokens: meta.module-variables(tokens) !default;
7
-
8
- @function getToken($name) {
9
- @return map.get($tokens, $name);
10
- }
11
-
12
3
  @mixin kbq-css-font-variable($component, $component-property, $font-property, $font) {
13
4
  #{$font-property}: var(--kbq-#{$component}-#{$font}#{$component-property}-#{$font-property});
14
5
  }
@@ -1,2 +1 @@
1
- @forward 'components-theming';
2
1
  @forward 'theming';
@@ -1,12 +1,12 @@
1
1
  @use 'sass:map';
2
2
  @use 'sass:meta';
3
3
 
4
- @use 'components-theming' as *;
5
-
4
+ // @deprecated Unused internally. Will be removed in the next major version.
6
5
  @function kbq-contrast($palette, $hue) {
7
6
  @return map.get(map.get($palette, contrast), $hue);
8
7
  }
9
8
 
9
+ // @deprecated @TODO: unused. Will be removed in the next major version.
10
10
  @function kbq-palette($base-palette, $default) {
11
11
  $result: map.merge(
12
12
  $base-palette,
@@ -28,6 +28,7 @@
28
28
  @return $result;
29
29
  }
30
30
 
31
+ // @deprecated @TODO: unused. Will be removed in the next major version.
31
32
  @function kbq-color($palette, $hue: default, $opacity: null) {
32
33
  // If hueKey is a number between zero and one, then it actually contains an
33
34
  // opacity value, so recall this function with the default hue and that given opacity.
@@ -42,14 +43,34 @@
42
43
  }
43
44
 
44
45
  // Mixin that renders all of the core styles that depend on the theme.
45
-
46
+ // @TODO: Argument is unused. will be removed in next major release
46
47
  @mixin kbq-core-theme($theme: null) {
47
48
  .kbq-app-background {
48
49
  background: var(--kbq-background-bg);
49
50
  color: var(--kbq-foreground-contrast);
50
51
  }
52
+
53
+ // Which palette the browser paints *its own* surfaces with — scrollbars, native controls, the
54
+ // autofill highlight, spellcheck. A theme is a class, and a class tells the browser nothing, so
55
+ // without this every one of those renders from the light palette however dark the application
56
+ // looks. Autofill is where it shows most: refocusing a filled field reopens the browser's own
57
+ // popup, and in that state it paints the highlight and the text itself, over author styles that
58
+ // normally hide it — a light block with black text in the middle of a dark form.
59
+
60
+ // Both declarations at the same specificity on purpose. `color-scheme` inherits, so the nearest
61
+ // ancestor carrying either class decides, and a light subtree inside a dark application gets the
62
+ // light palette. Weighting one over the other — or scoping this to a component — inverts exactly
63
+ // that case.
64
+ .kbq-light {
65
+ color-scheme: light;
66
+ }
67
+
68
+ .kbq-dark {
69
+ color-scheme: dark;
70
+ }
51
71
  }
52
72
 
73
+ // @deprecated @TODO: unused. Will be removed in next major release
53
74
  @function _theme_foreground($tokens, $scheme) {
54
75
  @return (
55
76
  white: map.get($tokens, '#{$scheme}-foreground-white'),
@@ -75,6 +96,7 @@
75
96
  );
76
97
  }
77
98
 
99
+ // @deprecated @TODO: unused. Will be removed in next major release
78
100
  @function _theme_background($tokens, $scheme) {
79
101
  @return (
80
102
  bg: map.get($tokens, '#{$scheme}-background-bg'),
@@ -99,6 +121,7 @@
99
121
  );
100
122
  }
101
123
 
124
+ // @deprecated @TODO: unused. Will be removed in next major release
102
125
  @function _theme_icon($tokens, $scheme) {
103
126
  @return (
104
127
  on-contrast: map.get($tokens, '#{$scheme}-icon-on-contrast'),
@@ -114,6 +137,7 @@
114
137
  );
115
138
  }
116
139
 
140
+ // @deprecated @TODO: unused. Will be removed in next major release
117
141
  @function _theme_line($tokens, $scheme) {
118
142
  @return (
119
143
  theme: map.get($tokens, '#{$scheme}-line-theme'),
@@ -131,6 +155,7 @@
131
155
  );
132
156
  }
133
157
 
158
+ // @deprecated @TODO: unused. Will be removed in next major release
134
159
  @function _theme_states-background($tokens, $scheme) {
135
160
  @return (
136
161
  disabled: map.get($tokens, '#{$scheme}-states-background-disabled'),
@@ -151,6 +176,7 @@
151
176
  );
152
177
  }
153
178
 
179
+ // @deprecated @TODO: unused. Will be removed in next major release
154
180
  @function _theme_states-foreground($tokens, $scheme) {
155
181
  @return (
156
182
  disabled: map.get($tokens, '#{$scheme}-states-foreground-disabled'),
@@ -161,6 +187,7 @@
161
187
  );
162
188
  }
163
189
 
190
+ // @deprecated @TODO: unused. Will be removed in next major release
164
191
  @function _theme_states-icon($tokens, $scheme) {
165
192
  @return (
166
193
  theme-hover: map.get($tokens, '#{$scheme}-states-icon-theme-hover'),
@@ -181,6 +208,7 @@
181
208
  );
182
209
  }
183
210
 
211
+ // @deprecated @TODO: unused. Will be removed in next major release
184
212
  @function _theme_states-line($tokens, $scheme) {
185
213
  @return (
186
214
  focus: map.get($tokens, '#{$scheme}-states-line-focus'),
@@ -190,6 +218,7 @@
190
218
  );
191
219
  }
192
220
 
221
+ // @deprecated @TODO: unused. Will be removed in next major release
193
222
  @function _theme_states($tokens, $scheme) {
194
223
  @return (
195
224
  background: _theme_states-background($tokens, $scheme),
@@ -201,6 +230,7 @@
201
230
  );
202
231
  }
203
232
 
233
+ // @deprecated @TODO: unused. Will be removed in next major release
204
234
  @function kbq-palette($base-palette, $default) {
205
235
  @return map.merge(
206
236
  $base-palette,
@@ -210,6 +240,7 @@
210
240
  );
211
241
  }
212
242
 
243
+ // @deprecated @TODO: unused. Will be removed in next major release
213
244
  @function _theme_palette($tokens, $scheme, $name) {
214
245
  @return kbq-palette(
215
246
  map.get($tokens, '#{$scheme}-#{$name}-palette'),
@@ -236,7 +267,6 @@
236
267
  white: _theme_palette($tokens, $scheme, white),
237
268
  black: _theme_palette($tokens, $scheme, black),
238
269
  purple: _theme_palette($tokens, $scheme, purple),
239
- components: kbq-components-theme($tokens, $scheme),
240
270
  tokens: $tokens
241
271
  );
242
272
  }
@@ -260,7 +290,6 @@
260
290
  white: _theme_palette($tokens, $scheme, white),
261
291
  black: _theme_palette($tokens, $scheme, black),
262
292
  purple: _theme_palette($tokens, $scheme, purple),
263
- components: kbq-components-theme($tokens, $scheme),
264
293
  tokens: $tokens
265
294
  );
266
295
  }
@@ -1,15 +1,15 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { OnChanges, SimpleChanges, AfterContentInit, OnDestroy, AfterViewInit, InjectionToken, DoCheck, ElementRef, EventEmitter } from '@angular/core';
3
- import { Subject } from 'rxjs';
2
+ import { OnChanges, SimpleChanges, AfterContentInit, OnDestroy, InjectionToken, AfterViewInit, DoCheck, ElementRef, EventEmitter } from '@angular/core';
3
+ import { Subject, Observable } from 'rxjs';
4
4
  import * as _koobiq_components_core from '@koobiq/components/core';
5
- import { DateAdapter, ErrorStateMatcher } from '@koobiq/components/core';
5
+ import { DateAdapter, ErrorStateMatcher, KbqSiblingPopup } from '@koobiq/components/core';
6
6
  import { AnimationTriggerMetadata } from '@angular/animations';
7
+ import * as _koobiq_components_form_field from '@koobiq/components/form-field';
8
+ import { KbqFormFieldControl } from '@koobiq/components/form-field';
7
9
  import { ControlValueAccessor, Validator, AbstractControl, ValidationErrors } from '@angular/forms';
8
- import * as i15 from '@koobiq/components/form-field';
9
- import { KbqFormFieldControl, KbqFormField } from '@koobiq/components/form-field';
10
10
  import { KbqTooltipTrigger } from '@koobiq/components/tooltip';
11
11
  import * as i2 from '@angular/cdk/overlay';
12
- import { OverlayRef, ScrollStrategy, Overlay } from '@angular/cdk/overlay';
12
+ import { ScrollStrategy, Overlay, OverlayRef } from '@angular/cdk/overlay';
13
13
  import * as i1 from '@koobiq/components/button';
14
14
  import * as i3 from '@angular/cdk/a11y';
15
15
  import * as i4 from '@angular/cdk/portal';
@@ -126,6 +126,7 @@ declare class KbqCalendarHeader<D> implements AfterContentInit {
126
126
  */
127
127
  declare class KbqMonthView<D> implements AfterContentInit {
128
128
  private changeDetectorRef;
129
+ private readonly timezoneService;
129
130
  adapter: DateAdapter<D>;
130
131
  /**
131
132
  * The date to display in this month view (everything other than the month and year is ignored).
@@ -282,7 +283,10 @@ declare const kbqDatepickerAnimations: {
282
283
  readonly fadeInCalendar: AnimationTriggerMetadata;
283
284
  };
284
285
 
285
- /** Injection token that determines the scroll handling while the calendar is open. */
286
+ /**
287
+ * Injection token that determines the scroll handling while the calendar is open. The root default keeps the
288
+ * datepicker usable outside `KbqDatepickerModule`'s injector; providing the token anywhere still wins over it.
289
+ */
286
290
  declare const KBQ_DATEPICKER_SCROLL_STRATEGY: InjectionToken<() => ScrollStrategy>;
287
291
  /** @docs-private */
288
292
  declare function KBQ_DATEPICKER_SCROLL_STRATEGY_FACTORY(overlay: Overlay): () => ScrollStrategy;
@@ -458,9 +462,10 @@ declare class KbqDatepickerInput<D> implements KbqFormFieldControl<D>, ControlVa
458
462
  elementRef: ElementRef<HTMLInputElement>;
459
463
  private readonly renderer;
460
464
  readonly adapter: DateAdapter<D>;
465
+ private readonly timezoneService;
461
466
  private readonly dateFormats;
462
467
  /** @docs-private */
463
- protected readonly formField: KbqFormField | null;
468
+ protected readonly formField: _koobiq_components_form_field.KbqFormField | null;
464
469
  /** @docs-private */
465
470
  protected readonly localeService: _koobiq_components_core.KbqLocaleService | null;
466
471
  /** @docs-private */
@@ -495,11 +500,27 @@ declare class KbqDatepickerInput<D> implements KbqFormFieldControl<D>, ControlVa
495
500
  get value(): D | null;
496
501
  set value(value: D | null);
497
502
  private _value;
498
- /** The minimum valid date. */
503
+ /**
504
+ * The minimum valid date. Drives validation only — including dates typed or pasted into the
505
+ * input — and reports `kbqDatepickerMin`. The calendar is restricted separately, by `minDate`
506
+ * on the associated `<kbq-datepicker>`.
507
+ *
508
+ * Compared down to the millisecond, not by calendar day: the input keeps the time part of the
509
+ * value it parses, and the comparison is made on wall-clock components rather than on absolute
510
+ * time.
511
+ */
499
512
  get min(): D | null;
500
513
  set min(value: D | null);
501
514
  private _min;
502
- /** The maximum valid date. */
515
+ /**
516
+ * The maximum valid date. Drives validation only — including dates typed or pasted into the
517
+ * input — and reports `kbqDatepickerMax`. The calendar is restricted separately, by `maxDate`
518
+ * on the associated `<kbq-datepicker>`.
519
+ *
520
+ * Compared down to the millisecond, not by calendar day: the input keeps the time part of the
521
+ * value it parses, so an upper bound meant to include its whole day has to be the end of that
522
+ * day.
523
+ */
503
524
  get max(): D | null;
504
525
  set max(value: D | null);
505
526
  private _max;
@@ -525,9 +546,7 @@ declare class KbqDatepickerInput<D> implements KbqFormFieldControl<D>, ControlVa
525
546
  set errorState(value: boolean);
526
547
  private get readyForParse();
527
548
  private get selectionStart();
528
- private set selectionStart(value);
529
549
  private get selectionEnd();
530
- private set selectionEnd(value);
531
550
  private control;
532
551
  private readonly uid;
533
552
  private datepickerSubscription;
@@ -581,6 +600,7 @@ declare class KbqDatepickerInput<D> implements KbqFormFieldControl<D>, ControlVa
581
600
  private spaceKeyHandler;
582
601
  private getNewValue;
583
602
  private setViewValue;
603
+ private setSelection;
584
604
  private replaceSymbols;
585
605
  private getDateFromString;
586
606
  private getDefaultValue;
@@ -628,7 +648,7 @@ declare class KbqDatepickerInput<D> implements KbqFormFieldControl<D>, ControlVa
628
648
  private getDigitPositions;
629
649
  private createDate;
630
650
  private createDateTime;
631
- private correctCursorPosition;
651
+ private correctedCursorPosition;
632
652
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KbqDatepickerInput<any>, never>;
633
653
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<KbqDatepickerInput<any>, "input[kbqDatepicker], input[kbqCalendar]", ["kbqDatepickerInput"], { "errorStateMatcher": { "alias": "errorStateMatcher"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "required": { "alias": "required"; "required": false; }; "kbqDatepicker": { "alias": "kbqDatepicker"; "required": false; }; "kbqCalendar": { "alias": "kbqCalendar"; "required": false; }; "kbqDatepickerFilter": { "alias": "kbqDatepickerFilter"; "required": false; }; "value": { "alias": "value"; "required": false; }; "min": { "alias": "min"; "required": false; }; "max": { "alias": "max"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "id": { "alias": "id"; "required": false; }; "kbqValidationTooltip": { "alias": "kbqValidationTooltip"; "required": false; }; }, { "incorrectInput": "incorrectInput"; "dateChange": "dateChange"; "dateInput": "dateInput"; }, never, never, true, never>;
634
654
  }
@@ -669,13 +689,24 @@ declare class KbqDatepickerToggleIcon {
669
689
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KbqDatepickerToggleIcon, never>;
670
690
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<KbqDatepickerToggleIcon, "[kbqDatepickerToggleIcon]", never, {}, {}, never, never, true, never>;
671
691
  }
672
- declare class KbqDatepickerToggleIconComponent<D> implements AfterContentInit, OnChanges, OnDestroy {
692
+ declare class KbqDatepickerToggleIconComponent<D> implements AfterContentInit, OnChanges, OnDestroy, KbqSiblingPopup {
673
693
  /** Whether the toggle button is disabled. */
674
694
  get disabled(): boolean;
675
695
  set disabled(value: boolean);
676
696
  private _disabled;
677
697
  /** Datepicker instance that the button will toggle. */
678
698
  readonly datepicker: _angular_core.InputSignal<KbqDatepicker<D>>;
699
+ /** Whether the calendar is currently on screen. Part of the `KbqSiblingPopup` contract. */
700
+ get isAttached(): boolean;
701
+ /**
702
+ * Emits `true` when the calendar opens and `false` when it closes. Part of the `KbqSiblingPopup`
703
+ * contract.
704
+ *
705
+ * Built on top of the `datepicker` signal rather than read once, because the instance is bound after the
706
+ * consumers of this stream (a tooltip on the same element subscribes in its constructor) and may be
707
+ * swapped later — the same reason `watchStateChanges` is re-run from `ngOnChanges`.
708
+ */
709
+ readonly openedChange: Observable<boolean>;
679
710
  private readonly destroyRef;
680
711
  private readonly cdr;
681
712
  private stateChangesSubscription;
@@ -691,7 +722,7 @@ declare class KbqDatepickerToggleIconComponent<D> implements AfterContentInit, O
691
722
 
692
723
  declare class KbqDatepickerModule {
693
724
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KbqDatepickerModule, never>;
694
- static ɵmod: _angular_core.ɵɵNgModuleDeclaration<KbqDatepickerModule, never, [typeof i1.KbqButtonModule, typeof i2.OverlayModule, typeof i3.A11yModule, typeof i4.PortalModule, typeof i5.KbqSelectModule, typeof i6.KbqIconModule, typeof KbqDatepickerToggleIconComponent, typeof i8.TitleCasePipe, typeof KbqCalendar, typeof KbqCalendarBody, typeof KbqDatepicker, typeof KbqDatepickerContent, typeof KbqDatepickerInput, typeof KbqDatepickerToggleIcon, typeof KbqMonthView, typeof KbqCalendarHeader], [typeof KbqCalendar, typeof KbqCalendarBody, typeof KbqDatepicker, typeof KbqDatepickerContent, typeof KbqDatepickerInput, typeof KbqDatepickerToggleIcon, typeof KbqDatepickerToggleIconComponent, typeof KbqMonthView, typeof KbqCalendarHeader, typeof i15.KbqFormFieldModule]>;
725
+ static ɵmod: _angular_core.ɵɵNgModuleDeclaration<KbqDatepickerModule, never, [typeof i1.KbqButtonModule, typeof i2.OverlayModule, typeof i3.A11yModule, typeof i4.PortalModule, typeof i5.KbqSelectModule, typeof i6.KbqIconModule, typeof KbqDatepickerToggleIconComponent, typeof i8.TitleCasePipe, typeof KbqCalendar, typeof KbqCalendarBody, typeof KbqDatepicker, typeof KbqDatepickerContent, typeof KbqDatepickerInput, typeof KbqDatepickerToggleIcon, typeof KbqMonthView, typeof KbqCalendarHeader], [typeof KbqCalendar, typeof KbqCalendarBody, typeof KbqDatepicker, typeof KbqDatepickerContent, typeof KbqDatepickerInput, typeof KbqDatepickerToggleIcon, typeof KbqDatepickerToggleIconComponent, typeof KbqMonthView, typeof KbqCalendarHeader, typeof _koobiq_components_form_field.KbqFormFieldModule]>;
695
726
  static ɵinj: _angular_core.ɵɵInjectorDeclaration<KbqDatepickerModule>;
696
727
  }
697
728
 
package/dl/dl.scss CHANGED
@@ -7,6 +7,32 @@
7
7
 
8
8
  grid-template-columns: repeat(4, 1fr);
9
9
 
10
+ &.kbq-dl_vertical-align-center {
11
+ align-items: center;
12
+ }
13
+
14
+ &.kbq-dl_vertical-align-end {
15
+ align-items: end;
16
+ }
17
+
18
+ &.kbq-dl_horizontal-align-center {
19
+ justify-items: center;
20
+ }
21
+
22
+ &.kbq-dl_horizontal-align-end {
23
+ justify-items: end;
24
+ }
25
+
26
+ // Let the columns keep their `1fr` ratio instead of being stretched by an unbreakable string: `min-width: 0`
27
+ // drops the grid item's content-based automatic minimum, and `break-word` breaks such a string only when it
28
+ // does not fit. `anywhere` is deliberately avoided — it would also shrink the min-content size to a single
29
+ // character and leak that to any ancestor that sizes itself to content.
30
+ .kbq-dt,
31
+ .kbq-dd {
32
+ min-width: 0;
33
+ overflow-wrap: break-word;
34
+ }
35
+
10
36
  .kbq-dt {
11
37
  grid-column: 1;
12
38
  }
package/dl/index.d.ts CHANGED
@@ -4,9 +4,15 @@ import { Subject } from 'rxjs';
4
4
  import * as i1 from '@angular/cdk/a11y';
5
5
  import * as i2 from '@angular/cdk/platform';
6
6
 
7
+ /** Supported alignment values for description list items. */
8
+ type KbqDlAlign = 'start' | 'center' | 'end';
7
9
  declare class KbqDlComponent implements AfterContentInit, OnDestroy {
8
10
  readonly minWidth: i0.InputSignal<number>;
9
11
  readonly wide: i0.InputSignal<boolean>;
12
+ /** Vertical alignment of `kbq-dt` and `kbq-dd` items. */
13
+ readonly verticalAlign: i0.InputSignal<KbqDlAlign>;
14
+ /** Horizontal alignment of `kbq-dt` and `kbq-dd` items. */
15
+ readonly horizontalAlign: i0.InputSignal<KbqDlAlign>;
10
16
  vertical: boolean | null;
11
17
  readonly resizeStream: Subject<Event>;
12
18
  private readonly resizeDebounceInterval;
@@ -18,7 +24,7 @@ declare class KbqDlComponent implements AfterContentInit, OnDestroy {
18
24
  ngOnDestroy(): void;
19
25
  private readonly updateState;
20
26
  static ɵfac: i0.ɵɵFactoryDeclaration<KbqDlComponent, never>;
21
- static ɵcmp: i0.ɵɵComponentDeclaration<KbqDlComponent, "kbq-dl", never, { "minWidth": { "alias": "minWidth"; "required": false; "isSignal": true; }; "wide": { "alias": "wide"; "required": false; "isSignal": true; }; "vertical": { "alias": "vertical"; "required": false; }; }, {}, never, ["*"], true, never>;
27
+ static ɵcmp: i0.ɵɵComponentDeclaration<KbqDlComponent, "kbq-dl", never, { "minWidth": { "alias": "minWidth"; "required": false; "isSignal": true; }; "wide": { "alias": "wide"; "required": false; "isSignal": true; }; "verticalAlign": { "alias": "verticalAlign"; "required": false; "isSignal": true; }; "horizontalAlign": { "alias": "horizontalAlign"; "required": false; "isSignal": true; }; "vertical": { "alias": "vertical"; "required": false; }; }, {}, never, ["*"], true, never>;
22
28
  }
23
29
  declare class KbqDtComponent {
24
30
  static ɵfac: i0.ɵɵFactoryDeclaration<KbqDtComponent, never>;
@@ -36,3 +42,4 @@ declare class KbqDlModule {
36
42
  }
37
43
 
38
44
  export { KbqDdComponent, KbqDlComponent, KbqDlModule, KbqDtComponent };
45
+ export type { KbqDlAlign };