@koobiq/components 20.0.0 → 20.2.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 (231) hide show
  1. package/accordion/_accordion-theme.scss +1 -1
  2. package/accordion/accordion-tokens.scss +1 -0
  3. package/accordion/{accordion-trigger.component.scss → accordion-trigger.scss} +4 -18
  4. package/accordion/{accordion.component.scss → accordion.scss} +12 -5
  5. package/accordion/index.d.ts +215 -119
  6. package/actions-panel/index.d.ts +1 -0
  7. package/alert/_alert-theme.scss +14 -4
  8. package/alert/alert-tokens.scss +4 -4
  9. package/alert/alert.component.scss +24 -13
  10. package/alert/index.d.ts +63 -29
  11. package/app-switcher/app-switcher-dropdown-app.scss +2 -0
  12. package/autocomplete/autocomplete.scss +2 -1
  13. package/autocomplete/index.d.ts +35 -29
  14. package/badge/index.d.ts +2 -3
  15. package/breadcrumbs/breadcrumbs.scss +4 -0
  16. package/breadcrumbs/index.d.ts +2 -1
  17. package/button/button-group.scss +42 -2
  18. package/button-toggle/button-toggle.scss +23 -0
  19. package/button-toggle/index.d.ts +3 -1
  20. package/checkbox/checkbox.scss +5 -4
  21. package/clamped-text/index.d.ts +4 -2
  22. package/core/index.d.ts +515 -21
  23. package/core/styles/_core.scss +2 -0
  24. package/core/styles/common/_animation.scss +35 -24
  25. package/core/styles/common/_connected-overlay.scss +36 -0
  26. package/core/styles/common/_select.scss +7 -2
  27. package/core/styles/theming/_components-theming.scss +1 -1
  28. package/core/styles/theming/_scrollbar-theme.scss +4 -0
  29. package/datepicker/_datepicker-theme.scss +1 -1
  30. package/datepicker/datepicker-toggle.scss +3 -3
  31. package/dl/index.d.ts +1 -0
  32. package/dropdown/dropdown-item.scss +16 -0
  33. package/dropdown/dropdown-tokens.scss +2 -1
  34. package/dropdown/dropdown.scss +11 -2
  35. package/dropdown/index.d.ts +73 -6
  36. package/fesm2022/koobiq-components-accordion.mjs +406 -303
  37. package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
  38. package/fesm2022/koobiq-components-actions-panel.mjs +15 -6
  39. package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -1
  40. package/fesm2022/koobiq-components-alert.mjs +88 -48
  41. package/fesm2022/koobiq-components-alert.mjs.map +1 -1
  42. package/fesm2022/koobiq-components-app-switcher.mjs +7 -7
  43. package/fesm2022/koobiq-components-app-switcher.mjs.map +1 -1
  44. package/fesm2022/koobiq-components-autocomplete.mjs +37 -23
  45. package/fesm2022/koobiq-components-autocomplete.mjs.map +1 -1
  46. package/fesm2022/koobiq-components-badge.mjs +5 -4
  47. package/fesm2022/koobiq-components-badge.mjs.map +1 -1
  48. package/fesm2022/koobiq-components-breadcrumbs.mjs +6 -4
  49. package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
  50. package/fesm2022/koobiq-components-button-toggle.mjs +9 -6
  51. package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
  52. package/fesm2022/koobiq-components-button.mjs +4 -4
  53. package/fesm2022/koobiq-components-button.mjs.map +1 -1
  54. package/fesm2022/koobiq-components-checkbox.mjs +2 -2
  55. package/fesm2022/koobiq-components-checkbox.mjs.map +1 -1
  56. package/fesm2022/koobiq-components-clamped-text.mjs +9 -0
  57. package/fesm2022/koobiq-components-clamped-text.mjs.map +1 -1
  58. package/fesm2022/koobiq-components-code-block.mjs +5 -1
  59. package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
  60. package/fesm2022/koobiq-components-core.mjs +544 -113
  61. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  62. package/fesm2022/koobiq-components-datepicker.mjs +13 -10
  63. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  64. package/fesm2022/koobiq-components-dl.mjs +3 -2
  65. package/fesm2022/koobiq-components-dl.mjs.map +1 -1
  66. package/fesm2022/koobiq-components-dropdown.mjs +105 -31
  67. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  68. package/fesm2022/koobiq-components-file-upload.mjs +33 -22
  69. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  70. package/fesm2022/koobiq-components-filter-bar.mjs +1169 -782
  71. package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
  72. package/fesm2022/koobiq-components-flag.mjs +66 -0
  73. package/fesm2022/koobiq-components-flag.mjs.map +1 -0
  74. package/fesm2022/koobiq-components-form-field.mjs +6 -6
  75. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  76. package/fesm2022/koobiq-components-icon.mjs +16 -7
  77. package/fesm2022/koobiq-components-icon.mjs.map +1 -1
  78. package/fesm2022/koobiq-components-inline-edit.mjs +30 -7
  79. package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
  80. package/fesm2022/koobiq-components-list.mjs +39 -20
  81. package/fesm2022/koobiq-components-list.mjs.map +1 -1
  82. package/fesm2022/koobiq-components-loader-overlay.mjs +2 -2
  83. package/fesm2022/koobiq-components-loader-overlay.mjs.map +1 -1
  84. package/fesm2022/koobiq-components-modal.mjs +9 -5
  85. package/fesm2022/koobiq-components-modal.mjs.map +1 -1
  86. package/fesm2022/koobiq-components-navbar.mjs +123 -27
  87. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  88. package/fesm2022/koobiq-components-notification-center.mjs +193 -19
  89. package/fesm2022/koobiq-components-notification-center.mjs.map +1 -1
  90. package/fesm2022/koobiq-components-overflow-items.mjs +12 -4
  91. package/fesm2022/koobiq-components-overflow-items.mjs.map +1 -1
  92. package/fesm2022/koobiq-components-popover.mjs +9 -4
  93. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  94. package/fesm2022/koobiq-components-progress-bar.mjs +2 -2
  95. package/fesm2022/koobiq-components-progress-bar.mjs.map +1 -1
  96. package/fesm2022/koobiq-components-progress-spinner.mjs +2 -2
  97. package/fesm2022/koobiq-components-progress-spinner.mjs.map +1 -1
  98. package/fesm2022/koobiq-components-radio.mjs +3 -7
  99. package/fesm2022/koobiq-components-radio.mjs.map +1 -1
  100. package/fesm2022/koobiq-components-search-expandable.mjs +43 -8
  101. package/fesm2022/koobiq-components-search-expandable.mjs.map +1 -1
  102. package/fesm2022/koobiq-components-select.mjs +72 -59
  103. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  104. package/fesm2022/koobiq-components-sidebar.mjs +4 -0
  105. package/fesm2022/koobiq-components-sidebar.mjs.map +1 -1
  106. package/fesm2022/koobiq-components-sidepanel.mjs +3 -3
  107. package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
  108. package/fesm2022/koobiq-components-skeleton.mjs +2 -2
  109. package/fesm2022/koobiq-components-skeleton.mjs.map +1 -1
  110. package/fesm2022/koobiq-components-split-button.mjs +5 -12
  111. package/fesm2022/koobiq-components-split-button.mjs.map +1 -1
  112. package/fesm2022/koobiq-components-splitter.mjs +6 -2
  113. package/fesm2022/koobiq-components-splitter.mjs.map +1 -1
  114. package/fesm2022/koobiq-components-table.mjs +8 -6
  115. package/fesm2022/koobiq-components-table.mjs.map +1 -1
  116. package/fesm2022/koobiq-components-tabs.mjs +42 -18
  117. package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
  118. package/fesm2022/koobiq-components-tags.mjs +8 -1
  119. package/fesm2022/koobiq-components-tags.mjs.map +1 -1
  120. package/fesm2022/koobiq-components-textarea.mjs +7 -14
  121. package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
  122. package/fesm2022/koobiq-components-time-range.mjs +4 -4
  123. package/fesm2022/koobiq-components-time-range.mjs.map +1 -1
  124. package/fesm2022/koobiq-components-timepicker.mjs +3 -4
  125. package/fesm2022/koobiq-components-timepicker.mjs.map +1 -1
  126. package/fesm2022/koobiq-components-timezone.mjs +9 -5
  127. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  128. package/fesm2022/koobiq-components-title.mjs +132 -14
  129. package/fesm2022/koobiq-components-title.mjs.map +1 -1
  130. package/fesm2022/koobiq-components-toast.mjs +1 -1
  131. package/fesm2022/koobiq-components-toast.mjs.map +1 -1
  132. package/fesm2022/koobiq-components-toggle.mjs +2 -2
  133. package/fesm2022/koobiq-components-toggle.mjs.map +1 -1
  134. package/fesm2022/koobiq-components-tooltip.mjs +168 -8
  135. package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
  136. package/fesm2022/koobiq-components-tree-select.mjs +79 -38
  137. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  138. package/fesm2022/koobiq-components-tree.mjs +67 -41
  139. package/fesm2022/koobiq-components-tree.mjs.map +1 -1
  140. package/fesm2022/koobiq-components-username.mjs +16 -3
  141. package/fesm2022/koobiq-components-username.mjs.map +1 -1
  142. package/file-upload/file-upload-tokens.scss +1 -0
  143. package/file-upload/index.d.ts +10 -7
  144. package/filter-bar/_filter-bar-theme.scss +82 -0
  145. package/filter-bar/filter-bar-tokens.scss +9 -0
  146. package/filter-bar/filter-bar.scss +10 -4
  147. package/filter-bar/filter-refresher.scss +1 -1
  148. package/filter-bar/filters.scss +25 -20
  149. package/filter-bar/index.d.ts +764 -336
  150. package/filter-bar/pipes/base-pipe.scss +12 -44
  151. package/filter-bar/pipes/pipe-date.scss +20 -14
  152. package/filter-bar/pipes/pipe-input.scss +10 -0
  153. package/filter-bar/pipes/pipe-multi-tree-select.scss +5 -3
  154. package/filter-bar/pipes/pipe-multiselect.scss +5 -3
  155. package/filter-bar/pipes/pipe-readonly.scss +4 -13
  156. package/filter-bar/pipes/pipe-select.scss +3 -1
  157. package/filter-bar/pipes/pipe-tree-select.scss +3 -1
  158. package/flag/flag.scss +53 -0
  159. package/flag/index.d.ts +44 -0
  160. package/icon/icon-button.scss +3 -1
  161. package/icon/icon-item-tokens.scss +1 -1
  162. package/icon/index.d.ts +15 -2
  163. package/inline-edit/index.d.ts +5 -0
  164. package/inline-edit/inline-edit.scss +7 -7
  165. package/link/link-tokens.scss +2 -2
  166. package/list/index.d.ts +11 -2
  167. package/loader-overlay/loader-overlay-tokens.scss +1 -1
  168. package/modal/_modal-animation.scss +6 -6
  169. package/modal/_modal-theme.scss +5 -0
  170. package/modal/index.d.ts +3 -1
  171. package/modal/modal.scss +15 -0
  172. package/navbar/_navbar-item_vertical.scss +7 -5
  173. package/navbar/index.d.ts +39 -4
  174. package/navbar/navbar-brand.scss +17 -7
  175. package/navbar/navbar-item.scss +9 -0
  176. package/notification-center/_notification-center-theme.scss +2 -1
  177. package/notification-center/index.d.ts +89 -3
  178. package/notification-center/notification-center.scss +42 -4
  179. package/notification-center/notification-item.scss +3 -2
  180. package/overflow-items/index.d.ts +1 -0
  181. package/package.json +7 -3
  182. package/prebuilt-themes/dark-theme.css +1 -1
  183. package/prebuilt-themes/light-theme.css +1 -1
  184. package/prebuilt-themes/theme.css +1 -1
  185. package/progress-bar/progress-bar.scss +4 -0
  186. package/progress-spinner/progress-spinner.scss +5 -1
  187. package/radio/index.d.ts +1 -5
  188. package/radio/radio.scss +18 -4
  189. package/schematics/collection.json +15 -0
  190. package/schematics/migrations/alert-signals/README.md +64 -0
  191. package/schematics/migrations/alert-signals/data.js +70 -0
  192. package/schematics/migrations/alert-signals/index.js +350 -0
  193. package/schematics/migrations/alert-signals/schema.json +20 -0
  194. package/schematics/migrations/autocomplete-panel-width-auto/README.md +68 -0
  195. package/schematics/migrations/autocomplete-panel-width-auto/index.js +70 -0
  196. package/schematics/migrations/autocomplete-panel-width-auto/schema.json +15 -0
  197. package/schematics/migrations/filter-bar-signals/README.md +66 -0
  198. package/schematics/migrations/filter-bar-signals/data.js +72 -0
  199. package/schematics/migrations/filter-bar-signals/index.js +316 -0
  200. package/schematics/migrations/filter-bar-signals/schema.json +20 -0
  201. package/schematics/migrations.json +15 -0
  202. package/schematics/ng-add/index.js +1 -1
  203. package/schematics/utils/angular-parsing.js +11 -2
  204. package/search-expandable/index.d.ts +3 -0
  205. package/select/index.d.ts +59 -24
  206. package/sidebar/index.d.ts +1 -0
  207. package/skeleton/skeleton.scss +4 -0
  208. package/split-button/_split-button-theme.scss +2 -2
  209. package/splitter/_splitter-theme.scss +2 -2
  210. package/splitter/index.d.ts +1 -0
  211. package/table/_table-theme.scss +4 -0
  212. package/table/index.d.ts +3 -2
  213. package/tabs/_tabs-common.scss +60 -31
  214. package/tabs/_tabs-theme.scss +12 -0
  215. package/tabs/index.d.ts +4 -2
  216. package/tabs/tab-header.scss +15 -0
  217. package/tabs/tab-nav-bar.scss +4 -0
  218. package/tabs/tabs-tokens.scss +2 -1
  219. package/textarea/index.d.ts +0 -1
  220. package/time-range/time-range.scss +0 -8
  221. package/timepicker/timepicker.scss +2 -2
  222. package/timezone/index.d.ts +2 -3
  223. package/title/index.d.ts +92 -2
  224. package/tooltip/index.d.ts +124 -7
  225. package/tree/_tree-theme.scss +2 -7
  226. package/tree/index.d.ts +19 -4
  227. package/tree/toggle.scss +5 -0
  228. package/tree/tree-option.scss +0 -4
  229. package/tree-select/_tree-select-theme.scss +1 -1
  230. package/tree-select/index.d.ts +53 -22
  231. package/username/index.d.ts +20 -2
