@koobiq/components 17.0.2 → 17.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 (66) hide show
  1. package/badge/badge.component.scss +2 -2
  2. package/button/button.scss +2 -6
  3. package/button-toggle/button-toggle.scss +8 -6
  4. package/checkbox/checkbox.scss +9 -18
  5. package/code-block/_code-block-theme.scss +7 -16
  6. package/code-block/actionbar.component.d.ts +1 -2
  7. package/code-block/actionbar.component.scss +24 -13
  8. package/code-block/code-block.component.d.ts +16 -4
  9. package/code-block/code-block.scss +14 -10
  10. package/core/styles/common/_groups.scss +2 -2
  11. package/core/styles/common/_select.scss +23 -60
  12. package/core/styles/common/_tokens.scss +52 -0
  13. package/core/styles/theming/_scrollbar-theme.scss +8 -19
  14. package/datepicker/_datepicker-theme.scss +1 -0
  15. package/datepicker/calendar-header.component.d.ts +10 -6
  16. package/datepicker/calendar.scss +2 -3
  17. package/datepicker/datepicker-input.directive.d.ts +10 -0
  18. package/esm2022/button-toggle/button-toggle.component.mjs +2 -2
  19. package/esm2022/code-block/actionbar.component.mjs +4 -7
  20. package/esm2022/code-block/code-block.component.mjs +69 -20
  21. package/esm2022/core/version.mjs +2 -2
  22. package/esm2022/datepicker/calendar-header.component.mjs +32 -9
  23. package/esm2022/datepicker/datepicker-input.directive.mjs +101 -21
  24. package/esm2022/file-upload/multiple-file-upload.component.mjs +2 -2
  25. package/esm2022/file-upload/single-file-upload.component.mjs +2 -2
  26. package/esm2022/navbar/vertical-navbar.component.mjs +8 -4
  27. package/esm2022/radio/radio.component.mjs +2 -2
  28. package/esm2022/toast/toast.component.mjs +7 -6
  29. package/esm2022/toast/toast.module.mjs +5 -1
  30. package/esm2022/toggle/toggle.component.mjs +3 -3
  31. package/fesm2022/koobiq-components-button-toggle.mjs +2 -2
  32. package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
  33. package/fesm2022/koobiq-components-code-block.mjs +71 -25
  34. package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
  35. package/fesm2022/koobiq-components-core.mjs +1 -1
  36. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  37. package/fesm2022/koobiq-components-datepicker.mjs +131 -28
  38. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  39. package/fesm2022/koobiq-components-file-upload.mjs +4 -4
  40. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  41. package/fesm2022/koobiq-components-navbar.mjs +7 -3
  42. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  43. package/fesm2022/koobiq-components-radio.mjs +2 -2
  44. package/fesm2022/koobiq-components-radio.mjs.map +1 -1
  45. package/fesm2022/koobiq-components-toast.mjs +8 -3
  46. package/fesm2022/koobiq-components-toast.mjs.map +1 -1
  47. package/fesm2022/koobiq-components-toggle.mjs +2 -2
  48. package/fesm2022/koobiq-components-toggle.mjs.map +1 -1
  49. package/file-upload/multiple-file-upload.component.scss +16 -33
  50. package/file-upload/single-file-upload.component.scss +8 -6
  51. package/form-field/form-field.scss +8 -14
  52. package/input/input.scss +4 -11
  53. package/navbar/vertical-navbar.component.d.ts +2 -1
  54. package/navbar/vertical-navbar.scss +9 -4
  55. package/package.json +4 -4
  56. package/prebuilt-themes/dark-theme.css +1 -1
  57. package/prebuilt-themes/light-theme.css +1 -1
  58. package/radio/radio.scss +9 -24
  59. package/schematics/ng-add/index.js +2 -2
  60. package/tabs/_tabs-common.scss +6 -14
  61. package/tags/tag-list.scss +2 -15
  62. package/toast/toast.module.d.ts +5 -4
  63. package/toggle/_toggle-theme.scss +5 -2
  64. package/toggle/toggle.scss +2 -16
  65. package/tooltip/tooltip.scss +1 -1
  66. package/tree/tree-option.scss +9 -20
@@ -8,7 +8,7 @@
8
8
  flex-direction: row;
9
9
  justify-content: flex-start;
10
10
  align-items: center;
11
- height: var(--kbq-badge-size-normal-height, map.get($tokens, badge-size-normal-height));
11
+ height: kbq-css-variable(badge-size-normal-height);
12
12
  text-align: center;
13
13
  white-space: nowrap;
14
14
 
@@ -37,7 +37,7 @@
37
37
  }
