@koobiq/components 19.1.0 → 19.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/app-switcher/app-switcher.d.ts +7 -1
  2. package/core/locales/en-US.d.ts +0 -4
  3. package/core/locales/es-LA.d.ts +0 -4
  4. package/core/locales/locale-service.d.ts +0 -20
  5. package/core/locales/pt-BR.d.ts +0 -4
  6. package/core/locales/ru-RU.d.ts +0 -4
  7. package/core/locales/tk-TM.d.ts +0 -4
  8. package/core/locales/types.d.ts +0 -4
  9. package/core/styles/common/_animation.scss +2 -1
  10. package/core/utils/utils.d.ts +4 -0
  11. package/datepicker/datepicker-input.directive.d.ts +6 -1
  12. package/dropdown/dropdown.scss +3 -1
  13. package/fesm2022/koobiq-components-accordion.mjs +34 -34
  14. package/fesm2022/koobiq-components-actions-panel.mjs +10 -10
  15. package/fesm2022/koobiq-components-alert.mjs +16 -16
  16. package/fesm2022/koobiq-components-app-switcher.mjs +60 -33
  17. package/fesm2022/koobiq-components-app-switcher.mjs.map +1 -1
  18. package/fesm2022/koobiq-components-autocomplete.mjs +13 -13
  19. package/fesm2022/koobiq-components-badge.mjs +13 -13
  20. package/fesm2022/koobiq-components-breadcrumbs.mjs +25 -25
  21. package/fesm2022/koobiq-components-button-toggle.mjs +10 -10
  22. package/fesm2022/koobiq-components-button.mjs +15 -15
  23. package/fesm2022/koobiq-components-button.mjs.map +1 -1
  24. package/fesm2022/koobiq-components-checkbox.mjs +10 -10
  25. package/fesm2022/koobiq-components-clamped-text.mjs +7 -7
  26. package/fesm2022/koobiq-components-code-block.mjs +10 -10
  27. package/fesm2022/koobiq-components-content-panel.mjs +28 -28
  28. package/fesm2022/koobiq-components-core.mjs +237 -251
  29. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  30. package/fesm2022/koobiq-components-datepicker.mjs +49 -42
  31. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  32. package/fesm2022/koobiq-components-divider.mjs +7 -7
  33. package/fesm2022/koobiq-components-dl.mjs +13 -13
  34. package/fesm2022/koobiq-components-dropdown.mjs +23 -22
  35. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  36. package/fesm2022/koobiq-components-dynamic-translation.mjs +13 -13
  37. package/fesm2022/koobiq-components-ellipsis-center.mjs +7 -7
  38. package/fesm2022/koobiq-components-empty-state.mjs +19 -19
  39. package/fesm2022/koobiq-components-file-upload.mjs +501 -74
  40. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  41. package/fesm2022/koobiq-components-filter-bar.mjs +155 -95
  42. package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
  43. package/fesm2022/koobiq-components-form-field.mjs +56 -56
  44. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  45. package/fesm2022/koobiq-components-icon.mjs +13 -13
  46. package/fesm2022/koobiq-components-inline-edit.mjs +18 -18
  47. package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
  48. package/fesm2022/koobiq-components-input.mjs +22 -22
  49. package/fesm2022/koobiq-components-link.mjs +7 -7
  50. package/fesm2022/koobiq-components-list.mjs +19 -19
  51. package/fesm2022/koobiq-components-loader-overlay.mjs +16 -16
  52. package/fesm2022/koobiq-components-markdown.mjs +10 -10
  53. package/fesm2022/koobiq-components-modal.mjs +28 -28
  54. package/fesm2022/koobiq-components-navbar-ic.mjs +34 -34
  55. package/fesm2022/koobiq-components-navbar.mjs +49 -49
  56. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  57. package/fesm2022/koobiq-components-notification-center.mjs +16 -16
  58. package/fesm2022/koobiq-components-overflow-items.mjs +16 -16
  59. package/fesm2022/koobiq-components-popover.mjs +22 -18
  60. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  61. package/fesm2022/koobiq-components-progress-bar.mjs +13 -13
  62. package/fesm2022/koobiq-components-progress-spinner.mjs +13 -13
  63. package/fesm2022/koobiq-components-radio.mjs +10 -10
  64. package/fesm2022/koobiq-components-resizer.mjs +10 -10
  65. package/fesm2022/koobiq-components-risk-level.mjs +7 -7
  66. package/fesm2022/koobiq-components-scrollbar.mjs +10 -10
  67. package/fesm2022/koobiq-components-search-expandable.mjs +7 -7
  68. package/fesm2022/koobiq-components-select.mjs +15 -14
  69. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  70. package/fesm2022/koobiq-components-sidebar.mjs +13 -13
  71. package/fesm2022/koobiq-components-sidepanel.mjs +26 -26
  72. package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
  73. package/fesm2022/koobiq-components-skeleton.mjs +37 -0
  74. package/fesm2022/koobiq-components-skeleton.mjs.map +1 -0
  75. package/fesm2022/koobiq-components-split-button.mjs +7 -7
  76. package/fesm2022/koobiq-components-splitter.mjs +16 -16
  77. package/fesm2022/koobiq-components-table.mjs +10 -10
  78. package/fesm2022/koobiq-components-tabs.mjs +52 -52
  79. package/fesm2022/koobiq-components-tags.mjs +29 -28
  80. package/fesm2022/koobiq-components-tags.mjs.map +1 -1
  81. package/fesm2022/koobiq-components-textarea.mjs +7 -7
  82. package/fesm2022/koobiq-components-time-range.mjs +22 -22
  83. package/fesm2022/koobiq-components-timepicker.mjs +10 -10
  84. package/fesm2022/koobiq-components-timezone.mjs +22 -22
  85. package/fesm2022/koobiq-components-title.mjs +9 -9
  86. package/fesm2022/koobiq-components-title.mjs.map +1 -1
  87. package/fesm2022/koobiq-components-toast.mjs +16 -16
  88. package/fesm2022/koobiq-components-toggle.mjs +9 -9
  89. package/fesm2022/koobiq-components-toggle.mjs.map +1 -1
  90. package/fesm2022/koobiq-components-tooltip.mjs +16 -16
  91. package/fesm2022/koobiq-components-top-bar.mjs +13 -13
  92. package/fesm2022/koobiq-components-tree-select.mjs +11 -26
  93. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  94. package/fesm2022/koobiq-components-tree.mjs +61 -51
  95. package/fesm2022/koobiq-components-tree.mjs.map +1 -1
  96. package/fesm2022/koobiq-components-username.mjs +28 -28
  97. package/fesm2022/koobiq-components-username.mjs.map +1 -1
  98. package/file-upload/_file-upload-theme.scss +0 -256
  99. package/file-upload/dropzone.d.ts +147 -0
  100. package/file-upload/dropzone.scss +57 -0
  101. package/file-upload/file-upload-tokens.scss +25 -18
  102. package/file-upload/file-upload.d.ts +3 -0
  103. package/file-upload/file-upload.scss +8 -4
  104. package/file-upload/multiple-file-upload.component.d.ts +13 -7
  105. package/file-upload/multiple-file-upload.component.scss +209 -91
  106. package/file-upload/primitives/file-drop.d.ts +24 -6
  107. package/file-upload/public-api.d.ts +1 -0
  108. package/file-upload/single-file-upload.component.d.ts +11 -2
  109. package/file-upload/single-file-upload.component.scss +117 -36
  110. package/filter-bar/filter-bar-button.d.ts +5 -0
  111. package/filter-bar/filters.d.ts +38 -6
  112. package/inline-edit/inline-edit.d.ts +2 -2
  113. package/inline-edit/inline-edit.scss +1 -1
  114. package/navbar/_navbar-item_vertical.scss +8 -0
  115. package/navbar/navbar-brand.scss +2 -2
  116. package/package.json +9 -4
  117. package/popover/_popover-theme.scss +1 -1
  118. package/popover/popover.component.d.ts +3 -1
  119. package/schematics/ng-add/index.js +2 -2
  120. package/select/select.component.d.ts +2 -1
  121. package/skeleton/index.d.ts +2 -0
  122. package/skeleton/module.d.ts +7 -0
  123. package/skeleton/skeleton.d.ts +8 -0
  124. package/skeleton/skeleton.scss +41 -0
  125. package/tree/_tree-theme.scss +11 -5
  126. package/tree/tree-option.scss +1 -0
  127. package/tree/tree-selection.component.d.ts +2 -1
  128. package/tree-select/tree-select.component.d.ts +2 -1