@@ -12,15 +12,13 @@
12
12
  }
13
13
 
14
14
  .kbq-button-wrapper {
15
- max-width: 320px;
15
+ max-width: var(--kbq-filter-bar-pipe-max-width, 320px);
16
16
  }
17
17
 
18
18
  .kbq-pipe__name {
19
19
  @include common.kbq-truncate-line();
20
20
 
21
21
  flex: 1 1 auto;
22
-
23
- color: var(--kbq-foreground-contrast-secondary);
24
22
  }
25
23
 
26
24
  .kbq-pipe__value {
@@ -29,90 +27,60 @@
29
27
  flex: 1 1 auto;
30
28
 
31
29
  &:not(.kbq-pipe__value_empty) {
32
- margin-left: 4px;
30
+ margin-inline-start: 4px;
33
31
  }
34
32
  }
35
33
 
36
- .kbq-pipe__separator {
37
- z-index: 1;
38
-
39
- margin-left: -1px;
40
- margin-right: 0;
41
-
42
- height: var(--kbq-size-l);
43
-
44
- align-self: center;
45
-
46
- color: var(--kbq-line-contrast-less);
47
- }
48
-
49
34
  .kbq-select:not(:hover, .kbq-active),
50
35
  .kbq-tree-select:not(:hover, .kbq-active),
