@igo2/common 21.0.0-next.2 → 21.0.0-next.3

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 (84) hide show
  1. package/fesm2022/igo2-common-action.mjs +34 -49
  2. package/fesm2022/igo2-common-action.mjs.map +1 -1
  3. package/fesm2022/igo2-common-backdrop.mjs +5 -13
  4. package/fesm2022/igo2-common-backdrop.mjs.map +1 -1
  5. package/fesm2022/igo2-common-badge.mjs.map +1 -1
  6. package/fesm2022/igo2-common-collapsible.mjs +6 -14
  7. package/fesm2022/igo2-common-collapsible.mjs.map +1 -1
  8. package/fesm2022/igo2-common-color.mjs.map +1 -1
  9. package/fesm2022/igo2-common-confirm-dialog.mjs +2 -1
  10. package/fesm2022/igo2-common-confirm-dialog.mjs.map +1 -1
  11. package/fesm2022/igo2-common-context-menu.mjs +6 -4
  12. package/fesm2022/igo2-common-context-menu.mjs.map +1 -1
  13. package/fesm2022/igo2-common-datepicker.mjs +21 -15
  14. package/fesm2022/igo2-common-datepicker.mjs.map +1 -1
  15. package/fesm2022/igo2-common-dom.mjs +3 -1
  16. package/fesm2022/igo2-common-dom.mjs.map +1 -1
  17. package/fesm2022/igo2-common-drag-drop.mjs +59 -27
  18. package/fesm2022/igo2-common-drag-drop.mjs.map +1 -1
  19. package/fesm2022/igo2-common-dynamic-component.mjs +9 -3
  20. package/fesm2022/igo2-common-dynamic-component.mjs.map +1 -1
  21. package/fesm2022/igo2-common-entity.mjs +131 -98
  22. package/fesm2022/igo2-common-entity.mjs.map +1 -1
  23. package/fesm2022/igo2-common-flexible.mjs +19 -71
  24. package/fesm2022/igo2-common-flexible.mjs.map +1 -1
  25. package/fesm2022/igo2-common-form.mjs +46 -45
  26. package/fesm2022/igo2-common-form.mjs.map +1 -1
  27. package/fesm2022/igo2-common-icon.mjs +1 -1
  28. package/fesm2022/igo2-common-icon.mjs.map +1 -1
  29. package/fesm2022/igo2-common-image.mjs.map +1 -1
  30. package/fesm2022/igo2-common-interactive-tour.mjs +40 -17
  31. package/fesm2022/igo2-common-interactive-tour.mjs.map +1 -1
  32. package/fesm2022/igo2-common-json-dialog.mjs +2 -2
  33. package/fesm2022/igo2-common-json-dialog.mjs.map +1 -1
  34. package/fesm2022/igo2-common-keyvalue.mjs +3 -1
  35. package/fesm2022/igo2-common-keyvalue.mjs.map +1 -1
  36. package/fesm2022/igo2-common-list.mjs +11 -6
  37. package/fesm2022/igo2-common-list.mjs.map +1 -1
  38. package/fesm2022/igo2-common-panel.mjs +1 -1
  39. package/fesm2022/igo2-common-panel.mjs.map +1 -1
  40. package/fesm2022/igo2-common-resizable-bar.mjs +2 -4
  41. package/fesm2022/igo2-common-resizable-bar.mjs.map +1 -1
  42. package/fesm2022/igo2-common-select-value-dialog.mjs +14 -4
  43. package/fesm2022/igo2-common-select-value-dialog.mjs.map +1 -1
  44. package/fesm2022/igo2-common-sidenav.mjs.map +1 -1
  45. package/fesm2022/igo2-common-spinner.mjs +1 -1
  46. package/fesm2022/igo2-common-spinner.mjs.map +1 -1
  47. package/fesm2022/igo2-common-table.mjs +53 -60
  48. package/fesm2022/igo2-common-table.mjs.map +1 -1
  49. package/fesm2022/igo2-common-timepicker.mjs +8 -9
  50. package/fesm2022/igo2-common-timepicker.mjs.map +1 -1
  51. package/fesm2022/igo2-common-tool.mjs +19 -16
  52. package/fesm2022/igo2-common-tool.mjs.map +1 -1
  53. package/fesm2022/igo2-common-widget.mjs +4 -4
  54. package/fesm2022/igo2-common-widget.mjs.map +1 -1
  55. package/fesm2022/igo2-common-workspace.mjs +12 -16
  56. package/fesm2022/igo2-common-workspace.mjs.map +1 -1
  57. package/package.json +3 -3
  58. package/types/igo2-common-action.d.ts +2 -5
  59. package/types/igo2-common-backdrop.d.ts +2 -4
  60. package/types/igo2-common-badge.d.ts +4 -4
  61. package/types/igo2-common-collapsible.d.ts +2 -4
  62. package/types/igo2-common-confirm-dialog.d.ts +1 -1
  63. package/types/igo2-common-context-menu.d.ts +2 -2
  64. package/types/igo2-common-datepicker.d.ts +9 -9
  65. package/types/igo2-common-drag-drop.d.ts +14 -12
  66. package/types/igo2-common-dynamic-component.d.ts +3 -3
  67. package/types/igo2-common-entity.d.ts +61 -57
  68. package/types/igo2-common-flexible.d.ts +14 -28
  69. package/types/igo2-common-form.d.ts +24 -24
  70. package/types/igo2-common-icon.d.ts +1 -1
  71. package/types/igo2-common-interactive-tour.d.ts +6 -6
  72. package/types/igo2-common-json-dialog.d.ts +4 -4
  73. package/types/igo2-common-keyvalue.d.ts +4 -1
  74. package/types/igo2-common-list.d.ts +7 -7
  75. package/types/igo2-common-panel.d.ts +1 -1
  76. package/types/igo2-common-resizable-bar.d.ts +4 -5
  77. package/types/igo2-common-select-value-dialog.d.ts +2 -2
  78. package/types/igo2-common-sidenav.d.ts +2 -2
  79. package/types/igo2-common-spinner.d.ts +1 -1
  80. package/types/igo2-common-table.d.ts +16 -17
  81. package/types/igo2-common-timepicker.d.ts +3 -3
  82. package/types/igo2-common-tool.d.ts +7 -8
  83. package/types/igo2-common-widget.d.ts +7 -7
  84. package/types/igo2-common-workspace.d.ts +12 -12
@@ -34,13 +34,14 @@ class DragAndDropDirective {
34
34
  }
35
35
  }
