@echothink-ui/motion 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.
- package/README.md +5 -0
- package/dist/components/AgentThinkingAnimation.d.ts +2 -0
- package/dist/components/AttentionPulse.d.ts +2 -0
- package/dist/components/DAGStatusTransition.d.ts +2 -0
- package/dist/components/DocumentLockPulse.d.ts +2 -0
- package/dist/components/PipelineFlowAnimation.d.ts +2 -0
- package/dist/components/ProgressTransition.d.ts +2 -0
- package/dist/components/SkeletonLoadingPattern.d.ts +2 -0
- package/dist/components/StatusChangeAnimation.d.ts +2 -0
- package/dist/components/StepCompletionAnimation.d.ts +2 -0
- package/dist/components/StreamingText.d.ts +2 -0
- package/dist/components/SyncProgressAnimation.d.ts +2 -0
- package/dist/components/motionUtils.d.ts +5 -0
- package/dist/components/types.d.ts +82 -0
- package/dist/index.cjs +2381 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.js +2333 -0
- package/dist/index.js.map +1 -0
- package/package.json +38 -0
- package/src/components/AgentThinkingAnimation.tsx +59 -0
- package/src/components/AttentionPulse.tsx +57 -0
- package/src/components/DAGStatusTransition.tsx +292 -0
- package/src/components/DocumentLockPulse.tsx +72 -0
- package/src/components/PipelineFlowAnimation.tsx +243 -0
- package/src/components/ProgressTransition.tsx +51 -0
- package/src/components/SkeletonLoadingPattern.tsx +248 -0
- package/src/components/StatusChangeAnimation.test.tsx +20 -0
- package/src/components/StatusChangeAnimation.tsx +89 -0
- package/src/components/StepCompletionAnimation.tsx +75 -0
- package/src/components/StreamingText.tsx +77 -0
- package/src/components/SyncProgressAnimation.test.tsx +49 -0
- package/src/components/SyncProgressAnimation.tsx +256 -0
- package/src/components/motionUtils.tsx +942 -0
- package/src/components/types.ts +111 -0
- package/src/index.test.tsx +97 -0
- package/src/index.tsx +44 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.tsx","../src/components/motionUtils.tsx","../src/components/AgentThinkingAnimation.tsx","../src/components/AttentionPulse.tsx","../src/components/DAGStatusTransition.tsx","../src/components/DocumentLockPulse.tsx","../src/components/PipelineFlowAnimation.tsx","../src/components/ProgressTransition.tsx","../src/components/SkeletonLoadingPattern.tsx","../src/components/StatusChangeAnimation.tsx","../src/components/StepCompletionAnimation.tsx","../src/components/StreamingText.tsx","../src/components/SyncProgressAnimation.tsx"],"sourcesContent":["export type {\n AgentThinkingAnimationProps,\n AttentionPulseProps,\n DAGStatusTransitionProps,\n DocumentLockPulseProps,\n MotionFlowEdge,\n MotionFlowNode,\n PipelineFlowAnimationProps,\n ProgressTransitionProps,\n SkeletonLoadingPatternVariant,\n SkeletonLoadingPatternProps,\n StatusChangeAnimationProps,\n StepCompletionAnimationProps,\n StepCompletionState,\n StreamingTextProps,\n SyncProgressAnimationProps,\n SyncProgressAnimationStatus\n} from \"./components/types\";\nexport { AgentThinkingAnimation } from \"./components/AgentThinkingAnimation\";\nexport { AttentionPulse } from \"./components/AttentionPulse\";\nexport { DAGStatusTransition } from \"./components/DAGStatusTransition\";\nexport { DocumentLockPulse } from \"./components/DocumentLockPulse\";\nexport { PipelineFlowAnimation } from \"./components/PipelineFlowAnimation\";\nexport { ProgressTransition } from \"./components/ProgressTransition\";\nexport { SkeletonLoadingPattern } from \"./components/SkeletonLoadingPattern\";\nexport { StatusChangeAnimation } from \"./components/StatusChangeAnimation\";\nexport { StepCompletionAnimation } from \"./components/StepCompletionAnimation\";\nexport { StreamingText } from \"./components/StreamingText\";\nexport { SyncProgressAnimation } from \"./components/SyncProgressAnimation\";\n\nexport const MotionComponentNames = [\n \"ProgressTransition\",\n \"PipelineFlowAnimation\",\n \"DAGStatusTransition\",\n \"AgentThinkingAnimation\",\n \"SyncProgressAnimation\",\n \"SkeletonLoadingPattern\",\n \"AttentionPulse\",\n \"DocumentLockPulse\",\n \"StreamingText\",\n \"StepCompletionAnimation\",\n \"StatusChangeAnimation\"\n] as const;\nexport type MotionComponentName = (typeof MotionComponentNames)[number];\n","import * as React from \"react\";\nimport type { EthOperationalStatus, EthSeverity } from \"@echothink-ui/core\";\n\nconst reducedMotionQuery = \"(prefers-reduced-motion: reduce)\";\n\nexport function usePrefersReducedMotion() {\n return React.useSyncExternalStore(\n subscribeToReducedMotion,\n getReducedMotionSnapshot,\n getReducedMotionServerSnapshot\n );\n}\n\nfunction subscribeToReducedMotion(onStoreChange: () => void) {\n if (typeof window === \"undefined\" || typeof window.matchMedia !== \"function\") {\n return () => {};\n }\n\n const media = window.matchMedia(reducedMotionQuery);\n const listener = () => onStoreChange();\n media.addEventListener?.(\"change\", listener);\n return () => media.removeEventListener?.(\"change\", listener);\n}\n\nfunction getReducedMotionSnapshot() {\n if (typeof window === \"undefined\" || typeof window.matchMedia !== \"function\") return false;\n return window.matchMedia(reducedMotionQuery).matches;\n}\n\nfunction getReducedMotionServerSnapshot() {\n return false;\n}\n\nexport function MotionStyles() {\n return (\n <style>{`\n @keyframes eth-motion-flow-dash { to { stroke-dashoffset: -24; } }\n @keyframes eth-motion-pulse { 0% { transform: scale(1); opacity: 1; } 50% { transform: scale(1.035); opacity: .72; } 100% { transform: scale(1); opacity: 1; } }\n @keyframes eth-motion-attention-ring { 0% { opacity: .52; transform: scale(.64); } 70%, 100% { opacity: 0; transform: scale(1.8); } }\n @keyframes eth-motion-flow-node-pulse { 0% { opacity: .42; stroke-width: 1; } 100% { opacity: 0; stroke-width: 7; } }\n @keyframes eth-motion-dot { 0%, 80%, 100% { opacity: .28; transform: translateY(0); } 40% { opacity: 1; transform: translateY(-3px); } }\n @keyframes eth-motion-spin { to { transform: rotate(360deg); } }\n @keyframes eth-motion-sync-sweep { 0% { transform: translateX(-120%); } 100% { transform: translateX(320%); } }\n @keyframes eth-motion-shimmer { 0% { background-position: 100% 0; } 100% { background-position: -100% 0; } }\n @keyframes eth-motion-check { 0% { transform: scale(.78); opacity: 0; } 100% { transform: scale(1); opacity: 1; } }\n @keyframes eth-motion-step-check { 0% { stroke-dashoffset: 18; } 100% { stroke-dashoffset: 0; } }\n @keyframes eth-motion-step-current { 0% { box-shadow: 0 0 0 0 rgba(15, 98, 254, .24); } 100% { box-shadow: 0 0 0 .375rem rgba(15, 98, 254, 0); } }\n @keyframes eth-motion-status-ring { 0% { stroke-dashoffset: 18; opacity: .18; } 55% { opacity: .48; } 100% { stroke-dashoffset: 0; opacity: .32; } }\n @keyframes eth-motion-status-halo { 0% { opacity: .36; transform: scale(.68); } 100% { opacity: 0; transform: scale(1.85); } }\n @keyframes eth-motion-lock-pulse { 0% { opacity: .34; transform: scale(.72); } 70%, 100% { opacity: 0; transform: scale(1.72); } }\n @keyframes eth-motion-stream-cursor { 0%, 46% { opacity: 1; } 47%, 100% { opacity: 0; } }\n .eth-motion-streaming-text {\n align-items: baseline;\n color: var(--cds-text-primary, #161616);\n display: inline-flex;\n font-family: var(--cds-font-family, \"IBM Plex Sans\", system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif);\n font-size: inherit;\n line-height: inherit;\n max-inline-size: 100%;\n min-inline-size: 0;\n overflow-wrap: anywhere;\n white-space: pre-wrap;\n }\n .eth-motion-streaming-text__content {\n min-inline-size: 0;\n }\n .eth-motion-streaming-text__cursor {\n background: var(--cds-interactive, #0f62fe);\n block-size: 1em;\n display: inline-block;\n flex: 0 0 auto;\n inline-size: 2px;\n margin-inline-start: .125rem;\n transform: translateY(.125em);\n }\n .eth-motion-streaming-text--streaming .eth-motion-streaming-text__cursor {\n animation: eth-motion-stream-cursor 1s steps(1, end) infinite;\n }\n .eth-motion-streaming-text--complete .eth-motion-streaming-text__cursor {\n inline-size: 0;\n margin-inline-start: 0;\n opacity: 0;\n }\n .eth-motion-pipeline-flow {\n color: var(--cds-text-primary, #161616);\n display: block;\n font-family: var(--cds-font-family, \"IBM Plex Sans\", system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif);\n inline-size: fit-content;\n max-inline-size: 100%;\n }\n .eth-motion-pipeline-flow__svg {\n block-size: auto;\n display: block;\n font-family: inherit;\n max-inline-size: 100%;\n overflow: visible;\n }\n .eth-motion-pipeline-flow__edge {\n stroke-linecap: round;\n stroke-linejoin: round;\n vector-effect: non-scaling-stroke;\n }\n .eth-motion-pipeline-flow__card {\n fill: var(--cds-layer-02, #ffffff);\n shape-rendering: crispEdges;\n stroke: var(--cds-border-subtle, #e0e0e0);\n stroke-width: 1;\n vector-effect: non-scaling-stroke;\n }\n .eth-motion-pipeline-flow__node--active .eth-motion-pipeline-flow__card {\n fill: var(--cds-layer-01, #f4f4f4);\n stroke: var(--cds-border-strong, #8d8d8d);\n }\n .eth-motion-pipeline-flow__stripe {\n shape-rendering: crispEdges;\n }\n .eth-motion-pipeline-flow__pulse {\n animation: eth-motion-flow-node-pulse 1.3s var(--cds-productive-standard-easing, cubic-bezier(.2, 0, .38, .9)) infinite;\n vector-effect: non-scaling-stroke;\n }\n .eth-motion-pipeline-flow__dot {\n stroke: var(--cds-layer-02, #ffffff);\n stroke-width: 2;\n vector-effect: non-scaling-stroke;\n }\n .eth-motion-pipeline-flow__label {\n fill: var(--cds-text-primary, #161616);\n font-size: 13px;\n font-weight: 600;\n }\n .eth-motion-pipeline-flow__status {\n fill: var(--cds-text-secondary, #525252);\n font-size: 11px;\n }\n .eth-motion-pipeline-flow__empty {\n fill: var(--cds-text-secondary, #525252);\n font-size: 13px;\n }\n .eth-motion-pipeline-flow__fallback {\n block-size: 1px;\n clip: rect(0 0 0 0);\n clip-path: inset(50%);\n inline-size: 1px;\n margin: 0;\n overflow: hidden;\n padding: 0;\n position: absolute;\n white-space: nowrap;\n }\n .eth-motion-dag-status {\n color: var(--cds-text-primary, #161616);\n display: block;\n max-inline-size: 100%;\n }\n .eth-motion-dag-status__svg {\n block-size: auto;\n display: block;\n font-family: var(--cds-font-family, \"IBM Plex Sans\", system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif);\n max-inline-size: 100%;\n overflow: visible;\n }\n .eth-motion-dag-status__edge {\n stroke-linecap: round;\n stroke-linejoin: round;\n vector-effect: non-scaling-stroke;\n }\n .eth-motion-dag-status__card {\n shape-rendering: crispEdges;\n stroke-width: 1;\n vector-effect: non-scaling-stroke;\n }\n .eth-motion-dag-status__change-ring {\n animation: eth-motion-status-ring 700ms var(--cds-productive-standard-easing, cubic-bezier(.2, 0, .38, .9)) 1;\n stroke-dasharray: 4 4;\n stroke-width: 1;\n vector-effect: non-scaling-stroke;\n }\n .eth-motion-dag-status__label {\n fill: var(--cds-text-primary, #161616);\n font-size: 13px;\n font-weight: 600;\n }\n .eth-motion-dag-status__status {\n fill: var(--cds-text-secondary, #525252);\n font-size: 11px;\n }\n .eth-motion-dag-status__fallback {\n block-size: 1px;\n clip: rect(0 0 0 0);\n clip-path: inset(50%);\n inline-size: 1px;\n margin: 0;\n overflow: hidden;\n padding: 0;\n position: absolute;\n white-space: nowrap;\n }\n .eth-motion-sync-progress {\n --eth-motion-sync-accent: var(--cds-interactive, #0f62fe);\n --eth-motion-sync-accent-soft: var(--cds-highlight, #edf5ff);\n\n box-sizing: border-box;\n color: var(--cds-text-primary, #161616);\n font-family: var(--cds-font-family, \"IBM Plex Sans\", system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif);\n line-height: 1.2857;\n max-inline-size: 100%;\n min-inline-size: 0;\n }\n .eth-motion-sync-progress *,\n .eth-motion-sync-progress *::before,\n .eth-motion-sync-progress *::after {\n box-sizing: border-box;\n }\n .eth-motion-sync-progress--compact {\n align-items: center;\n background: var(--cds-layer-01, #ffffff);\n border: 1px solid var(--cds-border-subtle-01, var(--cds-border-subtle, #e0e0e0));\n border-inline-start: 3px solid var(--eth-motion-sync-accent);\n display: inline-flex;\n gap: var(--cds-spacing-03, .5rem);\n inline-size: fit-content;\n min-block-size: 2rem;\n padding: .375rem .75rem .375rem .625rem;\n vertical-align: middle;\n }\n .eth-motion-sync-progress--detailed {\n align-items: stretch;\n background: var(--cds-layer-01, #ffffff);\n border: 1px solid var(--cds-border-subtle-01, var(--cds-border-subtle, #e0e0e0));\n border-inline-start: 4px solid var(--eth-motion-sync-accent);\n display: grid;\n grid-template-columns: 1.5rem minmax(0, 1fr);\n inline-size: 100%;\n max-inline-size: 52rem;\n min-block-size: 7.5rem;\n }\n .eth-motion-sync-progress__indicator {\n align-items: center;\n color: var(--eth-motion-sync-accent);\n display: inline-flex;\n flex: 0 0 auto;\n inline-size: 1.125rem;\n justify-content: center;\n }\n .eth-motion-sync-progress--detailed .eth-motion-sync-progress__indicator {\n align-items: start;\n inline-size: auto;\n justify-content: center;\n padding-block-start: var(--cds-spacing-05, 1rem);\n padding-inline-start: var(--cds-spacing-04, .75rem);\n }\n .eth-motion-sync-progress__spinner,\n .eth-motion-sync-progress__glyph {\n block-size: 1rem;\n border-radius: 50%;\n display: inline-block;\n inline-size: 1rem;\n }\n .eth-motion-sync-progress__spinner {\n animation: eth-motion-spin 850ms linear infinite;\n border: 2px solid var(--cds-border-subtle-01, #c6c6c6);\n border-block-start-color: var(--eth-motion-sync-accent);\n }\n .eth-motion-sync-progress__glyph {\n background: var(--eth-motion-sync-accent);\n box-shadow: inset 0 0 0 3px var(--cds-layer-01, #ffffff);\n }\n .eth-motion-sync-progress__compact-copy {\n align-items: baseline;\n display: inline-flex;\n gap: var(--cds-spacing-03, .5rem);\n min-inline-size: 0;\n }\n .eth-motion-sync-progress__label {\n color: var(--cds-text-primary, #161616);\n font-size: var(--cds-body-compact-01-font-size, .875rem);\n font-weight: 600;\n line-height: var(--cds-body-compact-01-line-height, 1.2857);\n min-inline-size: 0;\n overflow-wrap: anywhere;\n }\n .eth-motion-sync-progress__compact-state {\n color: var(--cds-text-secondary, #525252);\n flex: 0 0 auto;\n font-size: var(--cds-label-01-font-size, .75rem);\n line-height: var(--cds-label-01-line-height, 1.3333);\n white-space: nowrap;\n }\n .eth-motion-sync-progress__body {\n display: grid;\n gap: var(--cds-spacing-04, .75rem);\n min-inline-size: 0;\n padding: var(--cds-spacing-05, 1rem);\n }\n .eth-motion-sync-progress__header {\n align-items: start;\n display: flex;\n gap: var(--cds-spacing-04, .75rem);\n justify-content: space-between;\n min-inline-size: 0;\n }\n .eth-motion-sync-progress__title-group {\n display: grid;\n gap: var(--cds-spacing-01, .125rem);\n min-inline-size: 0;\n }\n .eth-motion-sync-progress__eyebrow,\n .eth-motion-sync-progress__description,\n .eth-motion-sync-progress__progress-copy,\n .eth-motion-sync-progress__meta dt {\n color: var(--cds-text-secondary, #525252);\n font-size: var(--cds-label-01-font-size, .75rem);\n line-height: var(--cds-label-01-line-height, 1.3333);\n }\n .eth-motion-sync-progress__eyebrow,\n .eth-motion-sync-progress__meta dt {\n font-weight: 600;\n text-transform: uppercase;\n }\n .eth-motion-sync-progress__description {\n margin: 0;\n max-inline-size: 38rem;\n overflow-wrap: anywhere;\n }\n .eth-motion-sync-progress__chip {\n align-items: center;\n background: var(--eth-motion-sync-accent-soft);\n border: 1px solid var(--cds-border-subtle-01, var(--cds-border-subtle, #e0e0e0));\n color: var(--cds-text-primary, #161616);\n display: inline-flex;\n flex: 0 0 auto;\n font-size: var(--cds-label-01-font-size, .75rem);\n font-weight: 600;\n gap: var(--cds-spacing-02, .25rem);\n line-height: var(--cds-label-01-line-height, 1.3333);\n min-block-size: 1.5rem;\n padding: .1875rem var(--cds-spacing-03, .5rem);\n white-space: nowrap;\n }\n .eth-motion-sync-progress__chip-dot {\n background: var(--eth-motion-sync-accent);\n block-size: .5rem;\n border-radius: 50%;\n display: inline-block;\n inline-size: .5rem;\n }\n .eth-motion-sync-progress__meter {\n display: grid;\n gap: var(--cds-spacing-03, .5rem);\n min-inline-size: 0;\n }\n .eth-motion-sync-progress__track {\n background: var(--cds-border-subtle-01, var(--cds-border-subtle, #e0e0e0));\n block-size: .5rem;\n inline-size: 100%;\n overflow: hidden;\n position: relative;\n }\n .eth-motion-sync-progress__bar {\n background: var(--eth-motion-sync-accent);\n block-size: 100%;\n display: block;\n min-inline-size: .25rem;\n transition: inline-size var(--cds-duration-fast-02, 110ms)\n var(--cds-productive-standard-easing, cubic-bezier(.2, 0, .38, .9));\n }\n .eth-motion-sync-progress__bar--indeterminate {\n animation: eth-motion-sync-sweep 1.35s var(--cds-productive-standard-easing, cubic-bezier(.2, 0, .38, .9)) infinite;\n inline-size: 34%;\n }\n .eth-motion-sync-progress__progress-copy {\n font-variant-numeric: tabular-nums;\n justify-self: end;\n }\n .eth-motion-sync-progress__meta {\n background: var(--cds-layer-02, #f4f4f4);\n border-block-start: 1px solid var(--cds-border-subtle-01, var(--cds-border-subtle, #e0e0e0));\n display: grid;\n gap: 0;\n grid-column: 1 / -1;\n grid-template-columns: repeat(auto-fit, minmax(min(100%, 10rem), 1fr));\n margin: 0;\n min-inline-size: 0;\n }\n .eth-motion-sync-progress__meta-item {\n display: grid;\n gap: var(--cds-spacing-02, .25rem);\n min-inline-size: 0;\n padding: var(--cds-spacing-04, .75rem) var(--cds-spacing-05, 1rem);\n }\n .eth-motion-sync-progress__meta-item + .eth-motion-sync-progress__meta-item {\n border-inline-start: 1px solid var(--cds-border-subtle-01, var(--cds-border-subtle, #e0e0e0));\n }\n .eth-motion-sync-progress__meta dd {\n color: var(--cds-text-primary, #161616);\n font-size: var(--cds-body-compact-01-font-size, .875rem);\n font-weight: 600;\n line-height: var(--cds-body-compact-01-line-height, 1.2857);\n margin: 0;\n min-inline-size: 0;\n overflow-wrap: anywhere;\n }\n .eth-motion-sync-progress.eth-motion-reduced .eth-motion-sync-progress__bar--indeterminate {\n animation: none;\n inline-size: 38%;\n }\n .eth-motion-skeleton-loading {\n color: var(--cds-text-primary, #161616);\n display: block;\n font-family: var(--cds-font-family, \"IBM Plex Sans\", system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif);\n inline-size: 100%;\n max-inline-size: 100%;\n min-inline-size: 0;\n }\n .eth-motion-skeleton-loading__surface {\n background: var(--cds-layer-01, #f4f4f4);\n border: 1px solid var(--cds-border-subtle, #e0e0e0);\n display: grid;\n inline-size: 100%;\n min-inline-size: 0;\n overflow: hidden;\n }\n .eth-motion-skeleton-loading__block {\n background: var(--cds-skeleton-background, #e0e0e0);\n block-size: .875rem;\n display: block;\n inline-size: 100%;\n min-inline-size: .75rem;\n }\n .eth-motion-skeleton-loading:not(.eth-motion-reduced) .eth-motion-skeleton-loading__block {\n animation: eth-motion-shimmer 1.2s var(--cds-productive-standard-easing, cubic-bezier(.2, 0, .38, .9)) infinite;\n background-image: linear-gradient(\n 90deg,\n var(--cds-skeleton-background, #e0e0e0) 0%,\n var(--cds-skeleton-element, #f4f4f4) 46%,\n var(--cds-skeleton-background, #e0e0e0) 82%\n );\n background-size: 200% 100%;\n }\n .eth-motion-skeleton-loading__surface--article {\n gap: var(--cds-spacing-05, 1rem);\n padding: var(--cds-spacing-05, 1rem);\n }\n .eth-motion-skeleton-loading__article-header,\n .eth-motion-skeleton-loading__article-body,\n .eth-motion-skeleton-loading__card-body,\n .eth-motion-skeleton-loading__list-copy {\n display: grid;\n gap: var(--cds-spacing-03, .5rem);\n min-inline-size: 0;\n }\n .eth-motion-skeleton-loading__article-body,\n .eth-motion-skeleton-loading__card-body {\n gap: var(--cds-spacing-04, .75rem);\n }\n .eth-motion-skeleton-loading__block--eyebrow {\n block-size: .5rem;\n }\n .eth-motion-skeleton-loading__block--title {\n block-size: 1.125rem;\n }\n .eth-motion-skeleton-loading__block--caption,\n .eth-motion-skeleton-loading__block--column {\n block-size: .625rem;\n }\n .eth-motion-skeleton-loading__surface--card {\n background: var(--cds-layer-01, #ffffff);\n }\n .eth-motion-skeleton-loading__block--media {\n block-size: 6rem;\n inline-size: 100%;\n }\n .eth-motion-skeleton-loading__card-body {\n padding: var(--cds-spacing-05, 1rem);\n }\n .eth-motion-skeleton-loading__card-metrics {\n border-block-start: 1px solid var(--cds-border-subtle, #e0e0e0);\n display: grid;\n gap: var(--cds-spacing-05, 1rem);\n grid-template-columns: repeat(3, minmax(0, 1fr));\n padding: var(--cds-spacing-04, .75rem) var(--cds-spacing-05, 1rem);\n }\n .eth-motion-skeleton-loading__block--metric {\n block-size: 1.5rem;\n }\n .eth-motion-skeleton-loading__list-row {\n align-items: center;\n display: grid;\n gap: var(--cds-spacing-04, .75rem);\n grid-template-columns: 2rem minmax(0, 1fr) minmax(3rem, 5rem);\n min-block-size: 4rem;\n padding: var(--cds-spacing-04, .75rem);\n }\n .eth-motion-skeleton-loading__list-row + .eth-motion-skeleton-loading__list-row {\n border-block-start: 1px solid var(--cds-border-subtle, #e0e0e0);\n }\n .eth-motion-skeleton-loading__block--avatar {\n block-size: 2rem;\n inline-size: 2rem;\n }\n .eth-motion-skeleton-loading__block--tag {\n block-size: 1.25rem;\n justify-self: end;\n }\n .eth-motion-skeleton-loading__surface--table {\n background: var(--cds-layer-01, #ffffff);\n }\n .eth-motion-skeleton-loading__table-header,\n .eth-motion-skeleton-loading__table-row {\n display: grid;\n gap: var(--cds-spacing-05, 1rem);\n min-inline-size: 0;\n }\n .eth-motion-skeleton-loading__table-header {\n align-items: center;\n background: var(--cds-layer-02, #f4f4f4);\n min-block-size: 2.5rem;\n padding: var(--cds-spacing-04, .75rem);\n }\n .eth-motion-skeleton-loading__table-row {\n align-items: center;\n border-block-start: 1px solid var(--cds-border-subtle, #e0e0e0);\n min-block-size: 3rem;\n padding: var(--cds-spacing-04, .75rem);\n }\n .eth-motion-skeleton-loading__block--cell {\n block-size: .75rem;\n }\n @media (max-width: 42rem) {\n .eth-motion-sync-progress__header {\n align-items: stretch;\n flex-direction: column;\n }\n .eth-motion-sync-progress__chip {\n align-self: start;\n }\n .eth-motion-sync-progress__meta {\n grid-template-columns: minmax(0, 1fr);\n }\n .eth-motion-sync-progress__meta-item + .eth-motion-sync-progress__meta-item {\n border-block-start: 1px solid var(--cds-border-subtle-01, var(--cds-border-subtle, #e0e0e0));\n border-inline-start: 0;\n }\n .eth-motion-skeleton-loading__list-row {\n grid-template-columns: 2rem minmax(0, 1fr);\n }\n .eth-motion-skeleton-loading__block--tag {\n display: none;\n }\n .eth-motion-skeleton-loading__table-header,\n .eth-motion-skeleton-loading__table-row {\n gap: var(--cds-spacing-04, .75rem);\n }\n }\n .eth-motion-status-change {\n --eth-motion-status-color: var(--cds-interactive, #0f62fe);\n --eth-motion-status-previous-color: var(--cds-text-secondary, #525252);\n\n align-items: center;\n background: var(--cds-layer-01, #ffffff);\n border: 1px solid var(--cds-border-subtle-01, var(--cds-border-subtle, #e0e0e0));\n border-inline-start: 3px solid var(--eth-motion-status-color);\n border-radius: var(--cds-radius-sm, 2px);\n box-sizing: border-box;\n color: var(--cds-text-primary, #161616);\n display: inline-flex;\n font-family: var(--cds-font-family, \"IBM Plex Sans\", system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif);\n gap: var(--cds-spacing-04, .75rem);\n inline-size: fit-content;\n line-height: 1.2857;\n max-inline-size: 100%;\n min-block-size: 2.5rem;\n padding: .5rem .75rem .5rem .625rem;\n vertical-align: middle;\n }\n .eth-motion-status-change--changed {\n animation: eth-motion-pulse 650ms var(--cds-productive-standard-easing, cubic-bezier(.2, 0, .38, .9)) 1;\n background: var(--cds-layer-02, #f4f4f4);\n }\n .eth-motion-status-change__indicator {\n align-items: center;\n display: inline-flex;\n flex: 0 0 auto;\n inline-size: 2.5rem;\n }\n .eth-motion-status-change__previous-dot,\n .eth-motion-status-change__current-dot {\n border-radius: 50%;\n box-sizing: border-box;\n display: inline-block;\n flex: 0 0 auto;\n }\n .eth-motion-status-change__previous-dot {\n background: var(--eth-motion-status-previous-color);\n block-size: .5rem;\n inline-size: .5rem;\n opacity: .64;\n }\n .eth-motion-status-change__connector {\n background: var(--cds-border-strong-01, #8d8d8d);\n block-size: 1px;\n flex: 1 1 auto;\n margin-inline: .25rem;\n min-inline-size: .625rem;\n }\n .eth-motion-status-change__current-dot {\n background: var(--eth-motion-status-color);\n block-size: .625rem;\n box-shadow: 0 0 0 2px var(--cds-layer-01, #ffffff);\n inline-size: .625rem;\n position: relative;\n }\n .eth-motion-status-change--changed .eth-motion-status-change__current-dot::after {\n animation: eth-motion-status-halo 700ms var(--cds-productive-standard-easing, cubic-bezier(.2, 0, .38, .9)) 1;\n border: 1px solid var(--eth-motion-status-color);\n border-radius: 50%;\n content: \"\";\n inset: -.375rem;\n opacity: 0;\n position: absolute;\n }\n .eth-motion-status-change__content {\n display: grid;\n gap: var(--cds-spacing-01, .125rem);\n min-inline-size: 0;\n }\n .eth-motion-status-change__label {\n color: var(--cds-text-primary, #161616);\n font-size: var(--cds-body-compact-01-font-size, .875rem);\n font-weight: 600;\n line-height: var(--cds-body-compact-01-line-height, 1.2857);\n min-inline-size: 0;\n overflow-wrap: anywhere;\n }\n .eth-motion-status-change__state {\n align-items: center;\n color: var(--cds-text-secondary, #525252);\n display: flex;\n flex-wrap: wrap;\n font-size: var(--cds-label-01-font-size, .75rem);\n gap: var(--cds-spacing-02, .25rem);\n line-height: var(--cds-label-01-line-height, 1.3333);\n min-inline-size: 0;\n }\n .eth-motion-status-change__previous,\n .eth-motion-status-change__current {\n overflow-wrap: anywhere;\n }\n .eth-motion-status-change__current {\n color: var(--cds-text-primary, #161616);\n font-weight: 600;\n }\n .eth-motion-status-change__separator {\n color: var(--cds-text-secondary, #525252);\n }\n .eth-motion-attention-pulse {\n --eth-motion-attention-color: var(--cds-support-warning, #f1c21b);\n --eth-motion-attention-border: #8a6a00;\n --eth-motion-attention-ink: var(--cds-text-primary, #161616);\n --eth-motion-attention-repeat: infinite;\n\n align-items: center;\n background: var(--cds-layer-02, #ffffff);\n border: 1px solid var(--cds-border-subtle, #e0e0e0);\n border-radius: var(--cds-radius-sm, 2px);\n box-shadow: inset 3px 0 0 var(--eth-motion-attention-color);\n color: var(--cds-text-primary, #161616);\n display: inline-flex;\n font-size: .875rem;\n font-weight: 500;\n gap: var(--cds-spacing-03, .5rem);\n inline-size: fit-content;\n line-height: 1.2857;\n max-inline-size: 100%;\n min-block-size: 2rem;\n padding: .375rem .75rem .375rem .625rem;\n vertical-align: middle;\n }\n .eth-motion-attention-pulse__marker {\n align-items: center;\n block-size: 1rem;\n display: inline-flex;\n flex: 0 0 auto;\n inline-size: 1rem;\n justify-content: center;\n position: relative;\n }\n .eth-motion-attention-pulse__marker::before {\n animation: eth-motion-attention-ring 1.4s var(--cds-productive-standard-easing, cubic-bezier(.2, 0, .38, .9)) var(--eth-motion-attention-repeat);\n border: 1px solid var(--eth-motion-attention-color);\n border-radius: 50%;\n content: \"\";\n inset: -.125rem;\n position: absolute;\n }\n .eth-motion-attention-pulse__dot {\n align-items: center;\n background: var(--eth-motion-attention-color);\n block-size: 1rem;\n border: 1px solid var(--eth-motion-attention-border);\n border-radius: 50%;\n color: var(--eth-motion-attention-ink);\n display: inline-flex;\n font-size: .6875rem;\n font-weight: 700;\n inline-size: 1rem;\n justify-content: center;\n line-height: 1;\n position: relative;\n }\n .eth-motion-attention-pulse__label {\n min-inline-size: 0;\n overflow-wrap: anywhere;\n }\n .eth-motion-attention-pulse.eth-motion-reduced .eth-motion-attention-pulse__marker::before {\n animation: none;\n opacity: .32;\n transform: scale(1);\n }\n .eth-motion-document-lock {\n --eth-motion-document-lock-accent: var(--cds-interactive, #0f62fe);\n\n align-items: center;\n background: var(--cds-layer-01, #ffffff);\n border: 1px solid var(--cds-border-subtle-01, var(--cds-border-subtle, #e0e0e0));\n border-inline-start: 3px solid var(--cds-border-strong-01, #8d8d8d);\n box-sizing: border-box;\n color: var(--cds-text-primary, #161616);\n display: inline-flex;\n font-family: var(--cds-font-family, \"IBM Plex Sans\", system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif);\n gap: var(--cds-spacing-03, .5rem);\n inline-size: fit-content;\n line-height: 1.2857;\n max-inline-size: 100%;\n min-block-size: 2.5rem;\n padding: .375rem .75rem .375rem .625rem;\n vertical-align: middle;\n }\n .eth-motion-document-lock--active {\n background: var(--cds-layer-02, #f4f4f4);\n border-inline-start-color: var(--eth-motion-document-lock-accent);\n }\n .eth-motion-document-lock__indicator {\n align-items: center;\n block-size: 1.25rem;\n color: var(--cds-icon-secondary, #525252);\n display: inline-flex;\n flex: 0 0 auto;\n inline-size: 1.25rem;\n justify-content: center;\n position: relative;\n }\n .eth-motion-document-lock--active .eth-motion-document-lock__indicator {\n color: var(--eth-motion-document-lock-accent);\n }\n .eth-motion-document-lock__pulse {\n border: 1px solid currentColor;\n border-radius: 50%;\n inset: .125rem;\n opacity: 0;\n position: absolute;\n }\n .eth-motion-document-lock--active .eth-motion-document-lock__pulse {\n animation: eth-motion-lock-pulse 1.45s var(--cds-productive-standard-easing, cubic-bezier(.2, 0, .38, .9)) infinite;\n opacity: .34;\n }\n .eth-motion-document-lock__icon {\n block-size: 1rem;\n inline-size: 1rem;\n position: relative;\n }\n .eth-motion-document-lock__content {\n display: grid;\n gap: 0;\n min-inline-size: 0;\n }\n .eth-motion-document-lock__state {\n color: var(--cds-text-secondary, #525252);\n font-size: .75rem;\n font-weight: 600;\n line-height: 1.3333;\n }\n .eth-motion-document-lock--active .eth-motion-document-lock__state {\n color: var(--cds-link-primary, #0f62fe);\n }\n .eth-motion-document-lock__owner {\n color: var(--cds-text-primary, #161616);\n font-size: .875rem;\n font-weight: 600;\n line-height: 1.2857;\n overflow-wrap: anywhere;\n }\n .eth-motion-document-lock.eth-motion-reduced .eth-motion-document-lock__pulse {\n animation: none;\n opacity: .18;\n transform: scale(1);\n }\n .eth-motion-step-completion {\n align-items: start;\n color: var(--cds-text-primary, #161616);\n display: inline-grid;\n font-family: var(--cds-font-family, \"IBM Plex Sans\", system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif);\n font-size: var(--cds-body-compact-01-font-size, .875rem);\n gap: var(--cds-spacing-03, .5rem);\n grid-template-columns: 1.5rem minmax(0, 1fr);\n line-height: var(--cds-body-compact-01-line-height, 1.4286);\n max-inline-size: 100%;\n min-inline-size: 0;\n vertical-align: middle;\n }\n .eth-motion-step-completion__marker {\n align-items: center;\n background: var(--cds-layer-01, #ffffff);\n block-size: 1.5rem;\n border: 1px solid var(--cds-border-strong-01, #8d8d8d);\n border-radius: 50%;\n color: var(--cds-icon-secondary, #525252);\n display: inline-flex;\n flex: 0 0 auto;\n inline-size: 1.5rem;\n justify-content: center;\n margin-block-start: .0625rem;\n }\n .eth-motion-step-completion--completed .eth-motion-step-completion__marker {\n animation: eth-motion-check 220ms var(--cds-productive-standard-easing, cubic-bezier(.2, 0, .38, .9)) 1;\n background: var(--cds-support-success, #24a148);\n border-color: var(--cds-support-success, #24a148);\n color: var(--cds-text-on-color, #ffffff);\n }\n .eth-motion-step-completion--current .eth-motion-step-completion__marker {\n animation: eth-motion-step-current 1.25s var(--cds-productive-standard-easing, cubic-bezier(.2, 0, .38, .9)) infinite;\n background: var(--cds-highlight, #edf5ff);\n border-color: var(--cds-interactive, #0f62fe);\n color: var(--cds-interactive, #0f62fe);\n }\n .eth-motion-step-completion--pending .eth-motion-step-completion__marker {\n background: var(--cds-layer-02, #f4f4f4);\n border-color: var(--cds-border-strong-01, #8d8d8d);\n color: var(--cds-icon-secondary, #525252);\n }\n .eth-motion-step-completion__check {\n block-size: 1rem;\n display: block;\n inline-size: 1rem;\n }\n .eth-motion-step-completion__check-path {\n animation: eth-motion-step-check 260ms var(--cds-productive-standard-easing, cubic-bezier(.2, 0, .38, .9)) 90ms both;\n fill: none;\n stroke: currentColor;\n stroke-dasharray: 18;\n stroke-dashoffset: 18;\n stroke-linecap: round;\n stroke-linejoin: round;\n stroke-width: 2;\n }\n .eth-motion-step-completion__dot {\n background: currentColor;\n block-size: .4375rem;\n border-radius: 50%;\n display: block;\n inline-size: .4375rem;\n }\n .eth-motion-step-completion--current .eth-motion-step-completion__dot {\n block-size: .5rem;\n inline-size: .5rem;\n }\n .eth-motion-step-completion__content {\n display: grid;\n gap: .125rem;\n min-inline-size: 0;\n }\n .eth-motion-step-completion__label {\n color: var(--cds-text-primary, #161616);\n font-weight: 600;\n overflow-wrap: anywhere;\n }\n .eth-motion-step-completion__state {\n color: var(--cds-text-secondary, #525252);\n font-size: var(--cds-label-01-font-size, .75rem);\n font-weight: 600;\n line-height: var(--cds-label-01-line-height, 1.3333);\n }\n .eth-motion-step-completion--completed .eth-motion-step-completion__state {\n color: var(--cds-support-success-strong, #198038);\n }\n .eth-motion-step-completion--current .eth-motion-step-completion__state {\n color: var(--cds-link-primary, #0f62fe);\n }\n .eth-motion-step-completion__description {\n color: var(--cds-text-secondary, #525252);\n font-size: var(--cds-label-01-font-size, .75rem);\n line-height: var(--cds-label-01-line-height, 1.3333);\n overflow-wrap: anywhere;\n }\n .eth-motion-step-completion.eth-motion-reduced .eth-motion-step-completion__check-path {\n stroke-dashoffset: 0;\n }\n .eth-motion-reduced,\n .eth-motion-reduced * { animation: none !important; transition: none !important; }\n `}</style>\n );\n}\n\nexport function statusColor(status: EthOperationalStatus) {\n switch (status) {\n case \"succeeded\":\n case \"completed\":\n case \"synced\":\n return \"#24a148\";\n case \"failed\":\n case \"blocked\":\n return \"#da1e28\";\n case \"warning\":\n case \"pending-approval\":\n case \"approval-required\":\n return \"#f1c21b\";\n case \"running\":\n case \"in-progress\":\n case \"active\":\n return \"#0f62fe\";\n case \"paused\":\n case \"stale\":\n return \"#8d8d8d\";\n default:\n return \"#6f6f6f\";\n }\n}\n\nexport function severityColor(severity: EthSeverity | undefined) {\n switch (severity) {\n case \"danger\":\n return \"#da1e28\";\n case \"warning\":\n return \"#f1c21b\";\n case \"success\":\n return \"#24a148\";\n case \"info\":\n return \"#0f62fe\";\n default:\n return \"#6f6f6f\";\n }\n}\n","import * as React from \"react\";\nimport type { AgentThinkingAnimationProps } from \"./types\";\nimport { MotionStyles, usePrefersReducedMotion } from \"./motionUtils\";\n\nexport function AgentThinkingAnimation({\n label = \"Agent thinking\",\n className,\n style,\n ...props\n}: AgentThinkingAnimationProps) {\n const reduced = usePrefersReducedMotion();\n const classes = [\n \"eth-motion-agent-thinking\",\n reduced ? \"eth-motion-reduced\" : undefined,\n className\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <span\n {...props}\n className={classes}\n role=\"status\"\n aria-label={label}\n data-eth-component=\"AgentThinkingAnimation\"\n style={{\n alignItems: \"center\",\n color: \"var(--cds-interactive, #0f62fe)\",\n display: \"inline-flex\",\n justifyContent: \"center\",\n lineHeight: 1,\n minBlockSize: 16,\n verticalAlign: \"middle\",\n ...style\n }}\n >\n <MotionStyles />\n <span aria-hidden style={{ alignItems: \"center\", display: \"inline-flex\", gap: 4 }}>\n <span className=\"eth-motion-dot\" style={dotStyle(reduced, 0)} />\n <span className=\"eth-motion-dot\" style={dotStyle(reduced, 1)} />\n <span className=\"eth-motion-dot\" style={dotStyle(reduced, 2)} />\n </span>\n </span>\n );\n}\n\nfunction dotStyle(reduced: boolean, index: number): React.CSSProperties {\n return {\n display: \"inline-block\",\n width: 6,\n height: 6,\n borderRadius: \"50%\",\n background: \"currentColor\",\n flex: \"0 0 auto\",\n animation: reduced ? undefined : \"eth-motion-dot 1s ease-in-out infinite\",\n animationDelay: reduced ? undefined : `${index * 120}ms`\n };\n}\n","import * as React from \"react\";\nimport type { AttentionPulseProps } from \"./types\";\nimport { MotionStyles, severityColor, usePrefersReducedMotion } from \"./motionUtils\";\n\nexport function AttentionPulse({\n severity = \"warning\",\n maxRepeats,\n className,\n children,\n role = \"status\",\n style,\n \"aria-label\": ariaLabel,\n ...props\n}: AttentionPulseProps) {\n const reduced = usePrefersReducedMotion();\n const hasLabel = React.Children.count(children) > 0;\n const classes = [\n \"eth-motion-attention-pulse\",\n `eth-motion-attention-pulse--${severity}`,\n reduced ? \"eth-motion-reduced\" : null,\n className\n ]\n .filter(Boolean)\n .join(\" \");\n const attentionStyle = {\n \"--eth-motion-attention-color\": severityColor(severity),\n \"--eth-motion-attention-border\": severityBorderColor(severity),\n \"--eth-motion-attention-ink\": severityInkColor(severity),\n \"--eth-motion-attention-repeat\": String(maxRepeats ?? \"infinite\"),\n ...style\n } as React.CSSProperties;\n\n return (\n <span\n {...props}\n aria-label={ariaLabel ?? (hasLabel ? undefined : \"Attention required\")}\n className={classes}\n data-eth-component=\"AttentionPulse\"\n role={role}\n style={attentionStyle}\n >\n <MotionStyles />\n <span className=\"eth-motion-attention-pulse__marker\" aria-hidden=\"true\">\n <span className=\"eth-motion-attention-pulse__dot\">!</span>\n </span>\n {hasLabel ? <span className=\"eth-motion-attention-pulse__label\">{children}</span> : null}\n </span>\n );\n}\n\nfunction severityBorderColor(severity: AttentionPulseProps[\"severity\"]) {\n return severity === \"warning\" ? \"#8a6a00\" : severityColor(severity);\n}\n\nfunction severityInkColor(severity: AttentionPulseProps[\"severity\"]) {\n return severity === \"warning\" ? \"#161616\" : \"#ffffff\";\n}\n","import * as React from \"react\";\nimport type { DAGStatusTransitionProps, MotionFlowNode } from \"./types\";\nimport { MotionStyles, statusColor, usePrefersReducedMotion } from \"./motionUtils\";\n\nexport function DAGStatusTransition({\n nodes,\n previousNodes,\n edges = [],\n className,\n ...props\n}: DAGStatusTransitionProps) {\n const reduced = usePrefersReducedMotion();\n const previousStatus = new Map(previousNodes?.map((node) => [node.id, node.status]) ?? []);\n const positions = layoutDag(nodes, edges);\n const frame = viewBoxFor(nodes, positions);\n const titleId = React.useId();\n const descriptionId = React.useId();\n const markerBaseId = React.useId();\n const changedCount = nodes.filter(\n (node) => previousStatus.has(node.id) && previousStatus.get(node.id) !== node.status\n ).length;\n\n return (\n <section\n {...props}\n className={`eth-motion-dag-status ${reduced ? \"eth-motion-reduced\" : \"\"} ${className ?? \"\"}`}\n data-eth-component=\"DAGStatusTransition\"\n aria-label=\"DAG status transition\"\n >\n <MotionStyles />\n <svg\n className=\"eth-motion-dag-status__svg\"\n viewBox={frame.viewBox}\n width={frame.width}\n height={frame.height}\n role=\"img\"\n aria-labelledby={`${titleId} ${descriptionId}`}\n >\n <title id={titleId}>DAG status transition</title>\n <desc id={descriptionId}>\n {`${nodes.length} nodes, ${edges.length} edges, ${changedCount} changed node statuses.`}\n </desc>\n <defs>\n {edges.map((edge, index) => {\n const to = positions.get(edge.to);\n if (!to) return null;\n const color = edgeColor(edge, nodes.find((node) => node.id === edge.to)?.status);\n return (\n <marker\n key={`${edge.from}-${edge.to}-${index}`}\n id={markerIdFromUseId(markerBaseId, index)}\n markerWidth=\"8\"\n markerHeight=\"8\"\n refX=\"7\"\n refY=\"3\"\n orient=\"auto\"\n markerUnits=\"strokeWidth\"\n >\n <path d=\"M0,0 L0,6 L7,3 z\" fill={color} />\n </marker>\n );\n })}\n </defs>\n {edges.map((edge, index) => {\n const from = positions.get(edge.from);\n const to = positions.get(edge.to);\n if (!from || !to) return null;\n const color = edgeColor(edge, nodes.find((node) => node.id === edge.to)?.status);\n const active = edge.active && !reduced;\n return (\n <path\n key={`${edge.from}-${edge.to}-${index}`}\n className=\"eth-motion-dag-status__edge\"\n d={edgePath(from, to)}\n fill=\"none\"\n stroke={color}\n strokeWidth={active ? 2 : 1.25}\n strokeDasharray={active ? \"6 6\" : undefined}\n markerEnd={`url(#${markerIdFromUseId(markerBaseId, index)})`}\n style={\n active ? { animation: \"eth-motion-flow-dash 900ms linear infinite\" } : undefined\n }\n />\n );\n })}\n {nodes.map((node) => {\n const point = positions.get(node.id);\n if (!point) return null;\n const previous = previousStatus.get(node.id);\n const changed = previous !== undefined && previous !== node.status;\n const statusText = changed\n ? `${compactLabelForStatus(previous)} -> ${compactLabelForStatus(node.status)}`\n : labelForStatus(node.status);\n return (\n <g\n key={node.id}\n className={`eth-motion-dag-status__node ${changed ? \"eth-motion-dag-status__node--changed\" : \"\"}`}\n transform={`translate(${point.x}, ${point.y})`}\n >\n {changed ? (\n <rect\n className=\"eth-motion-dag-status__change-ring\"\n x={-NODE_WIDTH / 2 - 4}\n y={-NODE_HEIGHT / 2 - 4}\n width={NODE_WIDTH + 8}\n height={NODE_HEIGHT + 8}\n rx={0}\n fill=\"none\"\n stroke={statusColor(node.status)}\n />\n ) : null}\n <rect\n className=\"eth-motion-dag-status__card\"\n x={-NODE_WIDTH / 2}\n y={-NODE_HEIGHT / 2}\n width={NODE_WIDTH}\n height={NODE_HEIGHT}\n rx={0}\n fill=\"var(--cds-layer-02, #ffffff)\"\n stroke=\"var(--cds-border-subtle, #e0e0e0)\"\n />\n <rect\n x={-NODE_WIDTH / 2}\n y={-NODE_HEIGHT / 2}\n width={4}\n height={NODE_HEIGHT}\n rx={0}\n fill={statusColor(node.status)}\n />\n <circle cx={-NODE_WIDTH / 2 + 20} cy={-9} r={4.5} fill={statusColor(node.status)} />\n <text className=\"eth-motion-dag-status__label\" x={-NODE_WIDTH / 2 + 34} y={-7}>\n {truncate(node.label, 18)}\n </text>\n <text className=\"eth-motion-dag-status__status\" x={-NODE_WIDTH / 2 + 34} y={15}>\n {truncate(statusText, 24)}\n </text>\n <title>\n {changed && previous\n ? `${node.label}: ${labelForStatus(previous)} to ${labelForStatus(node.status)}`\n : `${node.label}: ${labelForStatus(node.status)}`}\n </title>\n </g>\n );\n })}\n </svg>\n <ol className=\"eth-motion-dag-status__fallback\">\n {nodes.map((node) => {\n const previous = previousStatus.get(node.id);\n const changed = previous !== undefined && previous !== node.status;\n return (\n <li key={node.id}>\n {changed && previous\n ? `${node.label}: ${labelForStatus(previous)} to ${labelForStatus(node.status)}`\n : `${node.label}: ${labelForStatus(node.status)}`}\n </li>\n );\n })}\n </ol>\n </section>\n );\n}\n\nconst NODE_WIDTH = 160;\nconst NODE_HEIGHT = 64;\nconst NODE_GAP_X = 190;\nconst NODE_GAP_Y = 92;\n\nfunction layoutDag(\n nodes: MotionFlowNode[],\n edges: NonNullable<DAGStatusTransitionProps[\"edges\"]> = []\n) {\n const map = new Map<string, { x: number; y: number }>();\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, MotionFlowNode[]>();\n for (const node of nodes) {\n const rank = ranks.get(node.id) ?? 0;\n groups.set(rank, [...(groups.get(rank) ?? []), node]);\n }\n const maxRows = Math.max(1, ...Array.from(groups.values()).map((group) => group.length));\n\n nodes.forEach((node, index) => {\n const rank = ranks.get(node.id) ?? index;\n const group = groups.get(rank) ?? [node];\n const rowIndex = Math.max(\n 0,\n group.findIndex((candidate) => candidate.id === node.id)\n );\n const row = group.length === 1 && maxRows > 1 ? (maxRows - 1) / 2 : rowIndex;\n map.set(node.id, {\n x: node.x ?? 88 + rank * NODE_GAP_X,\n y: node.y ?? 64 + row * NODE_GAP_Y\n });\n });\n return map;\n}\n\nfunction viewBoxFor(nodes: MotionFlowNode[], positions: Map<string, { x: number; y: number }>) {\n if (!nodes.length) {\n return { viewBox: \"0 0 320 120\", width: 320, height: 120 };\n }\n\n const points = nodes\n .map((node) => positions.get(node.id))\n .filter((point): point is { x: number; y: number } => Boolean(point));\n const minX = Math.floor(Math.min(...points.map((point) => point.x)) - NODE_WIDTH / 2 - 24);\n const minY = Math.floor(Math.min(...points.map((point) => point.y)) - NODE_HEIGHT / 2 - 20);\n const maxX = Math.ceil(Math.max(...points.map((point) => point.x)) + NODE_WIDTH / 2 + 30);\n const maxY = Math.ceil(Math.max(...points.map((point) => point.y)) + NODE_HEIGHT / 2 + 20);\n const width = maxX - minX;\n const height = maxY - minY;\n return { viewBox: `${minX} ${minY} ${width} ${height}`, width, height };\n}\n\nfunction edgePath(from: { x: number; y: number }, to: { x: number; y: number }) {\n const horizontal = Math.abs(to.x - from.x) >= Math.abs(to.y - from.y);\n if (horizontal) {\n const direction = to.x >= from.x ? 1 : -1;\n const start = { x: from.x + (NODE_WIDTH / 2) * direction, y: from.y };\n const end = { x: to.x - (NODE_WIDTH / 2) * direction, y: to.y };\n const controlOffset = Math.max(32, Math.abs(end.x - start.x) * 0.5);\n return `M ${start.x} ${start.y} C ${start.x + controlOffset * direction} ${start.y}, ${end.x - controlOffset * direction} ${end.y}, ${end.x} ${end.y}`;\n }\n\n const direction = to.y >= from.y ? 1 : -1;\n const start = { x: from.x, y: from.y + (NODE_HEIGHT / 2) * direction };\n const end = { x: to.x, y: to.y - (NODE_HEIGHT / 2) * direction };\n const controlOffset = Math.max(28, Math.abs(end.y - start.y) * 0.5);\n return `M ${start.x} ${start.y} C ${start.x} ${start.y + controlOffset * direction}, ${end.x} ${end.y - controlOffset * direction}, ${end.x} ${end.y}`;\n}\n\nfunction edgeColor(\n edge: NonNullable<DAGStatusTransitionProps[\"edges\"]>[number],\n toStatus?: MotionFlowNode[\"status\"]\n) {\n if (edge.status) return statusColor(edge.status);\n if (edge.active) return \"var(--cds-interactive, #0f62fe)\";\n if (toStatus === \"failed\" || toStatus === \"blocked\") return statusColor(toStatus);\n return \"var(--cds-border-strong, #8d8d8d)\";\n}\n\nfunction markerIdFromUseId(id: string, index: number) {\n return `eth-motion-dag-arrow-${id.replace(/[^a-zA-Z0-9_-]/g, \"\")}-${index}`;\n}\n\nfunction labelForStatus(status: MotionFlowNode[\"status\"]) {\n switch (status) {\n case \"approval-required\":\n return \"Approval required\";\n case \"pending-approval\":\n return \"Pending approval\";\n case \"in-progress\":\n return \"In progress\";\n case \"not-started\":\n return \"Not started\";\n default:\n return status\n .split(\"-\")\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(\" \");\n }\n}\n\nfunction compactLabelForStatus(status: MotionFlowNode[\"status\"]) {\n switch (status) {\n case \"approval-required\":\n return \"Approval\";\n case \"pending-approval\":\n return \"Pending\";\n case \"in-progress\":\n return \"Progress\";\n case \"not-started\":\n return \"Not started\";\n default:\n return labelForStatus(status);\n }\n}\n\nfunction truncate(value: string, maxLength: number) {\n if (value.length <= maxLength) return value;\n return `${value.slice(0, Math.max(0, maxLength - 3))}...`;\n}\n","import * as React from \"react\";\nimport type { DocumentLockPulseProps } from \"./types\";\nimport { MotionStyles, usePrefersReducedMotion } from \"./motionUtils\";\n\nexport function DocumentLockPulse({\n lockedBy,\n active = true,\n className,\n children,\n role = \"status\",\n style,\n \"aria-label\": ariaLabel,\n ...props\n}: DocumentLockPulseProps) {\n const reduced = usePrefersReducedMotion();\n const owner = children ?? lockedBy ?? \"Document locked\";\n const ownerLabel = plainText(children ?? lockedBy);\n const classes = [\n \"eth-motion-document-lock\",\n active ? \"eth-motion-document-lock--active\" : \"eth-motion-document-lock--idle\",\n reduced ? \"eth-motion-reduced\" : undefined,\n className\n ]\n .filter(Boolean)\n .join(\" \");\n const defaultLabel = ownerLabel\n ? `Document lock ${active ? \"active\" : \"held\"} by ${ownerLabel}`\n : active\n ? \"Document lock active\"\n : \"Document locked\";\n\n return (\n <span\n {...props}\n aria-label={ariaLabel ?? defaultLabel}\n className={classes}\n data-eth-component=\"DocumentLockPulse\"\n role={role}\n style={style}\n >\n <MotionStyles />\n <span className=\"eth-motion-document-lock__indicator\" aria-hidden=\"true\">\n <span className=\"eth-motion-document-lock__pulse\" />\n <LockGlyph className=\"eth-motion-document-lock__icon\" />\n </span>\n <span className=\"eth-motion-document-lock__content\">\n <span className=\"eth-motion-document-lock__state\">\n {active ? \"Active edit\" : \"Lock held\"}\n </span>\n <span className=\"eth-motion-document-lock__owner\">{owner}</span>\n </span>\n </span>\n );\n}\n\nfunction LockGlyph(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props} aria-hidden=\"true\" focusable=\"false\" viewBox=\"0 0 16 16\">\n <path\n d=\"M5 7V5a3 3 0 0 1 6 0v2h1a1 1 0 0 1 1 1v5a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V8a1 1 0 0 1 1-1h1Zm1.5 0h3V5a1.5 1.5 0 0 0-3 0v2Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n}\n\nfunction plainText(value: React.ReactNode): string | undefined {\n if (typeof value === \"string\" || typeof value === \"number\") {\n return String(value);\n }\n return undefined;\n}\n","import * as React from \"react\";\nimport type { MotionFlowEdge, MotionFlowNode, PipelineFlowAnimationProps } from \"./types\";\nimport { MotionStyles, statusColor, usePrefersReducedMotion } from \"./motionUtils\";\n\nexport function PipelineFlowAnimation({\n nodes,\n edges,\n className,\n \"aria-label\": ariaLabel = \"Pipeline flow\",\n ...props\n}: PipelineFlowAnimationProps) {\n const reduced = usePrefersReducedMotion();\n const positions = layoutNodes(nodes);\n const frame = viewBoxFor(nodes, positions);\n const titleId = React.useId();\n const descriptionId = React.useId();\n const markerBaseId = React.useId();\n const activeNodeIds = new Set(\n edges\n .filter((edge) => edge.active)\n .flatMap((edge) => [edge.from, edge.to])\n .concat(nodes.filter((node) => isActiveStatus(node.status)).map((node) => node.id))\n );\n\n return (\n <section\n {...props}\n className={`eth-motion-pipeline-flow ${reduced ? \"eth-motion-reduced\" : \"\"} ${className ?? \"\"}`}\n data-eth-component=\"PipelineFlowAnimation\"\n aria-label={ariaLabel}\n >\n <MotionStyles />\n <svg\n className=\"eth-motion-pipeline-flow__svg\"\n viewBox={frame.viewBox}\n width={frame.width}\n height={frame.height}\n role=\"img\"\n aria-labelledby={`${titleId} ${descriptionId}`}\n >\n <title id={titleId}>Pipeline flow</title>\n <desc id={descriptionId}>\n {nodes.length\n ? `${nodes.length} stages and ${edges.length} handoffs. ${nodes\n .map((node) => `${node.label}: ${labelForStatus(node.status)}`)\n .join(\", \")}.`\n : \"No pipeline stages.\"}\n </desc>\n <defs>\n {edges.map((edge, index) => {\n const toNode = nodes.find((node) => node.id === edge.to);\n const color = edgeColor(edge, toNode?.status);\n return (\n <marker\n key={`${edge.from}-${edge.to}-${index}`}\n id={markerIdFromUseId(markerBaseId, index)}\n markerWidth=\"7\"\n markerHeight=\"7\"\n refX=\"6\"\n refY=\"3.5\"\n orient=\"auto\"\n markerUnits=\"strokeWidth\"\n >\n <path d=\"M0,0 L0,7 L7,3.5 z\" fill={color} />\n </marker>\n );\n })}\n </defs>\n {edges.map((edge, index) => {\n const from = positions.get(edge.from);\n const to = positions.get(edge.to);\n if (!from || !to) return null;\n const toNode = nodes.find((node) => node.id === edge.to);\n const color = edgeColor(edge, toNode?.status);\n const active = Boolean(edge.active);\n return (\n <path\n key={`${edge.from}-${edge.to}-${index}`}\n className=\"eth-motion-pipeline-flow__edge\"\n d={edgePath(from, to)}\n fill=\"none\"\n markerEnd={`url(#${markerIdFromUseId(markerBaseId, index)})`}\n stroke={color}\n strokeWidth={active ? 2.5 : 1.5}\n strokeDasharray={active ? \"7 7\" : undefined}\n style={\n active && !reduced\n ? { animation: \"eth-motion-flow-dash 900ms linear infinite\" }\n : undefined\n }\n />\n );\n })}\n {!nodes.length ? (\n <text className=\"eth-motion-pipeline-flow__empty\" x=\"16\" y=\"52\">\n No pipeline stages\n </text>\n ) : null}\n {nodes.map((node) => {\n const point = positions.get(node.id);\n if (!point) return null;\n const active = activeNodeIds.has(node.id);\n const cardX = -NODE_WIDTH / 2;\n const cardY = -NODE_HEIGHT / 2;\n return (\n <g\n key={node.id}\n className={`eth-motion-pipeline-flow__node ${active ? \"eth-motion-pipeline-flow__node--active\" : \"\"}`}\n transform={`translate(${point.x}, ${point.y})`}\n >\n <rect\n className=\"eth-motion-pipeline-flow__card\"\n x={cardX}\n y={cardY}\n width={NODE_WIDTH}\n height={NODE_HEIGHT}\n rx={0}\n />\n <rect\n className=\"eth-motion-pipeline-flow__stripe\"\n x={cardX}\n y={cardY}\n width={4}\n height={NODE_HEIGHT}\n rx={0}\n fill={statusColor(node.status)}\n />\n {active && !reduced ? (\n <circle\n className=\"eth-motion-pipeline-flow__pulse\"\n cx={cardX + 22}\n cy={cardY + 20}\n r={9}\n fill=\"none\"\n stroke={statusColor(node.status)}\n />\n ) : null}\n <circle\n className=\"eth-motion-pipeline-flow__dot\"\n cx={cardX + 22}\n cy={cardY + 20}\n r={5}\n fill={statusColor(node.status)}\n />\n <text className=\"eth-motion-pipeline-flow__label\" x={cardX + 36} y={cardY + 24}>\n {truncate(node.label, 15)}\n </text>\n <text className=\"eth-motion-pipeline-flow__status\" x={cardX + 14} y={cardY + 48}>\n {truncate(labelForStatus(node.status), 20)}\n </text>\n <title>{`${node.label}: ${labelForStatus(node.status)}`}</title>\n </g>\n );\n })}\n </svg>\n <ol className=\"eth-motion-pipeline-flow__fallback\">\n {nodes.map((node) => (\n <li key={node.id}>\n {node.label}: {labelForStatus(node.status)}\n </li>\n ))}\n </ol>\n </section>\n );\n}\n\nconst NODE_WIDTH = 144;\nconst NODE_HEIGHT = 64;\nconst NODE_GAP_X = 188;\n\nfunction layoutNodes(nodes: MotionFlowNode[]) {\n const map = new Map<string, { x: number; y: number }>();\n nodes.forEach((node, index) => {\n map.set(node.id, {\n x: node.x ?? NODE_WIDTH / 2 + 20 + NODE_GAP_X * index,\n y: node.y ?? NODE_HEIGHT / 2 + 18\n });\n });\n return map;\n}\n\nfunction viewBoxFor(nodes: MotionFlowNode[], positions: Map<string, { x: number; y: number }>) {\n if (!nodes.length) {\n return { viewBox: \"0 0 320 96\", width: 320, height: 96 };\n }\n\n const points = nodes\n .map((node) => positions.get(node.id))\n .filter((point): point is { x: number; y: number } => Boolean(point));\n const minX = Math.floor(Math.min(...points.map((point) => point.x)) - NODE_WIDTH / 2 - 18);\n const minY = Math.floor(Math.min(...points.map((point) => point.y)) - NODE_HEIGHT / 2 - 16);\n const maxX = Math.ceil(Math.max(...points.map((point) => point.x)) + NODE_WIDTH / 2 + 26);\n const maxY = Math.ceil(Math.max(...points.map((point) => point.y)) + NODE_HEIGHT / 2 + 16);\n const width = maxX - minX;\n const height = maxY - minY;\n return { viewBox: `${minX} ${minY} ${width} ${height}`, width, height };\n}\n\nfunction edgePath(from: { x: number; y: number }, to: { x: number; y: number }) {\n const direction = to.x >= from.x ? 1 : -1;\n const start = { x: from.x + (NODE_WIDTH / 2) * direction, y: from.y };\n const end = { x: to.x - (NODE_WIDTH / 2) * direction, y: to.y };\n const controlOffset = Math.max(26, Math.abs(end.x - start.x) * 0.5);\n return `M ${start.x} ${start.y} C ${start.x + controlOffset * direction} ${start.y}, ${end.x - controlOffset * direction} ${end.y}, ${end.x} ${end.y}`;\n}\n\nfunction edgeColor(edge: MotionFlowEdge, toStatus?: MotionFlowNode[\"status\"]) {\n if (edge.status) return statusColor(edge.status);\n if (edge.active) return \"var(--cds-interactive, #0f62fe)\";\n if (toStatus === \"failed\" || toStatus === \"blocked\") return statusColor(toStatus);\n return \"var(--cds-border-strong, #8d8d8d)\";\n}\n\nfunction markerIdFromUseId(id: string, index: number) {\n return `eth-motion-pipeline-arrow-${id.replace(/[^a-zA-Z0-9_-]/g, \"\")}-${index}`;\n}\n\nfunction isActiveStatus(status: MotionFlowNode[\"status\"]) {\n return status === \"running\" || status === \"in-progress\" || status === \"active\";\n}\n\nfunction labelForStatus(status: MotionFlowNode[\"status\"]) {\n switch (status) {\n case \"approval-required\":\n return \"Approval required\";\n case \"pending-approval\":\n return \"Pending approval\";\n case \"in-progress\":\n return \"In progress\";\n case \"not-started\":\n return \"Not started\";\n default:\n return status\n .split(\"-\")\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(\" \");\n }\n}\n\nfunction truncate(value: string, maxLength: number) {\n if (value.length <= maxLength) return value;\n return `${value.slice(0, Math.max(0, maxLength - 3))}...`;\n}\n","import * as React from \"react\";\nimport type { ProgressTransitionProps } from \"./types\";\nimport { MotionStyles, usePrefersReducedMotion } from \"./motionUtils\";\n\nexport function ProgressTransition({\n from,\n to,\n durationMs = 320,\n children,\n className,\n ...props\n}: ProgressTransitionProps) {\n const reduced = usePrefersReducedMotion();\n const [current, setCurrent] = React.useState(from ?? to);\n\n React.useEffect(() => {\n if (reduced || durationMs <= 0 || typeof window === \"undefined\") {\n setCurrent(to);\n return;\n }\n const startValue = from ?? current;\n const delta = to - startValue;\n const startedAt = performance.now();\n let frame = 0;\n const tick = (now: number) => {\n const progress = Math.min(1, (now - startedAt) / durationMs);\n const eased = 1 - Math.pow(1 - progress, 3);\n setCurrent(startValue + delta * eased);\n if (progress < 1) frame = window.requestAnimationFrame(tick);\n };\n frame = window.requestAnimationFrame(tick);\n return () => window.cancelAnimationFrame(frame);\n }, [to, from, durationMs, reduced]);\n\n return (\n <section\n {...props}\n className={`eth-motion-progress-transition ${reduced ? \"eth-motion-reduced\" : \"\"} ${className ?? \"\"}`}\n data-eth-component=\"ProgressTransition\"\n >\n <MotionStyles />\n {children ? (\n children(current)\n ) : (\n <progress value={current} max={100} aria-label=\"Progress\">\n {Math.round(current)}%\n </progress>\n )}\n </section>\n );\n}\n","import * as React from \"react\";\nimport type { SkeletonLoadingPatternProps, SkeletonLoadingPatternVariant } from \"./types\";\nimport { MotionStyles, usePrefersReducedMotion } from \"./motionUtils\";\n\nconst articleLineWidths = [\"96%\", \"88%\", \"100%\", \"92%\", \"76%\", \"84%\", \"68%\", \"80%\"];\nconst listLineWidths = [\"76%\", \"88%\", \"64%\", \"82%\", \"70%\", \"90%\"];\nconst tableCellWidths = [\"72%\", \"92%\", \"58%\", \"84%\", \"66%\", \"78%\"];\n\nexport function SkeletonLoadingPattern({\n columns = 4,\n label = \"Loading content\",\n lines = 3,\n rows,\n variant = \"article\",\n className,\n style,\n role = \"status\",\n \"aria-busy\": ariaBusy = true,\n \"aria-label\": ariaLabel,\n ...props\n}: SkeletonLoadingPatternProps) {\n const reduced = usePrefersReducedMotion();\n const pattern = normalizePattern(variant);\n const lineCount = clampCount(lines, 1, 8);\n const rowCount = clampCount(rows ?? (pattern === \"table\" ? 4 : 3), 1, 8);\n const columnCount = clampCount(columns, 2, 6);\n const classes = [\n \"eth-motion-skeleton-loading\",\n `eth-motion-skeleton-loading--${pattern}`,\n reduced ? \"eth-motion-reduced\" : undefined,\n className\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <section\n {...props}\n aria-busy={ariaBusy}\n aria-label={ariaLabel ?? label}\n className={classes}\n data-eth-component=\"SkeletonLoadingPattern\"\n data-pattern={pattern}\n role={role}\n style={style}\n >\n <MotionStyles />\n {renderPattern(pattern, lineCount, rowCount, columnCount)}\n </section>\n );\n}\n\nfunction renderPattern(\n pattern: SkeletonLoadingPatternVariant,\n lines: number,\n rows: number,\n columns: number\n) {\n switch (pattern) {\n case \"card\":\n return <CardPattern lines={lines} />;\n case \"list\":\n return <ListPattern rows={rows} />;\n case \"table\":\n return <TablePattern columns={columns} rows={rows} />;\n case \"article\":\n default:\n return <ArticlePattern lines={lines} />;\n }\n}\n\nfunction ArticlePattern({ lines }: { lines: number }) {\n return (\n <div\n aria-hidden=\"true\"\n className=\"eth-motion-skeleton-loading__surface eth-motion-skeleton-loading__surface--article\"\n >\n <div className=\"eth-motion-skeleton-loading__article-header\">\n <SkeletonBlock\n className=\"eth-motion-skeleton-loading__block--eyebrow\"\n segment=\"eyebrow\"\n style={{ inlineSize: \"7rem\" }}\n />\n <SkeletonBlock\n className=\"eth-motion-skeleton-loading__block--title\"\n segment=\"title\"\n style={{ inlineSize: \"min(22rem, 74%)\" }}\n />\n </div>\n <div className=\"eth-motion-skeleton-loading__article-body\">\n {Array.from({ length: lines }).map((_, index) => (\n <SkeletonBlock\n key={index}\n className=\"eth-motion-skeleton-loading__block--line\"\n segment=\"text-line\"\n style={{ inlineSize: articleLineWidths[index % articleLineWidths.length] }}\n />\n ))}\n </div>\n </div>\n );\n}\n\nfunction CardPattern({ lines }: { lines: number }) {\n return (\n <div\n aria-hidden=\"true\"\n className=\"eth-motion-skeleton-loading__surface eth-motion-skeleton-loading__surface--card\"\n >\n <SkeletonBlock className=\"eth-motion-skeleton-loading__block--media\" segment=\"media\" />\n <div className=\"eth-motion-skeleton-loading__card-body\">\n <SkeletonBlock\n className=\"eth-motion-skeleton-loading__block--title\"\n segment=\"title\"\n style={{ inlineSize: \"78%\" }}\n />\n {Array.from({ length: lines }).map((_, index) => (\n <SkeletonBlock\n key={index}\n className=\"eth-motion-skeleton-loading__block--line\"\n segment=\"text-line\"\n style={{ inlineSize: articleLineWidths[(index + 2) % articleLineWidths.length] }}\n />\n ))}\n </div>\n <div className=\"eth-motion-skeleton-loading__card-metrics\">\n {Array.from({ length: 3 }).map((_, index) => (\n <SkeletonBlock\n key={index}\n className=\"eth-motion-skeleton-loading__block--metric\"\n segment=\"metric\"\n />\n ))}\n </div>\n </div>\n );\n}\n\nfunction ListPattern({ rows }: { rows: number }) {\n return (\n <div\n aria-hidden=\"true\"\n className=\"eth-motion-skeleton-loading__surface eth-motion-skeleton-loading__surface--list\"\n >\n {Array.from({ length: rows }).map((_, index) => (\n <div\n className=\"eth-motion-skeleton-loading__list-row\"\n data-skeleton-row=\"list\"\n key={index}\n >\n <SkeletonBlock className=\"eth-motion-skeleton-loading__block--avatar\" segment=\"avatar\" />\n <div className=\"eth-motion-skeleton-loading__list-copy\">\n <SkeletonBlock\n className=\"eth-motion-skeleton-loading__block--line\"\n segment=\"text-line\"\n style={{ inlineSize: listLineWidths[index % listLineWidths.length] }}\n />\n <SkeletonBlock\n className=\"eth-motion-skeleton-loading__block--caption\"\n segment=\"caption\"\n style={{ inlineSize: listLineWidths[(index + 2) % listLineWidths.length] }}\n />\n </div>\n <SkeletonBlock\n className=\"eth-motion-skeleton-loading__block--tag\"\n segment=\"tag\"\n style={{ inlineSize: index % 2 === 0 ? \"4.25rem\" : \"3.25rem\" }}\n />\n </div>\n ))}\n </div>\n );\n}\n\nfunction TablePattern({ columns, rows }: { columns: number; rows: number }) {\n const gridStyle = { gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))` };\n\n return (\n <div\n aria-hidden=\"true\"\n className=\"eth-motion-skeleton-loading__surface eth-motion-skeleton-loading__surface--table\"\n >\n <div className=\"eth-motion-skeleton-loading__table-header\" style={gridStyle}>\n {Array.from({ length: columns }).map((_, index) => (\n <SkeletonBlock\n key={index}\n className=\"eth-motion-skeleton-loading__block--column\"\n segment=\"column-header\"\n style={{ inlineSize: tableCellWidths[(index + 1) % tableCellWidths.length] }}\n />\n ))}\n </div>\n {Array.from({ length: rows }).map((_, rowIndex) => (\n <div\n className=\"eth-motion-skeleton-loading__table-row\"\n data-skeleton-row=\"table\"\n key={rowIndex}\n style={gridStyle}\n >\n {Array.from({ length: columns }).map((_, columnIndex) => (\n <SkeletonBlock\n cell\n key={columnIndex}\n className=\"eth-motion-skeleton-loading__block--cell\"\n segment=\"cell\"\n style={{\n inlineSize: tableCellWidths[(rowIndex + columnIndex) % tableCellWidths.length]\n }}\n />\n ))}\n </div>\n ))}\n </div>\n );\n}\n\nfunction SkeletonBlock({\n cell,\n className,\n segment,\n style\n}: {\n cell?: boolean;\n className?: string;\n segment: string;\n style?: React.CSSProperties;\n}) {\n return (\n <span\n className={`eth-motion-skeleton-loading__block ${className ?? \"\"}`}\n data-skeleton-cell={cell ? \"\" : undefined}\n data-skeleton-segment={segment}\n style={style}\n />\n );\n}\n\nfunction clampCount(value: number, min: number, max: number) {\n if (!Number.isFinite(value)) return min;\n return Math.min(max, Math.max(min, Math.floor(value)));\n}\n\nfunction normalizePattern(\n variant: SkeletonLoadingPatternProps[\"variant\"]\n): SkeletonLoadingPatternVariant {\n if (variant === \"card\" || variant === \"list\" || variant === \"table\") return variant;\n return \"article\";\n}\n","import * as React from \"react\";\nimport type { StatusChangeAnimationProps } from \"./types\";\nimport { MotionStyles, statusColor, usePrefersReducedMotion } from \"./motionUtils\";\n\nexport function StatusChangeAnimation({\n status,\n previousStatus,\n label,\n className,\n children,\n style,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n ...props\n}: StatusChangeAnimationProps) {\n const reduced = usePrefersReducedMotion();\n const changed = previousStatus !== undefined && previousStatus !== status;\n const statusLabel = formatStatusLabel(status);\n const previousStatusLabel = previousStatus ? formatStatusLabel(previousStatus) : undefined;\n const displayLabel = children ?? label ?? \"Status\";\n const announcementLabel = textFromNode(label) ?? textFromNode(children) ?? \"Status\";\n const announcement =\n changed && previousStatusLabel\n ? `${announcementLabel} changed from ${previousStatusLabel} to ${statusLabel}`\n : `${announcementLabel} is ${statusLabel}`;\n const rootClassName = [\n \"eth-motion-status-change\",\n `eth-motion-status-change--${status}`,\n changed ? \"eth-motion-status-change--changed\" : null,\n reduced ? \"eth-motion-reduced\" : null,\n className\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <span\n {...props}\n aria-atomic=\"true\"\n aria-label={ariaLabel ?? (ariaLabelledBy ? undefined : announcement)}\n aria-labelledby={ariaLabelledBy}\n className={rootClassName}\n data-current-status={status}\n data-eth-component=\"StatusChangeAnimation\"\n data-previous-status={previousStatus}\n role=\"status\"\n style={{\n \"--eth-motion-status-color\": statusColor(status),\n \"--eth-motion-status-previous-color\": previousStatus\n ? statusColor(previousStatus)\n : statusColor(status),\n ...style\n } as React.CSSProperties}\n >\n <MotionStyles />\n <span className=\"eth-motion-status-change__indicator\" aria-hidden=\"true\">\n {changed ? <span className=\"eth-motion-status-change__previous-dot\" /> : null}\n {changed ? <span className=\"eth-motion-status-change__connector\" /> : null}\n <span className=\"eth-motion-status-change__current-dot\" />\n </span>\n <span className=\"eth-motion-status-change__content\">\n <span className=\"eth-motion-status-change__label\">{displayLabel}</span>\n <span className=\"eth-motion-status-change__state\">\n {changed && previousStatusLabel ? (\n <>\n <span className=\"eth-motion-status-change__previous\">{previousStatusLabel}</span>\n <span className=\"eth-motion-status-change__separator\">to</span>\n <span className=\"eth-motion-status-change__current\">{statusLabel}</span>\n </>\n ) : (\n <span className=\"eth-motion-status-change__current\">{statusLabel}</span>\n )}\n </span>\n </span>\n </span>\n );\n}\n\nfunction formatStatusLabel(status: string) {\n return status\n .split(\"-\")\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(\" \");\n}\n\nfunction textFromNode(node: React.ReactNode) {\n if (typeof node === \"string\" || typeof node === \"number\") return String(node);\n return undefined;\n}\n","import * as React from \"react\";\nimport type { StepCompletionAnimationProps } from \"./types\";\nimport { MotionStyles, usePrefersReducedMotion } from \"./motionUtils\";\n\nconst stateLabels = {\n completed: \"Completed\",\n current: \"In progress\",\n pending: \"Pending\"\n} as const;\n\nexport function StepCompletionAnimation({\n completed = true,\n description,\n label = \"Step completed\",\n state,\n className,\n children,\n role = \"status\",\n \"aria-live\": ariaLive = \"polite\",\n ...props\n}: StepCompletionAnimationProps) {\n const reduced = usePrefersReducedMotion();\n const resolvedState = state ?? (completed ? \"completed\" : \"pending\");\n const stateLabel = stateLabels[resolvedState];\n const stepClassName = [\n \"eth-motion-step-completion\",\n `eth-motion-step-completion--${resolvedState}`,\n reduced ? \"eth-motion-reduced\" : undefined,\n className\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <span\n {...props}\n aria-live={ariaLive}\n className={stepClassName}\n data-eth-component=\"StepCompletionAnimation\"\n data-state={resolvedState}\n role={role}\n >\n <MotionStyles />\n <span className=\"eth-motion-step-completion__marker\" aria-hidden=\"true\">\n {resolvedState === \"completed\" ? (\n <svg\n className=\"eth-motion-step-completion__check\"\n focusable=\"false\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n width=\"16\"\n >\n <path\n className=\"eth-motion-step-completion__check-path\"\n d=\"M3.5 8.4 6.5 11.4 12.8 4.6\"\n />\n </svg>\n ) : (\n <span className=\"eth-motion-step-completion__dot\" />\n )}\n </span>\n <span className=\"eth-motion-step-completion__content\">\n {children ?? (\n <>\n <span className=\"eth-motion-step-completion__label\">{label}</span>\n <span className=\"eth-motion-step-completion__state\">{stateLabel}</span>\n {description ? (\n <span className=\"eth-motion-step-completion__description\">{description}</span>\n ) : null}\n </>\n )}\n </span>\n </span>\n );\n}\n","import * as React from \"react\";\nimport type { StreamingTextProps } from \"./types\";\nimport { MotionStyles, usePrefersReducedMotion } from \"./motionUtils\";\n\nexport function StreamingText({\n text,\n intervalMs = 18,\n onDone,\n className,\n role = \"status\",\n \"aria-busy\": ariaBusy,\n \"aria-live\": ariaLive = \"polite\",\n ...props\n}: StreamingTextProps) {\n const reduced = usePrefersReducedMotion();\n const shouldAnimate = !reduced && intervalMs > 0 && text.length > 0;\n const [visible, setVisible] = React.useState(shouldAnimate ? \"\" : text);\n const [done, setDone] = React.useState(!shouldAnimate);\n const onDoneRef = React.useRef(onDone);\n\n React.useEffect(() => {\n onDoneRef.current = onDone;\n }, [onDone]);\n\n React.useEffect(() => {\n if (!shouldAnimate) {\n setVisible(text);\n setDone(true);\n onDoneRef.current?.();\n return;\n }\n\n setVisible(\"\");\n setDone(false);\n let index = 0;\n const timer = window.setInterval(() => {\n index += 1;\n setVisible(text.slice(0, index));\n if (index >= text.length) {\n window.clearInterval(timer);\n setDone(true);\n onDoneRef.current?.();\n }\n }, intervalMs);\n return () => window.clearInterval(timer);\n }, [text, intervalMs, shouldAnimate]);\n\n const streaming = shouldAnimate && !done;\n const classes = [\n \"eth-motion-streaming-text\",\n streaming\n ? \"eth-motion-streaming-text--streaming\"\n : \"eth-motion-streaming-text--complete\",\n reduced ? \"eth-motion-reduced\" : undefined,\n className\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <>\n <MotionStyles />\n <span\n {...props}\n aria-busy={ariaBusy ?? streaming}\n aria-live={ariaLive}\n className={classes}\n data-eth-component=\"StreamingText\"\n data-streaming={streaming ? \"true\" : \"false\"}\n role={role}\n >\n <span className=\"eth-motion-streaming-text__content\">{visible}</span>\n <span aria-hidden=\"true\" className=\"eth-motion-streaming-text__cursor\" />\n </span>\n </>\n );\n}\n","import * as React from \"react\";\nimport type { SyncProgressAnimationProps, SyncProgressAnimationStatus } from \"./types\";\nimport { MotionStyles, usePrefersReducedMotion } from \"./motionUtils\";\n\nconst statusContent: Record<\n SyncProgressAnimationStatus,\n { accent: string; description: string; label: string; soft: string }\n> = {\n syncing: {\n accent: \"#0f62fe\",\n description: \"Replicating source updates and applying remote changes.\",\n label: \"Syncing\",\n soft: \"#edf5ff\"\n },\n synced: {\n accent: \"#24a148\",\n description: \"Replica is current with the source.\",\n label: \"Synced\",\n soft: \"#defbe6\"\n },\n paused: {\n accent: \"#8d8d8d\",\n description: \"Sync is paused. No changes are being applied.\",\n label: \"Paused\",\n soft: \"#f4f4f4\"\n },\n stale: {\n accent: \"#f1c21b\",\n description: \"Replica is outside the expected freshness window.\",\n label: \"Stale\",\n soft: \"#fcf4d6\"\n },\n failed: {\n accent: \"#da1e28\",\n description: \"Sync stopped before completion. Review the connection and retry.\",\n label: \"Failed\",\n soft: \"#fff1f1\"\n },\n error: {\n accent: \"#da1e28\",\n description: \"Sync stopped before completion. Review the connection and retry.\",\n label: \"Needs attention\",\n soft: \"#fff1f1\"\n }\n};\n\nexport function SyncProgressAnimation({\n children,\n className,\n completed,\n description,\n label = \"Syncing\",\n progress,\n rate,\n remaining,\n role = \"status\",\n source,\n stage,\n status = \"syncing\",\n style,\n target,\n total,\n variant,\n \"aria-busy\": ariaBusy,\n \"aria-label\": ariaLabel,\n \"aria-live\": ariaLive,\n ...props\n}: SyncProgressAnimationProps) {\n const reduced = usePrefersReducedMotion();\n const content = statusContent[status];\n const progressValue = normalizeProgress(progress ?? progressFromCounts(completed, total, status));\n const hasProgress = progressValue !== undefined;\n const progressText = hasProgress ? `${progressValue}% complete` : content.label;\n const countText = formatCountProgress(completed, total);\n const descriptionNode = description ?? children ?? content.description;\n const hasDetailedContent = [\n description,\n children,\n source,\n target,\n stage,\n rate,\n remaining,\n completed,\n total,\n progress\n ].some(hasValue);\n const resolvedVariant = variant ?? (hasDetailedContent ? \"detailed\" : \"compact\");\n const labelText = textFromNode(label) ?? \"Sync\";\n const announcement = [content.label, hasProgress ? progressText : undefined, countText]\n .filter(Boolean)\n .join(\", \");\n const classes = [\n \"eth-motion-sync-progress\",\n `eth-motion-sync-progress--${resolvedVariant}`,\n `eth-motion-sync-progress--${status}`,\n reduced ? \"eth-motion-reduced\" : undefined,\n className\n ]\n .filter(Boolean)\n .join(\" \");\n const rootStyle = {\n \"--eth-motion-sync-accent\": content.accent,\n \"--eth-motion-sync-accent-soft\": content.soft,\n ...style\n } as React.CSSProperties;\n const busy = ariaBusy ?? (status === \"syncing\" ? true : undefined);\n\n if (resolvedVariant === \"compact\") {\n return (\n <span\n {...props}\n aria-atomic=\"true\"\n aria-busy={busy}\n aria-label={ariaLabel ?? `${labelText} ${announcement}`}\n aria-live={ariaLive ?? (status === \"syncing\" ? \"polite\" : undefined)}\n className={classes}\n data-eth-component=\"SyncProgressAnimation\"\n data-sync-progress={progressValue}\n data-sync-status={status}\n role={role}\n style={rootStyle}\n >\n <MotionStyles />\n <SyncIndicator status={status} />\n <span className=\"eth-motion-sync-progress__compact-copy\">\n <span className=\"eth-motion-sync-progress__label\">{label}</span>\n <span className=\"eth-motion-sync-progress__compact-state\">\n {hasProgress ? `${progressValue}%` : content.label}\n </span>\n </span>\n </span>\n );\n }\n\n const metaItems = [\n { label: \"Source\", value: source },\n { label: \"Target\", value: target },\n { label: \"Rate\", value: rate },\n { label: \"Remaining\", value: remaining }\n ].filter((item) => hasValue(item.value));\n\n return (\n <section\n {...props}\n aria-atomic=\"true\"\n aria-busy={busy}\n aria-label={ariaLabel ?? `${labelText} ${announcement}`}\n aria-live={ariaLive ?? (status === \"syncing\" ? \"polite\" : undefined)}\n className={classes}\n data-eth-component=\"SyncProgressAnimation\"\n data-sync-progress={progressValue}\n data-sync-status={status}\n role={role}\n style={rootStyle}\n >\n <MotionStyles />\n <SyncIndicator status={status} />\n <div className=\"eth-motion-sync-progress__body\">\n <div className=\"eth-motion-sync-progress__header\">\n <div className=\"eth-motion-sync-progress__title-group\">\n <span className=\"eth-motion-sync-progress__eyebrow\">\n {stage ?? \"Replication\"}\n </span>\n <span className=\"eth-motion-sync-progress__label\">{label}</span>\n </div>\n <span className=\"eth-motion-sync-progress__chip\">\n <span className=\"eth-motion-sync-progress__chip-dot\" aria-hidden=\"true\" />\n {content.label}\n </span>\n </div>\n <p className=\"eth-motion-sync-progress__description\">{descriptionNode}</p>\n <div className=\"eth-motion-sync-progress__meter\">\n <div\n aria-label=\"Sync transfer progress\"\n aria-valuemax={100}\n aria-valuemin={0}\n aria-valuenow={progressValue}\n aria-valuetext={hasProgress ? progressText : content.label}\n className=\"eth-motion-sync-progress__track\"\n role=\"progressbar\"\n >\n <span\n className={`eth-motion-sync-progress__bar ${\n hasProgress ? \"\" : \"eth-motion-sync-progress__bar--indeterminate\"\n }`}\n style={hasProgress ? { inlineSize: `${progressValue}%` } : undefined}\n />\n </div>\n <span className=\"eth-motion-sync-progress__progress-copy\">\n {[hasProgress ? `${progressValue}%` : content.label, countText]\n .filter(Boolean)\n .join(\" | \")}\n </span>\n </div>\n </div>\n {metaItems.length ? (\n <dl className=\"eth-motion-sync-progress__meta\" aria-label=\"Sync metadata\">\n {metaItems.map((item) => (\n <div className=\"eth-motion-sync-progress__meta-item\" key={item.label}>\n <dt>{item.label}</dt>\n <dd>{item.value}</dd>\n </div>\n ))}\n </dl>\n ) : null}\n </section>\n );\n}\n\nfunction SyncIndicator({ status }: { status: SyncProgressAnimationStatus }) {\n return (\n <span className=\"eth-motion-sync-progress__indicator\" aria-hidden=\"true\">\n {status === \"syncing\" ? (\n <span className=\"eth-motion-sync-progress__spinner\" />\n ) : (\n <span className=\"eth-motion-sync-progress__glyph\" />\n )}\n </span>\n );\n}\n\nfunction progressFromCounts(\n completed: number | undefined,\n total: number | undefined,\n status: SyncProgressAnimationStatus\n) {\n if (status === \"synced\") return 100;\n if (!isFiniteNumber(completed) || !isFiniteNumber(total) || total <= 0) return undefined;\n return (completed / total) * 100;\n}\n\nfunction normalizeProgress(value: number | undefined) {\n if (!isFiniteNumber(value)) return undefined;\n return Math.min(100, Math.max(0, Math.round(value)));\n}\n\nfunction formatCountProgress(completed: number | undefined, total: number | undefined) {\n if (!isFiniteNumber(completed) || !isFiniteNumber(total) || total <= 0) return undefined;\n const safeCompleted = Math.max(0, Math.floor(completed));\n const safeTotal = Math.max(0, Math.floor(total));\n return `${safeCompleted} of ${safeTotal} items`;\n}\n\nfunction isFiniteNumber(value: unknown): value is number {\n return typeof value === \"number\" && Number.isFinite(value);\n}\n\nfunction hasValue(value: unknown) {\n return value !== undefined && value !== null && value !== false && value !== \"\";\n}\n\nfunction textFromNode(node: React.ReactNode) {\n if (typeof node === \"string\" || typeof node === \"number\") return String(node);\n return undefined;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,YAAuB;AAmCnB;AAhCJ,IAAM,qBAAqB;AAEpB,SAAS,0BAA0B;AACxC,SAAa;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,yBAAyB,eAA2B;AAC3D,MAAI,OAAO,WAAW,eAAe,OAAO,OAAO,eAAe,YAAY;AAC5E,WAAO,MAAM;AAAA,IAAC;AAAA,EAChB;AAEA,QAAM,QAAQ,OAAO,WAAW,kBAAkB;AAClD,QAAM,WAAW,MAAM,cAAc;AACrC,QAAM,mBAAmB,UAAU,QAAQ;AAC3C,SAAO,MAAM,MAAM,sBAAsB,UAAU,QAAQ;AAC7D;AAEA,SAAS,2BAA2B;AAClC,MAAI,OAAO,WAAW,eAAe,OAAO,OAAO,eAAe,WAAY,QAAO;AACrF,SAAO,OAAO,WAAW,kBAAkB,EAAE;AAC/C;AAEA,SAAS,iCAAiC;AACxC,SAAO;AACT;AAEO,SAAS,eAAe;AAC7B,SACE,4CAAC,WAAO;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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","names":["import_jsx_runtime","React","import_jsx_runtime","React","import_jsx_runtime","direction","start","end","controlOffset","import_jsx_runtime","React","import_jsx_runtime","viewBoxFor","labelForStatus","edgeColor","markerIdFromUseId","edgePath","NODE_WIDTH","NODE_HEIGHT","truncate","NODE_GAP_X","React","import_jsx_runtime","import_jsx_runtime","_","import_jsx_runtime","import_jsx_runtime","React","import_jsx_runtime","import_jsx_runtime","textFromNode"]}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type { AgentThinkingAnimationProps, AttentionPulseProps, DAGStatusTransitionProps, DocumentLockPulseProps, MotionFlowEdge, MotionFlowNode, PipelineFlowAnimationProps, ProgressTransitionProps, SkeletonLoadingPatternVariant, SkeletonLoadingPatternProps, StatusChangeAnimationProps, StepCompletionAnimationProps, StepCompletionState, StreamingTextProps, SyncProgressAnimationProps, SyncProgressAnimationStatus } from "./components/types";
|
|
2
|
+
export { AgentThinkingAnimation } from "./components/AgentThinkingAnimation";
|
|
3
|
+
export { AttentionPulse } from "./components/AttentionPulse";
|
|
4
|
+
export { DAGStatusTransition } from "./components/DAGStatusTransition";
|
|
5
|
+
export { DocumentLockPulse } from "./components/DocumentLockPulse";
|
|
6
|
+
export { PipelineFlowAnimation } from "./components/PipelineFlowAnimation";
|
|
7
|
+
export { ProgressTransition } from "./components/ProgressTransition";
|
|
8
|
+
export { SkeletonLoadingPattern } from "./components/SkeletonLoadingPattern";
|
|
9
|
+
export { StatusChangeAnimation } from "./components/StatusChangeAnimation";
|
|
10
|
+
export { StepCompletionAnimation } from "./components/StepCompletionAnimation";
|
|
11
|
+
export { StreamingText } from "./components/StreamingText";
|
|
12
|
+
export { SyncProgressAnimation } from "./components/SyncProgressAnimation";
|
|
13
|
+
export declare const MotionComponentNames: readonly ["ProgressTransition", "PipelineFlowAnimation", "DAGStatusTransition", "AgentThinkingAnimation", "SyncProgressAnimation", "SkeletonLoadingPattern", "AttentionPulse", "DocumentLockPulse", "StreamingText", "StepCompletionAnimation", "StatusChangeAnimation"];
|
|
14
|
+
export type MotionComponentName = (typeof MotionComponentNames)[number];
|