51
36
  .kbq-button:not(:hover, .kbq-active, [disabled]) {
52
37
  & + .kbq-pipe-button:not(:hover, .kbq-active)::after {
53
38
  content: '';
54
39
  position: absolute;
55
- left: 0;
40
+ inset-inline-start: 0;
56
41
  top: var(--kbq-size-s);
57
42
 
58
43
  width: 1px;
59
44
  height: var(--kbq-size-l);
60
-
61
- background: var(--kbq-line-contrast-less);
62
45
  }
63
46
  }
64
47
 
65
48
  .kbq-button.cdk-keyboard-focused {
66
49
  z-index: 1;
67
50
  }
68
-
69
- &.kbq-pipe_disabled {
70
- .kbq-pipe__name,
71
- .kbq-pipe__value {
72
- color: var(--kbq-states-foreground-disabled);
73
- }
74
- }
75
51
  }
76
52
 
77
53
  .kbq-pipe.kbq-pipe_removable,
78
54
  .kbq-pipe.kbq-pipe_cleanable:not(.kbq-pipe_empty) {
79
55
  .kbq-button {
80
- border-bottom-right-radius: unset;
81
- border-top-right-radius: unset;
82
- border-right: none;
56
+ border-end-end-radius: unset;
57
+ border-start-end-radius: unset;
58
+ border-inline-end: none;
83
59
 
84
60
  &.cdk-keyboard-focused::after {
85
61
  content: '';
86
62
  position: absolute;
87
- right: 0;
63
+ inset-inline-end: 0;
88
64
  top: 0;
89
65
  bottom: 0;
90
66
  width: 1px;
91
- background: var(--kbq-states-line-focus-theme);
92
67
  }
93
68
  }
94
69
 
95
70
  .kbq-button-icon {
96
- border-bottom-left-radius: unset;
97
- border-top-left-radius: unset;
98
- border-left: none;
71
+ border-end-start-radius: unset;
72
+ border-start-start-radius: unset;
73
+ border-inline-start: none;
99
74
 
100
75
  &.cdk-keyboard-focused::after {
101
76
  content: '';
102
77
  position: absolute;
103
- left: 0;
78
+ inset-inline-start: 0;
104
79
  top: 0;
105
80
  bottom: 0;
106
81
  width: 1px;
107
- background: var(--kbq-states-line-focus-theme);
108
82
  }
109
83
  }
110
84
  }
