@echothink-ui/task 0.1.0

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 (64) hide show
  1. package/README.md +5 -0
  2. package/dist/components/BackendThinkingChain.d.ts +2 -0
  3. package/dist/components/BlockingReasonPanel.d.ts +2 -0
  4. package/dist/components/DAGEdge.d.ts +2 -0
  5. package/dist/components/DAGLegend.d.ts +2 -0
  6. package/dist/components/DAGNode.d.ts +4 -0
  7. package/dist/components/DecisionRequiredPanel.d.ts +2 -0
  8. package/dist/components/HumanInterventionPanel.d.ts +2 -0
  9. package/dist/components/MobileTaskShell.d.ts +12 -0
  10. package/dist/components/TaskApprovalPanel.d.ts +2 -0
  11. package/dist/components/TaskCard.d.ts +2 -0
  12. package/dist/components/TaskDependencyList.d.ts +2 -0
  13. package/dist/components/TaskDetailPanel.d.ts +2 -0
  14. package/dist/components/TaskHandoffPanel.d.ts +2 -0
  15. package/dist/components/TaskProgressIndicator.d.ts +2 -0
  16. package/dist/components/TaskRetryPanel.d.ts +2 -0
  17. package/dist/components/TaskRunLog.d.ts +2 -0
  18. package/dist/components/TaskStatusBadge.d.ts +2 -0
  19. package/dist/components/TaskTable.d.ts +5 -0
  20. package/dist/components/TaskTimeline.d.ts +2 -0
  21. package/dist/components/TaskWaveDAG.d.ts +2 -0
  22. package/dist/components/TaskWaveHeader.d.ts +2 -0
  23. package/dist/components/TaskWaveTable.d.ts +2 -0
  24. package/dist/components/utils.d.ts +13 -0
  25. package/dist/index.cjs +2434 -0
  26. package/dist/index.cjs.map +1 -0
  27. package/dist/index.css +2402 -0
  28. package/dist/index.css.map +1 -0
  29. package/dist/index.d.ts +27 -0
  30. package/dist/index.js +2388 -0
  31. package/dist/index.js.map +1 -0
  32. package/dist/types.d.ts +249 -0
  33. package/package.json +45 -0
  34. package/src/components/BackendThinkingChain.tsx +129 -0
  35. package/src/components/BlockingReasonPanel.tsx +67 -0
  36. package/src/components/DAGEdge.tsx +97 -0
  37. package/src/components/DAGLegend.tsx +86 -0
  38. package/src/components/DAGNode.tsx +103 -0
  39. package/src/components/DecisionRequiredPanel.tsx +166 -0
  40. package/src/components/HumanInterventionPanel.tsx +82 -0
  41. package/src/components/MobileTaskShell.tsx +52 -0
  42. package/src/components/TaskApprovalPanel.tsx +159 -0
  43. package/src/components/TaskCard.tsx +71 -0
  44. package/src/components/TaskDependencyList.test.tsx +54 -0
  45. package/src/components/TaskDependencyList.tsx +105 -0
  46. package/src/components/TaskDetailPanel.test.tsx +49 -0
  47. package/src/components/TaskDetailPanel.tsx +139 -0
  48. package/src/components/TaskHandoffPanel.tsx +125 -0
  49. package/src/components/TaskProgressIndicator.tsx +70 -0
  50. package/src/components/TaskRetryPanel.test.tsx +29 -0
  51. package/src/components/TaskRetryPanel.tsx +103 -0
  52. package/src/components/TaskRunLog.tsx +156 -0
  53. package/src/components/TaskStatusBadge.tsx +29 -0
  54. package/src/components/TaskTable.tsx +294 -0
  55. package/src/components/TaskTimeline.tsx +98 -0
  56. package/src/components/TaskWaveDAG.tsx +202 -0
  57. package/src/components/TaskWaveHeader.tsx +82 -0
  58. package/src/components/TaskWaveTable.tsx +151 -0
  59. package/src/components/css.d.ts +1 -0
  60. package/src/components/utils.ts +116 -0
  61. package/src/index.test.tsx +316 -0
  62. package/src/index.tsx +90 -0
  63. package/src/styles.css +2889 -0
  64. package/src/types.ts +289 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.tsx","../src/components/BackendThinkingChain.tsx","../src/components/utils.ts","../src/components/BlockingReasonPanel.tsx","../src/components/DAGEdge.tsx","../src/components/DAGLegend.tsx","../src/components/DAGNode.tsx","../src/components/DecisionRequiredPanel.tsx","../src/components/HumanInterventionPanel.tsx","../src/components/TaskApprovalPanel.tsx","../src/components/TaskCard.tsx","../src/components/TaskDependencyList.tsx","../src/components/TaskStatusBadge.tsx","../src/components/TaskDetailPanel.tsx","../src/components/TaskTimeline.tsx","../src/components/TaskHandoffPanel.tsx","../src/components/TaskProgressIndicator.tsx","../src/components/TaskRetryPanel.tsx","../src/components/TaskRunLog.tsx","../src/components/TaskTable.tsx","../src/components/TaskWaveDAG.tsx","../src/components/TaskWaveHeader.tsx","../src/components/TaskWaveTable.tsx","../src/components/MobileTaskShell.tsx"],"sourcesContent":["import \"./styles.css\";\n\nexport { BackendThinkingChain } from \"./components/BackendThinkingChain\";\nexport { BlockingReasonPanel } from \"./components/BlockingReasonPanel\";\nexport { DAGEdge } from \"./components/DAGEdge\";\nexport { DAGLegend } from \"./components/DAGLegend\";\nexport { DAGNode } from \"./components/DAGNode\";\nexport { DecisionRequiredPanel } from \"./components/DecisionRequiredPanel\";\nexport { HumanInterventionPanel } from \"./components/HumanInterventionPanel\";\nexport { TaskApprovalPanel } from \"./components/TaskApprovalPanel\";\nexport { TaskCard } from \"./components/TaskCard\";\nexport { TaskDependencyList } from \"./components/TaskDependencyList\";\nexport { TaskDetailPanel } from \"./components/TaskDetailPanel\";\nexport { TaskHandoffPanel } from \"./components/TaskHandoffPanel\";\nexport { TaskProgressIndicator } from \"./components/TaskProgressIndicator\";\nexport { TaskRetryPanel } from \"./components/TaskRetryPanel\";\nexport { TaskRunLog } from \"./components/TaskRunLog\";\nexport { TaskStatusBadge } from \"./components/TaskStatusBadge\";\nexport { TaskTable } from \"./components/TaskTable\";\nexport { TaskTimeline } from \"./components/TaskTimeline\";\nexport { TaskWaveDAG } from \"./components/TaskWaveDAG\";\nexport { TaskWaveHeader } from \"./components/TaskWaveHeader\";\nexport { TaskWaveTable } from \"./components/TaskWaveTable\";\nexport { MobileTaskShell } from \"./components/MobileTaskShell\";\nexport type { MobileTaskShellProps } from \"./components/MobileTaskShell\";\nexport type {\n BackendThinkingChainProps,\n BackendThinkingStep,\n BlockingReasonPanelProps,\n DAGEdgeLegendItem,\n DAGEdgeLegendVariant,\n DAGEdgeModel,\n DAGEdgeProps,\n DAGLegendProps,\n DAGNodeModel,\n DAGNodeProps,\n DecisionEvidence,\n DecisionOption,\n DecisionRequiredPanelProps,\n HumanInterventionPanelProps,\n PositionedDAGNode,\n RiskLevel,\n Task,\n TaskApprovalPanelProps,\n TaskCardProps,\n TaskDependency,\n TaskDependencyListProps,\n TaskDetailPanelProps,\n TaskHandoffPanelProps,\n TaskPriority,\n TaskProgressIndicatorProps,\n TaskRetryPanelProps,\n TaskRunLogEntry,\n TaskRunLogProps,\n TaskStatusBadgeProps,\n TaskStep,\n TaskTableProps,\n TaskTimelineEvent,\n TaskTimelineProps,\n TaskWave,\n TaskWaveDAGProps,\n TaskWaveHeaderProps,\n TaskWaveTableProps\n} from \"./types\";\n\nexport const TaskComponentNames = [\n \"TaskCard\",\n \"TaskTable\",\n \"TaskDetailPanel\",\n \"TaskStatusBadge\",\n \"TaskProgressIndicator\",\n \"TaskDependencyList\",\n \"TaskTimeline\",\n \"TaskWaveTable\",\n \"TaskWaveHeader\",\n \"TaskWaveDAG\",\n \"DAGNode\",\n \"DAGEdge\",\n \"DAGLegend\",\n \"TaskApprovalPanel\",\n \"DecisionRequiredPanel\",\n \"BackendThinkingChain\",\n \"HumanInterventionPanel\",\n \"BlockingReasonPanel\",\n \"TaskHandoffPanel\",\n \"TaskRunLog\",\n \"TaskRetryPanel\",\n \"MobileTaskShell\"\n] as const;\nexport type TaskComponentName = (typeof TaskComponentNames)[number];\n","import * as React from \"react\";\nimport clsx from \"clsx\";\nimport { Badge, EmptyState, StatusDot, Tag } from \"@echothink-ui/core\";\nimport type { BackendThinkingStep, BackendThinkingChainProps } from \"../types\";\nimport { formatDuration, labelForStatus } from \"./utils\";\n\nconst STREAMING_STATUSES = new Set<BackendThinkingStep[\"status\"]>([\"running\", \"in-progress\"]);\n\nfunction flattenSteps(steps: BackendThinkingStep[]): BackendThinkingStep[] {\n return steps.flatMap((step) => [step, ...flattenSteps(step.children ?? [])]);\n}\n\nfunction currentStreamingStepId(steps: BackendThinkingStep[]) {\n const flattened = flattenSteps(steps);\n\n for (let index = flattened.length - 1; index >= 0; index -= 1) {\n if (STREAMING_STATUSES.has(flattened[index].status)) {\n return flattened[index].id;\n }\n }\n\n return flattened.at(-1)?.id;\n}\n\nfunction ThinkingStepItem({\n step,\n streamingStepId\n}: {\n step: BackendThinkingStep;\n streamingStepId?: string;\n}) {\n const isStreaming = streamingStepId === step.id;\n const hasChildren = Boolean(step.children?.length);\n const [expanded, setExpanded] = React.useState(true);\n\n return (\n <li\n className={clsx(\n \"eth-task-thinking-chain__item\",\n `eth-task-thinking-chain__item--${step.status}`,\n step.redacted && \"eth-task-thinking-chain__item--redacted\"\n )}\n >\n <span className=\"eth-task-thinking-chain__marker\" aria-hidden=\"true\" />\n <details\n className=\"eth-task-thinking-chain__step\"\n open={expanded}\n onToggle={(event) => {\n setExpanded(event.currentTarget.open);\n }}\n >\n <summary className=\"eth-task-thinking-chain__step-header\">\n <span className=\"eth-task-thinking-chain__disclosure-icon\" aria-hidden=\"true\" />\n <span className=\"eth-task-thinking-chain__step-header-inner\">\n <span className=\"eth-task-thinking-chain__step-heading\">\n <strong className=\"eth-task-thinking-chain__step-title\">\n {step.redacted ? \"Restricted step\" : step.title}\n </strong>\n {hasChildren ? (\n <span className=\"eth-task-thinking-chain__branch-count\">\n {step.children?.length} {step.children?.length === 1 ? \"substep\" : \"substeps\"}\n </span>\n ) : null}\n {isStreaming ? (\n <span className=\"eth-task-thinking-chain__streaming\" aria-label=\"Streaming update\">\n <span className=\"eth-task-thinking-chain__pulse\" aria-hidden=\"true\" />\n Streaming\n </span>\n ) : null}\n </span>\n <span className=\"eth-task-thinking-chain__step-meta\">\n {step.redacted ? <Badge severity=\"warning\">Redacted</Badge> : null}\n <StatusDot status={step.status} label={labelForStatus(step.status)} />\n {step.toolName ? <Tag>{step.toolName}</Tag> : null}\n {step.durationMs != null ? (\n <span className=\"eth-task-thinking-chain__duration\">\n {formatDuration(step.durationMs)}\n </span>\n ) : null}\n </span>\n </span>\n </summary>\n {step.redacted ? (\n <p className=\"eth-task-thinking-chain__redacted\">Details are hidden by policy.</p>\n ) : step.summary ? (\n <p className=\"eth-task-thinking-chain__summary\">{step.summary}</p>\n ) : null}\n {hasChildren ? (\n <ol className=\"eth-task-thinking-chain__children\">\n {step.children?.map((child) => (\n <ThinkingStepItem key={child.id} step={child} streamingStepId={streamingStepId} />\n ))}\n </ol>\n ) : null}\n </details>\n </li>\n );\n}\n\nexport function BackendThinkingChain({\n steps = [],\n streaming,\n className,\n ...props\n}: BackendThinkingChainProps) {\n const streamingStepId = React.useMemo(\n () => (streaming ? currentStreamingStepId(steps) : undefined),\n [steps, streaming]\n );\n\n return (\n <section\n {...props}\n className={clsx(\"eth-task-thinking-chain\", className)}\n aria-live={streaming ? \"polite\" : undefined}\n data-eth-component=\"BackendThinkingChain\"\n >\n {steps.length ? (\n <ol className=\"eth-task-thinking-chain__list\">\n {steps.map((step) => (\n <ThinkingStepItem key={step.id} step={step} streamingStepId={streamingStepId} />\n ))}\n </ol>\n ) : (\n <EmptyState title=\"No backend steps\" />\n )}\n </section>\n );\n}\n","import type { EthOperationalStatus, EthSeverity } from \"@echothink-ui/core\";\nimport { statusLabel } from \"@echothink-ui/core\";\nimport type { RiskLevel, TaskPriority, TaskWave } from \"../types\";\n\nexport function severityForStatus(status: EthOperationalStatus): EthSeverity {\n if (status === \"running\" || status === \"queued\" || status === \"in-progress\") return \"info\";\n if (status === \"blocked\" || status === \"failed\") return \"danger\";\n if (status === \"pending-approval\" || status === \"approval-required\" || status === \"warning\") {\n return \"warning\";\n }\n if (status === \"succeeded\" || status === \"completed\" || status === \"synced\") return \"success\";\n return \"neutral\";\n}\n\nexport function severityForPriority(priority?: TaskPriority): EthSeverity {\n if (priority === \"critical\") return \"danger\";\n if (priority === \"high\") return \"warning\";\n if (priority === \"medium\") return \"info\";\n return \"neutral\";\n}\n\nexport function severityForRisk(riskLevel?: RiskLevel): EthSeverity {\n if (riskLevel === \"critical\" || riskLevel === \"high\") return \"danger\";\n if (riskLevel === \"medium\") return \"warning\";\n if (riskLevel === \"low\") return \"info\";\n return \"neutral\";\n}\n\nexport function labelForStatus(status: EthOperationalStatus) {\n return statusLabel(status);\n}\n\nexport function formatDateTime(value?: string | Date) {\n if (!value) return \"-\";\n const date = value instanceof Date ? value : new Date(value);\n if (Number.isNaN(date.valueOf())) return String(value);\n return new Intl.DateTimeFormat(undefined, {\n dateStyle: \"medium\",\n timeStyle: \"short\"\n }).format(date);\n}\n\nexport function relativeTime(value?: string | Date, now = new Date()) {\n if (!value) return \"\";\n const date = value instanceof Date ? value : new Date(value);\n if (Number.isNaN(date.valueOf())) return \"\";\n const deltaSeconds = Math.round((date.getTime() - now.getTime()) / 1000);\n const units: Array<[Intl.RelativeTimeFormatUnit, number]> = [\n [\"year\", 31536000],\n [\"month\", 2592000],\n [\"week\", 604800],\n [\"day\", 86400],\n [\"hour\", 3600],\n [\"minute\", 60]\n ];\n const formatter = new Intl.RelativeTimeFormat(undefined, { numeric: \"auto\" });\n for (const [unit, seconds] of units) {\n if (Math.abs(deltaSeconds) >= seconds) {\n return formatter.format(Math.round(deltaSeconds / seconds), unit);\n }\n }\n return formatter.format(deltaSeconds, \"second\");\n}\n\nexport function formatDuration(durationMs?: number) {\n if (durationMs == null) return \"-\";\n if (durationMs < 1000) return `${durationMs}ms`;\n const seconds = Math.round(durationMs / 1000);\n if (seconds < 60) return `${seconds}s`;\n const minutes = Math.floor(seconds / 60);\n const remainder = seconds % 60;\n if (minutes < 60) return remainder ? `${minutes}m ${remainder}s` : `${minutes}m`;\n const hours = Math.floor(minutes / 60);\n const minuteRemainder = minutes % 60;\n return minuteRemainder ? `${hours}h ${minuteRemainder}m` : `${hours}h`;\n}\n\nexport function clampProgress(value?: number, total = 100) {\n if (value == null || Number.isNaN(value)) return 0;\n if (total <= 0) return 0;\n const percent = total === 100 ? value : (value / total) * 100;\n return Math.max(0, Math.min(100, Math.round(percent)));\n}\n\nexport function waveProgress(wave?: TaskWave) {\n if (!wave?.totalTasks) return 0;\n const completed = (wave.statuses.completed ?? 0) + (wave.statuses.succeeded ?? 0);\n return clampProgress(completed, wave.totalTasks);\n}\n\nexport function statusColor(status?: EthOperationalStatus) {\n switch (status) {\n case \"completed\":\n case \"succeeded\":\n case \"synced\":\n case \"active\":\n return \"var(--eth-color-success)\";\n case \"running\":\n case \"in-progress\":\n case \"queued\":\n return \"var(--eth-color-info)\";\n case \"blocked\":\n case \"failed\":\n case \"approval-required\":\n return \"var(--eth-color-danger)\";\n case \"pending-approval\":\n case \"warning\":\n return \"var(--eth-color-warning)\";\n default:\n return \"var(--eth-color-border-strong)\";\n }\n}\n\nexport function fallbackId(prefix: string) {\n return `${prefix}-${Math.random().toString(36).slice(2)}`;\n}\n","import * as React from \"react\";\nimport clsx from \"clsx\";\nimport { ActionGroup, Badge, EmptyState, Surface } from \"@echothink-ui/core\";\nimport type { BlockingReasonPanelProps } from \"../types\";\n\nexport function BlockingReasonPanel({\n blockers = [],\n className,\n title = \"Blocking reasons\",\n description,\n severity,\n status,\n ...props\n}: BlockingReasonPanelProps) {\n const hasBlockers = blockers.length > 0;\n\n return (\n <Surface\n {...props}\n className={clsx(\"eth-task-blocking-reason-panel\", className)}\n title={title}\n description={description}\n status={status ?? (hasBlockers ? \"blocked\" : undefined)}\n severity={severity ?? (hasBlockers ? \"danger\" : undefined)}\n data-eth-component=\"BlockingReasonPanel\"\n >\n {hasBlockers ? (\n <ul className=\"eth-task-blocking-reason-panel__list\" aria-label=\"Active blocking reasons\">\n {blockers.map((blocker) => {\n const resolveActions = blocker.resolveAction\n ? [\n {\n ...blocker.resolveAction,\n intent: blocker.resolveAction.intent ?? \"tertiary\"\n }\n ]\n : undefined;\n\n return (\n <li key={blocker.id} className=\"eth-task-blocking-reason-panel__item\">\n <div className=\"eth-task-blocking-reason-panel__content\">\n <strong className=\"eth-task-blocking-reason-panel__reason\">\n {blocker.reason}\n </strong>\n <div className=\"eth-task-blocking-reason-panel__meta\">\n <Badge severity=\"danger\">Blocked</Badge>\n {blocker.ownerActor ? <span>Owner: {blocker.ownerActor}</span> : null}\n </div>\n </div>\n {resolveActions ? (\n <div className=\"eth-task-blocking-reason-panel__actions\">\n <ActionGroup actions={resolveActions} />\n </div>\n ) : null}\n </li>\n );\n })}\n </ul>\n ) : (\n <EmptyState\n title=\"No blocking reasons\"\n description=\"This task can continue without unblock actions.\"\n />\n )}\n </Surface>\n );\n}\n","import * as React from \"react\";\nimport clsx from \"clsx\";\nimport type { DAGEdgeProps } from \"../types\";\nimport { labelForStatus, statusColor } from \"./utils\";\n\nfunction markerIdFromUseId(id: string) {\n return `eth-dag-arrow-${id.replace(/[^a-zA-Z0-9_-]/g, \"\")}`;\n}\n\nexport function DAGEdge({\n from,\n to,\n status,\n label,\n className,\n \"aria-label\": ariaLabel,\n ...props\n}: DAGEdgeProps) {\n const reactId = React.useId();\n const markerId = markerIdFromUseId(reactId);\n const horizontal = Math.abs(to.x - from.x) >= Math.abs(to.y - from.y);\n const controlA = horizontal\n ? { x: (from.x + to.x) / 2, y: from.y }\n : { x: from.x, y: (from.y + to.y) / 2 };\n const controlB = horizontal\n ? { x: (from.x + to.x) / 2, y: to.y }\n : { x: to.x, y: (from.y + to.y) / 2 };\n const d = `M ${from.x} ${from.y} C ${controlA.x} ${controlA.y}, ${controlB.x} ${controlB.y}, ${to.x} ${to.y}`;\n const color = statusColor(status);\n const midpoint = { x: (from.x + to.x) / 2, y: (from.y + to.y) / 2 };\n const labelText = label?.trim();\n const labelWidth = labelText ? Math.max(56, labelText.length * 7 + 20) : 0;\n const labelPosition = horizontal\n ? { x: midpoint.x, y: midpoint.y - 16 }\n : { x: midpoint.x + 44, y: midpoint.y };\n const statusText = status ? labelForStatus(status) : \"Neutral\";\n const accessibleLabel =\n typeof ariaLabel === \"string\" && ariaLabel.trim()\n ? ariaLabel\n : labelText\n ? `${labelText} dependency edge, ${statusText}`\n : `Dependency edge, ${statusText}`;\n\n return (\n <g\n className={clsx(\"eth-dag-edge\", status && `eth-dag-edge--${status}`, className)}\n role=\"group\"\n aria-label={accessibleLabel}\n >\n <defs>\n <marker\n id={markerId}\n markerWidth=\"10\"\n markerHeight=\"10\"\n refX=\"9\"\n refY=\"3\"\n orient=\"auto\"\n markerUnits=\"strokeWidth\"\n >\n <path d=\"M0,0 L0,6 L9,3 z\" fill={color} />\n </marker>\n </defs>\n <path\n {...props}\n d={d}\n fill=\"none\"\n stroke={color}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n markerEnd={`url(#${markerId})`}\n vectorEffect=\"non-scaling-stroke\"\n aria-hidden=\"true\"\n data-eth-component=\"DAGEdge\"\n />\n {labelText ? (\n <g className=\"eth-dag-edge__label\" aria-hidden=\"true\">\n <rect\n x={labelPosition.x - labelWidth / 2}\n y={labelPosition.y - 11}\n width={labelWidth}\n height={22}\n rx={0}\n />\n <text\n x={labelPosition.x}\n y={labelPosition.y}\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n >\n {labelText}\n </text>\n </g>\n ) : null}\n </g>\n );\n}\n","import * as React from \"react\";\nimport clsx from \"clsx\";\nimport type { EthOperationalStatus } from \"@echothink-ui/core\";\nimport type { DAGEdgeLegendItem, DAGLegendProps } from \"../types\";\nimport { labelForStatus, statusColor } from \"./utils\";\n\nconst defaultStatuses: EthOperationalStatus[] = [\n \"not-started\",\n \"queued\",\n \"running\",\n \"blocked\",\n \"failed\",\n \"pending-approval\",\n \"completed\"\n];\n\nconst defaultEdgeTypes: DAGEdgeLegendItem[] = [\n { id: \"dependency\", label: \"Dependency\", variant: \"dependency\" },\n { id: \"critical-path\", label: \"Critical path\", status: \"running\", variant: \"critical\" },\n {\n id: \"approval-gate\",\n label: \"Approval gate\",\n status: \"pending-approval\",\n variant: \"conditional\"\n }\n];\n\nfunction colorVariable(color: string) {\n return { \"--eth-dag-legend-color\": color } as React.CSSProperties;\n}\n\nexport function DAGLegend({\n statuses = defaultStatuses,\n edgeTypes = defaultEdgeTypes,\n className,\n \"aria-label\": ariaLabel,\n ...props\n}: DAGLegendProps) {\n return (\n <div\n {...props}\n className={clsx(\"eth-dag-legend\", className)}\n data-eth-component=\"DAGLegend\"\n role=\"group\"\n aria-label={ariaLabel ?? \"DAG legend\"}\n >\n {statuses.length ? (\n <div className=\"eth-dag-legend__group\">\n <span className=\"eth-dag-legend__heading\">Node status</span>\n <ul className=\"eth-dag-legend__list\" aria-label=\"DAG node status legend\">\n {statuses.map((status) => (\n <li key={status} className=\"eth-dag-legend__item\">\n <span\n className={clsx(\"eth-dag-legend__swatch\", `eth-dag-legend__swatch--${status}`)}\n style={colorVariable(statusColor(status))}\n aria-hidden=\"true\"\n />\n <span className=\"eth-dag-legend__label\">{labelForStatus(status)}</span>\n </li>\n ))}\n </ul>\n </div>\n ) : null}\n {edgeTypes.length ? (\n <div className=\"eth-dag-legend__group eth-dag-legend__group--edges\">\n <span className=\"eth-dag-legend__heading\">Edge type</span>\n <ul className=\"eth-dag-legend__list\" aria-label=\"DAG edge type legend\">\n {edgeTypes.map((edgeType) => (\n <li key={edgeType.id} className=\"eth-dag-legend__item\">\n <span\n className={clsx(\n \"eth-dag-legend__edge\",\n `eth-dag-legend__edge--${edgeType.variant ?? \"dependency\"}`\n )}\n style={colorVariable(statusColor(edgeType.status))}\n aria-hidden=\"true\"\n />\n <span className=\"eth-dag-legend__label\">{edgeType.label}</span>\n </li>\n ))}\n </ul>\n </div>\n ) : null}\n </div>\n );\n}\n","import * as React from \"react\";\nimport clsx from \"clsx\";\nimport type { DAGNodeProps } from \"../types\";\nimport { labelForStatus, statusColor } from \"./utils\";\n\nconst nodeWidth = 156;\nconst nodeHeight = 60;\n\nfunction truncateLabel(label: string) {\n return label.length > 20 ? `${label.slice(0, 19)}...` : label;\n}\n\nexport function DAGNode({ node, selected, onSelect, className, ...props }: DAGNodeProps) {\n const statusLabel = labelForStatus(node.status);\n const x = node.x - nodeWidth / 2;\n const y = node.y - nodeHeight / 2;\n const handleSelect = () => onSelect?.(node);\n const interactive = Boolean(onSelect);\n\n return (\n <g\n {...props}\n className={clsx(\n \"eth-dag-node\",\n `eth-dag-node--${node.status}`,\n interactive && \"eth-dag-node--interactive\",\n selected && \"eth-dag-node--selected\",\n className\n )}\n role={interactive ? \"button\" : \"group\"}\n tabIndex={interactive ? 0 : undefined}\n aria-label={`${node.label}, ${statusLabel}`}\n aria-pressed={interactive ? Boolean(selected) : undefined}\n onClick={interactive ? handleSelect : undefined}\n onKeyDown={\n interactive\n ? (event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n handleSelect();\n }\n }\n : undefined\n }\n data-eth-component=\"DAGNode\"\n >\n <title>{`${node.label} - ${statusLabel}`}</title>\n <rect\n className=\"eth-dag-node__selection\"\n x={x - 3}\n y={y - 3}\n width={nodeWidth + 6}\n height={nodeHeight + 6}\n rx={0}\n />\n <rect\n className=\"eth-dag-node__body\"\n x={x}\n y={y}\n width={nodeWidth}\n height={nodeHeight}\n rx={0}\n fill=\"var(--eth-color-layer-01)\"\n />\n <rect\n className=\"eth-dag-node__status-strip\"\n x={x}\n y={y}\n width={4}\n height={nodeHeight}\n fill={statusColor(node.status)}\n />\n <circle className=\"eth-dag-node__port\" cx={x} cy={node.y} r={3} />\n <circle className=\"eth-dag-node__port\" cx={x + nodeWidth} cy={node.y} r={3} />\n <circle\n className=\"eth-dag-node__status-dot\"\n cx={x + 18}\n cy={y + 18}\n r={3.5}\n fill={statusColor(node.status)}\n />\n <text\n x={x + 28}\n y={y + 22}\n textAnchor=\"start\"\n className=\"eth-dag-node__label\"\n >\n {truncateLabel(node.label)}\n </text>\n <text\n x={x + 28}\n y={y + 44}\n textAnchor=\"start\"\n className=\"eth-dag-node__status\"\n >\n {statusLabel}\n </text>\n </g>\n );\n}\n\nexport const DAG_NODE_WIDTH = nodeWidth;\nexport const DAG_NODE_HEIGHT = nodeHeight;\n","import * as React from \"react\";\nimport clsx from \"clsx\";\nimport { InlineNotification, Surface, Tag, type EthAction } from \"@echothink-ui/core\";\nimport type { DecisionOption, DecisionRequiredPanelProps } from \"../types\";\nimport { severityForRisk } from \"./utils\";\n\ninterface ResolvedOption extends DecisionOption {\n action?: EthAction;\n}\n\nfunction optionsFromActions(actions?: EthAction[]): ResolvedOption[] {\n return (\n actions?.map((action) => ({\n id: action.id,\n label: action.label,\n intent: action.intent,\n action\n })) ?? []\n );\n}\n\nfunction riskTitle(riskLevel: DecisionRequiredPanelProps[\"riskLevel\"]) {\n if (!riskLevel) return \"Decision required\";\n return `${riskLevel.charAt(0).toUpperCase()}${riskLevel.slice(1)} risk decision`;\n}\n\nfunction optionIntent(option: ResolvedOption) {\n return option.intent ?? \"secondary\";\n}\n\nexport function DecisionRequiredPanel({\n title,\n summary,\n riskLevel,\n evidence = [],\n options,\n onDecide,\n decidedOptionId,\n className,\n description,\n actions,\n items,\n severity,\n status,\n ...props\n}: DecisionRequiredPanelProps) {\n const titleId = React.useId();\n const evidenceId = React.useId();\n const optionsId = React.useId();\n const resolvedOptions: ResolvedOption[] =\n options?.map((option) => ({ ...option })) ??\n (actions?.length\n ? optionsFromActions(actions)\n : items?.length\n ? items.map((item) => ({\n id: item.id,\n label: String(item.label),\n description: item.description ? String(item.description) : undefined,\n intent: item.status === \"active\" ? \"primary\" : \"secondary\"\n }))\n : []);\n const riskSeverity = riskLevel ? severityForRisk(riskLevel) : (severity ?? \"warning\");\n\n return (\n <Surface\n {...props}\n role=\"region\"\n aria-labelledby={titleId}\n className={clsx(\n \"eth-task-decision-panel\",\n riskLevel && `eth-task-decision-panel--${riskLevel}`,\n className\n )}\n title={<span id={titleId}>{title}</span>}\n severity={riskSeverity === \"neutral\" ? severity : riskSeverity}\n status={status ?? \"approval-required\"}\n data-eth-component=\"DecisionRequiredPanel\"\n >\n <InlineNotification severity={riskSeverity} title={riskTitle(riskLevel)}>\n {description}\n </InlineNotification>\n {summary ? (\n <section className=\"eth-task-decision-panel__summary\" aria-label=\"Decision context\">\n <div className=\"eth-task-decision-panel__section-label\">Decision context</div>\n <div className=\"eth-task-decision-panel__summary-body\">{summary}</div>\n </section>\n ) : null}\n\n {evidence.length ? (\n <section className=\"eth-task-decision-panel__evidence\" aria-labelledby={evidenceId}>\n <div className=\"eth-task-decision-panel__section-header\">\n <h3 id={evidenceId}>Evidence</h3>\n <span>\n {evidence.length} source{evidence.length === 1 ? \"\" : \"s\"}\n </span>\n </div>\n <ul>\n {evidence.map((item) => (\n <li key={item.id}>\n <div className=\"eth-task-decision-panel__evidence-label\">\n {item.href ? (\n <a className=\"eth-task-decision-panel__evidence-link\" href={item.href}>\n {item.label}\n </a>\n ) : (\n <strong>{item.label}</strong>\n )}\n </div>\n {item.preview ? (\n <div className=\"eth-task-decision-panel__evidence-preview\">{item.preview}</div>\n ) : null}\n </li>\n ))}\n </ul>\n </section>\n ) : null}\n\n {resolvedOptions.length ? (\n <section\n className=\"eth-task-decision-panel__options\"\n role=\"group\"\n aria-labelledby={optionsId}\n >\n <div className=\"eth-task-decision-panel__section-header\">\n <h3 id={optionsId}>Decision options</h3>\n <span>{resolvedOptions.length} available</span>\n </div>\n {resolvedOptions.map((option) => (\n <button\n key={option.id}\n type=\"button\"\n className={clsx(\n \"eth-task-decision-panel__option\",\n `eth-task-decision-panel__option--${optionIntent(option)}`\n )}\n disabled={option.action?.disabled}\n aria-pressed={decidedOptionId === option.id}\n onClick={() => {\n option.action?.onSelect?.();\n onDecide?.(option.id);\n }}\n >\n <span className=\"eth-task-decision-panel__option-main\">\n <span className=\"eth-task-decision-panel__option-label\">{option.label}</span>\n {option.description ? (\n <span className=\"eth-task-decision-panel__option-description\">\n {option.description}\n </span>\n ) : null}\n </span>\n <span className=\"eth-task-decision-panel__option-state\">\n {decidedOptionId === option.id ? \"Selected\" : \"Choose\"}\n </span>\n </button>\n ))}\n </section>\n ) : null}\n\n {decidedOptionId ? (\n <div className=\"eth-task-decision-panel__decision\">\n <Tag>Decided: {decidedOptionId}</Tag>\n </div>\n ) : null}\n </Surface>\n );\n}\n","import * as React from \"react\";\nimport clsx from \"clsx\";\nimport { ActionGroup, Badge, InlineNotification, Surface } from \"@echothink-ui/core\";\nimport type { EthSeverity } from \"@echothink-ui/core\";\nimport type { HumanInterventionPanelProps } from \"../types\";\n\nfunction urgencySeverity(urgency: HumanInterventionPanelProps[\"urgency\"]): EthSeverity {\n if (urgency === \"high\") return \"danger\";\n if (urgency === \"medium\") return \"warning\";\n return \"info\";\n}\n\nfunction urgencyLabel(urgency: HumanInterventionPanelProps[\"urgency\"]) {\n if (urgency === \"high\") return \"High urgency\";\n if (urgency === \"medium\") return \"Medium urgency\";\n return \"Low urgency\";\n}\n\nexport function HumanInterventionPanel({\n reason,\n affectedTask,\n actions,\n urgency = \"medium\",\n className,\n title = \"Human intervention required\",\n status = \"approval-required\",\n severity,\n role = \"region\",\n \"aria-labelledby\": ariaLabelledBy,\n ...props\n}: HumanInterventionPanelProps) {\n const titleId = React.useId();\n const panelSeverity = severity ?? urgencySeverity(urgency);\n const labelledBy = ariaLabelledBy ?? (title ? titleId : undefined);\n\n return (\n <Surface\n {...props}\n role={role}\n aria-labelledby={labelledBy}\n className={clsx(\"eth-task-human-intervention-panel\", className)}\n title={title ? <span id={titleId}>{title}</span> : undefined}\n status={status}\n severity={panelSeverity}\n data-eth-component=\"HumanInterventionPanel\"\n >\n <InlineNotification severity={panelSeverity} title=\"Intervention requested\">\n {reason ?? \"Review this task and choose the next action before the agent can continue.\"}\n </InlineNotification>\n\n <dl className=\"eth-task-human-intervention-panel__details\" aria-label=\"Intervention details\">\n {affectedTask ? (\n <div>\n <dt>Affected task</dt>\n <dd>\n <span className=\"eth-task-human-intervention-panel__task-title\">\n {affectedTask.title}\n </span>\n <span className=\"eth-task-human-intervention-panel__task-id\">{affectedTask.id}</span>\n </dd>\n </div>\n ) : null}\n <div>\n <dt>Urgency</dt>\n <dd>\n <Badge severity={panelSeverity}>{urgencyLabel(urgency)}</Badge>\n </dd>\n </div>\n </dl>\n\n {actions?.length ? (\n <div\n className=\"eth-task-human-intervention-panel__actions\"\n role=\"group\"\n aria-label=\"Intervention actions\"\n >\n <ActionGroup actions={actions} />\n </div>\n ) : null}\n </Surface>\n );\n}\n","import * as React from \"react\";\nimport { Button, FormField, InlineNotification, Textarea } from \"@echothink-ui/core\";\nimport type { DecisionEvidence, TaskApprovalPanelProps } from \"../types\";\nimport { DecisionRequiredPanel } from \"./DecisionRequiredPanel\";\n\nfunction refEvidence(\n taskRef: React.ReactNode,\n diffRef: React.ReactNode,\n policyRef: React.ReactNode,\n evidence: DecisionEvidence[] = []\n): DecisionEvidence[] {\n const refs: DecisionEvidence[] = [];\n if (taskRef) refs.push({ id: \"task-ref\", label: \"Task reference\", preview: taskRef });\n if (diffRef) refs.push({ id: \"diff-ref\", label: \"Diff reference\", preview: diffRef });\n if (policyRef) refs.push({ id: \"policy-ref\", label: \"Policy reference\", preview: policyRef });\n return [...refs, ...evidence];\n}\n\nfunction stateNotification(state: NonNullable<TaskApprovalPanelProps[\"state\"]>) {\n if (state === \"approved\") {\n return {\n severity: \"success\" as const,\n title: \"Output approved\",\n description: \"The approval has been recorded with the current audit metadata.\"\n };\n }\n\n if (state === \"rejected\") {\n return {\n severity: \"danger\" as const,\n title: \"Output rejected\",\n description: \"The rejection reason and evidence references are retained for review.\"\n };\n }\n\n if (state === \"pending\") {\n return {\n severity: \"info\" as const,\n title: \"Decision pending\",\n description: \"The approval decision is being prepared for audit capture.\"\n };\n }\n\n return null;\n}\n\nexport function TaskApprovalPanel({\n taskRef,\n diffRef,\n policyRef,\n summary,\n evidence,\n onApprove,\n onReject,\n onRequestChanges,\n state = \"idle\",\n title = \"Task approval required\",\n description,\n footer,\n ...props\n}: TaskApprovalPanelProps) {\n const [reason, setReason] = React.useState(\"\");\n const reasonId = React.useId();\n const notification = stateNotification(state);\n const policy = policyRef ?? \"Default task policy\";\n const isPending = state === \"pending\";\n\n return (\n <section className=\"eth-task-approval-panel\" data-eth-component=\"TaskApprovalPanel\">\n <DecisionRequiredPanel\n {...props}\n title={title}\n summary={\n <div className=\"eth-task-approval-panel__body\">\n {summary ? <div className=\"eth-task-approval-panel__summary\">{summary}</div> : null}\n {notification ? (\n <InlineNotification\n className=\"eth-task-approval-panel__state\"\n severity={notification.severity}\n title={notification.title}\n >\n {notification.description}\n </InlineNotification>\n ) : null}\n <FormField\n id={reasonId}\n label=\"Decision reason\"\n helperText=\"Stored with approval audit metadata.\"\n className=\"eth-task-approval-panel__reason\"\n >\n <Textarea\n value={reason}\n rows={4}\n placeholder=\"Summarize the approval rationale, rejection issue, or requested change.\"\n onChange={(event) => setReason(event.currentTarget.value)}\n />\n </FormField>\n <dl className=\"eth-task-approval-panel__audit\">\n <div>\n <dt>Task</dt>\n <dd>{taskRef ?? \"-\"}</dd>\n </div>\n {diffRef ? (\n <div>\n <dt>Diff</dt>\n <dd>{diffRef}</dd>\n </div>\n ) : null}\n <div>\n <dt>Policy</dt>\n <dd>{policy}</dd>\n </div>\n </dl>\n </div>\n }\n description={description ?? \"Review the task output and choose an approval outcome.\"}\n riskLevel=\"high\"\n evidence={refEvidence(taskRef, diffRef, policyRef, evidence)}\n options={[]}\n footer={\n <div className=\"eth-task-approval-panel__footer\">\n <div\n className=\"eth-task-approval-panel__actions\"\n role=\"group\"\n aria-label=\"Approval actions\"\n >\n <Button\n intent=\"success\"\n disabled={isPending || !onApprove}\n aria-pressed={state === \"approved\"}\n onClick={() => onApprove?.(reason)}\n >\n Approve\n </Button>\n <Button\n intent=\"danger\"\n disabled={isPending || !onReject}\n aria-pressed={state === \"rejected\"}\n onClick={() => onReject?.(reason)}\n >\n Reject\n </Button>\n <Button\n intent=\"secondary\"\n disabled={isPending || !onRequestChanges}\n onClick={() => onRequestChanges?.(reason)}\n >\n Request changes\n </Button>\n </div>\n {footer ? (\n <div className=\"eth-task-approval-panel__custom-footer\">{footer}</div>\n ) : null}\n </div>\n }\n />\n </section>\n );\n}\n","import * as React from \"react\";\nimport clsx from \"clsx\";\nimport { Badge, Surface, Tag } from \"@echothink-ui/core\";\nimport type { TaskCardProps } from \"../types\";\nimport { formatDateTime, severityForPriority } from \"./utils\";\n\nexport function TaskCard({ task, actions, onSelect, className, ...props }: TaskCardProps) {\n const cardActions = actions?.map((action) => ({\n ...action,\n intent: action.intent ?? \"tertiary\"\n }));\n\n const interactiveProps = onSelect\n ? {\n role: \"button\",\n tabIndex: 0,\n onClick: () => onSelect(task),\n onKeyDown: (event: React.KeyboardEvent<HTMLElement>) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n onSelect(task);\n }\n }\n }\n : {};\n\n return (\n <Surface\n {...props}\n {...interactiveProps}\n className={clsx(\"eth-task-card\", onSelect && \"eth-task-card--selectable\", className)}\n density=\"compact\"\n title={task.title}\n subtitle={task.id}\n description={task.description}\n status={task.status}\n actions={cardActions}\n metadata={[\n {\n label: \"Assignee\",\n value: task.assignee ? (\n <span className=\"eth-task-card__assignee\">{task.assignee}</span>\n ) : (\n \"-\"\n )\n },\n {\n label: \"Due\",\n value: formatDateTime(task.dueAt)\n },\n {\n label: \"Priority\",\n value: task.priority ? (\n <Badge severity={severityForPriority(task.priority)}>{task.priority}</Badge>\n ) : (\n \"-\"\n )\n }\n ]}\n data-eth-component=\"TaskCard\"\n >\n {task.tags?.length ? (\n <div className=\"eth-task-card__tags\" aria-label=\"Task tags\">\n {task.tags.map((tag) => (\n <Tag key={tag}>{tag}</Tag>\n ))}\n </div>\n ) : null}\n </Surface>\n );\n}\n","import * as React from \"react\";\nimport clsx from \"clsx\";\nimport { Badge, EmptyState } from \"@echothink-ui/core\";\nimport type { TaskDependency, TaskDependencyListProps } from \"../types\";\nimport { TaskStatusBadge } from \"./TaskStatusBadge\";\n\ntype DependencyRelationship = \"blocks\" | \"blocked-by\";\n\nconst groupDescriptions: Record<DependencyRelationship, string> = {\n \"blocked-by\": \"Prerequisite work that must clear before this task can move forward.\",\n blocks: \"Downstream work waiting on this task.\"\n};\n\nfunction taskCountLabel(count: number) {\n return `${count} task${count === 1 ? \"\" : \"s\"}`;\n}\n\nfunction relationshipLabel(relationship: DependencyRelationship) {\n return relationship === \"blocks\" ? \"Dependent\" : \"Prerequisite\";\n}\n\nfunction DependencyGroup({\n title,\n relationship,\n dependencies\n}: {\n title: string;\n relationship: DependencyRelationship;\n dependencies: TaskDependency[];\n}) {\n const headingId = React.useId();\n\n if (!dependencies.length) return null;\n\n return (\n <section className=\"eth-task-dependencies__group\" aria-labelledby={headingId}>\n <div className=\"eth-task-dependencies__group-header\">\n <div className=\"eth-task-dependencies__group-heading\">\n <h4 id={headingId}>{title}</h4>\n <p>{groupDescriptions[relationship]}</p>\n </div>\n <Badge>{taskCountLabel(dependencies.length)}</Badge>\n </div>\n <ul className=\"eth-task-dependencies__list\">\n {dependencies.map((dependency) => (\n <li\n key={dependency.id}\n className={clsx(\n \"eth-task-dependencies__item\",\n `eth-task-dependencies__item--${dependency.status}`\n )}\n data-status={dependency.status}\n >\n <div className=\"eth-task-dependencies__item-main\">\n <span className=\"eth-task-dependencies__relationship\">\n {relationshipLabel(relationship)}\n </span>\n <span className=\"eth-task-dependencies__title\">{dependency.title}</span>\n <span className=\"eth-task-dependencies__id\">{dependency.id}</span>\n </div>\n <TaskStatusBadge status={dependency.status} />\n </li>\n ))}\n </ul>\n </section>\n );\n}\n\nexport function TaskDependencyList({\n dependencies = [],\n blocks = [],\n blockedBy = [],\n emptyTitle = \"No dependencies\",\n className,\n ...props\n}: TaskDependencyListProps) {\n const derivedBlocks = dependencies.filter((dependency) => dependency.relationship === \"blocks\");\n const derivedBlockedBy = dependencies.filter(\n (dependency) => dependency.relationship !== \"blocks\"\n );\n const blockList = blocks.length ? blocks : derivedBlocks;\n const blockedByList = blockedBy.length ? blockedBy : derivedBlockedBy;\n const hasDependencies = blockList.length || blockedByList.length;\n\n return (\n <div\n {...props}\n className={clsx(\"eth-task-dependencies\", className)}\n data-eth-component=\"TaskDependencyList\"\n >\n {hasDependencies ? (\n <>\n <DependencyGroup\n title=\"Blocked by\"\n relationship=\"blocked-by\"\n dependencies={blockedByList}\n />\n <DependencyGroup title=\"Blocks\" relationship=\"blocks\" dependencies={blockList} />\n </>\n ) : (\n <EmptyState title={emptyTitle} />\n )}\n </div>\n );\n}\n","import * as React from \"react\";\nimport clsx from \"clsx\";\nimport { Badge } from \"@echothink-ui/core\";\nimport type { TaskStatusBadgeProps } from \"../types\";\nimport { labelForStatus, severityForStatus } from \"./utils\";\n\nexport function TaskStatusBadge({\n status,\n label,\n className,\n title,\n ...props\n}: TaskStatusBadgeProps) {\n const statusLabel = label ?? labelForStatus(status);\n\n return (\n <Badge\n {...props}\n className={clsx(\"eth-task-status-badge\", `eth-task-status-badge--${status}`, className)}\n data-eth-component=\"TaskStatusBadge\"\n data-status={status}\n severity={severityForStatus(status)}\n title={title ?? statusLabel}\n >\n <span className=\"eth-task-status-badge__indicator\" aria-hidden=\"true\" />\n <span className=\"eth-task-status-badge__label\">{statusLabel}</span>\n </Badge>\n );\n}\n","import * as React from \"react\";\nimport clsx from \"clsx\";\nimport { ActionGroup, Badge, EmptyState, Surface } from \"@echothink-ui/core\";\nimport type { TaskDetailPanelProps } from \"../types\";\nimport { TaskDependencyList } from \"./TaskDependencyList\";\nimport { TaskTimeline } from \"./TaskTimeline\";\nimport { TaskStatusBadge } from \"./TaskStatusBadge\";\nimport { formatDateTime, severityForPriority } from \"./utils\";\n\nfunction formatCount(count: number, singular: string, plural = `${singular}s`) {\n return `${count} ${count === 1 ? singular : plural}`;\n}\n\nfunction DetailSection({\n title,\n meta,\n open,\n children,\n className\n}: {\n title: string;\n meta?: React.ReactNode;\n open?: boolean;\n children: React.ReactNode;\n className?: string;\n}) {\n return (\n <details open={open} className={clsx(\"eth-task-detail-panel__section\", className)}>\n <summary className=\"eth-task-detail-panel__summary\">\n <span className=\"eth-task-detail-panel__summary-label\">{title}</span>\n {meta ? <span className=\"eth-task-detail-panel__summary-meta\">{meta}</span> : null}\n </summary>\n <div className=\"eth-task-detail-panel__section-body\">{children}</div>\n </details>\n );\n}\n\nexport function TaskDetailPanel({\n task,\n dependencies,\n events,\n actions,\n className,\n title,\n description,\n items,\n ...props\n}: TaskDetailPanelProps) {\n if (!task) {\n return (\n <Surface\n {...props}\n className={clsx(\"eth-task-detail-panel\", className)}\n title={title ?? \"Task detail\"}\n description={description}\n items={items}\n actions={actions}\n data-eth-component=\"TaskDetailPanel\"\n >\n {!items?.length ? <EmptyState title=\"No task selected\" /> : null}\n </Surface>\n );\n }\n\n const resolvedDependencies = dependencies ?? task.dependencies ?? [];\n const resolvedEvents = events ?? task.history ?? [];\n\n return (\n <Surface\n {...props}\n className={clsx(\"eth-task-detail-panel\", className)}\n title={title ?? task.title}\n subtitle={task.id}\n status={task.status}\n data-eth-component=\"TaskDetailPanel\"\n >\n <div className=\"eth-task-detail-panel__stack\">\n <DetailSection title=\"Metadata\" open>\n <dl className=\"eth-meta-grid eth-task-detail-panel__metadata\">\n <div>\n <dt>Status</dt>\n <dd>\n <TaskStatusBadge status={task.status} />\n </dd>\n </div>\n <div>\n <dt>Assignee</dt>\n <dd>{task.assignee ?? \"-\"}</dd>\n </div>\n <div>\n <dt>Due</dt>\n <dd>{formatDateTime(task.dueAt)}</dd>\n </div>\n <div>\n <dt>Priority</dt>\n <dd>\n {task.priority ? (\n <Badge severity={severityForPriority(task.priority)}>{task.priority}</Badge>\n ) : (\n \"-\"\n )}\n </dd>\n </div>\n </dl>\n </DetailSection>\n\n <DetailSection title=\"Description\" open>\n <div className=\"eth-task-detail-panel__description\">\n {task.description ?? description ?? \"No description provided.\"}\n </div>\n </DetailSection>\n\n <DetailSection\n title=\"Dependencies\"\n meta={formatCount(resolvedDependencies.length, \"dependency\", \"dependencies\")}\n open={resolvedDependencies.length > 0}\n >\n <TaskDependencyList dependencies={resolvedDependencies} />\n </DetailSection>\n\n <DetailSection\n title=\"History\"\n meta={formatCount(resolvedEvents.length, \"event\")}\n open={resolvedEvents.length > 0}\n >\n <TaskTimeline events={resolvedEvents} />\n </DetailSection>\n\n {actions?.length ? (\n <DetailSection title=\"Actions\" meta={formatCount(actions.length, \"action\")} open>\n <div className=\"eth-task-detail-panel__actions\">\n <ActionGroup actions={actions} />\n </div>\n </DetailSection>\n ) : null}\n </div>\n </Surface>\n );\n}\n","import * as React from \"react\";\nimport clsx from \"clsx\";\nimport { Badge, EmptyState, type EthSeverity } from \"@echothink-ui/core\";\nimport type { TaskTimelineEvent, TaskTimelineProps } from \"../types\";\nimport { formatDateTime } from \"./utils\";\n\nconst eventKindMeta: Record<TaskTimelineEvent[\"kind\"], { label: string; tone: EthSeverity }> = {\n status_change: { label: \"Status\", tone: \"info\" },\n comment: { label: \"Comment\", tone: \"neutral\" },\n assignment: { label: \"Assignment\", tone: \"info\" },\n attachment: { label: \"Attachment\", tone: \"success\" },\n system: { label: \"System\", tone: \"neutral\" }\n};\n\nfunction timestampMeta(value: string | Date) {\n const date = value instanceof Date ? value : new Date(value);\n if (Number.isNaN(date.valueOf())) {\n const fallback = String(value);\n return { dateTime: fallback, label: fallback };\n }\n\n return {\n dateTime: date.toISOString(),\n label: formatDateTime(date)\n };\n}\n\nexport function TaskTimeline({\n events = [],\n className,\n role,\n \"aria-label\": ariaLabel,\n ...props\n}: TaskTimelineProps) {\n if (!events.length) {\n return (\n <div\n {...props}\n className={clsx(\"eth-task-timeline\", className)}\n data-eth-component=\"TaskTimeline\"\n role={role ?? \"region\"}\n aria-label={ariaLabel ?? \"Task timeline\"}\n >\n <EmptyState\n title=\"No task history\"\n description=\"Task activity and state changes appear here.\"\n />\n </div>\n );\n }\n\n return (\n <div\n {...props}\n className={clsx(\"eth-task-timeline\", className)}\n data-eth-component=\"TaskTimeline\"\n role={role ?? \"region\"}\n aria-label={ariaLabel ?? \"Task timeline\"}\n >\n <ol className=\"eth-task-timeline__list\">\n {events.map((event) => {\n const kind = eventKindMeta[event.kind];\n const time = timestampMeta(event.timestamp);\n\n return (\n <li\n key={event.id}\n className={clsx(\n \"eth-task-timeline__event\",\n `eth-task-timeline__event--${event.kind}`\n )}\n data-kind={event.kind}\n >\n <time className=\"eth-task-timeline__time\" dateTime={time.dateTime}>\n {time.label}\n </time>\n <div className=\"eth-task-timeline__rail\" aria-hidden>\n <span className=\"eth-task-timeline__marker\" />\n </div>\n <article className=\"eth-task-timeline__body\">\n <header className=\"eth-task-timeline__event-header\">\n <Badge severity={kind.tone}>{kind.label}</Badge>\n {event.actor ? (\n <span className=\"eth-task-timeline__actor\">By {event.actor}</span>\n ) : null}\n </header>\n <strong className=\"eth-task-timeline__summary\">{event.summary}</strong>\n {event.details ? (\n <p className=\"eth-task-timeline__details\">{event.details}</p>\n ) : null}\n </article>\n </li>\n );\n })}\n </ol>\n </div>\n );\n}\n","import * as React from \"react\";\nimport clsx from \"clsx\";\nimport {\n Badge,\n Button,\n EmptyState,\n FormField,\n Surface,\n Textarea\n} from \"@echothink-ui/core\";\nimport type { TaskHandoffPanelProps } from \"../types\";\n\ntype TaskHandoffAssigneeKind =\n NonNullable<TaskHandoffPanelProps[\"assigneeOptions\"]>[number][\"kind\"];\n\nexport function TaskHandoffPanel({\n assigneeOptions = [],\n currentAssigneeId,\n onHandoff,\n reasonRequired,\n className,\n title = \"Task handoff\",\n description,\n ...props\n}: TaskHandoffPanelProps) {\n const [selectedId, setSelectedId] = React.useState(\n currentAssigneeId ?? assigneeOptions[0]?.id ?? \"\"\n );\n const [reason, setReason] = React.useState(\"\");\n const targetId = React.useId();\n const reasonId = React.useId();\n const trimmedReason = reason.trim();\n const cannotSubmit = !selectedId || (reasonRequired && !trimmedReason);\n\n const submitHandoff = (event?: React.FormEvent) => {\n event?.preventDefault();\n if (cannotSubmit) return;\n onHandoff?.(selectedId, trimmedReason);\n };\n\n const handleReasonKeyDown = (event: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if ((event.metaKey || event.ctrlKey) && event.key === \"Enter\") {\n event.preventDefault();\n submitHandoff();\n }\n };\n\n return (\n <Surface\n {...props}\n className={clsx(\"eth-task-handoff-panel\", className)}\n title={title}\n description={description}\n data-eth-component=\"TaskHandoffPanel\"\n >\n {assigneeOptions.length ? (\n <form className=\"eth-task-handoff-panel__body\" onSubmit={submitHandoff}>\n <div className=\"eth-task-handoff-panel__target-field\">\n <p id={targetId} className=\"eth-task-handoff-panel__target-heading\">\n Handoff target\n </p>\n <div\n className=\"eth-task-handoff-panel__list\"\n role=\"group\"\n aria-labelledby={targetId}\n >\n {assigneeOptions.map((option) => (\n <button\n key={option.id}\n type=\"button\"\n aria-label={`Hand off to ${option.label} (${formatAssigneeKind(\n option.kind\n )})`}\n aria-pressed={selectedId === option.id}\n className={clsx(\n \"eth-task-handoff-panel__option\",\n selectedId === option.id && \"eth-task-handoff-panel__option--selected\"\n )}\n onClick={() => setSelectedId(option.id)}\n >\n <span className=\"eth-task-handoff-panel__option-copy\">\n <span className=\"eth-task-handoff-panel__option-label\">{option.label}</span>\n </span>\n <span className=\"eth-task-handoff-panel__option-meta\">\n {selectedId === option.id ? <Badge severity=\"info\">Selected</Badge> : null}\n <Badge severity=\"neutral\">{formatAssigneeKind(option.kind)}</Badge>\n </span>\n </button>\n ))}\n </div>\n </div>\n <FormField\n id={reasonId}\n label=\"Handoff reason\"\n required={reasonRequired}\n className=\"eth-task-handoff-panel__reason-field\"\n helperText={reasonRequired ? \"A reason is required for this handoff.\" : undefined}\n >\n <Textarea\n className=\"eth-task-handoff-panel__reason\"\n name=\"handoff-reason\"\n autoComplete=\"off\"\n placeholder=\"Summarize context, blockers, and the next action...\"\n value={reason}\n rows={3}\n onKeyDown={handleReasonKeyDown}\n onChange={(event) => setReason(event.currentTarget.value)}\n />\n </FormField>\n <div className=\"eth-task-handoff-panel__actions\">\n <Button type=\"submit\" disabled={cannotSubmit}>\n Handoff\n </Button>\n </div>\n </form>\n ) : (\n <EmptyState title=\"No assignees available\" />\n )}\n </Surface>\n );\n}\n\nfunction formatAssigneeKind(kind: TaskHandoffAssigneeKind) {\n return kind.charAt(0).toUpperCase() + kind.slice(1);\n}\n","import * as React from \"react\";\nimport clsx from \"clsx\";\nimport type { TaskProgressIndicatorProps } from \"../types\";\nimport { clampProgress, labelForStatus } from \"./utils\";\n\nconst currentStepStatuses = new Set([\"active\", \"in-progress\", \"running\"]);\n\nexport function TaskProgressIndicator({\n value,\n total = 100,\n steps,\n label = \"Task progress\",\n className,\n ...props\n}: TaskProgressIndicatorProps) {\n if (steps?.length) {\n return (\n <div\n {...props}\n className={clsx(\"eth-task-progress eth-task-progress--steps\", className)}\n data-eth-component=\"TaskProgressIndicator\"\n >\n <ol className=\"eth-task-progress__steps\" aria-label={label}>\n {steps.map((step, index) => {\n const statusLabel = labelForStatus(step.status);\n const isCurrentStep = currentStepStatuses.has(step.status);\n\n return (\n <li\n key={step.id}\n className={clsx(\n \"eth-task-progress__step\",\n `eth-task-progress__step--${step.status}`\n )}\n aria-current={isCurrentStep ? \"step\" : undefined}\n data-status={step.status}\n >\n <span className=\"eth-task-progress__step-track\" aria-hidden=\"true\">\n <span className=\"eth-task-progress__circle\" />\n {index < steps.length - 1 ? (\n <span className=\"eth-task-progress__connector\" />\n ) : null}\n </span>\n <span className=\"eth-task-progress__step-copy\">\n <span className=\"eth-task-progress__step-label\">{step.label}</span>\n <span className=\"eth-task-progress__step-status\">{statusLabel}</span>\n </span>\n </li>\n );\n })}\n </ol>\n </div>\n );\n }\n\n const progressValue = clampProgress(value, total);\n return (\n <div\n {...props}\n className={clsx(\"eth-task-progress eth-task-progress--bar\", className)}\n data-eth-component=\"TaskProgressIndicator\"\n >\n <div className=\"eth-task-progress__label\">\n <span>{label}</span>\n <strong>{progressValue}%</strong>\n </div>\n <progress value={progressValue} max={100} aria-label={label} />\n </div>\n );\n}\n","import * as React from \"react\";\nimport clsx from \"clsx\";\nimport { Button, FormField, InlineNotification, Surface, Textarea } from \"@echothink-ui/core\";\nimport { RetryIcon } from \"@echothink-ui/icons\";\nimport type { TaskRetryPanelProps } from \"../types\";\nimport { formatDuration } from \"./utils\";\n\nconst backoffLabels = {\n exponential: \"Exponential\",\n linear: \"Linear\"\n} as const;\n\nexport function TaskRetryPanel({\n taskRef,\n failureSummary,\n retryPolicy,\n attemptCount = 0,\n onRetry,\n className,\n title = \"Retry failed task\",\n description,\n ...props\n}: TaskRetryPanelProps) {\n const [reason, setReason] = React.useState(\"\");\n const reasonId = React.useId();\n const retriesExhausted = retryPolicy ? attemptCount >= retryPolicy.maxRetries : false;\n const attemptLabel = retryPolicy ? `${attemptCount} / ${retryPolicy.maxRetries}` : attemptCount;\n const backoffLabel = retryPolicy ? backoffLabels[retryPolicy.backoff] : \"-\";\n\n return (\n <Surface\n {...props}\n className={clsx(\"eth-task-retry-panel\", className)}\n title={title}\n description={description}\n severity=\"danger\"\n data-eth-component=\"TaskRetryPanel\"\n >\n <InlineNotification severity=\"danger\" title=\"Task failed\">\n {failureSummary ?? \"The task did not complete successfully.\"}\n </InlineNotification>\n <dl className=\"eth-task-retry-panel__policy\" aria-label=\"Retry policy\">\n <div>\n <dt>Task</dt>\n <dd>{taskRef ?? \"-\"}</dd>\n </div>\n <div\n className={clsx(\n \"eth-task-retry-panel__attempts\",\n retriesExhausted && \"eth-task-retry-panel__attempts--exhausted\"\n )}\n >\n <dt>Attempts</dt>\n <dd>\n <span>{attemptLabel}</span>\n {retriesExhausted ? (\n <span className=\"eth-task-retry-panel__policy-note\">\n Automatic retries exhausted\n </span>\n ) : null}\n </dd>\n </div>\n {retryPolicy ? (\n <>\n <div>\n <dt>Backoff</dt>\n <dd>{backoffLabel}</dd>\n </div>\n <div>\n <dt>Interval</dt>\n <dd>{formatDuration(retryPolicy.intervalMs)}</dd>\n </div>\n </>\n ) : null}\n </dl>\n <div className=\"eth-task-retry-panel__controls\">\n <FormField\n id={reasonId}\n label=\"Retry reason\"\n helperText=\"Stored with retry audit metadata.\"\n className=\"eth-task-retry-panel__reason-field\"\n >\n <Textarea\n value={reason}\n rows={3}\n placeholder=\"Summarize what changed before retrying.\"\n onChange={(event) => setReason(event.currentTarget.value)}\n />\n </FormField>\n <div className=\"eth-task-retry-panel__actions\">\n <Button\n icon={<RetryIcon size={16} />}\n intent=\"primary\"\n onClick={() => onRetry?.(reason)}\n >\n Retry task\n </Button>\n <p>Creates a new attempt and records this reason in the task audit trail.</p>\n </div>\n </div>\n </Surface>\n );\n}\n","import * as React from \"react\";\nimport clsx from \"clsx\";\nimport { Badge, Checkbox, EmptyState, IconButton, Surface } from \"@echothink-ui/core\";\nimport { PauseIcon, PlayIcon } from \"@echothink-ui/icons\";\nimport type { TaskRunLogEntry, TaskRunLogProps } from \"../types\";\nimport { formatDateTime } from \"./utils\";\n\nconst logLevels: TaskRunLogEntry[\"level\"][] = [\"error\", \"warn\", \"info\", \"debug\"];\n\nexport function TaskRunLog({\n entries = [],\n streaming,\n onPauseToggle,\n onFilter,\n levelFilter,\n windowSize = 200,\n className,\n title = \"Task run log\",\n description,\n ...props\n}: TaskRunLogProps) {\n const [internalFilter, setInternalFilter] = React.useState<TaskRunLogEntry[\"level\"][]>(logLevels);\n const activeFilter = (levelFilter as TaskRunLogEntry[\"level\"][] | undefined) ?? internalFilter;\n const counts = React.useMemo(\n () =>\n logLevels.reduce(\n (summary, level) => ({\n ...summary,\n [level]: entries.filter((entry) => entry.level === level).length\n }),\n {} as Record<TaskRunLogEntry[\"level\"], number>\n ),\n [entries]\n );\n const visibleEntries = React.useMemo(\n () =>\n entries\n .filter((entry) => activeFilter.includes(entry.level))\n .slice(-windowSize),\n [activeFilter, entries, windowSize]\n );\n\n const toggleLevel = (level: TaskRunLogEntry[\"level\"]) => {\n onFilter?.(level);\n if (!levelFilter) {\n setInternalFilter((current) =>\n current.includes(level)\n ? current.filter((candidate) => candidate !== level)\n : [...current, level]\n );\n }\n };\n const streamLabel = streaming ? \"Streaming\" : \"Paused\";\n\n return (\n <Surface\n {...props}\n className={clsx(\"eth-task-run-log\", className)}\n title={title}\n description={description}\n data-eth-component=\"TaskRunLog\"\n >\n <div className=\"eth-task-run-log__toolbar\" role=\"toolbar\" aria-label=\"Task log controls\">\n <div className=\"eth-task-run-log__stream-state\" aria-live=\"polite\">\n {onPauseToggle ? (\n <IconButton\n label={streaming ? \"Pause log stream\" : \"Resume log stream\"}\n icon={streaming ? <PauseIcon size={16} /> : <PlayIcon size={16} />}\n intent=\"ghost\"\n density=\"compact\"\n onClick={onPauseToggle}\n />\n ) : null}\n <Badge severity={streaming ? \"success\" : \"neutral\"}>{streamLabel}</Badge>\n <span className=\"eth-task-run-log__buffer-count\">\n {visibleEntries.length} of {entries.length} entries\n </span>\n </div>\n <fieldset className=\"eth-task-run-log__filters\">\n <legend>Levels</legend>\n <div className=\"eth-task-run-log__filter-options\">\n {logLevels.map((level) => (\n <Checkbox\n key={level}\n label={level}\n checked={activeFilter.includes(level)}\n onChange={() => toggleLevel(level)}\n />\n ))}\n </div>\n </fieldset>\n </div>\n <dl className=\"eth-task-run-log__summary\" aria-label=\"Task log summary\">\n <div>\n <dt>Buffered</dt>\n <dd>{entries.length}</dd>\n </div>\n <div>\n <dt>Visible</dt>\n <dd>{visibleEntries.length}</dd>\n </div>\n <div>\n <dt>Warnings</dt>\n <dd>{counts.warn}</dd>\n </div>\n <div>\n <dt>Errors</dt>\n <dd>{counts.error}</dd>\n </div>\n </dl>\n {visibleEntries.length ? (\n <div\n className=\"eth-task-run-log__viewport\"\n role=\"log\"\n aria-label=\"Task execution log entries\"\n aria-live={streaming ? \"polite\" : \"off\"}\n aria-relevant=\"additions text\"\n >\n <div className=\"eth-task-run-log__columns\" aria-hidden=\"true\">\n <span>Time</span>\n <span>Level</span>\n <span>Message</span>\n </div>\n {visibleEntries.map((entry) => (\n <div\n key={entry.id}\n className={clsx(\"eth-task-run-log__entry\", `eth-task-run-log__entry--${entry.level}`)}\n >\n <time className=\"eth-task-run-log__time\" dateTime={String(entry.timestamp)}>\n {formatDateTime(entry.timestamp)}\n </time>\n <span\n className={clsx(\n \"eth-task-run-log__level\",\n `eth-task-run-log__level--${entry.level}`\n )}\n >\n {entry.level.toUpperCase()}\n </span>\n <span\n className={clsx(\n \"eth-task-run-log__message\",\n entry.redacted && \"eth-task-run-log__message--redacted\"\n )}\n >\n {entry.redacted ? \"[redacted]\" : entry.message}\n </span>\n </div>\n ))}\n </div>\n ) : (\n <EmptyState title=\"No log entries\" />\n )}\n </Surface>\n );\n}\n","import * as React from \"react\";\nimport clsx from \"clsx\";\nimport {\n ActionGroup,\n Badge,\n EmptyState,\n Select,\n StatusDot,\n type EthOperationalStatus,\n type SelectOption\n} from \"@echothink-ui/core\";\nimport { BulkActionTable, DataTable, type DataColumn } from \"@echothink-ui/data\";\nimport type { Task, TaskPriority, TaskTableProps } from \"../types\";\nimport { TaskStatusBadge } from \"./TaskStatusBadge\";\nimport { formatDateTime, labelForStatus, severityForPriority } from \"./utils\";\n\ntype TaskStatusFilter = EthOperationalStatus | \"all\";\n\nconst statusFilterOrder: EthOperationalStatus[] = [\n \"not-started\",\n \"queued\",\n \"in-progress\",\n \"running\",\n \"approval-required\",\n \"pending-approval\",\n \"blocked\",\n \"failed\",\n \"completed\",\n \"succeeded\",\n \"synced\"\n];\n\nconst priorityLabels: Record<TaskPriority, string> = {\n critical: \"Critical\",\n high: \"High\",\n low: \"Low\",\n medium: \"Medium\"\n};\n\nfunction taskRowsFromItems(items: TaskTableProps[\"items\"]): Task[] {\n return (\n items?.map((item) => ({\n id: item.id,\n title: String(item.label),\n status: item.status ?? \"not-started\"\n })) ?? []\n );\n}\n\nfunction taskTableLabel(title?: React.ReactNode) {\n return typeof title === \"string\" && title.trim() ? `${title} table` : \"Task table\";\n}\n\nfunction priorityCell(priority?: TaskPriority) {\n if (!priority) return <span className=\"eth-task-table__empty-value\">-</span>;\n\n return (\n <Badge\n severity={severityForPriority(priority)}\n className={`eth-task-table__priority eth-task-table__priority--${priority}`}\n >\n {priorityLabels[priority]}\n </Badge>\n );\n}\n\nfunction emptyCell(value?: React.ReactNode) {\n if (value === undefined || value === null || value === \"\") {\n return <span className=\"eth-task-table__empty-value\">-</span>;\n }\n\n return value;\n}\n\nfunction taskStatusOptions(rows: Task[], activeStatus: TaskStatusFilter): SelectOption[] {\n const counts = new Map<EthOperationalStatus, number>();\n for (const task of rows) {\n counts.set(task.status, (counts.get(task.status) ?? 0) + 1);\n }\n\n const activeOperationalStatus = activeStatus === \"all\" ? null : activeStatus;\n const activeStatusWithoutRows = Boolean(\n activeOperationalStatus && !counts.has(activeOperationalStatus)\n );\n const extraStatuses =\n activeOperationalStatus &&\n activeStatusWithoutRows &&\n !statusFilterOrder.includes(activeOperationalStatus)\n ? [activeOperationalStatus]\n : [];\n const sortedStatuses = [\n ...statusFilterOrder.filter(\n (status) =>\n counts.has(status) || (activeStatusWithoutRows && status === activeOperationalStatus)\n ),\n ...Array.from(counts.keys()).filter((status) => !statusFilterOrder.includes(status)),\n ...extraStatuses\n ];\n\n return [\n { value: \"all\", label: `All statuses (${rows.length})` },\n ...sortedStatuses.map((status) => ({\n value: status,\n label: `${labelForStatus(status)} (${counts.get(status) ?? 0})`\n }))\n ];\n}\n\nconst defaultColumns: DataColumn<Task>[] = [\n { key: \"id\", header: \"ID\", width: \"5rem\", sortable: true },\n {\n key: \"title\",\n header: \"Task\",\n width: \"18rem\",\n sortable: true,\n render: (task) => (\n <span className=\"eth-task-table__task\">\n <strong className=\"eth-task-table__task-title\">{task.title}</strong>\n {task.description ? (\n <span className=\"eth-task-table__task-description\">{task.description}</span>\n ) : null}\n </span>\n )\n },\n {\n key: \"status\",\n header: \"Status\",\n width: \"12rem\",\n sortable: true,\n render: (task) => <TaskStatusBadge status={task.status} />\n },\n {\n key: \"priority\",\n header: \"Priority\",\n width: \"8rem\",\n sortable: true,\n render: (task) => priorityCell(task.priority)\n },\n {\n key: \"assignee\",\n header: \"Assignee\",\n width: \"9rem\",\n render: (task) => emptyCell(task.assignee)\n },\n {\n key: \"dueAt\",\n header: \"Due\",\n width: \"13rem\",\n sortable: true,\n render: (task) => (\n <span className={task.dueAt ? \"eth-task-table__date\" : \"eth-task-table__empty-value\"}>\n {formatDateTime(task.dueAt)}\n </span>\n )\n }\n];\n\nexport function TaskTable({\n tasks,\n items,\n density = \"default\",\n selectable,\n selectedRows,\n onSelectionChange,\n rowActions,\n bulkActions,\n columns,\n showFilters,\n statusFilter,\n onStatusFilterChange,\n className,\n title,\n description,\n actions,\n subtitle: _subtitle,\n eyebrow: _eyebrow,\n status: _status,\n severity: _severity,\n loading: _loading,\n empty: _empty,\n error: _error,\n metadata: _metadata,\n footer: _footer,\n \"aria-label\": ariaLabel,\n ...sectionProps\n}: TaskTableProps) {\n const rows = tasks ?? taskRowsFromItems(items);\n const [internalStatusFilter, setInternalStatusFilter] =\n React.useState<TaskStatusFilter>(\"all\");\n const effectiveStatusFilter = statusFilter ?? internalStatusFilter;\n const filterVisible =\n Boolean(showFilters) || statusFilter !== undefined || Boolean(onStatusFilterChange);\n const filteredRows =\n filterVisible && effectiveStatusFilter !== \"all\"\n ? rows.filter((task) => task.status === effectiveStatusFilter)\n : rows;\n const statusOptions = React.useMemo(\n () => taskStatusOptions(rows, effectiveStatusFilter),\n [effectiveStatusFilter, rows]\n );\n const resolvedColumns = columns ?? defaultColumns;\n const label = ariaLabel ?? taskTableLabel(title);\n const emptyTitle = rows.length && filterVisible ? \"No matching tasks\" : (title ?? \"No tasks\");\n const emptyDescription =\n rows.length && filterVisible\n ? \"No tasks match the selected status filter.\"\n : (description ?? \"There are no tasks to display.\");\n const selectEnabled = selectable ?? Boolean(bulkActions?.length);\n const handleStatusFilterChange = (event: React.ChangeEvent<HTMLSelectElement>) => {\n const nextStatus = event.currentTarget.value as TaskStatusFilter;\n if (statusFilter === undefined) setInternalStatusFilter(nextStatus);\n onStatusFilterChange?.(nextStatus);\n };\n\n const table = (\n bulkActions?.length ? (\n <BulkActionTable<Task>\n className={clsx(\"eth-task-table\", className)}\n rows={filteredRows}\n columns={resolvedColumns}\n rowKey=\"id\"\n density={density}\n selectable={selectEnabled}\n selectedRows={selectedRows}\n onSelectionChange={onSelectionChange}\n rowActions={rowActions}\n bulkActions={bulkActions}\n emptyState={<EmptyState title={emptyTitle} description={emptyDescription} />}\n aria-label={label}\n data-eth-component=\"TaskTable\"\n />\n ) : (\n <DataTable<Task>\n className={clsx(\"eth-task-table\", className)}\n rows={filteredRows}\n columns={resolvedColumns}\n rowKey=\"id\"\n density={density}\n selectable={selectable}\n selectedRows={selectedRows}\n onSelectionChange={onSelectionChange}\n rowActions={rowActions}\n emptyState={<EmptyState title={emptyTitle} description={emptyDescription} />}\n aria-label={label}\n data-eth-component=\"TaskTable\"\n />\n )\n );\n const hasHeader = Boolean(title || description || actions?.length);\n\n if (!hasHeader && !filterVisible) return table;\n\n return (\n <section\n {...sectionProps}\n className=\"eth-task-table-shell\"\n aria-label={typeof title === \"string\" ? title : \"Tasks\"}\n >\n {hasHeader ? (\n <header className=\"eth-task-table-shell__header\">\n <div className=\"eth-task-table-shell__heading\">\n {title ? <h2>{title}</h2> : null}\n {description ? <p>{description}</p> : null}\n </div>\n <ActionGroup actions={actions} />\n </header>\n ) : null}\n {filterVisible ? (\n <div className=\"eth-task-table-shell__toolbar\" aria-label=\"Task table filters\">\n <div className=\"eth-task-table-shell__filters\">\n <Select\n className=\"eth-task-table-shell__filter\"\n density=\"compact\"\n labelText=\"Status\"\n options={statusOptions}\n value={effectiveStatusFilter}\n onChange={handleStatusFilterChange}\n />\n </div>\n <span className=\"eth-task-table-shell__summary\">\n {filteredRows.length === rows.length\n ? `${rows.length} ${rows.length === 1 ? \"task\" : \"tasks\"} shown`\n : `${filteredRows.length} of ${rows.length} tasks shown`}\n </span>\n </div>\n ) : null}\n {table}\n </section>\n );\n}\n\nexport function StatusCell({ task }: { task: Task }) {\n return <StatusDot status={task.status} label={labelForStatus(task.status)} />;\n}\n","import * as React from \"react\";\nimport clsx from \"clsx\";\nimport { EmptyState, Surface } from \"@echothink-ui/core\";\nimport type {\n DAGEdgeModel,\n DAGNodeModel,\n PositionedDAGNode,\n TaskWaveDAGProps\n} from \"../types\";\nimport { DAGEdge } from \"./DAGEdge\";\nimport { DAGLegend } from \"./DAGLegend\";\nimport { DAGNode, DAG_NODE_HEIGHT, DAG_NODE_WIDTH } from \"./DAGNode\";\n\nconst rankSpacing = DAG_NODE_WIDTH + 76;\nconst rowSpacing = DAG_NODE_HEIGHT + 48;\nconst originX = DAG_NODE_WIDTH / 2 + 28;\nconst originY = DAG_NODE_HEIGHT / 2 + 48;\nconst framePaddingX = 32;\nconst framePaddingY = 28;\n\ninterface DAGFrame {\n x: number;\n y: number;\n width: number;\n height: number;\n viewBox: string;\n}\n\nfunction layoutNodes(\n nodes: DAGNodeModel[],\n edges: DAGEdgeModel[],\n layout: \"lr\" | \"tb\"\n): PositionedDAGNode[] {\n const ids = new Set(nodes.map((node) => node.id));\n const ranks = new Map(nodes.map((node) => [node.id, 0]));\n const validEdges = edges.filter((edge) => ids.has(edge.from) && ids.has(edge.to));\n\n for (let pass = 0; pass < nodes.length; pass += 1) {\n for (const edge of validEdges) {\n const fromRank = ranks.get(edge.from) ?? 0;\n const toRank = ranks.get(edge.to) ?? 0;\n if (toRank < fromRank + 1) ranks.set(edge.to, fromRank + 1);\n }\n }\n\n const groups = new Map<number, DAGNodeModel[]>();\n for (const node of nodes) {\n const rank = ranks.get(node.id) ?? 0;\n groups.set(rank, [...(groups.get(rank) ?? []), node]);\n }\n\n return nodes.map((node) => {\n if (typeof node.x === \"number\" && typeof node.y === \"number\") {\n return { ...node, x: node.x, y: node.y };\n }\n const rank = ranks.get(node.id) ?? 0;\n const group = groups.get(rank) ?? [];\n const index = group.findIndex((candidate) => candidate.id === node.id);\n const spread = Math.max(0, index) * rowSpacing + originY;\n const ranked = rank * rankSpacing + originX;\n return layout === \"lr\"\n ? { ...node, x: ranked, y: spread }\n : { ...node, x: spread, y: ranked };\n });\n}\n\nfunction frameFor(nodes: PositionedDAGNode[]): DAGFrame {\n if (!nodes.length) {\n return { x: 0, y: 0, width: 640, height: 180, viewBox: \"0 0 640 180\" };\n }\n\n const minX =\n Math.min(...nodes.map((node) => node.x - DAG_NODE_WIDTH / 2)) - framePaddingX;\n const minY =\n Math.min(...nodes.map((node) => node.y - DAG_NODE_HEIGHT / 2)) - framePaddingY;\n const maxX =\n Math.max(...nodes.map((node) => node.x + DAG_NODE_WIDTH / 2)) + framePaddingX;\n const maxY =\n Math.max(...nodes.map((node) => node.y + DAG_NODE_HEIGHT / 2)) + framePaddingY;\n const width = Math.max(360, maxX - minX);\n const height = Math.max(120, maxY - minY);\n\n return { x: minX, y: minY, width, height, viewBox: `${minX} ${minY} ${width} ${height}` };\n}\n\nfunction edgeEndpoints(\n from: PositionedDAGNode,\n to: PositionedDAGNode,\n layout: \"lr\" | \"tb\"\n) {\n if (layout === \"lr\") {\n return {\n from: { x: from.x + DAG_NODE_WIDTH / 2, y: from.y },\n to: { x: to.x - DAG_NODE_WIDTH / 2, y: to.y }\n };\n }\n return {\n from: { x: from.x, y: from.y + DAG_NODE_HEIGHT / 2 },\n to: { x: to.x, y: to.y - DAG_NODE_HEIGHT / 2 }\n };\n}\n\nexport function TaskWaveDAG({\n nodes = [],\n edges = [],\n layout = \"lr\",\n onNodeSelect,\n selectedNodeId,\n className,\n title,\n description,\n ...props\n}: TaskWaveDAGProps) {\n const positionedNodes = React.useMemo(\n () => layoutNodes(nodes, edges, layout),\n [nodes, edges, layout]\n );\n const nodeMap = React.useMemo(\n () => new Map(positionedNodes.map((node) => [node.id, node])),\n [positionedNodes]\n );\n const visibleStatuses = React.useMemo(\n () => Array.from(new Set(positionedNodes.map((node) => node.status))),\n [positionedNodes]\n );\n const graphFrame = React.useMemo(() => frameFor(positionedNodes), [positionedNodes]);\n const graphTitleId = React.useId();\n const graphDescriptionId = React.useId();\n const graphTitle =\n typeof title === \"string\" && title.trim() ? title : \"Task wave dependency graph\";\n const graphDescription = `${positionedNodes.length} nodes and ${edges.length} dependencies. Statuses: ${\n visibleStatuses.map((status) => status.replace(/-/g, \" \")).join(\", \") || \"none\"\n }.`;\n\n return (\n <Surface\n {...props}\n className={clsx(\"eth-task-wave-dag\", className)}\n title={title ?? \"Wave DAG\"}\n description={description}\n data-eth-component=\"TaskWaveDAG\"\n >\n {positionedNodes.length ? (\n <>\n <div className=\"eth-task-wave-dag__viewport\">\n <svg\n className=\"eth-dag\"\n role=\"img\"\n aria-labelledby={graphTitleId}\n aria-describedby={graphDescriptionId}\n viewBox={graphFrame.viewBox}\n >\n <title id={graphTitleId}>{graphTitle}</title>\n <desc id={graphDescriptionId}>{graphDescription}</desc>\n <rect\n className=\"eth-dag__canvas\"\n x={graphFrame.x}\n y={graphFrame.y}\n width={graphFrame.width}\n height={graphFrame.height}\n aria-hidden=\"true\"\n />\n {edges.map((edge, index) => {\n const from = nodeMap.get(edge.from);\n const to = nodeMap.get(edge.to);\n if (!from || !to) return null;\n const endpoints = edgeEndpoints(from, to, layout);\n return (\n <DAGEdge\n key={`${edge.from}-${edge.to}-${index}`}\n from={endpoints.from}\n to={endpoints.to}\n status={edge.status ?? to.status}\n label={edge.label}\n />\n );\n })}\n {positionedNodes.map((node) => (\n <DAGNode\n key={node.id}\n node={node}\n selected={node.id === selectedNodeId}\n onSelect={onNodeSelect}\n />\n ))}\n </svg>\n </div>\n <DAGLegend statuses={visibleStatuses.length ? visibleStatuses : undefined} />\n <ol className=\"eth-task-wave-dag__fallback\">\n {positionedNodes.map((node) => (\n <li key={node.id}>\n {node.label}, {node.status.replace(/-/g, \" \")}\n </li>\n ))}\n </ol>\n </>\n ) : (\n <EmptyState title=\"No DAG nodes\" description=\"Add nodes and edges to render a wave graph.\" />\n )}\n </Surface>\n );\n}\n","import * as React from \"react\";\nimport clsx from \"clsx\";\nimport { Badge, Surface } from \"@echothink-ui/core\";\nimport type { EthOperationalStatus } from \"@echothink-ui/core\";\nimport type { TaskWaveHeaderProps } from \"../types\";\nimport { TaskProgressIndicator } from \"./TaskProgressIndicator\";\nimport {\n formatDateTime,\n labelForStatus,\n severityForStatus,\n waveProgress\n} from \"./utils\";\n\nconst statusOrder: EthOperationalStatus[] = [\n \"queued\",\n \"running\",\n \"in-progress\",\n \"pending-approval\",\n \"approval-required\",\n \"blocked\",\n \"failed\",\n \"completed\",\n \"succeeded\"\n];\n\nexport function TaskWaveHeader({\n wave,\n actions,\n className,\n title,\n description,\n ...props\n}: TaskWaveHeaderProps) {\n const progress = waveProgress(wave);\n\n return (\n <Surface\n {...props}\n className={clsx(\"eth-task-wave-header\", className)}\n title={wave?.label ?? title ?? \"Task wave\"}\n subtitle={wave?.id}\n description={description}\n actions={actions}\n data-eth-component=\"TaskWaveHeader\"\n >\n {wave ? (\n <>\n <div className=\"eth-task-wave-header__summary\">\n <strong>{wave.totalTasks} tasks</strong>\n {wave.startedAt ? <span>Started {formatDateTime(wave.startedAt)}</span> : null}\n {wave.eta ? <span>ETA {formatDateTime(wave.eta)}</span> : null}\n </div>\n <TaskProgressIndicator value={progress} label=\"Wave progress\" />\n <div className=\"eth-task-wave-header__counts\" aria-label=\"Task status counts\">\n {statusOrder\n .filter((status) => wave.statuses[status])\n .map((status) => {\n const label = labelForStatus(status);\n const count = wave.statuses[status] ?? 0;\n\n return (\n <Badge\n key={status}\n severity={severityForStatus(status)}\n className={clsx(\n \"eth-task-wave-header__count\",\n `eth-task-wave-header__count--${status}`\n )}\n aria-label={`${label}: ${count}`}\n >\n {label}: <span className=\"eth-task-wave-header__count-value\">{count}</span>\n </Badge>\n );\n })}\n </div>\n </>\n ) : (\n <TaskProgressIndicator value={0} label=\"Wave progress\" />\n )}\n </Surface>\n );\n}\n","import * as React from \"react\";\nimport clsx from \"clsx\";\nimport { Badge, EmptyState, StatusDot, Surface } from \"@echothink-ui/core\";\nimport { DataTable, type DataColumn } from \"@echothink-ui/data\";\nimport type { Task, TaskWaveTableProps } from \"../types\";\nimport { formatDuration, labelForStatus } from \"./utils\";\n\nfunction taskRowsFromItems(items: TaskWaveTableProps[\"items\"]): Task[] {\n return (\n items?.map((item, index) => ({\n id: item.id,\n title: String(item.label),\n status: item.status ?? \"not-started\",\n order: index + 1\n })) ?? []\n );\n}\n\nfunction dependencyCount(task: Task) {\n if (typeof task.dependencyCount === \"number\") return task.dependencyCount;\n if (task.dependencyIds?.length) return task.dependencyIds.length;\n return task.dependencies?.length ?? 0;\n}\n\nfunction EmptyCell() {\n return <span className=\"eth-task-wave-table__empty\">-</span>;\n}\n\nexport function TaskWaveTable({\n wave,\n tasks,\n items,\n onTaskSelect,\n rowActions,\n className,\n title,\n description,\n ..._surfaceProps\n}: TaskWaveTableProps) {\n const rows = tasks ?? taskRowsFromItems(items);\n const columns = React.useMemo<DataColumn<Task>[]>(\n () => [\n {\n key: \"order\",\n header: \"Order\",\n width: \"4.5rem\",\n render: (task, index) => (\n <span className=\"eth-task-wave-table__order\">{task.order ?? index + 1}</span>\n )\n },\n {\n key: \"title\",\n header: \"Task\",\n width: \"22rem\",\n render: (task) =>\n onTaskSelect ? (\n <button\n className=\"eth-task-wave-table__task-button\"\n type=\"button\"\n onClick={() => onTaskSelect(task)}\n >\n <span className=\"eth-task-wave-table__task-title\">{task.title}</span>\n </button>\n ) : (\n <span className=\"eth-task-wave-table__task-title\">{task.title}</span>\n )\n },\n {\n key: \"status\",\n header: \"Status\",\n width: \"12rem\",\n render: (task) => (\n <StatusDot\n className=\"eth-task-wave-table__status\"\n status={task.status}\n label={labelForStatus(task.status)}\n />\n )\n },\n {\n key: \"assignee\",\n header: \"Assignee\",\n width: \"8rem\",\n render: (task) =>\n task.assignee ? (\n <span className=\"eth-task-wave-table__assignee\">{task.assignee}</span>\n ) : (\n <EmptyCell />\n )\n },\n {\n key: \"dependencies\",\n header: \"Dependencies\",\n width: \"7rem\",\n align: \"center\",\n render: (task) => {\n const count = dependencyCount(task);\n return (\n <Badge\n className=\"eth-task-wave-table__dependency-count\"\n severity={count > 0 ? \"info\" : \"neutral\"}\n >\n {count}\n </Badge>\n );\n }\n },\n {\n key: \"durationMs\",\n header: \"Duration\",\n width: \"7rem\",\n render: (task) => (\n <span\n className={clsx(\n \"eth-task-wave-table__duration\",\n task.durationMs == null && \"eth-task-wave-table__empty\"\n )}\n >\n {formatDuration(task.durationMs)}\n </span>\n )\n }\n ],\n [onTaskSelect]\n );\n\n return (\n <Surface\n className={clsx(\"eth-task-wave-table\", className)}\n title={wave?.label ?? title ?? \"Task wave\"}\n subtitle={wave?.id}\n description={description}\n data-eth-component=\"TaskWaveTable\"\n >\n <DataTable<Task>\n aria-label={\n typeof (wave?.label ?? title) === \"string\"\n ? `${wave?.label ?? title} tasks`\n : \"Wave tasks\"\n }\n className=\"eth-task-wave-table__table\"\n rows={rows}\n columns={columns}\n rowKey=\"id\"\n density=\"compact\"\n rowActions={rowActions}\n emptyState={<EmptyState title=\"No wave tasks\" />}\n />\n </Surface>\n );\n}\n","import * as React from \"react\";\nimport clsx from \"clsx\";\n\nexport interface MobileTaskShellProps {\n title?: React.ReactNode;\n subtitle?: React.ReactNode;\n progress?: React.ReactNode;\n main?: React.ReactNode;\n footer?: React.ReactNode;\n identity?: React.ReactNode;\n children?: React.ReactNode;\n className?: string;\n}\n\nexport function MobileTaskShell({\n title,\n subtitle,\n progress,\n main,\n footer,\n identity,\n children,\n className\n}: MobileTaskShellProps) {\n const content = main ?? children;\n const hasHeader = title || subtitle || progress;\n const hasFooter = footer || identity;\n\n return (\n <section\n className={clsx(\"eth-mobile-task-shell\", className)}\n data-eth-component=\"MobileTaskShell\"\n >\n {hasHeader ? (\n <header className=\"eth-mobile-task-shell__header\">\n <div className=\"eth-mobile-task-shell__title-block\">\n {title ? <h1 className=\"eth-mobile-task-shell__title\">{title}</h1> : null}\n {subtitle ? <p className=\"eth-mobile-task-shell__subtitle\">{subtitle}</p> : null}\n </div>\n {progress ? <div className=\"eth-mobile-task-shell__progress\">{progress}</div> : null}\n </header>\n ) : null}\n <main className=\"eth-mobile-task-shell__main\">{content}</main>\n {hasFooter ? (\n <footer className=\"eth-mobile-task-shell__footer\">\n {footer ? <div className=\"eth-mobile-task-shell__footer-main\">{footer}</div> : null}\n {identity ? <div className=\"eth-mobile-task-shell__identity\">{identity}</div> : null}\n </footer>\n ) : null}\n </section>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,YAAuB;AACvB,kBAAiB;AACjB,IAAAA,eAAkD;;;ACDlD,kBAA4B;AAGrB,SAAS,kBAAkB,QAA2C;AAC3E,MAAI,WAAW,aAAa,WAAW,YAAY,WAAW,cAAe,QAAO;AACpF,MAAI,WAAW,aAAa,WAAW,SAAU,QAAO;AACxD,MAAI,WAAW,sBAAsB,WAAW,uBAAuB,WAAW,WAAW;AAC3F,WAAO;AAAA,EACT;AACA,MAAI,WAAW,eAAe,WAAW,eAAe,WAAW,SAAU,QAAO;AACpF,SAAO;AACT;AAEO,SAAS,oBAAoB,UAAsC;AACxE,MAAI,aAAa,WAAY,QAAO;AACpC,MAAI,aAAa,OAAQ,QAAO;AAChC,MAAI,aAAa,SAAU,QAAO;AAClC,SAAO;AACT;AAEO,SAAS,gBAAgB,WAAoC;AAClE,MAAI,cAAc,cAAc,cAAc,OAAQ,QAAO;AAC7D,MAAI,cAAc,SAAU,QAAO;AACnC,MAAI,cAAc,MAAO,QAAO;AAChC,SAAO;AACT;AAEO,SAAS,eAAe,QAA8B;AAC3D,aAAO,yBAAY,MAAM;AAC3B;AAEO,SAAS,eAAe,OAAuB;AACpD,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,OAAO,iBAAiB,OAAO,QAAQ,IAAI,KAAK,KAAK;AAC3D,MAAI,OAAO,MAAM,KAAK,QAAQ,CAAC,EAAG,QAAO,OAAO,KAAK;AACrD,SAAO,IAAI,KAAK,eAAe,QAAW;AAAA,IACxC,WAAW;AAAA,IACX,WAAW;AAAA,EACb,CAAC,EAAE,OAAO,IAAI;AAChB;AAwBO,SAAS,eAAe,YAAqB;AAClD,MAAI,cAAc,KAAM,QAAO;AAC/B,MAAI,aAAa,IAAM,QAAO,GAAG,UAAU;AAC3C,QAAM,UAAU,KAAK,MAAM,aAAa,GAAI;AAC5C,MAAI,UAAU,GAAI,QAAO,GAAG,OAAO;AACnC,QAAM,UAAU,KAAK,MAAM,UAAU,EAAE;AACvC,QAAM,YAAY,UAAU;AAC5B,MAAI,UAAU,GAAI,QAAO,YAAY,GAAG,OAAO,KAAK,SAAS,MAAM,GAAG,OAAO;AAC7E,QAAM,QAAQ,KAAK,MAAM,UAAU,EAAE;AACrC,QAAM,kBAAkB,UAAU;AAClC,SAAO,kBAAkB,GAAG,KAAK,KAAK,eAAe,MAAM,GAAG,KAAK;AACrE;AAEO,SAAS,cAAc,OAAgB,QAAQ,KAAK;AACzD,MAAI,SAAS,QAAQ,OAAO,MAAM,KAAK,EAAG,QAAO;AACjD,MAAI,SAAS,EAAG,QAAO;AACvB,QAAM,UAAU,UAAU,MAAM,QAAS,QAAQ,QAAS;AAC1D,SAAO,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,MAAM,OAAO,CAAC,CAAC;AACvD;AAEO,SAAS,aAAa,MAAiB;AAC5C,MAAI,CAAC,MAAM,WAAY,QAAO;AAC9B,QAAM,aAAa,KAAK,SAAS,aAAa,MAAM,KAAK,SAAS,aAAa;AAC/E,SAAO,cAAc,WAAW,KAAK,UAAU;AACjD;AAEO,SAAS,YAAY,QAA+B;AACzD,UAAQ,QAAQ;AAAA,IACd,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;;;ADpEM;AArCN,IAAM,qBAAqB,oBAAI,IAAmC,CAAC,WAAW,aAAa,CAAC;AAE5F,SAAS,aAAa,OAAqD;AACzE,SAAO,MAAM,QAAQ,CAAC,SAAS,CAAC,MAAM,GAAG,aAAa,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC;AAC7E;AAEA,SAAS,uBAAuB,OAA8B;AAC5D,QAAM,YAAY,aAAa,KAAK;AAEpC,WAAS,QAAQ,UAAU,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG;AAC7D,QAAI,mBAAmB,IAAI,UAAU,KAAK,EAAE,MAAM,GAAG;AACnD,aAAO,UAAU,KAAK,EAAE;AAAA,IAC1B;AAAA,EACF;AAEA,SAAO,UAAU,GAAG,EAAE,GAAG;AAC3B;AAEA,SAAS,iBAAiB;AAAA,EACxB;AAAA,EACA;AACF,GAGG;AACD,QAAM,cAAc,oBAAoB,KAAK;AAC7C,QAAM,cAAc,QAAQ,KAAK,UAAU,MAAM;AACjD,QAAM,CAAC,UAAU,WAAW,IAAU,eAAS,IAAI;AAEnD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAW,YAAAC;AAAA,QACT;AAAA,QACA,kCAAkC,KAAK,MAAM;AAAA,QAC7C,KAAK,YAAY;AAAA,MACnB;AAAA,MAEA;AAAA,oDAAC,UAAK,WAAU,mCAAkC,eAAY,QAAO;AAAA,QACrE;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,MAAM;AAAA,YACN,UAAU,CAAC,UAAU;AACnB,0BAAY,MAAM,cAAc,IAAI;AAAA,YACtC;AAAA,YAEA;AAAA,2DAAC,aAAQ,WAAU,wCACjB;AAAA,4DAAC,UAAK,WAAU,4CAA2C,eAAY,QAAO;AAAA,gBAC9E,6CAAC,UAAK,WAAU,8CACd;AAAA,+DAAC,UAAK,WAAU,yCACd;AAAA,gEAAC,YAAO,WAAU,uCACf,eAAK,WAAW,oBAAoB,KAAK,OAC5C;AAAA,oBACC,cACC,6CAAC,UAAK,WAAU,yCACb;AAAA,2BAAK,UAAU;AAAA,sBAAO;AAAA,sBAAE,KAAK,UAAU,WAAW,IAAI,YAAY;AAAA,uBACrE,IACE;AAAA,oBACH,cACC,6CAAC,UAAK,WAAU,sCAAqC,cAAW,oBAC9D;AAAA,kEAAC,UAAK,WAAU,kCAAiC,eAAY,QAAO;AAAA,sBAAE;AAAA,uBAExE,IACE;AAAA,qBACN;AAAA,kBACA,6CAAC,UAAK,WAAU,sCACb;AAAA,yBAAK,WAAW,4CAAC,sBAAM,UAAS,WAAU,sBAAQ,IAAW;AAAA,oBAC9D,4CAAC,0BAAU,QAAQ,KAAK,QAAQ,OAAO,eAAe,KAAK,MAAM,GAAG;AAAA,oBACnE,KAAK,WAAW,4CAAC,oBAAK,eAAK,UAAS,IAAS;AAAA,oBAC7C,KAAK,cAAc,OAClB,4CAAC,UAAK,WAAU,qCACb,yBAAe,KAAK,UAAU,GACjC,IACE;AAAA,qBACN;AAAA,mBACF;AAAA,iBACF;AAAA,cACC,KAAK,WACJ,4CAAC,OAAE,WAAU,qCAAoC,2CAA6B,IAC5E,KAAK,UACP,4CAAC,OAAE,WAAU,oCAAoC,eAAK,SAAQ,IAC5D;AAAA,cACH,cACC,4CAAC,QAAG,WAAU,qCACX,eAAK,UAAU,IAAI,CAAC,UACnB,4CAAC,oBAAgC,MAAM,OAAO,mBAAvB,MAAM,EAAmD,CACjF,GACH,IACE;AAAA;AAAA;AAAA,QACN;AAAA;AAAA;AAAA,EACF;AAEJ;AAEO,SAAS,qBAAqB;AAAA,EACnC,QAAQ,CAAC;AAAA,EACT;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA8B;AAC5B,QAAM,kBAAwB;AAAA,IAC5B,MAAO,YAAY,uBAAuB,KAAK,IAAI;AAAA,IACnD,CAAC,OAAO,SAAS;AAAA,EACnB;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,eAAW,YAAAA,SAAK,2BAA2B,SAAS;AAAA,MACpD,aAAW,YAAY,WAAW;AAAA,MAClC,sBAAmB;AAAA,MAElB,gBAAM,SACL,4CAAC,QAAG,WAAU,iCACX,gBAAM,IAAI,CAAC,SACV,4CAAC,oBAA+B,MAAY,mBAArB,KAAK,EAAkD,CAC/E,GACH,IAEA,4CAAC,2BAAW,OAAM,oBAAmB;AAAA;AAAA,EAEzC;AAEJ;;;AE/HA,IAAAC,eAAiB;AACjB,IAAAC,eAAwD;AAuCtC,IAAAC,sBAAA;AApCX,SAAS,oBAAoB;AAAA,EAClC,WAAW,CAAC;AAAA,EACZ;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA6B;AAC3B,QAAM,cAAc,SAAS,SAAS;AAEtC,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,eAAW,aAAAC,SAAK,kCAAkC,SAAS;AAAA,MAC3D;AAAA,MACA;AAAA,MACA,QAAQ,WAAW,cAAc,YAAY;AAAA,MAC7C,UAAU,aAAa,cAAc,WAAW;AAAA,MAChD,sBAAmB;AAAA,MAElB,wBACC,6CAAC,QAAG,WAAU,wCAAuC,cAAW,2BAC7D,mBAAS,IAAI,CAAC,YAAY;AACzB,cAAM,iBAAiB,QAAQ,gBAC3B;AAAA,UACE;AAAA,YACE,GAAG,QAAQ;AAAA,YACX,QAAQ,QAAQ,cAAc,UAAU;AAAA,UAC1C;AAAA,QACF,IACA;AAEJ,eACE,8CAAC,QAAoB,WAAU,wCAC7B;AAAA,wDAAC,SAAI,WAAU,2CACb;AAAA,yDAAC,YAAO,WAAU,0CACf,kBAAQ,QACX;AAAA,YACA,8CAAC,SAAI,WAAU,wCACb;AAAA,2DAAC,sBAAM,UAAS,UAAS,qBAAO;AAAA,cAC/B,QAAQ,aAAa,8CAAC,UAAK;AAAA;AAAA,gBAAQ,QAAQ;AAAA,iBAAW,IAAU;AAAA,eACnE;AAAA,aACF;AAAA,UACC,iBACC,6CAAC,SAAI,WAAU,2CACb,uDAAC,4BAAY,SAAS,gBAAgB,GACxC,IACE;AAAA,aAdG,QAAQ,EAejB;AAAA,MAEJ,CAAC,GACH,IAEA;AAAA,QAAC;AAAA;AAAA,UACC,OAAM;AAAA,UACN,aAAY;AAAA;AAAA,MACd;AAAA;AAAA,EAEJ;AAEJ;;;AClEA,IAAAC,SAAuB;AACvB,IAAAC,eAAiB;AA0DP,IAAAC,sBAAA;AAtDV,SAAS,kBAAkB,IAAY;AACrC,SAAO,iBAAiB,GAAG,QAAQ,mBAAmB,EAAE,CAAC;AAC3D;AAEO,SAAS,QAAQ;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,GAAG;AACL,GAAiB;AACf,QAAM,UAAgB,aAAM;AAC5B,QAAM,WAAW,kBAAkB,OAAO;AAC1C,QAAM,aAAa,KAAK,IAAI,GAAG,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,GAAG,IAAI,KAAK,CAAC;AACpE,QAAM,WAAW,aACb,EAAE,IAAI,KAAK,IAAI,GAAG,KAAK,GAAG,GAAG,KAAK,EAAE,IACpC,EAAE,GAAG,KAAK,GAAG,IAAI,KAAK,IAAI,GAAG,KAAK,EAAE;AACxC,QAAM,WAAW,aACb,EAAE,IAAI,KAAK,IAAI,GAAG,KAAK,GAAG,GAAG,GAAG,EAAE,IAClC,EAAE,GAAG,GAAG,GAAG,IAAI,KAAK,IAAI,GAAG,KAAK,EAAE;AACtC,QAAM,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,SAAS,CAAC,IAAI,SAAS,CAAC,KAAK,SAAS,CAAC,IAAI,SAAS,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC;AAC3G,QAAM,QAAQ,YAAY,MAAM;AAChC,QAAM,WAAW,EAAE,IAAI,KAAK,IAAI,GAAG,KAAK,GAAG,IAAI,KAAK,IAAI,GAAG,KAAK,EAAE;AAClE,QAAM,YAAY,OAAO,KAAK;AAC9B,QAAM,aAAa,YAAY,KAAK,IAAI,IAAI,UAAU,SAAS,IAAI,EAAE,IAAI;AACzE,QAAM,gBAAgB,aAClB,EAAE,GAAG,SAAS,GAAG,GAAG,SAAS,IAAI,GAAG,IACpC,EAAE,GAAG,SAAS,IAAI,IAAI,GAAG,SAAS,EAAE;AACxC,QAAM,aAAa,SAAS,eAAe,MAAM,IAAI;AACrD,QAAM,kBACJ,OAAO,cAAc,YAAY,UAAU,KAAK,IAC5C,YACA,YACE,GAAG,SAAS,qBAAqB,UAAU,KAC3C,oBAAoB,UAAU;AAEtC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAW,aAAAC,SAAK,gBAAgB,UAAU,iBAAiB,MAAM,IAAI,SAAS;AAAA,MAC9E,MAAK;AAAA,MACL,cAAY;AAAA,MAEZ;AAAA,qDAAC,UACC;AAAA,UAAC;AAAA;AAAA,YACC,IAAI;AAAA,YACJ,aAAY;AAAA,YACZ,cAAa;AAAA,YACb,MAAK;AAAA,YACL,MAAK;AAAA,YACL,QAAO;AAAA,YACP,aAAY;AAAA,YAEZ,uDAAC,UAAK,GAAE,oBAAmB,MAAM,OAAO;AAAA;AAAA,QAC1C,GACF;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACE,GAAG;AAAA,YACJ;AAAA,YACA,MAAK;AAAA,YACL,QAAQ;AAAA,YACR,eAAc;AAAA,YACd,gBAAe;AAAA,YACf,aAAa;AAAA,YACb,WAAW,QAAQ,QAAQ;AAAA,YAC3B,cAAa;AAAA,YACb,eAAY;AAAA,YACZ,sBAAmB;AAAA;AAAA,QACrB;AAAA,QACC,YACC,8CAAC,OAAE,WAAU,uBAAsB,eAAY,QAC7C;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,GAAG,cAAc,IAAI,aAAa;AAAA,cAClC,GAAG,cAAc,IAAI;AAAA,cACrB,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,IAAI;AAAA;AAAA,UACN;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,GAAG,cAAc;AAAA,cACjB,GAAG,cAAc;AAAA,cACjB,YAAW;AAAA,cACX,kBAAiB;AAAA,cAEhB;AAAA;AAAA,UACH;AAAA,WACF,IACE;AAAA;AAAA;AAAA,EACN;AAEJ;;;AC/FA,IAAAC,eAAiB;AA+CP,IAAAC,sBAAA;AA1CV,IAAM,kBAA0C;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,mBAAwC;AAAA,EAC5C,EAAE,IAAI,cAAc,OAAO,cAAc,SAAS,aAAa;AAAA,EAC/D,EAAE,IAAI,iBAAiB,OAAO,iBAAiB,QAAQ,WAAW,SAAS,WAAW;AAAA,EACtF;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,SAAS;AAAA,EACX;AACF;AAEA,SAAS,cAAc,OAAe;AACpC,SAAO,EAAE,0BAA0B,MAAM;AAC3C;AAEO,SAAS,UAAU;AAAA,EACxB,WAAW;AAAA,EACX,YAAY;AAAA,EACZ;AAAA,EACA,cAAc;AAAA,EACd,GAAG;AACL,GAAmB;AACjB,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,eAAW,aAAAC,SAAK,kBAAkB,SAAS;AAAA,MAC3C,sBAAmB;AAAA,MACnB,MAAK;AAAA,MACL,cAAY,aAAa;AAAA,MAExB;AAAA,iBAAS,SACR,8CAAC,SAAI,WAAU,yBACb;AAAA,uDAAC,UAAK,WAAU,2BAA0B,yBAAW;AAAA,UACrD,6CAAC,QAAG,WAAU,wBAAuB,cAAW,0BAC7C,mBAAS,IAAI,CAAC,WACb,8CAAC,QAAgB,WAAU,wBACzB;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,eAAW,aAAAA,SAAK,0BAA0B,2BAA2B,MAAM,EAAE;AAAA,gBAC7E,OAAO,cAAc,YAAY,MAAM,CAAC;AAAA,gBACxC,eAAY;AAAA;AAAA,YACd;AAAA,YACA,6CAAC,UAAK,WAAU,yBAAyB,yBAAe,MAAM,GAAE;AAAA,eANzD,MAOT,CACD,GACH;AAAA,WACF,IACE;AAAA,QACH,UAAU,SACT,8CAAC,SAAI,WAAU,sDACb;AAAA,uDAAC,UAAK,WAAU,2BAA0B,uBAAS;AAAA,UACnD,6CAAC,QAAG,WAAU,wBAAuB,cAAW,wBAC7C,oBAAU,IAAI,CAAC,aACd,8CAAC,QAAqB,WAAU,wBAC9B;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,eAAW,aAAAA;AAAA,kBACT;AAAA,kBACA,yBAAyB,SAAS,WAAW,YAAY;AAAA,gBAC3D;AAAA,gBACA,OAAO,cAAc,YAAY,SAAS,MAAM,CAAC;AAAA,gBACjD,eAAY;AAAA;AAAA,YACd;AAAA,YACA,6CAAC,UAAK,WAAU,yBAAyB,mBAAS,OAAM;AAAA,eATjD,SAAS,EAUlB,CACD,GACH;AAAA,WACF,IACE;AAAA;AAAA;AAAA,EACN;AAEJ;;;ACpFA,IAAAC,eAAiB;AAmBb,IAAAC,sBAAA;AAfJ,IAAM,YAAY;AAClB,IAAM,aAAa;AAEnB,SAAS,cAAc,OAAe;AACpC,SAAO,MAAM,SAAS,KAAK,GAAG,MAAM,MAAM,GAAG,EAAE,CAAC,QAAQ;AAC1D;AAEO,SAAS,QAAQ,EAAE,MAAM,UAAU,UAAU,WAAW,GAAG,MAAM,GAAiB;AACvF,QAAMC,eAAc,eAAe,KAAK,MAAM;AAC9C,QAAM,IAAI,KAAK,IAAI,YAAY;AAC/B,QAAM,IAAI,KAAK,IAAI,aAAa;AAChC,QAAM,eAAe,MAAM,WAAW,IAAI;AAC1C,QAAM,cAAc,QAAQ,QAAQ;AAEpC,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,eAAW,aAAAC;AAAA,QACT;AAAA,QACA,iBAAiB,KAAK,MAAM;AAAA,QAC5B,eAAe;AAAA,QACf,YAAY;AAAA,QACZ;AAAA,MACF;AAAA,MACA,MAAM,cAAc,WAAW;AAAA,MAC/B,UAAU,cAAc,IAAI;AAAA,MAC5B,cAAY,GAAG,KAAK,KAAK,KAAKD,YAAW;AAAA,MACzC,gBAAc,cAAc,QAAQ,QAAQ,IAAI;AAAA,MAChD,SAAS,cAAc,eAAe;AAAA,MACtC,WACE,cACI,CAAC,UAAU;AACT,YAAI,MAAM,QAAQ,WAAW,MAAM,QAAQ,KAAK;AAC9C,gBAAM,eAAe;AACrB,uBAAa;AAAA,QACf;AAAA,MACF,IACA;AAAA,MAEN,sBAAmB;AAAA,MAEnB;AAAA,qDAAC,WAAO,aAAG,KAAK,KAAK,MAAMA,YAAW,IAAG;AAAA,QACzC;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,GAAG,IAAI;AAAA,YACP,GAAG,IAAI;AAAA,YACP,OAAO,YAAY;AAAA,YACnB,QAAQ,aAAa;AAAA,YACrB,IAAI;AAAA;AAAA,QACN;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV;AAAA,YACA;AAAA,YACA,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,IAAI;AAAA,YACJ,MAAK;AAAA;AAAA,QACP;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV;AAAA,YACA;AAAA,YACA,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,MAAM,YAAY,KAAK,MAAM;AAAA;AAAA,QAC/B;AAAA,QACA,6CAAC,YAAO,WAAU,sBAAqB,IAAI,GAAG,IAAI,KAAK,GAAG,GAAG,GAAG;AAAA,QAChE,6CAAC,YAAO,WAAU,sBAAqB,IAAI,IAAI,WAAW,IAAI,KAAK,GAAG,GAAG,GAAG;AAAA,QAC5E;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,IAAI,IAAI;AAAA,YACR,IAAI,IAAI;AAAA,YACR,GAAG;AAAA,YACH,MAAM,YAAY,KAAK,MAAM;AAAA;AAAA,QAC/B;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,GAAG,IAAI;AAAA,YACP,GAAG,IAAI;AAAA,YACP,YAAW;AAAA,YACX,WAAU;AAAA,YAET,wBAAc,KAAK,KAAK;AAAA;AAAA,QAC3B;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,GAAG,IAAI;AAAA,YACP,GAAG,IAAI;AAAA,YACP,YAAW;AAAA,YACX,WAAU;AAAA,YAET,UAAAA;AAAA;AAAA,QACH;AAAA;AAAA;AAAA,EACF;AAEJ;AAEO,IAAM,iBAAiB;AACvB,IAAM,kBAAkB;;;ACtG/B,IAAAE,SAAuB;AACvB,IAAAC,eAAiB;AACjB,IAAAC,eAAiE;AAuEpD,IAAAC,sBAAA;AA/Db,SAAS,mBAAmB,SAAyC;AACnE,SACE,SAAS,IAAI,CAAC,YAAY;AAAA,IACxB,IAAI,OAAO;AAAA,IACX,OAAO,OAAO;AAAA,IACd,QAAQ,OAAO;AAAA,IACf;AAAA,EACF,EAAE,KAAK,CAAC;AAEZ;AAEA,SAAS,UAAU,WAAoD;AACrE,MAAI,CAAC,UAAW,QAAO;AACvB,SAAO,GAAG,UAAU,OAAO,CAAC,EAAE,YAAY,CAAC,GAAG,UAAU,MAAM,CAAC,CAAC;AAClE;AAEA,SAAS,aAAa,QAAwB;AAC5C,SAAO,OAAO,UAAU;AAC1B;AAEO,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW,CAAC;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA+B;AAC7B,QAAM,UAAgB,aAAM;AAC5B,QAAM,aAAmB,aAAM;AAC/B,QAAM,YAAkB,aAAM;AAC9B,QAAM,kBACJ,SAAS,IAAI,CAAC,YAAY,EAAE,GAAG,OAAO,EAAE,MACvC,SAAS,SACN,mBAAmB,OAAO,IAC1B,OAAO,SACL,MAAM,IAAI,CAAC,UAAU;AAAA,IACnB,IAAI,KAAK;AAAA,IACT,OAAO,OAAO,KAAK,KAAK;AAAA,IACxB,aAAa,KAAK,cAAc,OAAO,KAAK,WAAW,IAAI;AAAA,IAC3D,QAAQ,KAAK,WAAW,WAAW,YAAY;AAAA,EACjD,EAAE,IACF,CAAC;AACT,QAAM,eAAe,YAAY,gBAAgB,SAAS,IAAK,YAAY;AAE3E,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,MAAK;AAAA,MACL,mBAAiB;AAAA,MACjB,eAAW,aAAAC;AAAA,QACT;AAAA,QACA,aAAa,4BAA4B,SAAS;AAAA,QAClD;AAAA,MACF;AAAA,MACA,OAAO,6CAAC,UAAK,IAAI,SAAU,iBAAM;AAAA,MACjC,UAAU,iBAAiB,YAAY,WAAW;AAAA,MAClD,QAAQ,UAAU;AAAA,MAClB,sBAAmB;AAAA,MAEnB;AAAA,qDAAC,mCAAmB,UAAU,cAAc,OAAO,UAAU,SAAS,GACnE,uBACH;AAAA,QACC,UACC,8CAAC,aAAQ,WAAU,oCAAmC,cAAW,oBAC/D;AAAA,uDAAC,SAAI,WAAU,0CAAyC,8BAAgB;AAAA,UACxE,6CAAC,SAAI,WAAU,yCAAyC,mBAAQ;AAAA,WAClE,IACE;AAAA,QAEH,SAAS,SACR,8CAAC,aAAQ,WAAU,qCAAoC,mBAAiB,YACtE;AAAA,wDAAC,SAAI,WAAU,2CACb;AAAA,yDAAC,QAAG,IAAI,YAAY,sBAAQ;AAAA,YAC5B,8CAAC,UACE;AAAA,uBAAS;AAAA,cAAO;AAAA,cAAQ,SAAS,WAAW,IAAI,KAAK;AAAA,eACxD;AAAA,aACF;AAAA,UACA,6CAAC,QACE,mBAAS,IAAI,CAAC,SACb,8CAAC,QACC;AAAA,yDAAC,SAAI,WAAU,2CACZ,eAAK,OACJ,6CAAC,OAAE,WAAU,0CAAyC,MAAM,KAAK,MAC9D,eAAK,OACR,IAEA,6CAAC,YAAQ,eAAK,OAAM,GAExB;AAAA,YACC,KAAK,UACJ,6CAAC,SAAI,WAAU,6CAA6C,eAAK,SAAQ,IACvE;AAAA,eAZG,KAAK,EAad,CACD,GACH;AAAA,WACF,IACE;AAAA,QAEH,gBAAgB,SACf;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,MAAK;AAAA,YACL,mBAAiB;AAAA,YAEjB;AAAA,4DAAC,SAAI,WAAU,2CACb;AAAA,6DAAC,QAAG,IAAI,WAAW,8BAAgB;AAAA,gBACnC,8CAAC,UAAM;AAAA,kCAAgB;AAAA,kBAAO;AAAA,mBAAU;AAAA,iBAC1C;AAAA,cACC,gBAAgB,IAAI,CAAC,WACpB;AAAA,gBAAC;AAAA;AAAA,kBAEC,MAAK;AAAA,kBACL,eAAW,aAAAA;AAAA,oBACT;AAAA,oBACA,oCAAoC,aAAa,MAAM,CAAC;AAAA,kBAC1D;AAAA,kBACA,UAAU,OAAO,QAAQ;AAAA,kBACzB,gBAAc,oBAAoB,OAAO;AAAA,kBACzC,SAAS,MAAM;AACb,2BAAO,QAAQ,WAAW;AAC1B,+BAAW,OAAO,EAAE;AAAA,kBACtB;AAAA,kBAEA;AAAA,kEAAC,UAAK,WAAU,wCACd;AAAA,mEAAC,UAAK,WAAU,yCAAyC,iBAAO,OAAM;AAAA,sBACrE,OAAO,cACN,6CAAC,UAAK,WAAU,+CACb,iBAAO,aACV,IACE;AAAA,uBACN;AAAA,oBACA,6CAAC,UAAK,WAAU,yCACb,8BAAoB,OAAO,KAAK,aAAa,UAChD;AAAA;AAAA;AAAA,gBAvBK,OAAO;AAAA,cAwBd,CACD;AAAA;AAAA;AAAA,QACH,IACE;AAAA,QAEH,kBACC,6CAAC,SAAI,WAAU,qCACb,wDAAC,oBAAI;AAAA;AAAA,UAAU;AAAA,WAAgB,GACjC,IACE;AAAA;AAAA;AAAA,EACN;AAEJ;;;ACrKA,IAAAC,SAAuB;AACvB,IAAAC,eAAiB;AACjB,IAAAC,eAAgE;AAuC3C,IAAAC,sBAAA;AAnCrB,SAAS,gBAAgB,SAA8D;AACrF,MAAI,YAAY,OAAQ,QAAO;AAC/B,MAAI,YAAY,SAAU,QAAO;AACjC,SAAO;AACT;AAEA,SAAS,aAAa,SAAiD;AACrE,MAAI,YAAY,OAAQ,QAAO;AAC/B,MAAI,YAAY,SAAU,QAAO;AACjC,SAAO;AACT;AAEO,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA,QAAQ;AAAA,EACR,SAAS;AAAA,EACT;AAAA,EACA,OAAO;AAAA,EACP,mBAAmB;AAAA,EACnB,GAAG;AACL,GAAgC;AAC9B,QAAM,UAAgB,aAAM;AAC5B,QAAM,gBAAgB,YAAY,gBAAgB,OAAO;AACzD,QAAM,aAAa,mBAAmB,QAAQ,UAAU;AAExD,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ;AAAA,MACA,mBAAiB;AAAA,MACjB,eAAW,aAAAC,SAAK,qCAAqC,SAAS;AAAA,MAC9D,OAAO,QAAQ,6CAAC,UAAK,IAAI,SAAU,iBAAM,IAAU;AAAA,MACnD;AAAA,MACA,UAAU;AAAA,MACV,sBAAmB;AAAA,MAEnB;AAAA,qDAAC,mCAAmB,UAAU,eAAe,OAAM,0BAChD,oBAAU,8EACb;AAAA,QAEA,8CAAC,QAAG,WAAU,8CAA6C,cAAW,wBACnE;AAAA,yBACC,8CAAC,SACC;AAAA,yDAAC,QAAG,2BAAa;AAAA,YACjB,8CAAC,QACC;AAAA,2DAAC,UAAK,WAAU,iDACb,uBAAa,OAChB;AAAA,cACA,6CAAC,UAAK,WAAU,8CAA8C,uBAAa,IAAG;AAAA,eAChF;AAAA,aACF,IACE;AAAA,UACJ,8CAAC,SACC;AAAA,yDAAC,QAAG,qBAAO;AAAA,YACX,6CAAC,QACC,uDAAC,sBAAM,UAAU,eAAgB,uBAAa,OAAO,GAAE,GACzD;AAAA,aACF;AAAA,WACF;AAAA,QAEC,SAAS,SACR;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,MAAK;AAAA,YACL,cAAW;AAAA,YAEX,uDAAC,4BAAY,SAAkB;AAAA;AAAA,QACjC,IACE;AAAA;AAAA;AAAA,EACN;AAEJ;;;ACjFA,IAAAC,SAAuB;AACvB,IAAAC,eAAgE;AAyEzC,IAAAC,sBAAA;AArEvB,SAAS,YACP,SACA,SACA,WACA,WAA+B,CAAC,GACZ;AACpB,QAAM,OAA2B,CAAC;AAClC,MAAI,QAAS,MAAK,KAAK,EAAE,IAAI,YAAY,OAAO,kBAAkB,SAAS,QAAQ,CAAC;AACpF,MAAI,QAAS,MAAK,KAAK,EAAE,IAAI,YAAY,OAAO,kBAAkB,SAAS,QAAQ,CAAC;AACpF,MAAI,UAAW,MAAK,KAAK,EAAE,IAAI,cAAc,OAAO,oBAAoB,SAAS,UAAU,CAAC;AAC5F,SAAO,CAAC,GAAG,MAAM,GAAG,QAAQ;AAC9B;AAEA,SAAS,kBAAkB,OAAqD;AAC9E,MAAI,UAAU,YAAY;AACxB,WAAO;AAAA,MACL,UAAU;AAAA,MACV,OAAO;AAAA,MACP,aAAa;AAAA,IACf;AAAA,EACF;AAEA,MAAI,UAAU,YAAY;AACxB,WAAO;AAAA,MACL,UAAU;AAAA,MACV,OAAO;AAAA,MACP,aAAa;AAAA,IACf;AAAA,EACF;AAEA,MAAI,UAAU,WAAW;AACvB,WAAO;AAAA,MACL,UAAU;AAAA,MACV,OAAO;AAAA,MACP,aAAa;AAAA,IACf;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA2B;AACzB,QAAM,CAAC,QAAQ,SAAS,IAAU,gBAAS,EAAE;AAC7C,QAAM,WAAiB,aAAM;AAC7B,QAAM,eAAe,kBAAkB,KAAK;AAC5C,QAAM,SAAS,aAAa;AAC5B,QAAM,YAAY,UAAU;AAE5B,SACE,6CAAC,aAAQ,WAAU,2BAA0B,sBAAmB,qBAC9D;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ;AAAA,MACA,SACE,8CAAC,SAAI,WAAU,iCACZ;AAAA,kBAAU,6CAAC,SAAI,WAAU,oCAAoC,mBAAQ,IAAS;AAAA,QAC9E,eACC;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,UAAU,aAAa;AAAA,YACvB,OAAO,aAAa;AAAA,YAEnB,uBAAa;AAAA;AAAA,QAChB,IACE;AAAA,QACJ;AAAA,UAAC;AAAA;AAAA,YACC,IAAI;AAAA,YACJ,OAAM;AAAA,YACN,YAAW;AAAA,YACX,WAAU;AAAA,YAEV;AAAA,cAAC;AAAA;AAAA,gBACC,OAAO;AAAA,gBACP,MAAM;AAAA,gBACN,aAAY;AAAA,gBACZ,UAAU,CAAC,UAAU,UAAU,MAAM,cAAc,KAAK;AAAA;AAAA,YAC1D;AAAA;AAAA,QACF;AAAA,QACA,8CAAC,QAAG,WAAU,kCACZ;AAAA,wDAAC,SACC;AAAA,yDAAC,QAAG,kBAAI;AAAA,YACR,6CAAC,QAAI,qBAAW,KAAI;AAAA,aACtB;AAAA,UACC,UACC,8CAAC,SACC;AAAA,yDAAC,QAAG,kBAAI;AAAA,YACR,6CAAC,QAAI,mBAAQ;AAAA,aACf,IACE;AAAA,UACJ,8CAAC,SACC;AAAA,yDAAC,QAAG,oBAAM;AAAA,YACV,6CAAC,QAAI,kBAAO;AAAA,aACd;AAAA,WACF;AAAA,SACF;AAAA,MAEF,aAAa,eAAe;AAAA,MAC5B,WAAU;AAAA,MACV,UAAU,YAAY,SAAS,SAAS,WAAW,QAAQ;AAAA,MAC3D,SAAS,CAAC;AAAA,MACV,QACE,8CAAC,SAAI,WAAU,mCACb;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,MAAK;AAAA,YACL,cAAW;AAAA,YAEX;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,QAAO;AAAA,kBACP,UAAU,aAAa,CAAC;AAAA,kBACxB,gBAAc,UAAU;AAAA,kBACxB,SAAS,MAAM,YAAY,MAAM;AAAA,kBAClC;AAAA;AAAA,cAED;AAAA,cACA;AAAA,gBAAC;AAAA;AAAA,kBACC,QAAO;AAAA,kBACP,UAAU,aAAa,CAAC;AAAA,kBACxB,gBAAc,UAAU;AAAA,kBACxB,SAAS,MAAM,WAAW,MAAM;AAAA,kBACjC;AAAA;AAAA,cAED;AAAA,cACA;AAAA,gBAAC;AAAA;AAAA,kBACC,QAAO;AAAA,kBACP,UAAU,aAAa,CAAC;AAAA,kBACxB,SAAS,MAAM,mBAAmB,MAAM;AAAA,kBACzC;AAAA;AAAA,cAED;AAAA;AAAA;AAAA,QACF;AAAA,QACC,SACC,6CAAC,SAAI,WAAU,0CAA0C,kBAAO,IAC9D;AAAA,SACN;AAAA;AAAA,EAEJ,GACF;AAEJ;;;AC7JA,IAAAC,eAAiB;AACjB,IAAAC,eAAoC;AAuCxB,IAAAC,sBAAA;AAnCL,SAAS,SAAS,EAAE,MAAM,SAAS,UAAU,WAAW,GAAG,MAAM,GAAkB;AACxF,QAAM,cAAc,SAAS,IAAI,CAAC,YAAY;AAAA,IAC5C,GAAG;AAAA,IACH,QAAQ,OAAO,UAAU;AAAA,EAC3B,EAAE;AAEF,QAAM,mBAAmB,WACrB;AAAA,IACE,MAAM;AAAA,IACN,UAAU;AAAA,IACV,SAAS,MAAM,SAAS,IAAI;AAAA,IAC5B,WAAW,CAAC,UAA4C;AACtD,UAAI,MAAM,QAAQ,WAAW,MAAM,QAAQ,KAAK;AAC9C,cAAM,eAAe;AACrB,iBAAS,IAAI;AAAA,MACf;AAAA,IACF;AAAA,EACF,IACA,CAAC;AAEL,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACH,GAAG;AAAA,MACJ,eAAW,aAAAC,SAAK,iBAAiB,YAAY,6BAA6B,SAAS;AAAA,MACnF,SAAQ;AAAA,MACR,OAAO,KAAK;AAAA,MACZ,UAAU,KAAK;AAAA,MACf,aAAa,KAAK;AAAA,MAClB,QAAQ,KAAK;AAAA,MACb,SAAS;AAAA,MACT,UAAU;AAAA,QACR;AAAA,UACE,OAAO;AAAA,UACP,OAAO,KAAK,WACV,6CAAC,UAAK,WAAU,2BAA2B,eAAK,UAAS,IAEzD;AAAA,QAEJ;AAAA,QACA;AAAA,UACE,OAAO;AAAA,UACP,OAAO,eAAe,KAAK,KAAK;AAAA,QAClC;AAAA,QACA;AAAA,UACE,OAAO;AAAA,UACP,OAAO,KAAK,WACV,6CAAC,sBAAM,UAAU,oBAAoB,KAAK,QAAQ,GAAI,eAAK,UAAS,IAEpE;AAAA,QAEJ;AAAA,MACF;AAAA,MACA,sBAAmB;AAAA,MAElB,eAAK,MAAM,SACV,6CAAC,SAAI,WAAU,uBAAsB,cAAW,aAC7C,eAAK,KAAK,IAAI,CAAC,QACd,6CAAC,oBAAe,iBAAN,GAAU,CACrB,GACH,IACE;AAAA;AAAA,EACN;AAEJ;;;ACtEA,IAAAC,SAAuB;AACvB,IAAAC,gBAAiB;AACjB,IAAAC,eAAkC;;;ACDlC,IAAAC,eAAiB;AACjB,IAAAC,eAAsB;AAclB,IAAAC,uBAAA;AAVG,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAyB;AACvB,QAAMC,eAAc,SAAS,eAAe,MAAM;AAElD,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,eAAW,aAAAC,SAAK,yBAAyB,0BAA0B,MAAM,IAAI,SAAS;AAAA,MACtF,sBAAmB;AAAA,MACnB,eAAa;AAAA,MACb,UAAU,kBAAkB,MAAM;AAAA,MAClC,OAAO,SAASD;AAAA,MAEhB;AAAA,sDAAC,UAAK,WAAU,oCAAmC,eAAY,QAAO;AAAA,QACtE,8CAAC,UAAK,WAAU,gCAAgC,UAAAA,cAAY;AAAA;AAAA;AAAA,EAC9D;AAEJ;;;ADSQ,IAAAE,uBAAA;AA7BR,IAAM,oBAA4D;AAAA,EAChE,cAAc;AAAA,EACd,QAAQ;AACV;AAEA,SAAS,eAAe,OAAe;AACrC,SAAO,GAAG,KAAK,QAAQ,UAAU,IAAI,KAAK,GAAG;AAC/C;AAEA,SAAS,kBAAkB,cAAsC;AAC/D,SAAO,iBAAiB,WAAW,cAAc;AACnD;AAEA,SAAS,gBAAgB;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,YAAkB,aAAM;AAE9B,MAAI,CAAC,aAAa,OAAQ,QAAO;AAEjC,SACE,+CAAC,aAAQ,WAAU,gCAA+B,mBAAiB,WACjE;AAAA,mDAAC,SAAI,WAAU,uCACb;AAAA,qDAAC,SAAI,WAAU,wCACb;AAAA,sDAAC,QAAG,IAAI,WAAY,iBAAM;AAAA,QAC1B,8CAAC,OAAG,4BAAkB,YAAY,GAAE;AAAA,SACtC;AAAA,MACA,8CAAC,sBAAO,yBAAe,aAAa,MAAM,GAAE;AAAA,OAC9C;AAAA,IACA,8CAAC,QAAG,WAAU,+BACX,uBAAa,IAAI,CAAC,eACjB;AAAA,MAAC;AAAA;AAAA,QAEC,eAAW,cAAAC;AAAA,UACT;AAAA,UACA,gCAAgC,WAAW,MAAM;AAAA,QACnD;AAAA,QACA,eAAa,WAAW;AAAA,QAExB;AAAA,yDAAC,SAAI,WAAU,oCACb;AAAA,0DAAC,UAAK,WAAU,uCACb,4BAAkB,YAAY,GACjC;AAAA,YACA,8CAAC,UAAK,WAAU,gCAAgC,qBAAW,OAAM;AAAA,YACjE,8CAAC,UAAK,WAAU,6BAA6B,qBAAW,IAAG;AAAA,aAC7D;AAAA,UACA,8CAAC,mBAAgB,QAAQ,WAAW,QAAQ;AAAA;AAAA;AAAA,MAdvC,WAAW;AAAA,IAelB,CACD,GACH;AAAA,KACF;AAEJ;AAEO,SAAS,mBAAmB;AAAA,EACjC,eAAe,CAAC;AAAA,EAChB,SAAS,CAAC;AAAA,EACV,YAAY,CAAC;AAAA,EACb,aAAa;AAAA,EACb;AAAA,EACA,GAAG;AACL,GAA4B;AAC1B,QAAM,gBAAgB,aAAa,OAAO,CAAC,eAAe,WAAW,iBAAiB,QAAQ;AAC9F,QAAM,mBAAmB,aAAa;AAAA,IACpC,CAAC,eAAe,WAAW,iBAAiB;AAAA,EAC9C;AACA,QAAM,YAAY,OAAO,SAAS,SAAS;AAC3C,QAAM,gBAAgB,UAAU,SAAS,YAAY;AACrD,QAAM,kBAAkB,UAAU,UAAU,cAAc;AAE1D,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,eAAW,cAAAA,SAAK,yBAAyB,SAAS;AAAA,MAClD,sBAAmB;AAAA,MAElB,4BACC,gFACE;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,OAAM;AAAA,YACN,cAAa;AAAA,YACb,cAAc;AAAA;AAAA,QAChB;AAAA,QACA,8CAAC,mBAAgB,OAAM,UAAS,cAAa,UAAS,cAAc,WAAW;AAAA,SACjF,IAEA,8CAAC,2BAAW,OAAO,YAAY;AAAA;AAAA,EAEnC;AAEJ;;;AEvGA,IAAAC,gBAAiB;AACjB,IAAAC,gBAAwD;;;ACDxD,IAAAC,gBAAiB;AACjB,IAAAC,gBAAoD;AAyC5C,IAAAC,uBAAA;AArCR,IAAM,gBAAyF;AAAA,EAC7F,eAAe,EAAE,OAAO,UAAU,MAAM,OAAO;AAAA,EAC/C,SAAS,EAAE,OAAO,WAAW,MAAM,UAAU;AAAA,EAC7C,YAAY,EAAE,OAAO,cAAc,MAAM,OAAO;AAAA,EAChD,YAAY,EAAE,OAAO,cAAc,MAAM,UAAU;AAAA,EACnD,QAAQ,EAAE,OAAO,UAAU,MAAM,UAAU;AAC7C;AAEA,SAAS,cAAc,OAAsB;AAC3C,QAAM,OAAO,iBAAiB,OAAO,QAAQ,IAAI,KAAK,KAAK;AAC3D,MAAI,OAAO,MAAM,KAAK,QAAQ,CAAC,GAAG;AAChC,UAAM,WAAW,OAAO,KAAK;AAC7B,WAAO,EAAE,UAAU,UAAU,OAAO,SAAS;AAAA,EAC/C;AAEA,SAAO;AAAA,IACL,UAAU,KAAK,YAAY;AAAA,IAC3B,OAAO,eAAe,IAAI;AAAA,EAC5B;AACF;AAEO,SAAS,aAAa;AAAA,EAC3B,SAAS,CAAC;AAAA,EACV;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,GAAG;AACL,GAAsB;AACpB,MAAI,CAAC,OAAO,QAAQ;AAClB,WACE;AAAA,MAAC;AAAA;AAAA,QACE,GAAG;AAAA,QACJ,eAAW,cAAAC,SAAK,qBAAqB,SAAS;AAAA,QAC9C,sBAAmB;AAAA,QACnB,MAAM,QAAQ;AAAA,QACd,cAAY,aAAa;AAAA,QAEzB;AAAA,UAAC;AAAA;AAAA,YACC,OAAM;AAAA,YACN,aAAY;AAAA;AAAA,QACd;AAAA;AAAA,IACF;AAAA,EAEJ;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,eAAW,cAAAA,SAAK,qBAAqB,SAAS;AAAA,MAC9C,sBAAmB;AAAA,MACnB,MAAM,QAAQ;AAAA,MACd,cAAY,aAAa;AAAA,MAEzB,wDAAC,QAAG,WAAU,2BACX,iBAAO,IAAI,CAAC,UAAU;AACrB,cAAM,OAAO,cAAc,MAAM,IAAI;AACrC,cAAM,OAAO,cAAc,MAAM,SAAS;AAE1C,eACE;AAAA,UAAC;AAAA;AAAA,YAEC,eAAW,cAAAA;AAAA,cACT;AAAA,cACA,6BAA6B,MAAM,IAAI;AAAA,YACzC;AAAA,YACA,aAAW,MAAM;AAAA,YAEjB;AAAA,4DAAC,UAAK,WAAU,2BAA0B,UAAU,KAAK,UACtD,eAAK,OACR;AAAA,cACA,8CAAC,SAAI,WAAU,2BAA0B,eAAW,MAClD,wDAAC,UAAK,WAAU,6BAA4B,GAC9C;AAAA,cACA,+CAAC,aAAQ,WAAU,2BACjB;AAAA,+DAAC,YAAO,WAAU,mCAChB;AAAA,gEAAC,uBAAM,UAAU,KAAK,MAAO,eAAK,OAAM;AAAA,kBACvC,MAAM,QACL,+CAAC,UAAK,WAAU,4BAA2B;AAAA;AAAA,oBAAI,MAAM;AAAA,qBAAM,IACzD;AAAA,mBACN;AAAA,gBACA,8CAAC,YAAO,WAAU,8BAA8B,gBAAM,SAAQ;AAAA,gBAC7D,MAAM,UACL,8CAAC,OAAE,WAAU,8BAA8B,gBAAM,SAAQ,IACvD;AAAA,iBACN;AAAA;AAAA;AAAA,UAxBK,MAAM;AAAA,QAyBb;AAAA,MAEJ,CAAC,GACH;AAAA;AAAA,EACF;AAEJ;;;ADrEM,IAAAC,uBAAA;AAnBN,SAAS,YAAY,OAAe,UAAkB,SAAS,GAAG,QAAQ,KAAK;AAC7E,SAAO,GAAG,KAAK,IAAI,UAAU,IAAI,WAAW,MAAM;AACpD;AAEA,SAAS,cAAc;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMG;AACD,SACE,+CAAC,aAAQ,MAAY,eAAW,cAAAC,SAAK,kCAAkC,SAAS,GAC9E;AAAA,mDAAC,aAAQ,WAAU,kCACjB;AAAA,oDAAC,UAAK,WAAU,wCAAwC,iBAAM;AAAA,MAC7D,OAAO,8CAAC,UAAK,WAAU,uCAAuC,gBAAK,IAAU;AAAA,OAChF;AAAA,IACA,8CAAC,SAAI,WAAU,uCAAuC,UAAS;AAAA,KACjE;AAEJ;AAEO,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAyB;AACvB,MAAI,CAAC,MAAM;AACT,WACE;AAAA,MAAC;AAAA;AAAA,QACE,GAAG;AAAA,QACJ,eAAW,cAAAA,SAAK,yBAAyB,SAAS;AAAA,QAClD,OAAO,SAAS;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA,sBAAmB;AAAA,QAElB,WAAC,OAAO,SAAS,8CAAC,4BAAW,OAAM,oBAAmB,IAAK;AAAA;AAAA,IAC9D;AAAA,EAEJ;AAEA,QAAM,uBAAuB,gBAAgB,KAAK,gBAAgB,CAAC;AACnE,QAAM,iBAAiB,UAAU,KAAK,WAAW,CAAC;AAElD,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,eAAW,cAAAA,SAAK,yBAAyB,SAAS;AAAA,MAClD,OAAO,SAAS,KAAK;AAAA,MACrB,UAAU,KAAK;AAAA,MACf,QAAQ,KAAK;AAAA,MACb,sBAAmB;AAAA,MAEnB,yDAAC,SAAI,WAAU,gCACb;AAAA,sDAAC,iBAAc,OAAM,YAAW,MAAI,MAClC,yDAAC,QAAG,WAAU,iDACZ;AAAA,yDAAC,SACC;AAAA,0DAAC,QAAG,oBAAM;AAAA,YACV,8CAAC,QACC,wDAAC,mBAAgB,QAAQ,KAAK,QAAQ,GACxC;AAAA,aACF;AAAA,UACA,+CAAC,SACC;AAAA,0DAAC,QAAG,sBAAQ;AAAA,YACZ,8CAAC,QAAI,eAAK,YAAY,KAAI;AAAA,aAC5B;AAAA,UACA,+CAAC,SACC;AAAA,0DAAC,QAAG,iBAAG;AAAA,YACP,8CAAC,QAAI,yBAAe,KAAK,KAAK,GAAE;AAAA,aAClC;AAAA,UACA,+CAAC,SACC;AAAA,0DAAC,QAAG,sBAAQ;AAAA,YACZ,8CAAC,QACE,eAAK,WACJ,8CAAC,uBAAM,UAAU,oBAAoB,KAAK,QAAQ,GAAI,eAAK,UAAS,IAEpE,KAEJ;AAAA,aACF;AAAA,WACF,GACF;AAAA,QAEA,8CAAC,iBAAc,OAAM,eAAc,MAAI,MACrC,wDAAC,SAAI,WAAU,sCACZ,eAAK,eAAe,eAAe,4BACtC,GACF;AAAA,QAEA;AAAA,UAAC;AAAA;AAAA,YACC,OAAM;AAAA,YACN,MAAM,YAAY,qBAAqB,QAAQ,cAAc,cAAc;AAAA,YAC3E,MAAM,qBAAqB,SAAS;AAAA,YAEpC,wDAAC,sBAAmB,cAAc,sBAAsB;AAAA;AAAA,QAC1D;AAAA,QAEA;AAAA,UAAC;AAAA;AAAA,YACC,OAAM;AAAA,YACN,MAAM,YAAY,eAAe,QAAQ,OAAO;AAAA,YAChD,MAAM,eAAe,SAAS;AAAA,YAE9B,wDAAC,gBAAa,QAAQ,gBAAgB;AAAA;AAAA,QACxC;AAAA,QAEC,SAAS,SACR,8CAAC,iBAAc,OAAM,WAAU,MAAM,YAAY,QAAQ,QAAQ,QAAQ,GAAG,MAAI,MAC9E,wDAAC,SAAI,WAAU,kCACb,wDAAC,6BAAY,SAAkB,GACjC,GACF,IACE;AAAA,SACN;AAAA;AAAA,EACF;AAEJ;;;AE1IA,IAAAC,SAAuB;AACvB,IAAAC,gBAAiB;AACjB,IAAAC,gBAOO;AAiDK,IAAAC,uBAAA;AA3CL,SAAS,iBAAiB;AAAA,EAC/B,kBAAkB,CAAC;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,GAAG;AACL,GAA0B;AACxB,QAAM,CAAC,YAAY,aAAa,IAAU;AAAA,IACxC,qBAAqB,gBAAgB,CAAC,GAAG,MAAM;AAAA,EACjD;AACA,QAAM,CAAC,QAAQ,SAAS,IAAU,gBAAS,EAAE;AAC7C,QAAM,WAAiB,aAAM;AAC7B,QAAM,WAAiB,aAAM;AAC7B,QAAM,gBAAgB,OAAO,KAAK;AAClC,QAAM,eAAe,CAAC,cAAe,kBAAkB,CAAC;AAExD,QAAM,gBAAgB,CAAC,UAA4B;AACjD,WAAO,eAAe;AACtB,QAAI,aAAc;AAClB,gBAAY,YAAY,aAAa;AAAA,EACvC;AAEA,QAAM,sBAAsB,CAAC,UAAoD;AAC/E,SAAK,MAAM,WAAW,MAAM,YAAY,MAAM,QAAQ,SAAS;AAC7D,YAAM,eAAe;AACrB,oBAAc;AAAA,IAChB;AAAA,EACF;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,eAAW,cAAAC,SAAK,0BAA0B,SAAS;AAAA,MACnD;AAAA,MACA;AAAA,MACA,sBAAmB;AAAA,MAElB,0BAAgB,SACf,+CAAC,UAAK,WAAU,gCAA+B,UAAU,eACvD;AAAA,uDAAC,SAAI,WAAU,wCACb;AAAA,wDAAC,OAAE,IAAI,UAAU,WAAU,0CAAyC,4BAEpE;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,MAAK;AAAA,cACL,mBAAiB;AAAA,cAEhB,0BAAgB,IAAI,CAAC,WACpB;AAAA,gBAAC;AAAA;AAAA,kBAEC,MAAK;AAAA,kBACL,cAAY,eAAe,OAAO,KAAK,KAAK;AAAA,oBAC1C,OAAO;AAAA,kBACT,CAAC;AAAA,kBACD,gBAAc,eAAe,OAAO;AAAA,kBACpC,eAAW,cAAAA;AAAA,oBACT;AAAA,oBACA,eAAe,OAAO,MAAM;AAAA,kBAC9B;AAAA,kBACA,SAAS,MAAM,cAAc,OAAO,EAAE;AAAA,kBAEtC;AAAA,kEAAC,UAAK,WAAU,uCACd,wDAAC,UAAK,WAAU,wCAAwC,iBAAO,OAAM,GACvE;AAAA,oBACA,+CAAC,UAAK,WAAU,uCACb;AAAA,qCAAe,OAAO,KAAK,8CAAC,uBAAM,UAAS,QAAO,sBAAQ,IAAW;AAAA,sBACtE,8CAAC,uBAAM,UAAS,WAAW,6BAAmB,OAAO,IAAI,GAAE;AAAA,uBAC7D;AAAA;AAAA;AAAA,gBAlBK,OAAO;AAAA,cAmBd,CACD;AAAA;AAAA,UACH;AAAA,WACF;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,IAAI;AAAA,YACJ,OAAM;AAAA,YACN,UAAU;AAAA,YACV,WAAU;AAAA,YACV,YAAY,iBAAiB,2CAA2C;AAAA,YAExE;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,MAAK;AAAA,gBACL,cAAa;AAAA,gBACb,aAAY;AAAA,gBACZ,OAAO;AAAA,gBACP,MAAM;AAAA,gBACN,WAAW;AAAA,gBACX,UAAU,CAAC,UAAU,UAAU,MAAM,cAAc,KAAK;AAAA;AAAA,YAC1D;AAAA;AAAA,QACF;AAAA,QACA,8CAAC,SAAI,WAAU,mCACb,wDAAC,wBAAO,MAAK,UAAS,UAAU,cAAc,qBAE9C,GACF;AAAA,SACF,IAEA,8CAAC,4BAAW,OAAM,0BAAyB;AAAA;AAAA,EAE/C;AAEJ;AAEA,SAAS,mBAAmB,MAA+B;AACzD,SAAO,KAAK,OAAO,CAAC,EAAE,YAAY,IAAI,KAAK,MAAM,CAAC;AACpD;;;AC3HA,IAAAC,gBAAiB;AAoCD,IAAAC,uBAAA;AAhChB,IAAM,sBAAsB,oBAAI,IAAI,CAAC,UAAU,eAAe,SAAS,CAAC;AAEjE,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,GAAG;AACL,GAA+B;AAC7B,MAAI,OAAO,QAAQ;AACjB,WACE;AAAA,MAAC;AAAA;AAAA,QACE,GAAG;AAAA,QACJ,eAAW,cAAAC,SAAK,8CAA8C,SAAS;AAAA,QACvE,sBAAmB;AAAA,QAEnB,wDAAC,QAAG,WAAU,4BAA2B,cAAY,OAClD,gBAAM,IAAI,CAAC,MAAM,UAAU;AAC1B,gBAAMC,eAAc,eAAe,KAAK,MAAM;AAC9C,gBAAM,gBAAgB,oBAAoB,IAAI,KAAK,MAAM;AAEzD,iBACE;AAAA,YAAC;AAAA;AAAA,cAEC,eAAW,cAAAD;AAAA,gBACT;AAAA,gBACA,4BAA4B,KAAK,MAAM;AAAA,cACzC;AAAA,cACA,gBAAc,gBAAgB,SAAS;AAAA,cACvC,eAAa,KAAK;AAAA,cAElB;AAAA,+DAAC,UAAK,WAAU,iCAAgC,eAAY,QAC1D;AAAA,gEAAC,UAAK,WAAU,6BAA4B;AAAA,kBAC3C,QAAQ,MAAM,SAAS,IACtB,8CAAC,UAAK,WAAU,gCAA+B,IAC7C;AAAA,mBACN;AAAA,gBACA,+CAAC,UAAK,WAAU,gCACd;AAAA,gEAAC,UAAK,WAAU,iCAAiC,eAAK,OAAM;AAAA,kBAC5D,8CAAC,UAAK,WAAU,kCAAkC,UAAAC,cAAY;AAAA,mBAChE;AAAA;AAAA;AAAA,YAjBK,KAAK;AAAA,UAkBZ;AAAA,QAEJ,CAAC,GACH;AAAA;AAAA,IACF;AAAA,EAEJ;AAEA,QAAM,gBAAgB,cAAc,OAAO,KAAK;AAChD,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,eAAW,cAAAD,SAAK,4CAA4C,SAAS;AAAA,MACrE,sBAAmB;AAAA,MAEnB;AAAA,uDAAC,SAAI,WAAU,4BACb;AAAA,wDAAC,UAAM,iBAAM;AAAA,UACb,+CAAC,YAAQ;AAAA;AAAA,YAAc;AAAA,aAAC;AAAA,WAC1B;AAAA,QACA,8CAAC,cAAS,OAAO,eAAe,KAAK,KAAK,cAAY,OAAO;AAAA;AAAA;AAAA,EAC/D;AAEJ;;;ACrEA,IAAAE,SAAuB;AACvB,IAAAC,gBAAiB;AACjB,IAAAC,gBAAyE;AACzE,mBAA0B;AAmCpB,IAAAC,uBAAA;AA/BN,IAAM,gBAAgB;AAAA,EACpB,aAAa;AAAA,EACb,QAAQ;AACV;AAEO,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,GAAG;AACL,GAAwB;AACtB,QAAM,CAAC,QAAQ,SAAS,IAAU,gBAAS,EAAE;AAC7C,QAAM,WAAiB,aAAM;AAC7B,QAAM,mBAAmB,cAAc,gBAAgB,YAAY,aAAa;AAChF,QAAM,eAAe,cAAc,GAAG,YAAY,MAAM,YAAY,UAAU,KAAK;AACnF,QAAM,eAAe,cAAc,cAAc,YAAY,OAAO,IAAI;AAExE,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,eAAW,cAAAC,SAAK,wBAAwB,SAAS;AAAA,MACjD;AAAA,MACA;AAAA,MACA,UAAS;AAAA,MACT,sBAAmB;AAAA,MAEnB;AAAA,sDAAC,oCAAmB,UAAS,UAAS,OAAM,eACzC,4BAAkB,2CACrB;AAAA,QACA,+CAAC,QAAG,WAAU,gCAA+B,cAAW,gBACtD;AAAA,yDAAC,SACC;AAAA,0DAAC,QAAG,kBAAI;AAAA,YACR,8CAAC,QAAI,qBAAW,KAAI;AAAA,aACtB;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,eAAW,cAAAA;AAAA,gBACT;AAAA,gBACA,oBAAoB;AAAA,cACtB;AAAA,cAEA;AAAA,8DAAC,QAAG,sBAAQ;AAAA,gBACZ,+CAAC,QACC;AAAA,gEAAC,UAAM,wBAAa;AAAA,kBACnB,mBACC,8CAAC,UAAK,WAAU,qCAAoC,yCAEpD,IACE;AAAA,mBACN;AAAA;AAAA;AAAA,UACF;AAAA,UACC,cACC,gFACE;AAAA,2DAAC,SACC;AAAA,4DAAC,QAAG,qBAAO;AAAA,cACX,8CAAC,QAAI,wBAAa;AAAA,eACpB;AAAA,YACA,+CAAC,SACC;AAAA,4DAAC,QAAG,sBAAQ;AAAA,cACZ,8CAAC,QAAI,yBAAe,YAAY,UAAU,GAAE;AAAA,eAC9C;AAAA,aACF,IACE;AAAA,WACN;AAAA,QACA,+CAAC,SAAI,WAAU,kCACb;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,IAAI;AAAA,cACJ,OAAM;AAAA,cACN,YAAW;AAAA,cACX,WAAU;AAAA,cAEV;AAAA,gBAAC;AAAA;AAAA,kBACC,OAAO;AAAA,kBACP,MAAM;AAAA,kBACN,aAAY;AAAA,kBACZ,UAAU,CAAC,UAAU,UAAU,MAAM,cAAc,KAAK;AAAA;AAAA,cAC1D;AAAA;AAAA,UACF;AAAA,UACA,+CAAC,SAAI,WAAU,iCACb;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,MAAM,8CAAC,0BAAU,MAAM,IAAI;AAAA,gBAC3B,QAAO;AAAA,gBACP,SAAS,MAAM,UAAU,MAAM;AAAA,gBAChC;AAAA;AAAA,YAED;AAAA,YACA,8CAAC,OAAE,oFAAsE;AAAA,aAC3E;AAAA,WACF;AAAA;AAAA;AAAA,EACF;AAEJ;;;ACtGA,IAAAC,SAAuB;AACvB,IAAAC,gBAAiB;AACjB,IAAAC,gBAAiE;AACjE,IAAAC,gBAAoC;AAgEJ,IAAAC,uBAAA;AA5DhC,IAAM,YAAwC,CAAC,SAAS,QAAQ,QAAQ,OAAO;AAExE,SAAS,WAAW;AAAA,EACzB,UAAU,CAAC;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,GAAG;AACL,GAAoB;AAClB,QAAM,CAAC,gBAAgB,iBAAiB,IAAU,gBAAqC,SAAS;AAChG,QAAM,eAAgB,eAA0D;AAChF,QAAM,SAAe;AAAA,IACnB,MACE,UAAU;AAAA,MACR,CAAC,SAAS,WAAW;AAAA,QACnB,GAAG;AAAA,QACH,CAAC,KAAK,GAAG,QAAQ,OAAO,CAAC,UAAU,MAAM,UAAU,KAAK,EAAE;AAAA,MAC5D;AAAA,MACA,CAAC;AAAA,IACH;AAAA,IACF,CAAC,OAAO;AAAA,EACV;AACA,QAAM,iBAAuB;AAAA,IAC3B,MACE,QACG,OAAO,CAAC,UAAU,aAAa,SAAS,MAAM,KAAK,CAAC,EACpD,MAAM,CAAC,UAAU;AAAA,IACtB,CAAC,cAAc,SAAS,UAAU;AAAA,EACpC;AAEA,QAAM,cAAc,CAAC,UAAoC;AACvD,eAAW,KAAK;AAChB,QAAI,CAAC,aAAa;AAChB;AAAA,QAAkB,CAAC,YACjB,QAAQ,SAAS,KAAK,IAClB,QAAQ,OAAO,CAAC,cAAc,cAAc,KAAK,IACjD,CAAC,GAAG,SAAS,KAAK;AAAA,MACxB;AAAA,IACF;AAAA,EACF;AACA,QAAM,cAAc,YAAY,cAAc;AAE9C,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,eAAW,cAAAC,SAAK,oBAAoB,SAAS;AAAA,MAC7C;AAAA,MACA;AAAA,MACA,sBAAmB;AAAA,MAEnB;AAAA,uDAAC,SAAI,WAAU,6BAA4B,MAAK,WAAU,cAAW,qBACnE;AAAA,yDAAC,SAAI,WAAU,kCAAiC,aAAU,UACvD;AAAA,4BACC;AAAA,cAAC;AAAA;AAAA,gBACC,OAAO,YAAY,qBAAqB;AAAA,gBACxC,MAAM,YAAY,8CAAC,2BAAU,MAAM,IAAI,IAAK,8CAAC,0BAAS,MAAM,IAAI;AAAA,gBAChE,QAAO;AAAA,gBACP,SAAQ;AAAA,gBACR,SAAS;AAAA;AAAA,YACX,IACE;AAAA,YACJ,8CAAC,uBAAM,UAAU,YAAY,YAAY,WAAY,uBAAY;AAAA,YACjE,+CAAC,UAAK,WAAU,kCACb;AAAA,6BAAe;AAAA,cAAO;AAAA,cAAK,QAAQ;AAAA,cAAO;AAAA,eAC7C;AAAA,aACF;AAAA,UACA,+CAAC,cAAS,WAAU,6BAClB;AAAA,0DAAC,YAAO,oBAAM;AAAA,YACd,8CAAC,SAAI,WAAU,oCACZ,oBAAU,IAAI,CAAC,UACd;AAAA,cAAC;AAAA;AAAA,gBAEC,OAAO;AAAA,gBACP,SAAS,aAAa,SAAS,KAAK;AAAA,gBACpC,UAAU,MAAM,YAAY,KAAK;AAAA;AAAA,cAH5B;AAAA,YAIP,CACD,GACH;AAAA,aACF;AAAA,WACF;AAAA,QACA,+CAAC,QAAG,WAAU,6BAA4B,cAAW,oBACnD;AAAA,yDAAC,SACC;AAAA,0DAAC,QAAG,sBAAQ;AAAA,YACZ,8CAAC,QAAI,kBAAQ,QAAO;AAAA,aACtB;AAAA,UACA,+CAAC,SACC;AAAA,0DAAC,QAAG,qBAAO;AAAA,YACX,8CAAC,QAAI,yBAAe,QAAO;AAAA,aAC7B;AAAA,UACA,+CAAC,SACC;AAAA,0DAAC,QAAG,sBAAQ;AAAA,YACZ,8CAAC,QAAI,iBAAO,MAAK;AAAA,aACnB;AAAA,UACA,+CAAC,SACC;AAAA,0DAAC,QAAG,oBAAM;AAAA,YACV,8CAAC,QAAI,iBAAO,OAAM;AAAA,aACpB;AAAA,WACF;AAAA,QACC,eAAe,SACd;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,MAAK;AAAA,YACL,cAAW;AAAA,YACX,aAAW,YAAY,WAAW;AAAA,YAClC,iBAAc;AAAA,YAEd;AAAA,6DAAC,SAAI,WAAU,6BAA4B,eAAY,QACrD;AAAA,8DAAC,UAAK,kBAAI;AAAA,gBACV,8CAAC,UAAK,mBAAK;AAAA,gBACX,8CAAC,UAAK,qBAAO;AAAA,iBACf;AAAA,cACC,eAAe,IAAI,CAAC,UACnB;AAAA,gBAAC;AAAA;AAAA,kBAEC,eAAW,cAAAA,SAAK,2BAA2B,4BAA4B,MAAM,KAAK,EAAE;AAAA,kBAEpF;AAAA,kEAAC,UAAK,WAAU,0BAAyB,UAAU,OAAO,MAAM,SAAS,GACtE,yBAAe,MAAM,SAAS,GACjC;AAAA,oBACA;AAAA,sBAAC;AAAA;AAAA,wBACC,eAAW,cAAAA;AAAA,0BACT;AAAA,0BACA,4BAA4B,MAAM,KAAK;AAAA,wBACzC;AAAA,wBAEC,gBAAM,MAAM,YAAY;AAAA;AAAA,oBAC3B;AAAA,oBACA;AAAA,sBAAC;AAAA;AAAA,wBACC,eAAW,cAAAA;AAAA,0BACT;AAAA,0BACA,MAAM,YAAY;AAAA,wBACpB;AAAA,wBAEC,gBAAM,WAAW,eAAe,MAAM;AAAA;AAAA,oBACzC;AAAA;AAAA;AAAA,gBArBK,MAAM;AAAA,cAsBb,CACD;AAAA;AAAA;AAAA,QACH,IAEA,8CAAC,4BAAW,OAAM,kBAAiB;AAAA;AAAA;AAAA,EAEvC;AAEJ;;;AC3JA,IAAAC,UAAuB;AACvB,IAAAC,gBAAiB;AACjB,IAAAC,gBAQO;AACP,kBAA4D;AA2CpC,IAAAC,uBAAA;AApCxB,IAAM,oBAA4C;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,iBAA+C;AAAA,EACnD,UAAU;AAAA,EACV,MAAM;AAAA,EACN,KAAK;AAAA,EACL,QAAQ;AACV;AAEA,SAAS,kBAAkB,OAAwC;AACjE,SACE,OAAO,IAAI,CAAC,UAAU;AAAA,IACpB,IAAI,KAAK;AAAA,IACT,OAAO,OAAO,KAAK,KAAK;AAAA,IACxB,QAAQ,KAAK,UAAU;AAAA,EACzB,EAAE,KAAK,CAAC;AAEZ;AAEA,SAAS,eAAe,OAAyB;AAC/C,SAAO,OAAO,UAAU,YAAY,MAAM,KAAK,IAAI,GAAG,KAAK,WAAW;AACxE;AAEA,SAAS,aAAa,UAAyB;AAC7C,MAAI,CAAC,SAAU,QAAO,8CAAC,UAAK,WAAU,+BAA8B,eAAC;AAErE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,UAAU,oBAAoB,QAAQ;AAAA,MACtC,WAAW,sDAAsD,QAAQ;AAAA,MAExE,yBAAe,QAAQ;AAAA;AAAA,EAC1B;AAEJ;AAEA,SAAS,UAAU,OAAyB;AAC1C,MAAI,UAAU,UAAa,UAAU,QAAQ,UAAU,IAAI;AACzD,WAAO,8CAAC,UAAK,WAAU,+BAA8B,eAAC;AAAA,EACxD;AAEA,SAAO;AACT;AAEA,SAAS,kBAAkB,MAAc,cAAgD;AACvF,QAAM,SAAS,oBAAI,IAAkC;AACrD,aAAW,QAAQ,MAAM;AACvB,WAAO,IAAI,KAAK,SAAS,OAAO,IAAI,KAAK,MAAM,KAAK,KAAK,CAAC;AAAA,EAC5D;AAEA,QAAM,0BAA0B,iBAAiB,QAAQ,OAAO;AAChE,QAAM,0BAA0B;AAAA,IAC9B,2BAA2B,CAAC,OAAO,IAAI,uBAAuB;AAAA,EAChE;AACA,QAAM,gBACJ,2BACA,2BACA,CAAC,kBAAkB,SAAS,uBAAuB,IAC/C,CAAC,uBAAuB,IACxB,CAAC;AACP,QAAM,iBAAiB;AAAA,IACrB,GAAG,kBAAkB;AAAA,MACnB,CAAC,WACC,OAAO,IAAI,MAAM,KAAM,2BAA2B,WAAW;AAAA,IACjE;AAAA,IACA,GAAG,MAAM,KAAK,OAAO,KAAK,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,kBAAkB,SAAS,MAAM,CAAC;AAAA,IACnF,GAAG;AAAA,EACL;AAEA,SAAO;AAAA,IACL,EAAE,OAAO,OAAO,OAAO,iBAAiB,KAAK,MAAM,IAAI;AAAA,IACvD,GAAG,eAAe,IAAI,CAAC,YAAY;AAAA,MACjC,OAAO;AAAA,MACP,OAAO,GAAG,eAAe,MAAM,CAAC,KAAK,OAAO,IAAI,MAAM,KAAK,CAAC;AAAA,IAC9D,EAAE;AAAA,EACJ;AACF;AAEA,IAAM,iBAAqC;AAAA,EACzC,EAAE,KAAK,MAAM,QAAQ,MAAM,OAAO,QAAQ,UAAU,KAAK;AAAA,EACzD;AAAA,IACE,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,UAAU;AAAA,IACV,QAAQ,CAAC,SACP,+CAAC,UAAK,WAAU,wBACd;AAAA,oDAAC,YAAO,WAAU,8BAA8B,eAAK,OAAM;AAAA,MAC1D,KAAK,cACJ,8CAAC,UAAK,WAAU,oCAAoC,eAAK,aAAY,IACnE;AAAA,OACN;AAAA,EAEJ;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,UAAU;AAAA,IACV,QAAQ,CAAC,SAAS,8CAAC,mBAAgB,QAAQ,KAAK,QAAQ;AAAA,EAC1D;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,UAAU;AAAA,IACV,QAAQ,CAAC,SAAS,aAAa,KAAK,QAAQ;AAAA,EAC9C;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ,CAAC,SAAS,UAAU,KAAK,QAAQ;AAAA,EAC3C;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,UAAU;AAAA,IACV,QAAQ,CAAC,SACP,8CAAC,UAAK,WAAW,KAAK,QAAQ,yBAAyB,+BACpD,yBAAe,KAAK,KAAK,GAC5B;AAAA,EAEJ;AACF;AAEO,SAAS,UAAU;AAAA,EACxB;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,SAAS;AAAA,EACT,OAAO;AAAA,EACP,OAAO;AAAA,EACP,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,GAAG;AACL,GAAmB;AACjB,QAAM,OAAO,SAAS,kBAAkB,KAAK;AAC7C,QAAM,CAAC,sBAAsB,uBAAuB,IAC5C,iBAA2B,KAAK;AACxC,QAAM,wBAAwB,gBAAgB;AAC9C,QAAM,gBACJ,QAAQ,WAAW,KAAK,iBAAiB,UAAa,QAAQ,oBAAoB;AACpF,QAAM,eACJ,iBAAiB,0BAA0B,QACvC,KAAK,OAAO,CAAC,SAAS,KAAK,WAAW,qBAAqB,IAC3D;AACN,QAAM,gBAAsB;AAAA,IAC1B,MAAM,kBAAkB,MAAM,qBAAqB;AAAA,IACnD,CAAC,uBAAuB,IAAI;AAAA,EAC9B;AACA,QAAM,kBAAkB,WAAW;AACnC,QAAM,QAAQ,aAAa,eAAe,KAAK;AAC/C,QAAM,aAAa,KAAK,UAAU,gBAAgB,sBAAuB,SAAS;AAClF,QAAM,mBACJ,KAAK,UAAU,gBACX,+CACC,eAAe;AACtB,QAAM,gBAAgB,cAAc,QAAQ,aAAa,MAAM;AAC/D,QAAM,2BAA2B,CAAC,UAAgD;AAChF,UAAM,aAAa,MAAM,cAAc;AACvC,QAAI,iBAAiB,OAAW,yBAAwB,UAAU;AAClE,2BAAuB,UAAU;AAAA,EACnC;AAEA,QAAM,QACJ,aAAa,SACX;AAAA,IAAC;AAAA;AAAA,MACC,eAAW,cAAAC,SAAK,kBAAkB,SAAS;AAAA,MAC3C,MAAM;AAAA,MACN,SAAS;AAAA,MACT,QAAO;AAAA,MACP;AAAA,MACA,YAAY;AAAA,MACZ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,YAAY,8CAAC,4BAAW,OAAO,YAAY,aAAa,kBAAkB;AAAA,MAC1E,cAAY;AAAA,MACZ,sBAAmB;AAAA;AAAA,EACrB,IAEA;AAAA,IAAC;AAAA;AAAA,MACC,eAAW,cAAAA,SAAK,kBAAkB,SAAS;AAAA,MAC3C,MAAM;AAAA,MACN,SAAS;AAAA,MACT,QAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,YAAY,8CAAC,4BAAW,OAAO,YAAY,aAAa,kBAAkB;AAAA,MAC1E,cAAY;AAAA,MACZ,sBAAmB;AAAA;AAAA,EACrB;AAGJ,QAAM,YAAY,QAAQ,SAAS,eAAe,SAAS,MAAM;AAEjE,MAAI,CAAC,aAAa,CAAC,cAAe,QAAO;AAEzC,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,WAAU;AAAA,MACV,cAAY,OAAO,UAAU,WAAW,QAAQ;AAAA,MAE/C;AAAA,oBACC,+CAAC,YAAO,WAAU,gCAChB;AAAA,yDAAC,SAAI,WAAU,iCACZ;AAAA,oBAAQ,8CAAC,QAAI,iBAAM,IAAQ;AAAA,YAC3B,cAAc,8CAAC,OAAG,uBAAY,IAAO;AAAA,aACxC;AAAA,UACA,8CAAC,6BAAY,SAAkB;AAAA,WACjC,IACE;AAAA,QACH,gBACC,+CAAC,SAAI,WAAU,iCAAgC,cAAW,sBACxD;AAAA,wDAAC,SAAI,WAAU,iCACb;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,SAAQ;AAAA,cACR,WAAU;AAAA,cACV,SAAS;AAAA,cACT,OAAO;AAAA,cACP,UAAU;AAAA;AAAA,UACZ,GACF;AAAA,UACA,8CAAC,UAAK,WAAU,iCACb,uBAAa,WAAW,KAAK,SAC1B,GAAG,KAAK,MAAM,IAAI,KAAK,WAAW,IAAI,SAAS,OAAO,WACtD,GAAG,aAAa,MAAM,OAAO,KAAK,MAAM,gBAC9C;AAAA,WACF,IACE;AAAA,QACH;AAAA;AAAA;AAAA,EACH;AAEJ;;;ACjSA,IAAAC,UAAuB;AACvB,IAAAC,gBAAiB;AACjB,IAAAC,gBAAoC;AA6I5B,IAAAC,uBAAA;AAlIR,IAAM,cAAc,iBAAiB;AACrC,IAAM,aAAa,kBAAkB;AACrC,IAAM,UAAU,iBAAiB,IAAI;AACrC,IAAM,UAAU,kBAAkB,IAAI;AACtC,IAAM,gBAAgB;AACtB,IAAM,gBAAgB;AAUtB,SAAS,YACP,OACA,OACA,QACqB;AACrB,QAAM,MAAM,IAAI,IAAI,MAAM,IAAI,CAAC,SAAS,KAAK,EAAE,CAAC;AAChD,QAAM,QAAQ,IAAI,IAAI,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;AACvD,QAAM,aAAa,MAAM,OAAO,CAAC,SAAS,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI,KAAK,EAAE,CAAC;AAEhF,WAAS,OAAO,GAAG,OAAO,MAAM,QAAQ,QAAQ,GAAG;AACjD,eAAW,QAAQ,YAAY;AAC7B,YAAM,WAAW,MAAM,IAAI,KAAK,IAAI,KAAK;AACzC,YAAM,SAAS,MAAM,IAAI,KAAK,EAAE,KAAK;AACrC,UAAI,SAAS,WAAW,EAAG,OAAM,IAAI,KAAK,IAAI,WAAW,CAAC;AAAA,IAC5D;AAAA,EACF;AAEA,QAAM,SAAS,oBAAI,IAA4B;AAC/C,aAAW,QAAQ,OAAO;AACxB,UAAM,OAAO,MAAM,IAAI,KAAK,EAAE,KAAK;AACnC,WAAO,IAAI,MAAM,CAAC,GAAI,OAAO,IAAI,IAAI,KAAK,CAAC,GAAI,IAAI,CAAC;AAAA,EACtD;AAEA,SAAO,MAAM,IAAI,CAAC,SAAS;AACzB,QAAI,OAAO,KAAK,MAAM,YAAY,OAAO,KAAK,MAAM,UAAU;AAC5D,aAAO,EAAE,GAAG,MAAM,GAAG,KAAK,GAAG,GAAG,KAAK,EAAE;AAAA,IACzC;AACA,UAAM,OAAO,MAAM,IAAI,KAAK,EAAE,KAAK;AACnC,UAAM,QAAQ,OAAO,IAAI,IAAI,KAAK,CAAC;AACnC,UAAM,QAAQ,MAAM,UAAU,CAAC,cAAc,UAAU,OAAO,KAAK,EAAE;AACrE,UAAM,SAAS,KAAK,IAAI,GAAG,KAAK,IAAI,aAAa;AACjD,UAAM,SAAS,OAAO,cAAc;AACpC,WAAO,WAAW,OACd,EAAE,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,IAChC,EAAE,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO;AAAA,EACtC,CAAC;AACH;AAEA,SAAS,SAAS,OAAsC;AACtD,MAAI,CAAC,MAAM,QAAQ;AACjB,WAAO,EAAE,GAAG,GAAG,GAAG,GAAG,OAAO,KAAK,QAAQ,KAAK,SAAS,cAAc;AAAA,EACvE;AAEA,QAAM,OACJ,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,KAAK,IAAI,iBAAiB,CAAC,CAAC,IAAI;AAClE,QAAM,OACJ,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,KAAK,IAAI,kBAAkB,CAAC,CAAC,IAAI;AACnE,QAAM,OACJ,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,KAAK,IAAI,iBAAiB,CAAC,CAAC,IAAI;AAClE,QAAM,OACJ,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,KAAK,IAAI,kBAAkB,CAAC,CAAC,IAAI;AACnE,QAAM,QAAQ,KAAK,IAAI,KAAK,OAAO,IAAI;AACvC,QAAM,SAAS,KAAK,IAAI,KAAK,OAAO,IAAI;AAExC,SAAO,EAAE,GAAG,MAAM,GAAG,MAAM,OAAO,QAAQ,SAAS,GAAG,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,MAAM,GAAG;AAC1F;AAEA,SAAS,cACP,MACA,IACA,QACA;AACA,MAAI,WAAW,MAAM;AACnB,WAAO;AAAA,MACL,MAAM,EAAE,GAAG,KAAK,IAAI,iBAAiB,GAAG,GAAG,KAAK,EAAE;AAAA,MAClD,IAAI,EAAE,GAAG,GAAG,IAAI,iBAAiB,GAAG,GAAG,GAAG,EAAE;AAAA,IAC9C;AAAA,EACF;AACA,SAAO;AAAA,IACL,MAAM,EAAE,GAAG,KAAK,GAAG,GAAG,KAAK,IAAI,kBAAkB,EAAE;AAAA,IACnD,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,kBAAkB,EAAE;AAAA,EAC/C;AACF;AAEO,SAAS,YAAY;AAAA,EAC1B,QAAQ,CAAC;AAAA,EACT,QAAQ,CAAC;AAAA,EACT,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAqB;AACnB,QAAM,kBAAwB;AAAA,IAC5B,MAAM,YAAY,OAAO,OAAO,MAAM;AAAA,IACtC,CAAC,OAAO,OAAO,MAAM;AAAA,EACvB;AACA,QAAM,UAAgB;AAAA,IACpB,MAAM,IAAI,IAAI,gBAAgB,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;AAAA,IAC5D,CAAC,eAAe;AAAA,EAClB;AACA,QAAM,kBAAwB;AAAA,IAC5B,MAAM,MAAM,KAAK,IAAI,IAAI,gBAAgB,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC;AAAA,IACpE,CAAC,eAAe;AAAA,EAClB;AACA,QAAM,aAAmB,gBAAQ,MAAM,SAAS,eAAe,GAAG,CAAC,eAAe,CAAC;AACnF,QAAM,eAAqB,cAAM;AACjC,QAAM,qBAA2B,cAAM;AACvC,QAAM,aACJ,OAAO,UAAU,YAAY,MAAM,KAAK,IAAI,QAAQ;AACtD,QAAM,mBAAmB,GAAG,gBAAgB,MAAM,cAAc,MAAM,MAAM,4BAC1E,gBAAgB,IAAI,CAAC,WAAW,OAAO,QAAQ,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,KAAK,MAC3E;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,eAAW,cAAAC,SAAK,qBAAqB,SAAS;AAAA,MAC9C,OAAO,SAAS;AAAA,MAChB;AAAA,MACA,sBAAmB;AAAA,MAElB,0BAAgB,SACf,gFACE;AAAA,sDAAC,SAAI,WAAU,+BACb;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,MAAK;AAAA,YACL,mBAAiB;AAAA,YACjB,oBAAkB;AAAA,YAClB,SAAS,WAAW;AAAA,YAEpB;AAAA,4DAAC,WAAM,IAAI,cAAe,sBAAW;AAAA,cACrC,8CAAC,UAAK,IAAI,oBAAqB,4BAAiB;AAAA,cAChD;AAAA,gBAAC;AAAA;AAAA,kBACC,WAAU;AAAA,kBACV,GAAG,WAAW;AAAA,kBACd,GAAG,WAAW;AAAA,kBACd,OAAO,WAAW;AAAA,kBAClB,QAAQ,WAAW;AAAA,kBACnB,eAAY;AAAA;AAAA,cACd;AAAA,cACC,MAAM,IAAI,CAAC,MAAM,UAAU;AAC1B,sBAAM,OAAO,QAAQ,IAAI,KAAK,IAAI;AAClC,sBAAM,KAAK,QAAQ,IAAI,KAAK,EAAE;AAC9B,oBAAI,CAAC,QAAQ,CAAC,GAAI,QAAO;AACzB,sBAAM,YAAY,cAAc,MAAM,IAAI,MAAM;AAChD,uBACE;AAAA,kBAAC;AAAA;AAAA,oBAEC,MAAM,UAAU;AAAA,oBAChB,IAAI,UAAU;AAAA,oBACd,QAAQ,KAAK,UAAU,GAAG;AAAA,oBAC1B,OAAO,KAAK;AAAA;AAAA,kBAJP,GAAG,KAAK,IAAI,IAAI,KAAK,EAAE,IAAI,KAAK;AAAA,gBAKvC;AAAA,cAEJ,CAAC;AAAA,cACA,gBAAgB,IAAI,CAAC,SACpB;AAAA,gBAAC;AAAA;AAAA,kBAEC;AAAA,kBACA,UAAU,KAAK,OAAO;AAAA,kBACtB,UAAU;AAAA;AAAA,gBAHL,KAAK;AAAA,cAIZ,CACD;AAAA;AAAA;AAAA,QACH,GACF;AAAA,QACA,8CAAC,aAAU,UAAU,gBAAgB,SAAS,kBAAkB,QAAW;AAAA,QAC3E,8CAAC,QAAG,WAAU,+BACX,0BAAgB,IAAI,CAAC,SACpB,+CAAC,QACE;AAAA,eAAK;AAAA,UAAM;AAAA,UAAG,KAAK,OAAO,QAAQ,MAAM,GAAG;AAAA,aADrC,KAAK,EAEd,CACD,GACH;AAAA,SACF,IAEA,8CAAC,4BAAW,OAAM,gBAAe,aAAY,+CAA8C;AAAA;AAAA,EAE/F;AAEJ;;;ACxMA,IAAAC,gBAAiB;AACjB,IAAAC,gBAA+B;AA4CvB,IAAAC,uBAAA;AAjCR,IAAM,cAAsC;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAwB;AACtB,QAAM,WAAW,aAAa,IAAI;AAElC,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,eAAW,cAAAC,SAAK,wBAAwB,SAAS;AAAA,MACjD,OAAO,MAAM,SAAS,SAAS;AAAA,MAC/B,UAAU,MAAM;AAAA,MAChB;AAAA,MACA;AAAA,MACA,sBAAmB;AAAA,MAElB,iBACC,gFACE;AAAA,uDAAC,SAAI,WAAU,iCACb;AAAA,yDAAC,YAAQ;AAAA,iBAAK;AAAA,YAAW;AAAA,aAAM;AAAA,UAC9B,KAAK,YAAY,+CAAC,UAAK;AAAA;AAAA,YAAS,eAAe,KAAK,SAAS;AAAA,aAAE,IAAU;AAAA,UACzE,KAAK,MAAM,+CAAC,UAAK;AAAA;AAAA,YAAK,eAAe,KAAK,GAAG;AAAA,aAAE,IAAU;AAAA,WAC5D;AAAA,QACA,8CAAC,yBAAsB,OAAO,UAAU,OAAM,iBAAgB;AAAA,QAC9D,8CAAC,SAAI,WAAU,gCAA+B,cAAW,sBACtD,sBACE,OAAO,CAAC,WAAW,KAAK,SAAS,MAAM,CAAC,EACxC,IAAI,CAAC,WAAW;AACf,gBAAM,QAAQ,eAAe,MAAM;AACnC,gBAAM,QAAQ,KAAK,SAAS,MAAM,KAAK;AAEvC,iBACE;AAAA,YAAC;AAAA;AAAA,cAEC,UAAU,kBAAkB,MAAM;AAAA,cAClC,eAAW,cAAAA;AAAA,gBACT;AAAA,gBACA,gCAAgC,MAAM;AAAA,cACxC;AAAA,cACA,cAAY,GAAG,KAAK,KAAK,KAAK;AAAA,cAE7B;AAAA;AAAA,gBAAM;AAAA,gBAAE,8CAAC,UAAK,WAAU,qCAAqC,iBAAM;AAAA;AAAA;AAAA,YAR/D;AAAA,UASP;AAAA,QAEJ,CAAC,GACL;AAAA,SACF,IAEA,8CAAC,yBAAsB,OAAO,GAAG,OAAM,iBAAgB;AAAA;AAAA,EAE3D;AAEJ;;;ACjFA,IAAAC,UAAuB;AACvB,IAAAC,gBAAiB;AACjB,IAAAC,gBAAsD;AACtD,IAAAC,eAA2C;AAsBlC,IAAAC,uBAAA;AAlBT,SAASC,mBAAkB,OAA4C;AACrE,SACE,OAAO,IAAI,CAAC,MAAM,WAAW;AAAA,IAC3B,IAAI,KAAK;AAAA,IACT,OAAO,OAAO,KAAK,KAAK;AAAA,IACxB,QAAQ,KAAK,UAAU;AAAA,IACvB,OAAO,QAAQ;AAAA,EACjB,EAAE,KAAK,CAAC;AAEZ;AAEA,SAAS,gBAAgB,MAAY;AACnC,MAAI,OAAO,KAAK,oBAAoB,SAAU,QAAO,KAAK;AAC1D,MAAI,KAAK,eAAe,OAAQ,QAAO,KAAK,cAAc;AAC1D,SAAO,KAAK,cAAc,UAAU;AACtC;AAEA,SAAS,YAAY;AACnB,SAAO,8CAAC,UAAK,WAAU,8BAA6B,eAAC;AACvD;AAEO,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAuB;AACrB,QAAM,OAAO,SAASA,mBAAkB,KAAK;AAC7C,QAAM,UAAgB;AAAA,IACpB,MAAM;AAAA,MACJ;AAAA,QACE,KAAK;AAAA,QACL,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,QAAQ,CAAC,MAAM,UACb,8CAAC,UAAK,WAAU,8BAA8B,eAAK,SAAS,QAAQ,GAAE;AAAA,MAE1E;AAAA,MACA;AAAA,QACE,KAAK;AAAA,QACL,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,QAAQ,CAAC,SACP,eACE;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,MAAK;AAAA,YACL,SAAS,MAAM,aAAa,IAAI;AAAA,YAEhC,wDAAC,UAAK,WAAU,mCAAmC,eAAK,OAAM;AAAA;AAAA,QAChE,IAEA,8CAAC,UAAK,WAAU,mCAAmC,eAAK,OAAM;AAAA,MAEpE;AAAA,MACA;AAAA,QACE,KAAK;AAAA,QACL,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,QAAQ,CAAC,SACP;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,QAAQ,KAAK;AAAA,YACb,OAAO,eAAe,KAAK,MAAM;AAAA;AAAA,QACnC;AAAA,MAEJ;AAAA,MACA;AAAA,QACE,KAAK;AAAA,QACL,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,QAAQ,CAAC,SACP,KAAK,WACH,8CAAC,UAAK,WAAU,iCAAiC,eAAK,UAAS,IAE/D,8CAAC,aAAU;AAAA,MAEjB;AAAA,MACA;AAAA,QACE,KAAK;AAAA,QACL,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,OAAO;AAAA,QACP,QAAQ,CAAC,SAAS;AAChB,gBAAM,QAAQ,gBAAgB,IAAI;AAClC,iBACE;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,UAAU,QAAQ,IAAI,SAAS;AAAA,cAE9B;AAAA;AAAA,UACH;AAAA,QAEJ;AAAA,MACF;AAAA,MACA;AAAA,QACE,KAAK;AAAA,QACL,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,QAAQ,CAAC,SACP;AAAA,UAAC;AAAA;AAAA,YACC,eAAW,cAAAC;AAAA,cACT;AAAA,cACA,KAAK,cAAc,QAAQ;AAAA,YAC7B;AAAA,YAEC,yBAAe,KAAK,UAAU;AAAA;AAAA,QACjC;AAAA,MAEJ;AAAA,IACF;AAAA,IACA,CAAC,YAAY;AAAA,EACf;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAW,cAAAA,SAAK,uBAAuB,SAAS;AAAA,MAChD,OAAO,MAAM,SAAS,SAAS;AAAA,MAC/B,UAAU,MAAM;AAAA,MAChB;AAAA,MACA,sBAAmB;AAAA,MAEnB;AAAA,QAAC;AAAA;AAAA,UACC,cACE,QAAQ,MAAM,SAAS,WAAW,WAC9B,GAAG,MAAM,SAAS,KAAK,WACvB;AAAA,UAEN,WAAU;AAAA,UACV;AAAA,UACA;AAAA,UACA,QAAO;AAAA,UACP,SAAQ;AAAA,UACR;AAAA,UACA,YAAY,8CAAC,4BAAW,OAAM,iBAAgB;AAAA;AAAA,MAChD;AAAA;AAAA,EACF;AAEJ;;;ACrJA,IAAAC,gBAAiB;AAkCP,IAAAC,uBAAA;AArBH,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAyB;AACvB,QAAM,UAAU,QAAQ;AACxB,QAAM,YAAY,SAAS,YAAY;AACvC,QAAM,YAAY,UAAU;AAE5B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAW,cAAAC,SAAK,yBAAyB,SAAS;AAAA,MAClD,sBAAmB;AAAA,MAElB;AAAA,oBACC,+CAAC,YAAO,WAAU,iCAChB;AAAA,yDAAC,SAAI,WAAU,sCACZ;AAAA,oBAAQ,8CAAC,QAAG,WAAU,gCAAgC,iBAAM,IAAQ;AAAA,YACpE,WAAW,8CAAC,OAAE,WAAU,mCAAmC,oBAAS,IAAO;AAAA,aAC9E;AAAA,UACC,WAAW,8CAAC,SAAI,WAAU,mCAAmC,oBAAS,IAAS;AAAA,WAClF,IACE;AAAA,QACJ,8CAAC,UAAK,WAAU,+BAA+B,mBAAQ;AAAA,QACtD,YACC,+CAAC,YAAO,WAAU,iCACf;AAAA,mBAAS,8CAAC,SAAI,WAAU,sCAAsC,kBAAO,IAAS;AAAA,UAC9E,WAAW,8CAAC,SAAI,WAAU,mCAAmC,oBAAS,IAAS;AAAA,WAClF,IACE;AAAA;AAAA;AAAA,EACN;AAEJ;;;AvBcO,IAAM,qBAAqB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;","names":["import_core","clsx","import_clsx","import_core","import_jsx_runtime","clsx","React","import_clsx","import_jsx_runtime","clsx","import_clsx","import_jsx_runtime","clsx","import_clsx","import_jsx_runtime","statusLabel","clsx","React","import_clsx","import_core","import_jsx_runtime","clsx","React","import_clsx","import_core","import_jsx_runtime","clsx","React","import_core","import_jsx_runtime","import_clsx","import_core","import_jsx_runtime","clsx","React","import_clsx","import_core","import_clsx","import_core","import_jsx_runtime","statusLabel","clsx","import_jsx_runtime","clsx","import_clsx","import_core","import_clsx","import_core","import_jsx_runtime","clsx","import_jsx_runtime","clsx","React","import_clsx","import_core","import_jsx_runtime","clsx","import_clsx","import_jsx_runtime","clsx","statusLabel","React","import_clsx","import_core","import_jsx_runtime","clsx","React","import_clsx","import_core","import_icons","import_jsx_runtime","clsx","React","import_clsx","import_core","import_jsx_runtime","clsx","React","import_clsx","import_core","import_jsx_runtime","clsx","import_clsx","import_core","import_jsx_runtime","clsx","React","import_clsx","import_core","import_data","import_jsx_runtime","taskRowsFromItems","clsx","import_clsx","import_jsx_runtime","clsx"]}