@koobiq/components 19.2.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 (99) hide show
  1. package/core/utils/utils.d.ts +4 -0
  2. package/datepicker/datepicker-input.directive.d.ts +6 -1
  3. package/fesm2022/koobiq-components-accordion.mjs +34 -34
  4. package/fesm2022/koobiq-components-actions-panel.mjs +10 -10
  5. package/fesm2022/koobiq-components-alert.mjs +16 -16
  6. package/fesm2022/koobiq-components-app-switcher.mjs +19 -19
  7. package/fesm2022/koobiq-components-autocomplete.mjs +13 -13
  8. package/fesm2022/koobiq-components-badge.mjs +13 -13
  9. package/fesm2022/koobiq-components-breadcrumbs.mjs +25 -25
  10. package/fesm2022/koobiq-components-button-toggle.mjs +10 -10
  11. package/fesm2022/koobiq-components-button.mjs +13 -13
  12. package/fesm2022/koobiq-components-checkbox.mjs +10 -10
  13. package/fesm2022/koobiq-components-clamped-text.mjs +7 -7
  14. package/fesm2022/koobiq-components-code-block.mjs +10 -10
  15. package/fesm2022/koobiq-components-content-panel.mjs +28 -28
  16. package/fesm2022/koobiq-components-core.mjs +225 -219
  17. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  18. package/fesm2022/koobiq-components-datepicker.mjs +49 -42
  19. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  20. package/fesm2022/koobiq-components-divider.mjs +7 -7
  21. package/fesm2022/koobiq-components-dl.mjs +13 -13
  22. package/fesm2022/koobiq-components-dropdown.mjs +21 -20
  23. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  24. package/fesm2022/koobiq-components-dynamic-translation.mjs +13 -13
  25. package/fesm2022/koobiq-components-ellipsis-center.mjs +7 -7
  26. package/fesm2022/koobiq-components-empty-state.mjs +19 -19
  27. package/fesm2022/koobiq-components-file-upload.mjs +495 -60
  28. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  29. package/fesm2022/koobiq-components-filter-bar.mjs +69 -69
  30. package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
  31. package/fesm2022/koobiq-components-form-field.mjs +55 -55
  32. package/fesm2022/koobiq-components-icon.mjs +13 -13
  33. package/fesm2022/koobiq-components-inline-edit.mjs +18 -18
  34. package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
  35. package/fesm2022/koobiq-components-input.mjs +22 -22
  36. package/fesm2022/koobiq-components-link.mjs +7 -7
  37. package/fesm2022/koobiq-components-list.mjs +19 -19
  38. package/fesm2022/koobiq-components-loader-overlay.mjs +16 -16
  39. package/fesm2022/koobiq-components-markdown.mjs +10 -10
  40. package/fesm2022/koobiq-components-modal.mjs +28 -28
  41. package/fesm2022/koobiq-components-navbar-ic.mjs +34 -34
  42. package/fesm2022/koobiq-components-navbar.mjs +43 -43
  43. package/fesm2022/koobiq-components-notification-center.mjs +16 -16
  44. package/fesm2022/koobiq-components-overflow-items.mjs +16 -16
  45. package/fesm2022/koobiq-components-popover.mjs +18 -18
  46. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  47. package/fesm2022/koobiq-components-progress-bar.mjs +13 -13
  48. package/fesm2022/koobiq-components-progress-spinner.mjs +13 -13
  49. package/fesm2022/koobiq-components-radio.mjs +10 -10
  50. package/fesm2022/koobiq-components-resizer.mjs +10 -10
  51. package/fesm2022/koobiq-components-risk-level.mjs +7 -7
  52. package/fesm2022/koobiq-components-scrollbar.mjs +10 -10
  53. package/fesm2022/koobiq-components-search-expandable.mjs +7 -7
  54. package/fesm2022/koobiq-components-select.mjs +15 -14
  55. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  56. package/fesm2022/koobiq-components-sidebar.mjs +13 -13
  57. package/fesm2022/koobiq-components-sidepanel.mjs +25 -25
  58. package/fesm2022/koobiq-components-skeleton.mjs +37 -0
  59. package/fesm2022/koobiq-components-skeleton.mjs.map +1 -0
  60. package/fesm2022/koobiq-components-split-button.mjs +7 -7
  61. package/fesm2022/koobiq-components-splitter.mjs +16 -16
  62. package/fesm2022/koobiq-components-table.mjs +10 -10
  63. package/fesm2022/koobiq-components-tabs.mjs +52 -52
  64. package/fesm2022/koobiq-components-tags.mjs +29 -28
  65. package/fesm2022/koobiq-components-tags.mjs.map +1 -1
  66. package/fesm2022/koobiq-components-textarea.mjs +7 -7
  67. package/fesm2022/koobiq-components-time-range.mjs +22 -22
  68. package/fesm2022/koobiq-components-timepicker.mjs +10 -10
  69. package/fesm2022/koobiq-components-timezone.mjs +22 -22
  70. package/fesm2022/koobiq-components-title.mjs +7 -7
  71. package/fesm2022/koobiq-components-toast.mjs +16 -16
  72. package/fesm2022/koobiq-components-toggle.mjs +7 -7
  73. package/fesm2022/koobiq-components-tooltip.mjs +16 -16
  74. package/fesm2022/koobiq-components-top-bar.mjs +13 -13
  75. package/fesm2022/koobiq-components-tree-select.mjs +11 -26
  76. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  77. package/fesm2022/koobiq-components-tree.mjs +53 -43
  78. package/fesm2022/koobiq-components-tree.mjs.map +1 -1
  79. package/fesm2022/koobiq-components-username.mjs +27 -27
  80. package/file-upload/dropzone.d.ts +147 -0
  81. package/file-upload/dropzone.scss +57 -0
  82. package/file-upload/file-upload.d.ts +3 -0
  83. package/file-upload/multiple-file-upload.component.d.ts +11 -1
  84. package/file-upload/multiple-file-upload.component.scss +1 -1
  85. package/file-upload/primitives/file-drop.d.ts +23 -4
  86. package/file-upload/public-api.d.ts +1 -0
  87. package/file-upload/single-file-upload.component.d.ts +11 -1
  88. package/inline-edit/inline-edit.d.ts +2 -2
  89. package/inline-edit/inline-edit.scss +1 -1
  90. package/package.json +9 -4
  91. package/popover/_popover-theme.scss +1 -1
  92. package/schematics/ng-add/index.js +2 -2
  93. package/select/select.component.d.ts +2 -1
  94. package/skeleton/index.d.ts +2 -0
  95. package/skeleton/module.d.ts +7 -0
  96. package/skeleton/skeleton.d.ts +8 -0
  97. package/skeleton/skeleton.scss +41 -0
  98. package/tree/tree-selection.component.d.ts +2 -1
  99. package/tree-select/tree-select.component.d.ts +2 -1
