{"version":3,"file":"element-template-icon-renderer.mjs","sources":["../../../projects/element-template-icon-renderer/src/util/index.ts","../../../projects/element-template-icon-renderer/src/lib/element-template-icon-renderer.ts","../../../projects/element-template-icon-renderer/src/lib/element-template-icon-renderer.component.ts","../../../projects/element-template-icon-renderer/src/lib/element-template-icon-renderer.module.ts","../../../projects/element-template-icon-renderer/src/element-template-icon-renderer.ts"],"sourcesContent":["import { getBusinessObject } from 'bpmn-js/lib/util/ModelUtil';\n\n/**\n * Get icon defined on a moddle element.\n *\n * @param element - The moddle element\n * @param iconProperty - The property name for the icon\n * @returns The icon URL or undefined if not found\n */\nexport function getModelerTemplateIcon(element: any, iconProperty?: string): string | undefined {\n  iconProperty = iconProperty || 'camunda:modelerTemplateIcon';\n  return getBusinessObject(element).get(iconProperty);\n} ","import BaseRenderer from 'diagram-js/lib/draw/BaseRenderer';\nimport { getBusinessObject, is, isAny } from 'bpmn-js/lib/util/ModelUtil';\nimport { isLabel } from 'bpmn-js/lib/util/LabelUtil';\nimport { append as svgAppend, attr as svgAttr, create as svgCreate } from 'tiny-svg';\nimport { getModelerTemplateIcon } from '../util';\nimport BpmnViewer from 'bpmn-js';\n\nconst HIGH_PRIORITY = 1250;\n\nexport interface ElementTemplateIconRendererConfig {\n  iconProperty?: string;\n}\n\nexport class ElementTemplateIconRenderer extends BaseRenderer {\n  private _bpmnRenderer: any;\n  private _iconProperty?: string;\n\n  constructor(bpmnViewer: BpmnViewer, config?: ElementTemplateIconRendererConfig) {\n    super(bpmnViewer.get('eventBus'), HIGH_PRIORITY);\n    \n    this._bpmnRenderer = bpmnViewer.get('bpmnRenderer');\n    this._iconProperty = config?.iconProperty;\n  }\n\n  override canRender(element: any): boolean {\n    if (isLabel(element)) {\n      return false;\n    }\n\n    return !!(isAny(element, ['bpmn:Task', 'bpmn:Event']) && this._getIcon(element));\n  }\n\n  private _getIcon(element: any): string | undefined {\n    return getModelerTemplateIcon(element, this._iconProperty);\n  }\n\n  override drawShape(parentGfx: SVGElement, element: any, attrs: any = {}): SVGElement {\n    const elementType = [\n      'bpmn:BoundaryEvent',\n      'bpmn:EndEvent',\n      'bpmn:IntermediateCatchEvent',\n      'bpmn:IntermediateThrowEvent',\n      'bpmn:StartEvent',\n      'bpmn:Task'\n    ].find(t => is(element, t));\n\n    if (!elementType || !this._bpmnRenderer.handlers[elementType]) {\n      return parentGfx;\n    }\n\n    const renderer = this._bpmnRenderer.handlers[elementType];\n    const gfx = renderer(parentGfx, element, { ...attrs, renderIcon: false });\n\n    const icon = this._getIcon(element);\n    if (!icon) {\n      return gfx;\n    }\n\n    const size = 50;\n\n    const padding = is(element, 'bpmn:Task') ? {\n      x: 5,\n      y: 5\n    } : {\n      x: (element.width - size) / 2,\n      y: (element.height - size) / 2\n    };\n\n    const img = svgCreate('image');\n    svgAttr(img, {\n      href: icon,\n      width: size,\n      height: size,\n      ...padding\n    });\n\n    svgAppend(parentGfx, img);\n\n    return gfx;\n  }\n\n  destroy(): void {\n    // Cleanup if needed\n  }\n}\n\nexport function hasEventDefinition(element: any, eventType: string): boolean {\n  const businessObject = getBusinessObject(element);\n  return (businessObject.eventDefinitions || []).length > 0;\n} ","import { Component, Input, OnInit, ElementRef, ViewChild, AfterViewInit } from '@angular/core';\nimport BpmnViewer from 'bpmn-js';\nimport { ElementTemplateIconRenderer } from './element-template-icon-renderer';\n\n@Component({\n  selector: 'lib-element-template-icon-renderer',\n  template: `\n    <div #container class=\"element-template-icon-renderer\"></div>\n  `,\n  styles: [`\n    .element-template-icon-renderer {\n      width: 100%;\n      height: 100%;\n    }\n  `]\n})\nexport class ElementTemplateIconRendererComponent implements OnInit, AfterViewInit {\n  @ViewChild('container', { static: true }) container!: ElementRef;\n  @Input() bpmnViewer!: BpmnViewer;\n\n  private renderer: ElementTemplateIconRenderer | null = null;\n\n  ngOnInit(): void {\n    if (!this.bpmnViewer) {\n      throw new Error('BPMN viewer is required');\n    }\n  }\n\n  ngAfterViewInit(): void {\n    this.renderer = new ElementTemplateIconRenderer(this.bpmnViewer);\n  }\n\n  ngOnDestroy(): void {\n    if (this.renderer) {\n      this.renderer.destroy();\n    }\n  }\n} ","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ElementTemplateIconRendererComponent } from './element-template-icon-renderer.component';\n\n@NgModule({\n  declarations: [\n    ElementTemplateIconRendererComponent\n  ],\n  imports: [\n    CommonModule\n  ],\n  exports: [\n    ElementTemplateIconRendererComponent\n  ]\n})\nexport class ElementTemplateIconRendererModule { } ","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["svgCreate","svgAttr","svgAppend"],"mappings":"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"}