woodml-parser 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.
Files changed (82) hide show
  1. package/README.md +181 -0
  2. package/dist/cli.d.ts +7 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +554 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/cost.d.ts +94 -0
  7. package/dist/cost.d.ts.map +1 -0
  8. package/dist/cost.js +340 -0
  9. package/dist/cost.js.map +1 -0
  10. package/dist/cost.test.d.ts +2 -0
  11. package/dist/cost.test.d.ts.map +1 -0
  12. package/dist/cost.test.js +241 -0
  13. package/dist/cost.test.js.map +1 -0
  14. package/dist/example.d.ts +6 -0
  15. package/dist/example.d.ts.map +1 -0
  16. package/dist/example.js +136 -0
  17. package/dist/example.js.map +1 -0
  18. package/dist/formulas.d.ts +23 -0
  19. package/dist/formulas.d.ts.map +1 -0
  20. package/dist/formulas.js +442 -0
  21. package/dist/formulas.js.map +1 -0
  22. package/dist/formulas.test.d.ts +5 -0
  23. package/dist/formulas.test.d.ts.map +1 -0
  24. package/dist/formulas.test.js +360 -0
  25. package/dist/formulas.test.js.map +1 -0
  26. package/dist/index.d.ts +23 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +93 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/integration.test.d.ts +6 -0
  31. package/dist/integration.test.d.ts.map +1 -0
  32. package/dist/integration.test.js +271 -0
  33. package/dist/integration.test.js.map +1 -0
  34. package/dist/optimizer.d.ts +119 -0
  35. package/dist/optimizer.d.ts.map +1 -0
  36. package/dist/optimizer.js +423 -0
  37. package/dist/optimizer.js.map +1 -0
  38. package/dist/optimizer.test.d.ts +2 -0
  39. package/dist/optimizer.test.d.ts.map +1 -0
  40. package/dist/optimizer.test.js +225 -0
  41. package/dist/optimizer.test.js.map +1 -0
  42. package/dist/parser.d.ts +59 -0
  43. package/dist/parser.d.ts.map +1 -0
  44. package/dist/parser.js +305 -0
  45. package/dist/parser.js.map +1 -0
  46. package/dist/parser.test.d.ts +5 -0
  47. package/dist/parser.test.d.ts.map +1 -0
  48. package/dist/parser.test.js +486 -0
  49. package/dist/parser.test.js.map +1 -0
  50. package/dist/pdf.d.ts +36 -0
  51. package/dist/pdf.d.ts.map +1 -0
  52. package/dist/pdf.js +316 -0
  53. package/dist/pdf.js.map +1 -0
  54. package/dist/svg.d.ts +73 -0
  55. package/dist/svg.d.ts.map +1 -0
  56. package/dist/svg.js +613 -0
  57. package/dist/svg.js.map +1 -0
  58. package/dist/svg.test.d.ts +5 -0
  59. package/dist/svg.test.d.ts.map +1 -0
  60. package/dist/svg.test.js +333 -0
  61. package/dist/svg.test.js.map +1 -0
  62. package/dist/templates.d.ts +126 -0
  63. package/dist/templates.d.ts.map +1 -0
  64. package/dist/templates.js +448 -0
  65. package/dist/templates.js.map +1 -0
  66. package/dist/templates.test.d.ts +5 -0
  67. package/dist/templates.test.d.ts.map +1 -0
  68. package/dist/templates.test.js +630 -0
  69. package/dist/templates.test.js.map +1 -0
  70. package/dist/types.d.ts +250 -0
  71. package/dist/types.d.ts.map +1 -0
  72. package/dist/types.js +7 -0
  73. package/dist/types.js.map +1 -0
  74. package/dist/units.d.ts +53 -0
  75. package/dist/units.d.ts.map +1 -0
  76. package/dist/units.js +359 -0
  77. package/dist/units.js.map +1 -0
  78. package/dist/units.test.d.ts +5 -0
  79. package/dist/units.test.d.ts.map +1 -0
  80. package/dist/units.test.js +364 -0
  81. package/dist/units.test.js.map +1 -0
  82. package/package.json +46 -0
