@igo2/common 20.1.0-next.2 → 20.1.0-next.21

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 (76) hide show
  1. package/badge/index.d.ts +1 -1
  2. package/drag-drop/index.d.ts +48 -35
  3. package/entity/index.d.ts +90 -24
  4. package/fesm2022/igo2-common-action.mjs +26 -34
  5. package/fesm2022/igo2-common-action.mjs.map +1 -1
  6. package/fesm2022/igo2-common-backdrop.mjs +7 -7
  7. package/fesm2022/igo2-common-backdrop.mjs.map +1 -1
  8. package/fesm2022/igo2-common-badge.mjs +7 -7
  9. package/fesm2022/igo2-common-badge.mjs.map +1 -1
  10. package/fesm2022/igo2-common-clickout.mjs +7 -7
  11. package/fesm2022/igo2-common-clickout.mjs.map +1 -1
  12. package/fesm2022/igo2-common-clone.mjs +7 -7
  13. package/fesm2022/igo2-common-clone.mjs.map +1 -1
  14. package/fesm2022/igo2-common-collapsible.mjs +10 -10
  15. package/fesm2022/igo2-common-collapsible.mjs.map +1 -1
  16. package/fesm2022/igo2-common-color.mjs +7 -7
  17. package/fesm2022/igo2-common-color.mjs.map +1 -1
  18. package/fesm2022/igo2-common-confirm-dialog.mjs +10 -10
  19. package/fesm2022/igo2-common-confirm-dialog.mjs.map +1 -1
  20. package/fesm2022/igo2-common-context-menu.mjs +10 -10
  21. package/fesm2022/igo2-common-context-menu.mjs.map +1 -1
  22. package/fesm2022/igo2-common-custom-html.mjs +10 -10
  23. package/fesm2022/igo2-common-custom-html.mjs.map +1 -1
  24. package/fesm2022/igo2-common-datepicker.mjs +3 -3
  25. package/fesm2022/igo2-common-datepicker.mjs.map +1 -1
  26. package/fesm2022/igo2-common-dom.mjs +7 -7
  27. package/fesm2022/igo2-common-dom.mjs.map +1 -1
  28. package/fesm2022/igo2-common-drag-drop.mjs +242 -126
  29. package/fesm2022/igo2-common-drag-drop.mjs.map +1 -1
  30. package/fesm2022/igo2-common-dynamic-component.mjs +14 -14
  31. package/fesm2022/igo2-common-dynamic-component.mjs.map +1 -1
  32. package/fesm2022/igo2-common-entity.mjs +159 -43
  33. package/fesm2022/igo2-common-entity.mjs.map +1 -1
  34. package/fesm2022/igo2-common-flexible.mjs +7 -7
  35. package/fesm2022/igo2-common-flexible.mjs.map +1 -1
  36. package/fesm2022/igo2-common-form.mjs +50 -50
  37. package/fesm2022/igo2-common-form.mjs.map +1 -1
  38. package/fesm2022/igo2-common-home-button.mjs +7 -7
  39. package/fesm2022/igo2-common-home-button.mjs.map +1 -1
  40. package/fesm2022/igo2-common-icon.mjs +7 -19
  41. package/fesm2022/igo2-common-icon.mjs.map +1 -1
  42. package/fesm2022/igo2-common-image.mjs +11 -11
  43. package/fesm2022/igo2-common-image.mjs.map +1 -1
  44. package/fesm2022/igo2-common-interactive-tour.mjs +13 -13
  45. package/fesm2022/igo2-common-interactive-tour.mjs.map +1 -1
  46. package/fesm2022/igo2-common-json-dialog.mjs +10 -10
  47. package/fesm2022/igo2-common-json-dialog.mjs.map +1 -1
  48. package/fesm2022/igo2-common-keyvalue.mjs +7 -7
  49. package/fesm2022/igo2-common-keyvalue.mjs.map +1 -1
  50. package/fesm2022/igo2-common-list.mjs +11 -11
  51. package/fesm2022/igo2-common-list.mjs.map +1 -1
  52. package/fesm2022/igo2-common-panel.mjs +8 -8
  53. package/fesm2022/igo2-common-panel.mjs.map +1 -1
  54. package/fesm2022/igo2-common-resizable-bar.mjs +6 -6
  55. package/fesm2022/igo2-common-resizable-bar.mjs.map +1 -1
  56. package/fesm2022/igo2-common-select-value-dialog.mjs +10 -10
  57. package/fesm2022/igo2-common-select-value-dialog.mjs.map +1 -1
  58. package/fesm2022/igo2-common-sidenav.mjs +7 -7
  59. package/fesm2022/igo2-common-sidenav.mjs.map +1 -1
  60. package/fesm2022/igo2-common-spinner.mjs +10 -10
  61. package/fesm2022/igo2-common-spinner.mjs.map +1 -1
  62. package/fesm2022/igo2-common-stop-propagation.mjs +10 -10
  63. package/fesm2022/igo2-common-stop-propagation.mjs.map +1 -1
  64. package/fesm2022/igo2-common-table.mjs +7 -7
  65. package/fesm2022/igo2-common-table.mjs.map +1 -1
  66. package/fesm2022/igo2-common-timepicker.mjs +3 -3
  67. package/fesm2022/igo2-common-timepicker.mjs.map +1 -1
  68. package/fesm2022/igo2-common-tool.mjs +15 -15
  69. package/fesm2022/igo2-common-tool.mjs.map +1 -1
  70. package/fesm2022/igo2-common-widget.mjs +14 -14
  71. package/fesm2022/igo2-common-widget.mjs.map +1 -1
  72. package/fesm2022/igo2-common-workspace.mjs +18 -18
  73. package/fesm2022/igo2-common-workspace.mjs.map +1 -1
  74. package/icon/index.d.ts +1 -3
  75. package/package.json +5 -4
  76. package/src/style/partial/common.variables.scss +0 -1
