@koobiq/components 21.0.1 → 21.1.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 (180) hide show
  1. package/badge/_badge-theme.scss +31 -0
  2. package/breadcrumbs/breadcrumbs.scss +5 -1
  3. package/checkbox/_checkbox-theme.scss +0 -17
  4. package/checkbox/checkbox-tokens.scss +0 -4
  5. package/code-block/_code-block-theme.scss +7 -6
  6. package/code-block/code-block-tokens.scss +8 -4
  7. package/code-block/code-block.scss +54 -32
  8. package/content-panel/content-panel-header.scss +2 -3
  9. package/content-panel/content-panel.scss +3 -0
  10. package/core/selection/pseudo-checkbox/pseudo-checkbox-tokens.scss +0 -2
  11. package/fesm2022/koobiq-components-accordion.mjs +4 -4
  12. package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
  13. package/fesm2022/koobiq-components-actions-panel.mjs +10 -2
  14. package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -1
  15. package/fesm2022/koobiq-components-app-switcher.mjs +1 -1
  16. package/fesm2022/koobiq-components-app-switcher.mjs.map +1 -1
  17. package/fesm2022/koobiq-components-badge.mjs +2 -2
  18. package/fesm2022/koobiq-components-badge.mjs.map +1 -1
  19. package/fesm2022/koobiq-components-breadcrumbs.mjs +2 -2
  20. package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
  21. package/fesm2022/koobiq-components-button-toggle.mjs +1 -1
  22. package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
  23. package/fesm2022/koobiq-components-checkbox.mjs +18 -8
  24. package/fesm2022/koobiq-components-checkbox.mjs.map +1 -1
  25. package/fesm2022/koobiq-components-clamped-text.mjs +78 -10
  26. package/fesm2022/koobiq-components-clamped-text.mjs.map +1 -1
  27. package/fesm2022/koobiq-components-code-block.mjs +63 -379
  28. package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
  29. package/fesm2022/koobiq-components-content-panel.mjs +4 -4
  30. package/fesm2022/koobiq-components-content-panel.mjs.map +1 -1
  31. package/fesm2022/koobiq-components-core.mjs +300 -37
  32. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  33. package/fesm2022/koobiq-components-datepicker.mjs +151 -60
  34. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  35. package/fesm2022/koobiq-components-divider.mjs +3 -3
  36. package/fesm2022/koobiq-components-divider.mjs.map +1 -1
  37. package/fesm2022/koobiq-components-dropdown.mjs +3 -3
  38. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  39. package/fesm2022/koobiq-components-file-upload.mjs +17 -8
  40. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  41. package/fesm2022/koobiq-components-filter-bar.mjs +115 -36
  42. package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
  43. package/fesm2022/koobiq-components-flag.mjs +3 -3
  44. package/fesm2022/koobiq-components-flag.mjs.map +1 -1
  45. package/fesm2022/koobiq-components-form-field.mjs +90 -27
  46. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  47. package/fesm2022/koobiq-components-icon.mjs +2 -2
  48. package/fesm2022/koobiq-components-icon.mjs.map +1 -1
  49. package/fesm2022/koobiq-components-inline-edit.mjs +19 -2
  50. package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
  51. package/fesm2022/koobiq-components-input.mjs +76 -17
  52. package/fesm2022/koobiq-components-input.mjs.map +1 -1
  53. package/fesm2022/koobiq-components-list.mjs +1 -1
  54. package/fesm2022/koobiq-components-list.mjs.map +1 -1
  55. package/fesm2022/koobiq-components-modal.mjs +3 -3
  56. package/fesm2022/koobiq-components-modal.mjs.map +1 -1
  57. package/fesm2022/koobiq-components-navbar.mjs +86 -25
  58. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  59. package/fesm2022/koobiq-components-notification-center.mjs +4 -4
  60. package/fesm2022/koobiq-components-notification-center.mjs.map +1 -1
  61. package/fesm2022/koobiq-components-overflow-items.mjs +116 -38
  62. package/fesm2022/koobiq-components-overflow-items.mjs.map +1 -1
  63. package/fesm2022/koobiq-components-popover.mjs +86 -7
  64. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  65. package/fesm2022/koobiq-components-radio.mjs +41 -19
  66. package/fesm2022/koobiq-components-radio.mjs.map +1 -1
  67. package/fesm2022/koobiq-components-search-expandable.mjs +29 -17
  68. package/fesm2022/koobiq-components-search-expandable.mjs.map +1 -1
  69. package/fesm2022/koobiq-components-select.mjs +49 -12
  70. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  71. package/fesm2022/koobiq-components-sidepanel.mjs +198 -186
  72. package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
  73. package/fesm2022/koobiq-components-splitter.mjs +49 -25
  74. package/fesm2022/koobiq-components-splitter.mjs.map +1 -1
  75. package/fesm2022/koobiq-components-tabs.mjs +30 -11
  76. package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
  77. package/fesm2022/koobiq-components-tags.mjs +1 -1
  78. package/fesm2022/koobiq-components-tags.mjs.map +1 -1
  79. package/fesm2022/koobiq-components-textarea.mjs +28 -11
  80. package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
  81. package/fesm2022/koobiq-components-time-range.mjs +2 -2
  82. package/fesm2022/koobiq-components-time-range.mjs.map +1 -1
  83. package/fesm2022/koobiq-components-timepicker.mjs +71 -16
  84. package/fesm2022/koobiq-components-timepicker.mjs.map +1 -1
  85. package/fesm2022/koobiq-components-timezone.mjs +2 -2
  86. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  87. package/fesm2022/koobiq-components-toast.mjs +2 -2
  88. package/fesm2022/koobiq-components-toast.mjs.map +1 -1
  89. package/fesm2022/koobiq-components-toggle.mjs +25 -9
  90. package/fesm2022/koobiq-components-toggle.mjs.map +1 -1
  91. package/fesm2022/koobiq-components-tooltip.mjs +90 -17
  92. package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
  93. package/fesm2022/koobiq-components-top-bar.mjs +27 -7
  94. package/fesm2022/koobiq-components-top-bar.mjs.map +1 -1
  95. package/fesm2022/koobiq-components-tree-select.mjs +4 -4
  96. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  97. package/fesm2022/koobiq-components-tree.mjs +71 -27
  98. package/fesm2022/koobiq-components-tree.mjs.map +1 -1
  99. package/file-upload/_file-upload-theme.scss +0 -12
  100. package/file-upload/file-upload-tokens.scss +0 -1
  101. package/file-upload/file-upload.scss +0 -1
  102. package/filter-bar/_filter-bar-theme.scss +7 -8
  103. package/filter-bar/filter-bar.scss +0 -1
  104. package/filter-bar/pipes/base-pipe.scss +36 -2
  105. package/filter-bar/pipes/pipe-multi-tree-select.scss +27 -0
  106. package/form-field/_fieldset-theme.scss +2 -7
  107. package/form-field/_form-field-theme.scss +9 -22
  108. package/form-field/_hint-theme.scss +20 -0
  109. package/form-field/fieldset-tokens.scss +0 -1
  110. package/form-field/fieldset.scss +0 -3
  111. package/form-field/form-field-tokens.scss +1 -1
  112. package/form-field/form-field.scss +9 -0
  113. package/form-field/hint-tokens.scss +3 -0
  114. package/modal/modal.scss +2 -0
  115. package/navbar/_navbar-item_vertical.scss +48 -2
  116. package/navbar/_navbar-theme.scss +11 -3
  117. package/navbar/navbar-item.scss +17 -0
  118. package/navbar/navbar-tokens.scss +3 -0
  119. package/package.json +4 -4
  120. package/popover/popover.scss +1 -1
  121. package/radio/_radio-theme.scss +0 -30
  122. package/radio/radio-tokens.scss +0 -2
  123. package/schematics/migrations/deprecated-icons/README.md +21 -5
  124. package/schematics/migrations/deprecated-icons/index.cjs +8 -22
  125. package/schematics/migrations/deprecated-icons/schema.json +1 -1
  126. package/schematics/migrations/icons-replacement/README.md +16 -2
  127. package/schematics/migrations/icons-replacement/index.cjs +18 -16
  128. package/schematics/migrations/icons-replacement/schema.json +12 -3
  129. package/schematics/migrations/new-icons-pack/README.md +37 -25
  130. package/schematics/migrations/new-icons-pack/index.cjs +22 -32
  131. package/schematics/migrations/new-icons-pack/replacement.json +2 -14
  132. package/schematics/migrations/new-icons-pack/schema.json +3 -3
  133. package/schematics/ng-add/index.cjs +4 -4
  134. package/schematics/utils/custom-data.cjs +64 -0
  135. package/schematics/utils/icon-migration.cjs +9 -3
  136. package/schematics/utils/messages.cjs +4 -0
  137. package/schematics/utils/package-config.cjs +19 -0
  138. package/select/select.scss +7 -0
  139. package/tabs/_tabs-common.scss +23 -0
  140. package/textarea/textarea-tokens.scss +4 -1
  141. package/toast/toast.component.scss +1 -0
  142. package/toggle/_toggle-theme.scss +0 -17
  143. package/tooltip/tooltip.scss +1 -1
  144. package/top-bar/top-bar-tokens.scss +1 -0
  145. package/top-bar/top-bar.scss +10 -0
  146. package/types/koobiq-components-accordion.d.ts +25 -0
  147. package/types/koobiq-components-button-toggle.d.ts +6 -0
  148. package/types/koobiq-components-checkbox.d.ts +30 -0
  149. package/types/koobiq-components-clamped-text.d.ts +16 -3
  150. package/types/koobiq-components-code-block.d.ts +17 -3
  151. package/types/koobiq-components-core.d.ts +226 -13
  152. package/types/koobiq-components-datepicker.d.ts +28 -1
  153. package/types/koobiq-components-divider.d.ts +28 -10
  154. package/types/koobiq-components-dropdown.d.ts +19 -0
  155. package/types/koobiq-components-filter-bar.d.ts +77 -4
  156. package/types/koobiq-components-flag.d.ts +18 -0
  157. package/types/koobiq-components-form-field.d.ts +87 -6
  158. package/types/koobiq-components-icon.d.ts +15 -0
  159. package/types/koobiq-components-inline-edit.d.ts +8 -1
  160. package/types/koobiq-components-input.d.ts +22 -3
  161. package/types/koobiq-components-list.d.ts +6 -0
  162. package/types/koobiq-components-modal.d.ts +7 -0
  163. package/types/koobiq-components-navbar.d.ts +71 -7
  164. package/types/koobiq-components-notification-center.d.ts +13 -0
  165. package/types/koobiq-components-overflow-items.d.ts +26 -2
  166. package/types/koobiq-components-popover.d.ts +38 -3
  167. package/types/koobiq-components-radio.d.ts +30 -0
  168. package/types/koobiq-components-search-expandable.d.ts +10 -0
  169. package/types/koobiq-components-select.d.ts +36 -4
  170. package/types/koobiq-components-sidepanel.d.ts +52 -1
  171. package/types/koobiq-components-splitter.d.ts +13 -4
  172. package/types/koobiq-components-tabs.d.ts +4 -0
  173. package/types/koobiq-components-tags.d.ts +6 -0
  174. package/types/koobiq-components-textarea.d.ts +9 -2
  175. package/types/koobiq-components-timepicker.d.ts +15 -0
  176. package/types/koobiq-components-toggle.d.ts +30 -0
  177. package/types/koobiq-components-tooltip.d.ts +55 -10
  178. package/types/koobiq-components-top-bar.d.ts +11 -3
  179. package/types/koobiq-components-tree-select.d.ts +12 -0
  180. package/types/koobiq-components-tree.d.ts +37 -2
