@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.
- package/app-switcher/app-switcher.d.ts +7 -1
- package/core/locales/en-US.d.ts +0 -4
- package/core/locales/es-LA.d.ts +0 -4
- package/core/locales/locale-service.d.ts +0 -20
- package/core/locales/pt-BR.d.ts +0 -4
- package/core/locales/ru-RU.d.ts +0 -4
- package/core/locales/tk-TM.d.ts +0 -4
- package/core/locales/types.d.ts +0 -4
- package/core/styles/common/_animation.scss +2 -1
- package/core/utils/utils.d.ts +4 -0
- package/datepicker/datepicker-input.directive.d.ts +6 -1
- package/dropdown/dropdown.scss +3 -1
- package/fesm2022/koobiq-components-accordion.mjs +34 -34
- package/fesm2022/koobiq-components-actions-panel.mjs +10 -10
- package/fesm2022/koobiq-components-alert.mjs +16 -16
- package/fesm2022/koobiq-components-app-switcher.mjs +60 -33
- package/fesm2022/koobiq-components-app-switcher.mjs.map +1 -1
- package/fesm2022/koobiq-components-autocomplete.mjs +13 -13
- package/fesm2022/koobiq-components-badge.mjs +13 -13
- package/fesm2022/koobiq-components-breadcrumbs.mjs +25 -25
- package/fesm2022/koobiq-components-button-toggle.mjs +10 -10
- package/fesm2022/koobiq-components-button.mjs +15 -15
- package/fesm2022/koobiq-components-button.mjs.map +1 -1
- package/fesm2022/koobiq-components-checkbox.mjs +10 -10
- package/fesm2022/koobiq-components-clamped-text.mjs +7 -7
- package/fesm2022/koobiq-components-code-block.mjs +10 -10
- package/fesm2022/koobiq-components-content-panel.mjs +28 -28
- package/fesm2022/koobiq-components-core.mjs +237 -251
- package/fesm2022/koobiq-components-core.mjs.map +1 -1
- package/fesm2022/koobiq-components-datepicker.mjs +49 -42
- package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
- package/fesm2022/koobiq-components-divider.mjs +7 -7
- package/fesm2022/koobiq-components-dl.mjs +13 -13
- package/fesm2022/koobiq-components-dropdown.mjs +23 -22
- 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 +501 -74
- package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
- package/fesm2022/koobiq-components-filter-bar.mjs +155 -95
- package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
- package/fesm2022/koobiq-components-form-field.mjs +56 -56
- package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
- package/fesm2022/koobiq-components-icon.mjs +13 -13
- package/fesm2022/koobiq-components-inline-edit.mjs +18 -18
- package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
- package/fesm2022/koobiq-components-input.mjs +22 -22
- package/fesm2022/koobiq-components-link.mjs +7 -7
- package/fesm2022/koobiq-components-list.mjs +19 -19
- package/fesm2022/koobiq-components-loader-overlay.mjs +16 -16
- package/fesm2022/koobiq-components-markdown.mjs +10 -10
- package/fesm2022/koobiq-components-modal.mjs +28 -28
- package/fesm2022/koobiq-components-navbar-ic.mjs +34 -34
- package/fesm2022/koobiq-components-navbar.mjs +49 -49
- package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
- package/fesm2022/koobiq-components-notification-center.mjs +16 -16
- package/fesm2022/koobiq-components-overflow-items.mjs +16 -16
- package/fesm2022/koobiq-components-popover.mjs +22 -18
- 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 +10 -10
- package/fesm2022/koobiq-components-risk-level.mjs +7 -7
- package/fesm2022/koobiq-components-scrollbar.mjs +10 -10
- package/fesm2022/koobiq-components-search-expandable.mjs +7 -7
- package/fesm2022/koobiq-components-select.mjs +15 -14
- package/fesm2022/koobiq-components-select.mjs.map +1 -1
- package/fesm2022/koobiq-components-sidebar.mjs +13 -13
- package/fesm2022/koobiq-components-sidepanel.mjs +26 -26
- package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
- package/fesm2022/koobiq-components-skeleton.mjs +37 -0
- package/fesm2022/koobiq-components-skeleton.mjs.map +1 -0
- package/fesm2022/koobiq-components-split-button.mjs +7 -7
- package/fesm2022/koobiq-components-splitter.mjs +16 -16
- package/fesm2022/koobiq-components-table.mjs +10 -10
- package/fesm2022/koobiq-components-tabs.mjs +52 -52
- package/fesm2022/koobiq-components-tags.mjs +29 -28
- package/fesm2022/koobiq-components-tags.mjs.map +1 -1
- package/fesm2022/koobiq-components-textarea.mjs +7 -7
- package/fesm2022/koobiq-components-time-range.mjs +22 -22
- package/fesm2022/koobiq-components-timepicker.mjs +10 -10
- package/fesm2022/koobiq-components-timezone.mjs +22 -22
- package/fesm2022/koobiq-components-title.mjs +9 -9
- package/fesm2022/koobiq-components-title.mjs.map +1 -1
- package/fesm2022/koobiq-components-toast.mjs +16 -16
- package/fesm2022/koobiq-components-toggle.mjs +9 -9
- package/fesm2022/koobiq-components-toggle.mjs.map +1 -1
- package/fesm2022/koobiq-components-tooltip.mjs +16 -16
- package/fesm2022/koobiq-components-top-bar.mjs +13 -13
- package/fesm2022/koobiq-components-tree-select.mjs +11 -26
- package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
- package/fesm2022/koobiq-components-tree.mjs +61 -51
- package/fesm2022/koobiq-components-tree.mjs.map +1 -1
- package/fesm2022/koobiq-components-username.mjs +28 -28
- package/fesm2022/koobiq-components-username.mjs.map +1 -1
- package/file-upload/_file-upload-theme.scss +0 -256
- package/file-upload/dropzone.d.ts +147 -0
- package/file-upload/dropzone.scss +57 -0
- package/file-upload/file-upload-tokens.scss +25 -18
- package/file-upload/file-upload.d.ts +3 -0
- package/file-upload/file-upload.scss +8 -4
- package/file-upload/multiple-file-upload.component.d.ts +13 -7
- package/file-upload/multiple-file-upload.component.scss +209 -91
- package/file-upload/primitives/file-drop.d.ts +24 -6
- package/file-upload/public-api.d.ts +1 -0
- package/file-upload/single-file-upload.component.d.ts +11 -2
- package/file-upload/single-file-upload.component.scss +117 -36
- package/filter-bar/filter-bar-button.d.ts +5 -0
- package/filter-bar/filters.d.ts +38 -6
- package/inline-edit/inline-edit.d.ts +2 -2
- package/inline-edit/inline-edit.scss +1 -1
- package/navbar/_navbar-item_vertical.scss +8 -0
- package/navbar/navbar-brand.scss +2 -2
- package/package.json +9 -4
- package/popover/_popover-theme.scss +1 -1
- package/popover/popover.component.d.ts +3 -1
- package/schematics/ng-add/index.js +2 -2
- package/select/select.component.d.ts +2 -1
- package/skeleton/index.d.ts +2 -0
- package/skeleton/module.d.ts +7 -0
- package/skeleton/skeleton.d.ts +8 -0
- package/skeleton/skeleton.scss +41 -0
- package/tree/_tree-theme.scss +11 -5
- package/tree/tree-option.scss +1 -0
- package/tree/tree-selection.component.d.ts +2 -1
- 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-
|
|
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:
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
|
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
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
}
|