@@ -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 standalone: true\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') private 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 { SelectionModel } from '@angular/cdk/collections';\nimport { FlatTreeControl } from '@angular/cdk/tree';\nimport {\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n OnDestroy,\n Renderer2,\n booleanAttribute,\n contentChildren,\n effect,\n inject,\n input,\n output\n} from '@angular/core';\nimport { MatTreeNode } from '@angular/material/tree';\n\nimport {\n DropPosition,\n DropPositionType,\n TreeFlatNode\n} from './tree-drag-drop.interface';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface TreeDropEvent<T = any> {\n node: TreeFlatNode<T>;\n ref: TreeFlatNode<T>;\n position: DropPositionType;\n}\n\ninterface DragNodeListeners {\n element: HTMLElement;\n listeners: [string, EventListenerOrEventListenerObject][];\n}\n\nexport interface DropPermission {\n canDrop: boolean;\n message?: string;\n params?: Record<string, unknown>;\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 standalone: true\n})\nexport class TreeDragDropDirective implements OnDestroy {\n private elementRef = inject(ElementRef);\n private renderer = inject(Renderer2);\n\n draggedNode: TreeFlatNode;\n dropNodeTarget: TreeFlatNode;\n expandTimeout: number;\n nodesListeners: DragNodeListeners[] | undefined;\n private nodesEffect = effect(() => {\n this.nodes();\n this.addAllListener();\n });\n dropLineTarget: HTMLElement;\n highlightedNode = new SelectionModel<TreeFlatNode>();\n\n readonly treeControl = input.required<FlatTreeControl<TreeFlatNode>>();\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<TreeFlatNode>();\n\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n readonly onDrop = output<TreeDropEvent>();\n\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n readonly onDropError = output<DropPermission>();\n\n @HostListener('dragover', ['$event']) hostDragOver(event: Event): void {\n event.preventDefault();\n }\n\n @HostListener('drop', ['$event']) hostDrop(event: DragEvent): void {\n this.drop(event);\n }\n\n @HostBinding('class.--dragging') dragging: boolean;\n\n readonly nodes = contentChildren(MatTreeNode, { descendants: true });\n\n constructor() {\n this.onDrop.subscribe(() => this.dragEnd());\n\n this.highlightedNode.changed.subscribe((change) => {\n if (change.removed.length) {\n this.removeNodeClass(change.removed[0].id, '--drag-hover');\n }\n\n if (change.added.length) {\n this.addNodeClass(change.added[0].id, '--drag-hover');\n }\n });\n\n effect(() => {\n const disabled = this.treeDragDropIsDisabled();\n disabled ? this.removeAllListener() : this.addAllListener();\n });\n }\n\n ngOnDestroy(): void {\n this.removeAllListener();\n if (this.nodesEffect) {\n // EffectRef provides destroy() to stop the effect\n this.nodesEffect.destroy();\n this.nodesEffect = undefined;\n }\n }\n\n onDragStart(node: TreeFlatNode): void {\n this.dragging = 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 = false;\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: TreeFlatNode, event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n\n this.dropNodeTarget = node;\n\n const position = this.getPosition(event, node);\n\n this.updateDropTargetLinePosition(position);\n\n this.setHighlightedNode(node);\n\n this.handleGroupExpansion(node, position.type === 'inside');\n }\n\n dragLeave(): void {\n clearTimeout(this.expandTimeout);\n this.expandTimeout = null;\n this.highlightedNode.clear();\n }\n\n drop(event: DragEvent): void {\n if (!this.dropNodeTarget || this.treeDragDropIsDisabled()) {\n return;\n }\n\n const dropPosition: DropPosition = this.getPosition(\n event,\n this.dropNodeTarget\n );\n\n const validation = this.canDropNode(this.dropNodeTarget, dropPosition);\n if (!validation.canDrop) {\n this.onDropError.emit(validation);\n return;\n }\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 !== this.dropNodeTarget.level\n ) {\n this.dropNodeTarget = this.getNodeAncestors(\n this.dropNodeTarget.id,\n dropPosition.level\n );\n }\n\n if (this.dropNodeTarget.isGroup) {\n if (dropPosition.type === 'inside') {\n const isExpanded = this.treeControl().isExpanded(this.dropNodeTarget);\n if (isExpanded) {\n const children = this.getDirectDescendants(this.dropNodeTarget);\n if (children[0]?.id === this.draggedNode.id) {\n return;\n }\n }\n\n this.treeControl().expand(this.dropNodeTarget);\n return this.onDrop.emit({\n node: this.draggedNode,\n ref: this.dropNodeTarget,\n position: dropPosition.type\n });\n }\n }\n\n if (\n dropPosition.type === 'below' &&\n dropPosition.level !== this.dropNodeTarget.level\n ) {\n const ancestor = this.getNodeAncestors(this.dropNodeTarget.id);\n return this.onDrop.emit({\n node: this.draggedNode,\n ref: ancestor,\n position: dropPosition.type\n });\n }\n\n this.onDrop.emit({\n node: this.draggedNode,\n ref: this.dropNodeTarget,\n position: dropPosition.type\n });\n }\n\n private addNodeClass(id: string, className: string): void {\n const node = this.nodes().find((node) => node.data.id === id);\n this.renderer.addClass(node['_elementRef'].nativeElement, className);\n }\n\n private removeNodeClass(id: string, className: string): void {\n const node = this.nodes().find((node) => node.data.id === id);\n this.renderer.removeClass(node['_elementRef'].nativeElement, className);\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<TreeFlatNode>): 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: TreeFlatNode): void {\n const toHighlight = node.isGroup ? node : this.getNodeAncestors(node.id);\n toHighlight\n ? this.highlightedNode.select(toHighlight)\n : this.highlightedNode.clear();\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 = target;\n this.renderer.appendChild(\n this.elementRef.nativeElement.parentElement,\n this.dropLineTarget\n );\n }\n\n private removeDropTargetLine(): void {\n if (!this.dropLineTarget) {\n return;\n }\n this.renderer.removeChild(\n this.elementRef.nativeElement.parentElement,\n this.dropLineTarget\n );\n this.dropLineTarget = null;\n }\n\n private updateDropTargetLinePosition(position: DropPosition): void {\n if (!this.dropLineTarget) {\n this.addDropTargetLine();\n }\n\n if (position.type === 'inside') {\n return this.removeDropTargetLine();\n }\n\n this.renderer.setStyle(\n this.dropLineTarget,\n 'margin-left',\n position.level * 24 + 20 + 'px'\n );\n this.renderer.setStyle(\n this.dropLineTarget,\n 'transform',\n 'translate3d(0,' + position.y + 'px, 0)'\n );\n }\n\n private handleGroupExpansion(node: TreeFlatNode, isInside: boolean): void {\n if (!isInside) {\n return this.dragLeave();\n }\n const isOpen = this.treeControl().isExpanded(node);\n if (!isOpen && !this.expandTimeout) {\n this.expandTimeout = window.setTimeout(() => {\n this.treeControl().expand(node);\n }, 1200);\n }\n }\n\n private getNodeElement(node: TreeFlatNode): HTMLElement | undefined {\n const treeNode = this.nodes().find((n) => n.data.id === node.id);\n return treeNode?.['_elementRef'].nativeElement;\n }\n\n private canDropNode(\n hoveredNode: TreeFlatNode,\n position: DropPosition\n ): DropPermission {\n if (this.draggedNode.isGroup) {\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: TreeFlatNode,\n position: DropPosition\n ): DropPermission {\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\n const hasMaxLevelRestrictions = this.validateMaxHierarchyLevel(position);\n if (hasMaxLevelRestrictions) {\n return hasMaxLevelRestrictions;\n }\n\n const isHoverDescendant = this.isHoverDescendant(hoveredNode.id);\n return {\n canDrop: !isHoverDescendant,\n message:\n isHoverDescendant && 'igo.common.dragDrop.cannot.dropInsideItself'\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.draggedNode.isGroup) {\n // We add an extra level +1 to avoid empty group in group\n level = level + (this.draggedNode.descendantLevels ?? 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 isHoverDescendant(id: string): boolean {\n return this.treeControl()\n .getDescendants(this.draggedNode)\n .some((child) => child.id === id);\n }\n\n private getPosition(\n event: DragEvent,\n hoveredNode: TreeFlatNode\n ): DropPosition {\n if (this.draggedNode.isGroup) {\n if (this.isHoverDescendant(hoveredNode.id)) {\n hoveredNode = this.draggedNode;\n }\n }\n\n let positionType = this.getPositionType(event, hoveredNode);\n\n const bellowOpenedGroup =\n hoveredNode.isGroup &&\n positionType === 'below' &&\n this.treeControl().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: TreeFlatNode, 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(\n event: DragEvent,\n hoveredNode: TreeFlatNode\n ): 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 (hoveredNode.isGroup && !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: TreeFlatNode,\n type: DropPositionType,\n x: number\n ): number {\n if (hoveredNode.level === 0) {\n return 0;\n }\n\n const ancestor = this.getNodeAncestors(hoveredNode.id);\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 * hoveredNode.level;\n\n const isInsideSameGroup = x > xMax;\n if (!isInsideSameGroup) {\n const levelSubstracted = Math.round((xMax - x) / indentation);\n return Math.max(0, hoveredNode.level - levelSubstracted);\n }\n }\n\n return hoveredNode.level;\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(\n id: string,\n level?: number\n ): TreeFlatNode | undefined {\n const nodes = this.treeControl().dataNodes;\n const index = nodes.findIndex((node) => node.id === id);\n\n const targetLevel = level ?? Math.max(0, nodes[index].level - 1);\n return nodes\n .slice(0, index)\n .reverse()\n .find((node) => node.level === targetLevel);\n }\n\n private getDirectDescendants(node: TreeFlatNode): TreeFlatNode[] {\n const level = node.level + 1;\n return this.treeControl()\n .getDescendants(node)\n .filter((child) => child.level === level);\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 standalone: true\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') private 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 standalone: true,\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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"}
@@ -190,10 +190,10 @@ class DynamicComponentService {
190
190
  const factory = this.resolver.resolveComponentFactory(componentCls);
191
191
  return new DynamicComponent(factory);
192
192
  }
