{"version":3,"file":"xxmachina-components-templates-flow-nodes-group.mjs","sources":["../../../../../packages/@xxmachina/components/src/lib/templates/flow/nodes/group/group.node.ts","../../../../../packages/@xxmachina/components/src/lib/templates/flow/nodes/group/group.node.meta.ts","../../../../../packages/@xxmachina/components/src/lib/templates/flow/nodes/group/xxmachina-components-templates-flow-nodes-group.ts"],"sourcesContent":["import { Component, input, output } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { NgAtomicComponent } from '@ng-atomic/core';\n\nexport interface GroupNodeData {\n  label: string;\n  status?: string;\n  assignee?: string;\n  assigneeIcon?: string;\n  childCount?: number;\n  expanded?: boolean;\n}\n\nenum ActionId {\n  EXPANDED_CHANGE = 'EXPANDED_CHANGE',\n}\n\n@Component({\n  selector: 'flow-group-node',\n  standalone: true,\n  imports: [MatIconModule],\n  template: `\n    <div class=\"group-node\" [class]=\"'s-' + data()?.status\">\n      <div class=\"group-header\">\n        <span class=\"dot\"></span>\n        <span class=\"status-badge\">{{ getStatusLabel(data()?.status) }}</span>\n        @if (data()?.childCount) {\n          <span class=\"child-count\">{{ data()?.childCount }}</span>\n        }\n      </div>\n      <div class=\"group-title\">{{ data()?.label }}</div>\n      @if (data()?.assignee) {\n        <div class=\"group-footer\">\n          <span class=\"assignee\">\n            @if (data()?.assigneeIcon) {\n              <img [src]=\"data()?.assigneeIcon\" class=\"assignee-avatar\" alt=\"\" />\n            } @else {\n              <mat-icon class=\"assignee-icon\">group</mat-icon>\n            }\n            {{ data()?.assignee }}\n          </span>\n        </div>\n      }\n    </div>\n  `,\n  styles: [`\n    :host { display: block; width: 180px; }\n\n    .group-node {\n      background: #0a0a0a;\n      border: 1px solid rgba(51, 51, 51, 0.8);\n      border-radius: 10px;\n      padding: 12px;\n      font-family: 'SF Mono', Monaco, monospace;\n      transition: all 0.2s ease;\n      box-shadow: 0 4px 16px rgba(0, 0, 0, 0.5);\n    }\n\n    .group-node:hover {\n      transform: translateY(-2px);\n      box-shadow: 0 8px 32px rgba(0, 0, 0, 0.6);\n      border-color: rgba(80, 80, 80, 0.8);\n    }\n\n    .group-node.s-root { border-color: rgba(99, 102, 241, 0.6); }\n    .group-node.s-completed { border-color: rgba(16, 185, 129, 0.6); }\n    .group-node.s-in_progress { border-color: rgba(59, 130, 246, 0.6); }\n    .group-node.s-pending { border-color: rgba(136, 136, 136, 0.6); }\n    .group-node.s-sprint_planned { border-color: rgba(139, 92, 246, 0.6); }\n    .group-node.s-needs_breakdown { border-color: rgba(245, 158, 11, 0.6); }\n\n    .group-header {\n      display: flex;\n      align-items: center;\n      gap: 6px;\n      margin-bottom: 8px;\n    }\n\n    .dot {\n      width: 10px;\n      height: 10px;\n      border-radius: 50%;\n      flex-shrink: 0;\n      box-shadow: 0 0 10px currentColor;\n    }\n\n    .s-root .dot { background: #6366f1; color: #6366f1; }\n    .s-completed .dot { background: #10b981; color: #10b981; }\n    .s-in_progress .dot { background: #3b82f6; color: #3b82f6; animation: pulse 2s infinite; }\n    .s-pending .dot { background: #888; color: #888; }\n    .s-sprint_planned .dot { background: #8b5cf6; color: #8b5cf6; }\n    .s-needs_breakdown .dot { background: #f59e0b; color: #f59e0b; }\n\n    @keyframes pulse {\n      0%, 100% { box-shadow: 0 0 4px rgba(59, 130, 246, 0.4); }\n      50% { box-shadow: 0 0 12px rgba(59, 130, 246, 0.8); }\n    }\n\n    .status-badge {\n      font-size: 10px;\n      font-weight: 600;\n      padding: 2px 8px;\n      border-radius: 10px;\n      text-transform: uppercase;\n      letter-spacing: 0.5px;\n    }\n\n    .s-root .status-badge { background: rgba(99, 102, 241, 0.2); color: #6366f1; }\n    .s-completed .status-badge { background: rgba(16, 185, 129, 0.2); color: #10b981; }\n    .s-in_progress .status-badge { background: rgba(59, 130, 246, 0.2); color: #3b82f6; }\n    .s-pending .status-badge { background: rgba(136, 136, 136, 0.2); color: #888; }\n    .s-sprint_planned .status-badge { background: rgba(139, 92, 246, 0.2); color: #8b5cf6; }\n    .s-needs_breakdown .status-badge { background: rgba(245, 158, 11, 0.2); color: #f59e0b; }\n\n    .child-count {\n      margin-left: auto;\n      font-size: 11px;\n      font-weight: 600;\n      color: #888;\n      background: rgba(255, 255, 255, 0.05);\n      padding: 2px 8px;\n      border-radius: 10px;\n    }\n\n    .group-title {\n      font-size: 14px;\n      font-weight: 500;\n      color: #e0e0e0;\n      line-height: 1.4;\n      margin-bottom: 8px;\n    }\n\n    .group-footer {\n      padding-top: 8px;\n      border-top: 1px solid rgba(51, 51, 51, 0.5);\n    }\n\n    .assignee {\n      display: inline-flex;\n      align-items: center;\n      gap: 4px;\n      font-size: 11px;\n      color: #888;\n      font-weight: 500;\n    }\n\n    .assignee-icon {\n      font-size: 14px;\n      width: 14px;\n      height: 14px;\n      color: #666;\n    }\n\n    .assignee-avatar {\n      width: 18px;\n      height: 18px;\n      border-radius: 50%;\n      object-fit: cover;\n      border: 1px solid rgba(255, 255, 255, 0.1);\n    }\n  `]\n})\nexport class GroupNodeComponent extends NgAtomicComponent {\n  static readonly ActionId = ActionId;\n\n  readonly data = input<GroupNodeData>();\n  readonly expandedChange = output<boolean>();\n\n  getStatusLabel(status?: string): string {\n    const labels: Record<string, string> = {\n      'root': 'ROOT',\n      'in_progress': 'WIP',\n      'completed': 'DONE',\n      'pending': 'TODO',\n      'sprint_planned': 'PLAN',\n      'needs_breakdown': 'BREAK',\n      'under_consideration': 'REVIEW',\n      'abandoned': 'DROP'\n    };\n    return labels[status || ''] || status?.toUpperCase() || '';\n  }\n\n  onExpandedChange(expanded: boolean): void {\n    this.dispatch({id: ActionId.EXPANDED_CHANGE, payload: { expanded, data: this.data() }});\n  }\n}\n","import { Type } from '@angular/core';\nimport { GroupNodeComponent, GroupNodeData } from './group.node';\n\ninterface ComponentMeta<T = unknown> {\n  title: string;\n  group?: 'atoms' | 'molecules' | 'organisms' | 'templates' | 'presenters' | 'extras';\n  component: Type<T>;\n  inputs?: Record<string, unknown>;\n  viewport?: { width?: number; height?: number };\n  variants?: { name: string; inputs: Record<string, unknown> }[];\n}\n\nexport const groupNodeMeta: ComponentMeta = {\n  title: 'Flow Group Node',\n  group: 'molecules',\n  component: GroupNodeComponent,\n  viewport: { width: 280, height: 180 },\n  variants: [\n    {\n      name: 'root',\n      inputs: {\n        data: {\n          label: 'Project Tasks',\n          status: 'root',\n          childCount: 12,\n        } as GroupNodeData,\n      },\n    },\n    {\n      name: 'in progress',\n      inputs: {\n        data: {\n          label: 'Sprint 1 Tasks',\n          status: 'in_progress',\n          assignee: 'Team Alpha',\n          childCount: 5,\n        } as GroupNodeData,\n      },\n    },\n    {\n      name: 'completed',\n      inputs: {\n        data: {\n          label: 'Completed Features',\n          status: 'completed',\n          assignee: 'Team Beta',\n          childCount: 8,\n        } as GroupNodeData,\n      },\n    },\n    {\n      name: 'pending',\n      inputs: {\n        data: {\n          label: 'Backlog Items',\n          status: 'pending',\n          childCount: 15,\n        } as GroupNodeData,\n      },\n    },\n    {\n      name: 'sprint planned',\n      inputs: {\n        data: {\n          label: 'Sprint 2 Planned',\n          status: 'sprint_planned',\n          assignee: 'Team Gamma',\n          childCount: 6,\n        } as GroupNodeData,\n      },\n    },\n    {\n      name: 'with avatar',\n      inputs: {\n        data: {\n          label: 'Design Review',\n          status: 'in_progress',\n          assignee: 'Design Team',\n          assigneeIcon: 'https://api.dicebear.com/7.x/avataaars/svg?seed=Team',\n          childCount: 3,\n        } as GroupNodeData,\n      },\n    },\n  ],\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}