36
36
  validExtensions(evt) {
37
- const files = evt.dataTransfer.files;
37
+ const files = evt.dataTransfer?.files;
38
38
  const filesObj = {
39
39
  valid: [],
40
40
  invalid: []
41
41
  };
42
- if (files.length > 0) {
43
- for (const file of files) {
42
+ if (files && files.length > 0) {
43
+ for (let i = 0; i < files.length; i++) {
44
+ const file = files[i];
44
45
  const ext = file.name.split('.')[file.name.split('.').length - 1];
45
46
  const allowedExtensions = this.allowedExtensions();
46
47
  if (allowedExtensions.length === 0 ||
@@ -193,7 +194,7 @@ class TreeDragDropDirective {
193
194
  this.dropPosition.set(null);
194
195
  if (this.draggedNode) {
195
196
  this.removeNodeClass(this.draggedNode.id, '--dragged');
196
- this.draggedNode = null;
197
+ this.draggedNode = undefined;
197
198
  }
198
199
  this.dragLeave();
199
200
  this.removeDropTargetLine();
@@ -206,8 +207,9 @@ class TreeDragDropDirective {
206
207
  this.dropPosition.set(position);
207
208
  }
208
209
  dragLeave() {
209
- clearTimeout(this.expandTimeout);
210
- this.expandTimeout = null;
210
+ if (this.expandTimeout)
211
+ clearTimeout(this.expandTimeout);
212
+ this.expandTimeout = undefined;
211
213
  if (this.highlightedNode) {
212
214
  this.removeNodeClass(this.highlightedNode.id, '--drag-hover');
213
215
  this.highlightedNode = undefined;
@@ -229,41 +231,51 @@ class TreeDragDropDirective {
229
231
  if (dropPosition.type === 'below' &&
230
232
  dropPosition.level !== targetNodeLevel) {
231
233
  const ancestor = this.getNodeAncestors(nodeTarget.id, dropPosition.level);
232
- this.dropNodeTarget.set(ancestor);
233
- nodeTarget = ancestor;
234
- targetNodeLevel = this.getNodeLevel(nodeTarget);
234
+ if (ancestor) {
235
+ this.dropNodeTarget.set(ancestor);
236
+ nodeTarget = ancestor;
237
+ targetNodeLevel = this.getNodeLevel(nodeTarget);
238
+ }
235
239
  }
236
240
  if (this.isGroup(nodeTarget)) {
237
241
  if (dropPosition.type === 'inside') {
238
242
  const isExpanded = this.tree().isExpanded(nodeTarget);
239
243
  if (isExpanded) {
240
244
  const children = this.getDirectDescendants(nodeTarget);
241
- if (children[0]?.id === this.draggedNode.id) {
245
+ if (this.draggedNode && children[0]?.id === this.draggedNode.id) {
242
246
  return;
243
247
  }
244
248
  }
245
249
  this.tree().expand(nodeTarget);
250
+ if (this.draggedNode) {
251
+ return this.dropped.emit({
252
+ node: this.draggedNode,
253
+ ref: nodeTarget,
254
+ position: dropPosition.type
255
+ });
256
+ }
257
+ return;
258
+ }
259
+ }
260
+ if (dropPosition.type === 'below' &&
261
+ dropPosition.level !== targetNodeLevel) {
262
+ const ancestor = this.getNodeAncestors(nodeTarget.id);
263
+ if (this.draggedNode && ancestor) {
246
264
  return this.dropped.emit({
247
265
  node: this.draggedNode,
248
- ref: nodeTarget,
266
+ ref: ancestor,
249
267
  position: dropPosition.type
250
268
  });
251
269
  }
270
+ return;
252
271
  }
253
- if (dropPosition.type === 'below' &&
254
- dropPosition.level !== targetNodeLevel) {
255
- const ancestor = this.getNodeAncestors(nodeTarget.id);
256
- return this.dropped.emit({
272
+ if (this.draggedNode && nodeTarget) {
273
+ this.dropped.emit({
257
274
  node: this.draggedNode,
258
- ref: ancestor,
275
+ ref: nodeTarget,
259
276
  position: dropPosition.type
260
277
  });
261
278
  }
262
- this.dropped.emit({
263
- node: this.draggedNode,
264
- ref: nodeTarget,
265
- position: dropPosition.type
266
- });
267
279
  }
268
280
  addNodeClass(id, className) {
269
281
  const node = this.findTreeNode(id);
@@ -292,7 +304,10 @@ class TreeDragDropDirective {
292
304
  const listeners = [
293
305
  ['dragstart', () => this.onDragStart(node.data)],
294
306
  ['dragend', () => this.dragEnd()],
295
- ['dragover', (event) => this.dragOver(node.data, event)],
307
+ [
308
+ 'dragover',
309
+ (event) => this.dragOver(node.data, event)
310
+ ],
296
311
  ['dragleave', () => this.dragLeave()]
297
312
  ];
298
313
  element.setAttribute('draggable', 'true');
@@ -306,7 +321,7 @@ class TreeDragDropDirective {
306
321
  element.removeEventListener(type, listener);
307
322
  });
308
323
  });
309
- this.nodesListeners = null;
324
+ this.nodesListeners = undefined;
310
325
  }
311
326
  setHighlightedNode(node) {
312
327
  const toHighlight = this.isGroup(node)
@@ -372,6 +387,9 @@ class TreeDragDropDirective {
372
387
  return treeNode?.['_elementRef'].nativeElement;
373
388
  }
374
389
  canDropNode(hoveredNode, position) {
390
+ if (!this.draggedNode) {
391
+ return { canDrop: false };
392
+ }
375
393
  if (this.isGroup(this.draggedNode)) {
376
394
  return this.canDropGroup(hoveredNode, position);
377
395
  }
@@ -382,7 +400,9 @@ class TreeDragDropDirective {
382
400
  return { canDrop: true };
383
401
  }
384
402
  canDropGroup(hoveredNode, position) {
385
- // On ne veut pas permettre le Drop pour un groupe qui s'auto référence
403
+ if (!this.draggedNode) {
404
+ return { canDrop: false };
405
+ }
386
406
  if (hoveredNode.id === this.draggedNode.id) {
387
407
  return {
388
408
  canDrop: false,
@@ -406,9 +426,12 @@ class TreeDragDropDirective {
406
426
  };
407
427
  }
408
428
  validateMaxHierarchyLevel(position) {
429
+ if (!this.draggedNode) {
430
+ return { canDrop: false };
431
+ }
409
432
  const maxLevel = this.maxLevel();
410
433
  if (!maxLevel) {
411
- return;
434
+ return undefined;
412
435
  }
413
436
  let level = position.type === 'inside' ? position.level + 1 : position.level;
414
437
  if (this.isGroup(this.draggedNode)) {
@@ -422,6 +445,7 @@ class TreeDragDropDirective {
422
445
  params: { value: maxLevel }
423
446
  };
424
447
  }
448
+ return undefined;
425
449
  }
426
450
  getDescendants(node) {
427
451
  const children = this.childrenAccessor()(node) ?? [];
@@ -432,10 +456,12 @@ class TreeDragDropDirective {
432
456
  return descendants;
433
457
  }
434
458
  isHoverDescendant(id, _hoveredNode) {
459
+ if (!this.draggedNode)
460
+ return false;
435
461
  return this.getDescendants(this.draggedNode).some((child) => child.id === id);
436
462
  }
437
463
  getPosition(event, hoveredNode) {
438
- if (this.isGroup(this.draggedNode)) {
464
+ if (this.draggedNode && this.isGroup(this.draggedNode)) {
439
465
  if (this.isHoverDescendant(hoveredNode.id, hoveredNode)) {
440
466
  hoveredNode = this.draggedNode;
441
467
  }
@@ -456,6 +482,8 @@ class TreeDragDropDirective {
456
482
  }
457
483
  getPositionY(node, type) {
458
484
  const element = this.getNodeElement(node);
485
+ if (!element)
486
+ return 0;
459
487
  const rect = element.getBoundingClientRect();
460
488
  return type === 'below'
461
489
  ? element.offsetTop + rect.height - 1
@@ -463,10 +491,12 @@ class TreeDragDropDirective {
463
491
  }
464
492
  getPositionType(event, hoveredNode) {
465
493
  const target = this.getNodeElement(hoveredNode);
494
+ if (!target)
495
+ return 'above';
466
496
  const rect = target.getBoundingClientRect();
467
497
  const middle = rect.top + rect.height / 2;
468
498
  const y = event.y;
469
- const selfReferencing = this.draggedNode.id === hoveredNode.id;
499
+ const selfReferencing = this.draggedNode && this.draggedNode.id === hoveredNode.id;
470
500
  if (this.isGroup(hoveredNode) && !selfReferencing) {
471
501
  const tolerence = 5;
472
502
  if (y <= middle + tolerence && y >= middle - tolerence) {
@@ -488,6 +518,8 @@ class TreeDragDropDirective {
488
518
  const lastChild = [...children].pop();
489
519
  if (type === 'below' && lastChild?.id === hoveredNode.id) {
490
520
  const target = this.getNodeElement(hoveredNode);
521
+ if (!target)
522
+ return hoveredNodeLevel;
491
523
  const rect = target.getBoundingClientRect();
492
524
  const indentation = 24;
493
525
  const xMin = rect.x + indentation;
@@ -1 +1 @@
1
- {"version":3,"file":"igo2-common-drag-drop.mjs","sources":["../../../packages/common/drag-drop/src/drag-drop.directive.ts","../../../packages/common/drag-drop/src/tree-drag-drop/tree-drag-drop.directive.ts","../../../packages/common/drag-drop/src/drag-drop.module.ts","../../../packages/common/drag-drop/src/igo2-common-drag-drop.ts"],"sourcesContent":["import {\n Directive,\n HostBinding,\n HostListener,\n input,\n output\n} from '@angular/core';\n\n@Directive({\n selector: '[igoDragAndDrop]'\n})\nexport class DragAndDropDirective {\n readonly allowedExtensions = input<string[]>([]);\n\n protected readonly filesDropped = output<File[]>();\n\n protected readonly filesInvalid = output<File[]>();\n\n @HostBinding('style.background') background = 'inherit';\n\n @HostListener('dragover', ['$event'])\n public onDragOver(evt) {\n evt.preventDefault();\n evt.stopPropagation();\n this.background = '#999';\n }\n\n @HostListener('dragleave', ['$event'])\n public onDragLeave(evt) {\n evt.preventDefault();\n evt.stopPropagation();\n this.background = 'inherit';\n }\n\n @HostListener('drop', ['$event'])\n public onDrop(evt) {\n evt.preventDefault();\n evt.stopPropagation();\n if (evt.alreadyFired) {\n return;\n }\n evt.alreadyFired = true;\n\n this.background = 'inherit';\n const filesObj = this.validExtensions(evt);\n if (filesObj.valid.length) {\n this.filesDropped.emit(filesObj.valid);\n }\n if (filesObj.invalid.length) {\n this.filesInvalid.emit(filesObj.invalid);\n }\n }\n\n private validExtensions(evt) {\n const files = evt.dataTransfer.files;\n const filesObj = {\n valid: [],\n invalid: []\n };\n if (files.length > 0) {\n for (const file of files) {\n const ext = file.name.split('.')[file.name.split('.').length - 1];\n const allowedExtensions = this.allowedExtensions();\n if (\n allowedExtensions.length === 0 ||\n (allowedExtensions.lastIndexOf(ext) !== -1 && file.size !== 0)\n ) {\n filesObj.valid.push(file);\n } else {\n filesObj.invalid.push(file);\n }\n }\n }\n\n return filesObj;\n }\n}\n","import { CdkTree } from '@angular/cdk/tree';\nimport {\n Directive,\n ElementRef,\n OnDestroy,\n Renderer2,\n booleanAttribute,\n contentChildren,\n effect,\n inject,\n input,\n output,\n signal,\n untracked\n} from '@angular/core';\nimport { MatTreeNode } from '@angular/material/tree';\n\nimport {\n DropPermission,\n DropPosition,\n DropPositionType,\n TreeDropEvent\n} from './tree-drag-drop.interface';\n\ninterface DragNodeListeners {\n element: HTMLElement;\n listeners: [string, EventListenerOrEventListenerObject][];\n}\n\nexport interface ITreeConfig<T> {\n isGroup: (node: T) => boolean;\n descendantLevels: (node: T) => number | undefined;\n}\n\n/**\n * This directive should be use with a MatTree flatened\n * It should add all logic to drag the MatTreeNode and connect the (onDrop) output\n * Class added:\n * Tree: --dragging\n * Node: --drag-hover | --dragged\n */\n@Directive({\n selector: '[igoTreeDragDrop]',\n host: {\n '[class.--dragging]': 'dragging()',\n '(dragover)': 'hostDragOver($event)',\n '(dragleave)': 'hostDragLeave($event)',\n '(drop)': 'hostDrop($event)'\n }\n})\nexport class TreeDragDropDirective<\n T extends { id: string | number } = { id: string | number },\n K = T\n> implements OnDestroy {\n private elementRef = inject(ElementRef);\n private renderer = inject(Renderer2);\n\n draggedNode: T;\n dropNodeTarget = signal<T | null>(null);\n expandTimeout: number;\n nodesListeners: DragNodeListeners[] | undefined;\n private nodesEffect = effect(() => {\n this.nodes();\n this.addAllListener();\n });\n dropLineTarget = signal<HTMLElement | null>(null);\n previousDropLine = signal<HTMLElement | null>(null);\n dropPosition = signal<DropPosition | null>(null);\n dragging = signal(false);\n // Use a Set or just manage classes manually since SelectionModel was providing simple toggle\n // But we can stick to simple class logic\n highlightedNode: T | undefined;\n\n readonly tree = input.required<CdkTree<T, K>>();\n readonly childrenAccessor = input.required<(node: T) => T[]>();\n readonly config = input.required<ITreeConfig<T>>();\n\n /** The default is 5 */\n readonly maxLevel = input(5);\n\n readonly treeDragDropIsDisabled = input(false, {\n transform: booleanAttribute\n });\n\n readonly dragStart = output<T>();\n\n readonly dropped = output<TreeDropEvent<T>>();\n\n readonly droppedError = output<DropPermission>();\n\n readonly nodes = contentChildren(MatTreeNode, { descendants: true });\n\n constructor() {\n this.dropped.subscribe(() => this.dragEnd());\n\n effect(() => {\n const disabled = this.treeDragDropIsDisabled();\n disabled ? this.removeAllListener() : this.addAllListener();\n });\n\n effect(() => {\n const current = this.dropLineTarget();\n const parent = this.elementRef.nativeElement.parentElement;\n\n if (!current) {\n untracked(() => {\n const previous = this.previousDropLine();\n if (previous !== null) {\n this.renderer.removeChild(parent, previous);\n this.previousDropLine.set(null);\n }\n });\n } else {\n this.renderer.appendChild(parent, current);\n }\n });\n\n effect(() => {\n if (!this.dragging()) {\n return;\n }\n const targetNode = this.dropNodeTarget();\n const position = this.dropPosition();\n const dropLineTarget = this.dropLineTarget();\n\n if (targetNode) {\n this.setHighlightedNode(targetNode);\n\n if (position) {\n if (dropLineTarget) {\n this.updateDropTargetLinePosition(position, dropLineTarget);\n }\n this.handleGroupExpansion(targetNode, position.type === 'inside');\n }\n }\n });\n }\n\n get isGroup() {\n return this.config().isGroup;\n }\n\n get getDescendantLevels() {\n return this.config().descendantLevels;\n }\n\n ngOnDestroy(): void {\n this.removeAllListener();\n this.removeDropTargetLine();\n if (this.nodesEffect) {\n this.nodesEffect.destroy();\n this.nodesEffect = undefined;\n }\n }\n\n hostDragOver(event: Event): void {\n event.preventDefault();\n }\n\n hostDragLeave(event: DragEvent): void {\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n if (\n event.clientY < rect.top ||\n event.clientY >= rect.bottom ||\n event.clientX < rect.left ||\n event.clientX >= rect.right\n ) {\n this.dragLeave();\n }\n }\n\n hostDrop(event: DragEvent): void {\n this.drop(event);\n }\n\n onDragStart(node: T): void {\n this.addDropTargetLine();\n\n this.dragging.set(true);\n this.draggedNode = node;\n this.addNodeClass(node.id, '--dragged');\n\n this.dragStart.emit(node);\n }\n\n dragEnd(): void {\n this.dragging.set(false);\n this.dropNodeTarget.set(null);\n this.dropPosition.set(null);\n\n if (this.draggedNode) {\n this.removeNodeClass(this.draggedNode.id, '--dragged');\n this.draggedNode = null;\n }\n\n this.dragLeave();\n this.removeDropTargetLine();\n }\n\n dragOver(node: T, event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n\n this.dropNodeTarget.set(node);\n\n const position = this.getPosition(event, node);\n this.dropPosition.set(position);\n }\n\n dragLeave(): void {\n clearTimeout(this.expandTimeout);\n this.expandTimeout = null;\n if (this.highlightedNode) {\n this.removeNodeClass(this.highlightedNode.id, '--drag-hover');\n this.highlightedNode = undefined;\n }\n }\n\n drop(event: DragEvent): void {\n let nodeTarget = this.dropNodeTarget();\n if (!nodeTarget || this.treeDragDropIsDisabled()) {\n return;\n }\n\n const dropPosition: DropPosition = this.getPosition(event, nodeTarget);\n\n const validation = this.canDropNode(nodeTarget, dropPosition);\n if (!validation.canDrop) {\n this.droppedError.emit(validation);\n return;\n }\n\n let targetNodeLevel = this.getNodeLevel(nodeTarget);\n\n // Allow to drop a last child outside is group. We refer to it's ancestor for the target\n if (\n dropPosition.type === 'below' &&\n dropPosition.level !== targetNodeLevel\n ) {\n const ancestor = this.getNodeAncestors(nodeTarget.id, dropPosition.level);\n this.dropNodeTarget.set(ancestor);\n nodeTarget = ancestor;\n targetNodeLevel = this.getNodeLevel(nodeTarget);\n }\n\n if (this.isGroup(nodeTarget)) {\n if (dropPosition.type === 'inside') {\n const isExpanded = this.tree().isExpanded(nodeTarget);\n if (isExpanded) {\n const children = this.getDirectDescendants(nodeTarget);\n if (children[0]?.id === this.draggedNode.id) {\n return;\n }\n }\n\n this.tree().expand(nodeTarget);\n return this.dropped.emit({\n node: this.draggedNode,\n ref: nodeTarget,\n position: dropPosition.type\n });\n }\n }\n\n if (\n dropPosition.type === 'below' &&\n dropPosition.level !== targetNodeLevel\n ) {\n const ancestor = this.getNodeAncestors(nodeTarget.id);\n return this.dropped.emit({\n node: this.draggedNode,\n ref: ancestor,\n position: dropPosition.type\n });\n }\n\n this.dropped.emit({\n node: this.draggedNode,\n ref: nodeTarget,\n position: dropPosition.type\n });\n }\n\n private addNodeClass(id: string | number, className: string): void {\n const node = this.findTreeNode(id);\n if (node) {\n this.renderer.addClass(node['_elementRef'].nativeElement, className);\n }\n }\n\n private removeNodeClass(id: string | number, className: string): void {\n const node = this.findTreeNode(id);\n if (node) {\n this.renderer.removeClass(node['_elementRef'].nativeElement, className);\n }\n }\n\n private addAllListener(): void {\n if (this.treeDragDropIsDisabled()) {\n return;\n }\n const nodes = this.nodes();\n if (this.nodesListeners) {\n this.removeAllListener();\n }\n\n this.nodesListeners = nodes?.map((node) => this.addListener(node));\n }\n\n private addListener(node: MatTreeNode<T>): DragNodeListeners {\n const element = node['_elementRef'].nativeElement as HTMLElement;\n const listeners: [string, EventListenerOrEventListenerObject][] = [\n ['dragstart', () => this.onDragStart(node.data)],\n ['dragend', () => this.dragEnd()],\n ['dragover', (event: DragEvent) => this.dragOver(node.data, event)],\n ['dragleave', () => this.dragLeave()]\n ];\n element.setAttribute('draggable', 'true');\n listeners.forEach(([type, listener]) =>\n element.addEventListener(type, listener)\n );\n\n return { element, listeners };\n }\n\n private removeAllListener(): void {\n this.nodesListeners?.forEach(({ element, listeners }) => {\n listeners.forEach(([type, listener]) => {\n element.setAttribute('draggable', 'false');\n element.removeEventListener(type, listener);\n });\n });\n this.nodesListeners = null;\n }\n\n private setHighlightedNode(node: T): void {\n const toHighlight = this.isGroup(node)\n ? node\n : this.getNodeAncestors(node.id);\n\n if (this.highlightedNode && this.highlightedNode.id !== toHighlight?.id) {\n this.removeNodeClass(this.highlightedNode.id, '--drag-hover');\n this.highlightedNode = undefined;\n }\n\n if (toHighlight) {\n this.highlightedNode = toHighlight;\n this.addNodeClass(toHighlight.id, '--drag-hover');\n } else if (this.highlightedNode) {\n this.removeNodeClass(this.highlightedNode.id, '--drag-hover');\n this.highlightedNode = undefined;\n }\n }\n\n private addDropTargetLine(): void {\n const target: HTMLElement = this.renderer.createElement('div');\n target.classList.add('drop-target-line');\n target.setAttribute(\n 'style',\n `position: absolute; top: 0; width: 100%; pointer-events: none; z-index: 4; height: 2px; background-color: black; transition: margin-left 150ms;`\n );\n this.dropLineTarget.set(target);\n }\n\n private removeDropTargetLine(): void {\n const target = this.dropLineTarget();\n if (target) {\n this.previousDropLine.set(target);\n this.dropLineTarget.set(null);\n }\n }\n\n private hideDropTargetLine(): void {\n const target = this.dropLineTarget();\n this.renderer.setStyle(target, 'display', 'none');\n }\n\n private showDropTargetLine(): void {\n const target = this.dropLineTarget();\n this.renderer.setStyle(target, 'display', 'block');\n }\n\n private updateDropTargetLinePosition(\n position: DropPosition,\n dropLineTarget: HTMLElement\n ): void {\n if (position.type === 'inside') {\n return this.hideDropTargetLine();\n } else {\n this.showDropTargetLine();\n }\n\n this.renderer.setStyle(\n dropLineTarget,\n 'margin-left',\n position.level * 24 + 20 + 'px'\n );\n this.renderer.setStyle(\n dropLineTarget,\n 'transform',\n 'translate3d(0,' + position.y + 'px, 0)'\n );\n }\n\n private handleGroupExpansion(node: T, isInside: boolean): void {\n if (!isInside) {\n return this.dragLeave();\n }\n const isOpen = this.tree().isExpanded(node);\n if (!isOpen && !this.expandTimeout) {\n this.expandTimeout = window.setTimeout(() => {\n this.tree().expand(node);\n }, 1200);\n }\n }\n\n private getNodeElement(node: T): HTMLElement | undefined {\n const treeNode = this.findTreeNode(node.id);\n return treeNode?.['_elementRef'].nativeElement;\n }\n\n private canDropNode(hoveredNode: T, position: DropPosition): DropPermission {\n if (this.isGroup(this.draggedNode)) {\n return this.canDropGroup(hoveredNode, position);\n }\n\n const hasMaxLevelRestrictions = this.validateMaxHierarchyLevel(position);\n if (hasMaxLevelRestrictions) {\n return hasMaxLevelRestrictions;\n }\n\n return { canDrop: true };\n }\n\n private canDropGroup(\n hoveredNode: T,\n position: DropPosition\n ): {\n canDrop: boolean;\n message?: string;\n params?: { [key: string]: unknown };\n } {\n // On ne veut pas permettre le Drop pour un groupe qui s'auto référence\n if (hoveredNode.id === this.draggedNode.id) {\n return {\n canDrop: false,\n message: 'igo.common.dragDrop.cannot.dropInsideItself'\n };\n }\n const isHoverDescendant = this.isHoverDescendant(\n hoveredNode.id,\n hoveredNode\n );\n if (isHoverDescendant) {\n return {\n canDrop: !isHoverDescendant,\n message: 'igo.common.dragDrop.cannot.dropInsideItself'\n };\n }\n\n const hasMaxLevelRestrictions = this.validateMaxHierarchyLevel(position);\n if (hasMaxLevelRestrictions) {\n return hasMaxLevelRestrictions;\n }\n\n return {\n canDrop: true,\n message: undefined\n };\n }\n\n private validateMaxHierarchyLevel(position: DropPosition): DropPermission {\n const maxLevel = this.maxLevel();\n if (!maxLevel) {\n return;\n }\n\n let level =\n position.type === 'inside' ? position.level + 1 : position.level;\n\n if (this.isGroup(this.draggedNode)) {\n // We add an extra level +1 to avoid empty group in group\n level = level + +(this.getDescendantLevels(this.draggedNode) ?? 0) + 1;\n }\n\n if (level > maxLevel) {\n return {\n canDrop: false,\n message: 'igo.common.dragDrop.cannot.maxLevel',\n params: { value: maxLevel }\n };\n }\n }\n\n private getDescendants(node: T): T[] {\n const children = this.childrenAccessor()(node) ?? [];\n const descendants: T[] = [...children];\n children.forEach((child) => {\n descendants.push(...this.getDescendants(child));\n });\n return descendants;\n }\n\n private isHoverDescendant(id: string | number, _hoveredNode: T): boolean {\n return this.getDescendants(this.draggedNode).some(\n (child) => child.id === id\n );\n }\n\n private getPosition(event: DragEvent, hoveredNode: T): DropPosition {\n if (this.isGroup(this.draggedNode)) {\n if (this.isHoverDescendant(hoveredNode.id, hoveredNode)) {\n hoveredNode = this.draggedNode;\n }\n }\n\n let positionType = this.getPositionType(event, hoveredNode);\n\n const bellowOpenedGroup =\n this.isGroup(hoveredNode) &&\n positionType === 'below' &&\n this.tree().isExpanded(hoveredNode);\n if (bellowOpenedGroup) {\n positionType = 'inside';\n }\n\n return {\n x: event.x,\n y: this.getPositionY(hoveredNode, positionType),\n level: this.getPositionLevel(hoveredNode, positionType, event.x),\n type: positionType\n };\n }\n\n private getPositionY(node: T, type: DropPositionType): number {\n const element = this.getNodeElement(node);\n const rect = element.getBoundingClientRect();\n\n return type === 'below'\n ? element.offsetTop + rect.height - 1\n : element.offsetTop + 1;\n }\n\n private getPositionType(event: DragEvent, hoveredNode: T): DropPositionType {\n const target = this.getNodeElement(hoveredNode);\n const rect = target.getBoundingClientRect();\n const middle = rect.top + rect.height / 2;\n const y = event.y;\n\n const selfReferencing = this.draggedNode.id === hoveredNode.id;\n if (this.isGroup(hoveredNode) && !selfReferencing) {\n const tolerence = 5;\n if (y <= middle + tolerence && y >= middle - tolerence) {\n return 'inside';\n }\n }\n\n const isBelow = y > middle;\n return isBelow ? 'below' : 'above';\n }\n\n private getPositionLevel(\n hoveredNode: T,\n type: DropPositionType,\n x: number\n ): number {\n const hoveredNodeLevel = this.getNodeLevel(hoveredNode);\n if (hoveredNodeLevel === 0) {\n return 0;\n }\n\n const ancestor = this.getNodeAncestors(hoveredNode.id);\n if (!ancestor) return hoveredNodeLevel;\n\n const children = this.getDirectDescendants(ancestor);\n const lastChild = [...children].pop();\n\n if (type === 'below' && lastChild?.id === hoveredNode.id) {\n const target = this.getNodeElement(hoveredNode);\n const rect = target.getBoundingClientRect();\n\n const indentation = 24;\n const xMin = rect.x + indentation;\n const xMax = xMin + indentation * hoveredNodeLevel;\n\n const isInsideSameGroup = x > xMax;\n if (!isInsideSameGroup) {\n const levelSubstracted = Math.round((xMax - x) / indentation);\n return Math.max(0, hoveredNodeLevel - levelSubstracted);\n }\n }\n return hoveredNodeLevel;\n }\n\n /**\n * @param level if level is defined with go to the defined levle to find ancestor. Sinon on prend le current ancestor\n */\n private getNodeAncestors(id: string | number, level?: number): T | undefined {\n const path = this.getAncestorsPath(id);\n if (path.length === 0) {\n return undefined;\n }\n\n if (level !== undefined) {\n return path[level];\n }\n return path[path.length - 1];\n }\n\n private getAncestorsPath(id: string | number): T[] {\n const nodes = this.nodes();\n const roots = nodes.filter((n) => n.level === 0).map((n) => n.data);\n\n for (const root of roots) {\n const path: T[] = [];\n if (this.findPath(root, id, path)) {\n return path;\n }\n }\n\n return [];\n }\n\n private findPath(\n currentNode: T,\n targetId: string | number,\n path: T[]\n ): boolean {\n if (String(currentNode.id) === String(targetId)) {\n return true;\n }\n\n const children = this.childrenAccessor()(currentNode) ?? [];\n for (const child of children) {\n path.push(currentNode);\n if (this.findPath(child, targetId, path)) {\n return true;\n }\n path.pop();\n }\n return false;\n }\n\n private getNodeLevel(node: T): number {\n const treeNode = this.findTreeNode(node.id);\n return treeNode ? treeNode.level : 0;\n }\n\n private getDirectDescendants(node: T): T[] {\n return this.childrenAccessor()(node) ?? [];\n }\n\n private findTreeNode(id: string | number): MatTreeNode<T> | undefined {\n return this.nodes().find((n) => String(n.data.id) === String(id));\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { DragAndDropDirective } from './drag-drop.directive';\nimport { TreeDragDropDirective } from './tree-drag-drop/tree-drag-drop.directive';\n\n/**\n * @deprecated import the DragAndDropDirective directly\n */\n@NgModule({\n imports: [DragAndDropDirective, TreeDragDropDirective],\n exports: [DragAndDropDirective, TreeDragDropDirective]\n})\nexport class IgoDrapDropModule {\n static forRoot(): ModuleWithProviders<IgoDrapDropModule> {\n return {\n ngModule: IgoDrapDropModule,\n providers: []\n };\n }\n}\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":"igo2-common-drag-drop.mjs","sources":["../../../packages/common/drag-drop/src/drag-drop.directive.ts","../../../packages/common/drag-drop/src/tree-drag-drop/tree-drag-drop.directive.ts","../../../packages/common/drag-drop/src/drag-drop.module.ts","../../../packages/common/drag-drop/src/igo2-common-drag-drop.ts"],"sourcesContent":["import {\n Directive,\n HostBinding,\n HostListener,\n input,\n output\n} from '@angular/core';\n\n@Directive({\n selector: '[igoDragAndDrop]'\n})\nexport class DragAndDropDirective {\n readonly allowedExtensions = input<string[]>([]);\n\n protected readonly filesDropped = output<File[]>();\n\n protected readonly filesInvalid = output<File[]>();\n\n @HostBinding('style.background') background = 'inherit';\n\n @HostListener('dragover', ['$event'])\n public onDragOver(evt: DragEvent) {\n evt.preventDefault();\n evt.stopPropagation();\n this.background = '#999';\n }\n\n @HostListener('dragleave', ['$event'])\n public onDragLeave(evt: DragEvent) {\n evt.preventDefault();\n evt.stopPropagation();\n this.background = 'inherit';\n }\n\n @HostListener('drop', ['$event'])\n public onDrop(evt: DragEvent & { alreadyFired?: boolean }) {\n evt.preventDefault();\n evt.stopPropagation();\n if (evt.alreadyFired) {\n return;\n }\n evt.alreadyFired = true;\n\n this.background = 'inherit';\n const filesObj = this.validExtensions(evt);\n if (filesObj.valid.length) {\n this.filesDropped.emit(filesObj.valid);\n }\n if (filesObj.invalid.length) {\n this.filesInvalid.emit(filesObj.invalid);\n }\n }\n\n private validExtensions(evt: DragEvent) {\n const files = evt.dataTransfer?.files;\n const filesObj: { valid: File[]; invalid: File[] } = {\n valid: [],\n invalid: []\n };\n if (files && files.length > 0) {\n for (let i = 0; i < files.length; i++) {\n const file = files[i];\n const ext = file.name.split('.')[file.name.split('.').length - 1];\n const allowedExtensions = this.allowedExtensions();\n if (\n allowedExtensions.length === 0 ||\n (allowedExtensions.lastIndexOf(ext) !== -1 && file.size !== 0)\n ) {\n filesObj.valid.push(file);\n } else {\n filesObj.invalid.push(file);\n }\n }\n }\n\n return filesObj;\n }\n}\n","import { CdkTree } from '@angular/cdk/tree';\nimport {\n Directive,\n EffectRef,\n ElementRef,\n OnDestroy,\n Renderer2,\n booleanAttribute,\n contentChildren,\n effect,\n inject,\n input,\n output,\n signal,\n untracked\n} from '@angular/core';\nimport { MatTreeNode } from '@angular/material/tree';\n\nimport {\n DropPermission,\n DropPosition,\n DropPositionType,\n TreeDropEvent\n} from './tree-drag-drop.interface';\n\ninterface DragNodeListeners {\n element: HTMLElement;\n listeners: [string, EventListenerOrEventListenerObject][];\n}\n\nexport interface ITreeConfig<T> {\n isGroup: (node: T) => boolean;\n descendantLevels: (node: T) => number | undefined;\n}\n\n/**\n * This directive should be use with a MatTree flatened\n * It should add all logic to drag the MatTreeNode and connect the (onDrop) output\n * Class added:\n * Tree: --dragging\n * Node: --drag-hover | --dragged\n */\n@Directive({\n selector: '[igoTreeDragDrop]',\n host: {\n '[class.--dragging]': 'dragging()',\n '(dragover)': 'hostDragOver($event)',\n '(dragleave)': 'hostDragLeave($event)',\n '(drop)': 'hostDrop($event)'\n }\n})\nexport class TreeDragDropDirective<\n T extends { id: string | number } = { id: string | number },\n K = T\n> implements OnDestroy {\n private elementRef = inject(ElementRef);\n private renderer = inject(Renderer2);\n\n draggedNode?: T;\n dropNodeTarget = signal<T | null>(null);\n expandTimeout?: number;\n nodesListeners?: DragNodeListeners[];\n private nodesEffect?: EffectRef = effect(() => {\n this.nodes();\n this.addAllListener();\n });\n dropLineTarget = signal<HTMLElement | null>(null);\n previousDropLine = signal<HTMLElement | null>(null);\n dropPosition = signal<DropPosition | null>(null);\n dragging = signal(false);\n // Use a Set or just manage classes manually since SelectionModel was providing simple toggle\n // But we can stick to simple class logic\n highlightedNode?: T;\n\n readonly tree = input.required<CdkTree<T, K>>();\n readonly childrenAccessor = input.required<(node: T) => T[]>();\n readonly config = input.required<ITreeConfig<T>>();\n\n /** The default is 5 */\n readonly maxLevel = input(5);\n\n readonly treeDragDropIsDisabled = input(false, {\n transform: booleanAttribute\n });\n\n readonly dragStart = output<T>();\n\n readonly dropped = output<TreeDropEvent<T>>();\n\n readonly droppedError = output<DropPermission>();\n\n readonly nodes = contentChildren(MatTreeNode, { descendants: true });\n\n constructor() {\n this.dropped.subscribe(() => this.dragEnd());\n\n effect(() => {\n const disabled = this.treeDragDropIsDisabled();\n disabled ? this.removeAllListener() : this.addAllListener();\n });\n\n effect(() => {\n const current = this.dropLineTarget();\n const parent = this.elementRef.nativeElement.parentElement;\n\n if (!current) {\n untracked(() => {\n const previous = this.previousDropLine();\n if (previous !== null) {\n this.renderer.removeChild(parent, previous);\n this.previousDropLine.set(null);\n }\n });\n } else {\n this.renderer.appendChild(parent, current);\n }\n });\n\n effect(() => {\n if (!this.dragging()) {\n return;\n }\n const targetNode = this.dropNodeTarget();\n const position = this.dropPosition();\n const dropLineTarget = this.dropLineTarget();\n\n if (targetNode) {\n this.setHighlightedNode(targetNode);\n\n if (position) {\n if (dropLineTarget) {\n this.updateDropTargetLinePosition(position, dropLineTarget);\n }\n this.handleGroupExpansion(targetNode, position.type === 'inside');\n }\n }\n });\n }\n\n get isGroup() {\n return this.config().isGroup;\n }\n\n get getDescendantLevels() {\n return this.config().descendantLevels;\n }\n\n ngOnDestroy(): void {\n this.removeAllListener();\n this.removeDropTargetLine();\n if (this.nodesEffect) {\n this.nodesEffect.destroy();\n this.nodesEffect = undefined;\n }\n }\n\n hostDragOver(event: Event): void {\n event.preventDefault();\n }\n\n hostDragLeave(event: DragEvent): void {\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n if (\n event.clientY < rect.top ||\n event.clientY >= rect.bottom ||\n event.clientX < rect.left ||\n event.clientX >= rect.right\n ) {\n this.dragLeave();\n }\n }\n\n hostDrop(event: DragEvent): void {\n this.drop(event);\n }\n\n onDragStart(node: T): void {\n this.addDropTargetLine();\n\n this.dragging.set(true);\n this.draggedNode = node;\n this.addNodeClass(node.id, '--dragged');\n\n this.dragStart.emit(node);\n }\n\n dragEnd(): void {\n this.dragging.set(false);\n this.dropNodeTarget.set(null);\n this.dropPosition.set(null);\n\n if (this.draggedNode) {\n this.removeNodeClass(this.draggedNode.id, '--dragged');\n this.draggedNode = undefined;\n }\n\n this.dragLeave();\n this.removeDropTargetLine();\n }\n\n dragOver(node: T, event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n\n this.dropNodeTarget.set(node);\n\n const position = this.getPosition(event, node);\n this.dropPosition.set(position);\n }\n\n dragLeave(): void {\n if (this.expandTimeout) clearTimeout(this.expandTimeout);\n this.expandTimeout = undefined;\n if (this.highlightedNode) {\n this.removeNodeClass(this.highlightedNode.id, '--drag-hover');\n this.highlightedNode = undefined;\n }\n }\n\n drop(event: DragEvent): void {\n let nodeTarget = this.dropNodeTarget();\n if (!nodeTarget || this.treeDragDropIsDisabled()) {\n return;\n }\n\n const dropPosition: DropPosition = this.getPosition(event, nodeTarget);\n\n const validation = this.canDropNode(nodeTarget, dropPosition);\n if (!validation.canDrop) {\n this.droppedError.emit(validation);\n return;\n }\n\n let targetNodeLevel = this.getNodeLevel(nodeTarget);\n\n // Allow to drop a last child outside is group. We refer to it's ancestor for the target\n if (\n dropPosition.type === 'below' &&\n dropPosition.level !== targetNodeLevel\n ) {\n const ancestor = this.getNodeAncestors(nodeTarget.id, dropPosition.level);\n if (ancestor) {\n this.dropNodeTarget.set(ancestor);\n nodeTarget = ancestor;\n targetNodeLevel = this.getNodeLevel(nodeTarget);\n }\n }\n\n if (this.isGroup(nodeTarget)) {\n if (dropPosition.type === 'inside') {\n const isExpanded = this.tree().isExpanded(nodeTarget);\n if (isExpanded) {\n const children = this.getDirectDescendants(nodeTarget);\n if (this.draggedNode && children[0]?.id === this.draggedNode.id) {\n return;\n }\n }\n\n this.tree().expand(nodeTarget);\n if (this.draggedNode) {\n return this.dropped.emit({\n node: this.draggedNode,\n ref: nodeTarget,\n position: dropPosition.type\n });\n }\n return;\n }\n }\n\n if (\n dropPosition.type === 'below' &&\n dropPosition.level !== targetNodeLevel\n ) {\n const ancestor = this.getNodeAncestors(nodeTarget.id);\n if (this.draggedNode && ancestor) {\n return this.dropped.emit({\n node: this.draggedNode,\n ref: ancestor,\n position: dropPosition.type\n });\n }\n return;\n }\n\n if (this.draggedNode && nodeTarget) {\n this.dropped.emit({\n node: this.draggedNode,\n ref: nodeTarget,\n position: dropPosition.type\n });\n }\n }\n\n private addNodeClass(id: string | number, className: string): void {\n const node = this.findTreeNode(id);\n if (node) {\n this.renderer.addClass(node['_elementRef'].nativeElement, className);\n }\n }\n\n private removeNodeClass(id: string | number, className: string): void {\n const node = this.findTreeNode(id);\n if (node) {\n this.renderer.removeClass(node['_elementRef'].nativeElement, className);\n }\n }\n\n private addAllListener(): void {\n if (this.treeDragDropIsDisabled()) {\n return;\n }\n const nodes = this.nodes();\n if (this.nodesListeners) {\n this.removeAllListener();\n }\n\n this.nodesListeners = nodes?.map((node) => this.addListener(node));\n }\n\n private addListener(node: MatTreeNode<T>): DragNodeListeners {\n const element = node['_elementRef'].nativeElement as HTMLElement;\n const listeners: [string, EventListenerOrEventListenerObject][] = [\n ['dragstart', () => this.onDragStart(node.data)],\n ['dragend', () => this.dragEnd()],\n [\n 'dragover',\n (event: Event) => this.dragOver(node.data, event as DragEvent)\n ],\n ['dragleave', () => this.dragLeave()]\n ];\n element.setAttribute('draggable', 'true');\n listeners.forEach(([type, listener]) =>\n element.addEventListener(type, listener)\n );\n\n return { element, listeners };\n }\n\n private removeAllListener(): void {\n this.nodesListeners?.forEach(({ element, listeners }) => {\n listeners.forEach(([type, listener]) => {\n element.setAttribute('draggable', 'false');\n element.removeEventListener(type, listener);\n });\n });\n this.nodesListeners = undefined;\n }\n\n private setHighlightedNode(node: T): void {\n const toHighlight = this.isGroup(node)\n ? node\n : this.getNodeAncestors(node.id);\n\n if (this.highlightedNode && this.highlightedNode.id !== toHighlight?.id) {\n this.removeNodeClass(this.highlightedNode.id, '--drag-hover');\n this.highlightedNode = undefined;\n }\n\n if (toHighlight) {\n this.highlightedNode = toHighlight;\n this.addNodeClass(toHighlight.id, '--drag-hover');\n } else if (this.highlightedNode) {\n this.removeNodeClass(this.highlightedNode.id, '--drag-hover');\n this.highlightedNode = undefined;\n }\n }\n\n private addDropTargetLine(): void {\n const target: HTMLElement = this.renderer.createElement('div');\n target.classList.add('drop-target-line');\n target.setAttribute(\n 'style',\n `position: absolute; top: 0; width: 100%; pointer-events: none; z-index: 4; height: 2px; background-color: black; transition: margin-left 150ms;`\n );\n this.dropLineTarget.set(target);\n }\n\n private removeDropTargetLine(): void {\n const target = this.dropLineTarget();\n if (target) {\n this.previousDropLine.set(target);\n this.dropLineTarget.set(null);\n }\n }\n\n private hideDropTargetLine(): void {\n const target = this.dropLineTarget();\n this.renderer.setStyle(target, 'display', 'none');\n }\n\n private showDropTargetLine(): void {\n const target = this.dropLineTarget();\n this.renderer.setStyle(target, 'display', 'block');\n }\n\n private updateDropTargetLinePosition(\n position: DropPosition,\n dropLineTarget: HTMLElement\n ): void {\n if (position.type === 'inside') {\n return this.hideDropTargetLine();\n } else {\n this.showDropTargetLine();\n }\n\n this.renderer.setStyle(\n dropLineTarget,\n 'margin-left',\n position.level * 24 + 20 + 'px'\n );\n this.renderer.setStyle(\n dropLineTarget,\n 'transform',\n 'translate3d(0,' + position.y + 'px, 0)'\n );\n }\n\n private handleGroupExpansion(node: T, isInside: boolean): void {\n if (!isInside) {\n return this.dragLeave();\n }\n const isOpen = this.tree().isExpanded(node);\n if (!isOpen && !this.expandTimeout) {\n this.expandTimeout = window.setTimeout(() => {\n this.tree().expand(node);\n }, 1200);\n }\n }\n\n private getNodeElement(node: T): HTMLElement | undefined {\n const treeNode = this.findTreeNode(node.id);\n return treeNode?.['_elementRef'].nativeElement;\n }\n\n private canDropNode(hoveredNode: T, position: DropPosition): DropPermission {\n if (!this.draggedNode) {\n return { canDrop: false };\n }\n if (this.isGroup(this.draggedNode)) {\n return this.canDropGroup(hoveredNode, position);\n }\n\n const hasMaxLevelRestrictions = this.validateMaxHierarchyLevel(position);\n if (hasMaxLevelRestrictions) {\n return hasMaxLevelRestrictions;\n }\n\n return { canDrop: true };\n }\n\n private canDropGroup(\n hoveredNode: T,\n position: DropPosition\n ): {\n canDrop: boolean;\n message?: string;\n params?: { [key: string]: unknown };\n } {\n if (!this.draggedNode) {\n return { canDrop: false };\n }\n if (hoveredNode.id === this.draggedNode.id) {\n return {\n canDrop: false,\n message: 'igo.common.dragDrop.cannot.dropInsideItself'\n };\n }\n const isHoverDescendant = this.isHoverDescendant(\n hoveredNode.id,\n hoveredNode\n );\n if (isHoverDescendant) {\n return {\n canDrop: !isHoverDescendant,\n message: 'igo.common.dragDrop.cannot.dropInsideItself'\n };\n }\n\n const hasMaxLevelRestrictions = this.validateMaxHierarchyLevel(position);\n if (hasMaxLevelRestrictions) {\n return hasMaxLevelRestrictions;\n }\n\n return {\n canDrop: true,\n message: undefined\n };\n }\n\n private validateMaxHierarchyLevel(\n position: DropPosition\n ): DropPermission | undefined {\n if (!this.draggedNode) {\n return { canDrop: false };\n }\n\n const maxLevel = this.maxLevel();\n if (!maxLevel) {\n return undefined;\n }\n\n let level =\n position.type === 'inside' ? position.level + 1 : position.level;\n\n if (this.isGroup(this.draggedNode)) {\n // We add an extra level +1 to avoid empty group in group\n level = level + +(this.getDescendantLevels(this.draggedNode) ?? 0) + 1;\n }\n\n if (level > maxLevel) {\n return {\n canDrop: false,\n message: 'igo.common.dragDrop.cannot.maxLevel',\n params: { value: maxLevel }\n };\n }\n\n return undefined;\n }\n\n private getDescendants(node: T): T[] {\n const children = this.childrenAccessor()(node) ?? [];\n const descendants: T[] = [...children];\n children.forEach((child) => {\n descendants.push(...this.getDescendants(child));\n });\n return descendants;\n }\n\n private isHoverDescendant(id: string | number, _hoveredNode: T): boolean {\n if (!this.draggedNode) return false;\n return this.getDescendants(this.draggedNode).some(\n (child) => child.id === id\n );\n }\n\n private getPosition(event: DragEvent, hoveredNode: T): DropPosition {\n if (this.draggedNode && this.isGroup(this.draggedNode)) {\n if (this.isHoverDescendant(hoveredNode.id, hoveredNode)) {\n hoveredNode = this.draggedNode;\n }\n }\n\n let positionType = this.getPositionType(event, hoveredNode);\n\n const bellowOpenedGroup =\n this.isGroup(hoveredNode) &&\n positionType === 'below' &&\n this.tree().isExpanded(hoveredNode);\n if (bellowOpenedGroup) {\n positionType = 'inside';\n }\n\n return {\n x: event.x,\n y: this.getPositionY(hoveredNode, positionType),\n level: this.getPositionLevel(hoveredNode, positionType, event.x),\n type: positionType\n };\n }\n\n private getPositionY(node: T, type: DropPositionType): number {\n const element = this.getNodeElement(node);\n if (!element) return 0;\n const rect = element.getBoundingClientRect();\n\n return type === 'below'\n ? element.offsetTop + rect.height - 1\n : element.offsetTop + 1;\n }\n\n private getPositionType(event: DragEvent, hoveredNode: T): DropPositionType {\n const target = this.getNodeElement(hoveredNode);\n if (!target) return 'above';\n const rect = target.getBoundingClientRect();\n const middle = rect.top + rect.height / 2;\n const y = event.y;\n\n const selfReferencing =\n this.draggedNode && this.draggedNode.id === hoveredNode.id;\n if (this.isGroup(hoveredNode) && !selfReferencing) {\n const tolerence = 5;\n if (y <= middle + tolerence && y >= middle - tolerence) {\n return 'inside';\n }\n }\n\n const isBelow = y > middle;\n return isBelow ? 'below' : 'above';\n }\n\n private getPositionLevel(\n hoveredNode: T,\n type: DropPositionType,\n x: number\n ): number {\n const hoveredNodeLevel = this.getNodeLevel(hoveredNode);\n if (hoveredNodeLevel === 0) {\n return 0;\n }\n\n const ancestor = this.getNodeAncestors(hoveredNode.id);\n if (!ancestor) return hoveredNodeLevel;\n\n const children = this.getDirectDescendants(ancestor);\n const lastChild = [...children].pop();\n\n if (type === 'below' && lastChild?.id === hoveredNode.id) {\n const target = this.getNodeElement(hoveredNode);\n if (!target) return hoveredNodeLevel;\n const rect = target.getBoundingClientRect();\n\n const indentation = 24;\n const xMin = rect.x + indentation;\n const xMax = xMin + indentation * hoveredNodeLevel;\n\n const isInsideSameGroup = x > xMax;\n if (!isInsideSameGroup) {\n const levelSubstracted = Math.round((xMax - x) / indentation);\n return Math.max(0, hoveredNodeLevel - levelSubstracted);\n }\n }\n return hoveredNodeLevel;\n }\n\n /**\n * @param level if level is defined with go to the defined levle to find ancestor. Sinon on prend le current ancestor\n */\n private getNodeAncestors(id: string | number, level?: number): T | undefined {\n const path = this.getAncestorsPath(id);\n if (path.length === 0) {\n return undefined;\n }\n\n if (level !== undefined) {\n return path[level];\n }\n return path[path.length - 1];\n }\n\n private getAncestorsPath(id: string | number): T[] {\n const nodes = this.nodes();\n const roots = nodes.filter((n) => n.level === 0).map((n) => n.data);\n\n for (const root of roots) {\n const path: T[] = [];\n if (this.findPath(root, id, path)) {\n return path;\n }\n }\n\n return [];\n }\n\n private findPath(\n currentNode: T,\n targetId: string | number,\n path: T[]\n ): boolean {\n if (String(currentNode.id) === String(targetId)) {\n return true;\n }\n\n const children = this.childrenAccessor()(currentNode) ?? [];\n for (const child of children) {\n path.push(currentNode);\n if (this.findPath(child, targetId, path)) {\n return true;\n }\n path.pop();\n }\n return false;\n }\n\n private getNodeLevel(node: T): number {\n const treeNode = this.findTreeNode(node.id);\n return treeNode ? treeNode.level : 0;\n }\n\n private getDirectDescendants(node: T): T[] {\n return this.childrenAccessor()(node) ?? [];\n }\n\n private findTreeNode(id: string | number): MatTreeNode<T> | undefined {\n return this.nodes().find((n) => String(n.data.id) === String(id));\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { DragAndDropDirective } from './drag-drop.directive';\nimport { TreeDragDropDirective } from './tree-drag-drop/tree-drag-drop.directive';\n\n/**\n * @deprecated import the DragAndDropDirective directly\n */\n@NgModule({\n imports: [DragAndDropDirective, TreeDragDropDirective],\n exports: [DragAndDropDirective, TreeDragDropDirective]\n})\nexport class IgoDrapDropModule {\n static forRoot(): ModuleWithProviders<IgoDrapDropModule> {\n return {\n ngModule: IgoDrapDropModule,\n providers: []\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
@@ -101,7 +101,7 @@ class DynamicComponent {
101
101
  * @param value Input value
102
102
  */
103
103
  setInputValue(key, value) {
104
- this.componentRef.setInput(key, value);
104
+ this.componentRef?.setInput(key, value);
105
105
  }
106
106
  /**
107
107
  * Update the component subscribers. This is an update so any
@@ -138,6 +138,8 @@ class DynamicComponent {
138
138
  */
139
139
  observeInput(key, observable) {
140
140
  this.inputs$$[key] = observable.subscribe((value) => {
141
+ if (!this.componentRef)
142
+ return;
141
143
  const instance = this.componentRef.instance;
142
144
  this.setInputValue(key, value);
143
145
  const instWithHook = instance;
@@ -206,7 +208,7 @@ class DynamicOutletComponent {
206
208
  /**
207
209
  * The dynamic component base class or the dynamic component itself
208
210
  */
209
- component = input(undefined, ...(ngDevMode ? [{ debugName: "component" }] : /* istanbul ignore next */ []));
211
+ component = input(...(ngDevMode ? [undefined, { debugName: "component" }] : /* istanbul ignore next */ []));
210
212
  /**
211
213
  * The dynamic component inputs
212
214
  */
@@ -292,7 +294,11 @@ class DynamicOutletComponent {
292
294
  * @internal
293
295
  */
294
296
  updateInputs() {
295
- this.dynamicComponent.updateInputs(this.inputs());
297
+ const inputs = this.inputs();
298
+ if (!inputs) {
299
+ return;
300
+ }
301
+ this.dynamicComponent.updateInputs(inputs);
296
302
  }
297
303
  /**
298
304
  * Update the dynamic component subscribers. This is an update so any
@@ -1 +1 @@
1
- {"version":3,"file":"igo2-common-dynamic-component.mjs","sources":["../../../packages/common/dynamic-component/src/shared/dynamic-component.ts","../../../packages/common/dynamic-component/src/shared/dynamic-component.service.ts","../../../packages/common/dynamic-component/src/dynamic-outlet/dynamic-outlet.component.ts","../../../packages/common/dynamic-component/src/dynamic-outlet/dynamic-outlet.component.html","../../../packages/common/dynamic-component/src/dynamic-component.module.ts","../../../packages/common/dynamic-component/src/dynamic-outlet/dynamic-outlet.module.ts","../../../packages/common/dynamic-component/src/igo2-common-dynamic-component.ts"],"sourcesContent":["import {\n ComponentFactory,\n ComponentRef,\n ViewContainerRef\n} from '@angular/core';\n\nimport { Observable, Subscription } from 'rxjs';\n\n/**\n * This class is used in the DynamicComponentOutlet component. It holds\n * a reference to a component factory and can render that component\n * in a target element on demand. It's also possible to set inputs\n * and to subscribe to outputs.\n */\nexport class DynamicComponent<C> {\n /**\n * Component reference\n */\n private componentRef: ComponentRef<C>;\n\n /**\n * Subscriptions to the component's outputs. Those need\n * to be unsubscribed when the component is destroyed.\n */\n private subscriptions: Subscription[] = [];\n\n /**\n * Component target element\n */\n private target: ViewContainerRef;\n\n /**\n * Component inputs\n */\n private inputs: Record<string, unknown> = {};\n\n /**\n * Subscriptions to the component's async inputs\n */\n private inputs$$: Record<string, Subscription> = {};\n\n /**\n * Subscribers to the component's outputs\n */\n private subscribers: Record<string, (event: unknown) => void> = {};\n\n constructor(private componentFactory: ComponentFactory<C>) {}\n\n /**\n * Render the component to a target element.\n * Set it's inputs and subscribe to it's outputs.\n * @param target Target element\n */\n setTarget(target: ViewContainerRef) {\n this.target = target;\n this.componentRef = target.createComponent(this.componentFactory);\n this.updateInputs(this.inputs);\n this.updateSubscribers(this.subscribers);\n }\n\n /**\n * Destroy this component. That means, removing from it's target\n * element and unsubscribing to it's outputs.\n */\n destroy() {\n if (this.target !== undefined) {\n this.target.clear();\n }\n if (this.componentRef !== undefined) {\n this.componentRef.destroy();\n this.componentRef = undefined;\n }\n this.unobserveAllInputs();\n this.unsubscribeAll();\n }\n\n /**\n * Update the component inputs. This is an update so any\n * key not defined won't be overwritten.\n */\n updateInputs(inputs: Record<string, unknown>) {\n this.inputs = inputs;\n if (this.componentRef === undefined) {\n return;\n }\n\n const instance = this.componentRef.instance;\n const allowedInputs = this.componentFactory.inputs;\n allowedInputs.forEach(\n (value: { propName: string; templateName: string }) => {\n const key = value.propName;\n\n this.unobserveInput(key);\n\n const inputValue = inputs[key];\n if (Object.prototype.hasOwnProperty.call(inputs, key)) {\n if (inputValue instanceof Observable) {\n this.observeInput(key, inputValue);\n } else {\n this.setInputValue(key, inputValue);\n }\n }\n }\n );\n\n const instWithHook = instance as { onUpdateInputs?: unknown };\n if (typeof instWithHook.onUpdateInputs === 'function') {\n (instWithHook.onUpdateInputs as () => void)();\n }\n }\n\n /**\n * Set an instance's input value\n * @param instance Component instance\n * @param key Input key\n * @param value Input value\n */\n private setInputValue(key: string, value: unknown) {\n this.componentRef.setInput(key, value);\n }\n\n /**\n * Update the component subscribers. This is an update so any\n * key not defined won't be overwritten.\n */\n updateSubscribers(subscribers: Record<string, (event: unknown) => void>) {\n this.subscribers = subscribers;\n if (this.componentRef === undefined) {\n return;\n }\n\n const instance = this.componentRef.instance;\n const allowedSubscribers = this.componentFactory.outputs;\n allowedSubscribers.forEach(\n (value: { propName: string; templateName: string }) => {\n const key = value.propName;\n if (Object.prototype.hasOwnProperty.call(subscribers, key)) {\n const emitter = instance[key];\n const subscriber = subscribers[key];\n if (Array.isArray(subscriber)) {\n subscriber.forEach((_subscriber) => {\n this.subscriptions.push(emitter.subscribe(_subscriber));\n });\n } else {\n this.subscriptions.push(emitter.subscribe(subscriber));\n }\n }\n }\n );\n }\n\n /**\n * Subscribe to an observable input and update the component's input value\n * accordingly\n * @param key Input key\n * @param observable Observable\n */\n private observeInput(key: string, observable: Observable<unknown>) {\n this.inputs$$[key] = observable.subscribe((value: unknown) => {\n const instance = this.componentRef.instance;\n this.setInputValue(key, value);\n\n const instWithHook = instance as { onUpdateInputs?: unknown };\n if (typeof instWithHook.onUpdateInputs === 'function') {\n (instWithHook.onUpdateInputs as () => void)();\n }\n });\n }\n\n /**\n * Unsubscribe to an observable input\n * @param key Input key\n */\n private unobserveInput(key: string) {\n if (this.inputs$$[key] !== undefined) {\n this.inputs$$[key].unsubscribe();\n this.inputs$$[key] = undefined;\n }\n }\n\n /**\n * Unsubscribe to all outputs.\n */\n private unobserveAllInputs() {\n Object.values(this.inputs$$).forEach((s: Subscription | undefined) => {\n if (s !== undefined) {\n s.unsubscribe();\n }\n });\n this.inputs$$ = {};\n }\n\n /**\n * Unsubscribe to all outputs.\n */\n private unsubscribeAll() {\n this.subscriptions.forEach((s: Subscription) => s.unsubscribe());\n this.subscriptions = [];\n }\n}\n","import { ComponentFactoryResolver, Injectable, inject } from '@angular/core';\n\nimport { DynamicComponent } from './dynamic-component';\n\n/**\n * Service to creates DynamicComponent instances from base component classes\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class DynamicComponentService {\n private resolver = inject(ComponentFactoryResolver);\n\n /**\n * Creates a DynamicComponent instance from a base component class\n * @param componentCls The component class\n * @returns DynamicComponent instance\n */\n create(componentCls: any): DynamicComponent<any> {\n const factory = this.resolver.resolveComponentFactory(componentCls as any);\n return new DynamicComponent<typeof componentCls>(factory);\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ViewContainerRef,\n inject,\n input,\n viewChild\n} from '@angular/core';\n\nimport { ObjectUtils } from '@igo2/utils';\n\nimport { DynamicComponent } from '../shared/dynamic-component';\nimport { DynamicComponentService } from '../shared/dynamic-component.service';\n\n@Component({\n selector: 'igo-dynamic-outlet',\n templateUrl: 'dynamic-outlet.component.html',\n styleUrls: ['dynamic-outlet.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DynamicOutletComponent implements OnChanges, OnDestroy {\n private dynamicComponentService = inject(DynamicComponentService);\n private cdRef = inject(ChangeDetectorRef);\n\n /**\n * The dynamic component base class or the dynamic component itself\n */\n readonly component = input<DynamicComponent<any> | any>(undefined);\n\n /**\n * The dynamic component inputs\n */\n readonly inputs = input<Record<string, any>>({});\n\n /**\n * The subscribers to the dynamic component outputs\n */\n readonly subscribers = input<Record<string, (event: any) => void>>({});\n\n /**\n * The dynamic component\n */\n private dynamicComponent: DynamicComponent<any>;\n\n /**\n * The view element to render the component to\n * @ignore\n */\n private readonly target = viewChild('target', { read: ViewContainerRef });\n\n /**\n * If the dynamic component changes, create it.\n * If the inputs or subscribers change, update the current component's\n * inputs or subscribers.\n * @internal\n */\n ngOnChanges(changes: SimpleChanges) {\n const component = changes.component;\n const inputs = changes.inputs;\n const subscribers = changes.subscribers;\n const eq = ObjectUtils.objectsAreEquivalent;\n\n if (!component || !component.currentValue) {\n return;\n }\n\n if (component.currentValue !== component.previousValue) {\n this.createComponent(component.currentValue);\n } else {\n const inputsAreEquivalents =\n inputs && eq(inputs.currentValue || {}, inputs.previousValue || {});\n const subscribersAreEquivalents =\n subscribers &&\n eq(subscribers.currentValue || {}, subscribers.previousValue || {});\n\n if (inputsAreEquivalents === false) {\n this.updateInputs();\n }\n\n if (subscribersAreEquivalents === false) {\n this.updateSubscribers();\n }\n }\n this.cdRef.detectChanges();\n }\n\n /**\n * Destroy the dynamic component and all it's subscribers\n * @internal\n */\n ngOnDestroy() {\n if (this.dynamicComponent) {\n this.dynamicComponent.destroy();\n }\n }\n\n /**\n * Create a DynamicComponent out of the component class and render it.\n * @internal\n */\n private createComponent(component: DynamicComponent<any> | any) {\n if (this.dynamicComponent !== undefined) {\n this.dynamicComponent.destroy();\n }\n this.dynamicComponent =\n component instanceof DynamicComponent\n ? component\n : this.dynamicComponentService.create(component);\n this.renderComponent();\n }\n\n /**\n * Create and render the dynamic component. Set it's inputs and subscribers\n * @internal\n */\n private renderComponent() {\n this.updateInputs();\n this.updateSubscribers();\n this.dynamicComponent.setTarget(this.target());\n }\n\n /**\n * Update the dynamic component inputs. This is an update so any\n * key not defined won't be overwritten.\n * @internal\n */\n private updateInputs() {\n this.dynamicComponent.updateInputs(this.inputs());\n }\n\n /**\n * Update the dynamic component subscribers. This is an update so any\n * key not defined won't be overwritten.\n * @internal\n */\n private updateSubscribers() {\n this.dynamicComponent.updateSubscribers(this.subscribers());\n }\n}\n","<ng-template #target />\n","import { NgModule } from '@angular/core';\n\nimport { DynamicOutletComponent } from './dynamic-outlet/dynamic-outlet.component';\n\n/**\n * @deprecated import the DynamicOutletComponent directly\n */\n@NgModule({\n imports: [DynamicOutletComponent],\n exports: [DynamicOutletComponent]\n})\nexport class IgoDynamicComponentModule {}\n","import { NgModule } from '@angular/core';\n\nimport { DynamicOutletComponent } from './dynamic-outlet.component';\n\n/**\n * @deprecated import the DynamicOutletComponent directly\n */\n@NgModule({\n imports: [DynamicOutletComponent],\n exports: [DynamicOutletComponent]\n})\nexport class IgoDynamicOutletModule {}\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":"igo2-common-dynamic-component.mjs","sources":["../../../packages/common/dynamic-component/src/shared/dynamic-component.ts","../../../packages/common/dynamic-component/src/shared/dynamic-component.service.ts","../../../packages/common/dynamic-component/src/dynamic-outlet/dynamic-outlet.component.ts","../../../packages/common/dynamic-component/src/dynamic-outlet/dynamic-outlet.component.html","../../../packages/common/dynamic-component/src/dynamic-component.module.ts","../../../packages/common/dynamic-component/src/dynamic-outlet/dynamic-outlet.module.ts","../../../packages/common/dynamic-component/src/igo2-common-dynamic-component.ts"],"sourcesContent":["import {\n ComponentFactory,\n ComponentRef,\n ViewContainerRef\n} from '@angular/core';\n\nimport { Observable, Subscription } from 'rxjs';\n\n/**\n * This class is used in the DynamicComponentOutlet component. It holds\n * a reference to a component factory and can render that component\n * in a target element on demand. It's also possible to set inputs\n * and to subscribe to outputs.\n */\nexport class DynamicComponent<C> {\n /**\n * Component reference\n */\n private componentRef?: ComponentRef<C>;\n\n /**\n * Subscriptions to the component's outputs. Those need\n * to be unsubscribed when the component is destroyed.\n */\n private subscriptions: Subscription[] = [];\n\n /**\n * Component target element\n */\n private target?: ViewContainerRef;\n\n /**\n * Component inputs\n */\n private inputs: Record<string, unknown> = {};\n\n /**\n * Subscriptions to the component's async inputs\n */\n private inputs$$: Record<string, Subscription | undefined> = {};\n\n /**\n * Subscribers to the component's outputs\n */\n private subscribers: Record<string, (event: unknown) => void> = {};\n\n constructor(private componentFactory: ComponentFactory<C>) {}\n\n /**\n * Render the component to a target element.\n * Set it's inputs and subscribe to it's outputs.\n * @param target Target element\n */\n setTarget(target: ViewContainerRef) {\n this.target = target;\n this.componentRef = target.createComponent(this.componentFactory);\n this.updateInputs(this.inputs);\n this.updateSubscribers(this.subscribers);\n }\n\n /**\n * Destroy this component. That means, removing from it's target\n * element and unsubscribing to it's outputs.\n */\n destroy() {\n if (this.target !== undefined) {\n this.target.clear();\n }\n if (this.componentRef !== undefined) {\n this.componentRef.destroy();\n this.componentRef = undefined;\n }\n this.unobserveAllInputs();\n this.unsubscribeAll();\n }\n\n /**\n * Update the component inputs. This is an update so any\n * key not defined won't be overwritten.\n */\n updateInputs(inputs: Record<string, unknown>) {\n this.inputs = inputs;\n if (this.componentRef === undefined) {\n return;\n }\n\n const instance = this.componentRef.instance;\n const allowedInputs = this.componentFactory.inputs;\n allowedInputs.forEach(\n (value: { propName: string; templateName: string }) => {\n const key = value.propName;\n\n this.unobserveInput(key);\n\n const inputValue = inputs[key];\n if (Object.prototype.hasOwnProperty.call(inputs, key)) {\n if (inputValue instanceof Observable) {\n this.observeInput(key, inputValue);\n } else {\n this.setInputValue(key, inputValue);\n }\n }\n }\n );\n\n const instWithHook = instance as { onUpdateInputs?: unknown };\n if (typeof instWithHook.onUpdateInputs === 'function') {\n (instWithHook.onUpdateInputs as () => void)();\n }\n }\n\n /**\n * Set an instance's input value\n * @param instance Component instance\n * @param key Input key\n * @param value Input value\n */\n private setInputValue(key: string, value: unknown) {\n this.componentRef?.setInput(key, value);\n }\n\n /**\n * Update the component subscribers. This is an update so any\n * key not defined won't be overwritten.\n */\n updateSubscribers(subscribers: Record<string, (event: unknown) => void>) {\n this.subscribers = subscribers;\n if (this.componentRef === undefined) {\n return;\n }\n\n const instance = this.componentRef.instance;\n const allowedSubscribers = this.componentFactory.outputs;\n allowedSubscribers.forEach(\n (value: { propName: string; templateName: string }) => {\n const key = value.propName;\n if (Object.prototype.hasOwnProperty.call(subscribers, key)) {\n const emitter = (instance as any)[key];\n const subscriber = subscribers[key];\n if (Array.isArray(subscriber)) {\n subscriber.forEach((_subscriber) => {\n this.subscriptions.push(emitter.subscribe(_subscriber));\n });\n } else {\n this.subscriptions.push(emitter.subscribe(subscriber));\n }\n }\n }\n );\n }\n\n /**\n * Subscribe to an observable input and update the component's input value\n * accordingly\n * @param key Input key\n * @param observable Observable\n */\n private observeInput(key: string, observable: Observable<unknown>) {\n this.inputs$$[key] = observable.subscribe((value: unknown) => {\n if (!this.componentRef) return;\n const instance = this.componentRef.instance;\n this.setInputValue(key, value);\n\n const instWithHook = instance as { onUpdateInputs?: unknown };\n if (typeof instWithHook.onUpdateInputs === 'function') {\n (instWithHook.onUpdateInputs as () => void)();\n }\n });\n }\n\n /**\n * Unsubscribe to an observable input\n * @param key Input key\n */\n private unobserveInput(key: string) {\n if (this.inputs$$[key] !== undefined) {\n this.inputs$$[key].unsubscribe();\n this.inputs$$[key] = undefined;\n }\n }\n\n /**\n * Unsubscribe to all outputs.\n */\n private unobserveAllInputs() {\n Object.values(this.inputs$$).forEach((s: Subscription | undefined) => {\n if (s !== undefined) {\n s.unsubscribe();\n }\n });\n this.inputs$$ = {};\n }\n\n /**\n * Unsubscribe to all outputs.\n */\n private unsubscribeAll() {\n this.subscriptions.forEach((s: Subscription) => s.unsubscribe());\n this.subscriptions = [];\n }\n}\n","import { ComponentFactoryResolver, Injectable, inject } from '@angular/core';\n\nimport { DynamicComponent } from './dynamic-component';\n\n/**\n * Service to creates DynamicComponent instances from base component classes\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class DynamicComponentService {\n private resolver = inject(ComponentFactoryResolver);\n\n /**\n * Creates a DynamicComponent instance from a base component class\n * @param componentCls The component class\n * @returns DynamicComponent instance\n */\n create(componentCls: any): DynamicComponent<any> {\n const factory = this.resolver.resolveComponentFactory(componentCls as any);\n return new DynamicComponent<typeof componentCls>(factory);\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ViewContainerRef,\n inject,\n input,\n viewChild\n} from '@angular/core';\n\nimport { ObjectUtils } from '@igo2/utils';\n\nimport { DynamicComponent } from '../shared/dynamic-component';\nimport { DynamicComponentService } from '../shared/dynamic-component.service';\n\n@Component({\n selector: 'igo-dynamic-outlet',\n templateUrl: 'dynamic-outlet.component.html',\n styleUrls: ['dynamic-outlet.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DynamicOutletComponent implements OnChanges, OnDestroy {\n private dynamicComponentService = inject(DynamicComponentService);\n private cdRef = inject(ChangeDetectorRef);\n\n /**\n * The dynamic component base class or the dynamic component itself\n */\n readonly component = input<DynamicComponent<any> | any>();\n\n /**\n * The dynamic component inputs\n */\n readonly inputs = input<Record<string, any> | undefined>({});\n\n /**\n * The subscribers to the dynamic component outputs\n */\n readonly subscribers = input<Record<string, (event: any) => void>>({});\n\n /**\n * The dynamic component\n */\n private dynamicComponent!: DynamicComponent<any>;\n\n /**\n * The view element to render the component to\n * @ignore\n */\n private readonly target = viewChild('target', { read: ViewContainerRef });\n\n /**\n * If the dynamic component changes, create it.\n * If the inputs or subscribers change, update the current component's\n * inputs or subscribers.\n * @internal\n */\n ngOnChanges(changes: SimpleChanges) {\n const component = changes.component;\n const inputs = changes.inputs;\n const subscribers = changes.subscribers;\n const eq = ObjectUtils.objectsAreEquivalent;\n\n if (!component || !component.currentValue) {\n return;\n }\n\n if (component.currentValue !== component.previousValue) {\n this.createComponent(component.currentValue);\n } else {\n const inputsAreEquivalents =\n inputs && eq(inputs.currentValue || {}, inputs.previousValue || {});\n const subscribersAreEquivalents =\n subscribers &&\n eq(subscribers.currentValue || {}, subscribers.previousValue || {});\n\n if (inputsAreEquivalents === false) {\n this.updateInputs();\n }\n\n if (subscribersAreEquivalents === false) {\n this.updateSubscribers();\n }\n }\n this.cdRef.detectChanges();\n }\n\n /**\n * Destroy the dynamic component and all it's subscribers\n * @internal\n */\n ngOnDestroy() {\n if (this.dynamicComponent) {\n this.dynamicComponent.destroy();\n }\n }\n\n /**\n * Create a DynamicComponent out of the component class and render it.\n * @internal\n */\n private createComponent(component: DynamicComponent<any> | any) {\n if (this.dynamicComponent !== undefined) {\n this.dynamicComponent.destroy();\n }\n this.dynamicComponent =\n component instanceof DynamicComponent\n ? component\n : this.dynamicComponentService.create(component);\n this.renderComponent();\n }\n\n /**\n * Create and render the dynamic component. Set it's inputs and subscribers\n * @internal\n */\n private renderComponent() {\n this.updateInputs();\n this.updateSubscribers();\n this.dynamicComponent.setTarget(this.target()!);\n }\n\n /**\n * Update the dynamic component inputs. This is an update so any\n * key not defined won't be overwritten.\n * @internal\n */\n private updateInputs() {\n const inputs = this.inputs();\n if (!inputs) {\n return;\n }\n this.dynamicComponent.updateInputs(inputs);\n }\n\n /**\n * Update the dynamic component subscribers. This is an update so any\n * key not defined won't be overwritten.\n * @internal\n */\n private updateSubscribers() {\n this.dynamicComponent.updateSubscribers(this.subscribers());\n }\n}\n","<ng-template #target />\n","import { NgModule } from '@angular/core';\n\nimport { DynamicOutletComponent } from './dynamic-outlet/dynamic-outlet.component';\n\n/**\n * @deprecated import the DynamicOutletComponent directly\n */\n@NgModule({\n imports: [DynamicOutletComponent],\n exports: [DynamicOutletComponent]\n})\nexport class IgoDynamicComponentModule {}\n","import { NgModule } from '@angular/core';\n\nimport { DynamicOutletComponent } from './dynamic-outlet.component';\n\n/**\n * @deprecated import the DynamicOutletComponent directly\n */\n@NgModule({\n imports: [DynamicOutletComponent],\n exports: [DynamicOutletComponent]\n})\nexport class IgoDynamicOutletModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}