@@ -57,6 +57,24 @@ async function setupOptions(project, tree) {
57
57
  return projectWorkspace;
58
58
  }
59
59
  }
60
+ async function resolveTargetDir(project, tree) {
61
+ if (!project) {
62
+ return tree.root;
63
+ }
64
+ const projectRoot = await utility.readWorkspace(tree).then((workspace) => workspace.projects.get(project)?.root, () => undefined);
65
+ if (projectRoot !== undefined) {
66
+ return tree.getDir(projectRoot || '/');
67
+ }
68
+ const folder = project
69
+ .replace(/\\/g, '/')
70
+ .replace(/^(\.\/)+/, '')
71
+ .replace(/\/+$/, '');
72
+ const dir = tree.getDir(folder || '/');
73
+ if (dir.subfiles.length || dir.subdirs.length) {
74
+ return dir;
75
+ }
76
+ throw new schematics.SchematicsException(utils_messages.noProjectOrDirectory(project));
77
+ }
60
78
  async function getParsingInfo(project, tree) {
61
79
  const tsPaths = new Set();
62
80
  const templatePaths = new Set();
@@ -77,4 +95,5 @@ async function getParsingInfo(project, tree) {
77
95
  exports.addPackageToPackageJson = addPackageToPackageJson;
78
96
  exports.getPackageVersionFromPackageJson = getPackageVersionFromPackageJson;
79
97
  exports.getParsingInfo = getParsingInfo;
98
+ exports.resolveTargetDir = resolveTargetDir;
80
99
  exports.setupOptions = setupOptions;
@@ -29,6 +29,13 @@
29
29
  }
30
30
  }
