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