@chrisflippen/blueprint-document-assembly 1.0.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/LICENSE/main.tsx +21 -0
- package/README.md +280 -0
- package/dist/index.d.mts +89 -0
- package/dist/index.d.ts +89 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +16 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +71 -0
package/LICENSE/main.tsx
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 [Your Name]
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
# Blueprint Document Assembly
|
|
2
|
+
|
|
3
|
+
An animation-heavy React component for visualizing multi-step processes as a Blueprint/Technical Document Assembly system. Perfect for legal document generation, compliance workflows, technical process visualization, and any multi-step assembly process.
|
|
4
|
+
|
|
5
|
+

|
|
6
|
+

|
|
7
|
+
|
|
8
|
+
## ✨ Features
|
|
9
|
+
|
|
10
|
+
- **🎬 Cinematic Animations**: Smooth, professional animations powered by Motion (Framer Motion)
|
|
11
|
+
- **📝 Progressive Document Assembly**: Watch documents build piece-by-piece as steps complete
|
|
12
|
+
- **📊 Real-time Metrics**: Track tokens, costs, and elapsed time
|
|
13
|
+
- **🔄 Sequential Log Streaming**: Logs stream in order, following the step progression
|
|
14
|
+
- **📱 Responsive Design**: Works beautifully on desktop and mobile
|
|
15
|
+
- **🌗 Dark Mode Support**: Respects system theme preferences
|
|
16
|
+
- **✨ Celebration Effects**: Dramatic zoom-out and sparkle effects on completion
|
|
17
|
+
- **🎯 TypeScript Support**: Fully typed for excellent developer experience
|
|
18
|
+
- **🎨 Customizable**: Extensive props for customization
|
|
19
|
+
|
|
20
|
+
## 📦 Installation
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
npm install blueprint-document-assembly motion lucide-react
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Or with yarn:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
yarn add blueprint-document-assembly motion lucide-react
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Or with pnpm:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
pnpm add blueprint-document-assembly motion lucide-react
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## 🎨 Styling Requirements
|
|
39
|
+
|
|
40
|
+
This component requires **Tailwind CSS v4**. Make sure you have Tailwind CSS installed and configured:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
npm install tailwindcss @tailwindcss/vite
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Your Tailwind CSS theme should include these CSS variables for optimal styling:
|
|
47
|
+
|
|
48
|
+
```css
|
|
49
|
+
@theme {
|
|
50
|
+
--color-background: #ffffff;
|
|
51
|
+
--color-foreground: #0a0a0a;
|
|
52
|
+
--color-muted: #f4f4f5;
|
|
53
|
+
--color-muted-foreground: #71717a;
|
|
54
|
+
--color-border: #e4e4e7;
|
|
55
|
+
/* Add more theme variables as needed */
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
@media (prefers-color-scheme: dark) {
|
|
59
|
+
@theme {
|
|
60
|
+
--color-background: #0a0a0a;
|
|
61
|
+
--color-foreground: #fafafa;
|
|
62
|
+
--color-muted: #27272a;
|
|
63
|
+
--color-muted-foreground: #a1a1aa;
|
|
64
|
+
--color-border: #27272a;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## 🚀 Quick Start
|
|
70
|
+
|
|
71
|
+
```tsx
|
|
72
|
+
import { BlueprintDocumentAssembly } from 'blueprint-document-assembly';
|
|
73
|
+
|
|
74
|
+
function App() {
|
|
75
|
+
return <BlueprintDocumentAssembly />;
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
That's it! The component comes with sensible defaults for a sworn affidavit assembly process.
|
|
80
|
+
|
|
81
|
+
## 📖 Usage Examples
|
|
82
|
+
|
|
83
|
+
### Basic Usage with Callbacks
|
|
84
|
+
|
|
85
|
+
```tsx
|
|
86
|
+
import { BlueprintDocumentAssembly } from 'blueprint-document-assembly';
|
|
87
|
+
import type { DocumentMetrics, Step } from 'blueprint-document-assembly';
|
|
88
|
+
|
|
89
|
+
function App() {
|
|
90
|
+
const handleComplete = (metrics: DocumentMetrics) => {
|
|
91
|
+
console.log('Assembly complete!', metrics);
|
|
92
|
+
// { tokens: 2847, cost: 0.0234, elapsed: 14.2 }
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
const handleStepComplete = (step: Step, metrics: DocumentMetrics) => {
|
|
96
|
+
console.log(`Step ${step.number} completed:`, step.title);
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
return (
|
|
100
|
+
<BlueprintDocumentAssembly
|
|
101
|
+
onComplete={handleComplete}
|
|
102
|
+
onStepComplete={handleStepComplete}
|
|
103
|
+
/>
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Custom Animation Speed
|
|
109
|
+
|
|
110
|
+
```tsx
|
|
111
|
+
<BlueprintDocumentAssembly
|
|
112
|
+
animationSpeed={2} // 2x faster
|
|
113
|
+
/>
|
|
114
|
+
|
|
115
|
+
<BlueprintDocumentAssembly
|
|
116
|
+
animationSpeed={0.5} // 2x slower
|
|
117
|
+
/>
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Disable Whole Document View
|
|
121
|
+
|
|
122
|
+
```tsx
|
|
123
|
+
<BlueprintDocumentAssembly
|
|
124
|
+
showWholeDocumentView={false} // Skip the zoom-out finale
|
|
125
|
+
/>
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Custom Document IDs
|
|
129
|
+
|
|
130
|
+
```tsx
|
|
131
|
+
<BlueprintDocumentAssembly
|
|
132
|
+
documentIds={{
|
|
133
|
+
caseNumber: '2026-CV-1234',
|
|
134
|
+
fileNumber: 'LAW-456'
|
|
135
|
+
}}
|
|
136
|
+
/>
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Custom Steps
|
|
140
|
+
|
|
141
|
+
```tsx
|
|
142
|
+
import type { Step } from 'blueprint-document-assembly';
|
|
143
|
+
|
|
144
|
+
const customSteps: Step[] = [
|
|
145
|
+
{
|
|
146
|
+
id: 'init',
|
|
147
|
+
number: 1,
|
|
148
|
+
title: 'System Initialization',
|
|
149
|
+
status: 'pending',
|
|
150
|
+
substeps: [
|
|
151
|
+
{ id: 'init1', label: 'Load configuration', completed: false, logs: [] },
|
|
152
|
+
{ id: 'init2', label: 'Connect to database', completed: false, logs: [] }
|
|
153
|
+
],
|
|
154
|
+
documentSection: 'header',
|
|
155
|
+
logs: []
|
|
156
|
+
},
|
|
157
|
+
// ... more steps
|
|
158
|
+
];
|
|
159
|
+
|
|
160
|
+
<BlueprintDocumentAssembly steps={customSteps} />
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## 📚 API Reference
|
|
164
|
+
|
|
165
|
+
### Props
|
|
166
|
+
|
|
167
|
+
| Prop | Type | Default | Description |
|
|
168
|
+
|------|------|---------|-------------|
|
|
169
|
+
| `steps` | `Step[]` | Default affidavit steps | Array of steps to process |
|
|
170
|
+
| `stepLogs` | `Record<string, string[][]>` | Default logs | Custom log data for each step |
|
|
171
|
+
| `substepLogs` | `Record<string, string[][]>` | Default logs | Custom log data for each substep |
|
|
172
|
+
| `autoScroll` | `boolean` | `true` | Auto-scroll to show new content |
|
|
173
|
+
| `showWholeDocumentView` | `boolean` | `true` | Show zoom-out view on completion |
|
|
174
|
+
| `documentIds` | `DocumentIds` | Auto-generated | Custom case/file numbers |
|
|
175
|
+
| `animationSpeed` | `number` | `1` | Animation speed multiplier |
|
|
176
|
+
| `onComplete` | `(metrics: DocumentMetrics) => void` | - | Callback when complete |
|
|
177
|
+
| `onStepComplete` | `(step: Step, metrics: DocumentMetrics) => void` | - | Callback when step completes |
|
|
178
|
+
| `className` | `string` | - | Custom className for root |
|
|
179
|
+
|
|
180
|
+
### Types
|
|
181
|
+
|
|
182
|
+
```typescript
|
|
183
|
+
interface Step {
|
|
184
|
+
id: string;
|
|
185
|
+
number: number;
|
|
186
|
+
title: string;
|
|
187
|
+
status: 'pending' | 'active' | 'processing' | 'completed';
|
|
188
|
+
substeps?: SubStep[];
|
|
189
|
+
documentSection?: string;
|
|
190
|
+
logs: LogEntry[];
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
interface SubStep {
|
|
194
|
+
id: string;
|
|
195
|
+
label: string;
|
|
196
|
+
completed: boolean;
|
|
197
|
+
logs: LogEntry[];
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
interface LogEntry {
|
|
201
|
+
id: string;
|
|
202
|
+
timestamp: string;
|
|
203
|
+
level: 'info' | 'success' | 'warning' | 'processing';
|
|
204
|
+
message: string;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
interface DocumentMetrics {
|
|
208
|
+
tokens: number;
|
|
209
|
+
cost: number;
|
|
210
|
+
elapsed: number;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
interface DocumentIds {
|
|
214
|
+
caseNumber: string;
|
|
215
|
+
fileNumber: string;
|
|
216
|
+
}
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
## 🎯 Use Cases
|
|
220
|
+
|
|
221
|
+
- **Legal Document Generation**: Sworn affidavits, contracts, legal filings
|
|
222
|
+
- **Compliance Workflows**: Multi-step verification and approval processes
|
|
223
|
+
- **Technical Documentation**: System build processes, deployment pipelines
|
|
224
|
+
- **Manufacturing**: Assembly line visualization
|
|
225
|
+
- **Medical**: Patient intake and verification processes
|
|
226
|
+
- **Financial**: Loan application processing, KYC workflows
|
|
227
|
+
|
|
228
|
+
## 🎨 Customization
|
|
229
|
+
|
|
230
|
+
The component uses Tailwind CSS and can be customized through:
|
|
231
|
+
|
|
232
|
+
1. **Tailwind Theme**: Customize colors through CSS variables
|
|
233
|
+
2. **Custom Steps**: Provide your own step configuration
|
|
234
|
+
3. **Custom Logs**: Provide custom log messages for each step/substep
|
|
235
|
+
4. **Props**: Use the extensive props API for behavior customization
|
|
236
|
+
|
|
237
|
+
## 🏗️ Architecture
|
|
238
|
+
|
|
239
|
+
The component follows a clean, modular architecture:
|
|
240
|
+
|
|
241
|
+
```
|
|
242
|
+
blueprint-document-assembly/
|
|
243
|
+
├── src/
|
|
244
|
+
│ ├── components/
|
|
245
|
+
│ │ ├── BlueprintDocumentAssembly.tsx # Main component
|
|
246
|
+
│ │ ├── StepItem.tsx # Step visualization
|
|
247
|
+
│ │ ├── SubStepItem.tsx # Substep visualization
|
|
248
|
+
│ │ ├── DocumentPreview.tsx # Document builder
|
|
249
|
+
│ │ ├── WholeDocumentView.tsx # Completion overlay
|
|
250
|
+
│ │ ├── WholeDocumentContent.tsx # Static document
|
|
251
|
+
│ │ └── LogComponents.tsx # Log display
|
|
252
|
+
│ ├── types.ts # TypeScript definitions
|
|
253
|
+
│ ├── constants.ts # Default log data
|
|
254
|
+
│ ├── default-steps.ts # Default step config
|
|
255
|
+
│ └── index.tsx # Public exports
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
## 🤝 Contributing
|
|
259
|
+
|
|
260
|
+
Contributions are welcome! Please feel free to submit a Pull Request.
|
|
261
|
+
|
|
262
|
+
## 📄 License
|
|
263
|
+
|
|
264
|
+
MIT © [Your Name]
|
|
265
|
+
|
|
266
|
+
## 🙏 Acknowledgments
|
|
267
|
+
|
|
268
|
+
- Built with [Motion](https://motion.dev/) (Framer Motion)
|
|
269
|
+
- Icons by [Lucide](https://lucide.dev/)
|
|
270
|
+
- Styled with [Tailwind CSS](https://tailwindcss.com/)
|
|
271
|
+
|
|
272
|
+
## 📞 Support
|
|
273
|
+
|
|
274
|
+
- 📫 Issues: [GitHub Issues](https://github.com/yourusername/blueprint-document-assembly/issues)
|
|
275
|
+
- 💬 Discussions: [GitHub Discussions](https://github.com/yourusername/blueprint-document-assembly/discussions)
|
|
276
|
+
- 📧 Email: your.email@example.com
|
|
277
|
+
|
|
278
|
+
---
|
|
279
|
+
|
|
280
|
+
Made with ❤️ by [Your Name]
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
interface LogEntry {
|
|
4
|
+
id: string;
|
|
5
|
+
timestamp: string;
|
|
6
|
+
level: 'info' | 'success' | 'warning' | 'processing';
|
|
7
|
+
message: string;
|
|
8
|
+
}
|
|
9
|
+
interface SubStep {
|
|
10
|
+
id: string;
|
|
11
|
+
label: string;
|
|
12
|
+
completed: boolean;
|
|
13
|
+
logs: LogEntry[];
|
|
14
|
+
}
|
|
15
|
+
interface Step {
|
|
16
|
+
id: string;
|
|
17
|
+
number: number;
|
|
18
|
+
title: string;
|
|
19
|
+
status: 'pending' | 'active' | 'processing' | 'completed';
|
|
20
|
+
substeps?: SubStep[];
|
|
21
|
+
documentSection?: string;
|
|
22
|
+
logs: LogEntry[];
|
|
23
|
+
}
|
|
24
|
+
interface DocumentMetrics {
|
|
25
|
+
tokens: number;
|
|
26
|
+
cost: number;
|
|
27
|
+
elapsed: number;
|
|
28
|
+
}
|
|
29
|
+
interface DocumentIds {
|
|
30
|
+
caseNumber: string;
|
|
31
|
+
fileNumber: string;
|
|
32
|
+
}
|
|
33
|
+
interface BlueprintDocumentAssemblyProps {
|
|
34
|
+
/**
|
|
35
|
+
* Array of steps to process in the document assembly
|
|
36
|
+
* @default Default sworn affidavit steps
|
|
37
|
+
*/
|
|
38
|
+
steps?: Step[];
|
|
39
|
+
/**
|
|
40
|
+
* Custom log data for each step
|
|
41
|
+
* @default Default step logs
|
|
42
|
+
*/
|
|
43
|
+
stepLogs?: Record<string, string[][]>;
|
|
44
|
+
/**
|
|
45
|
+
* Custom log data for each substep
|
|
46
|
+
* @default Default substep logs
|
|
47
|
+
*/
|
|
48
|
+
substepLogs?: Record<string, string[][]>;
|
|
49
|
+
/**
|
|
50
|
+
* Enable/disable auto-scroll as new content appears
|
|
51
|
+
* @default true
|
|
52
|
+
*/
|
|
53
|
+
autoScroll?: boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Enable/disable whole document view on completion
|
|
56
|
+
* @default true
|
|
57
|
+
*/
|
|
58
|
+
showWholeDocumentView?: boolean;
|
|
59
|
+
/**
|
|
60
|
+
* Custom document IDs (case number, file number)
|
|
61
|
+
*/
|
|
62
|
+
documentIds?: DocumentIds;
|
|
63
|
+
/**
|
|
64
|
+
* Animation speed multiplier (1 = normal, 0.5 = slower, 2 = faster)
|
|
65
|
+
* @default 1
|
|
66
|
+
*/
|
|
67
|
+
animationSpeed?: number;
|
|
68
|
+
/**
|
|
69
|
+
* Callback when assembly is complete
|
|
70
|
+
*/
|
|
71
|
+
onComplete?: (metrics: DocumentMetrics) => void;
|
|
72
|
+
/**
|
|
73
|
+
* Callback when a step completes
|
|
74
|
+
*/
|
|
75
|
+
onStepComplete?: (step: Step, metrics: DocumentMetrics) => void;
|
|
76
|
+
/**
|
|
77
|
+
* Custom className for the root container
|
|
78
|
+
*/
|
|
79
|
+
className?: string;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
declare function BlueprintDocumentAssembly({ steps: initialSteps, stepLogs: customStepLogs, substepLogs: customSubstepLogs, autoScroll, showWholeDocumentView, documentIds: customDocumentIds, animationSpeed, onComplete, onStepComplete, className, }: BlueprintDocumentAssemblyProps): react_jsx_runtime.JSX.Element;
|
|
83
|
+
|
|
84
|
+
declare const DEFAULT_STEP_LOGS: Record<string, string[][]>;
|
|
85
|
+
declare const DEFAULT_SUBSTEP_LOGS: Record<string, string[][]>;
|
|
86
|
+
|
|
87
|
+
declare const DEFAULT_STEPS: Step[];
|
|
88
|
+
|
|
89
|
+
export { BlueprintDocumentAssembly, type BlueprintDocumentAssemblyProps, DEFAULT_STEPS, DEFAULT_STEP_LOGS, DEFAULT_SUBSTEP_LOGS, type DocumentIds, type DocumentMetrics, type LogEntry, type Step, type SubStep };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
interface LogEntry {
|
|
4
|
+
id: string;
|
|
5
|
+
timestamp: string;
|
|
6
|
+
level: 'info' | 'success' | 'warning' | 'processing';
|
|
7
|
+
message: string;
|
|
8
|
+
}
|
|
9
|
+
interface SubStep {
|
|
10
|
+
id: string;
|
|
11
|
+
label: string;
|
|
12
|
+
completed: boolean;
|
|
13
|
+
logs: LogEntry[];
|
|
14
|
+
}
|
|
15
|
+
interface Step {
|
|
16
|
+
id: string;
|
|
17
|
+
number: number;
|
|
18
|
+
title: string;
|
|
19
|
+
status: 'pending' | 'active' | 'processing' | 'completed';
|
|
20
|
+
substeps?: SubStep[];
|
|
21
|
+
documentSection?: string;
|
|
22
|
+
logs: LogEntry[];
|
|
23
|
+
}
|
|
24
|
+
interface DocumentMetrics {
|
|
25
|
+
tokens: number;
|
|
26
|
+
cost: number;
|
|
27
|
+
elapsed: number;
|
|
28
|
+
}
|
|
29
|
+
interface DocumentIds {
|
|
30
|
+
caseNumber: string;
|
|
31
|
+
fileNumber: string;
|
|
32
|
+
}
|
|
33
|
+
interface BlueprintDocumentAssemblyProps {
|
|
34
|
+
/**
|
|
35
|
+
* Array of steps to process in the document assembly
|
|
36
|
+
* @default Default sworn affidavit steps
|
|
37
|
+
*/
|
|
38
|
+
steps?: Step[];
|
|
39
|
+
/**
|
|
40
|
+
* Custom log data for each step
|
|
41
|
+
* @default Default step logs
|
|
42
|
+
*/
|
|
43
|
+
stepLogs?: Record<string, string[][]>;
|
|
44
|
+
/**
|
|
45
|
+
* Custom log data for each substep
|
|
46
|
+
* @default Default substep logs
|
|
47
|
+
*/
|
|
48
|
+
substepLogs?: Record<string, string[][]>;
|
|
49
|
+
/**
|
|
50
|
+
* Enable/disable auto-scroll as new content appears
|
|
51
|
+
* @default true
|
|
52
|
+
*/
|
|
53
|
+
autoScroll?: boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Enable/disable whole document view on completion
|
|
56
|
+
* @default true
|
|
57
|
+
*/
|
|
58
|
+
showWholeDocumentView?: boolean;
|
|
59
|
+
/**
|
|
60
|
+
* Custom document IDs (case number, file number)
|
|
61
|
+
*/
|
|
62
|
+
documentIds?: DocumentIds;
|
|
63
|
+
/**
|
|
64
|
+
* Animation speed multiplier (1 = normal, 0.5 = slower, 2 = faster)
|
|
65
|
+
* @default 1
|
|
66
|
+
*/
|
|
67
|
+
animationSpeed?: number;
|
|
68
|
+
/**
|
|
69
|
+
* Callback when assembly is complete
|
|
70
|
+
*/
|
|
71
|
+
onComplete?: (metrics: DocumentMetrics) => void;
|
|
72
|
+
/**
|
|
73
|
+
* Callback when a step completes
|
|
74
|
+
*/
|
|
75
|
+
onStepComplete?: (step: Step, metrics: DocumentMetrics) => void;
|
|
76
|
+
/**
|
|
77
|
+
* Custom className for the root container
|
|
78
|
+
*/
|
|
79
|
+
className?: string;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
declare function BlueprintDocumentAssembly({ steps: initialSteps, stepLogs: customStepLogs, substepLogs: customSubstepLogs, autoScroll, showWholeDocumentView, documentIds: customDocumentIds, animationSpeed, onComplete, onStepComplete, className, }: BlueprintDocumentAssemblyProps): react_jsx_runtime.JSX.Element;
|
|
83
|
+
|
|
84
|
+
declare const DEFAULT_STEP_LOGS: Record<string, string[][]>;
|
|
85
|
+
declare const DEFAULT_SUBSTEP_LOGS: Record<string, string[][]>;
|
|
86
|
+
|
|
87
|
+
declare const DEFAULT_STEPS: Step[];
|
|
88
|
+
|
|
89
|
+
export { BlueprintDocumentAssembly, type BlueprintDocumentAssemblyProps, DEFAULT_STEPS, DEFAULT_STEP_LOGS, DEFAULT_SUBSTEP_LOGS, type DocumentIds, type DocumentMetrics, type LogEntry, type Step, type SubStep };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
'use strict';var react=require('react'),react$1=require('motion/react'),lucideReact=require('lucide-react'),jsxRuntime=require('react/jsx-runtime');/* Blueprint Document Assembly Component v1.0.0 | MIT License */
|
|
2
|
+
function Ve({log:e,compact:c=false}){let r={info:{color:"text-cyan-500",symbol:"\u2192"},success:{color:"text-emerald-500",symbol:"\u2713"},warning:{color:"text-amber-500",symbol:"\u26A0"},processing:{color:"text-purple-500",symbol:"\u27F3"}}[e.level];return jsxRuntime.jsxs(react$1.motion.div,{initial:{opacity:0,x:-10},animate:{opacity:1,x:0},transition:{duration:.3},className:"flex items-start gap-2 text-foreground/80",children:[!c&&jsxRuntime.jsx("span",{className:"text-muted-foreground text-[10px]",children:e.timestamp}),jsxRuntime.jsx("span",{className:`${r.color} font-bold`,children:r.symbol}),jsxRuntime.jsx("span",{className:"flex-1 text-[11px]",children:e.message})]})}function z({logs:e,expanded:c,onToggle:x,compact:r=false}){let N=react.useRef(null);return react.useEffect(()=>{N.current&&(N.current.scrollTop=N.current.scrollHeight);},[e]),e.length===0?null:jsxRuntime.jsxs(react$1.motion.div,{initial:{opacity:0},animate:{opacity:1},transition:{duration:.4},className:r?"mt-2":"mt-3 ml-14",children:[jsxRuntime.jsxs("button",{onClick:x,className:`flex items-center gap-${r?"1.5":"2"} text-xs font-mono text-muted-foreground hover:text-foreground transition-colors ${r?"":"px-2 py-1 rounded"}`,children:[c?jsxRuntime.jsx(lucideReact.ChevronDown,{className:"w-3 h-3"}):jsxRuntime.jsx(lucideReact.ChevronRight,{className:"w-3 h-3"}),jsxRuntime.jsx(lucideReact.Terminal,{className:`w-${r?"2.5":"3"} h-${r?"2.5":"3"}`}),jsxRuntime.jsxs("span",{children:[r?"LOG":"SYSTEM LOG"," (",e.length,r?"":" entries",")"]})]}),jsxRuntime.jsx(react$1.AnimatePresence,{children:c&&jsxRuntime.jsx(react$1.motion.div,{initial:{height:0,opacity:0},animate:{height:"auto",opacity:1},exit:{height:0,opacity:0},transition:{duration:.3},className:"overflow-hidden",children:jsxRuntime.jsx("div",{ref:N,className:`bg-background border border-border/50 rounded-md p-2 font-mono text-xs ${r?"max-h-24":"max-h-32"} overflow-y-auto space-y-1 mt-2`,children:e.map(y=>jsxRuntime.jsx(Ve,{log:y,compact:r},y.id))})})})]})}function me({substep:e,delay:c}){let[x,r]=react.useState(false);return jsxRuntime.jsx(react$1.motion.div,{initial:{opacity:0,x:-20},animate:{opacity:1,x:0},transition:{delay:c,duration:.4},className:"pl-3",children:jsxRuntime.jsxs("div",{className:"flex items-start gap-2.5",children:[jsxRuntime.jsx(react$1.motion.div,{className:`
|
|
3
|
+
w-4 h-4 mt-0.5 rounded border-2 flex items-center justify-center flex-shrink-0 transition-all duration-500
|
|
4
|
+
${e.completed?"bg-emerald-500 border-emerald-500":"border-border bg-background"}
|
|
5
|
+
`,children:e.completed&&jsxRuntime.jsx(lucideReact.Check,{className:"w-3 h-3 text-white"})}),jsxRuntime.jsxs("div",{className:"flex-1 min-w-0",children:[jsxRuntime.jsx("span",{className:`
|
|
6
|
+
text-sm font-mono transition-colors duration-500
|
|
7
|
+
${e.completed?"text-foreground":"text-muted-foreground"}
|
|
8
|
+
`,children:e.label}),jsxRuntime.jsx(z,{logs:e.logs,expanded:x,onToggle:()=>r(!x),compact:true})]})]})})}var Q=[{id:"verify",number:1,title:"Document Verification",status:"pending",substeps:[{id:"v1",label:"Validate document template",completed:false,logs:[]},{id:"v2",label:"Check legal requirements",completed:false,logs:[]},{id:"v3",label:"Verify jurisdiction compliance",completed:false,logs:[]},{id:"v4",label:"Generate document metadata",completed:false,logs:[]}],documentSection:"header",logs:[]},{id:"identity",number:2,title:"Identity Validation",status:"pending",substeps:[{id:"i1",label:"Request credential check",completed:false,logs:[]},{id:"i2",label:"Verify biometric data",completed:false,logs:[]},{id:"i3",label:"Cross-reference databases",completed:false,logs:[]},{id:"i4",label:"Confirm identity match",completed:false,logs:[]}],documentSection:"affiant",logs:[]},{id:"statement",number:3,title:"Statement Processing",status:"pending",substeps:[{id:"s1",label:"Parse statement content",completed:false,logs:[]},{id:"s2",label:"Verify factual accuracy",completed:false,logs:[]},{id:"s3",label:"Format legal language",completed:false,logs:[]},{id:"s4",label:"Generate numbered paragraphs",completed:false,logs:[]}],documentSection:"statement",logs:[]},{id:"witness",number:4,title:"Witness Authorization",status:"pending",substeps:[{id:"w1",label:"Verify witness eligibility",completed:false,logs:[]},{id:"w2",label:"Check credential validity",completed:false,logs:[]},{id:"w3",label:"Generate attestation block",completed:false,logs:[]},{id:"w4",label:"Record witness information",completed:false,logs:[]}],documentSection:"witness",logs:[]},{id:"notary",number:5,title:"Notarization",status:"pending",substeps:[{id:"n1",label:"Connect to notary registry",completed:false,logs:[]},{id:"n2",label:"Validate commission status",completed:false,logs:[]},{id:"n3",label:"Generate cryptographic seal",completed:false,logs:[]},{id:"n4",label:"Apply digital signature",completed:false,logs:[]}],documentSection:"notary",logs:[]}],ee={verify:lucideReact.FileText,identity:lucideReact.Shield,statement:lucideReact.FileText,witness:lucideReact.Users,notary:lucideReact.Stamp};function be({step:e,isLast:c,showRipple:x}){let[r,N]=react.useState(false),[y,C]=react.useState(false);react.useEffect(()=>{e.status==="processing"&&N(true);},[e.status]),react.useEffect(()=>{if(e.status==="completed"){let A=setTimeout(()=>{N(false);},800);return ()=>clearTimeout(A)}},[e.status]);let O=ee[e.id]||ee.verify,T=(()=>{switch(e.status){case "completed":return {cardBg:"bg-emerald-500/5",border:"border-emerald-500/30",iconBg:"bg-gradient-to-br from-emerald-500 to-emerald-600",textColor:"text-emerald-600 dark:text-emerald-400"};case "active":return {cardBg:"bg-orange-500/5",border:"border-orange-500/30",iconBg:"bg-gradient-to-br from-orange-500 to-red-500",textColor:"text-orange-600 dark:text-orange-400"};case "processing":return {cardBg:"bg-purple-500/5",border:"border-purple-500/30",iconBg:"bg-gradient-to-br from-purple-500 to-purple-600",textColor:"text-purple-600 dark:text-purple-400"};default:return {cardBg:"bg-muted/20",border:"border-border",iconBg:"bg-muted",textColor:"text-muted-foreground"}}})(),q=e.substeps?.filter(A=>A.completed).length||0,j=e.substeps?.length||0;return jsxRuntime.jsxs("div",{className:"relative",children:[jsxRuntime.jsx(react$1.AnimatePresence,{children:x&&jsxRuntime.jsx(react$1.motion.div,{className:"absolute inset-0 rounded-lg bg-emerald-500/20",initial:{scale:1,opacity:.4},animate:{scale:1.05,opacity:0},exit:{opacity:0},transition:{duration:.8,ease:"easeOut"}})}),jsxRuntime.jsxs(react$1.motion.div,{initial:{opacity:0,x:-30},animate:{opacity:1,x:0},transition:{delay:e.number*.15,duration:.5},className:"relative",children:[jsxRuntime.jsx("div",{className:`
|
|
9
|
+
relative p-5 rounded-lg transition-all duration-500 border-2
|
|
10
|
+
${T.cardBg} ${T.border}
|
|
11
|
+
`,children:jsxRuntime.jsxs("div",{className:"flex items-start gap-4",children:[jsxRuntime.jsx(react$1.motion.div,{className:`
|
|
12
|
+
w-11 h-11 rounded-full flex items-center justify-center flex-shrink-0
|
|
13
|
+
border-2 transition-all duration-500 ${T.iconBg}
|
|
14
|
+
`,initial:{scale:.8},animate:{scale:1},transition:{delay:e.number*.15+.2,type:"spring",stiffness:200},children:e.status==="completed"?jsxRuntime.jsx(lucideReact.Check,{className:"w-5 h-5 text-white"}):e.status==="processing"?jsxRuntime.jsx(lucideReact.Loader2,{className:"w-5 h-5 text-white animate-spin"}):e.status==="active"?jsxRuntime.jsx(O,{className:"w-5 h-5 text-white"}):jsxRuntime.jsx("span",{className:"text-sm text-muted-foreground font-semibold",children:e.number})}),jsxRuntime.jsxs("div",{className:"flex-1 min-w-0",children:[jsxRuntime.jsx("h3",{className:`text-base font-semibold transition-colors duration-500 ${T.textColor}`,children:e.title}),jsxRuntime.jsxs("div",{className:"flex items-center gap-2 mt-1",children:[jsxRuntime.jsxs("p",{className:"text-xs text-muted-foreground font-mono",children:["STEP_",e.number.toString().padStart(2,"0")]}),e.status==="completed"&&jsxRuntime.jsx("span",{className:"text-[10px] px-2 py-0.5 rounded-full bg-emerald-500/10 text-emerald-600 dark:text-emerald-400 font-mono border border-emerald-500/20",children:"\u2713 DONE"}),e.status==="completed"&&e.substeps&&jsxRuntime.jsxs("span",{className:"text-[10px] px-2 py-0.5 rounded-full bg-emerald-500/10 text-emerald-600 dark:text-emerald-400 font-mono",children:[q,"/",j," substeps"]})]}),jsxRuntime.jsx(react$1.AnimatePresence,{children:r&&e.substeps&&jsxRuntime.jsx(react$1.motion.div,{initial:{height:0,opacity:0},animate:{height:"auto",opacity:1},exit:{height:0,opacity:0},transition:{duration:.4},className:"overflow-hidden",children:jsxRuntime.jsx("div",{className:"mt-4 space-y-3 pl-3 border-l-2 border-purple-500/20",children:e.substeps.map((A,m)=>jsxRuntime.jsx(me,{substep:A,delay:m*.15},A.id))})})})]})]})}),jsxRuntime.jsx(z,{logs:e.logs,expanded:y,onToggle:()=>C(!y)}),!c&&jsxRuntime.jsx(react$1.motion.div,{className:"absolute left-[22px] top-full h-6 w-0.5 bg-border",initial:{scaleY:0},animate:{scaleY:1},transition:{delay:e.number*.15+.4,duration:.3},style:{transformOrigin:"top"}})]})]})}function ye({completedSubsteps:e,documentIds:c}){return jsxRuntime.jsx("div",{className:"relative max-w-4xl mx-auto",children:jsxRuntime.jsxs(react$1.motion.div,{className:"relative bg-gradient-to-br from-[#FDFDF8] to-[#F8F8F0] dark:from-gray-900 dark:to-gray-800 rounded-lg",style:{boxShadow:"0 25px 50px -12px rgba(0, 0, 0, 0.25), 0 10px 15px -3px rgba(0, 0, 0, 0.1)"},initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.8},children:[jsxRuntime.jsx("div",{className:"absolute inset-0 opacity-20 dark:opacity-10 rounded-lg pointer-events-none",style:{backgroundImage:`url("data:image/svg+xml,%3Csvg viewBox='0 0 400 400' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' /%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)' opacity='0.05'/%3E%3C/svg%3E")`}}),jsxRuntime.jsx("div",{className:"absolute inset-0 flex items-center justify-center pointer-events-none opacity-[0.02] dark:opacity-[0.04]",children:jsxRuntime.jsx("div",{className:"text-9xl font-bold transform -rotate-45 select-none text-gray-600",children:"OFFICIAL"})}),jsxRuntime.jsxs("div",{className:"relative p-16 space-y-10",style:{fontFamily:'Georgia, "Times New Roman", Times, serif'},children:[jsxRuntime.jsx(react$1.AnimatePresence,{children:e.has("v1")&&jsxRuntime.jsx(react$1.motion.div,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},transition:{duration:.8},className:"border-b-2 border-cyan-500/20 pb-6",style:{boxShadow:"0 1px 3px rgba(6, 182, 212, 0.1)"},children:jsxRuntime.jsxs("div",{className:"text-center space-y-3",children:[jsxRuntime.jsx(s,{text:"SWORN AFFIDAVIT",delay:.2,className:"text-3xl font-extrabold tracking-widest text-gray-900 dark:text-gray-100"}),e.has("v2")&&jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(s,{text:"STATE OF [JURISDICTION]",delay:.5,className:"text-sm tracking-widest text-gray-700 dark:text-gray-300"}),jsxRuntime.jsx(s,{text:"COUNTY OF [COUNTY NAME]",delay:.8,className:"text-sm tracking-widest text-gray-700 dark:text-gray-300"})]}),e.has("v4")&&jsxRuntime.jsx(s,{text:`CASE NO. ${c.caseNumber}`,delay:1.1,className:"text-base font-bold text-cyan-600 dark:text-cyan-400 tracking-wider mt-2"})]})})}),jsxRuntime.jsx(react$1.AnimatePresence,{children:e.has("i1")&&jsxRuntime.jsxs(react$1.motion.div,{initial:{opacity:0,y:10},animate:{opacity:1,y:0},transition:{duration:.8},className:"border-l-[6px] border-cyan-500/40 pl-6 py-4",style:{boxShadow:"-2px 0 8px rgba(6, 182, 212, 0.1)"},children:[jsxRuntime.jsx(s,{text:"AFFIANT INFORMATION:",delay:.2,className:"text-lg font-extrabold tracking-wide text-cyan-700 dark:text-cyan-400 mb-5 uppercase"}),jsxRuntime.jsx(s,{text:"I, [FULL NAME], being duly sworn, depose and state:",delay:.5,className:"text-base leading-relaxed text-gray-800 dark:text-gray-200 mb-4 italic"}),e.has("i2")&&jsxRuntime.jsxs("div",{className:"space-y-2 ml-8 text-sm text-gray-700 dark:text-gray-300",children:[jsxRuntime.jsx(s,{text:"Address: [STREET ADDRESS]",delay:.8}),jsxRuntime.jsx(s,{text:"City/State: [CITY, STATE ZIP]",delay:1})]}),e.has("i3")&&jsxRuntime.jsx("div",{className:"space-y-2 ml-8 text-sm text-gray-700 dark:text-gray-300 mt-2",children:jsxRuntime.jsx(s,{text:"DOB: [DATE OF BIRTH]",delay:1.2})}),e.has("i4")&&jsxRuntime.jsx("div",{className:"space-y-2 ml-8 text-sm text-gray-700 dark:text-gray-300 mt-2",children:jsxRuntime.jsx(s,{text:"ID Verified: \u2713 CONFIRMED",delay:1.4,className:"text-emerald-600 dark:text-emerald-400 font-bold"})})]})}),e.has("s1")&&jsxRuntime.jsxs(react$1.motion.div,{initial:{opacity:0,y:10},animate:{opacity:1,y:0},transition:{duration:.8},className:"border-l-[6px] border-orange-500/40 pl-6 py-4",style:{boxShadow:"-2px 0 8px rgba(249, 115, 22, 0.1)"},children:[jsxRuntime.jsx(s,{text:"STATEMENT OF FACTS:",delay:.2,className:"text-lg font-extrabold tracking-wide text-orange-700 dark:text-orange-400 mb-5 uppercase"}),jsxRuntime.jsx(react$1.AnimatePresence,{children:e.has("s1")&&jsxRuntime.jsx(react$1.motion.div,{initial:{opacity:0},animate:{opacity:1},transition:{duration:.6},className:"mb-5",children:jsxRuntime.jsx("div",{className:"ml-8 text-base leading-loose text-gray-800 dark:text-gray-200",children:jsxRuntime.jsx(s,{text:"1. That I have personal knowledge of the facts stated herein and am competent to testify to the same.",delay:.3})})})}),jsxRuntime.jsx(react$1.AnimatePresence,{children:e.has("s2")&&jsxRuntime.jsx(react$1.motion.div,{initial:{opacity:0},animate:{opacity:1},transition:{duration:.6},className:"mb-5",children:jsxRuntime.jsx("div",{className:"ml-8 text-base leading-loose text-gray-800 dark:text-gray-200",children:jsxRuntime.jsx(s,{text:"2. That on or about [DATE], the following events occurred: [DETAILED STATEMENT OF MATERIAL FACTS]",delay:.3})})})}),jsxRuntime.jsx(react$1.AnimatePresence,{children:e.has("s3")&&jsxRuntime.jsx(react$1.motion.div,{initial:{opacity:0},animate:{opacity:1},transition:{duration:.6},className:"mb-5",children:jsxRuntime.jsx("div",{className:"ml-8 text-base leading-loose text-gray-800 dark:text-gray-200",children:jsxRuntime.jsx(s,{text:"3. That the information provided herein is true and correct to the best of my knowledge and belief.",delay:.3})})})}),jsxRuntime.jsx(react$1.AnimatePresence,{children:e.has("s4")&&jsxRuntime.jsx(react$1.motion.div,{initial:{opacity:0},animate:{opacity:1},transition:{duration:.6},children:jsxRuntime.jsx("div",{className:"ml-8 text-base leading-loose text-gray-800 dark:text-gray-200",children:jsxRuntime.jsx(s,{text:"4. That I understand the penalties for perjury under law.",delay:.3})})})})]}),jsxRuntime.jsx(react$1.AnimatePresence,{children:e.has("w1")&&jsxRuntime.jsxs(react$1.motion.div,{initial:{opacity:0,y:10},animate:{opacity:1,y:0},transition:{duration:.8},className:"border-l-[6px] border-purple-500/40 pl-6 py-4",style:{boxShadow:"-2px 0 8px rgba(168, 85, 247, 0.1)"},children:[jsxRuntime.jsx(s,{text:"WITNESS ATTESTATION:",delay:.2,className:"text-lg font-extrabold tracking-wide text-purple-700 dark:text-purple-400 mb-5 uppercase"}),e.has("w2")&&jsxRuntime.jsxs("div",{className:"space-y-2 text-sm text-gray-700 dark:text-gray-300",children:[jsxRuntime.jsx(s,{text:"Witnessed by: [WITNESS NAME]",delay:.5}),jsxRuntime.jsx(s,{text:"Witness Address: [ADDRESS]",delay:.7})]}),e.has("w4")&&jsxRuntime.jsxs("div",{className:"mt-8 pt-6 border-t border-gray-300 dark:border-gray-600",children:[jsxRuntime.jsx(react$1.motion.div,{initial:{width:0},animate:{width:"80%"},transition:{delay:.9,duration:.7},className:"border-b-2 border-gray-800 dark:border-gray-400 mb-2"}),jsxRuntime.jsx(s,{text:"Witness Signature",delay:1.1,className:"text-xs text-gray-500 italic"}),jsxRuntime.jsx(s,{text:`Date: ${new Date().toLocaleDateString()}`,delay:1.3,className:"mt-4 text-sm"})]})]})}),jsxRuntime.jsx(react$1.AnimatePresence,{children:e.has("n1")&&jsxRuntime.jsxs(react$1.motion.div,{initial:{opacity:0,y:10},animate:{opacity:1,y:0},transition:{duration:.8},className:"border-2 border-emerald-500/40 rounded-lg p-6 bg-emerald-500/5 relative overflow-hidden",style:{boxShadow:"0 4px 12px rgba(16, 185, 129, 0.15)"},children:[e.has("n3")&&jsxRuntime.jsxs(react$1.motion.div,{initial:{scale:0,opacity:0},animate:{scale:1,opacity:1},transition:{delay:.5,duration:.8,type:"spring"},className:"absolute right-8 top-1/2 -translate-y-1/2 w-32 h-32 opacity-15",children:[jsxRuntime.jsx("div",{className:"absolute inset-0 rounded-full border-[5px] border-emerald-600",style:{boxShadow:"inset 0 2px 8px rgba(0,0,0,0.3)"}}),jsxRuntime.jsx("div",{className:"absolute inset-2 rounded-full border-2 border-emerald-500"}),jsxRuntime.jsx("div",{className:"absolute inset-0 flex items-center justify-center",children:jsxRuntime.jsx(lucideReact.Stamp,{className:"w-12 h-12 text-emerald-600"})})]}),jsxRuntime.jsx(s,{text:"NOTARY PUBLIC CERTIFICATION:",delay:.2,className:"text-lg font-extrabold tracking-wide text-emerald-700 dark:text-emerald-400 mb-5 uppercase"}),jsxRuntime.jsxs("div",{className:"space-y-2 text-sm text-gray-700 dark:text-gray-300 pr-36",children:[e.has("n1")&&jsxRuntime.jsx(s,{text:`Subscribed and sworn before me this ${new Date().toLocaleDateString()}`,delay:.5,className:"leading-relaxed"}),e.has("n2")&&jsxRuntime.jsxs("div",{className:"my-4 border-t border-gray-300 dark:border-gray-600 pt-4",children:[jsxRuntime.jsx(s,{text:"Notary Public: [NOTARY NAME]",delay:.8}),jsxRuntime.jsx(s,{text:"Commission Number: [NUMBER]",delay:1}),jsxRuntime.jsx(s,{text:`My Commission Expires: ${new Date(Date.now()+365*24*60*60*1e3).toLocaleDateString()}`,delay:1.2})]}),e.has("n4")&&jsxRuntime.jsxs("div",{className:"mt-8 pt-4",children:[jsxRuntime.jsx(react$1.motion.div,{initial:{width:0},animate:{width:"75%"},transition:{delay:1.5,duration:.7},className:"border-b-2 border-gray-800 dark:border-gray-400 mb-2"}),jsxRuntime.jsx(s,{text:"Notary Signature",delay:1.7,className:"text-xs text-gray-500 italic"})]})]}),e.has("n3")&&jsxRuntime.jsx(react$1.motion.div,{initial:{opacity:0},animate:{opacity:1},transition:{delay:1.9},className:"absolute bottom-4 left-6 px-3 py-1.5 border-2 border-emerald-600/50 rounded text-xs font-mono text-emerald-600 dark:text-emerald-400 font-bold bg-emerald-500/10",children:"[OFFICIAL SEAL]"})]})})]})]})})}function s({text:e,delay:c,className:x=""}){let[r,N]=react.useState(""),[y,C]=react.useState(true);return react.useEffect(()=>{let O=setTimeout(()=>{let I=0,T=setInterval(()=>{I<=e.length?(N(e.slice(0,I)),I++):(clearInterval(T),setTimeout(()=>C(false),300));},25);return ()=>clearInterval(T)},c*1e3);return ()=>clearTimeout(O)},[e,c]),jsxRuntime.jsxs("div",{className:`${x} font-serif`,style:{lineHeight:"1.8"},children:[r,y&&jsxRuntime.jsx(react$1.motion.span,{className:"inline-block w-0.5 h-4 bg-cyan-500 ml-1",animate:{opacity:[1,0]},transition:{duration:.7,repeat:1/0}})]})}function ve({documentIds:e}){return jsxRuntime.jsxs("div",{className:"p-12 space-y-8",style:{fontFamily:'Georgia, "Times New Roman", Times, serif'},children:[jsxRuntime.jsx("div",{className:"border-b-2 border-cyan-500/20 pb-6",children:jsxRuntime.jsxs("div",{className:"text-center space-y-2",children:[jsxRuntime.jsx("div",{className:"text-2xl font-extrabold tracking-widest text-gray-900 dark:text-gray-100",children:"SWORN AFFIDAVIT"}),jsxRuntime.jsx("div",{className:"text-xs tracking-widest text-gray-700 dark:text-gray-300",children:"STATE OF [JURISDICTION]"}),jsxRuntime.jsx("div",{className:"text-xs tracking-widest text-gray-700 dark:text-gray-300",children:"COUNTY OF [COUNTY NAME]"}),jsxRuntime.jsxs("div",{className:"text-sm font-bold text-cyan-600 dark:text-cyan-400 tracking-wider mt-2",children:["CASE NO. ",e.caseNumber]})]})}),jsxRuntime.jsxs("div",{className:"border-l-[6px] border-cyan-500/40 pl-6 py-4",children:[jsxRuntime.jsx("div",{className:"text-base font-extrabold tracking-wide text-cyan-700 dark:text-cyan-400 mb-4 uppercase",children:"AFFIANT INFORMATION:"}),jsxRuntime.jsx("div",{className:"text-sm leading-relaxed text-gray-800 dark:text-gray-200 mb-3 italic",children:"I, [FULL NAME], being duly sworn, depose and state:"}),jsxRuntime.jsxs("div",{className:"space-y-1 ml-8 text-xs text-gray-700 dark:text-gray-300",children:[jsxRuntime.jsx("div",{children:"Address: [STREET ADDRESS]"}),jsxRuntime.jsx("div",{children:"City/State: [CITY, STATE ZIP]"}),jsxRuntime.jsx("div",{children:"DOB: [DATE OF BIRTH]"}),jsxRuntime.jsx("div",{className:"text-emerald-600 dark:text-emerald-400 font-bold",children:"ID Verified: \u2713 CONFIRMED"})]})]}),jsxRuntime.jsxs("div",{className:"border-l-[6px] border-orange-500/40 pl-6 py-4",children:[jsxRuntime.jsx("div",{className:"text-base font-extrabold tracking-wide text-orange-700 dark:text-orange-400 mb-4 uppercase",children:"STATEMENT OF FACTS:"}),jsxRuntime.jsxs("div",{className:"space-y-3 ml-8 text-sm leading-loose text-gray-800 dark:text-gray-200",children:[jsxRuntime.jsx("div",{children:"1. That I have personal knowledge of the facts stated herein and am competent to testify to the same."}),jsxRuntime.jsx("div",{children:"2. That on or about [DATE], the following events occurred: [DETAILED STATEMENT OF MATERIAL FACTS]"}),jsxRuntime.jsx("div",{children:"3. That the information provided herein is true and correct to the best of my knowledge and belief."}),jsxRuntime.jsx("div",{children:"4. That I understand the penalties for perjury under law."})]})]}),jsxRuntime.jsxs("div",{className:"border-l-[6px] border-purple-500/40 pl-6 py-4",children:[jsxRuntime.jsx("div",{className:"text-base font-extrabold tracking-wide text-purple-700 dark:text-purple-400 mb-4 uppercase",children:"WITNESS ATTESTATION:"}),jsxRuntime.jsxs("div",{className:"space-y-2 text-xs text-gray-700 dark:text-gray-300",children:[jsxRuntime.jsx("div",{children:"Witnessed by: [WITNESS NAME]"}),jsxRuntime.jsx("div",{children:"Witness Address: [ADDRESS]"})]}),jsxRuntime.jsxs("div",{className:"mt-6 pt-4 border-t border-gray-300 dark:border-gray-600",children:[jsxRuntime.jsx("div",{className:"border-b-2 border-gray-800 dark:border-gray-400 mb-2 w-3/4"}),jsxRuntime.jsx("div",{className:"text-xs text-gray-500 italic",children:"Witness Signature"}),jsxRuntime.jsxs("div",{className:"mt-3 text-xs",children:["Date: ",new Date().toLocaleDateString()]})]})]}),jsxRuntime.jsxs("div",{className:"border-2 border-emerald-500/40 rounded-lg p-6 bg-emerald-500/5 relative overflow-hidden",children:[jsxRuntime.jsxs("div",{className:"absolute right-8 top-1/2 -translate-y-1/2 w-24 h-24 opacity-15",children:[jsxRuntime.jsx("div",{className:"absolute inset-0 rounded-full border-[4px] border-emerald-600"}),jsxRuntime.jsx("div",{className:"absolute inset-2 rounded-full border-2 border-emerald-500"}),jsxRuntime.jsx("div",{className:"absolute inset-0 flex items-center justify-center",children:jsxRuntime.jsx(lucideReact.Stamp,{className:"w-10 h-10 text-emerald-600"})})]}),jsxRuntime.jsx("div",{className:"text-base font-extrabold tracking-wide text-emerald-700 dark:text-emerald-400 mb-4 uppercase",children:"NOTARY PUBLIC CERTIFICATION:"}),jsxRuntime.jsxs("div",{className:"space-y-2 text-xs text-gray-700 dark:text-gray-300 pr-28",children:[jsxRuntime.jsxs("div",{className:"leading-relaxed",children:["Subscribed and sworn before me this ",new Date().toLocaleDateString()]}),jsxRuntime.jsxs("div",{className:"my-3 border-t border-gray-300 dark:border-gray-600 pt-3 space-y-1",children:[jsxRuntime.jsx("div",{children:"Notary Public: [NOTARY NAME]"}),jsxRuntime.jsx("div",{children:"Commission Number: [NUMBER]"}),jsxRuntime.jsxs("div",{children:["My Commission Expires: ",new Date(Date.now()+365*24*60*60*1e3).toLocaleDateString()]})]}),jsxRuntime.jsxs("div",{className:"mt-6 pt-3",children:[jsxRuntime.jsx("div",{className:"border-b-2 border-gray-800 dark:border-gray-400 mb-2 w-2/3"}),jsxRuntime.jsx("div",{className:"text-xs text-gray-500 italic",children:"Notary Signature"})]})]}),jsxRuntime.jsx("div",{className:"absolute bottom-4 left-6 px-3 py-1.5 border-2 border-emerald-600/50 rounded text-xs font-mono text-emerald-600 dark:text-emerald-400 font-bold bg-emerald-500/10",children:"[OFFICIAL SEAL]"})]})]})}function he({show:e,onClose:c,documentIds:x,metrics:r}){return jsxRuntime.jsx(react$1.AnimatePresence,{children:e&&jsxRuntime.jsxs(react$1.motion.div,{initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},transition:{duration:.5},className:"absolute inset-0 z-50 bg-background/98 backdrop-blur-sm",children:[jsxRuntime.jsx(react$1.motion.button,{initial:{opacity:0,scale:.8},animate:{opacity:1,scale:1},transition:{delay:1.5,duration:.4},onClick:c,className:"absolute top-6 right-6 z-60 p-3 rounded-full bg-background border-2 border-border hover:border-orange-500/50 transition-all shadow-lg group",children:jsxRuntime.jsx(lucideReact.X,{className:"w-5 h-5 text-muted-foreground group-hover:text-orange-500 transition-colors"})}),jsxRuntime.jsx(react$1.motion.div,{initial:{opacity:0,scale:0},animate:{opacity:[0,1,1,0],scale:[.5,1.5,1.5,2]},transition:{duration:2,times:[0,.2,.8,1]},className:"absolute inset-0 pointer-events-none",children:jsxRuntime.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-orange-500/5 via-transparent to-emerald-500/5"})}),[...Array(12)].map((N,y)=>jsxRuntime.jsx(react$1.motion.div,{initial:{opacity:0,scale:0,x:"50%",y:"50%"},animate:{opacity:[0,1,0],scale:[0,1,0],x:`${50+Math.cos(y/12*Math.PI*2)*40}%`,y:`${50+Math.sin(y/12*Math.PI*2)*40}%`},transition:{duration:1.5,delay:y*.1,ease:"easeOut"},className:"absolute top-1/2 left-1/2 pointer-events-none",children:jsxRuntime.jsx(lucideReact.Sparkles,{className:"w-6 h-6 text-orange-500"})},y)),jsxRuntime.jsxs(react$1.motion.div,{initial:{opacity:0,y:-30},animate:{opacity:1,y:0},transition:{delay:.8,duration:.6},className:"absolute top-8 left-1/2 -translate-x-1/2 z-50 text-center",children:[jsxRuntime.jsx("h2",{className:"text-3xl font-bold bg-gradient-to-r from-orange-500 via-red-500 to-emerald-500 bg-clip-text text-transparent mb-2",children:"Document Assembly Complete"}),jsxRuntime.jsxs("p",{className:"text-sm text-muted-foreground font-mono",children:["LEGAL-",x.fileNumber,".pdf \u2022 ",r.tokens.toLocaleString()," tokens \u2022 $",r.cost.toFixed(4)," \u2022 ",r.elapsed.toFixed(1),"s"]})]}),jsxRuntime.jsx(react$1.motion.div,{initial:{scale:1.5,opacity:0,y:100},animate:{scale:1,opacity:1,y:0},transition:{delay:1.2,duration:1.2,type:"spring",stiffness:80,damping:20},className:"h-full w-full flex items-center justify-center pt-28 pb-12 px-12 overflow-hidden",children:jsxRuntime.jsxs("div",{className:"relative w-full max-w-3xl h-full",children:[jsxRuntime.jsx(react$1.motion.div,{initial:{opacity:0},animate:{opacity:1},transition:{delay:2,duration:.5},className:"absolute -bottom-6 left-1/2 -translate-x-1/2 w-3/4 h-8 bg-gradient-to-b from-black/20 to-transparent blur-2xl rounded-full"}),jsxRuntime.jsx(react$1.motion.div,{initial:{boxShadow:"0 0 0 rgba(249, 115, 22, 0)"},animate:{boxShadow:["0 0 0 rgba(249, 115, 22, 0)","0 0 60px rgba(249, 115, 22, 0.3)","0 0 40px rgba(249, 115, 22, 0.2)"]},transition:{duration:2,times:[0,.5,1],delay:2},className:"relative bg-gradient-to-br from-[#FDFDF8] to-[#F8F8F0] dark:from-gray-900 dark:to-gray-800 rounded-lg overflow-hidden h-full border-2 border-border/50",style:{boxShadow:"0 30px 60px -12px rgba(0, 0, 0, 0.35), 0 20px 25px -5px rgba(0, 0, 0, 0.15)"},children:jsxRuntime.jsx("div",{className:"h-full overflow-y-auto",children:jsxRuntime.jsx(ve,{documentIds:x})})})]})})]})})}var te={verify:[["info","Initializing document verification system..."],["processing","Loading verification protocols v3.2.1"],["success","Protocols loaded successfully"]],identity:[["info","Starting identity validation sequence"],["processing","Establishing secure connection"],["success","Connection established"]],statement:[["info","Initializing statement processing pipeline"],["processing","Loading NLP models for legal analysis"],["success","Models loaded successfully"]],witness:[["info","Starting witness authorization protocol"],["processing","Initializing verification systems"],["success","Systems initialized"]],notary:[["info","Initiating notarization sequence"],["processing","Preparing secure connection"],["success","Ready for notarization"]]},ae={v1:[["info","Loading document template..."],["processing","Validating template structure"],["info","Checking template version"],["success","Template validated: SWORN_AFFIDAVIT_STD v2.1"]],v2:[["info","Scanning legal requirements database..."],["processing","Cross-referencing state regulations"],["info","Validating federal compliance"],["success","Legal requirements verified"]],v3:[["info","Determining jurisdiction..."],["processing","Checking state-specific requirements"],["info","Validating county regulations"],["success","Jurisdiction compliance: CONFIRMED"]],v4:[["info","Generating document metadata..."],["processing","Creating unique document ID"],["info","Assigning case number"],["success","Metadata generated successfully"]],i1:[["info","Requesting credential verification..."],["processing","Connecting to identity API"],["info","Sending authentication request"],["success","Credentials authenticated"]],i2:[["info","Initiating biometric verification..."],["processing","Running facial recognition scan"],["info","Analyzing biometric markers"],["success","Biometric data verified: 99.2% match"]],i3:[["info","Accessing identity databases..."],["processing","Cross-referencing government records"],["info","Validating social security records"],["success","Database cross-reference complete"]],i4:[["info","Confirming identity match..."],["processing","Aggregating verification results"],["info","Performing final validation"],["success","Identity confirmed: VERIFIED"]],s1:[["info","Parsing statement content..."],["processing","Tokenizing input text"],["info","Extracting semantic structure"],["success","Content parsed: 847 tokens"]],s2:[["info","Verifying factual accuracy..."],["processing","Running fact-checking algorithms"],["info","Cross-referencing with knowledge base"],["success","Accuracy verified: 98.7% confidence"]],s3:[["info","Formatting legal language..."],["processing","Applying legal terminology standards"],["info","Restructuring paragraphs per jurisdiction"],["success","Legal format applied successfully"]],s4:[["info","Generating numbered paragraphs..."],["processing","Creating hierarchical structure"],["info","Applying citation formatting"],["success","Paragraphs generated: 4 sections"]],w1:[["info","Checking witness eligibility..."],["processing","Verifying age requirements"],["info","Validating witness capacity"],["success","Witness eligibility: CONFIRMED"]],w2:[["info","Validating witness credentials..."],["processing","Checking identification documents"],["info","Verifying witness signature authority"],["success","Credentials validated successfully"]],w3:[["info","Generating attestation block..."],["processing","Creating witness declaration"],["info","Formatting attestation language"],["success","Attestation block generated"]],w4:[["info","Recording witness information..."],["processing","Storing witness metadata"],["info","Generating witness certificate"],["success","Witness information recorded"]],n1:[["info","Connecting to notary public registry..."],["processing","Establishing secure connection"],["info","Authenticating registry access"],["success","Registry connection established"]],n2:[["info","Validating notary commission..."],["processing","Checking commission status"],["info","Verifying commission expiration date"],["success","Commission status: ACTIVE"]],n3:[["info","Generating cryptographic seal..."],["processing","Creating digital signature"],["info","Applying encryption protocols"],["success","Cryptographic seal generated"]],n4:[["info","Applying digital signature..."],["processing","Embedding signature metadata"],["info","Finalizing document certification"],["success","Notarization complete - Document sealed"]]};function at({steps:e,stepLogs:c,substepLogs:x,autoScroll:r=true,showWholeDocumentView:N=true,documentIds:y,animationSpeed:C=1,onComplete:O,onStepComplete:I,className:T}){let q=e??Q.map(p=>({...p,logs:[],substeps:p.substeps?.map(a=>({...a,logs:[],completed:false}))})),j=c??te,A=x??ae,[m,B]=react.useState(q),[Se,ke]=react.useState(new Set),[H,Te]=react.useState(new Set),[L,J]=react.useState({tokens:0,cost:0,elapsed:0}),[Ae,oe]=react.useState(null),[se,Ee]=react.useState(0),_=react.useRef(null),[De,re]=react.useState(false),Z=react.useRef(y??{caseNumber:Date.now().toString().slice(-8),fileNumber:Date.now().toString().slice(-6)}).current,w=p=>new Promise(a=>setTimeout(a,p/C)),Ce=(p,a,M,U)=>{let n=new Date().toLocaleTimeString("en-US",{hour12:false,hour:"2-digit",minute:"2-digit",second:"2-digit"}),f={id:`${Date.now()}-${Math.random()}`,timestamp:n,level:M,message:U};B(S=>S.map((v,R)=>R===p?a&&v.substeps?{...v,substeps:v.substeps.map(V=>V.id===a?{...V,logs:[...V.logs,f]}:V)}:{...v,logs:[...v.logs,f]}:v));},ne=async(p,a,M)=>{for(let[U,n]of M)await w(250+Math.random()*300),Ce(p,a,U,n);},Ie=m.length,le=m.filter(p=>p.status==="completed").length/Ie*100;return react.useEffect(()=>{if(r&&_.current&&H.size>0){let p=setTimeout(()=>{_.current?.scrollTo({top:_.current.scrollHeight,behavior:"smooth"});},400/C);return ()=>clearTimeout(p)}},[H,r,C]),react.useEffect(()=>{(async()=>{for(let a=0;a<m.length;a++){await w(800),B(n=>n.map((f,S)=>S===a?{...f,status:"active"}:f)),Ee(a);let M=j[m[a].id];if(M&&await ne(a,null,M),m[a].substeps){await w(600),B(n=>n.map((f,S)=>S===a?{...f,status:"processing"}:f));for(let n=0;n<m[a].substeps.length;n++){let f=m[a].substeps[n].id;await w(500);let S=A[f];S&&await ne(a,f,S),await w(400),B(v=>v.map((R,V)=>{if(V===a&&R.substeps){let X=[...R.substeps];return X[n]={...X[n],completed:true},{...R,substeps:X}}return R})),J(v=>({tokens:v.tokens+Math.floor(Math.random()*150+50),cost:v.cost+Math.random()*.002,elapsed:v.elapsed+Math.random()*.8})),Te(v=>new Set([...v,f])),await w(300);}}else await w(600);oe(m[a].id),await w(200),B(n=>n.map((f,S)=>S===a?{...f,status:"completed"}:f)),m[a].documentSection&&(await w(500),ke(n=>new Set([...n,m[a].documentSection]))),await w(400),oe(null);let U={tokens:L.tokens+Math.floor(Math.random()*200+100),cost:L.cost+Math.random()*.005,elapsed:L.elapsed+Math.random()*1.2};J(n=>({tokens:n.tokens+Math.floor(Math.random()*200+100),cost:n.cost+Math.random()*.005,elapsed:n.elapsed+Math.random()*1.2})),I&&I(m[a],U);}N&&re(true),O&&J(a=>(O(a),a));})();},[]),jsxRuntime.jsxs("div",{className:`relative w-full h-screen overflow-hidden bg-background flex flex-col ${T??""}`,children:[jsxRuntime.jsx("div",{className:"absolute inset-0 opacity-[0.03] dark:opacity-[0.08]",children:jsxRuntime.jsxs("svg",{width:"100%",height:"100%",xmlns:"http://www.w3.org/2000/svg",children:[jsxRuntime.jsx("defs",{children:jsxRuntime.jsx("pattern",{id:"grid",width:"40",height:"40",patternUnits:"userSpaceOnUse",children:jsxRuntime.jsx("path",{d:"M 40 0 L 0 0 0 40",fill:"none",stroke:"currentColor",strokeWidth:"0.5",className:"text-orange-500"})})}),jsxRuntime.jsx("rect",{width:"100%",height:"100%",fill:"url(#grid)"})]})}),jsxRuntime.jsx("div",{className:"absolute top-0 left-0 right-0 z-50",children:jsxRuntime.jsx(react$1.motion.div,{className:"h-0.5 bg-gradient-to-r from-orange-500 to-red-500",initial:{width:"0%"},animate:{width:`${le}%`},transition:{duration:.8,ease:"easeOut"}})}),jsxRuntime.jsxs("div",{className:"relative z-10 flex flex-1 overflow-hidden",children:[jsxRuntime.jsx("div",{className:"w-1/3 border-r border-border/50 p-8 overflow-y-auto",children:jsxRuntime.jsxs("div",{className:"max-w-xl mx-auto",children:[jsxRuntime.jsxs(react$1.motion.div,{initial:{opacity:0,y:-20},animate:{opacity:1,y:0},transition:{duration:.6},className:"mb-12",children:[jsxRuntime.jsx("h1",{className:"text-3xl font-bold mb-2 bg-gradient-to-r from-orange-500 to-red-500 bg-clip-text text-transparent",children:"Sworn Affidavit Assembly"}),jsxRuntime.jsxs("p",{className:"text-muted-foreground font-mono text-xs tracking-wider",children:["System Status: ",jsxRuntime.jsx("span",{className:`font-semibold ${se===m.length?"text-emerald-500":"text-orange-500"}`,children:se===m.length?"COMPLETE":"PROCESSING"})]})]}),jsxRuntime.jsx("div",{className:"space-y-6 relative",children:m.map((p,a)=>jsxRuntime.jsx(be,{step:p,isLast:a===m.length-1,showRipple:Ae===p.id},p.id))})]})}),jsxRuntime.jsx("div",{className:"w-2/3 bg-gradient-to-br from-muted/20 to-muted/5 overflow-hidden relative",children:jsxRuntime.jsxs("div",{className:"h-full flex flex-col relative z-10",children:[jsxRuntime.jsx("div",{className:"p-6 border-b border-border/50 bg-background/50 backdrop-blur-sm",children:jsxRuntime.jsxs("div",{className:"flex items-center justify-between",children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-3",children:[jsxRuntime.jsx("div",{className:"p-2 rounded-lg bg-cyan-500/10 border border-cyan-500/20",children:jsxRuntime.jsx(lucideReact.FileText,{className:"w-5 h-5 text-cyan-600 dark:text-cyan-400"})}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("h2",{className:"text-foreground font-semibold",children:"Assembled Document"}),jsxRuntime.jsxs("p",{className:"text-muted-foreground text-xs mt-0.5 font-mono",children:["LEGAL-",Z.fileNumber,".pdf"]})]})]}),le===100&&jsxRuntime.jsx(react$1.motion.div,{initial:{opacity:0,scale:.8},animate:{opacity:1,scale:1},className:"px-4 py-2 rounded-full bg-gradient-to-r from-orange-500/20 to-red-500/20 border border-orange-500/30",children:jsxRuntime.jsx("span",{className:"text-sm font-semibold bg-gradient-to-r from-orange-600 to-red-600 bg-clip-text text-transparent",children:"100% Complete"})})]})}),jsxRuntime.jsx("div",{className:"flex-1 overflow-y-auto p-12",ref:_,children:jsxRuntime.jsx(ye,{completedSections:Se,completedSubsteps:H,documentIds:Z})})]})})]}),jsxRuntime.jsx("div",{className:"relative z-20 border-t border-border/50 p-4 bg-background/95 backdrop-blur-sm",children:jsxRuntime.jsxs("div",{className:"flex justify-center items-center gap-6 max-w-5xl mx-auto",children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-2.5 px-5 py-2.5 rounded-lg bg-orange-500/5 border border-orange-500/20",children:[jsxRuntime.jsx(lucideReact.Zap,{className:"w-4 h-4 text-orange-500"}),jsxRuntime.jsxs("div",{className:"flex flex-col",children:[jsxRuntime.jsx("span",{className:"text-[10px] text-muted-foreground font-mono uppercase tracking-wider",children:"Tokens"}),jsxRuntime.jsx("span",{className:"text-base font-bold text-orange-600 dark:text-orange-400 tabular-nums",children:L.tokens.toLocaleString()})]})]}),jsxRuntime.jsxs("div",{className:"flex items-center gap-2.5 px-5 py-2.5 rounded-lg bg-emerald-500/5 border border-emerald-500/20",children:[jsxRuntime.jsx(lucideReact.DollarSign,{className:"w-4 h-4 text-emerald-500"}),jsxRuntime.jsxs("div",{className:"flex flex-col",children:[jsxRuntime.jsx("span",{className:"text-[10px] text-muted-foreground font-mono uppercase tracking-wider",children:"Cost"}),jsxRuntime.jsxs("span",{className:"text-base font-bold text-emerald-600 dark:text-emerald-400 tabular-nums",children:["$",L.cost.toFixed(4)]})]})]}),jsxRuntime.jsxs("div",{className:"flex items-center gap-2.5 px-5 py-2.5 rounded-lg bg-purple-500/5 border border-purple-500/20",children:[jsxRuntime.jsx(lucideReact.Clock,{className:"w-4 h-4 text-purple-500"}),jsxRuntime.jsxs("div",{className:"flex flex-col",children:[jsxRuntime.jsx("span",{className:"text-[10px] text-muted-foreground font-mono uppercase tracking-wider",children:"Elapsed"}),jsxRuntime.jsxs("span",{className:"text-base font-bold text-purple-600 dark:text-purple-400 tabular-nums",children:[L.elapsed.toFixed(1),"s"]})]})]})]})}),jsxRuntime.jsx(he,{show:De,onClose:()=>re(false),documentIds:Z,metrics:L})]})}
|
|
15
|
+
exports.BlueprintDocumentAssembly=at;exports.DEFAULT_STEPS=Q;exports.DEFAULT_STEP_LOGS=te;exports.DEFAULT_SUBSTEP_LOGS=ae;//# sourceMappingURL=index.js.map
|
|
16
|
+
//# sourceMappingURL=index.js.map
|