@@ -85,11 +85,11 @@ class KbqUsernamePipe {
85
85
  });
86
86
  return result.trim();
87
87
  }
88
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: KbqUsernamePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
89
- /** @nocollapse */ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.17", ngImport: i0, type: KbqUsernamePipe, isStandalone: true, name: "kbqUsername" }); }
90
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: KbqUsernamePipe, providedIn: 'root' }); }
88
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: KbqUsernamePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
89
+ /** @nocollapse */ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.18", ngImport: i0, type: KbqUsernamePipe, isStandalone: true, name: "kbqUsername" }); }
90
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: KbqUsernamePipe, providedIn: 'root' }); }
91
91
  }
92
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: KbqUsernamePipe, decorators: [{
92
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: KbqUsernamePipe, decorators: [{
93
93
  type: Injectable,
94
94
  args: [{ providedIn: 'root' }]
95
95
  }, {
@@ -129,11 +129,11 @@ class KbqUsernameCustomPipe {
129
129
  });
130
130
  return result.trim();
131
131
  }
132
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: KbqUsernameCustomPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
133
- /** @nocollapse */ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.17", ngImport: i0, type: KbqUsernameCustomPipe, isStandalone: true, name: "kbqUsernameCustom" }); }
134
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: KbqUsernameCustomPipe, providedIn: 'root' }); }
132
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: KbqUsernameCustomPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
133
+ /** @nocollapse */ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.18", ngImport: i0, type: KbqUsernameCustomPipe, isStandalone: true, name: "kbqUsernameCustom" }); }
134
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: KbqUsernameCustomPipe, providedIn: 'root' }); }
135
135
  }