31
31
 
32
+ .kbq-select__panel_multiline {
33
+ .kbq-option-text {
34
+ white-space: normal;
35
+ overflow-wrap: break-word;
36
+ }
37
+ }
38
+
32
39
  .kbq-select__content {
33
40
  @extend %kbq-select-content;
34
41
 
@@ -262,6 +262,29 @@
262
262
  transparent calc(100% - var(--mask-size))
263
263
  );
264
264
  }
265
+
266
+ .kbq-tab-group_vertical & {
267
+ --mask-size: var(--kbq-size-3xl);
268
+ }
269
+
270
+ .kbq-tab-group_vertical &.kbq-tab-header__scroll-container_overflow-before {
271
+ mask-image: linear-gradient(to bottom, transparent, #000 var(--mask-size));
272
+ }
273
+
274
+ .kbq-tab-group_vertical &.kbq-tab-header__scroll-container_overflow-after {
275
+ mask-image: linear-gradient(to bottom, #000 calc(100% - var(--mask-size)), transparent);
276
+ }
277
+
278
+ .kbq-tab-group_vertical
279
+ &.kbq-tab-header__scroll-container_overflow-before.kbq-tab-header__scroll-container_overflow-after {
280
+ mask-image: linear-gradient(
281
+ to bottom,
282
+ transparent,
283
+ #000 var(--mask-size),
284
+ #000 calc(100% - var(--mask-size)),
285
+ transparent
286
+ );
287
+ }
265
288
  }
266
289
 
267
290
  .kbq-tab-header_underlined:not(.kbq-tab-header_vertical) .kbq-tab-list__content {
@@ -1,5 +1,8 @@
1
1
  :where(.kbq-textarea) {
2
- --kbq-textarea-size-min-height: 64px;
2
+ --kbq-textarea-size-min-rows: 3;
3
+ --kbq-textarea-size-min-height: calc(
4
+ var(--kbq-textarea-size-min-rows) * 1lh + 2 * var(--kbq-textarea-size-padding-vertical)
5
+ );
3
6
  --kbq-textarea-size-max-height: 96px;
4
7
  --kbq-textarea-size-padding-vertical: 5px;
5
8
  --kbq-textarea-size-padding-horizontal: 11px;
@@ -121,6 +121,7 @@
121
121
 
122
122
  .kbq-toast__actions {
123
123
  display: flex;
124
+ flex-wrap: wrap;
124
125
 
125
126
  padding-top: var(--kbq-toast-size-button-stack-padding-top);
126
127
 
@@ -73,10 +73,6 @@
73
73
 
74
74
  &.kbq-disabled {
75
75
  color: var(--kbq-states-foreground-disabled);
76
-
77
- .kbq-hint .kbq-hint__text {
78
- color: inherit;
79
- }
80
76
  }
81
77
 
82
78
  .kbq-toggle-bar {
@@ -84,28 +80,15 @@
84
80
  background: var(--kbq-icon-white);
85
81
  }
86
82
  }
87
-
88
- // A projected `kbq-error` is a hint too, and keeps its own color. `:where` leaves the specificity as it was.
89
- .kbq-hint:where(:not(.kbq-error)) .kbq-hint__text {
90
- color: var(--kbq-foreground-contrast-secondary);
91
- }
92
83
  }
93
84
  }
94
85
 
95
86
  @mixin kbq-toggle-typography() {
96
87
  .kbq-toggle:not(.kbq-toggle_big) {
97
88
  @include tokens.kbq-typography-level-to-styles-css-variables(typography, text-normal);
98
-
99
- & .kbq-hint .kbq-hint__text {
100
- @include tokens.kbq-typography-level-to-styles-css-variables(typography, text-compact);
101
- }
102
89
  }
103
90
 
104
91
  .kbq-toggle.kbq-toggle_big {
105
92
  @include tokens.kbq-typography-level-to-styles-css-variables(typography, text-big);
106
-
107
- & .kbq-hint .kbq-hint__text {
108
- @include tokens.kbq-typography-level-to-styles-css-variables(typography, text-normal);
109
- }
110
93
  }
111
94
  }
@@ -109,7 +109,7 @@ $navbar-trigger-margin: $trigger-margin + 1px;
109
109
  width: var(--kbq-tooltip-size-arrow-size);
110
110
  height: var(--kbq-tooltip-size-arrow-size);
111
111
 
112
- transform: rotate(45deg);
112
+ transform: translate(var(--kbq-tooltip-arrow-shift-x, 0px), var(--kbq-tooltip-arrow-shift-y, 0px)) rotate(45deg);
113
113
 
114
114
  z-index: -1;
115
115
  }