@@ -0,0 +1,147 @@
1
+ import { OverlayRef } from '@angular/cdk/overlay';
2
+ import { InjectionToken, OnDestroy, TemplateRef } from '@angular/core';
3
+ import { KbqDefaultSizes } from '@koobiq/components/core';
4
+ import { KbqEmptyState } from '@koobiq/components/empty-state';
5
+ import { KbqMultipleFileUploadComponent } from './multiple-file-upload.component';
6
+ import { KbqDrop } from './primitives';
7
+ import { KbqSingleFileUploadComponent } from './single-file-upload.component';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/cdk/a11y";
10
+ /** Dropzone overlay content configuration. */
11
+ export type KbqDropzoneData = Partial<{
12
+ /** Optional caption text displayed below the title. */
13
+ caption: string;
14
+ /** Visual size of the dropzone empty state content. */
15
+ size: KbqDefaultSizes;
16
+ /** Title text displayed in the dropzone; falls back to localized default. */
17
+ title: string;
18
+ /** Whether focus should be automatically captured when the overlay opens. */
19
+ autoCapture: boolean;
20
+ }>;
21
+ /** Injection token that can be used to access the data that was passed in to a modal. */
22
+ export declare const KBQ_DROPZONE_DATA: InjectionToken<Partial<{
23
+ /** Optional caption text displayed below the title. */
24
+ caption: string;
25
+ /** Visual size of the dropzone empty state content. */
26
+ size: KbqDefaultSizes;
27
+ /** Title text displayed in the dropzone; falls back to localized default. */
28
+ title: string;
29
+ /** Whether focus should be automatically captured when the overlay opens. */
30
+ autoCapture: boolean;
31
+ }>>;
32
+ /**
33
+ * Determines if a mouse event occurred outside the viewport boundaries.
34
+ * @docs-private
35
+ */
36
+ export declare const isOutsideViewport: ({ event, innerWidth, innerHeight, xAxisMinThreshold, yAxisMinThreshold }: {
37
+ event: MouseEvent;
38
+ innerWidth: number;
39
+ innerHeight: number;
40
+ xAxisMinThreshold: number;
41
+ yAxisMinThreshold: number;
42
+ }) => boolean;
43
+ /**
44
+ * Service that provides full-screen drag-and-drop overlay functionality.
45
+ */
46
+ export declare class KbqFullScreenDropzoneService extends KbqDrop implements OnDestroy {
47
+ /** Completely terminates all subscriptions when emitted */
48
+ private readonly dropAbort;
49
+ private readonly overlay;
50
+ private readonly window;
51
+ private readonly injector;
52
+ private readonly ngZone;
53
+ private overlayRef?;
54
+ constructor();
55
+ ngOnDestroy(): void;
56
+ /**
57
+ * Initializes drag-and-drop event listeners on the document body.
58
+ * @param config - Dropzone configuration
59
+ */
60
+ init(config?: KbqDropzoneData): void;
61
+ /** Stops all drag-and-drop event listeners and cleans up subscriptions. */
62
+ stop(): void;
63
+ /**
64
+ * Opens the dropzone overlay.
65
+ * @param config - Dropzone configuration
66
+ */
67
+ open(config?: KbqDropzoneData): void;
68
+ /** Closes and disposes the overlay. */
69
+ close(): void;
70
+ /** @docs-private */
71
+ onDrop(event: DragEvent): void;
72
+ /** @docs-private */
73
+ protected createOverlay(): OverlayRef;
74
+ /** @see https://bugs.webkit.org/show_bug.cgi?id=66547 */
75
+ private onDragLeave;
76
+ static ɵfac: i0.ɵɵFactoryDeclaration<KbqFullScreenDropzoneService, never>;
77
+ static ɵprov: i0.ɵɵInjectableDeclaration<KbqFullScreenDropzoneService>;
78
+ }
79
+ /**
80
+ * Directive that turns an element into a local drag-and-drop zone.
81
+ *
82
+ * Displays an overlay over the host element on drag enter, handles drag events,
83
+ * and emits dropped files to a connected file upload component.
84
+ */
85
+ export declare class KbqLocalDropzone extends KbqDrop {
86
+ /** File upload component to connect dropped files to */
87
+ readonly connectedTo: import("@angular/core").InputSignal<KbqMultipleFileUploadComponent | KbqSingleFileUploadComponent | undefined>;
88
+ private readonly elementRef;
89
+ private readonly rects;
90
+ private readonly overlay;
91
+ private readonly viewContainerRef;
92
+ private readonly injector;
93
+ private readonly ngZone;
94
+ private readonly destroyRef;
95
+ private overlayRef?;
96
+ constructor();
97
+ /** Opens the dropzone overlay positioned over the host element. */
98
+ open(config?: KbqDropzoneData): void;
99
+ /** Closes and disposes the overlay. */
100
+ close(): void;
101
+ /** @docs-private */
102
+ onDrop(event: DragEvent): void;
103
+ /**
104
+ * Initializes drag-and-drop event listeners on the overlay element.
105
+ * Handles dragover, dragleave, and drop events to manage overlay state and file drops.
106
+ */
107
+ protected init(): void;
108
+ /** Creates an overlay positioned and sized to match the host element. */
109
+ protected createOverlay(): OverlayRef;
110
+ private onDragLeave;
111
+ static ɵfac: i0.ɵɵFactoryDeclaration<KbqLocalDropzone, never>;
112
+ static ɵdir: i0.ɵɵDirectiveDeclaration<KbqLocalDropzone, "[kbqLocalDropzone]", ["kbqLocalDropzone"], { "connectedTo": { "alias": "kbqConnectedTo"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
113
+ }
114
+ /** Component that displays an empty state for file upload areas. */
115
+ export declare class KbqFileUploadEmptyState extends KbqEmptyState {
116
+ /** Title text to display below the upload icon */
117
+ title: import("@angular/core").InputSignal<string | undefined>;
118
+ /** Caption text or template to display below the title */
119
+ caption: import("@angular/core").InputSignal<string | TemplateRef<any> | undefined>;
120
+ constructor();
121
+ /** @docs-private */
122
+ protected isTemplateRef(value: string | TemplateRef<any>): value is TemplateRef<any>;
123
+ static ɵfac: i0.ɵɵFactoryDeclaration<KbqFileUploadEmptyState, never>;
124
+ static ɵcmp: i0.ɵɵComponentDeclaration<KbqFileUploadEmptyState, "kbq-file-upload-empty-state", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "caption": { "alias": "caption"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
125
+ }
126
+ export declare class KbqDropzoneContent {
127
+ /** @docs-private */
128
+ protected readonly localeService: import("@koobiq/components/core").KbqLocaleService | null;
129
+ /** @docs-private */
130
+ protected readonly config: Partial<{
131
+ /** Optional caption text displayed below the title. */
132
+ caption: string;
133
+ /** Visual size of the dropzone empty state content. */
134
+ size: KbqDefaultSizes;
135
+ /** Title text displayed in the dropzone; falls back to localized default. */
136
+ title: string;
137
+ /** Whether focus should be automatically captured when the overlay opens. */
138
+ autoCapture: boolean;
139
+ }> | null;
140
+ private readonly trapFocus;
141
+ private readonly localeId;
142
+ constructor();
143
+ /** @docs-private */
144
+ protected readonly title: import("@angular/core").Signal<any>;
145
+ static ɵfac: i0.ɵɵFactoryDeclaration<KbqDropzoneContent, never>;
146
+ static ɵcmp: i0.ɵɵComponentDeclaration<KbqDropzoneContent, "kbq-dropzone-content", never, {}, {}, never, never, true, [{ directive: typeof i1.CdkTrapFocus; inputs: {}; outputs: {}; }]>;
147
+ }
@@ -0,0 +1,57 @@
1
+ .kbq-dropzone-overlay {
2
+ --kbq-dropzone-padding: var(--kbq-size-s);
3
+ --kbq-dropzone-overlay-background: var(--kbq-background-overlay-theme);
4
+ --kbq-dropzone-component-background: var(--kbq-background-overlay-theme);
5
+ --kbq-dropzone-border-color: var(--kbq-line-theme-fade);
6
+
7
+ padding: var(--kbq-dropzone-padding);
8
+ background-color: var(--kbq-dropzone-overlay-background);
9
+
10
+ opacity: 0;
11
+ transition: opacity 100ms ease-in-out;
12
+
13
+ &.kbq-dropzone-overlay__attached {
14
+ opacity: 1;
15
+ }
16
+
17
+ .kbq-dropzone-content {
18
+ display: flex;
19
+ width: 100%;
20
+
21
+ align-items: center;
22
+ justify-content: center;
23
+
24
+ border-radius: var(--kbq-size-border-radius);
25
+ border: var(--kbq-size-border-width) dashed var(--kbq-dropzone-border-color);
26
+ background-color: var(--kbq-dropzone-component-background);
27
+
28
+ outline: none;
29
+ }
30
+ }
31
+
32
+ .kbq-fullscreen-dropzone {
33
+ --kbq-dropzone-component-background: transparent;
34
+ }
35
+
36
+ .kbq-local-dropzone {
37
+ --kbq-dropzone-overlay-background: transparent;
38
+
39
+ .kbq-empty-state.kbq-multiple-file-upload__empty-state {
40
+ --kbq-empty-state-size-compact-padding-top: 0;
41
+ --kbq-empty-state-size-compact-padding-horizontal: 0;
42
+ --kbq-empty-state-size-compact-padding-bottom: 0;
43
+
44
+ --kbq-empty-state-size-normal-padding-top: 0;
45
+ --kbq-empty-state-size-normal-padding-horizontal: 0;
46
+ --kbq-empty-state-size-normal-padding-bottom: 0;
47
+
48
+ --kbq-empty-state-size-big-padding-top: 0;
49
+ --kbq-empty-state-size-big-padding-horizontal: 0;
50
+ --kbq-empty-state-size-big-padding-bottom: 0;
51
+ }
52
+ }
53
+
54
+ .kbq-empty-state.kbq-multiple-file-upload__empty-state {
55
+ --kbq-empty-state-size-normal-image-margin-bottom: var(--kbq-size-m);
56
+ --kbq-empty-state-size-normal-title-margin-bottom: var(--kbq-size-xs);
57
+ }
@@ -1,47 +1,51 @@
1
1
  :where(.kbq-file-upload) {
2
+ --kbq-file-upload-size-dropzone-content-gap-horizontal: var(--kbq-size-s);
2
3
  --kbq-form-field-hint-text: var(--kbq-foreground-contrast-secondary);
3
4
  }
4
5
 
5
6
  :where(.kbq-single-file-upload) {
7
+ --kbq-form-field-hint-size-margin-top: var(--kbq-size-xs);
8
+ --kbq-form-field-hint-size-gap: var(--kbq-size-xxs);
6
9
  --kbq-file-upload-size-single-container-border-radius: var(--kbq-size-s);
7
10
  --kbq-file-upload-size-single-container-border-width: 1px;
8
11
  --kbq-file-upload-size-single-container-content-gap-horizontal: var(--kbq-size-s);
9
12
  --kbq-file-upload-size-single-container-padding-vertical: var(--kbq-size-m);
10
- --kbq-file-upload-size-single-container-padding-horizontal: var(--kbq-size-m);
13
+ --kbq-file-upload-size-single-container-padding-horizontal: var(--kbq-size-l);
11
14
  --kbq-file-upload-size-single-text-block-padding-vertical: var(--kbq-size-3xs);
12
15
  --kbq-file-upload-size-single-text-block-content-gap-horizontal: var(--kbq-size-xxs);
13
- --kbq-file-upload-single-min-height: var(--kbq-size-5xl);
16
+ --kbq-file-upload-single-min-height: 44px;
14
17
  /* THEME TOKENS */
15
18
  --kbq-file-upload-single-default-container-border: var(--kbq-line-contrast-fade);
16
19
  --kbq-file-upload-single-default-container-background: var(--kbq-background-bg);
17
- --kbq-file-upload-single-default-upload-icon-color: var(--kbq-icon-contrast-fade);
20
+ --kbq-file-upload-single-default-dropzone-icon-color: var(--kbq-icon-contrast-fade);
18
21
  --kbq-file-upload-single-default-left-icon-color: var(--kbq-icon-contrast-fade);
19
22
  --kbq-file-upload-single-default-text-block-color: var(--kbq-foreground-contrast);
20
- --kbq-file-upload-single-default-icon-button-color: var(--kbq-icon-contrast);
21
23
  --kbq-file-upload-single-default-file-size-text-color: var(--kbq-foreground-contrast-secondary);
22
24
  --kbq-file-upload-single-states-on-drag-container-border: var(--kbq-line-theme-fade);
23
25
  --kbq-file-upload-single-states-on-drag-container-background: var(--kbq-background-theme-fade);
24
- --kbq-file-upload-single-states-on-drag-upload-icon-color: var(--kbq-icon-contrast-fade);
26
+ --kbq-file-upload-single-states-on-drag-dropzone-icon-color: var(--kbq-icon-contrast-fade);
25
27
  --kbq-file-upload-single-states-on-drag-left-icon-color: var(--kbq-icon-contrast-fade);
26
28
  --kbq-file-upload-single-states-on-drag-text-block-color: var(--kbq-foreground-contrast);
27
29
  --kbq-file-upload-single-states-error-container-border: var(--kbq-line-error);
28
30
  --kbq-file-upload-single-states-error-container-background: var(--kbq-background-error-less);
29
- --kbq-file-upload-single-states-error-upload-icon-color: var(--kbq-icon-error);
31
+ --kbq-file-upload-single-states-error-dropzone-icon-color: var(--kbq-icon-error);
30
32
  --kbq-file-upload-single-states-error-left-icon-color: var(--kbq-icon-error);
31
33
  --kbq-file-upload-single-states-error-text-block-color: var(--kbq-foreground-error);
32
- --kbq-file-upload-single-states-error-icon-button-color: var(--kbq-icon-error);
33
34
  --kbq-file-upload-single-states-error-file-size-text-color: var(--kbq-foreground-error);
34
35
  --kbq-file-upload-single-states-disabled-container-border: var(--kbq-states-line-disabled);
35
36
  --kbq-file-upload-single-states-disabled-container-background: var(--kbq-states-background-disabled);
36
- --kbq-file-upload-single-states-disabled-upload-icon-color: var(--kbq-states-icon-disabled);
37
+ --kbq-file-upload-single-states-disabled-dropzone-icon-color: var(--kbq-states-icon-disabled);
37
38
  --kbq-file-upload-single-states-disabled-left-icon-color: var(--kbq-states-icon-disabled);
38
- --kbq-file-upload-single-states-disabled-icon-button-color: var(--kbq-states-icon-disabled);
39
39
  --kbq-file-upload-single-states-disabled-text-block-color: var(--kbq-states-foreground-disabled);
40
40
  --kbq-file-upload-single-states-disabled-file-size-text-color: var(--kbq-states-foreground-disabled);
41
41
  --kbq-file-upload-single-states-focused-focus-outline-color: var(--kbq-states-line-focus-theme);
42
42
  }
43
43
 
44
44
  :where(.kbq-multiple-file-upload) {
45
+ --kbq-form-field-hint-size-margin-top: var(--kbq-size-xs);
46
+ --kbq-form-field-hint-size-gap: var(--kbq-size-xxs);
47
+ --kbq-file-upload-size-multiple-min-height: 120px;
48
+ --kbq-file-upload-size-multiple-max-height: unset;
45
49
  --kbq-file-upload-size-multiple-big-container-min-height: 192px;
46
50
  --kbq-file-upload-size-multiple-big-container-min-width: 320px;
47
51
  --kbq-file-upload-size-multiple-big-container-border-radius: var(--kbq-size-s);
@@ -54,34 +58,37 @@
54
58
  --kbq-file-upload-size-multiple-big-text-block-content-gap-horizontal: var(--kbq-size-xxs);
55
59
  --kbq-file-upload-size-multiple-big-grid-cell-padding-horizontal: var(--kbq-size-s);
56
60
  --kbq-file-upload-size-multiple-big-grid-cell-padding-vertical: var(--kbq-size-s);
57
- --kbq-file-upload-size-multiple-big-grid-cell-content-gap-horizontal: var(--kbq-size-xxs);
61
+ --kbq-file-upload-size-multiple-big-grid-cell-content-gap-horizontal: var(--kbq-size-s);
58
62
  --kbq-file-upload-size-multiple-big-grid-cell-file-size-width: var(--kbq-size-7xl);
59
63
  /* THEME TOKENS */
60
64
  --kbq-file-upload-multiple-default-container-border: var(--kbq-line-contrast-fade);
61
65
  --kbq-file-upload-multiple-default-container-background: var(--kbq-background-bg);
62
- --kbq-file-upload-multiple-default-upload-icon-color: var(--kbq-icon-contrast-fade);
66
+ --kbq-file-upload-multiple-default-upload-icon-color: var(--kbq-icon-contrast);
67
+ --kbq-file-upload-multiple-default-dropzone-icon-color: var(--kbq-icon-contrast-fade);
63
68
  --kbq-file-upload-multiple-default-left-icon-color: var(--kbq-icon-contrast-fade);
64
69
  --kbq-file-upload-multiple-default-text-block-color: var(--kbq-foreground-contrast);
65
- --kbq-file-upload-multiple-default-icon-button-color: var(--kbq-icon-contrast);
66
70
  --kbq-file-upload-multiple-default-grid-divider-color: var(--kbq-line-contrast-less);
67
71
  --kbq-file-upload-multiple-default-file-size-text-color: var(--kbq-foreground-contrast-secondary);
72
+
68
73
  --kbq-file-upload-multiple-states-on-drag-container-border: var(--kbq-line-theme-fade);
69
74
  --kbq-file-upload-multiple-states-on-drag-container-background: var(--kbq-background-theme-fade);
70
- --kbq-file-upload-multiple-states-on-drag-upload-icon-color: var(--kbq-icon-contrast-fade);
75
+ --kbq-file-upload-multiple-states-on-drag-upload-icon-color: var(--kbq-icon-contrast);
76
+ --kbq-file-upload-multiple-states-on-drag-dropzone-icon-color: var(--kbq-icon-contrast-fade);
71
77
  --kbq-file-upload-multiple-states-on-drag-left-icon-color: var(--kbq-icon-contrast-fade);
72
- --kbq-file-upload-multiple-states-on-drag-icon-button-color: var(--kbq-icon-contrast);
73
78
  --kbq-file-upload-multiple-states-on-drag-text-block-color: var(--kbq-foreground-contrast);
74
79
  --kbq-file-upload-multiple-states-on-drag-grid-divider-color: var(--kbq-line-contrast-less);
75
- --kbq-file-upload-multiple-states-error-grid-cell-background: var(--kbq-background-error-less);
80
+
81
+ --kbq-file-upload-multiple-states-error-container-border: var(--kbq-line-error);
82
+ --kbq-file-upload-multiple-states-error-container-background: var(--kbq-background-error-less);
76
83
  --kbq-file-upload-multiple-states-error-upload-icon-color: var(--kbq-icon-error);
84
+ --kbq-file-upload-multiple-states-error-dropzone-icon-color: var(--kbq-icon-error);
77
85
  --kbq-file-upload-multiple-states-error-left-icon-color: var(--kbq-icon-error);
78
86
  --kbq-file-upload-multiple-states-error-text-block-color: var(--kbq-foreground-error);
79
- --kbq-file-upload-multiple-states-error-icon-button-color: var(--kbq-icon-error);
80
87
  --kbq-file-upload-multiple-states-disabled-container-border: var(--kbq-states-line-disabled);
81
88
  --kbq-file-upload-multiple-states-disabled-container-background: var(--kbq-states-background-disabled);
82
89
  --kbq-file-upload-multiple-states-disabled-upload-icon-color: var(--kbq-states-icon-disabled);
90
+ --kbq-file-upload-multiple-states-disabled-dropzone-icon-color: var(--kbq-states-icon-disabled);
83
91
  --kbq-file-upload-multiple-states-disabled-left-icon-color: var(--kbq-states-icon-disabled);
84
- --kbq-file-upload-multiple-states-disabled-icon-button-color: var(--kbq-states-icon-disabled);
85
92
  --kbq-file-upload-multiple-states-disabled-text-block-color: var(--kbq-states-foreground-disabled);
86
93
  --kbq-file-upload-multiple-states-disabled-grid-divider-color: var(--kbq-states-line-disabled);
87
94
  --kbq-file-upload-multiple-states-focused-focus-outline-color: var(--kbq-states-line-focus-theme);
@@ -91,5 +98,5 @@
91
98
  --kbq-file-upload-multiple-compact-container-content-gap-horizontal: var(--kbq-size-s);
92
99
  --kbq-file-upload-multiple-compact-text-block-padding-vertical: var(--kbq-size-3xs);
93
100
  --kbq-file-upload-multiple-compact-container-padding-vertical: 11px;
94
- --kbq-file-upload-multiple-compact-container-padding-horizontal: 11px;
101
+ --kbq-file-upload-multiple-compact-container-padding-horizontal: 15px;
95
102
  }
@@ -2,6 +2,7 @@ import { ChangeDetectorRef, DestroyRef, ElementRef, InjectionToken, InputSignal,
2
2
  import { FormGroupDirective, NgControl, NgForm } from '@angular/forms';
3
3
  import { CanUpdateErrorState, ErrorStateMatcher, KbqBaseFileUploadLocaleConfig, KbqEnumValues, KbqMultipleFileUploadLocaleConfig } from '@koobiq/components/core';
4
4
  import { BehaviorSubject, Subject } from 'rxjs';
5
+ import { KbqFullScreenDropzoneService } from './dropzone';
5
6
  import { KbqFileList, KbqFileUploadContext } from './primitives';
6
7
  export interface KbqFile extends File {
7
8
  fullPath: string;
@@ -91,6 +92,8 @@ export declare abstract class KbqFileUploadBase<T = KbqBaseFileUploadLocaleConfi
91
92
  protected readonly defaultErrorStateMatcher: ErrorStateMatcher;
92
93
  /** @docs-private */
93
94
  protected readonly elementRef: ElementRef<HTMLElement>;
95
+ /** @docs-private */
96
+ protected readonly dropzoneService: KbqFullScreenDropzoneService;
94
97
  /** implemented as part of base class. Decided not use mixinErrorState, not to overcomplicate
95
98
  * @docs-private */
96
99
  updateErrorState(): void;
@@ -1,4 +1,5 @@
1
1
  @use './file-upload-theme' as theme;
2
+ @use '../form-field/form-field';
2
3
 
3
4
  .kbq-file-upload {
4
5
  box-sizing: border-box;
@@ -6,12 +7,17 @@
6
7
  align-items: center;
7
8
  position: relative;
8
9
 
9
- .kbq-file-dropzone,
10
10
  .kbq-file-item {
11
11
  display: flex;
12
12
  align-items: center;
13
13
  }
14
14
 
15
+ .kbq-file-dropzone {
16
+ display: flex;
17
+ align-items: baseline;
18
+ gap: var(--dropzone-gap, var(--kbq-file-upload-size-dropzone-content-gap-horizontal));
19
+ }
20
+
15
21
  .kbq-ellipsis-center {
16
22
  position: relative;
17
23
  display: flex;
@@ -32,9 +38,7 @@
32
38
  }
33
39
 
34
40
  .kbq-file-upload__hint {
35
- .kbq-hint {
36
- margin-top: var(--kbq-size-xxs);
37
- }
41
+ @include form-field.kbq-form-field-hint-geometry();
38
42
  }
39
43
 
40
44
  @include theme.kbq-file-upload-theme();
@@ -40,6 +40,16 @@ export declare class KbqMultipleFileUploadComponent extends KbqFileUploadBase im
40
40
  * @default mixed
41
41
  */
42
42
  allowed: import("@angular/core").InputSignal<"file" | "folder" | "mixed">;
43
+ /**
44
+ * Controls whether to display fullscreen dropzone.
45
+ * Provide configuration object to enable, or undefined to disable.
46
+ */
47
+ fullScreenDropZone: import("@angular/core").InputSignal<boolean | Partial<{
48
+ caption: string;
49
+ size: import("@koobiq/components/core").KbqDefaultSizes;
50
+ title: string;
51
+ autoCapture: boolean;
52
+ }> | undefined>;
43
53
  /** Optional configuration to override default labels with localized text.*/
44
54
  readonly localeConfig: import("@angular/core").InputSignal<Partial<KbqMultipleFileUploadLocaleConfig> | undefined>;
45
55
  /** Emits an event containing updated file list.
@@ -58,7 +68,6 @@ export declare class KbqMultipleFileUploadComponent extends KbqFileUploadBase im
58
68
  /** File Icon Template */
59
69
  protected readonly customFileIcon: TemplateRef<HTMLElement>;
60
70
  protected readonly fileLoader: KbqFileLoader | undefined;
61
- private readonly fileSizeHeaderCell;
62
71
  /** @docs-private */
63
72
  protected readonly hint: QueryList<TemplateRef<any>>;
64
73
  /** @docs-private */
@@ -90,11 +99,8 @@ export declare class KbqMultipleFileUploadComponent extends KbqFileUploadBase im
90
99
  * @docs-private
91
100
  */
92
101
  get invalid(): boolean;
93
- /**
94
- * Set maxWidth for filesize cell to enable proper ellipsis center,
95
- * @docs-private
96
- */
97
- protected get fileSizeCellMaxWidth(): number;
102
+ /** @docs-private */
103
+ protected get captionTextWhenSelected(): string;
98
104
  /** @docs-private */
99
105
  readonly configuration: KbqMultipleFileUploadLocaleConfig | null;
100
106
  private readonly localeId;
@@ -128,5 +134,5 @@ export declare class KbqMultipleFileUploadComponent extends KbqFileUploadBase im
128
134
  private validateFile;
129
135
  private onFileAdded;
130
136
  static ɵfac: i0.ɵɵFactoryDeclaration<KbqMultipleFileUploadComponent, never>;
131
- static ɵcmp: i0.ɵɵComponentDeclaration<KbqMultipleFileUploadComponent, "kbq-multiple-file-upload,kbq-file-upload[multiple]", never, { "progressMode": { "alias": "progressMode"; "required": false; }; "accept": { "alias": "accept"; "required": false; }; "errors": { "alias": "errors"; "required": false; }; "size": { "alias": "size"; "required": false; }; "inputId": { "alias": "inputId"; "required": false; }; "customValidation": { "alias": "customValidation"; "required": false; }; "errorStateMatcher": { "alias": "errorStateMatcher"; "required": false; }; "files": { "alias": "files"; "required": false; }; "allowed": { "alias": "allowed"; "required": false; "isSignal": true; }; "localeConfig": { "alias": "localeConfig"; "required": false; "isSignal": true; }; }, { "filesChange": "fileQueueChanged"; "filesAdded": "filesAdded"; "fileRemoved": "fileRemoved"; }, ["customFileIcon", "hint"], ["kbq-hint"], true, [{ directive: typeof i1.KbqFileUploadContext; inputs: { "id": "id"; "disabled": "disabled"; }; outputs: {}; }, { directive: typeof i1.KbqFileList; inputs: {}; outputs: { "listChange": "filesChange"; "itemsAdded": "itemsAdded"; "itemRemoved": "itemRemoved"; }; }]>;
137
+ static ɵcmp: i0.ɵɵComponentDeclaration<KbqMultipleFileUploadComponent, "kbq-multiple-file-upload,kbq-file-upload[multiple]", never, { "progressMode": { "alias": "progressMode"; "required": false; }; "accept": { "alias": "accept"; "required": false; }; "errors": { "alias": "errors"; "required": false; }; "size": { "alias": "size"; "required": false; }; "inputId": { "alias": "inputId"; "required": false; }; "customValidation": { "alias": "customValidation"; "required": false; }; "errorStateMatcher": { "alias": "errorStateMatcher"; "required": false; }; "files": { "alias": "files"; "required": false; }; "allowed": { "alias": "allowed"; "required": false; "isSignal": true; }; "fullScreenDropZone": { "alias": "fullScreenDropZone"; "required": false; "isSignal": true; }; "localeConfig": { "alias": "localeConfig"; "required": false; "isSignal": true; }; }, { "filesChange": "fileQueueChanged"; "filesAdded": "filesAdded"; "fileRemoved": "fileRemoved"; }, ["customFileIcon", "hint"], ["kbq-hint"], true, [{ directive: typeof i1.KbqFileUploadContext; inputs: { "id": "id"; "disabled": "disabled"; }; outputs: {}; }, { directive: typeof i1.KbqFileList; inputs: {}; outputs: { "listChange": "filesChange"; "itemsAdded": "itemsAdded"; "itemRemoved": "itemRemoved"; }; }]>;
132
138
  }