193
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: DynamicComponentService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
194
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: DynamicComponentService, providedIn: 'root' });
193
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DynamicComponentService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
194
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DynamicComponentService, providedIn: 'root' });
195
195
  }
196
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: DynamicComponentService, decorators: [{
196
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DynamicComponentService, decorators: [{
197
197
  type: Injectable,
198
198
  args: [{
199
199
  providedIn: 'root'
@@ -302,10 +302,10 @@ class DynamicOutletComponent {
302
302
  updateSubscribers() {
303
303
  this.dynamicComponent.updateSubscribers(this.subscribers());
304
304
  }
305
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: DynamicOutletComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
306
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.6", type: DynamicOutletComponent, isStandalone: true, selector: "igo-dynamic-outlet", inputs: { component: { classPropertyName: "component", publicName: "component", isSignal: true, isRequired: false, transformFunction: null }, inputs: { classPropertyName: "inputs", publicName: "inputs", isSignal: true, isRequired: false, transformFunction: null }, subscribers: { classPropertyName: "subscribers", publicName: "subscribers", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "target", first: true, predicate: ["target"], descendants: true, read: ViewContainerRef, isSignal: true }], usesOnChanges: true, ngImport: i0, template: "<ng-template #target />\n", styles: [":host{display:block;width:100%;height:100%}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
305
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DynamicOutletComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
306
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.18", type: DynamicOutletComponent, isStandalone: true, selector: "igo-dynamic-outlet", inputs: { component: { classPropertyName: "component", publicName: "component", isSignal: true, isRequired: false, transformFunction: null }, inputs: { classPropertyName: "inputs", publicName: "inputs", isSignal: true, isRequired: false, transformFunction: null }, subscribers: { classPropertyName: "subscribers", publicName: "subscribers", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "target", first: true, predicate: ["target"], descendants: true, read: ViewContainerRef, isSignal: true }], usesOnChanges: true, ngImport: i0, template: "<ng-template #target />\n", styles: [":host{display:block;width:100%;height:100%}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
307
307
  }
308
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: DynamicOutletComponent, decorators: [{
308
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DynamicOutletComponent, decorators: [{
309
309
  type: Component,
310
310
  args: [{ selector: 'igo-dynamic-outlet', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<ng-template #target />\n", styles: [":host{display:block;width:100%;height:100%}\n"] }]
311
311
  }], propDecorators: { component: [{ type: i0.Input, args: [{ isSignal: true, alias: "component", required: false }] }], inputs: [{ type: i0.Input, args: [{ isSignal: true, alias: "inputs", required: false }] }], subscribers: [{ type: i0.Input, args: [{ isSignal: true, alias: "subscribers", required: false }] }], target: [{ type: i0.ViewChild, args: ['target', { ...{ read: ViewContainerRef }, isSignal: true }] }] } });
@@ -314,11 +314,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.6", ngImpor
314
314
  * @deprecated import the DynamicOutletComponent directly
315
315
  */
316
316
  class IgoDynamicComponentModule {
317
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: IgoDynamicComponentModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
318
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.6", ngImport: i0, type: IgoDynamicComponentModule, imports: [DynamicOutletComponent], exports: [DynamicOutletComponent] });
319
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: IgoDynamicComponentModule });
317
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: IgoDynamicComponentModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
318
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.18", ngImport: i0, type: IgoDynamicComponentModule, imports: [DynamicOutletComponent], exports: [DynamicOutletComponent] });
319
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: IgoDynamicComponentModule });
320
320
  }
321
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: IgoDynamicComponentModule, decorators: [{
321
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: IgoDynamicComponentModule, decorators: [{
322
322
  type: NgModule,
323
323
  args: [{
324
324
  imports: [DynamicOutletComponent],
@@ -330,11 +330,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.6", ngImpor
330
330
  * @deprecated import the DynamicOutletComponent directly
331
331
  */
332
332
  class IgoDynamicOutletModule {
333
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: IgoDynamicOutletModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
334
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.6", ngImport: i0, type: IgoDynamicOutletModule, imports: [DynamicOutletComponent], exports: [DynamicOutletComponent] });
335
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: IgoDynamicOutletModule });
333
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: IgoDynamicOutletModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
334
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.18", ngImport: i0, type: IgoDynamicOutletModule, imports: [DynamicOutletComponent], exports: [DynamicOutletComponent] });
335
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: IgoDynamicOutletModule });
336
336
  }
337
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: IgoDynamicOutletModule, decorators: [{
337
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: IgoDynamicOutletModule, decorators: [{
338
338
  type: NgModule,
339
339
  args: [{
340
340
  imports: [DynamicOutletComponent],
@@ -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 standalone: true\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> = {};\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 standalone: true\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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"}