@@ -14,6 +14,7 @@
14
14
  --kbq-top-bar-padding-vertical: var(--kbq-size-m);
15
15
  --kbq-top-bar-padding-horizontal: var(--kbq-size-xxl);
16
16
  --kbq-top-bar-border-radius: 0;
17
+ --kbq-top-bar-title-height: var(--kbq-size-3xl);
17
18
  --kbq-top-bar-container-start-gap: 0;
18
19
  --kbq-top-bar-container-start-min-width: 0;
19
20
  --kbq-top-bar-container-end-gap: var(--kbq-size-s);
@@ -47,6 +47,16 @@
47
47
  flex: 0 0 var(--kbq-top-bar-spacer-min-width);
48
48
  }
49
49
 
50
+ .kbq-top-bar-title {
51
+ @include tokens.kbq-typography-level-to-styles-css-variables(typography, subheading);
52
+
53
+ // The line box of a `size="big"` breadcrumb item: the same height, and the same baseline, so a
54
+ // page that swaps the trail for a title moves nothing. A minimum, not a fixed height: a title
55
+ // long enough to wrap has to grow the bar rather than paint over its edge.
56
+ min-block-size: var(--kbq-top-bar-title-height);
57
+ line-height: var(--kbq-top-bar-title-height);
58
+ }
59
+
50
60
  .kbq-top-bar-container {
51
61
  // Must match the host set of the ruleset immediately below: the negative margin compensates the
52
62
  // padding that mixin adds, so a container the mixin skips must not get the compensation either.
@@ -6,6 +6,7 @@ import { UniqueSelectionDispatcher } from '@angular/cdk/collections';
6
6
  import { Subject } from 'rxjs';
7
7
  import * as i1$1 from '@koobiq/components/icon';
8
8
  import { KbqIcon } from '@koobiq/components/icon';
9
+ import * as _koobiq_components_accordion from '@koobiq/components/accordion';
9
10
  import * as i1 from '@koobiq/components/core';
10
11
 
11
12
  declare class KbqAccordionTriggerDirective {
@@ -15,6 +16,18 @@ declare class KbqAccordionTriggerDirective {
15
16
  protected readonly accordion: KbqAccordion;
16
17
  /** @docs-private */
17
18
  protected readonly item: KbqAccordionItem;
19
+ /**
20
+ * Value of `aria-expanded`.
21
+ *
22
+ * @docs-private
23
+ */
24
+ protected readonly expanded: _angular_core.Signal<boolean>;
25
+ /**
26
+ * Value of `data-state`.
27
+ *
28
+ * @docs-private
29
+ */
30
+ protected readonly dataState: _angular_core.Signal<_koobiq_components_accordion.KbqAccordionItemState>;
18
31
  /** @docs-private */
19
32
  get triggerId(): string;
20
33
  /** @docs-private */
@@ -344,6 +357,12 @@ declare class KbqAccordionContentDirective implements OnInit, DoCheck, AfterView
344
357
  protected readonly nativeElement: HTMLElement;
345
358
  /** @docs-private */
346
359
  protected readonly item: KbqAccordionItem;
360
+ /**
361
+ * Value of `data-state`.
362
+ *
363
+ * @docs-private
364
+ */
365
+ protected readonly dataState: _angular_core.Signal<_koobiq_components_accordion.KbqAccordionItemState>;
347
366
  /** @docs-private */
348
367
  get contentId(): string;
349
368
  /** @docs-private */
@@ -397,6 +416,12 @@ declare class KbqAccordionHeader {
397
416
  protected readonly item: KbqAccordionItem;
398
417
  /** @docs-private */
399
418
  protected readonly accordion: KbqAccordion;
419
+ /**
420
+ * Value of `data-state`.
421
+ *
422
+ * @docs-private
423
+ */
424
+ protected readonly dataState: _angular_core.Signal<_koobiq_components_accordion.KbqAccordionItemState>;
400
425
  /**
401
426
  * Names the heading after the trigger alone.
402
427
  *
@@ -180,6 +180,12 @@ declare class KbqButtonToggleGroup implements OnChanges, ControlValueAccessor, O
180
180
  syncButtonToggle(toggle: KbqButtonToggle, select: boolean, isUserInput?: boolean): void;
181
181
  /** Body of `syncButtonToggle()`. */
182
182
  private applyToggleSelection;
183
+ /**
184
+ * Reports the new value of a selected toggle, which changes the value of the group, as an interaction would.
185
+ *
186
+ * @docs-private
187
+ */
188
+ followToggleValue(toggle: KbqButtonToggle, previous: KbqButtonToggle['value']): void;
183
189
  /** Checks whether a button toggle is selected. */
184
190
  isSelected(toggle: KbqButtonToggle): boolean;
185
191
  /** Determines whether a button toggle should be checked on init, from the value waiting for it. */
@@ -59,8 +59,38 @@ declare class KbqCheckbox extends KbqColorDirective implements OnChanges, DoChec
59
59
  protected readonly inputId: _angular_core.Signal<string>;
60
60
  /** Error text projected into the checkbox. */
61
61
  private readonly error;
62
+ /**
63
+ * Whether the projected `kbq-error` is shown. Without one, nothing is rendered under the label.
64
+ *
65
+ * @docs-private
66
+ */
67
+ protected readonly showError: _angular_core.Signal<boolean>;
68
+ /**
69
+ * Id of the element wrapping the projected `kbq-error`.
70
+ *
71
+ * @docs-private
72
+ */
73
+ protected readonly errorId: _angular_core.Signal<string>;
74
+ /**
75
+ * Id of the label text, which alone names the native input.
76
+ *
77
+ * @docs-private
78
+ */
79
+ protected readonly labelId: _angular_core.Signal<string>;
62
80
  /** Hints projected into the checkbox. */
63
81
  private readonly hints;
82
+ /**
83
+ * Value of `aria-describedby` of the native input: the error, while it is shown, and the hints.
84
+ *
85
+ * @docs-private
86
+ */
87
+ protected readonly ariaDescribedBy: _angular_core.Signal<string | null>;
88
+ /**
89
+ * Value of `aria-invalid` of the native input: set whenever the checkbox is painted as invalid.
90
+ *
91
+ * @docs-private
92
+ */
93
+ protected readonly ariaInvalid: _angular_core.Signal<"true" | null>;
64
94
  /** Whether the checkbox is required. */
65
95
  readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
66
96
  /** @docs-private */
@@ -58,6 +58,7 @@ declare function kbqInjectClampedTextLocaleConfiguration(): Signal<KbqClampedTex
58
58
  */
59
59
  declare class KbqClampedList<T> implements KbqClamped {
60
60
  private readonly nativeElement;
61
+ private readonly animateCollapse;
61
62
  /** Collapsed state: `true` = collapsed, `false` = expanded, `undefined` = expanded. */
62
63
  readonly isCollapsed: _angular_core.ModelSignal<boolean>;
63
64
  /** The list of items to display. */
@@ -70,6 +71,12 @@ declare class KbqClampedList<T> implements KbqClamped {
70
71
  * Minimum number of hidden items required to show the toggle trigger. Defaults to `6`.
71
72
  */
72
73
  readonly hiddenThreshold: _angular_core.InputSignalWithTransform<number, unknown>;
74
+ /**
75
+ * Duration of the expand and collapse animation in milliseconds.
76
+ * Only state changes made through the disclosure toggle animate: programmatic writes of
77
+ * `isCollapsed` and changes of `items` switch instantly. Defaults to `100`.
78
+ */
79
+ readonly duration: _angular_core.InputSignalWithTransform<number, string | number | null | undefined>;
73
80
  /** Id the trigger points its `aria-controls` at. Keeps an id the host already carries. */
74
81
  readonly contentId: string;
75
82
  /** Number of items hidden when the list is collapsed. */
@@ -85,7 +92,7 @@ declare class KbqClampedList<T> implements KbqClamped {
85
92
  /** Toggles the collapsed state of the list. Stops event propagation. */
86
93
  toggle(event: Event): void;
87
94
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KbqClampedList<any>, never>;
88
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<KbqClampedList<any>, "[kbqClampedList]", ["kbqClampedList"], { "isCollapsed": { "alias": "isCollapsed"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "collapsedVisibleCount": { "alias": "collapsedVisibleCount"; "required": false; "isSignal": true; }; "hiddenThreshold": { "alias": "hiddenThreshold"; "required": false; "isSignal": true; }; }, { "isCollapsed": "isCollapsedChange"; }, never, never, true, [{ directive: typeof _koobiq_components_core.KbqLocaleOverridesDirective; inputs: { "kbqLocaleOverrides": "localeOverrides"; }; outputs: {}; }]>;
95
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<KbqClampedList<any>, "[kbqClampedList]", ["kbqClampedList"], { "isCollapsed": { "alias": "isCollapsed"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "collapsedVisibleCount": { "alias": "collapsedVisibleCount"; "required": false; "isSignal": true; }; "hiddenThreshold": { "alias": "hiddenThreshold"; "required": false; "isSignal": true; }; "duration": { "alias": "duration"; "required": false; "isSignal": true; }; }, { "isCollapsed": "isCollapsedChange"; }, never, never, true, [{ directive: typeof _koobiq_components_core.KbqLocaleOverridesDirective; inputs: { "kbqLocaleOverrides": "localeOverrides"; }; outputs: {}; }]>;
89
96
  }
90
97
  /**
91
98
  * Disclosure control for the clamped container it is projected into — `[kbqClampedList]` or
@@ -133,6 +140,12 @@ declare class KbqClampedText implements KbqClamped, AfterViewInit {
133
140
  * Whether collapsing scrolls the component back into view. Defaults to `true`.
134
141
  */
135
142
  readonly scrollOnCollapse: _angular_core.InputSignalWithTransform<boolean, unknown>;
143
+ /**
144
+ * Duration of the expand and collapse animation in milliseconds.
145
+ * Only state changes made through the disclosure toggle animate: programmatic writes of
146
+ * `isCollapsed` and re-measurements switch instantly. Defaults to `100`.
147
+ */
148
+ readonly duration: _angular_core.InputSignalWithTransform<number, string | number | null | undefined>;
136
149
  /** Id of the clamped region, published by the toggle as its `aria-controls`. */
137
150
  readonly contentId: string;
138
151
  /** @docs-private */
@@ -154,10 +167,10 @@ declare class KbqClampedText implements KbqClamped, AfterViewInit {
154
167
  */
155
168
  protected readonly collapsedState: Signal<boolean>;
156
169
  private readonly destroyRef;
157
- private readonly injector;
158
170
  private readonly elementRef;
159
171
  private readonly resizeObserver;
160
172
  private readonly platform;
173
+ private readonly animateCollapse;
161
174
  /**
162
175
  * Clamped text locale configuration.
163
176
  *
@@ -170,7 +183,7 @@ declare class KbqClampedText implements KbqClamped, AfterViewInit {
170
183
  private updateToggleVisibilityState;
171
184
  private getRowsCount;
172
185
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KbqClampedText, never>;
173
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<KbqClampedText, "kbq-clamped-text", ["kbqClampedText"], { "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "isCollapsed": { "alias": "isCollapsed"; "required": false; "isSignal": true; }; "debounceTime": { "alias": "debounceTime"; "required": false; "isSignal": true; }; "scrollOnCollapse": { "alias": "scrollOnCollapse"; "required": false; "isSignal": true; }; }, { "isCollapsed": "isCollapsedChange"; }, never, ["*"], true, [{ directive: typeof _koobiq_components_core.KbqLocaleOverridesDirective; inputs: { "kbqLocaleOverrides": "localeOverrides"; }; outputs: {}; }]>;
186
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KbqClampedText, "kbq-clamped-text", ["kbqClampedText"], { "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "isCollapsed": { "alias": "isCollapsed"; "required": false; "isSignal": true; }; "debounceTime": { "alias": "debounceTime"; "required": false; "isSignal": true; }; "scrollOnCollapse": { "alias": "scrollOnCollapse"; "required": false; "isSignal": true; }; "duration": { "alias": "duration"; "required": false; "isSignal": true; }; }, { "isCollapsed": "isCollapsedChange"; }, never, ["*"], true, [{ directive: typeof _koobiq_components_core.KbqLocaleOverridesDirective; inputs: { "kbqLocaleOverrides": "localeOverrides"; }; outputs: {}; }]>;
174
187
  }
175
188
 
176
189
  /** Re-exports both clamped containers and their shared trigger for `NgModule`-based consumers. */
@@ -54,13 +54,17 @@ declare const KBQ_CODE_BLOCK_FALLBACK_FILE_NAME: InjectionToken<string>;
54
54
  declare const kbqCodeBlockFallbackFileNameProvider: (fileName: string) => Provider;
55
55
  /** Default options for `kbq-code-block`. */
56
56
  type KbqCodeBlockDefaultOptions = Partial<{
57
- /** Whether the actionbar should remain visible when tabs are hidden. */
57
+ /** Whether the actionbar should remain visible when tabs are hidden. Defaults to `false`. */
58
58
  alwaysShowActionbar: boolean;
59
+ /** Whether to display line numbers. Defaults to `false`. */
60
+ lineNumbers: boolean;
59
61
  }>;
60
62
  /** Injection token used to configure the default options for all `kbq-code-block` components. */
61
63
  declare const KBQ_CODE_BLOCK_DEFAULT_OPTIONS: InjectionToken<Partial<{
62
- /** Whether the actionbar should remain visible when tabs are hidden. */
64
+ /** Whether the actionbar should remain visible when tabs are hidden. Defaults to `false`. */
63
65
  alwaysShowActionbar: boolean;
66
+ /** Whether to display line numbers. Defaults to `false`. */
67
+ lineNumbers: boolean;
64
68
  }>>;
65
69
  /** Utility provider for `KBQ_CODE_BLOCK_DEFAULT_OPTIONS`. */
66
70
  declare const kbqCodeBlockDefaultOptionsProvider: (options: KbqCodeBlockDefaultOptions) => Provider;
@@ -90,7 +94,7 @@ declare class KbqCodeBlock implements AfterViewInit {
90
94
  protected readonly contentExceedsMaxHeight: _angular_core.WritableSignal<boolean | undefined>;
91
95
  /** @docs-private */
92
96
  protected readonly tabLinkTemplate: _angular_core.Signal<TemplateRef<KbqTabLinkTemplateContext> | undefined>;
93
- /** Whether to display line numbers. */
97
+ /** Whether to display line numbers. Defaults to `lineNumbers` of `KBQ_CODE_BLOCK_DEFAULT_OPTIONS`, or `false`. */
94
98
  readonly lineNumbers: _angular_core.InputSignalWithTransform<boolean, unknown>;
95
99
  /** Whether the code block should be filled. */
96
100
  readonly filled: _angular_core.InputSignalWithTransform<boolean, unknown>;
@@ -432,7 +436,17 @@ declare class KbqCodeBlockHighlight {
432
436
  readonly startFrom: _angular_core.InputSignalWithTransform<number, unknown>;
433
437
  /** Whether to display line numbers for single line code block. */
434
438
  readonly singleLine: _angular_core.InputSignalWithTransform<boolean, unknown>;
439
+ /** Number of lines of the file, a line break at its end not counted, as it starts no line. */
440
+ protected readonly lineCount: _angular_core.Signal<number>;
441
+ /** Width of the line numbers column, in digits of its largest number. */
442
+ protected readonly lineNumberDigits: _angular_core.Signal<number>;
435
443
  private highlight;
444
+ /**
445
+ * Wraps every line of the highlighted markup in an element of its own, for the line numbers to count. The spans a
446
+ * line break crosses are closed at the end of its line and opened again on the next one. The line break stays
447
+ * inside its line, so that an empty line keeps its height and the text of the code is the text of the file.
448
+ */
449
+ private splitIntoLines;
436
450
  /** The fallback language, or plain text, which the loader registers on every instance, if it is unknown too. */
437
451
  private fallbackLanguage;
438
452
  private warn;