111
85
 
112
- .kbq-pipe-tooltip__name {
113
- color: var(--kbq-foreground-white-secondary);
114
- }
115
-
116
- .kbq-pipe-tooltip__value {
117
- color: var(--kbq-foreground-white);
118
- }
86
+ @include kbq-filter-bar-pipe-theme();
@@ -4,6 +4,10 @@
4
4
  @use '../../datepicker/datepicker-tokens' as *;
5
5
 
6
6
  .kbq-pipe-date__popover {
7
+ // Tokens are declared on the overlay panel itself so they resolve outside `.kbq-filter-bar`.
8
+ --kbq-filter-bar-date-period-width: 320px;
9
+ --kbq-filter-bar-date-field-width: 136px;
10
+
7
11
  & .kbq-popover__container {
8
12
  max-height: unset;
9
13
  }
@@ -16,8 +20,7 @@
16
20
  margin: var(--kbq-size-xxs) 0;
17
21
 
18
22
  & .kbq-list-option {
19
- margin-left: var(--kbq-size-xxs);
20
- margin-right: var(--kbq-size-xxs);
23
+ margin-inline: var(--kbq-size-xxs);
21
24
 
22
25
  & .kbq-list-text {
23
26
  display: flex;
@@ -25,7 +28,7 @@
25
28
  }
26
29
 
27
30
  & .kbq-icon {
28
- margin-left: var(--kbq-size-s);
31
+ margin-inline-start: var(--kbq-size-s);
29
32
  align-self: center;
30
33
 
31
34
  color: var(--kbq-icon-fade-contrast-color);
@@ -34,7 +37,7 @@
34
37
  }
35
38
 
36
39
  & .kbq-date-period {
37
- width: 320px;
40
+ width: var(--kbq-filter-bar-date-period-width);
38
41
 
39
42
  & .kbq-date-period__header {
40
43
  padding: var(--kbq-size-xs) var(--kbq-size-xxs) var(--kbq-size-s);
@@ -59,11 +62,11 @@
59
62
  gap: var(--kbq-size-s);
60
63
 
61
64
  & .kbq-form__label {
62
- padding-left: var(--kbq-size-l);
65
+ padding-inline-start: var(--kbq-size-l);
63
66
  }
64
67
 
65
68
  & .kbq-form__control {
66
- padding-right: var(--kbq-size-l);
69
+ padding-inline-end: var(--kbq-size-l);
67
70
  }
68
71
 
69
72
  & .kbq-date-period__date,
@@ -75,22 +78,26 @@
75
78
  display: flex;
76
79
 
77
80
  & .kbq-date-period__date {
78
- width: 136px;
81
+ width: var(--kbq-filter-bar-date-field-width);
79
82
 
80
83
  & .kbq-form-field__container {
81
- border-top-right-radius: unset;
82
- border-bottom-right-radius: unset;
84
+ // Square off the seam (inline-end) — logical so it follows the inline-start overlap
85
+ // below under RTL (was border-top/bottom-right-radius).
86
+ border-start-end-radius: unset;
87
+ border-end-end-radius: unset;
83
88
  }
84
89
  }
85
90
 
86
91
  & .kbq-date-period__time.kbq-form-field-type-timepicker {
87
92
  flex: 1;
88
- margin-left: -1px;
93
+ margin-inline-start: -1px;
89
94
  width: unset;
90
95
 
91
96
  & .kbq-form-field__container {
92
- border-top-left-radius: unset;
93
- border-bottom-left-radius: unset;
97
+ // Square off the seam (inline-start) — logical counterpart of the date field above
98
+ // (was border-top/bottom-left-radius).
99
+ border-start-start-radius: unset;
100
+ border-end-start-radius: unset;
94
101
  }
95
102
  }
96
103
  }
@@ -109,8 +116,7 @@
109
116
  & .kbq-hint {
110
117
  grid-column: 2 span;
111
118
 
112
- padding-left: var(--kbq-size-m);
113
- padding-right: var(--kbq-size-m);
119
+ padding-inline: var(--kbq-size-m);
114
120
  }
115
121
  }
116
122
 
@@ -0,0 +1,10 @@
1
+ .kbq-pipe.kbq-pipe__input {
2
+ // Fall back like base-pipe.scss does for --kbq-filter-bar-pipe-max-width: the token is declared on
3
+ // .kbq-filter-bar, which a pipe rendered outside a bar never sees.
4
+ width: var(--kbq-filter-bar-pipe-input-width, 240px);
5
+ flex: none;
6
+
7
+ .kbq-form-field {
8
+ width: 100%;
9
+ }
10
+ }
@@ -1,12 +1,14 @@
1
+ @use '../filter-bar-theme' as *;
2
+
1
3
  .kbq-pipe__multi-tree-select {
2
4
  .kbq-pipe__value {
3
- margin-left: var(--kbq-size-xxs);
5
+ margin-inline-start: var(--kbq-size-xxs);
4
6
  }
5
7
 
6
8
  .kbq-badge {
7
9
  align-self: center;
8
10
 
9
- margin-left: var(--kbq-size-xs);
11
+ margin-inline-start: var(--kbq-size-xs);
10
12
  }
11
13
 
12
14
  & .kbq-tree-select .kbq-select__trigger {
@@ -15,5 +17,5 @@
15
17
  }
16
18
 
17
19
  .kbq-pipe-multi-tree-select__panel .kbq-select__content {
18
- max-height: 404px;
20
+ @include kbq-filter-bar-panel-content-max-height();
19
21
  }
@@ -1,15 +1,17 @@
1
+ @use '../filter-bar-theme' as *;
2
+
1
3
  .kbq-pipe__multiselect {
2
4
  .kbq-pipe__value {
3
- margin-left: var(--kbq-size-xxs);
5
+ margin-inline-start: var(--kbq-size-xxs);
4
6
  }
5
7
 
6
8
  .kbq-badge {
7
9
  align-self: center;
8
10
 
9
- margin-left: var(--kbq-size-xs);
11
+ margin-inline-start: var(--kbq-size-xs);
10
12
  }
11
13
  }
12
14
 
13
15
  .kbq-pipe-multiselect__panel .kbq-select__content {
14
- max-height: 404px;
16
+ @include kbq-filter-bar-panel-content-max-height();
15
17
  }
@@ -1,18 +1,9 @@
1
+ @use '../filter-bar-theme' as *;
2
+
1
3
  .kbq-pipe.kbq-pipe__readonly {
2
4
  & .kbq-button {
3
5
  cursor: default;
4
6
  }
5
-
6
- &:not(.kbq-pipe_cleanable) {
7
- & .kbq-button-icon.kbq-button_filled:not(:hover),
8
- & .kbq-button.kbq-button_filled,
9
- & .kbq-button.kbq-button_filled:hover {
10
- background: var(--kbq-states-background-disabled);
11
- }
12
-
13
- & .kbq-pipe__name,
14
- & .kbq-pipe__value {
15
- color: var(--kbq-states-foreground-disabled);
16
- }
17
- }
18
7
  }
8
+
9
+ @include kbq-filter-bar-readonly-theme();
@@ -1,3 +1,5 @@
1
+ @use '../filter-bar-theme' as *;
2
+
1
3
  .kbq-pipe-select__panel .kbq-select__content {
2
- max-height: 404px;
4
+ @include kbq-filter-bar-panel-content-max-height();
3
5
  }
@@ -1,5 +1,7 @@
1
+ @use '../filter-bar-theme' as *;
2
+
1
3
  .kbq-pipe-tree-select__panel .kbq-tree-select__content {
2
- max-height: 404px;
4
+ @include kbq-filter-bar-panel-content-max-height();
3
5
  }
4
6
 
5
7
  .kbq-pipe__tree-select {
package/flag/flag.scss ADDED
@@ -0,0 +1,53 @@
1
+ .kbq-flag {
2
+ // Theme tokens. The faded contrast line resolves to a dark hairline in the light theme and a
3
+ // light one in the dark theme, so the flag stays separated from the background in both.
4
+ --kbq-flag-shadow-color: var(--kbq-line-contrast-fade);
5
+ --kbq-flag-empty-background: var(--kbq-states-background-disabled);
6
+ --kbq-flag-border-radius: 0;
7
+ --kbq-flag-aspect-ratio: 3 / 2;
8
+
9
+ display: inline-block;
10
+ position: relative;
11
+ box-sizing: border-box;
12
+ // Sizing follows the surrounding text; 3:2 gives width = 1.5 × line height. Override via
13
+ // font-size / width / height to resize.
14
+ height: 1em;
15
+ aspect-ratio: var(--kbq-flag-aspect-ratio);
16
+ vertical-align: middle;
17
+ overflow: hidden;
18
+ border-radius: var(--kbq-flag-border-radius);
19
+
20
+ // Size the flag image whether it is projected directly or bound via [innerHTML]
21
+ // (the injected svg may sit inside a wrapper element).
22
+ svg,
23
+ img {
24
+ display: block;
25
+ width: 100%;
26
+ height: 100%;
27
+ object-fit: cover;
28
+ }
29
+
30
+ // Inset hairline drawn on top of the flag, gated by the shadow input.
31
+ &.kbq-flag_shadow-inset::after {
32
+ content: '';
33
+ position: absolute;
34
+ inset: 0;
35
+ border-radius: inherit;
36
+ box-shadow: inset 0 0 0 1px var(--kbq-flag-shadow-color);
37
+ pointer-events: none;
38
+ }
39
+
40
+ &.kbq-flag_square,
41
+ &.kbq-flag_circle {
42
+ --kbq-flag-aspect-ratio: 1 / 1;
43
+ }
44
+
45
+ &.kbq-flag_circle {
46
+ border-radius: 50%;
47
+ }
48
+
49
+ // Neutral placeholder when no flag is projected (unknown / invalid country code).
50
+ &.kbq-flag_empty {
51
+ background: var(--kbq-flag-empty-background);
52
+ }
53
+ }
@@ -0,0 +1,44 @@
1
+ import * as _angular_core from '@angular/core';
2
+
3
+ /** Shape of the flag. `rectangle` keeps the default 3:2 ratio, `square`/`circle` expect a 1:1 source. */
4
+ type KbqFlagShape = 'rectangle' | 'square' | 'circle';
5
+ /** Inset shadow (hairline) that separates the flag from the background. */
6
+ type KbqFlagShadow = 'inset' | 'none';
7
+
8
+ /**
9
+ * Presentational wrapper for a consumer-provided country flag (inline `<svg>` or `<img>`).
10
+ * Decorates it with shape and shadow and applies the accessibility contract.
11
+ *
12
+ * ```html
13
+ * <kbq-flag><img src="…/AL.svg" alt="" /></kbq-flag> Albania
14
+ * ```
15
+ */
16
+ declare class KbqFlag {
17
+ /**
18
+ * Shape of the flag. `square`/`circle` expect a 1:1 (square) flag source to be projected.
19
+ * @default rectangle
20
+ */
21
+ readonly shape: _angular_core.InputSignal<KbqFlagShape>;
22
+ /**
23
+ * Inset hairline that keeps the flag distinct from the background. Its color adapts to the theme.
24
+ * @default inset
25
+ */
26
+ readonly shadow: _angular_core.InputSignal<KbqFlagShadow>;
27
+ /** Renders a neutral placeholder — use when no flag can be shown (unknown / invalid country code). */
28
+ readonly empty: _angular_core.InputSignalWithTransform<boolean, unknown>;
29
+ /** Marks the flag as decorative — hidden from screen readers (use when adjacent text is present). */
30
+ readonly decorative: _angular_core.InputSignalWithTransform<boolean, unknown>;
31
+ /** Accessible name for the flag. Use when the flag carries meaning and has no adjacent text. */
32
+ readonly label: _angular_core.InputSignal<string | undefined>;
33
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KbqFlag, never>;
34
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KbqFlag, "kbq-flag", ["kbqFlag"], { "shape": { "alias": "shape"; "required": false; "isSignal": true; }; "shadow": { "alias": "shadow"; "required": false; "isSignal": true; }; "empty": { "alias": "empty"; "required": false; "isSignal": true; }; "decorative": { "alias": "decorative"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
35
+ }
36
+
37
+ declare class KbqFlagModule {
38
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KbqFlagModule, never>;
39
+ static ɵmod: _angular_core.ɵɵNgModuleDeclaration<KbqFlagModule, never, [typeof KbqFlag], [typeof KbqFlag]>;
40
+ static ɵinj: _angular_core.ɵɵInjectorDeclaration<KbqFlagModule>;
41
+ }
42
+
43
+ export { KbqFlag, KbqFlagModule };
44
+ export type { KbqFlagShadow, KbqFlagShape };
@@ -9,7 +9,9 @@
9
9
 
10
10
  padding: var(--kbq-icon-button-size-normal-vertical-padding) var(--kbq-icon-button-size-normal-horizontal-padding);
11
11
 
12
- &.kbq-icon-button_small {
12
+ // @deprcated Will be removed in the next major release (#DS-5338)
13
+ &.kbq-icon-button_small,
14
+ &.kbq-icon-button_compact {
13
15
  padding: var(--kbq-icon-button-size-small-vertical-padding) var(--kbq-icon-button-size-small-horizontal-padding);
14
16
  }
15
17
 
@@ -10,7 +10,7 @@
10
10
  --kbq-icon-item-filled-fade-off-contrast-background: var(--kbq-background-contrast);
11
11
  --kbq-icon-item-filled-fade-off-error-color: var(--kbq-icon-white);
12
12
  --kbq-icon-item-filled-fade-off-error-background: var(--kbq-background-error);
13
- --kbq-icon-item-filled-fade-off-warning-color: var(--kbq-icon-white);
13
+ --kbq-icon-item-filled-fade-off-warning-color: var(--kbq-icon-contrast);
14
14
  --kbq-icon-item-filled-fade-off-warning-background: var(--kbq-background-warning);
15
15
  --kbq-icon-item-filled-fade-off-success-color: var(--kbq-icon-white);
16
16
  --kbq-icon-item-filled-fade-off-success-background: var(--kbq-background-success);
package/icon/index.d.ts CHANGED
@@ -83,9 +83,22 @@ declare class KbqIcon extends KbqColorDirective implements AfterContentInit, OnC
83
83
  static ɵcmp: i0.ɵɵComponentDeclaration<KbqIcon, "[kbq-icon]", never, { "small": { "alias": "small"; "required": false; "isSignal": true; }; "autoColor": { "alias": "autoColor"; "required": false; }; "iconName": { "alias": "kbq-icon"; "required": false; }; }, {}, never, ["*"], true, never>;
84
84
  }
85
85
 
86
+ /**
87
+ * Size options for `KbqIconButton`.
88
+ * - `compact`: 16px icon with padding, 24×24px container.
89
+ * - `normal`: 24px icon, no padding.
90
+ */
91
+ type KbqIconButtonSize = 'compact' | 'normal';
86
92
  declare class KbqIconButton extends KbqIcon implements AfterViewInit, OnDestroy {
87
93
  protected readonly focusMonitor: FocusMonitor;
94
+ /** Size of the icon button. */
95
+ readonly size: i0.InputSignal<KbqIconButtonSize>;
96
+ /**
97
+ * @deprecated Use `size` input instead. Will be removed in the next major release (#DS-5338).
98
+ */
88
99
  readonly small: i0.InputSignal<boolean>;
100
+ /** @docs-private */
101
+ protected readonly isCompact: i0.Signal<boolean>;
89
102
  /** Name of an icon within a @koobiq/icons. */
90
103
  iconName: string;
91
104
  get tabindex(): any;
@@ -104,7 +117,7 @@ declare class KbqIconButton extends KbqIcon implements AfterViewInit, OnDestroy
104
117
  private runFocusMonitor;
105
118
  private stopFocusMonitor;
106
119
  static ɵfac: i0.ɵɵFactoryDeclaration<KbqIconButton, never>;
107
- static ɵcmp: i0.ɵɵComponentDeclaration<KbqIconButton, "[kbq-icon-button]", never, { "small": { "alias": "small"; "required": false; "isSignal": true; }; "iconName": { "alias": "kbq-icon-button"; "required": false; }; "tabindex": { "alias": "tabindex"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, {}, never, ["*"], true, never>;
120
+ static ɵcmp: i0.ɵɵComponentDeclaration<KbqIconButton, "[kbq-icon-button]", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "small": { "alias": "small"; "required": false; "isSignal": true; }; "iconName": { "alias": "kbq-icon-button"; "required": false; }; "tabindex": { "alias": "tabindex"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, {}, never, ["*"], true, never>;
108
121
  static ngAcceptInputType_disabled: unknown;
109
122
  }
110
123
 
@@ -159,4 +172,4 @@ declare class KbqIconModule {
159
172
  }
160
173
 
161
174
  export { KBQ_ICONS_CONFIG, KBQ_ICON_RESOLVER, KbqIcon, KbqIconButton, KbqIconItem, KbqIconModule, KbqIconRegistry, kbqIconsDictProvider, kbqIconsProvider, kbqIconsResolverProvider };
162
- export type { KbqIconOptions, KbqIconResolver, KbqIconsConfig };
175
+ export type { KbqIconButtonSize, KbqIconOptions, KbqIconResolver, KbqIconsConfig };
@@ -116,6 +116,10 @@ declare class KbqInlineEdit {
116
116
  /** @docs-private */
117
117
  protected readonly isEditMode: _angular_core.Signal<boolean>;
118
118
  /** @docs-private */
119
+ protected readonly hasInteractiveContent: _angular_core.WritableSignal<boolean>;
120
+ /** @docs-private */
121
+ protected readonly anchorFocused: _angular_core.WritableSignal<boolean>;
122
+ /** @docs-private */
119
123
  protected readonly tabIndex: _angular_core.Signal<0 | -1>;
120
124
  /** @docs-private */
121
125
  protected readonly placements: typeof PopUpPlacements;
@@ -141,6 +145,7 @@ declare class KbqInlineEdit {
141
145
  * @docs-private
142
146
  */
143
147
  protected onOverlayOutsideClick($event: Event): void;
148
+ private detectInteractiveContent;
144
149
  private isInteractiveElement;
145
150
  /**
146
151
  * Sets up Tab key listeners on region items.
@@ -46,7 +46,8 @@
46
46
  outline: none;
47
47
  }
48
48
 
49
- &.cdk-keyboard-focused {
49
+ &.cdk-keyboard-focused,
50
+ &.kbq-inline-edit_anchor-focused {
50
51
  box-shadow: inset 0 0 0.1px 1px var(--kbq-states-line-focus-theme);
51
52
  border-color: var(--kbq-states-line-focus-theme);
52
53
  }
@@ -125,7 +126,8 @@
125
126
  }
126
127
 
127
128
  &:hover,
128
- &.cdk-keyboard-focused {
129
+ &.cdk-keyboard-focused,
130
+ &.kbq-inline-edit_anchor-focused {
129
131
  .kbq-inline-edit__menu-mask {
130
132
  opacity: 1;
131
133
  }
@@ -176,10 +178,6 @@
176
178
  .kbq-inline-edit__panel {
177
179
  width: 100%;
178
180
 
179
- .kbq-inline-edit__control-container {
180
- border-radius: var(--kbq-size-border-radius);
181
- }
182
-
183
181
  .kbq-inline-edit__action-buttons {
184
182
  position: absolute;
185
183
  left: calc(-1 * var(--kbq-inline-edit-padding-horizontal));
@@ -190,7 +188,9 @@
190
188
  }
191
189
 
192
190
  .kbq-inline-edit__control-container,
193
- .kbq-inline-edit__action-buttons > .kbq-button-icon {
191
+ .kbq-inline-edit__action-button {
194
192
  box-shadow: var(--kbq-shadow-popup);
193
+ background-color: var(--kbq-background-bg);
194
+ border-radius: var(--kbq-size-border-radius);
195
195
  }
196
196
  }
@@ -13,9 +13,9 @@
13
13
  /* @TODO (#DS-3002) */
14
14
  --kbq-link-state-visited-border-bottom: var(--kbq-line-visited-fade, var(--kbq-line-visited));
15
15
  --kbq-link-state-visited-hover-text: var(--kbq-states-foreground-visited-hover);
16
- --kbq-link-state-visited-hover-border-bottomm: var(--kbq-line-visited-fade, var(--kbq-line-visited));
16
+ --kbq-link-state-visited-hover-border-bottom: var(--kbq-line-visited-fade, var(--kbq-line-visited));
17
17
  --kbq-link-state-visited-active-text: var(--kbq-states-foreground-visited-active);
18
- --kbq-link-state-visited-active-border-bottomm: var(--kbq-line-visited-fade, var(--kbq-line-visited));
18
+ --kbq-link-state-visited-active-border-bottom: var(--kbq-line-visited-fade, var(--kbq-line-visited));
19
19
  --kbq-link-state-hover-text: var(--kbq-states-foreground-theme-hover);
20
20
  --kbq-link-state-hover-border-bottom: var(--kbq-line-theme-fade);
21
21
  --kbq-link-state-active-text: var(--kbq-states-foreground-theme-active);
package/list/index.d.ts CHANGED
@@ -54,6 +54,8 @@ declare class KbqListSelection implements AfterContentInit, AfterViewInit, OnDes
54
54
  get noUnselectLast(): boolean;
55
55
  set noUnselectLast(value: boolean);
56
56
  private _noUnselectLast;
57
+ /** When `true`, a repeated Ctrl/Cmd+A deselects all options. Off by default (Ctrl+A only selects). */
58
+ readonly selectAllToggle: i0.InputSignalWithTransform<boolean, unknown>;
57
59
  multipleMode: MultipleMode | null;
58
60
  get multiple(): boolean;
59
61
  readonly horizontal: i0.InputSignalWithTransform<boolean, unknown>;
@@ -77,6 +79,7 @@ declare class KbqListSelection implements AfterContentInit, AfterViewInit, OnDes
77
79
  get optionBlurChanges(): Observable<KbqOptionEvent>;
78
80
  _value: string[] | null;
79
81
  private readonly destroyRef;
82
+ private readonly platform;
80
83
  private optionFocusSubscription;
81
84
  private optionBlurSubscription;
82
85
  constructor();
@@ -124,10 +127,16 @@ declare class KbqListSelection implements AfterContentInit, AfterViewInit, OnDes
124
127
  private isValidIndex;
125
128
  private getOptionIndex;
126
129
  private onChange;
127
- private selectAllOptions;
130
+ /**
131
+ * Function for handling the combination Ctrl + A (select all). By default, the internal handler is used,
132
+ * which toggles the selection of all non-disabled options.
133
+ */
134
+ get selectAllHandler(): (event: KeyboardEvent, list: KbqListSelection) => void;
135
+ set selectAllHandler(fn: (event: KeyboardEvent, list: KbqListSelection) => void);
136
+ private _selectAllHandler;
128
137
  private copyActiveOption;
129
138
  static ɵfac: i0.ɵɵFactoryDeclaration<KbqListSelection, never>;
130
- static ɵcmp: i0.ɵɵComponentDeclaration<KbqListSelection, "kbq-list-selection", ["kbqListSelection"], { "autoSelect": { "alias": "autoSelect"; "required": false; }; "noUnselectLast": { "alias": "noUnselectLast"; "required": false; }; "horizontal": { "alias": "horizontal"; "required": false; "isSignal": true; }; "tabIndex": { "alias": "tabIndex"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "compareWith": { "alias": "compareWith"; "required": false; "isSignal": true; }; }, { "onSelectAll": "onSelectAll"; "onCopy": "onCopy"; "selectionChange": "selectionChange"; }, ["options"], ["*"], true, never>;
139
+ static ɵcmp: i0.ɵɵComponentDeclaration<KbqListSelection, "kbq-list-selection", ["kbqListSelection"], { "autoSelect": { "alias": "autoSelect"; "required": false; }; "noUnselectLast": { "alias": "noUnselectLast"; "required": false; }; "selectAllToggle": { "alias": "selectAllToggle"; "required": false; "isSignal": true; }; "horizontal": { "alias": "horizontal"; "required": false; "isSignal": true; }; "tabIndex": { "alias": "tabIndex"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "compareWith": { "alias": "compareWith"; "required": false; "isSignal": true; }; "selectAllHandler": { "alias": "selectAllHandler"; "required": false; }; }, { "onSelectAll": "onSelectAll"; "onCopy": "onCopy"; "selectionChange": "selectionChange"; }, ["options"], ["*"], true, never>;
131
140
  static ngAcceptInputType_disabled: unknown;
132
141
  }
133
142
  declare class KbqListOptionCaption {
@@ -2,7 +2,7 @@
2
2
  --kbq-loader-overlay-size-big-overlay-padding-horizontal: var(--kbq-size-3xl);
3
3
  --kbq-loader-overlay-size-big-loader-margin-bottom: var(--kbq-size-xxl);
4
4
  --kbq-loader-overlay-size-big-content-content-gap-vertical: var(--kbq-size-l);
5
- --kbq-loader-overlay-size-normal-overlay-padding-horizontal: var(--kbq-sizeа-3xl);
5
+ --kbq-loader-overlay-size-normal-overlay-padding-horizontal: var(--kbq-size-3xl);
6
6
  --kbq-loader-overlay-size-normal-loader-margin-bottom: var(--kbq-size-xxl);
7
7
  --kbq-loader-overlay-size-normal-content-content-gap-vertical: var(--kbq-size-xxs);
8
8
  --kbq-loader-overlay-size-compact-overlay-padding-horizontal: var(--kbq-size-3xl);
@@ -40,13 +40,13 @@ $animation-duration-base: 0.3s;
40
40
  @mixin zoom-motion($className, $keyframeName, $duration: $animation-duration-base) {
41
41
  @include _make-motion($className, $keyframeName, $duration);
42
42
 
43
- .#{className}-enter,
44
- .#{className}-appear {
43
+ .#{$className}-enter,
44
+ .#{$className}-appear {
45
45
  transform: translate(0, -25%);
46
46
  animation-timing-function: $ease-out-circ;
47
47
  }
48
48
 
49
- .#{className}-leave {
49
+ .#{$className}-leave {
50
50
  transform: translate(0, 0);
51
51
  animation-timing-function: $ease-in-out-circ;
52
52
  }
@@ -55,13 +55,13 @@ $animation-duration-base: 0.3s;
55
55
  @mixin fade-motion($className, $keyframeName) {
56
56
  @include _make-motion($className, $keyframeName);
57
57
 
58
- .#{className}-enter,
59
- .#{className}-appear {
58
+ .#{$className}-enter,
59
+ .#{$className}-appear {
60
60
  opacity: 0;
61
61
  animation-timing-function: ease-out;
62
62
  }
63
63
 
64
- .#{className}-leave {
64
+ .#{$className}-leave {
65
65
  animation-timing-function: ease-out;
66
66
  }
67
67
  }
@@ -18,6 +18,10 @@
18
18
  .kbq-modal-content {
19
19
  color: var(--kbq-modal-content-text-color);
20
20
  }
21
+
22
+ .kbq-modal-caption {
23
+ color: var(--kbq-foreground-contrast-secondary);
24
+ }
21
25
  }
22
26
 
23
27
  .kbq-modal-mask {
@@ -30,6 +34,7 @@
30
34
  @include kbq-typography-level-to-styles-css-variables(typography, title);
31
35
  }
32
36
 
37
+ .kbq-modal-caption,
33
38
  .kbq-modal-body {
34
39
  @include kbq-typography-level-to-styles-css-variables(typography, text-normal);
35
40
  }