136
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: KbqUsernameCustomPipe, decorators: [{
136
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: KbqUsernameCustomPipe, decorators: [{
137
137
  type: Injectable,
138
138
  args: [{ providedIn: 'root' }]
139
139
  }, {
@@ -147,10 +147,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
147
147
  const baseClass = 'kbq-username';
148
148
  /** Styles the primary part of the username (e.g. full name). */
149
149
  class KbqUsernamePrimary {
150
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: KbqUsernamePrimary, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
151
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.17", type: KbqUsernamePrimary, isStandalone: true, selector: "[kbqUsernamePrimary]", host: { classAttribute: "kbq-username__primary" }, exportAs: ["kbqUsernamePrimary"], ngImport: i0 }); }
150
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: KbqUsernamePrimary, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
151
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.18", type: KbqUsernamePrimary, isStandalone: true, selector: "[kbqUsernamePrimary]", host: { classAttribute: "kbq-username__primary" }, exportAs: ["kbqUsernamePrimary"], ngImport: i0 }); }
152
152
  }
153
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: KbqUsernamePrimary, decorators: [{
153
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: KbqUsernamePrimary, decorators: [{
154
154
  type: Directive,
155
155
  args: [{
156
156
  selector: '[kbqUsernamePrimary]',
@@ -162,10 +162,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
162
162
  }] });
163
163
  /** Styles the secondary part. */
164
164
  class KbqUsernameSecondary {
165
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: KbqUsernameSecondary, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
166
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.17", type: KbqUsernameSecondary, isStandalone: true, selector: "[kbqUsernameSecondary]", host: { classAttribute: "kbq-username__secondary" }, exportAs: ["kbqUsernameSecondary"], ngImport: i0 }); }
165
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: KbqUsernameSecondary, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
166
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.18", type: KbqUsernameSecondary, isStandalone: true, selector: "[kbqUsernameSecondary]", host: { classAttribute: "kbq-username__secondary" }, exportAs: ["kbqUsernameSecondary"], ngImport: i0 }); }
167
167
  }
168
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: KbqUsernameSecondary, decorators: [{
168
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: KbqUsernameSecondary, decorators: [{
169
169
  type: Directive,
170
170
  args: [{
171
171
  selector: '[kbqUsernameSecondary]',
@@ -177,10 +177,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
177
177
  }] });
178
178
  /** Styles a secondary hint. */
179
179
  class KbqUsernameSecondaryHint {
180
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: KbqUsernameSecondaryHint, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
181
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.17", type: KbqUsernameSecondaryHint, isStandalone: true, selector: "[kbqUsernameSecondaryHint]", host: { classAttribute: "kbq-username__secondary-hint" }, exportAs: ["kbqUsernameSecondaryHint"], ngImport: i0 }); }
180
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: KbqUsernameSecondaryHint, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
181
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.18", type: KbqUsernameSecondaryHint, isStandalone: true, selector: "[kbqUsernameSecondaryHint]", host: { classAttribute: "kbq-username__secondary-hint" }, exportAs: ["kbqUsernameSecondaryHint"], ngImport: i0 }); }
182
182
  }
183
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: KbqUsernameSecondaryHint, decorators: [{
183
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: KbqUsernameSecondaryHint, decorators: [{
184
184
  type: Directive,
185
185
  args: [{
186
186
  selector: '[kbqUsernameSecondaryHint]',
@@ -192,10 +192,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
192
192
  }] });
193
193
  /** Custom content for `KbqUsername`, overrides default view. */
194
194
  class KbqUsernameCustomView {
195
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: KbqUsernameCustomView, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
196
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.17", type: KbqUsernameCustomView, isStandalone: true, selector: "kbq-username-custom-view, [kbq-username-custom-view]", host: { classAttribute: "kbq-username__custom-view" }, exportAs: ["kbqUsernameCustomView"], ngImport: i0 }); }
195
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: KbqUsernameCustomView, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
196
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.18", type: KbqUsernameCustomView, isStandalone: true, selector: "kbq-username-custom-view, [kbq-username-custom-view]", host: { classAttribute: "kbq-username__custom-view" }, exportAs: ["kbqUsernameCustomView"], ngImport: i0 }); }
197
197
  }
198
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: KbqUsernameCustomView, decorators: [{
198
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: KbqUsernameCustomView, decorators: [{
199
199
  type: Directive,
200
200
  args: [{
201
201
  selector: 'kbq-username-custom-view, [kbq-username-custom-view]',
@@ -246,10 +246,10 @@ class KbqUsername {
246
246
  return [this.type(), this.mode()].map((modificator) => `${baseClass}_${modificator}`).join(' ');
247
247
  });
248
248
  }
249
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: KbqUsername, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
250
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.17", type: KbqUsername, isStandalone: true, selector: "kbq-username", inputs: { userInfo: { classPropertyName: "userInfo", publicName: "userInfo", isSignal: true, isRequired: false, transformFunction: null }, isCompact: { classPropertyName: "isCompact", publicName: "isCompact", isSignal: true, isRequired: false, transformFunction: null }, fullNameFormat: { classPropertyName: "fullNameFormat", publicName: "fullNameFormat", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "class()" }, classAttribute: "kbq-username" }, queries: [{ propertyName: "customView", first: true, predicate: KbqUsernameCustomView, descendants: true, isSignal: true }], exportAs: ["kbqUsername"], ngImport: i0, template: "@let profile = userInfo();\n<ng-content select=\"kbq-username-custom-view,[kbq-username-custom-view]\" />\n\n@if (!customView() && profile) {\n @let fullName = profile | kbqUsername: fullNameFormat();\n\n @if (!isCompact()) {\n @if (hasFullName()) {\n <span kbq-title kbqUsernamePrimary>{{ fullName }}</span>\n }\n\n @if (profile.login) {\n <span kbq-title kbqUsernameSecondary>\n {{ profile.login }}\n\n @if (profile.site) {\n <span kbqUsernameSecondaryHint>({{ profile.site }})</span>\n }\n </span>\n }\n } @else {\n <span kbq-title kbqUsernamePrimary>\n @if (hasFullName()) {\n <span>{{ fullName }}</span>\n }\n @if (!hasFullName() && profile.login) {\n {{ profile.login }}\n }\n\n @if (profile.site) {\n <span kbqUsernameSecondaryHint>&nbsp;({{ profile.site }})</span>\n }\n </span>\n }\n}\n", styles: ["@keyframes kbq-progress{0%{background-position:0 0}to{background-position:64px 0}}.kbq-progress.kbq-button,.kbq-progress.kbq-button-icon{position:relative}.kbq-progress.kbq-button:after,.kbq-progress.kbq-button-icon:after{content:\"\";position:absolute;border-radius:inherit;inset:0;background:linear-gradient(135deg,#0000000a 12px,#ffffff1a 12px 22px,#0000000a 22px 34px,#ffffff1a 34px) repeat;background-size:32px 32px;animation:kbq-progress 1s linear infinite}.kbq-group{display:flex;flex-direction:row}.kbq-group .kbq-group_justified>.kbq-group-item{width:100%}.kbq-group .kbq-group-item+.kbq-group-item{margin-left:calc(-1 * var(--kbq-size-border-width))}.kbq-group>.kbq-group-item:first-child:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.kbq-group>.kbq-group-item:first-child:not(:last-child)>.kbq-form-field__container{border-bottom-right-radius:0;border-top-right-radius:0}.kbq-group>.kbq-group-item:last-child:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.kbq-group>.kbq-group-item:last-child:not(:first-child)>.kbq-form-field__container{border-bottom-left-radius:0;border-top-left-radius:0}.kbq-group>.kbq-group-item:not(:first-child):not(:last-child){border-radius:0}.kbq-group>.kbq-group-item:not(:first-child):not(:last-child)>.kbq-form-field__container{border-radius:0}.kbq-vertical-group{display:flex;flex-direction:column}.kbq-vertical-group>.kbq-group-item:first-child:not(:last-child){border-bottom-right-radius:0;border-bottom-left-radius:0;border-top-right-radius:var(--kbq-size-border-radius)}.kbq-vertical-group>.kbq-group-item:first-child:not(:last-child)>.kbq-form-field__container{border-bottom-right-radius:0;border-bottom-left-radius:0}.kbq-vertical-group>.kbq-group-item:last-child:not(:first-child){border-top-right-radius:0;border-top-left-radius:0;border-bottom-left-radius:var(--kbq-size-border-radius)}.kbq-vertical-group>.kbq-group-item:last-child:not(:first-child)>.kbq-form-field__container{border-top-right-radius:0;border-top-left-radius:0}.kbq-vertical-group>.kbq-group-item:not(:first-child):not(:last-child){border-radius:0}.kbq-vertical-group>.kbq-group-item:not(:first-child):not(:last-child)>.kbq-form-field__container{border-radius:0}.kbq-vertical-group .kbq-group-item+.kbq-group-item{margin-top:calc(-1 * var(--kbq-size-border-width))}.kbq-truncate-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.kbq-no-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.kbq-username{color:var(--kbq-username-primary-color)}.kbq-username .kbq-username__secondary,.kbq-username .kbq-username__secondary-hint{color:var(--kbq-username-secondary-color)}.kbq-username.kbq-username_default .kbq-username__secondary-hint,.kbq-username.kbq-username_default .kbq-username__primary+.kbq-username__secondary{--kbq-username-secondary-color: var(--kbq-foreground-contrast-secondary)}.kbq-username.kbq-username_error{--kbq-username-primary-color: var(--kbq-foreground-error);--kbq-username-secondary-color: var(--kbq-foreground-error)}.kbq-username.kbq-username_accented{--kbq-username-primary-color: var(--kbq-foreground-contrast);--kbq-username-secondary-color: var(--kbq-foreground-contrast)}.kbq-username.kbq-username_inherit{--kbq-username-primary-color: inherit;--kbq-username-secondary-color: inherit}.kbq-username{font-size:var(--kbq-typography-text-normal-font-size);font-style:var(--kbq-typography-text-normal-font-style);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}.kbq-username.kbq-username_accented .kbq-username__primary{font-size:var(--kbq-typography-text-normal-strong-font-size);font-style:var(--kbq-typography-text-normal-strong-font-style);font-weight:var(--kbq-typography-text-normal-strong-font-weight);line-height:var(--kbq-typography-text-normal-strong-line-height);font-family:var(--kbq-typography-text-normal-strong-font-family);text-transform:var(--kbq-typography-text-normal-strong-text-transform);font-feature-settings:var(--kbq-typography-text-normal-strong-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-strong-letter-spacing)}.kbq-username.kbq-username_stacked:not(:has(>.kbq-username__custom-view)),.kbq-username.kbq-username_stacked>.kbq-username__custom-view{display:flex;flex-flow:column nowrap;justify-content:flex-start;align-items:normal;gap:var(--kbq-username-vertical-gap)}.kbq-username.kbq-username_inline:not(.kbq-username_inherit):not(:has(>.kbq-username__custom-view)),.kbq-username.kbq-username_inline:not(.kbq-username_inherit)>.kbq-username__custom-view{display:flex;flex-flow:row nowrap;justify-content:flex-start;align-items:baseline}.kbq-username.kbq-username_inline:not(.kbq-username_inherit):not(:has(>.kbq-username__custom-view)) .kbq-username__primary+.kbq-username__secondary,.kbq-username.kbq-username_inline:not(.kbq-username_inherit)>.kbq-username__custom-view .kbq-username__primary+.kbq-username__secondary{margin-left:var(--kbq-username-horizontal-gap)}[dir=rtl] .kbq-username.kbq-username_inline:not(.kbq-username_inherit):not(:has(>.kbq-username__custom-view)) .kbq-username__primary+.kbq-username__secondary,[dir=rtl] .kbq-username.kbq-username_inline:not(.kbq-username_inherit)>.kbq-username__custom-view .kbq-username__primary+.kbq-username__secondary{margin-left:0;margin-right:var(--kbq-username-horizontal-gap)}.kbq-username.kbq-username_text:not(:has(>.kbq-username__custom-view)),.kbq-username.kbq-username_text>.kbq-username__custom-view{display:inline}.kbq-username.kbq-username_stacked:not(:has(>.kbq-username__custom-view)) .kbq-username__primary,.kbq-username.kbq-username_stacked:not(:has(>.kbq-username__custom-view)) .kbq-username__secondary,.kbq-username.kbq-username_stacked>.kbq-username__custom-view .kbq-username__primary,.kbq-username.kbq-username_stacked>.kbq-username__custom-view .kbq-username__secondary,.kbq-username.kbq-username_inline:not(:has(>.kbq-username__custom-view)) .kbq-username__primary,.kbq-username.kbq-username_inline:not(:has(>.kbq-username__custom-view)) .kbq-username__secondary,.kbq-username.kbq-username_inline>.kbq-username__custom-view .kbq-username__primary,.kbq-username.kbq-username_inline>.kbq-username__custom-view .kbq-username__secondary{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.kbq-username.kbq-username_inherit:not(:has(>.kbq-username__custom-view)),.kbq-username.kbq-username_inherit>.kbq-username__custom-view{font:inherit;display:inherit}\n", ":where(.kbq-username){--kbq-username-primary-color: var(--kbq-foreground-contrast);--kbq-username-secondary-color: inherit;--kbq-username-vertical-gap: var(--kbq-size-xxs);--kbq-username-horizontal-gap: var(--kbq-size-xxs)}\n"], dependencies: [{ kind: "ngmodule", type: KbqTitleModule }, { kind: "directive", type: i1.KbqTitleDirective, selector: "[kbq-title]", exportAs: ["kbqTitle"] }, { kind: "pipe", type: KbqUsernamePipe, name: "kbqUsername" }, { kind: "directive", type: KbqUsernamePrimary, selector: "[kbqUsernamePrimary]", exportAs: ["kbqUsernamePrimary"] }, { kind: "directive", type: KbqUsernameSecondary, selector: "[kbqUsernameSecondary]", exportAs: ["kbqUsernameSecondary"] }, { kind: "directive", type: KbqUsernameSecondaryHint, selector: "[kbqUsernameSecondaryHint]", exportAs: ["kbqUsernameSecondaryHint"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
249
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: KbqUsername, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
250
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.18", type: KbqUsername, isStandalone: true, selector: "kbq-username", inputs: { userInfo: { classPropertyName: "userInfo", publicName: "userInfo", isSignal: true, isRequired: false, transformFunction: null }, isCompact: { classPropertyName: "isCompact", publicName: "isCompact", isSignal: true, isRequired: false, transformFunction: null }, fullNameFormat: { classPropertyName: "fullNameFormat", publicName: "fullNameFormat", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "class()" }, classAttribute: "kbq-username" }, queries: [{ propertyName: "customView", first: true, predicate: KbqUsernameCustomView, descendants: true, isSignal: true }], exportAs: ["kbqUsername"], ngImport: i0, template: "@let profile = userInfo();\n<ng-content select=\"kbq-username-custom-view,[kbq-username-custom-view]\" />\n\n@if (!customView() && profile) {\n @let fullName = profile | kbqUsername: fullNameFormat();\n\n @if (!isCompact()) {\n @if (hasFullName()) {\n <span kbq-title kbqUsernamePrimary>{{ fullName }}</span>\n }\n\n @if (profile.login) {\n <span kbq-title kbqUsernameSecondary>\n {{ profile.login }}\n\n @if (profile.site) {\n <span kbqUsernameSecondaryHint>({{ profile.site }})</span>\n }\n </span>\n }\n } @else {\n <span kbq-title kbqUsernamePrimary>\n @if (hasFullName()) {\n <span>{{ fullName }}</span>\n }\n @if (!hasFullName() && profile.login) {\n {{ profile.login }}\n }\n\n @if (profile.site) {\n <span kbqUsernameSecondaryHint>&nbsp;({{ profile.site }})</span>\n }\n </span>\n }\n}\n", styles: ["@keyframes kbq-progress{0%{background-position:0 0}to{background-position:64px 0}}.kbq-progress.kbq-button,.kbq-progress.kbq-button-icon{position:relative}.kbq-progress.kbq-button:after,.kbq-progress.kbq-button-icon:after{content:\"\";position:absolute;border-radius:inherit;inset:0;background:linear-gradient(135deg,#0000000a 12px,#ffffff1a 12px 22px,#0000000a 22px 34px,#ffffff1a 34px) repeat;background-size:32px 32px;animation:kbq-progress 1s linear infinite}.kbq-group{display:flex;flex-direction:row}.kbq-group .kbq-group_justified>.kbq-group-item{width:100%}.kbq-group .kbq-group-item+.kbq-group-item{margin-left:calc(-1 * var(--kbq-size-border-width))}.kbq-group>.kbq-group-item:first-child:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.kbq-group>.kbq-group-item:first-child:not(:last-child)>.kbq-form-field__container{border-bottom-right-radius:0;border-top-right-radius:0}.kbq-group>.kbq-group-item:last-child:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.kbq-group>.kbq-group-item:last-child:not(:first-child)>.kbq-form-field__container{border-bottom-left-radius:0;border-top-left-radius:0}.kbq-group>.kbq-group-item:not(:first-child):not(:last-child){border-radius:0}.kbq-group>.kbq-group-item:not(:first-child):not(:last-child)>.kbq-form-field__container{border-radius:0}.kbq-vertical-group{display:flex;flex-direction:column}.kbq-vertical-group>.kbq-group-item:first-child:not(:last-child){border-bottom-right-radius:0;border-bottom-left-radius:0;border-top-right-radius:var(--kbq-size-border-radius)}.kbq-vertical-group>.kbq-group-item:first-child:not(:last-child)>.kbq-form-field__container{border-bottom-right-radius:0;border-bottom-left-radius:0}.kbq-vertical-group>.kbq-group-item:last-child:not(:first-child){border-top-right-radius:0;border-top-left-radius:0;border-bottom-left-radius:var(--kbq-size-border-radius)}.kbq-vertical-group>.kbq-group-item:last-child:not(:first-child)>.kbq-form-field__container{border-top-right-radius:0;border-top-left-radius:0}.kbq-vertical-group>.kbq-group-item:not(:first-child):not(:last-child){border-radius:0}.kbq-vertical-group>.kbq-group-item:not(:first-child):not(:last-child)>.kbq-form-field__container{border-radius:0}.kbq-vertical-group .kbq-group-item+.kbq-group-item{margin-top:calc(-1 * var(--kbq-size-border-width))}.kbq-truncate-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.kbq-no-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.kbq-username{color:var(--kbq-username-primary-color)}.kbq-username .kbq-username__secondary,.kbq-username .kbq-username__secondary-hint{color:var(--kbq-username-secondary-color)}.kbq-username.kbq-username_default .kbq-username__secondary-hint,.kbq-username.kbq-username_default .kbq-username__primary+.kbq-username__secondary{--kbq-username-secondary-color: var(--kbq-foreground-contrast-secondary)}.kbq-username.kbq-username_error{--kbq-username-primary-color: var(--kbq-foreground-error);--kbq-username-secondary-color: var(--kbq-foreground-error)}.kbq-username.kbq-username_accented{--kbq-username-primary-color: var(--kbq-foreground-contrast);--kbq-username-secondary-color: var(--kbq-foreground-contrast)}.kbq-username.kbq-username_inherit{--kbq-username-primary-color: inherit;--kbq-username-secondary-color: inherit}.kbq-username{font-size:var(--kbq-typography-text-normal-font-size);font-style:var(--kbq-typography-text-normal-font-style);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}.kbq-username.kbq-username_accented .kbq-username__primary{font-size:var(--kbq-typography-text-normal-strong-font-size);font-style:var(--kbq-typography-text-normal-strong-font-style);font-weight:var(--kbq-typography-text-normal-strong-font-weight);line-height:var(--kbq-typography-text-normal-strong-line-height);font-family:var(--kbq-typography-text-normal-strong-font-family);text-transform:var(--kbq-typography-text-normal-strong-text-transform);font-feature-settings:var(--kbq-typography-text-normal-strong-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-strong-letter-spacing)}.kbq-username.kbq-username_stacked:not(:has(>.kbq-username__custom-view)),.kbq-username.kbq-username_stacked>.kbq-username__custom-view{display:flex;flex-flow:column nowrap;justify-content:flex-start;align-items:normal;gap:var(--kbq-username-vertical-gap)}.kbq-username.kbq-username_inline:not(.kbq-username_inherit):not(:has(>.kbq-username__custom-view)),.kbq-username.kbq-username_inline:not(.kbq-username_inherit)>.kbq-username__custom-view{display:flex;flex-flow:row nowrap;justify-content:flex-start;align-items:baseline}.kbq-username.kbq-username_inline:not(.kbq-username_inherit):not(:has(>.kbq-username__custom-view)) .kbq-username__primary+.kbq-username__secondary,.kbq-username.kbq-username_inline:not(.kbq-username_inherit)>.kbq-username__custom-view .kbq-username__primary+.kbq-username__secondary{margin-left:var(--kbq-username-horizontal-gap)}[dir=rtl] .kbq-username.kbq-username_inline:not(.kbq-username_inherit):not(:has(>.kbq-username__custom-view)) .kbq-username__primary+.kbq-username__secondary,[dir=rtl] .kbq-username.kbq-username_inline:not(.kbq-username_inherit)>.kbq-username__custom-view .kbq-username__primary+.kbq-username__secondary{margin-left:0;margin-right:var(--kbq-username-horizontal-gap)}.kbq-username.kbq-username_text:not(:has(>.kbq-username__custom-view)),.kbq-username.kbq-username_text>.kbq-username__custom-view{display:inline}.kbq-username.kbq-username_stacked:not(:has(>.kbq-username__custom-view)) .kbq-username__primary,.kbq-username.kbq-username_stacked:not(:has(>.kbq-username__custom-view)) .kbq-username__secondary,.kbq-username.kbq-username_stacked>.kbq-username__custom-view .kbq-username__primary,.kbq-username.kbq-username_stacked>.kbq-username__custom-view .kbq-username__secondary,.kbq-username.kbq-username_inline:not(:has(>.kbq-username__custom-view)) .kbq-username__primary,.kbq-username.kbq-username_inline:not(:has(>.kbq-username__custom-view)) .kbq-username__secondary,.kbq-username.kbq-username_inline>.kbq-username__custom-view .kbq-username__primary,.kbq-username.kbq-username_inline>.kbq-username__custom-view .kbq-username__secondary{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.kbq-username.kbq-username_inherit:not(:has(>.kbq-username__custom-view)),.kbq-username.kbq-username_inherit>.kbq-username__custom-view{font:inherit;display:inherit}\n", ":where(.kbq-username){--kbq-username-primary-color: var(--kbq-foreground-contrast);--kbq-username-secondary-color: inherit;--kbq-username-vertical-gap: var(--kbq-size-xxs);--kbq-username-horizontal-gap: var(--kbq-size-xxs)}\n"], dependencies: [{ kind: "ngmodule", type: KbqTitleModule }, { kind: "directive", type: i1.KbqTitleDirective, selector: "[kbq-title]", exportAs: ["kbqTitle"] }, { kind: "pipe", type: KbqUsernamePipe, name: "kbqUsername" }, { kind: "directive", type: KbqUsernamePrimary, selector: "[kbqUsernamePrimary]", exportAs: ["kbqUsernamePrimary"] }, { kind: "directive", type: KbqUsernameSecondary, selector: "[kbqUsernameSecondary]", exportAs: ["kbqUsernameSecondary"] }, { kind: "directive", type: KbqUsernameSecondaryHint, selector: "[kbqUsernameSecondaryHint]", exportAs: ["kbqUsernameSecondaryHint"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
251
251
  }
252
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: KbqUsername, decorators: [{
252
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: KbqUsername, decorators: [{
253
253
  type: Component,
254
254
  args: [{ selector: 'kbq-username', exportAs: 'kbqUsername', imports: [
255
255
  KbqTitleModule,
@@ -272,8 +272,8 @@ const COMPONENTS = [
272
272
  KbqUsernamePipe
273
273
  ];
274
274
  class KbqUsernameModule {
275
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: KbqUsernameModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
276
- /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.17", ngImport: i0, type: KbqUsernameModule, imports: [KbqUsername,
275
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: KbqUsernameModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
276
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.18", ngImport: i0, type: KbqUsernameModule, imports: [KbqUsername,
277
277
  KbqUsernameCustomView,
278
278
  KbqUsernamePrimary,
279
279
  KbqUsernameSecondary,
@@ -284,9 +284,9 @@ class KbqUsernameModule {
284
284
  KbqUsernameSecondary,
285
285
  KbqUsernameCustomPipe,
286
286
  KbqUsernamePipe] }); }
287
- /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: KbqUsernameModule, imports: [KbqUsername] }); }
287
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: KbqUsernameModule, imports: [KbqUsername] }); }
288
288
  }
289
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: KbqUsernameModule, decorators: [{
289
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: KbqUsernameModule, decorators: [{
290
290
  type: NgModule,
291
291
  args: [{
292
292
  imports: COMPONENTS,
@@ -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
+ }
@@ -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;
@@ -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.
@@ -124,5 +134,5 @@ export declare class KbqMultipleFileUploadComponent extends KbqFileUploadBase im
124
134
  private validateFile;
125
135
  private onFileAdded;
126
136
  static ɵfac: i0.ɵɵFactoryDeclaration<KbqMultipleFileUploadComponent, never>;
127
- 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"; }; }]>;
128
138
  }
@@ -179,7 +179,7 @@
179
179
  min-height: var(--kbq-file-upload-size-multiple-big-container-min-height);
180
180
  min-width: var(--kbq-file-upload-size-multiple-big-container-min-width);
181
181
 
182
- .kbq-empty-state {
182
+ .kbq-multiple-file-upload__empty-state {
183
183
  --kbq-empty-state-size-normal-padding-top: 0;
184
184
  --kbq-empty-state-size-normal-padding-bottom: 0;
185
185
  --kbq-empty-state-size-normal-image-addon-height: 4px;
@@ -1,16 +1,35 @@
1
1
  import { KbqFile } from '../file-upload';
2
2
  import * as i0 from "@angular/core";
3
- export declare class KbqFileDropDirective {
4
- /** Flag that controls css-class modifications on drag events. */
5
- dragover: boolean;
3
+ export declare class KbqDrop {
4
+ /** @docs-private */
5
+ isSafari: boolean;
6
+ /**
7
+ * Controls whether drag-and-drop functionality is enabled.
8
+ * When true, all drag events are filtered out and ignored.
9
+ */
10
+ readonly disabled: import("@angular/core").ModelSignal<boolean>;
6
11
  /** Emits an event when file items were dropped. */
7
12
  readonly filesDropped: import("@angular/core").OutputEmitterRef<KbqFile[]>;
8
13
  /** @docs-private */
14
+ protected onDrop(event: DragEvent): void;
15
+ static ɵfac: i0.ɵɵFactoryDeclaration<KbqDrop, never>;
16
+ static ɵdir: i0.ɵɵDirectiveDeclaration<KbqDrop, never, never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "disabled": "disabledChange"; "filesDropped": "filesDropped"; }, never, never, true, never>;
17
+ }
18
+ export declare class KbqFileDropDirective extends KbqDrop {
19
+ /** Flag that controls css-class modifications on drag events. */
20
+ protected readonly dragover: import("@angular/core").WritableSignal<boolean>;
21
+ private readonly ngZone;
22
+ private readonly nativeElement;
23
+ private readonly destroyRef;
24
+ constructor();
25
+ onDragEnter(event: DragEvent): void;
26
+ /** @docs-private */
9
27
  onDragOver(event: DragEvent): void;
10
28
  /** @docs-private */
11
29
  onDragLeave(event: DragEvent): void;
12
30
  /** @docs-private */
13
31
  onDrop(event: DragEvent): void;
32
+ private init;
14
33
  static ɵfac: i0.ɵɵFactoryDeclaration<KbqFileDropDirective, never>;
15
- static ɵdir: i0.ɵɵDirectiveDeclaration<KbqFileDropDirective, "[kbqFileDrop]", ["kbqFileDrop"], {}, { "filesDropped": "filesDropped"; }, never, never, true, never>;
34
+ static ɵdir: i0.ɵɵDirectiveDeclaration<KbqFileDropDirective, "[kbqFileDrop]", ["kbqFileDrop"], {}, {}, never, never, true, never>;
16
35
  }
@@ -1,3 +1,4 @@
1
+ export * from './dropzone';
1
2
  export * from './file-upload';
2
3
  export * from './file-upload.module';
3
4
  export * from './multiple-file-upload.component';
@@ -38,6 +38,16 @@ export declare class KbqSingleFileUploadComponent extends KbqFileUploadBase impl
38
38
  * @default mixed
39
39
  */
40
40
  allowed: import("@angular/core").InputSignal<"file" | "folder" | "mixed">;
41
+ /**
42
+ * Controls whether to display fullscreen dropzone.
43
+ * Provide configuration object to enable, or undefined to disable.
44
+ */
45
+ fullScreenDropZone: import("@angular/core").InputSignal<boolean | Partial<{
46
+ caption: string;
47
+ size: import("@koobiq/components/core").KbqDefaultSizes;
48
+ title: string;
49
+ autoCapture: boolean;
50
+ }> | undefined>;
41
51
  /** Optional configuration to override default labels with localized text.*/
42
52
  readonly localeConfig: import("@angular/core").InputSignal<Partial<KbqBaseFileUploadLocaleConfig> | undefined>;
43
53
  /** Emits an event containing updated file.
@@ -103,6 +113,6 @@ export declare class KbqSingleFileUploadComponent extends KbqFileUploadBase impl
103
113
  private mapToFileItem;
104
114
  private validateFile;
105
115
  static ɵfac: i0.ɵɵFactoryDeclaration<KbqSingleFileUploadComponent, never>;
106
- static ɵcmp: i0.ɵɵComponentDeclaration<KbqSingleFileUploadComponent, "kbq-single-file-upload,kbq-file-upload:not([multiple])", never, { "progressMode": { "alias": "progressMode"; "required": false; }; "accept": { "alias": "accept"; "required": false; }; "errors": { "alias": "errors"; "required": false; }; "inputId": { "alias": "inputId"; "required": false; }; "customValidation": { "alias": "customValidation"; "required": false; }; "errorStateMatcher": { "alias": "errorStateMatcher"; "required": false; }; "file": { "alias": "file"; "required": false; }; "showFileSize": { "alias": "showFileSize"; "required": false; }; "allowed": { "alias": "allowed"; "required": false; "isSignal": true; }; "localeConfig": { "alias": "localeConfig"; "required": false; "isSignal": true; }; }, { "fileChange": "fileQueueChange"; }, ["hint"], ["[kbq-icon]", "kbq-hint"], true, [{ directive: typeof i1.KbqFileUploadContext; inputs: { "id": "id"; "disabled": "disabled"; "multiple": "multiple"; }; outputs: {}; }, { directive: typeof i1.KbqFileList; inputs: {}; outputs: { "listChange": "fileChange"; }; }]>;
116
+ static ɵcmp: i0.ɵɵComponentDeclaration<KbqSingleFileUploadComponent, "kbq-single-file-upload,kbq-file-upload:not([multiple])", never, { "progressMode": { "alias": "progressMode"; "required": false; }; "accept": { "alias": "accept"; "required": false; }; "errors": { "alias": "errors"; "required": false; }; "inputId": { "alias": "inputId"; "required": false; }; "customValidation": { "alias": "customValidation"; "required": false; }; "errorStateMatcher": { "alias": "errorStateMatcher"; "required": false; }; "file": { "alias": "file"; "required": false; }; "showFileSize": { "alias": "showFileSize"; "required": false; }; "allowed": { "alias": "allowed"; "required": false; "isSignal": true; }; "fullScreenDropZone": { "alias": "fullScreenDropZone"; "required": false; "isSignal": true; }; "localeConfig": { "alias": "localeConfig"; "required": false; "isSignal": true; }; }, { "fileChange": "fileQueueChange"; }, ["hint"], ["[kbq-icon]", "kbq-hint"], true, [{ directive: typeof i1.KbqFileUploadContext; inputs: { "id": "id"; "disabled": "disabled"; "multiple": "multiple"; }; outputs: {}; }, { directive: typeof i1.KbqFileList; inputs: {}; outputs: { "listChange": "fileChange"; }; }]>;
107
117
  static ngAcceptInputType_showFileSize: unknown;
108
118
  }
@@ -108,8 +108,8 @@ export declare class KbqInlineEdit {
108
108
  protected readonly colors: typeof KbqComponentColors;
109
109
  private initialValue;
110
110
  constructor();
111
- /** @docs-private */
112
- protected toggleMode(): void;
111
+ /** Manually switch mode */
112
+ toggleMode(): void;
113
113
  /** @docs-private */
114
114
  protected onClick(event: Event): void;
115
115
  /** @docs-private */
@@ -100,7 +100,7 @@
100
100
  @include _inline-edit-typography();
101
101
 
102
102
  &:not(.kbq-inline-edit_with-label) {
103
- --kbq-inline-edit-padding-horizontal: calc(var(--kbq-size-m) - var(--kbq-size-border-width));
103
+ --kbq-inline-edit-padding-horizontal: var(--kbq-size-m);
104
104
  }
105
105
 
106
106
  &.kbq-inline-edit_with-label {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@koobiq/components",
3
- "version": "19.2.0",
3
+ "version": "19.3.0",
4
4
  "description": "koobiq",
5
5
  "repository": {
6
6
  "type": "git",
@@ -21,12 +21,13 @@
21
21
  },
22
22
  "homepage": "https://github.com/koobiq/angular-components#readme",
23
23
  "peerDependencies": {
24
+ "@angular/animations": "^19.0.0",
24
25
  "@angular/cdk": "^19.0.0",
25
26
  "@angular/core": "^19.0.0",
26
27
  "@angular/forms": "^19.0.0",
27
- "@koobiq/cdk": "19.2.0",
28
- "@koobiq/angular-moment-adapter": "19.2.0",
29
- "@koobiq/angular-luxon-adapter": "19.2.0",
28
+ "@koobiq/cdk": "19.3.0",
29
+ "@koobiq/angular-moment-adapter": "19.3.0",
30
+ "@koobiq/angular-luxon-adapter": "19.3.0",
30
31
  "@koobiq/date-formatter": "^3.2.3",
31
32
  "@koobiq/icons": "^11.1.3",
32
33
  "@koobiq/tokens-builder": "3.11.0",
@@ -249,6 +250,10 @@
249
250
  "types": "./sidepanel/index.d.ts",
250
251
  "default": "./fesm2022/koobiq-components-sidepanel.mjs"
251
252
  },
253
+ "./skeleton": {
254
+ "types": "./skeleton/index.d.ts",
255
+ "default": "./fesm2022/koobiq-components-skeleton.mjs"
256
+ },
252
257
  "./split-button": {
253
258
  "types": "./split-button/index.d.ts",
254
259
  "default": "./fesm2022/koobiq-components-split-button.mjs"
@@ -18,7 +18,7 @@
18
18
  background: var(--kbq-popover-container-background);
19
19
  }
20
20
 
21
- .kbq-popover__close {
21
+ .kbq-popover__close.kbq-popover__close_background-overlay-inverse {
22
22
  background-color: var(--kbq-background-overlay-inverse);
23
23
  }
24
24
 
@@ -27,8 +27,8 @@ function ngAdd(options) {
27
27
  }
28
28
  // Installing dependencies
29
29
  utils_packageConfig.addPackageToPackageJson(tree, '@angular/cdk', "^19.2.19");
30
- utils_packageConfig.addPackageToPackageJson(tree, '@koobiq/cdk', "^19.2.0");
31
- utils_packageConfig.addPackageToPackageJson(tree, '@koobiq/angular-luxon-adapter', "^19.2.0");
30
+ utils_packageConfig.addPackageToPackageJson(tree, '@koobiq/cdk', "^19.3.0");
31
+ utils_packageConfig.addPackageToPackageJson(tree, '@koobiq/angular-luxon-adapter', "^19.3.0");
32
32
  utils_packageConfig.addPackageToPackageJson(tree, '@koobiq/date-formatter', "^3.4.0");
33
33
  utils_packageConfig.addPackageToPackageJson(tree, '@koobiq/date-adapter', "^3.4.0");
34
34
  utils_packageConfig.addPackageToPackageJson(tree, '@koobiq/icons', "^11.2.0");
@@ -249,8 +249,9 @@ export declare class KbqSelect extends KbqAbstractSelect implements AfterContent
249
249
  get focused(): boolean;
250
250
  set focused(value: boolean);
251
251
  panelOpen: boolean;
252
+ /** true if virtual scrolling is used. */
253
+ withVirtualScroll: boolean;
252
254
  private _focused;
253
- private withVirtualScroll;
254
255
  get isEmptySearchResult(): boolean;
255
256
  get canShowCleaner(): boolean;
256
257
  get selected(): KbqOptionBase | KbqOptionBase[];
@@ -0,0 +1,2 @@
1
+ export * from './module';
2
+ export * from './skeleton';
@@ -0,0 +1,7 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./skeleton";
3
+ export declare class KbqSkeletonModule {
4
+ static ɵfac: i0.ɵɵFactoryDeclaration<KbqSkeletonModule, never>;
5
+ static ɵmod: i0.ɵɵNgModuleDeclaration<KbqSkeletonModule, never, [typeof i1.KbqSkeleton], [typeof i1.KbqSkeleton]>;
6
+ static ɵinj: i0.ɵɵInjectorDeclaration<KbqSkeletonModule>;
7
+ }