@fundamental-ngx/core 0.33.3 → 0.33.4-rc.11

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 (174) hide show
  1. package/README.md +1 -3
  2. package/action-bar/package.json +1 -1
  3. package/action-sheet/package.json +1 -1
  4. package/alert/package.json +1 -1
  5. package/avatar/package.json +1 -1
  6. package/avatar-group/package.json +1 -1
  7. package/bar/package.json +1 -1
  8. package/breadcrumb/package.json +1 -1
  9. package/busy-indicator/package.json +1 -1
  10. package/button/package.json +1 -1
  11. package/calendar/package.json +1 -1
  12. package/card/package.json +1 -1
  13. package/carousel/package.json +1 -1
  14. package/checkbox/checkbox/checkbox.component.d.ts +30 -35
  15. package/checkbox/esm2020/checkbox/checkbox.component.mjs +61 -80
  16. package/checkbox/fesm2015/fundamental-ngx-core-checkbox.mjs +59 -77
  17. package/checkbox/fesm2015/fundamental-ngx-core-checkbox.mjs.map +1 -1
  18. package/checkbox/fesm2020/fundamental-ngx-core-checkbox.mjs +59 -77
  19. package/checkbox/fesm2020/fundamental-ngx-core-checkbox.mjs.map +1 -1
  20. package/checkbox/package.json +1 -1
  21. package/combobox/package.json +1 -1
  22. package/date-picker/package.json +1 -1
  23. package/datetime/package.json +1 -1
  24. package/datetime-picker/package.json +1 -1
  25. package/dialog/package.json +1 -1
  26. package/dynamic-page/package.json +1 -1
  27. package/dynamic-side-content/package.json +1 -1
  28. package/esm2020/checkbox/checkbox/checkbox.component.mjs +61 -80
  29. package/esm2020/list/list-item/list-item.component.mjs +6 -2
  30. package/esm2020/message-box/message-box-body/message-box-body.component.mjs +12 -10
  31. package/esm2020/message-box/message-box-footer/message-box-footer.component.mjs +12 -9
  32. package/esm2020/message-box/message-box-header/message-box-header.component.mjs +30 -16
  33. package/esm2020/message-box/message-box-semantic-icon/message-box-semantic-icon.component.mjs +12 -14
  34. package/esm2020/message-box/message-box.component.mjs +5 -15
  35. package/esm2020/message-box/utils/message-box-config.class.mjs +3 -2
  36. package/esm2020/multi-input/multi-input.component.mjs +38 -11
  37. package/esm2020/upload-collection/upload-collection-item.directive.mjs +81 -8
  38. package/esm2020/utils/helpers/range-selector.mjs +113 -0
  39. package/esm2020/utils/public_api.mjs +2 -1
  40. package/facets/package.json +1 -1
  41. package/feed-input/package.json +1 -1
  42. package/feed-list-item/package.json +1 -1
  43. package/fesm2015/fundamental-ngx-core-checkbox.mjs +59 -77
  44. package/fesm2015/fundamental-ngx-core-checkbox.mjs.map +1 -1
  45. package/fesm2015/fundamental-ngx-core-list.mjs +5 -1
  46. package/fesm2015/fundamental-ngx-core-list.mjs.map +1 -1
  47. package/fesm2015/fundamental-ngx-core-message-box.mjs +67 -56
  48. package/fesm2015/fundamental-ngx-core-message-box.mjs.map +1 -1
  49. package/fesm2015/fundamental-ngx-core-multi-input.mjs +40 -11
  50. package/fesm2015/fundamental-ngx-core-multi-input.mjs.map +1 -1
  51. package/fesm2015/fundamental-ngx-core-upload-collection.mjs +80 -7
  52. package/fesm2015/fundamental-ngx-core-upload-collection.mjs.map +1 -1
  53. package/fesm2015/fundamental-ngx-core-utils.mjs +114 -1
  54. package/fesm2015/fundamental-ngx-core-utils.mjs.map +1 -1
  55. package/fesm2020/fundamental-ngx-core-checkbox.mjs +59 -77
  56. package/fesm2020/fundamental-ngx-core-checkbox.mjs.map +1 -1
  57. package/fesm2020/fundamental-ngx-core-list.mjs +5 -1
  58. package/fesm2020/fundamental-ngx-core-list.mjs.map +1 -1
  59. package/fesm2020/fundamental-ngx-core-message-box.mjs +62 -55
  60. package/fesm2020/fundamental-ngx-core-message-box.mjs.map +1 -1
  61. package/fesm2020/fundamental-ngx-core-multi-input.mjs +38 -11
  62. package/fesm2020/fundamental-ngx-core-multi-input.mjs.map +1 -1
  63. package/fesm2020/fundamental-ngx-core-upload-collection.mjs +80 -7
  64. package/fesm2020/fundamental-ngx-core-upload-collection.mjs.map +1 -1
  65. package/fesm2020/fundamental-ngx-core-utils.mjs +114 -1
  66. package/fesm2020/fundamental-ngx-core-utils.mjs.map +1 -1
  67. package/file-uploader/package.json +1 -1
  68. package/fixed-card-layout/package.json +1 -1
  69. package/flexible-column-layout/package.json +1 -1
  70. package/form/package.json +1 -1
  71. package/formatted-text/package.json +1 -1
  72. package/grid-list/package.json +1 -1
  73. package/icon/package.json +1 -1
  74. package/illustrated-message/package.json +1 -1
  75. package/infinite-scroll/package.json +1 -1
  76. package/info-label/package.json +1 -1
  77. package/inline-help/package.json +1 -1
  78. package/input-group/package.json +1 -1
  79. package/layout-grid/package.json +1 -1
  80. package/layout-panel/package.json +1 -1
  81. package/link/package.json +1 -1
  82. package/list/esm2020/list-item/list-item.component.mjs +6 -2
  83. package/list/fesm2015/fundamental-ngx-core-list.mjs +5 -1
  84. package/list/fesm2015/fundamental-ngx-core-list.mjs.map +1 -1
  85. package/list/fesm2020/fundamental-ngx-core-list.mjs +5 -1
  86. package/list/fesm2020/fundamental-ngx-core-list.mjs.map +1 -1
  87. package/list/package.json +1 -1
  88. package/menu/package.json +1 -1
  89. package/message-box/esm2020/message-box-body/message-box-body.component.mjs +12 -10
  90. package/message-box/esm2020/message-box-footer/message-box-footer.component.mjs +12 -9
  91. package/message-box/esm2020/message-box-header/message-box-header.component.mjs +30 -16
  92. package/message-box/esm2020/message-box-semantic-icon/message-box-semantic-icon.component.mjs +12 -14
  93. package/message-box/esm2020/message-box.component.mjs +5 -15
  94. package/message-box/esm2020/utils/message-box-config.class.mjs +3 -2
  95. package/message-box/fesm2015/fundamental-ngx-core-message-box.mjs +67 -56
  96. package/message-box/fesm2015/fundamental-ngx-core-message-box.mjs.map +1 -1
  97. package/message-box/fesm2020/fundamental-ngx-core-message-box.mjs +62 -55
  98. package/message-box/fesm2020/fundamental-ngx-core-message-box.mjs.map +1 -1
  99. package/message-box/message-box-body/message-box-body.component.d.ts +6 -4
  100. package/message-box/message-box-footer/message-box-footer.component.d.ts +6 -4
  101. package/message-box/message-box-header/message-box-header.component.d.ts +16 -8
  102. package/message-box/message-box-semantic-icon/message-box-semantic-icon.component.d.ts +6 -4
  103. package/message-box/message-box.component.d.ts +4 -9
  104. package/message-box/package.json +1 -1
  105. package/message-box/utils/message-box-config.class.d.ts +2 -4
  106. package/message-strip/package.json +1 -1
  107. package/message-toast/package.json +1 -1
  108. package/micro-process-flow/package.json +1 -1
  109. package/mobile-mode/package.json +1 -1
  110. package/multi-input/esm2020/multi-input.component.mjs +38 -11
  111. package/multi-input/fesm2015/fundamental-ngx-core-multi-input.mjs +40 -11
  112. package/multi-input/fesm2015/fundamental-ngx-core-multi-input.mjs.map +1 -1
  113. package/multi-input/fesm2020/fundamental-ngx-core-multi-input.mjs +38 -11
  114. package/multi-input/fesm2020/fundamental-ngx-core-multi-input.mjs.map +1 -1
  115. package/multi-input/multi-input.component.d.ts +8 -1
  116. package/multi-input/package.json +1 -1
  117. package/nested-list/package.json +1 -1
  118. package/notification/package.json +1 -1
  119. package/object-identifier/package.json +1 -1
  120. package/object-marker/package.json +1 -1
  121. package/object-number/package.json +1 -1
  122. package/object-status/package.json +1 -1
  123. package/package.json +1 -1
  124. package/pagination/package.json +1 -1
  125. package/panel/package.json +1 -1
  126. package/popover/package.json +1 -1
  127. package/product-switch/package.json +1 -1
  128. package/progress-indicator/package.json +1 -1
  129. package/quick-view/package.json +1 -1
  130. package/radio/package.json +1 -1
  131. package/rating-indicator/package.json +1 -1
  132. package/resizable-card-layout/package.json +1 -1
  133. package/scroll-spy/package.json +1 -1
  134. package/scrollbar/package.json +1 -1
  135. package/segmented-button/package.json +1 -1
  136. package/select/package.json +1 -1
  137. package/shared/package.json +1 -1
  138. package/shellbar/package.json +1 -1
  139. package/side-navigation/package.json +1 -1
  140. package/slider/package.json +1 -1
  141. package/split-button/package.json +1 -1
  142. package/splitter/package.json +1 -1
  143. package/status-indicator/package.json +1 -1
  144. package/step-input/package.json +1 -1
  145. package/switch/package.json +1 -1
  146. package/table/package.json +1 -1
  147. package/tabs/package.json +1 -1
  148. package/text/package.json +1 -1
  149. package/tile/package.json +1 -1
  150. package/time/package.json +1 -1
  151. package/time-picker/package.json +1 -1
  152. package/timeline/package.json +1 -1
  153. package/title/package.json +1 -1
  154. package/token/package.json +1 -1
  155. package/toolbar/package.json +1 -1
  156. package/tree/package.json +1 -1
  157. package/upload-collection/esm2020/upload-collection-item.directive.mjs +81 -8
  158. package/upload-collection/fesm2015/fundamental-ngx-core-upload-collection.mjs +80 -7
  159. package/upload-collection/fesm2015/fundamental-ngx-core-upload-collection.mjs.map +1 -1
  160. package/upload-collection/fesm2020/fundamental-ngx-core-upload-collection.mjs +80 -7
  161. package/upload-collection/fesm2020/fundamental-ngx-core-upload-collection.mjs.map +1 -1
  162. package/upload-collection/package.json +1 -1
  163. package/upload-collection/upload-collection-item.directive.d.ts +32 -2
  164. package/utils/esm2020/helpers/range-selector.mjs +113 -0
  165. package/utils/esm2020/public_api.mjs +2 -1
  166. package/utils/fesm2015/fundamental-ngx-core-utils.mjs +114 -1
  167. package/utils/fesm2015/fundamental-ngx-core-utils.mjs.map +1 -1
  168. package/utils/fesm2020/fundamental-ngx-core-utils.mjs +114 -1
  169. package/utils/fesm2020/fundamental-ngx-core-utils.mjs.map +1 -1
  170. package/utils/helpers/range-selector.d.ts +84 -0
  171. package/utils/package.json +1 -1
  172. package/utils/public_api.d.ts +1 -0
  173. package/vertical-navigation/package.json +1 -1
  174. package/wizard/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Directive, ContentChildren, HostBinding, Component, ViewEncapsulation, ChangeDetectionStrategy, Input, EventEmitter, Output, ViewChild, ContentChild, NgModule } from '@angular/core';
