{"version":3,"file":"xxmachina-components-templates-flow-nodes-task.mjs","sources":["../../../../../packages/@xxmachina/components/src/lib/templates/flow/nodes/task/task.component.ts","../../../../../packages/@xxmachina/components/src/lib/templates/flow/nodes/task/task.component.meta.ts","../../../../../packages/@xxmachina/components/src/lib/templates/flow/nodes/task/xxmachina-components-templates-flow-nodes-task.ts"],"sourcesContent":["import { Component, Input } from '@angular/core';\n\nimport { MatIconModule } from '@angular/material/icon';\n\nexport interface TaskNodeData {\n  label: string;\n  status?: string;\n  assignee?: string;\n  assigneeIcon?: string;\n  task?: any;\n}\n\n@Component({\n  selector: 'flow-task-node',\n  standalone: true,\n  imports: [MatIconModule],\n  template: `\n    <div class=\"task-node\" [class]=\"'s-' + data.status\" [class.has-deps]=\"hasDeps\">\n      <div class=\"task-header\">\n        <span class=\"dot\"></span>\n        <span class=\"task-id\">{{ data.task?.id?.slice(0, 8) }}</span>\n        <span class=\"status-badge\">{{ getStatusLabel(data.status) }}</span>\n      </div>\n      <div class=\"task-title\">{{ data.label }}</div>\n      @if (data.task?.result) {\n        <div class=\"task-result\">{{ data.task.result }}</div>\n      }\n      <div class=\"task-footer\">\n        @if (data.assignee) {\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\">person</mat-icon>\n            }\n            {{ data.assignee }}\n          </span>\n        }\n        @if (hasDeps) {\n          <span class=\"deps\">依存: {{ data.task?.dependsOn?.length }}</span>\n        }\n      </div>\n    </div>\n  `,\n  styles: [`\n    :host { display: block; width: 200px; }\n\n    .task-node {\n      background: #1a1a1a;\n      border: 1px solid rgba(51, 51, 51, 0.8);\n      border-radius: 8px;\n      padding: 12px;\n      font-family: 'SF Mono', Monaco, monospace;\n      transition: all 0.2s ease;\n      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);\n    }\n\n    .task-node:hover {\n      transform: translateY(-2px);\n      box-shadow: 0 8px 24px rgba(0, 0, 0, 0.5);\n      border-color: rgba(80, 80, 80, 0.8);\n    }\n\n    .task-node.s-completed { border-color: rgba(16, 185, 129, 0.6); }\n    .task-node.s-in_progress { border-color: rgba(59, 130, 246, 0.6); }\n    .task-node.s-pending { border-color: rgba(136, 136, 136, 0.6); }\n    .task-node.has-deps { border-style: dashed; }\n\n    .task-header {\n      display: flex;\n      align-items: center;\n      gap: 6px;\n      margin-bottom: 8px;\n    }\n\n    .dot {\n      width: 8px;\n      height: 8px;\n      border-radius: 50%;\n      flex-shrink: 0;\n      box-shadow: 0 0 8px currentColor;\n    }\n\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\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    .task-id {\n      font-size: 10px;\n      font-weight: 500;\n      color: #888;\n      font-family: 'SF Mono', Monaco, monospace;\n      background: rgba(255, 255, 255, 0.05);\n      padding: 2px 6px;\n      border-radius: 4px;\n    }\n\n    .status-badge {\n      margin-left: auto;\n      font-size: 9px;\n      font-weight: 600;\n      padding: 2px 6px;\n      border-radius: 4px;\n      text-transform: uppercase;\n      letter-spacing: 0.5px;\n    }\n\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\n    .task-title {\n      font-size: 13px;\n      font-weight: 500;\n      color: #e0e0e0;\n      line-height: 1.4;\n      margin-bottom: 8px;\n      overflow: hidden;\n      text-overflow: ellipsis;\n      display: -webkit-box;\n      -webkit-line-clamp: 2;\n      -webkit-box-orient: vertical;\n    }\n\n    .task-result {\n      font-size: 11px;\n      color: #888;\n      background: rgba(255, 255, 255, 0.03);\n      padding: 6px 8px;\n      border-radius: 4px;\n      margin-bottom: 8px;\n      border: 1px solid rgba(51, 51, 51, 0.5);\n    }\n\n    .task-footer {\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n      padding-top: 8px;\n      border-top: 1px solid rgba(51, 51, 51, 0.5);\n      font-size: 11px;\n    }\n\n    .assignee {\n      display: inline-flex;\n      align-items: center;\n      gap: 4px;\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    .deps {\n      font-size: 10px;\n      color: #ff79c6;\n      font-weight: 500;\n    }\n  `]\n})\nexport class TaskNodeComponent {\n  @Input() data!: TaskNodeData;\n\n  get hasDeps(): boolean {\n    return !!this.data.task?.dependsOn?.length;\n  }\n\n  getStatusLabel(status?: string): string {\n    const labels: Record<string, string> = {\n      'completed': 'DONE',\n      'in_progress': 'WIP',\n      'pending': 'TODO',\n    };\n    return labels[status || ''] || status?.toUpperCase() || '';\n  }\n}\n","import { Type } from '@angular/core';\nimport { TaskNodeComponent, TaskNodeData } from './task.component';\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 taskNodeMeta: ComponentMeta = {\n  title: 'Flow Task Node',\n  group: 'molecules',\n  component: TaskNodeComponent,\n  viewport: { width: 300, height: 200 },\n  variants: [\n    {\n      name: 'completed',\n      inputs: {\n        data: {\n          label: 'Implement user authentication',\n          status: 'completed',\n          assignee: 'dev-001',\n          task: {\n            id: 'abc12345-6789-0123-4567-890abcdef012',\n            result: 'OAuth2 implemented',\n          },\n        } as TaskNodeData,\n      },\n    },\n    {\n      name: 'in progress',\n      inputs: {\n        data: {\n          label: 'Build API endpoints',\n          status: 'in_progress',\n          assignee: 'dev-002',\n          task: {\n            id: 'def12345-6789-0123-4567-890abcdef012',\n            dependsOn: ['abc12345'],\n          },\n        } as TaskNodeData,\n      },\n    },\n    {\n      name: 'pending',\n      inputs: {\n        data: {\n          label: 'Write unit tests',\n          status: 'pending',\n          assignee: 'dev-003',\n          task: {\n            id: 'ghi12345-6789-0123-4567-890abcdef012',\n          },\n        } as TaskNodeData,\n      },\n    },\n    {\n      name: 'with avatar',\n      inputs: {\n        data: {\n          label: 'Integration testing',\n          status: 'in_progress',\n          assignee: 'qa-team',\n          assigneeIcon: 'https://api.dicebear.com/7.x/avataaars/svg?seed=Felix',\n          task: {\n            id: 'jkl12345-6789-0123-4567-890abcdef012',\n            dependsOn: ['abc12345', 'def12345'],\n          },\n        } as TaskNodeData,\n      },\n    },\n  ],\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}