38
38
 
39
39
  &.kbq-badge_compact {
40
- height: var(--kbq-badge-size-compact-height, map.get($tokens, badge-size-compact-height));
40
+ height: kbq-css-variable(badge-size-compact-height);
41
41
 
42
42
  padding-right: kbq-css-variable(badge-size-compact-horizontal-padding);
43
43
  padding-left: kbq-css-variable(badge-size-compact-horizontal-padding);
@@ -12,12 +12,8 @@ $tokens: meta.module-variables(tokens) !default;
12
12
  @extend %kbq-button-base;
13
13
 
14
14
  // base padding + compensation (4px) - border-width (2px)
15
- padding-left: calc(
16
- var(--kbq-button-size-horizontal-padding, map.get($tokens, button-size-horizontal-padding)) + 4px
17
- );
18
- padding-right: calc(
19
- var(--kbq-button-size-horizontal-padding, map.get($tokens, button-size-horizontal-padding)) + 4px
20
- );
15
+ padding-left: kbq-sum-series-css-variables([button-size-horizontal-padding, 4px]);
16
+ padding-right: kbq-sum-series-css-variables([button-size-horizontal-padding, 4px]);
21
17
 
22
18
  &.kbq-button-icon_left {
23
19
  padding-left: kbq-css-variable(button-size-horizontal-padding);
@@ -29,18 +29,20 @@ $tokens: meta.module-variables(tokens) !default;
29
29
 
30
30
  height: kbq-css-variable(button-toggle-size-item-height);
31
31
 
32
- $padding-vertical: map.get($tokens, button-toggle-size-item-padding-vertical);
33
- $padding-horizontal: map.get($tokens, button-toggle-size-item-padding-horizontal);
34
- $outline-width: map.get($tokens, button-toggle-size-item-focus-outline-width);
35
-
36
32
  border-radius: kbq-css-variable(button-toggle-size-item-border-radius);
37
33
 
38
34
  > .kbq-button,
39
35
  > .kbq-button-icon {
40
36
  border-radius: kbq-css-variable(button-toggle-size-item-border-radius);
41
37
 
42
- padding: calc(var(--kbq-button-toggle-size-item-padding-vertical, $padding-vertical) - $outline-width)
43
- calc(var(--kbq-button-toggle-size-item-padding-horizontal, $padding-horizontal) - $outline-width);
38
+ padding: kbq-difference-series-css-variables(
39
+ [ button-toggle-size-item-padding-vertical,
40
+ button-toggle-size-item-focus-outline-width]
41
+ )
42
+ kbq-difference-series-css-variables(
43
+ [ button-toggle-size-item-padding-horizontal,
44
+ button-toggle-size-item-focus-outline-width]
45
+ );
44
46
 
45
47
  & .kbq-button-wrapper {
46
48
  width: 100%;
@@ -47,12 +47,9 @@ $tokens: meta.module-variables(tokens) !default;
47
47
 
48
48
  padding-bottom: kbq-css-variable(checkbox-size-normal-paddding-bottom);
49
49
 
50
- padding-left: calc(
51
- var(--kbq-checkbox-size-normal-width, map.get($tokens, checkbox-size-normal-width)) +
52
- var(
53
- --kbq-checkbox-size-normal-horizontal-content-padding,
54
- map.get($tokens, checkbox-size-normal-horizontal-content-padding)
55
- )
50
+ padding-left: kbq-sum-series-css-variables(
51
+ [checkbox-size-normal-width,
52
+ checkbox-size-normal-horizontal-content-padding]
56
53
  );
57
54
 
58
55
  vertical-align: top;
@@ -110,12 +107,9 @@ $tokens: meta.module-variables(tokens) !default;
110
107
 
111
108
  .kbq-checkbox.kbq-checkbox_big {
112
109
  & .kbq-checkbox__layout {
113
- padding-left: calc(
114
- var(--kbq-checkbox-size-normal-width, map.get($tokens, checkbox-size-normal-width)) +
115
- var(
116
- --kbq-checkbox-size-normal-horizontal-content-padding,
117
- map.get($tokens, checkbox-size-normal-horizontal-content-padding)
118
- )
110
+ padding-left: kbq-sum-series-css-variables(
111
+ [ checkbox-size-normal-width,
112
+ checkbox-size-normal-horizontal-content-padding]
119
113
  );
120
114
  }
121
115
 
@@ -154,12 +148,9 @@ $tokens: meta.module-variables(tokens) !default;
154
148
  .kbq-checkbox_label-before {
155
149
  .kbq-checkbox__layout {
156
150
  padding-left: 0;
157
- padding-right: calc(
158
- var(--kbq-checkbox-size-normal-width, map.get($tokens, checkbox-size-normal-width)) +
159
- var(
160
- --kbq-checkbox-size-normal-horizontal-content-padding,
161
- map.get($tokens, checkbox-size-normal-horizontal-content-padding)
162
- )
151
+ padding-right: kbq-sum-series-css-variables(
152
+ [ checkbox-size-normal-width,
153
+ checkbox-size-normal-horizontal-content-padding]
163
154
  );
164
155
  }
165
156
 
@@ -28,6 +28,12 @@
28
28
 
29
29
  & .kbq-code-block-actionbar {
30
30
  background: kbq-css-variable(#{$base}-actionbar-background, map.get($style, actionbar, background));
31
+
32
+ &.kbq-actionbar-block_floating {
33
+ .kbq-actionbar-block__button-stack {
34
+ background: kbq-css-variable(#{$base}-actionbar-background, map.get($style, actionbar, background));
35
+ }
36
+ }
31
37
  }
32
38
 
33
39
  &.kbq-code-block_header-with-shadow {
@@ -38,8 +44,6 @@
38
44
 
39
45
  &.kbq-code-block_no-header {
40
46
  & .kbq-code-block__fade-gradient {
41
- display: block;
42
-
43
47
  background: kbq-css-variable(#{$base}-actionbar-fade-gradient, map.get($style, actionbar, fade-gradient));
44
48
  }
45
49
  }
@@ -361,7 +365,7 @@
361
365
  .kbq-tab-group.kbq-focused {
362
366
  // paint focus border from the top since because of border constraints
363
367
  .kbq-tab-header {
364
- box-shadow: 0 3px 0 -1px kbq-css-variable(states-focused-color, map.get($theme, states, focused-color));
368
+ box-shadow: 0 2px 0 -1px kbq-css-variable(states-focused-color, map.get($theme, states, focused-color));
365
369
  }
366
370
 
367
371
  .kbq-tab-body__wrapper {
@@ -371,19 +375,6 @@
371
375
  }
372
376
  }
373
377
  }
374
-
375
- .kbq-code-block-actionbar {
376
- .kbq-code-block-actionbar_less-contrast {
377
- background-color: kbq-css-variable(
378
- code-block-actionbar-bg-less-contrast,
379
- map.get($code-block, actionbar, bg-less-contrast)
380
- );
381
- }
382
-
383
- &.kbq-actionbar-block_floating {
384
- background-color: kbq-css-variable(code-block-actionbar-bg, map.get($code-block, actionbar, bg));
385
- }
386
- }
387
378
  }
388
379
 
389
380
  @mixin kbq-code-block-typography($config) {
@@ -6,7 +6,6 @@ export declare class KbqActionBarComponent implements AfterViewInit {
6
6
  copyTooltip: KbqTooltipTrigger;
7
7
  config: KbqCodeBlockConfiguration;
8
8
  codeFiles: KbqCodeFile[];
9
- lessContrast: boolean;
10
9
  selectedTabIndex: number;
11
10
  multiLine: boolean;
12
11
  softWrap: boolean;
@@ -19,5 +18,5 @@ export declare class KbqActionBarComponent implements AfterViewInit {
19
18
  ngAfterViewInit(): void;
20
19
  onCopy(): void;
21
20
  static ɵfac: i0.ɵɵFactoryDeclaration<KbqActionBarComponent, never>;
22
- static ɵcmp: i0.ɵɵComponentDeclaration<KbqActionBarComponent, "kbq-actionbar-block", never, { "config": { "alias": "config"; "required": false; }; "codeFiles": { "alias": "codeFiles"; "required": false; }; "lessContrast": { "alias": "lessContrast"; "required": false; }; "selectedTabIndex": { "alias": "selectedTabIndex"; "required": false; }; "multiLine": { "alias": "multiLine"; "required": false; }; "softWrap": { "alias": "softWrap"; "required": false; }; "canLoad": { "alias": "canLoad"; "required": false; }; }, { "toggleSoftWrap": "toggleSoftWrap"; "downloadCode": "downloadCode"; "copyCode": "copyCode"; "openExternalSystem": "openExternalSystem"; }, never, never, false, never>;
21
+ static ɵcmp: i0.ɵɵComponentDeclaration<KbqActionBarComponent, "kbq-actionbar-block", never, { "config": { "alias": "config"; "required": false; }; "codeFiles": { "alias": "codeFiles"; "required": false; }; "selectedTabIndex": { "alias": "selectedTabIndex"; "required": false; }; "multiLine": { "alias": "multiLine"; "required": false; }; "softWrap": { "alias": "softWrap"; "required": false; }; "canLoad": { "alias": "canLoad"; "required": false; }; }, { "toggleSoftWrap": "toggleSoftWrap"; "downloadCode": "downloadCode"; "copyCode": "copyCode"; "openExternalSystem": "openExternalSystem"; }, never, never, false, never>;
23
22
  }
@@ -4,6 +4,8 @@
4
4
  @use '../core/styles/common/tokens' as *;
5
5
 
6
6
  $tokens: meta.module-variables(tokens) !default;
7
+ $actionbar-indents: kbq-css-variable(code-block-size-actionbar-padding-vertical)
8
+ kbq-css-variable(code-block-size-actionbar-padding-horizontal);
7
9
 
8
10
  .kbq-code-block-actionbar {
9
11
  display: flex;
@@ -12,25 +14,34 @@ $tokens: meta.module-variables(tokens) !default;
12
14
 
13
15
  position: absolute;
14
16
 
15
- top: 0;
17
+ // position to top to the height of tab-header
18
+ top: -48px;
16
19
  right: 0;
17
20
 
18
- margin: kbq-css-variable(code-block-size-actionbar-padding-vertical)
19
- kbq-css-variable(code-block-size-actionbar-padding-horizontal);
21
+ margin: $actionbar-indents;
20
22
 
21
- gap: kbq-css-variable(code-block-size-actionbar-content-gap-horizontal);
23
+ .kbq-actionbar-block__button-stack {
24
+ gap: kbq-css-variable(code-block-size-actionbar-content-gap-horizontal);
25
+ }
22
26
 
23
- & .kbq-code-block__fade-gradient {
27
+ .kbq-code-block__fade-gradient {
24
28
  display: none;
25
29
 
26
30
  width: kbq-css-variable(code-block-size-actionbar-fade-gradient-width);
27
- height: 32px;
28
-
29
- margin-top: calc(
30
- var(
31
- --kbq-code-block-size-actionbar-padding-vertical,
32
- map.get($tokens, code-block-size-actionbar-padding-vertical)
33
- ) * -1
34
- );
31
+ }
32
+
33
+ &.kbq-actionbar-block_floating {
34
+ top: 0;
35
+ margin: unset;
36
+ background: transparent !important;
37
+
38
+ .kbq-code-block__fade-gradient {
39
+ display: block;
40
+ align-self: stretch;
41
+ }
42
+
43
+ .kbq-actionbar-block__button-stack {
44
+ padding: $actionbar-indents;
45
+ }
35
46
  }
36
47
  }
@@ -45,11 +45,13 @@ export declare class KbqCodeBlockComponent implements AfterViewInit, OnDestroy {
45
45
  config: KbqCodeBlockConfiguration;
46
46
  tabGroup: KbqTabGroup;
47
47
  lineNumbers: boolean;
48
- codeFiles: KbqCodeFile[];
49
48
  filled: boolean;
50
49
  maxHeight: number;
51
50
  softWrap: boolean;
52
51
  canLoad: boolean;
52
+ get codeFiles(): KbqCodeFile[];
53
+ set codeFiles(files: KbqCodeFile[]);
54
+ private _codeFiles;
53
55
  get noHeader(): any;
54
56
  get singleFile(): boolean;
55
57
  selectedTabIndex: number;
@@ -57,12 +59,17 @@ export declare class KbqCodeBlockComponent implements AfterViewInit, OnDestroy {
57
59
  viewAll: boolean;
58
60
  multiLine: boolean;
59
61
  isTopOverflow: boolean;
60
- hasFocus: boolean;
62
+ hasKeyboardFocus: boolean;
63
+ /**
64
+ * @docs-private
65
+ */
66
+ actionbarHidden?: boolean;
61
67
  readonly resizeStream: Subject<Event>;
62
68
  readonly currentCodeBlock: Subject<HTMLElement>;
63
69
  private readonly resizeDebounceInterval;
64
70
  private resizeSubscription;
65
71
  private codeBlockSubscription;
72
+ private hoverSubscription;
66
73
  constructor(elementRef: ElementRef, changeDetectorRef: ChangeDetectorRef, clipboard: Clipboard, renderer: Renderer2, focusMonitor: FocusMonitor, config: KbqCodeBlockConfiguration);
67
74
  ngAfterViewInit(): void;
68
75
  ngOnDestroy(): void;
@@ -78,9 +85,14 @@ export declare class KbqCodeBlockComponent implements AfterViewInit, OnDestroy {
78
85
  checkOverflow(currentCodeContentElement: HTMLElement): void;
79
86
  onShowMoreClick(currentCodeContentElement: HTMLPreElement): void;
80
87
  canShowFocus(currentCodeContent: HTMLPreElement): boolean;
88
+ onEnter(currentCodeBlock: HTMLPreElement): void;
89
+ /** @docs-private */
90
+ showActionBarIfNecessary(): void;
91
+ /** @docs-private */
92
+ hideActionBarIfNoHeader(event?: FocusEvent | null): void;
81
93
  private updateMultiline;
82
94
  private getFullFileName;
83
- onEnter(currentCodeBlock: HTMLPreElement): void;
95
+ private subscribeToHover;
84
96
  static ɵfac: i0.ɵɵFactoryDeclaration<KbqCodeBlockComponent, [null, null, null, null, null, { optional: true; }]>;
85
- static ɵcmp: i0.ɵɵComponentDeclaration<KbqCodeBlockComponent, "kbq-code-block", ["kbqCodeBlock"], { "lineNumbers": { "alias": "lineNumbers"; "required": false; }; "codeFiles": { "alias": "codeFiles"; "required": false; }; "filled": { "alias": "filled"; "required": false; }; "maxHeight": { "alias": "maxHeight"; "required": false; }; "softWrap": { "alias": "softWrap"; "required": false; }; "canLoad": { "alias": "canLoad"; "required": false; }; }, {}, never, never, false, never>;
97
+ static ɵcmp: i0.ɵɵComponentDeclaration<KbqCodeBlockComponent, "kbq-code-block", ["kbqCodeBlock"], { "lineNumbers": { "alias": "lineNumbers"; "required": false; }; "filled": { "alias": "filled"; "required": false; }; "maxHeight": { "alias": "maxHeight"; "required": false; }; "softWrap": { "alias": "softWrap"; "required": false; }; "canLoad": { "alias": "canLoad"; "required": false; }; "codeFiles": { "alias": "codeFiles"; "required": false; }; }, {}, never, never, false, never>;
86
98
  }
@@ -27,11 +27,8 @@ $border-width: kbq-css-variable(code-block-size-container-border-width);
27
27
  // 4 buttons + margin
28
28
  $buttons-margin: calc(32 * 4) + 24px;
29
29
 
30
- padding: kbq-css-variable(code-block-size-header-padding-vertical)
31
- calc(
32
- var(--kbq-code-block-size-header-padding-right, map.get($tokens, code-block-size-header-padding-right)) +
33
- $buttons-margin
34
- )
30
+ padding: calc(kbq-css-variable(code-block-size-header-padding-vertical) - $border-width)
31
+ kbq-sum-series-css-variables([code-block-size-header-padding-right, $buttons-margin])
35
32
  kbq-css-variable(code-block-size-header-padding-vertical)
36
33
  kbq-css-variable(code-block-size-header-padding-left);
37
34
 
@@ -47,6 +44,14 @@ $border-width: kbq-css-variable(code-block-size-container-border-width);
47
44
  overflow-x: scroll;
48
45
  }
49
46
  }
47
+
48
+ &:has(.kbq-code-block__show-more_collapsed) {
49
+ .kbq-code-block__code {
50
+ & > code {
51
+ overflow-x: hidden;
52
+ }
53
+ }
54
+ }
50
55
  }
51
56
 
52
57
  .kbq-code-block__code {
@@ -87,6 +92,8 @@ $border-width: kbq-css-variable(code-block-size-container-border-width);
87
92
  &:not(.kbq-code-block_no-header) {
88
93
  .kbq-tab-body__wrapper {
89
94
  border-top-width: 0;
95
+ // actionbar can be visible when positioned in the header
96
+ overflow: visible;
90
97
  }
91
98
  }
92
99
 
@@ -126,8 +133,6 @@ $border-width: kbq-css-variable(code-block-size-container-border-width);
126
133
 
127
134
  .kbq-tab-body__wrapper {
128
135
  flex-direction: column;
129
- position: unset;
130
-
131
136
  border-width: $border-width;
132
137
  border-style: solid;
133
138
  border-radius: 0 0 $border-radius $border-radius;
@@ -171,12 +176,11 @@ $border-width: kbq-css-variable(code-block-size-container-border-width);
171
176
  .kbq-code-block__show-more {
172
177
  display: flex;
173
178
  justify-content: center;
174
- overflow: hidden;
175
179
 
176
- width: calc(100% - $border-width * 2);
180
+ width: 100%;
177
181
 
178
182
  position: absolute;
179
- bottom: $border-width;
183
+ bottom: 0;
180
184
  border-radius: $border-radius;
181
185
 
182
186
  &.kbq-code-block__show-more_collapsed {
@@ -45,7 +45,7 @@ $tokens: meta.module-variables(tokens) !default;
45
45
  }
46
46
 
47
47
  .kbq-group-item + .kbq-group-item {
48
- margin-left: calc(-1 * var(--kbq-button-size-border-width, #{map.get($tokens, button-size-border-width)}));
48
+ margin-left: calc(-1 * #{kbq-css-variable(button-size-border-width)});
49
49
  }
50
50
 
51
51
  & > .kbq-group-item:first-child:not(:last-child) {
@@ -108,6 +108,6 @@ $tokens: meta.module-variables(tokens) !default;
108
108
  }
109
109
 
110
110
  .kbq-group-item + .kbq-group-item {
111
- margin-top: calc(-1 * var(--kbq-button-size-border-width, #{map.get($tokens, button-size-border-width)}));
111
+ margin-top: calc(-1 * #{kbq-css-variable(button-size-border-width)});
112
112
  }
113
113
  }
@@ -33,9 +33,6 @@ $tokens: meta.module-variables(tokens) !default;
33
33
  }
34
34
  }
35
35
 
36
- $border-width: map.get($tokens, form-field-size-border-width);
37
- $height: map.get($tokens, form-field-size-height);
38
-
39
36
  .kbq-select__trigger {
40
37
  display: flex;
41
38
  box-sizing: border-box;
@@ -43,71 +40,37 @@ $tokens: meta.module-variables(tokens) !default;
43
40
 
44
41
  cursor: pointer;
45
42
 
46
- height: calc(
47
- var(--kbq-form-field-size-height, $height) - (var(--kbq-form-field-size-border-width, $border-width) * 2)
43
+ height: kbq-difference-series-css-variables(
44
+ [form-field-size-height,
45
+ calc(kbq-css-variable(form-field-size-border-width) * 2)]
48
46
  );
49
47
  }
50
48
 
51
49
  .kbq-select__trigger.kbq-select__trigger_single,
52
50
  .kbq-select__trigger.kbq-select__trigger_multiple.kbq-select__trigger_empty {
53
51
  & .kbq-select__matcher {
54
- $padding-vertical: map.get($tokens, select-size-single-padding-vertical);
55
-
56
- padding: calc(
57
- var(--kbq-select-size-single-padding-vertical, $padding-vertical) - var(
58
- --kbq-form-field-size-border-width,
59
- $border-width
60
- )
61
- )
62
- calc(
63
- var(--kbq-select-size-single-padding-right, map.get($tokens, select-size-single-padding-right)) - var(
64
- --kbq-form-field-size-border-width,
65
- $border-width
66
- )
67
- )
68
- calc(
69
- var(--kbq-select-size-single-padding-vertical, $padding-vertical) - var(
70
- --kbq-form-field-size-border-width,
71
- $border-width
72
- )
52
+ padding: kbq-difference-series-css-variables(
53
+ [select-size-single-padding-vertical,
54
+ form-field-size-border-width]
73
55
  )
74
- calc(
75
- var(--kbq-select-size-single-padding-left, map.get($tokens, select-size-single-padding-left)) - var(
76
- --kbq-form-field-size-border-width,
77
- $border-width
78
- )
79
- );
56
+ kbq-difference-series-css-variables([select-size-single-padding-right, form-field-size-border-width])
57
+ kbq-difference-series-css-variables([select-size-single-padding-vertical, form-field-size-border-width])
58
+ kbq-difference-series-css-variables([select-size-single-padding-left, form-field-size-border-width]);
80
59
  }
81
60
  }
82
61
 
83
62
  .kbq-select__trigger.kbq-select__trigger_multiple:not(.kbq-select__trigger_empty) {
84
63
  & .kbq-select__matcher {
85
- $padding-vertical: map.get($tokens, select-size-multiple-padding-vertical);
86
-
87
- padding: calc(
88
- var(--kbq-select-size-multiple-padding-vertical, $padding-vertical) - var(
89
- --kbq-form-field-size-border-width,
90
- $border-width
91
- )
64
+ padding: kbq-difference-series-css-variables(
65
+ [select-size-multiple-padding-vertical,
66
+ form-field-size-border-width]
92
67
  )
93
- calc(
94
- var(--kbq-select-size-multiple-padding-right, map.get($tokens, select-size-multiple-padding-right)) - var(
95
- --kbq-form-field-size-border-width,
96
- $border-width
97
- )
68
+ kbq-difference-series-css-variables([select-size-multiple-padding-right, form-field-size-border-width])
69
+ kbq-difference-series-css-variables(
70
+ [select-size-multiple-padding-vertical,
71
+ form-field-size-border-width]
98
72
  )
99
- calc(
100
- var(--kbq-select-size-multiple-padding-vertical, $padding-vertical) - var(
101
- --kbq-form-field-size-border-width,
102
- $border-width
103
- )
104
- )
105
- calc(
106
- var(--kbq-select-size-multiple-padding-left, map.get($tokens, select-size-multiple-padding-left)) - var(
107
- --kbq-form-field-size-border-width,
108
- $border-width
109
- )
110
- );
73
+ kbq-difference-series-css-variables([select-size-multiple-padding-left, form-field-size-border-width]);
111
74
 
112
75
  .kbq-select__match-container {
113
76
  display: flex;
@@ -118,14 +81,14 @@ $tokens: meta.module-variables(tokens) !default;
118
81
  flex-wrap: wrap;
119
82
  overflow: hidden;
120
83
 
121
- height: calc(
122
- var(--kbq-form-field-size-height, $height) -
123
- (var(--kbq-select-size-multiple-padding-vertical, $padding-vertical) * 2)
84
+ height: kbq-difference-series-css-variables(
85
+ [form-field-size-height,
86
+ calc(kbq-css-variable(select-size-multiple-padding-vertical) * 2)]
124
87
  );
125
88
 
126
- max-height: calc(
127
- var(--kbq-form-field-size-height, $height) -
128
- (var(--kbq-select-size-multiple-padding-vertical, $padding-vertical) * 2)
89
+ max-height: kbq-difference-series-css-variables(
90
+ [form-field-size-height,
91
+ calc(kbq-css-variable(select-size-multiple-padding-vertical) * 2)]
129
92
  );
130
93
 
131
94
  gap: kbq-css-variable(select-size-multiple-content-gap);
@@ -45,3 +45,55 @@ $tokens: meta.module-variables(tokens) !default;
45
45
  @include kbq-css-font-variable($component, $property, font-feature-settings, '');
46
46
  @include kbq-css-font-variable($component, $property, letter-spacing, '');
47
47
  }
48
+
49
+ @function kbq-sum-series-css-variables($variables) {
50
+ $sum: 0;
51
+ @each $variable in $variables {
52
+ @if ($sum == 0) {
53
+ @if (meta.type-of($variable) == number or meta.type-of($variable) == calculation) {
54
+ $sum: $variable;
55
+ } @else {
56
+ $sum: kbq-css-variable($variable);
57
+ }
58
+ } @else {
59
+ @if (meta.type-of($variable) == number or meta.type-of($variable) == calculation) {
60
+ $sum: calc($sum + $variable);
61
+ } @else {
62
+ $sum: calc($sum + kbq-css-variable($variable));
63
+ }
64
+ }
65
+ }
66
+ @return $sum;
67
+ }
68
+
69
+ @function kbq-difference-series-css-variables($variables) {
70
+ $difference: 0;
71
+ @each $variable in $variables {
72
+ @if ($difference == 0) {
73
+ @if (meta.type-of($variable) == number or meta.type-of($variable) == calculation) {
74
+ $difference: $variable;
75
+ } @else {
76
+ $difference: kbq-css-variable($variable);
77
+ }
78
+ } @else {
79
+ @if (meta.type-of($variable) == number or meta.type-of($variable) == calculation) {
80
+ $difference: calc($difference - $variable);
81
+ } @else {
82
+ $difference: calc($difference - kbq-css-variable($variable));
83
+ }
84
+ }
85
+ }
86
+ @return $difference;
87
+ }
88
+
89
+ @function kbq-css-half-difference($outer, $inner, $border: null) {
90
+ @if $border {
91
+ @if (meta.type-of($border) == number or meta.type-of($border) == calculation) {
92
+ @return calc((kbq-css-variable($outer) - kbq-css-variable($inner) - $border * 2) / 2);
93
+ } @else {
94
+ @return calc((kbq-css-variable($outer) - kbq-css-variable($inner) - kbq-css-variable($border * 2)) / 2);
95
+ }
96
+ } @else {
97
+ @return calc((kbq-css-variable($outer) - kbq-css-variable($inner)) / 2);
98
+ }
99
+ }
@@ -3,18 +3,10 @@
3
3
  @use 'sass:meta';
4
4
  @use 'sass:map';
5
5
 
6
+ @use '../common/tokens' as *;
6
7
  @use '../functions/string' as *;
7
8
 
8
9
  @mixin kbq-scrollbar($tokens) {
9
- $border-width: calc(
10
- (
11
- var(--kbq-scrollbar-size-track-dimension, map.get($tokens, scrollbar-size-track-dimension)) - var(
12
- --kbq-scrollbar-size-thumb-width,
13
- map.get($tokens, scrollbar-size-thumb-width)
14
- )
15
- ) / 2
16
- );
17
-
18
10
  //firefox
19
11
  @supports not selector(::-webkit-scrollbar) {
20
12
  scrollbar-width: thin;
@@ -26,32 +18,29 @@
26
18
  cursor: default;
27
19
 
28
20
  &:vertical {
29
- width: var(--kbq-scrollbar-size-track-dimension, map.get($tokens, scrollbar-size-track-dimension));
21
+ width: kbq-css-variable(scrollbar-size-track-dimension);
30
22
  }
31
23
 
32
24
  &:horizontal {
33
- height: var(--kbq-scrollbar-size-track-dimension, map.get($tokens, scrollbar-size-track-dimension));
25
+ height: kbq-css-variable(scrollbar-size-track-dimension);
34
26
  }
35
27
  }
36
28
 
37
29
  &::-webkit-scrollbar-thumb,
38
30
  ::-webkit-scrollbar-thumb {
39
- width: var(--kbq-scrollbar-size-thumb-width, map.get($tokens, scrollbar-size-thumb-width));
31
+ width: kbq-css-variable(scrollbar-size-thumb-width);
40
32
  border-style: solid;
41
- border-width: $border-width;
33
+ border-width: kbq-css-half-difference(scrollbar-size-track-dimension, scrollbar-size-thumb-width);
42
34
 
43
- border-radius: var(
44
- --kbq-scrollbar-size-thumb-inset-border-radius,
45
- map.get($tokens, scrollbar-size-thumb-border-radius)
46
- );
35
+ border-radius: kbq-css-variable(scrollbar-size-thumb-border-radius);
47
36
 
48
37
  // these props are used to set the user-friendly thumb for long content.
49
38
  &:vertical {
50
- min-height: var(--kbq-scrollbar-size-thumb-min-size, map.get($tokens, scrollbar-size-thumb-min-size));
39
+ min-height: kbq-css-variable(scrollbar-size-thumb-min-size);
51
40
  }
52
41
 
53
42
  &:horizontal {
54
- min-width: var(--kbq-scrollbar-size-thumb-min-size, map.get($tokens, scrollbar-size-thumb-min-size));
43
+ min-width: kbq-css-variable(scrollbar-size-thumb-min-size);
55
44
  }
56
45
  }
57
46
 
@@ -66,6 +66,7 @@
66
66
  }
67
67
 
68
68
  &.kbq-disabled {
69
+ color: kbq-css-variable(states-foreground-disabled, map.get($theme, states, foreground, disabled));
69
70
  background: kbq-css-variable(
70
71
  datepicker-cell-disabled-background,
71
72
  map.get($datepicker, cell, disabled, background)
@@ -1,14 +1,16 @@
1
1
  import { AfterContentInit, EventEmitter } from '@angular/core';
2
2
  import { DateAdapter } from '@koobiq/components/core';
3
3
  import * as i0 from "@angular/core";
4
+ export type MonthName = {
5
+ name: string;
6
+ nameShort: string;
7
+ value: number;
8
+ disabled: boolean;
9
+ };
4
10
  /** Default header for KbqCalendar */
5
11
  export declare class KbqCalendarHeader<D> implements AfterContentInit {
6
12
  private readonly adapter;
7
- monthNames: {
8
- name: string;
9
- nameShort: string;
10
- value: number;
11
- }[];
13
+ monthNames: MonthName[];
12
14
  selectedMonth: number;
13
15
  years: {
14
16
  name: number;
@@ -46,7 +48,9 @@ export declare class KbqCalendarHeader<D> implements AfterContentInit {
46
48
  selectNextMonth(): void;
47
49
  private compareDate;
48
50
  private updateSelectedValues;
49
- private updateYearsArray;
51
+ private updateSelectionOptions;
52
+ private updateYearsOptions;
53
+ private updateMonthOptions;
50
54
  static ɵfac: i0.ɵɵFactoryDeclaration<KbqCalendarHeader<any>, never>;
51
55
  static ɵcmp: i0.ɵɵComponentDeclaration<KbqCalendarHeader<any>, "kbq-calendar-header", ["kbqCalendarHeader"], { "activeDate": { "alias": "activeDate"; "required": false; }; "maxDate": { "alias": "maxDate"; "required": false; }; "minDate": { "alias": "minDate"; "required": false; }; }, { "activeDateChange": "activeDateChange"; "monthSelected": "monthSelected"; "yearSelected": "yearSelected"; }, never, never, false, never>;
52
56
  }