2
+ import { Directive, ContentChildren, HostBinding, Component, ViewEncapsulation, ChangeDetectionStrategy, Input, EventEmitter, Output, ViewChild, ContentChild, HostListener, NgModule } from '@angular/core';
3
3
  import * as i2 from '@angular/common';
4
4
  import { CommonModule } from '@angular/common';
5
5
  import { ObjectMarkerComponent } from '@fundamental-ngx/core/object-marker';
@@ -274,7 +274,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.2", ngImpor
274
274
  }] } });
275
275
 
276
276
  class UploadCollectionItemDirective {
277
- constructor() {
277
+ constructor(elementRef) {
278
+ this.elementRef = elementRef;
278
279
  /** Event emitted when the user changes a file name. */
279
280
  this.fileNameChanged = new EventEmitter();
280
281
  /** Event emitted when presses the delete button. */
@@ -284,23 +285,52 @@ class UploadCollectionItemDirective {
284
285
  }
285
286
  /** @hidden */
286
287
  ngAfterContentInit() {
287
- this._titleDirective.elRef.nativeElement.innerHTML = this.fileName + '.' + this.extension;
288
+ this.fileNameFull = this.fileName + '.' + this.extension;
289
+ this._titleDirective.elRef.nativeElement.innerHTML = this.fileNameFull;
288
290
  this._handleDeleteClickedSubscription();
289
291
  this._handleOkClickedSubscription();
290
292
  this._handleEditClickedSubscription();
291
293
  this._handleFormItemInputChangedSubscription();
292
294
  }
293
295
  /** @hidden */
296
+ ngAfterViewInit() {
297
+ this.onResize();
298
+ }
299
+ /** @hidden */
294
300
  ngOnDestroy() {
295
301
  this._subscriptions.unsubscribe();
296
302
  }
297
303
  /** @hidden */
304
+ onResize() {
305
+ if (!this.elementRef.nativeElement.parentElement) {
306
+ return;
307
+ }
308
+ this.titleWidth = this.getTitleWidth();
309
+ this.containerWidth = this.getContainerWidth();
310
+ // if first load and no previous container width, or if container boundary is resized to smaller than before
311
+ if (!this.previousContainerWidth || this.containerWidth < this.previousContainerWidth) {
312
+ // and the title extends past the container, 1.05x padding to prevent jaggy resizing.
313
+ if (this.titleWidth * 1.05 >= this.containerWidth) {
314
+ this.resizeFileTitle(this._titleDirective.elRef.nativeElement.innerHTML);
315
+ }
316
+ }
317
+ else if (this.previousContainerWidth && this.containerWidth > this.previousContainerWidth) {
318
+ // Looks to expand file title if container width is resized to greater than before
319
+ // reset file title to initial
320
+ this._titleDirective.elRef.nativeElement.innerHTML = this.fileNameFull;
321
+ this.resizeFileTitle(this.fileNameFull);
322
+ }
323
+ this.previousContainerWidth = this.containerWidth;
324
+ }
325
+ /** @hidden */
298
326
  _handleOkClickedSubscription() {
299
327
  this._subscriptions.add(this._buttonGroupComponent.okClicked.subscribe(() => {
300
328
  if (this._formItemComponent.fileName && this._formItemComponent.fileName !== '') {
301
329
  this.fileName = this._formItemComponent.fileName;
302
330
  this._titleDirective.elRef.nativeElement.style.display = 'inline-block';
303
- this._titleDirective.elRef.nativeElement.innerHTML = this.fileName + '.' + this.extension;
331
+ this.fileNameFull = this.fileName + '.' + this.extension;
332
+ this._titleDirective.elRef.nativeElement.innerHTML = this.fileNameFull;
333
+ this.resizeFileTitle(this.fileNameFull);
304
334
  this._formItemComponent._editMode = false;
305
335
  this._buttonGroupComponent._editMode = false;
306
336
  this.fileNameChanged.emit(this);
@@ -342,9 +372,49 @@ class UploadCollectionItemDirective {
342
372
  this._buttonGroupComponent._okButton.buildComponentCssClass();
343
373
  }));
344
374
  }
375
+ /** @hidden */
376
+ getTitleWidth() {
377
+ return this._titleDirective.elRef.nativeElement.getBoundingClientRect().width;
378
+ }
379
+ /** @hidden */
380
+ getContainerWidth() {
381
+ return this._titleDirective.elRef.nativeElement.parentElement.getBoundingClientRect().width;
382
+ }
383
+ /**
384
+ * @hidden
385
+ *
386
+ * truncates the string by cutting out excess length in the middle and replacing with '...'
387
+ */
388
+ truncateTitle(str) {
389
+ const cutLength = Math.floor(str.length * 0.8);
390
+ if (str.length > cutLength) {
391
+ const stringLeftIndex = Math.floor(cutLength / 2);
392
+ const stringRightIndex = str.length - stringLeftIndex + 3;
393
+ return str.substring(0, stringLeftIndex) + '... ' + str.substring(stringRightIndex, str.length);
394
+ }
395
+ return str;
396
+ }
397
+ /**
398
+ * @hidden
399
+ *
400
+ * determines if file title needs to be truncated given container constraint.
401
+ */
402
+ resizeFileTitle(titleStr) {
403
+ let curTitle = titleStr;
404
+ this.containerWidth = this.getContainerWidth();
405
+ this.titleWidth = this.getTitleWidth();
406
+ // repeatedly truncate the title until it fits inside container
407
+ while (this.titleWidth * 1.05 >= this.containerWidth) {
408
+ const truncatedTitleStr = this.truncateTitle(curTitle);
409
+ this._titleDirective.elRef.nativeElement.innerHTML = truncatedTitleStr;
410
+ curTitle = truncatedTitleStr;
411
+ this.titleWidth = this.getTitleWidth();
412
+ this.containerWidth = this.getContainerWidth();
413
+ }
414
+ }
345
415
  }
346
- UploadCollectionItemDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: UploadCollectionItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
347
- UploadCollectionItemDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.2", type: UploadCollectionItemDirective, selector: "[fd-upload-collection-item]", inputs: { fileName: "fileName", extension: "extension" }, outputs: { fileNameChanged: "fileNameChanged", deleteClicked: "deleteClicked" }, host: { classAttribute: "fd-upload-collection__item" }, queries: [{ propertyName: "_formItemComponent", first: true, predicate: UploadCollectionFormItemComponent, descendants: true }, { propertyName: "_titleDirective", first: true, predicate: UploadCollectionTitleDirective, descendants: true }, { propertyName: "_buttonGroupComponent", first: true, predicate: UploadCollectionButtonGroupComponent, descendants: true }, { propertyName: "_titleContainerDirective", first: true, predicate: UploadCollectionTitleContainerDirective, descendants: true }], ngImport: i0 });
416
+ UploadCollectionItemDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: UploadCollectionItemDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
417
+ UploadCollectionItemDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.2", type: UploadCollectionItemDirective, selector: "[fd-upload-collection-item]", inputs: { fileName: "fileName", extension: "extension" }, outputs: { fileNameChanged: "fileNameChanged", deleteClicked: "deleteClicked" }, host: { listeners: { "window:resize": "onResize()" }, classAttribute: "fd-upload-collection__item" }, queries: [{ propertyName: "_formItemComponent", first: true, predicate: UploadCollectionFormItemComponent, descendants: true }, { propertyName: "_titleDirective", first: true, predicate: UploadCollectionTitleDirective, descendants: true }, { propertyName: "_buttonGroupComponent", first: true, predicate: UploadCollectionButtonGroupComponent, descendants: true }, { propertyName: "_titleContainerDirective", first: true, predicate: UploadCollectionTitleContainerDirective, descendants: true }], ngImport: i0 });
348
418
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: UploadCollectionItemDirective, decorators: [{
349
419
  type: Directive,
350
420
  args: [{
@@ -352,7 +422,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.2", ngImpor
352
422
  selector: '[fd-upload-collection-item]',
353
423
  host: { class: 'fd-upload-collection__item' }
354
424
  }]
355
- }], propDecorators: { fileName: [{
425
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { fileName: [{
356
426
  type: Input
357
427
  }], extension: [{
358
428
  type: Input
@@ -372,6 +442,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.2", ngImpor
372
442
  type: Output
373
443
  }], deleteClicked: [{
374
444
  type: Output
445
+ }], onResize: [{
446
+ type: HostListener,
447
+ args: ['window:resize', []]
375
448
  }] } });
376
449
 
377
450
  class UploadCollectionModule {
@@ -1 +1 @@
1
- {"version":3,"file":"fundamental-ngx-core-upload-collection.mjs","sources":["../../../../libs/core/src/lib/upload-collection/upload-collection-simple.directives.ts","../../../../libs/core/src/lib/upload-collection/upload-collection.component.ts","../../../../libs/core/src/lib/upload-collection/upload-collection-button-group/upload-collection-button-group.component.ts","../../../../libs/core/src/lib/upload-collection/upload-collection-button-group/upload-collection-button-group.component.html","../../../../libs/core/src/lib/upload-collection/upload-collection-form-item/upload-collection-form-item.component.ts","../../../../libs/core/src/lib/upload-collection/upload-collection-form-item/upload-collection-form-item.component.html","../../../../libs/core/src/lib/upload-collection/upload-collection-item.directive.ts","../../../../libs/core/src/lib/upload-collection/upload-collection.module.ts","../../../../libs/core/src/lib/upload-collection/fundamental-ngx-core-upload-collection.ts"],"sourcesContent":["import { ContentChildren, Directive, ElementRef, HostBinding, QueryList } from '@angular/core';\nimport { ObjectMarkerComponent } from '@fundamental-ngx/core/object-marker';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-upload-collection-thumbnail]',\n host: { class: 'fd-upload-collection__thumbnail' }\n})\nexport class UploadCollectionThumbnailDirective {}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-upload-collection-title]',\n host: { class: 'fd-upload-collection__title' }\n})\nexport class UploadCollectionTitleDirective {\n constructor(public elRef: ElementRef) {}\n}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-upload-collection-description]',\n host: { class: 'fd-upload-collection__description' }\n})\nexport class UploadCollectionDescriptionDirective {}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-upload-collection-text-separator], fd-upload-collection-text-separator',\n host: { class: 'fd-upload-collection__text-separator' }\n})\nexport class UploadCollectionTextSeparatorDirective {}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-upload-collection-status-group]',\n host: { class: 'fd-upload-collection__status-group' }\n})\nexport class UploadCollectionStatusGroupDirective {}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-upload-collection-title-container]'\n})\nexport class UploadCollectionTitleContainerDirective {\n /** @hidden */\n @ContentChildren(ObjectMarkerComponent)\n _objectMarkerComponents: QueryList<ObjectMarkerComponent>;\n\n /** Whether or not this is in edit mode. */\n @HostBinding('class.fd-upload-collection__title-container')\n applyContainerClass = true;\n}\n","import { ChangeDetectionStrategy, Component, HostBinding, Input, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'fd-upload-collection',\n host: { class: 'fd-upload-collection' },\n styleUrls: ['./upload-collection.component.scss'],\n template: `<ul fd-list [byline]=\"true\" [selection]=\"selection\">\n <ng-content></ng-content>\n </ul>`,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class UploadCollectionComponent {\n /** Whether or not this is the small upload collection. */\n @Input()\n @HostBinding('class.fd-upload-collection--sm')\n small = false;\n\n /** Whether or not this upload collection supports selection. */\n @Input()\n selection = false;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\n\n@Component({\n selector: 'fd-upload-collection-button-group',\n host: { class: 'fd-upload-collection__button-group' },\n templateUrl: './upload-collection-button-group.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class UploadCollectionButtonGroupComponent {\n /** @hidden */\n _editMode = false;\n\n /** Event emitted when the user clicks the edit button. */\n @Output()\n readonly editClicked = new EventEmitter<boolean>();\n\n /** Event emitted when the user clicks the OK button to conform a file name change. */\n @Output()\n readonly okClicked = new EventEmitter<any>();\n\n /** Event emitted when the user clicks the delete button. */\n @Output()\n readonly deleteClicked = new EventEmitter<any>();\n\n /** Whether or not to allow file name editing. Default is true. */\n @Input()\n allowFileNameEdit = true;\n\n /** Whether or not to show the delete button. Default is true. */\n @Input()\n allowFileDeletion = true;\n\n /** Whether or not to disable the file name edit button. Default is false. */\n @Input()\n disableFileNameEdit = false;\n\n /** Whether or not to disable the delete button. Default is false. */\n @Input()\n disableFileDeletion = false;\n\n /** Text for the 'Ok' button. */\n @Input()\n okText = 'Ok';\n\n /** Text for the 'Cancel' button. */\n @Input()\n cancelText = 'Cancel';\n\n /** Text for the 'Edit' aria-label. */\n @Input()\n editAriaLabel = 'Edit';\n\n /** Text for the 'Delete' aria-label. */\n @Input()\n deleteAriaLabel = 'Delete';\n\n /** Text for the 'Ok' aria-label. */\n @Input()\n okAriaLabel = 'Edit';\n\n /** Text for the 'Cancel' aria-label. */\n @Input()\n cancelAriaLabel = 'Cancel';\n\n /** @hidden */\n @ViewChild('okButton')\n _okButton: ButtonComponent;\n\n /** @hidden */\n _editButtonClicked(event?: MouseEvent): void {\n if (event) {\n event.stopPropagation();\n }\n this.editClicked.emit(true);\n this._editMode = true;\n }\n\n /** @hidden */\n _deleteButtonClicked(event?: MouseEvent): void {\n if (event) {\n event.stopPropagation();\n }\n this.deleteClicked.emit();\n }\n\n /** @hidden */\n _okButtonClicked(event?: MouseEvent): void {\n if (event) {\n event.stopPropagation();\n }\n this.okClicked.emit();\n }\n\n /** @hidden */\n _cancelButtonClicked(event?: MouseEvent): void {\n if (event) {\n event.stopPropagation();\n }\n this.editClicked.emit(false);\n this._editMode = false;\n }\n}\n","<button\n *ngIf=\"!_editMode && allowFileNameEdit\"\n [disabled]=\"disableFileNameEdit\"\n (click)=\"_editButtonClicked($event)\"\n fd-button\n fdType=\"transparent\"\n glyph=\"edit\"\n [attr.aria-label]=\"editAriaLabel\"\n></button>\n<button\n *ngIf=\"!_editMode && allowFileDeletion\"\n [disabled]=\"disableFileDeletion\"\n (click)=\"_deleteButtonClicked($event)\"\n fd-button\n fdType=\"transparent\"\n glyph=\"decline\"\n [attr.aria-label]=\"deleteAriaLabel\"\n></button>\n<button\n #okButton\n [style.display]=\"_editMode ? 'inline-flex' : 'none'\"\n (click)=\"_okButtonClicked($event)\"\n fd-button\n fdType=\"transparent\"\n [attr.aria-label]=\"okAriaLabel\"\n>\n {{ okText }}\n</button>\n<button\n *ngIf=\"_editMode\"\n (click)=\"_cancelButtonClicked($event)\"\n fd-button\n fdType=\"transparent\"\n [attr.aria-label]=\"cancelAriaLabel\"\n>\n {{ cancelText }}\n</button>\n","import { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\nimport { ControlValueAccessor } from '@angular/forms';\n\n@Component({\n selector: 'fd-upload-collection-form-item',\n host: { class: 'fd-upload-collection__form-item' },\n templateUrl: './upload-collection-form-item.component.html',\n encapsulation: ViewEncapsulation.None\n})\nexport class UploadCollectionFormItemComponent implements ControlValueAccessor {\n /** Value for the input's placeholder. */\n @Input()\n placeholder = 'Filename';\n\n /** @hidden */\n @Input()\n _editMode = false;\n\n /** @hidden */\n _fileNameValue: string;\n\n /** @hidden */\n _extension: string;\n\n /** Event emitted when the dragged file exits the dropzone. */\n @Output()\n readonly fileNameChanged = new EventEmitter<string>();\n\n /** Get the value of the text input. */\n get fileName(): string {\n return this._fileNameValue;\n }\n\n /** Set the value of the text input. */\n set fileName(value) {\n this._fileNameValue = value;\n this.onChange(value);\n this.onTouched();\n this.fileNameChanged.emit(value);\n }\n\n /** @hidden */\n onChange: (value: string) => void = () => {};\n\n /** @hidden */\n onTouched = (): void => {};\n\n /** @hidden */\n writeValue(value: string): void {\n this.fileName = value;\n }\n\n /** @hidden */\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n /** @hidden */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n}\n","<input\n *ngIf=\"_editMode\"\n fd-form-control\n required\n style=\"pointer-events: all\"\n class=\"fd-input\"\n type=\"text\"\n [attr.placeholder]=\"placeholder\"\n [(ngModel)]=\"fileName\"\n [state]=\"!fileName ? 'error' : null\"\n (click)=\"$event.stopPropagation()\"\n/>\n<span *ngIf=\"_editMode\" class=\"fd-upload-collection__extension\">.{{ _extension }}</span>\n","import { AfterContentInit, ContentChild, Directive, EventEmitter, Input, OnDestroy, Output } from '@angular/core';\nimport { UploadCollectionFormItemComponent } from './upload-collection-form-item/upload-collection-form-item.component';\nimport { UploadCollectionButtonGroupComponent } from './upload-collection-button-group/upload-collection-button-group.component';\nimport { Subscription } from 'rxjs';\nimport {\n UploadCollectionTitleContainerDirective,\n UploadCollectionTitleDirective\n} from './upload-collection-simple.directives';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-upload-collection-item]',\n host: { class: 'fd-upload-collection__item' }\n})\nexport class UploadCollectionItemDirective implements AfterContentInit, OnDestroy {\n /** The name of the file, not including the type extension. */\n @Input()\n fileName: string;\n\n /** The file type extension. */\n @Input()\n extension: string;\n\n /** @hidden */\n @ContentChild(UploadCollectionFormItemComponent)\n _formItemComponent: UploadCollectionFormItemComponent;\n\n /** @hidden */\n @ContentChild(UploadCollectionTitleDirective)\n _titleDirective: UploadCollectionTitleDirective;\n\n /** @hidden */\n @ContentChild(UploadCollectionButtonGroupComponent)\n _buttonGroupComponent: UploadCollectionButtonGroupComponent;\n\n /** @hidden */\n @ContentChild(UploadCollectionTitleContainerDirective)\n _titleContainerDirective: UploadCollectionTitleContainerDirective;\n\n /** Event emitted when the user changes a file name. */\n @Output()\n readonly fileNameChanged = new EventEmitter<any>();\n\n /** Event emitted when presses the delete button. */\n @Output()\n readonly deleteClicked = new EventEmitter<any>();\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n /** @hidden */\n ngAfterContentInit(): void {\n this._titleDirective.elRef.nativeElement.innerHTML = this.fileName + '.' + this.extension;\n this._handleDeleteClickedSubscription();\n this._handleOkClickedSubscription();\n this._handleEditClickedSubscription();\n this._handleFormItemInputChangedSubscription();\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n /** @hidden */\n private _handleOkClickedSubscription(): void {\n this._subscriptions.add(\n this._buttonGroupComponent.okClicked.subscribe(() => {\n if (this._formItemComponent.fileName && this._formItemComponent.fileName !== '') {\n this.fileName = this._formItemComponent.fileName;\n this._titleDirective.elRef.nativeElement.style.display = 'inline-block';\n this._titleDirective.elRef.nativeElement.innerHTML = this.fileName + '.' + this.extension;\n this._formItemComponent._editMode = false;\n this._buttonGroupComponent._editMode = false;\n this.fileNameChanged.emit(this);\n }\n })\n );\n }\n\n /** @hidden */\n private _handleEditClickedSubscription(): void {\n this._subscriptions.add(\n this._buttonGroupComponent.editClicked.subscribe((event) => {\n this._formItemComponent._editMode = event;\n if (this._titleContainerDirective) {\n this._titleContainerDirective.applyContainerClass = !event;\n }\n const styles = [];\n styles.push(this._titleDirective.elRef.nativeElement.style);\n this._titleContainerDirective?._objectMarkerComponents?.forEach((objectMarker) => {\n styles.push(objectMarker.elementRef().nativeElement.style);\n });\n event\n ? styles.forEach((style) => (style.display = 'none'))\n : styles.forEach((style) => (style.display = 'inline-block'));\n if (event) {\n this._formItemComponent._extension = this.extension;\n this._formItemComponent.fileName = this.fileName;\n }\n })\n );\n }\n\n /** @hidden */\n private _handleDeleteClickedSubscription(): void {\n this._subscriptions.add(\n this._buttonGroupComponent.deleteClicked.subscribe(() => {\n this.deleteClicked.emit(this);\n })\n );\n }\n\n /** @hidden */\n private _handleFormItemInputChangedSubscription(): void {\n this._subscriptions.add(\n this._formItemComponent.fileNameChanged.subscribe((event) => {\n this._buttonGroupComponent._okButton.disabled = event === '';\n this._buttonGroupComponent._okButton.buildComponentCssClass();\n })\n );\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n UploadCollectionDescriptionDirective,\n UploadCollectionStatusGroupDirective,\n UploadCollectionTextSeparatorDirective,\n UploadCollectionThumbnailDirective,\n UploadCollectionTitleContainerDirective,\n UploadCollectionTitleDirective\n} from './upload-collection-simple.directives';\nimport { ListModule } from '@fundamental-ngx/core/list';\nimport { UploadCollectionComponent } from './upload-collection.component';\nimport { UploadCollectionButtonGroupComponent } from './upload-collection-button-group/upload-collection-button-group.component';\nimport { ButtonModule } from '@fundamental-ngx/core/button';\nimport { UploadCollectionFormItemComponent } from './upload-collection-form-item/upload-collection-form-item.component';\nimport { LinkModule } from '@fundamental-ngx/core/link';\nimport { FormsModule } from '@angular/forms';\nimport { FormControlModule } from '@fundamental-ngx/core/form';\nimport { UploadCollectionItemDirective } from './upload-collection-item.directive';\n\n@NgModule({\n declarations: [\n UploadCollectionComponent,\n UploadCollectionItemDirective,\n UploadCollectionThumbnailDirective,\n UploadCollectionTitleDirective,\n UploadCollectionDescriptionDirective,\n UploadCollectionTextSeparatorDirective,\n UploadCollectionStatusGroupDirective,\n UploadCollectionButtonGroupComponent,\n UploadCollectionFormItemComponent,\n UploadCollectionTitleContainerDirective\n ],\n imports: [CommonModule, ListModule, ButtonModule, LinkModule, FormsModule, FormControlModule],\n exports: [\n UploadCollectionComponent,\n UploadCollectionItemDirective,\n UploadCollectionThumbnailDirective,\n UploadCollectionTitleDirective,\n UploadCollectionDescriptionDirective,\n UploadCollectionTextSeparatorDirective,\n UploadCollectionStatusGroupDirective,\n UploadCollectionButtonGroupComponent,\n UploadCollectionFormItemComponent,\n UploadCollectionTitleContainerDirective\n ]\n})\nexport class UploadCollectionModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fundamental-ngx-core-upload-collection.mjs","sources":["../../../../libs/core/src/lib/upload-collection/upload-collection-simple.directives.ts","../../../../libs/core/src/lib/upload-collection/upload-collection.component.ts","../../../../libs/core/src/lib/upload-collection/upload-collection-button-group/upload-collection-button-group.component.ts","../../../../libs/core/src/lib/upload-collection/upload-collection-button-group/upload-collection-button-group.component.html","../../../../libs/core/src/lib/upload-collection/upload-collection-form-item/upload-collection-form-item.component.ts","../../../../libs/core/src/lib/upload-collection/upload-collection-form-item/upload-collection-form-item.component.html","../../../../libs/core/src/lib/upload-collection/upload-collection-item.directive.ts","../../../../libs/core/src/lib/upload-collection/upload-collection.module.ts","../../../../libs/core/src/lib/upload-collection/fundamental-ngx-core-upload-collection.ts"],"sourcesContent":["import { ContentChildren, Directive, ElementRef, HostBinding, QueryList } from '@angular/core';\nimport { ObjectMarkerComponent } from '@fundamental-ngx/core/object-marker';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-upload-collection-thumbnail]',\n host: { class: 'fd-upload-collection__thumbnail' }\n})\nexport class UploadCollectionThumbnailDirective {}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-upload-collection-title]',\n host: { class: 'fd-upload-collection__title' }\n})\nexport class UploadCollectionTitleDirective {\n constructor(public elRef: ElementRef) {}\n}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-upload-collection-description]',\n host: { class: 'fd-upload-collection__description' }\n})\nexport class UploadCollectionDescriptionDirective {}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-upload-collection-text-separator], fd-upload-collection-text-separator',\n host: { class: 'fd-upload-collection__text-separator' }\n})\nexport class UploadCollectionTextSeparatorDirective {}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-upload-collection-status-group]',\n host: { class: 'fd-upload-collection__status-group' }\n})\nexport class UploadCollectionStatusGroupDirective {}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-upload-collection-title-container]'\n})\nexport class UploadCollectionTitleContainerDirective {\n /** @hidden */\n @ContentChildren(ObjectMarkerComponent)\n _objectMarkerComponents: QueryList<ObjectMarkerComponent>;\n\n /** Whether or not this is in edit mode. */\n @HostBinding('class.fd-upload-collection__title-container')\n applyContainerClass = true;\n}\n","import { ChangeDetectionStrategy, Component, HostBinding, Input, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'fd-upload-collection',\n host: { class: 'fd-upload-collection' },\n styleUrls: ['./upload-collection.component.scss'],\n template: `<ul fd-list [byline]=\"true\" [selection]=\"selection\">\n <ng-content></ng-content>\n </ul>`,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class UploadCollectionComponent {\n /** Whether or not this is the small upload collection. */\n @Input()\n @HostBinding('class.fd-upload-collection--sm')\n small = false;\n\n /** Whether or not this upload collection supports selection. */\n @Input()\n selection = false;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\n\n@Component({\n selector: 'fd-upload-collection-button-group',\n host: { class: 'fd-upload-collection__button-group' },\n templateUrl: './upload-collection-button-group.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class UploadCollectionButtonGroupComponent {\n /** @hidden */\n _editMode = false;\n\n /** Event emitted when the user clicks the edit button. */\n @Output()\n readonly editClicked = new EventEmitter<boolean>();\n\n /** Event emitted when the user clicks the OK button to conform a file name change. */\n @Output()\n readonly okClicked = new EventEmitter<any>();\n\n /** Event emitted when the user clicks the delete button. */\n @Output()\n readonly deleteClicked = new EventEmitter<any>();\n\n /** Whether or not to allow file name editing. Default is true. */\n @Input()\n allowFileNameEdit = true;\n\n /** Whether or not to show the delete button. Default is true. */\n @Input()\n allowFileDeletion = true;\n\n /** Whether or not to disable the file name edit button. Default is false. */\n @Input()\n disableFileNameEdit = false;\n\n /** Whether or not to disable the delete button. Default is false. */\n @Input()\n disableFileDeletion = false;\n\n /** Text for the 'Ok' button. */\n @Input()\n okText = 'Ok';\n\n /** Text for the 'Cancel' button. */\n @Input()\n cancelText = 'Cancel';\n\n /** Text for the 'Edit' aria-label. */\n @Input()\n editAriaLabel = 'Edit';\n\n /** Text for the 'Delete' aria-label. */\n @Input()\n deleteAriaLabel = 'Delete';\n\n /** Text for the 'Ok' aria-label. */\n @Input()\n okAriaLabel = 'Edit';\n\n /** Text for the 'Cancel' aria-label. */\n @Input()\n cancelAriaLabel = 'Cancel';\n\n /** @hidden */\n @ViewChild('okButton')\n _okButton: ButtonComponent;\n\n /** @hidden */\n _editButtonClicked(event?: MouseEvent): void {\n if (event) {\n event.stopPropagation();\n }\n this.editClicked.emit(true);\n this._editMode = true;\n }\n\n /** @hidden */\n _deleteButtonClicked(event?: MouseEvent): void {\n if (event) {\n event.stopPropagation();\n }\n this.deleteClicked.emit();\n }\n\n /** @hidden */\n _okButtonClicked(event?: MouseEvent): void {\n if (event) {\n event.stopPropagation();\n }\n this.okClicked.emit();\n }\n\n /** @hidden */\n _cancelButtonClicked(event?: MouseEvent): void {\n if (event) {\n event.stopPropagation();\n }\n this.editClicked.emit(false);\n this._editMode = false;\n }\n}\n","<button\n *ngIf=\"!_editMode && allowFileNameEdit\"\n [disabled]=\"disableFileNameEdit\"\n (click)=\"_editButtonClicked($event)\"\n fd-button\n fdType=\"transparent\"\n glyph=\"edit\"\n [attr.aria-label]=\"editAriaLabel\"\n></button>\n<button\n *ngIf=\"!_editMode && allowFileDeletion\"\n [disabled]=\"disableFileDeletion\"\n (click)=\"_deleteButtonClicked($event)\"\n fd-button\n fdType=\"transparent\"\n glyph=\"decline\"\n [attr.aria-label]=\"deleteAriaLabel\"\n></button>\n<button\n #okButton\n [style.display]=\"_editMode ? 'inline-flex' : 'none'\"\n (click)=\"_okButtonClicked($event)\"\n fd-button\n fdType=\"transparent\"\n [attr.aria-label]=\"okAriaLabel\"\n>\n {{ okText }}\n</button>\n<button\n *ngIf=\"_editMode\"\n (click)=\"_cancelButtonClicked($event)\"\n fd-button\n fdType=\"transparent\"\n [attr.aria-label]=\"cancelAriaLabel\"\n>\n {{ cancelText }}\n</button>\n","import { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\nimport { ControlValueAccessor } from '@angular/forms';\n\n@Component({\n selector: 'fd-upload-collection-form-item',\n host: { class: 'fd-upload-collection__form-item' },\n templateUrl: './upload-collection-form-item.component.html',\n encapsulation: ViewEncapsulation.None\n})\nexport class UploadCollectionFormItemComponent implements ControlValueAccessor {\n /** Value for the input's placeholder. */\n @Input()\n placeholder = 'Filename';\n\n /** @hidden */\n @Input()\n _editMode = false;\n\n /** @hidden */\n _fileNameValue: string;\n\n /** @hidden */\n _extension: string;\n\n /** Event emitted when the dragged file exits the dropzone. */\n @Output()\n readonly fileNameChanged = new EventEmitter<string>();\n\n /** Get the value of the text input. */\n get fileName(): string {\n return this._fileNameValue;\n }\n\n /** Set the value of the text input. */\n set fileName(value) {\n this._fileNameValue = value;\n this.onChange(value);\n this.onTouched();\n this.fileNameChanged.emit(value);\n }\n\n /** @hidden */\n onChange: (value: string) => void = () => {};\n\n /** @hidden */\n onTouched = (): void => {};\n\n /** @hidden */\n writeValue(value: string): void {\n this.fileName = value;\n }\n\n /** @hidden */\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n /** @hidden */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n}\n","<input\n *ngIf=\"_editMode\"\n fd-form-control\n required\n style=\"pointer-events: all\"\n class=\"fd-input\"\n type=\"text\"\n [attr.placeholder]=\"placeholder\"\n [(ngModel)]=\"fileName\"\n [state]=\"!fileName ? 'error' : null\"\n (click)=\"$event.stopPropagation()\"\n/>\n<span *ngIf=\"_editMode\" class=\"fd-upload-collection__extension\">.{{ _extension }}</span>\n","import {\n AfterContentInit,\n AfterViewInit,\n ContentChild,\n Directive,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnDestroy,\n Output\n} from '@angular/core';\nimport { UploadCollectionFormItemComponent } from './upload-collection-form-item/upload-collection-form-item.component';\nimport { UploadCollectionButtonGroupComponent } from './upload-collection-button-group/upload-collection-button-group.component';\nimport { Subscription } from 'rxjs';\nimport {\n UploadCollectionTitleContainerDirective,\n UploadCollectionTitleDirective\n} from './upload-collection-simple.directives';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-upload-collection-item]',\n host: { class: 'fd-upload-collection__item' }\n})\nexport class UploadCollectionItemDirective implements AfterContentInit, OnDestroy, AfterViewInit {\n /** The name of the file, not including the type extension. */\n @Input()\n fileName: string;\n\n /** The file type extension. */\n @Input()\n extension: string;\n\n /** @hidden */\n @ContentChild(UploadCollectionFormItemComponent)\n _formItemComponent: UploadCollectionFormItemComponent;\n\n /** @hidden */\n @ContentChild(UploadCollectionTitleDirective)\n _titleDirective: UploadCollectionTitleDirective;\n\n /** @hidden */\n @ContentChild(UploadCollectionButtonGroupComponent)\n _buttonGroupComponent: UploadCollectionButtonGroupComponent;\n\n /** @hidden */\n @ContentChild(UploadCollectionTitleContainerDirective)\n _titleContainerDirective: UploadCollectionTitleContainerDirective;\n\n /** Event emitted when the user changes a file name. */\n @Output()\n readonly fileNameChanged = new EventEmitter<any>();\n\n /** Event emitted when presses the delete button. */\n @Output()\n readonly deleteClicked = new EventEmitter<any>();\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n /** @hidden */\n fileNameFull: string;\n\n /** @hidden */\n titleWidth: number;\n\n /** @hidden used to compare to the current width to know whether to collapse or expand title */\n previousContainerWidth: number;\n\n /** @hidden */\n containerWidth: number;\n\n /** @hidden */\n ngAfterContentInit(): void {\n this.fileNameFull = this.fileName + '.' + this.extension;\n this._titleDirective.elRef.nativeElement.innerHTML = this.fileNameFull;\n this._handleDeleteClickedSubscription();\n this._handleOkClickedSubscription();\n this._handleEditClickedSubscription();\n this._handleFormItemInputChangedSubscription();\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this.onResize();\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n constructor(public elementRef: ElementRef) {}\n\n /** @hidden */\n @HostListener('window:resize', [])\n onResize(): void {\n if (!this.elementRef.nativeElement.parentElement) {\n return;\n }\n this.titleWidth = this.getTitleWidth();\n this.containerWidth = this.getContainerWidth();\n\n // if first load and no previous container width, or if container boundary is resized to smaller than before\n if (!this.previousContainerWidth || this.containerWidth < this.previousContainerWidth) {\n // and the title extends past the container, 1.05x padding to prevent jaggy resizing.\n if (this.titleWidth * 1.05 >= this.containerWidth) {\n this.resizeFileTitle(this._titleDirective.elRef.nativeElement.innerHTML);\n }\n } else if (this.previousContainerWidth && this.containerWidth > this.previousContainerWidth) {\n // Looks to expand file title if container width is resized to greater than before\n // reset file title to initial\n this._titleDirective.elRef.nativeElement.innerHTML = this.fileNameFull;\n this.resizeFileTitle(this.fileNameFull);\n }\n\n this.previousContainerWidth = this.containerWidth;\n }\n\n /** @hidden */\n private _handleOkClickedSubscription(): void {\n this._subscriptions.add(\n this._buttonGroupComponent.okClicked.subscribe(() => {\n if (this._formItemComponent.fileName && this._formItemComponent.fileName !== '') {\n this.fileName = this._formItemComponent.fileName;\n this._titleDirective.elRef.nativeElement.style.display = 'inline-block';\n this.fileNameFull = this.fileName + '.' + this.extension;\n this._titleDirective.elRef.nativeElement.innerHTML = this.fileNameFull;\n this.resizeFileTitle(this.fileNameFull);\n this._formItemComponent._editMode = false;\n this._buttonGroupComponent._editMode = false;\n this.fileNameChanged.emit(this);\n }\n })\n );\n }\n\n /** @hidden */\n private _handleEditClickedSubscription(): void {\n this._subscriptions.add(\n this._buttonGroupComponent.editClicked.subscribe((event) => {\n this._formItemComponent._editMode = event;\n if (this._titleContainerDirective) {\n this._titleContainerDirective.applyContainerClass = !event;\n }\n const styles = [];\n styles.push(this._titleDirective.elRef.nativeElement.style);\n this._titleContainerDirective?._objectMarkerComponents?.forEach((objectMarker) => {\n styles.push(objectMarker.elementRef().nativeElement.style);\n });\n event\n ? styles.forEach((style) => (style.display = 'none'))\n : styles.forEach((style) => (style.display = 'inline-block'));\n if (event) {\n this._formItemComponent._extension = this.extension;\n this._formItemComponent.fileName = this.fileName;\n }\n })\n );\n }\n\n /** @hidden */\n private _handleDeleteClickedSubscription(): void {\n this._subscriptions.add(\n this._buttonGroupComponent.deleteClicked.subscribe(() => {\n this.deleteClicked.emit(this);\n })\n );\n }\n\n /** @hidden */\n private _handleFormItemInputChangedSubscription(): void {\n this._subscriptions.add(\n this._formItemComponent.fileNameChanged.subscribe((event) => {\n this._buttonGroupComponent._okButton.disabled = event === '';\n this._buttonGroupComponent._okButton.buildComponentCssClass();\n })\n );\n }\n\n /** @hidden */\n private getTitleWidth(): number {\n return this._titleDirective.elRef.nativeElement.getBoundingClientRect().width;\n }\n\n /** @hidden */\n private getContainerWidth(): number {\n return this._titleDirective.elRef.nativeElement.parentElement.getBoundingClientRect().width;\n }\n\n /**\n * @hidden\n *\n * truncates the string by cutting out excess length in the middle and replacing with '...'\n */\n private truncateTitle(str: string): string {\n const cutLength = Math.floor(str.length * 0.8);\n\n if (str.length > cutLength) {\n const stringLeftIndex = Math.floor(cutLength / 2);\n const stringRightIndex = str.length - stringLeftIndex + 3;\n return str.substring(0, stringLeftIndex) + '... ' + str.substring(stringRightIndex, str.length);\n }\n return str;\n }\n\n /**\n * @hidden\n *\n * determines if file title needs to be truncated given container constraint.\n */\n private resizeFileTitle(titleStr: string): void {\n let curTitle = titleStr;\n this.containerWidth = this.getContainerWidth();\n this.titleWidth = this.getTitleWidth();\n\n // repeatedly truncate the title until it fits inside container\n while (this.titleWidth * 1.05 >= this.containerWidth) {\n const truncatedTitleStr = this.truncateTitle(curTitle);\n this._titleDirective.elRef.nativeElement.innerHTML = truncatedTitleStr;\n curTitle = truncatedTitleStr;\n this.titleWidth = this.getTitleWidth();\n this.containerWidth = this.getContainerWidth();\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n UploadCollectionDescriptionDirective,\n UploadCollectionStatusGroupDirective,\n UploadCollectionTextSeparatorDirective,\n UploadCollectionThumbnailDirective,\n UploadCollectionTitleContainerDirective,\n UploadCollectionTitleDirective\n} from './upload-collection-simple.directives';\nimport { ListModule } from '@fundamental-ngx/core/list';\nimport { UploadCollectionComponent } from './upload-collection.component';\nimport { UploadCollectionButtonGroupComponent } from './upload-collection-button-group/upload-collection-button-group.component';\nimport { ButtonModule } from '@fundamental-ngx/core/button';\nimport { UploadCollectionFormItemComponent } from './upload-collection-form-item/upload-collection-form-item.component';\nimport { LinkModule } from '@fundamental-ngx/core/link';\nimport { FormsModule } from '@angular/forms';\nimport { FormControlModule } from '@fundamental-ngx/core/form';\nimport { UploadCollectionItemDirective } from './upload-collection-item.directive';\n\n@NgModule({\n declarations: [\n UploadCollectionComponent,\n UploadCollectionItemDirective,\n UploadCollectionThumbnailDirective,\n UploadCollectionTitleDirective,\n UploadCollectionDescriptionDirective,\n UploadCollectionTextSeparatorDirective,\n UploadCollectionStatusGroupDirective,\n UploadCollectionButtonGroupComponent,\n UploadCollectionFormItemComponent,\n UploadCollectionTitleContainerDirective\n ],\n imports: [CommonModule, ListModule, ButtonModule, LinkModule, FormsModule, FormControlModule],\n exports: [\n UploadCollectionComponent,\n UploadCollectionItemDirective,\n UploadCollectionThumbnailDirective,\n UploadCollectionTitleDirective,\n UploadCollectionDescriptionDirective,\n UploadCollectionTextSeparatorDirective,\n UploadCollectionStatusGroupDirective,\n UploadCollectionButtonGroupComponent,\n UploadCollectionFormItemComponent,\n UploadCollectionTitleContainerDirective\n ]\n})\nexport class UploadCollectionModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
@@ -2623,6 +2623,119 @@ class DynamicComponentContainer {
2623
2623
  }
2624
2624
  }
2625
2625
 
2626
+ /**
2627
+ * Utility type, that allows to track and select ranges of elements while using multi-selection.
2628
+ *
2629
+ * @usage
2630
+ * Imagine we have a simple list of checkboxes:
2631
+ * ```html
2632
+ * <input
2633
+ * #checkboxInput
2634
+ * *ngFor="let o of options; let idx = index"
2635
+ * type="checkbox"
2636
+ * [checked]="selectionModel.checked(o)"
2637
+ * (click)="toggle(idx, $event)"
2638
+ * >
2639
+ * ```
2640
+ * With the given layout the logic should be as follows:
2641
+ * ```typescript
2642
+ * export class YourComponent {
2643
+ * options = ['a', 'b', 'c'];
2644
+ * readonly selectionModel = new SelectionModel(true);
2645
+ *
2646
+ * private readonly _rangeSelector = new RangeSelector();
2647
+ *
2648
+ *
2649
+ * toggle(idx: number, event: PointerEvent): void {
2650
+ * // getting the toggled value of the checkbox
2651
+ * const toggledSelection = event.target.value;
2652
+ *
2653
+ * // registering the selection of current checkbox
2654
+ * this._rangeSelector.onRangeElementToggled(idx, event);
2655
+ *
2656
+ * // Apply value to each element in range.
2657
+ * // If checkbox was toggled without shift pressed or without previously selected one,
2658
+ * // this method will select only it.
2659
+ * this._rangeSelector.applyValueToEachInRange(idx => {
2660
+ * if (toggledSelection) {
2661
+ * this.selectionModel.select(options[idx]);
2662
+ * } else {
2663
+ * this.selectionModel.deselect(options[idx]);
2664
+ * }
2665
+ * });
2666
+ * }
2667
+ * }
2668
+ * ```
2669
+ */
2670
+ class RangeSelector {
2671
+ constructor() {
2672
+ /** @hidden */
2673
+ this._previousSelectedIndex = null;
2674
+ }
2675
+ /**
2676
+ * Last registered selection state (either multiple or single).
2677
+ * Is updated on each `onRangeElementClicked` invokation. Will be `null` initially or once `reset()` is called.
2678
+ */
2679
+ get lastRangeSelectionState() {
2680
+ return this._state ? Object.assign({}, this._state) : null;
2681
+ }
2682
+ /**
2683
+ * The method that should be used to register each checkbox toggle.
2684
+ * Accepts two arguments: `index` and `event`. If none provided, will reset existing state.
2685
+ * Otherwise will register current index as last checked.
2686
+ *
2687
+ * If toggling was done with "shift" pressed and there's a previously registered index, will register a range selection.
2688
+ * At the same time if checkbox was toggled without shift pressed or without previously selected one, this method will select only it.
2689
+ *
2690
+ * After calling this method it's recommended to use `applyValueToEachInRange` to actually toggle each checkbox in range.
2691
+ *
2692
+ * See usage example on this class itself.
2693
+ */
2694
+ onRangeElementToggled(index, event) {
2695
+ if (this._isNonNegativeInteger(this._previousSelectedIndex) &&
2696
+ this._isNonNegativeInteger(index) &&
2697
+ (event === null || event === void 0 ? void 0 : event.shiftKey)) {
2698
+ this._state = {
2699
+ isRangeSelection: true,
2700
+ from: Math.min(this._previousSelectedIndex, index),
2701
+ to: Math.max(this._previousSelectedIndex, index)
2702
+ };
2703
+ this._previousSelectedIndex = index;
2704
+ }
2705
+ else if (this._isNonNegativeInteger(index)) {
2706
+ this._state = { isRangeSelection: false, from: index, to: index };
2707
+ this._previousSelectedIndex = index;
2708
+ }
2709
+ else {
2710
+ this.reset();
2711
+ }
2712
+ return this.lastRangeSelectionState;
2713
+ }
2714
+ /**
2715
+ * Allows to apply selection to each item in selection range.
2716
+ * Accepts a function to apply selection to each item by registered index.
2717
+ *
2718
+ * See usage example on this class itself.
2719
+ */
2720
+ applyValueToEachInRange(selectionMethod) {
2721
+ const state = this.lastRangeSelectionState;
2722
+ if (this._isNonNegativeInteger(state === null || state === void 0 ? void 0 : state.from) && this._isNonNegativeInteger(state.to)) {
2723
+ for (let index = state.from; index <= state.to; index++) {
2724
+ selectionMethod(index);
2725
+ }
2726
+ }
2727
+ }
2728
+ /** Resets selection state. Useful when the list of selectable items is changed (e.g. by filtering, sorting, page change) */
2729
+ reset() {
2730
+ this._state = null;
2731
+ this._previousSelectedIndex = null;
2732
+ }
2733
+ /** @hidden */
2734
+ _isNonNegativeInteger(num) {
2735
+ return Number.isInteger(num) && num >= 0;
2736
+ }
2737
+ }
2738
+
2626
2739
  var ContentDensityEnum;
2627
2740
  (function (ContentDensityEnum) {
2628
2741
  ContentDensityEnum["COMPACT"] = "compact";
@@ -3009,5 +3122,5 @@ function applyMixins(derivedCtor, baseCtors) {
3009
3122
  * Generated bundle index. Do not edit.
3010
3123
  */
3011
3124
 
3012
- export { ANY_LANGUAGE_LETTERS_GROUP_REGEX, ANY_LANGUAGE_LETTERS_REGEX, AbstractFdNgxClass, AutoCompleteDirective, AutoCompleteModule, ContentDensityEnum, ContentDensityService, DECIMAL_NUMBER_UNICODE_GROUP_REGEX, DECIMAL_NUMBER_UNICODE_RANGE, DECIMAL_NUMBER_UNICODE_REGEX, DEFAULT_CONTENT_DENSITY, DefaultTruncateCharCount, DisplayFnPipe, DndItemDirective, DndKeyboardGroupDirective, DndKeyboardItemDirective, DndListDirective, DragAndDropModule, DynamicComponentContainer, DynamicComponentInjector, DynamicComponentService, ELEMENT_REF_EXCEPTION, FocusKeyManagerHelpersModule, FocusKeyManagerItemDirective, FocusKeyManagerListDirective, FocusTrapService, INVALID_DATE_ERROR, InitialFocusDirective, InitialFocusModule, IsCompactDensityPipe, KeyUtil, KeyboardSupportService, LETTERS_UNICODE_RANGE, LIST_ITEM_COMPONENT, LineClampDirective, LineClampModule, LineClampTargetDirective, ListGroupPipe, MOBILE_CONFIG_ERROR, OVERFLOW_PRIORITY_SCORE, OnlyDigitsDirective, OnlyDigitsModule, OverflowListDirective, OverflowListItemDirective, OverflowListModule, PipeModule, RTL_LANGUAGE, ResizeDirective, ResizeHandleDirective, ResizeModule, RtlService, SafePipe, SearchHighlightPipe, THEME_SWITCHER_ROUTER_MISSING_ERROR, TemplateDirective, TemplateModule, ThemesService, TruncateDirective, TruncateModule, TwoDigitsPipe, UtilsModule, ValueByPathPipe, applyCssClass, applyCssStyle, applyMixins, getElementCapacity, getElementWidth, getRandomColorAccent, intersectionObservable, isCompactDensity, isValidContentDensity, parserFileSize, pxToNum, resizeObservable, scrollTop, toNativeElement, uuidv4 };
3125
+ export { ANY_LANGUAGE_LETTERS_GROUP_REGEX, ANY_LANGUAGE_LETTERS_REGEX, AbstractFdNgxClass, AutoCompleteDirective, AutoCompleteModule, ContentDensityEnum, ContentDensityService, DECIMAL_NUMBER_UNICODE_GROUP_REGEX, DECIMAL_NUMBER_UNICODE_RANGE, DECIMAL_NUMBER_UNICODE_REGEX, DEFAULT_CONTENT_DENSITY, DefaultTruncateCharCount, DisplayFnPipe, DndItemDirective, DndKeyboardGroupDirective, DndKeyboardItemDirective, DndListDirective, DragAndDropModule, DynamicComponentContainer, DynamicComponentInjector, DynamicComponentService, ELEMENT_REF_EXCEPTION, FocusKeyManagerHelpersModule, FocusKeyManagerItemDirective, FocusKeyManagerListDirective, FocusTrapService, INVALID_DATE_ERROR, InitialFocusDirective, InitialFocusModule, IsCompactDensityPipe, KeyUtil, KeyboardSupportService, LETTERS_UNICODE_RANGE, LIST_ITEM_COMPONENT, LineClampDirective, LineClampModule, LineClampTargetDirective, ListGroupPipe, MOBILE_CONFIG_ERROR, OVERFLOW_PRIORITY_SCORE, OnlyDigitsDirective, OnlyDigitsModule, OverflowListDirective, OverflowListItemDirective, OverflowListModule, PipeModule, RTL_LANGUAGE, RangeSelector, ResizeDirective, ResizeHandleDirective, ResizeModule, RtlService, SafePipe, SearchHighlightPipe, THEME_SWITCHER_ROUTER_MISSING_ERROR, TemplateDirective, TemplateModule, ThemesService, TruncateDirective, TruncateModule, TwoDigitsPipe, UtilsModule, ValueByPathPipe, applyCssClass, applyCssStyle, applyMixins, getElementCapacity, getElementWidth, getRandomColorAccent, intersectionObservable, isCompactDensity, isValidContentDensity, parserFileSize, pxToNum, resizeObservable, scrollTop, toNativeElement, uuidv4 };
3013
3126
  //# sourceMappingURL=fundamental-ngx-core-utils.mjs.map