package/dist/pdf.js ADDED
@@ -0,0 +1,316 @@
1
+ "use strict";
2
+ /**
3
+ * PDF generation for WoodML projects
4
+ * Generates cut sheets, diagrams, and project documentation
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.PAGE_SIZES = void 0;
8
+ exports.generateCutSheetPDF = generateCutSheetPDF;
9
+ exports.generateDiagramPDF = generateDiagramPDF;
10
+ const units_1 = require("./units");
11
+ const parser_1 = require("./parser");
12
+ const optimizer_1 = require("./optimizer");
13
+ exports.PAGE_SIZES = {
14
+ letter: { width: 612, height: 792 },
15
+ legal: { width: 612, height: 1008 },
16
+ tabloid: { width: 792, height: 1224 },
17
+ a4: { width: 595, height: 842 },
18
+ a3: { width: 842, height: 1191 },
19
+ };
20
+ /**
21
+ * Simple PDF builder class
22
+ */
23
+ class PDFBuilder {
24
+ pages = [];
25
+ currentPage = null;
26
+ pageSize;
27
+ margin;
28
+ currentY = 0;
29
+ fontSize;
30
+ constructor(options = {}) {
31
+ const size = options.pageSize ?? 'letter';
32
+ this.pageSize =
33
+ typeof size === 'string' ? exports.PAGE_SIZES[size] : size;
34
+ if (options.orientation === 'landscape') {
35
+ this.pageSize = {
36
+ width: this.pageSize.height,
37
+ height: this.pageSize.width,
38
+ };
39
+ }
40
+ this.margin = options.margin ?? 72; // 1 inch
41
+ this.fontSize = options.fontSize ?? 10;
42
+ }
43
+ newPage() {
44
+ this.currentPage = { content: [] };
45
+ this.pages.push(this.currentPage);
46
+ this.currentY = this.pageSize.height - this.margin;
47
+ }
48
+ get contentWidth() {
49
+ return this.pageSize.width - 2 * this.margin;
50
+ }
51
+ get contentHeight() {
52
+ return this.pageSize.height - 2 * this.margin;
53
+ }
54
+ addText(text, options = {}) {
55
+ if (!this.currentPage)
56
+ this.newPage();
57
+ const fontSize = options.fontSize ?? this.fontSize;
58
+ const lineHeight = fontSize * 1.2;
59
+ // Check if we need a new page
60
+ if (this.currentY - lineHeight < this.margin) {
61
+ this.newPage();
62
+ }
63
+ this.currentPage.content.push({
64
+ type: 'text',
65
+ x: this.margin + (options.indent ?? 0),
66
+ y: this.currentY,
67
+ text,
68
+ fontSize,
69
+ bold: options.bold,
70
+ });
71
+ this.currentY -= lineHeight;
72
+ }
73
+ addLine() {
74
+ if (!this.currentPage)
75
+ this.newPage();
76
+ this.currentPage.content.push({
77
+ type: 'line',
78
+ x1: this.margin,
79
+ y1: this.currentY,
80
+ x2: this.pageSize.width - this.margin,
81
+ y2: this.currentY,
82
+ });
83
+ this.currentY -= 5;
84
+ }
85
+ addSpace(points = 10) {
86
+ this.currentY -= points;
87
+ if (this.currentY < this.margin) {
88
+ this.newPage();
89
+ }
90
+ }
91
+ addTitle(text) {
92
+ this.addText(text, { fontSize: 16, bold: true });
93
+ this.addLine();
94
+ this.addSpace(10);
95
+ }
96
+ addHeading(text) {
97
+ this.addSpace(10);
98
+ this.addText(text, { fontSize: 12, bold: true });
99
+ this.addSpace(5);
100
+ }
101
+ addTableRow(cells, widths, bold = false) {
102
+ if (!this.currentPage)
103
+ this.newPage();
104
+ let x = this.margin;
105
+ const fontSize = this.fontSize;
106
+ const lineHeight = fontSize * 1.4;
107
+ // Check for page break
108
+ if (this.currentY - lineHeight < this.margin) {
109
+ this.newPage();
110
+ }
111
+ for (let i = 0; i < cells.length; i++) {
112
+ this.currentPage.content.push({
113
+ type: 'text',
114
+ x,
115
+ y: this.currentY,
116
+ text: cells[i],
117
+ fontSize,
118
+ bold,
119
+ });
120
+ x += widths[i];
121
+ }
122
+ this.currentY -= lineHeight;
123
+ }
124
+ /**
125
+ * Generate PostScript-like output (simplified PDF representation)
126
+ * In production, use a proper PDF library
127
+ */
128
+ generate() {
129
+ const lines = [];
130
+ // PDF header (simplified)
131
+ lines.push('%PDF-1.4');
132
+ lines.push('%WoodML Cut Sheet');
133
+ lines.push('');
134
+ // For each page
135
+ for (let i = 0; i < this.pages.length; i++) {
136
+ const page = this.pages[i];
137
+ lines.push(`% Page ${i + 1}`);
138
+ for (const content of page.content) {
139
+ if (content.type === 'text') {
140
+ const style = content.bold ? 'bold' : 'normal';
141
+ lines.push(`BT /${style} ${content.fontSize} Tf ${content.x} ${content.y} Td (${this.escapeString(content.text)}) Tj ET`);
142
+ }
143
+ else if (content.type === 'line') {
144
+ lines.push(`${content.x1} ${content.y1} m ${content.x2} ${content.y2} l S`);
145
+ }
146
+ else if (content.type === 'rect') {
147
+ lines.push(`${content.x} ${content.y} ${content.width} ${content.height} re S`);
148
+ }
149
+ }
150
+ lines.push('');
151
+ }
152
+ lines.push('%%EOF');
153
+ return lines.join('\n');
154
+ }
155
+ /**
156
+ * Generate a human-readable text version (for preview/testing)
157
+ */
158
+ generateText() {
159
+ const lines = [];
160
+ const pageWidth = 80;
161
+ for (let i = 0; i < this.pages.length; i++) {
162
+ if (i > 0) {
163
+ lines.push('');
164
+ lines.push('─'.repeat(pageWidth));
165
+ lines.push(`Page ${i + 1}`);
166
+ lines.push('─'.repeat(pageWidth));
167
+ }
168
+ const page = this.pages[i];
169
+ let lastY = this.pageSize.height;
170
+ // Sort content by Y position (top to bottom)
171
+ const sorted = [...page.content].sort((a, b) => {
172
+ const aY = a.type === 'line' ? a.y1 : a.type === 'rect' ? a.y : a.y;
173
+ const bY = b.type === 'line' ? b.y1 : b.type === 'rect' ? b.y : b.y;
174
+ return bY - aY;
175
+ });
176
+ for (const content of sorted) {
177
+ if (content.type === 'text') {
178
+ lines.push(content.text);
179
+ }
180
+ else if (content.type === 'line') {
181
+ lines.push('─'.repeat(pageWidth));
182
+ }
183
+ }
184
+ }
185
+ return lines.join('\n');
186
+ }
187
+ escapeString(str) {
188
+ return str
189
+ .replace(/\\/g, '\\\\')
190
+ .replace(/\(/g, '\\(')
191
+ .replace(/\)/g, '\\)');
192
+ }
193
+ }
194
+ /**
195
+ * Generate a PDF cut sheet for a project
196
+ */
197
+ function generateCutSheetPDF(doc, options = {}) {
198
+ const pdf = new PDFBuilder(options);
199
+ // Title page / header
200
+ pdf.newPage();
201
+ pdf.addTitle('CUT SHEET');
202
+ // Project info
203
+ if (options.projectInfo !== false && doc.project) {
204
+ pdf.addHeading('Project Information');
205
+ if (doc.project.name)
206
+ pdf.addText(`Project: ${doc.project.name}`);
207
+ if (doc.project.author)
208
+ pdf.addText(`Author: ${doc.project.author}`);
209
+ if (doc.project.units)
210
+ pdf.addText(`Units: ${doc.project.units}`);
211
+ if (doc.project.description) {
212
+ pdf.addText(`Description: ${doc.project.description}`);
213
+ }
214
+ pdf.addSpace(15);
215
+ }
216
+ // Cut list table
217
+ pdf.addHeading('Cut List');
218
+ const cutList = (0, parser_1.generateCutList)(doc);
219
+ const colWidths = [120, 80, 100, 80, 40, 60, 60];
220
+ // Header row
221
+ pdf.addTableRow(['Part', 'Material', 'Dimensions', 'Grain', 'Qty', 'Board Ft', 'Notes'], colWidths, true);
222
+ pdf.addLine();
223
+ // Data rows
224
+ for (const item of cutList) {
225
+ pdf.addTableRow([
226
+ item.partName,
227
+ item.material,
228
+ `${item.length} × ${item.width} × ${item.thickness}`,
229
+ item.grain || '-',
230
+ String(item.quantity),
231
+ item.boardFeet.toFixed(2),
232
+ '', // notes
233
+ ], colWidths);
234
+ }
235
+ pdf.addSpace(10);
236
+ // Totals
237
+ const totalBF = cutList.reduce((sum, item) => sum + item.boardFeet, 0);
238
+ pdf.addText(`Total Board Feet: ${totalBF.toFixed(2)}`, { bold: true });
239
+ // Optimization section
240
+ if (options.includeOptimization) {
241
+ pdf.addSpace(20);
242
+ pdf.addHeading('Material Optimization');
243
+ const optResult = (0, optimizer_1.optimizeCutList)(doc, options.optimizationOptions);
244
+ if (optResult.sheets.length > 0) {
245
+ pdf.addText(`Sheet goods: ${optResult.totalSheets} sheet(s) needed`);
246
+ for (const sheet of optResult.sheets) {
247
+ pdf.addText(` Sheet #${sheet.sheetNumber}: ${sheet.efficiency.toFixed(1)}% efficiency`, { indent: 20 });
248
+ for (const part of sheet.parts) {
249
+ const rotated = part.rotated ? ' (rotated)' : '';
250
+ pdf.addText(` - ${part.partName}: ${part.length}" × ${part.width}"${rotated}`, { indent: 40 });
251
+ }
252
+ }
253
+ }
254
+ if (optResult.boards.length > 0) {
255
+ pdf.addText(`Dimensional lumber: ${optResult.boards.length} board(s) needed`);
256
+ for (const { length, count } of optResult.totalBoards) {
257
+ pdf.addText(` ${count} board(s) at ${length / 12}' length`, {
258
+ indent: 20,
259
+ });
260
+ }
261
+ }
262
+ pdf.addSpace(10);
263
+ pdf.addText(`Overall efficiency: ${optResult.overallEfficiency}%`, { bold: true });
264
+ pdf.addText(`Waste: ${optResult.wastePercentage}%`);
265
+ }
266
+ // Materials list
267
+ if (doc.materials) {
268
+ pdf.addSpace(20);
269
+ pdf.addHeading('Materials Required');
270
+ if (doc.materials.lumber && doc.materials.lumber.length > 0) {
271
+ pdf.addText('Lumber:', { bold: true });
272
+ for (const lumber of doc.materials.lumber) {
273
+ const desc = `${lumber.species || 'Unknown'} - ${lumber.thickness || ''} × ${lumber.length || ''}`;
274
+ pdf.addText(` • ${desc}`, { indent: 20 });
275
+ }
276
+ }
277
+ if (doc.materials.hardware && doc.materials.hardware.length > 0) {
278
+ pdf.addText('Hardware:', { bold: true });
279
+ for (const hw of doc.materials.hardware) {
280
+ const desc = `${hw.name || hw.type}${hw.size ? ` (${hw.size})` : ''} × ${hw.quantity || 1}`;
281
+ pdf.addText(` • ${desc}`, { indent: 20 });
282
+ }
283
+ }
284
+ }
285
+ // Footer
286
+ pdf.addSpace(20);
287
+ pdf.addLine();
288
+ pdf.addText(`Generated by WoodML on ${new Date().toLocaleDateString()}`, {
289
+ fontSize: 8,
290
+ });
291
+ return pdf.generateText();
292
+ }
293
+ /**
294
+ * Generate a parts diagram PDF
295
+ */
296
+ function generateDiagramPDF(doc, _options = {}) {
297
+ // In a real implementation, this would use SVG-to-PDF conversion
298
+ // For now, return a text representation
299
+ const lines = [];
300
+ lines.push('PARTS DIAGRAM');
301
+ lines.push('='.repeat(60));
302
+ lines.push('');
303
+ for (const part of doc.resolvedParts) {
304
+ const length = (0, units_1.toInches)(part.dimensions.length);
305
+ const width = (0, units_1.toInches)(part.dimensions.width);
306
+ const thickness = (0, units_1.toInches)(part.dimensions.thickness);
307
+ lines.push(`${part.name || part.id}`);
308
+ lines.push(` Dimensions: ${length}" × ${width}" × ${thickness}"`);
309
+ lines.push(` Material: ${part.material || 'Unknown'}`);
310
+ if (part.grain)
311
+ lines.push(` Grain: ${part.grain}`);
312
+ lines.push('');
313
+ }
314
+ return lines.join('\n');
315
+ }
316
+ //# sourceMappingURL=pdf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf.js","sourceRoot":"","sources":["../src/pdf.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAmRH,kDAqIC;AAKD,gDAyBC;AAnbD,mCAAmC;AACnC,qCAAwD;AACxD,2CAAuF;AAU1E,QAAA,UAAU,GAA6B;IAClD,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;IACnC,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;IACnC,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;IACrC,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;IAC/B,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;CACjC,CAAC;AAwCF;;GAEG;AACH,MAAM,UAAU;IACN,KAAK,GAAc,EAAE,CAAC;IACtB,WAAW,GAAmB,IAAI,CAAC;IACnC,QAAQ,CAAW;IACnB,MAAM,CAAS;IACf,QAAQ,GAAW,CAAC,CAAC;IACrB,QAAQ,CAAS;IAEzB,YAAY,UAAsB,EAAE;QAClC,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC;QAC1C,IAAI,CAAC,QAAQ;YACX,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,kBAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAErD,IAAI,OAAO,CAAC,WAAW,KAAK,WAAW,EAAE,CAAC;YACxC,IAAI,CAAC,QAAQ,GAAG;gBACd,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM;gBAC3B,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;aAC5B,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,SAAS;QAC7C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;IACzC,CAAC;IAED,OAAO;QACL,IAAI,CAAC,WAAW,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAClC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IACrD,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IAC/C,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IAChD,CAAC;IAED,OAAO,CAAC,IAAY,EAAE,UAAkE,EAAE;QACxF,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QAEtC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC;QACnD,MAAM,UAAU,GAAG,QAAQ,GAAG,GAAG,CAAC;QAElC,8BAA8B;QAC9B,IAAI,IAAI,CAAC,QAAQ,GAAG,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC;QAED,IAAI,CAAC,WAAY,CAAC,OAAO,CAAC,IAAI,CAAC;YAC7B,IAAI,EAAE,MAAM;YACZ,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;YACtC,CAAC,EAAE,IAAI,CAAC,QAAQ;YAChB,IAAI;YACJ,QAAQ;YACR,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,IAAI,UAAU,CAAC;IAC9B,CAAC;IAED,OAAO;QACL,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QAEtC,IAAI,CAAC,WAAY,CAAC,OAAO,CAAC,IAAI,CAAC;YAC7B,IAAI,EAAE,MAAM;YACZ,EAAE,EAAE,IAAI,CAAC,MAAM;YACf,EAAE,EAAE,IAAI,CAAC,QAAQ;YACjB,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM;YACrC,EAAE,EAAE,IAAI,CAAC,QAAQ;SAClB,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;IACrB,CAAC;IAED,QAAQ,CAAC,SAAiB,EAAE;QAC1B,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC;QACxB,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAChC,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,IAAY;QACnB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC;IAED,UAAU,CAAC,IAAY;QACrB,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAClB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAED,WAAW,CAAC,KAAe,EAAE,MAAgB,EAAE,OAAgB,KAAK;QAClE,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QAEtC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,MAAM,UAAU,GAAG,QAAQ,GAAG,GAAG,CAAC;QAElC,uBAAuB;QACvB,IAAI,IAAI,CAAC,QAAQ,GAAG,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,IAAI,CAAC,WAAY,CAAC,OAAO,CAAC,IAAI,CAAC;gBAC7B,IAAI,EAAE,MAAM;gBACZ,CAAC;gBACD,CAAC,EAAE,IAAI,CAAC,QAAQ;gBAChB,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;gBACd,QAAQ;gBACR,IAAI;aACL,CAAC,CAAC;YACH,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,CAAC,QAAQ,IAAI,UAAU,CAAC;IAC9B,CAAC;IAED;;;OAGG;IACH,QAAQ;QACN,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,0BAA0B;QAC1B,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,gBAAgB;QAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAE9B,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACnC,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;oBAC/C,KAAK,CAAC,IAAI,CACR,OAAO,KAAK,IAAI,OAAO,CAAC,QAAQ,OAAO,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,QAAQ,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAC9G,CAAC;gBACJ,CAAC;qBAAM,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBACnC,KAAK,CAAC,IAAI,CACR,GAAG,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC,EAAE,MAAM,CAChE,CAAC;gBACJ,CAAC;qBAAM,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBACnC,KAAK,CAAC,IAAI,CACR,GAAG,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,OAAO,CACpE,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEpB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,YAAY;QACV,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,EAAE,CAAC;QAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACV,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACf,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;gBAClC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC5B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;YACpC,CAAC;YAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAEjC,6CAA6C;YAC7C,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC7C,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpE,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpE,OAAO,EAAE,GAAG,EAAE,CAAC;YACjB,CAAC,CAAC,CAAC;YAEH,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;gBAC7B,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBAC5B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC3B,CAAC;qBAAM,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBACnC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;gBACpC,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAEO,YAAY,CAAC,GAAW;QAC9B,OAAO,GAAG;aACP,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;aACtB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;aACrB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC3B,CAAC;CACF;AAED;;GAEG;AACH,SAAgB,mBAAmB,CACjC,GAAqB,EACrB,UAAsB,EAAE;IAExB,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;IAEpC,sBAAsB;IACtB,GAAG,CAAC,OAAO,EAAE,CAAC;IACd,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAE1B,eAAe;IACf,IAAI,OAAO,CAAC,WAAW,KAAK,KAAK,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;QACjD,GAAG,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;QACtC,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI;YAAE,GAAG,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAClE,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM;YAAE,GAAG,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACrE,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK;YAAE,GAAG,CAAC,OAAO,CAAC,UAAU,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAClE,IAAI,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YAC5B,GAAG,CAAC,OAAO,CAAC,gBAAgB,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;QACzD,CAAC;QACD,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IAED,iBAAiB;IACjB,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAE3B,MAAM,OAAO,GAAG,IAAA,wBAAe,EAAC,GAAG,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAEjD,aAAa;IACb,GAAG,CAAC,WAAW,CACb,CAAC,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,EACvE,SAAS,EACT,IAAI,CACL,CAAC;IACF,GAAG,CAAC,OAAO,EAAE,CAAC;IAEd,YAAY;IACZ,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,GAAG,CAAC,WAAW,CACb;YACE,IAAI,CAAC,QAAQ;YACb,IAAI,CAAC,QAAQ;YACb,GAAG,IAAI,CAAC,MAAM,MAAM,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,SAAS,EAAE;YACpD,IAAI,CAAC,KAAK,IAAI,GAAG;YACjB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;YACrB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;YACzB,EAAE,EAAE,QAAQ;SACb,EACD,SAAS,CACV,CAAC;IACJ,CAAC;IAED,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEjB,SAAS;IACT,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IACvE,GAAG,CAAC,OAAO,CAAC,qBAAqB,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAEvE,uBAAuB;IACvB,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;QAChC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACjB,GAAG,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC;QAExC,MAAM,SAAS,GAAG,IAAA,2BAAe,EAAC,GAAG,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAEpE,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,GAAG,CAAC,OAAO,CAAC,gBAAgB,SAAS,CAAC,WAAW,kBAAkB,CAAC,CAAC;YAErE,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;gBACrC,GAAG,CAAC,OAAO,CACT,YAAY,KAAK,CAAC,WAAW,KAAK,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,EAC3E,EAAE,MAAM,EAAE,EAAE,EAAE,CACf,CAAC;gBACF,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;oBAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;oBACjD,GAAG,CAAC,OAAO,CACT,SAAS,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,MAAM,OAAO,IAAI,CAAC,KAAK,IAAI,OAAO,EAAE,EACpE,EAAE,MAAM,EAAE,EAAE,EAAE,CACf,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,GAAG,CAAC,OAAO,CACT,uBAAuB,SAAS,CAAC,MAAM,CAAC,MAAM,kBAAkB,CACjE,CAAC;YAEF,KAAK,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;gBACtD,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,gBAAgB,MAAM,GAAG,EAAE,UAAU,EAAE;oBAC3D,MAAM,EAAE,EAAE;iBACX,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACjB,GAAG,CAAC,OAAO,CACT,uBAAuB,SAAS,CAAC,iBAAiB,GAAG,EACrD,EAAE,IAAI,EAAE,IAAI,EAAE,CACf,CAAC;QACF,GAAG,CAAC,OAAO,CAAC,UAAU,SAAS,CAAC,eAAe,GAAG,CAAC,CAAC;IACtD,CAAC;IAED,iBAAiB;IACjB,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;QAClB,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACjB,GAAG,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;QAErC,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5D,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACvC,KAAK,MAAM,MAAM,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;gBAC1C,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,OAAO,IAAI,SAAS,MAAM,MAAM,CAAC,SAAS,IAAI,EAAE,MAAM,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;gBACnG,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QAED,IAAI,GAAG,CAAC,SAAS,CAAC,QAAQ,IAAI,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChE,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACzC,KAAK,MAAM,EAAE,IAAI,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;gBACxC,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC;gBAC5F,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;IACH,CAAC;IAED,SAAS;IACT,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACjB,GAAG,CAAC,OAAO,EAAE,CAAC;IACd,GAAG,CAAC,OAAO,CAAC,0BAA0B,IAAI,IAAI,EAAE,CAAC,kBAAkB,EAAE,EAAE,EAAE;QACvE,QAAQ,EAAE,CAAC;KACZ,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC,YAAY,EAAE,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAChC,GAAqB,EACrB,WAAuB,EAAE;IAEzB,iEAAiE;IACjE,wCAAwC;IACxC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC5B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,IAAA,gBAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,IAAA,gBAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,IAAA,gBAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAEtD,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,iBAAiB,MAAM,OAAO,KAAK,OAAO,SAAS,GAAG,CAAC,CAAC;QACnE,KAAK,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,QAAQ,IAAI,SAAS,EAAE,CAAC,CAAC;QACxD,IAAI,IAAI,CAAC,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACrD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
package/dist/svg.d.ts ADDED
@@ -0,0 +1,73 @@
1
+ /**
2
+ * WoodML SVG Diagram Generator
3
+ * Generates visual diagrams of woodworking parts and assemblies
4
+ */
5
+ import { ResolvedDocument, ResolvedPart } from './types';
6
+ export interface SVGOptions {
7
+ /** Width of the SVG canvas in pixels */
8
+ width?: number;
9
+ /** Height of the SVG canvas in pixels */
10
+ height?: number;
11
+ /** Padding around the diagram */
12
+ padding?: number;
13
+ /** Show dimension labels */
14
+ showDimensions?: boolean;
15
+ /** Show part names */
16
+ showNames?: boolean;
17
+ /** Show grain direction */
18
+ showGrain?: boolean;
19
+ /** Color scheme */
20
+ colorScheme?: 'default' | 'blueprint' | 'monochrome';
21
+ /** Scale factor (pixels per inch) */
22
+ scale?: number;
23
+ /** Font size for labels */
24
+ fontSize?: number;
25
+ }
26
+ export interface DiagramType {
27
+ type: 'parts' | 'exploded' | 'cutlist' | 'assembly';
28
+ }
29
+ export declare class SVGGenerator {
30
+ private options;
31
+ private colors;
32
+ constructor(options?: SVGOptions);
33
+ /**
34
+ * Generate SVG for all parts in a document
35
+ */
36
+ generatePartsDiagram(doc: ResolvedDocument): string;
37
+ /**
38
+ * Generate SVG for a single part
39
+ */
40
+ generateSinglePart(part: ResolvedPart): string;
41
+ /**
42
+ * Generate a cut list diagram showing part layout on stock
43
+ */
44
+ generateCutListDiagram(doc: ResolvedDocument, stockWidth?: number, stockHeight?: number): string;
45
+ /**
46
+ * Generate exploded view diagram
47
+ */
48
+ generateExplodedView(doc: ResolvedDocument): string;
49
+ private renderPart;
50
+ private renderCutPart;
51
+ private render3DPart;
52
+ private renderGrain;
53
+ private generateWavyLine;
54
+ private renderDimensionH;
55
+ private renderDimensionV;
56
+ private calculatePartsLayout;
57
+ private findPlacement;
58
+ private overlapsAny;
59
+ private overlaps;
60
+ private wrapSVG;
61
+ private emptyDiagram;
62
+ private escapeXml;
63
+ private adjustBrightness;
64
+ }
65
+ /**
66
+ * Generate an SVG diagram for a resolved document
67
+ */
68
+ export declare function generateSVG(doc: ResolvedDocument, type?: 'parts' | 'exploded' | 'cutlist', options?: SVGOptions): string;
69
+ /**
70
+ * Generate an SVG diagram for a single part
71
+ */
72
+ export declare function generatePartSVG(part: ResolvedPart, options?: SVGOptions): string;
73
+ //# sourceMappingURL=svg.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"svg.d.ts","sourceRoot":"","sources":["../src/svg.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAA+B,MAAM,SAAS,CAAC;AAOtF,MAAM,WAAW,UAAU;IACzB,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4BAA4B;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,sBAAsB;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,2BAA2B;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mBAAmB;IACnB,WAAW,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,YAAY,CAAC;IACrD,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,CAAC;CACrD;AAkED,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,MAAM,CAAc;gBAEhB,OAAO,GAAE,UAAe;IAepC;;OAEG;IACH,oBAAoB,CAAC,GAAG,EAAE,gBAAgB,GAAG,MAAM;IAkBnD;;OAEG;IACH,kBAAkB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM;IAsB9C;;OAEG;IACH,sBAAsB,CAAC,GAAG,EAAE,gBAAgB,EAAE,UAAU,GAAE,MAAW,EAAE,WAAW,GAAE,MAAW,GAAG,MAAM;IAiGxG;;OAEG;IACH,oBAAoB,CAAC,GAAG,EAAE,gBAAgB,GAAG,MAAM;IAoCnD,OAAO,CAAC,UAAU;IAoFlB,OAAO,CAAC,aAAa;IAoCrB,OAAO,CAAC,YAAY;IAmFpB,OAAO,CAAC,WAAW;IAuBnB,OAAO,CAAC,gBAAgB;IA4BxB,OAAO,CAAC,gBAAgB;IA4BxB,OAAO,CAAC,gBAAgB;IAkCxB,OAAO,CAAC,oBAAoB;IA6D5B,OAAO,CAAC,aAAa;IAqBrB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,OAAO;IA0Bf,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,gBAAgB;CAiBzB;AAMD;;GAEG;AACH,wBAAgB,WAAW,CACzB,GAAG,EAAE,gBAAgB,EACrB,IAAI,GAAE,OAAO,GAAG,UAAU,GAAG,SAAmB,EAChD,OAAO,CAAC,EAAE,UAAU,GACnB,MAAM,CAaR;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,MAAM,CAGhF"}