@pinepaper.studio/mcp-server 1.6.11 → 1.6.13

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 (70) hide show
  1. package/README.md +219 -0
  2. package/dist/agent/export-manager.d.ts.map +1 -1
  3. package/dist/agent/export-manager.js +9 -7
  4. package/dist/agent/export-manager.js.map +1 -1
  5. package/dist/assets/repositories/iconify.d.ts +0 -5
  6. package/dist/assets/repositories/iconify.d.ts.map +1 -1
  7. package/dist/assets/repositories/iconify.js +17 -5
  8. package/dist/assets/repositories/iconify.js.map +1 -1
  9. package/dist/browser/puppeteer-controller.d.ts +16 -0
  10. package/dist/browser/puppeteer-controller.d.ts.map +1 -1
  11. package/dist/browser/puppeteer-controller.js +32 -2
  12. package/dist/browser/puppeteer-controller.js.map +1 -1
  13. package/dist/design/design-systems.d.ts +27 -2
  14. package/dist/design/design-systems.d.ts.map +1 -1
  15. package/dist/design/design-systems.js +20 -0
  16. package/dist/design/design-systems.js.map +1 -1
  17. package/dist/tools/compact-descriptions.js +1 -1
  18. package/dist/tools/compact-descriptions.js.map +1 -1
  19. package/dist/tools/definitions.d.ts.map +1 -1
  20. package/dist/tools/definitions.js +175 -52
  21. package/dist/tools/definitions.js.map +1 -1
  22. package/dist/tools/engine-methods.d.ts.map +1 -1
  23. package/dist/tools/engine-methods.js +8 -0
  24. package/dist/tools/engine-methods.js.map +1 -1
  25. package/dist/tools/engine-surface.d.ts +1 -1
  26. package/dist/tools/engine-surface.d.ts.map +1 -1
  27. package/dist/tools/engine-surface.js +32 -12
  28. package/dist/tools/engine-surface.js.map +1 -1
  29. package/dist/tools/handlers.d.ts +13 -2
  30. package/dist/tools/handlers.d.ts.map +1 -1
  31. package/dist/tools/handlers.js +219 -13
  32. package/dist/tools/handlers.js.map +1 -1
  33. package/dist/tools/minimal-descriptions.js +1 -1
  34. package/dist/tools/minimal-descriptions.js.map +1 -1
  35. package/dist/tools/shape-params.d.ts +36 -0
  36. package/dist/tools/shape-params.d.ts.map +1 -0
  37. package/dist/tools/shape-params.js +159 -0
  38. package/dist/tools/shape-params.js.map +1 -0
  39. package/dist/tools/stick-vocabulary.d.ts +26 -0
  40. package/dist/tools/stick-vocabulary.d.ts.map +1 -0
  41. package/dist/tools/stick-vocabulary.js +102 -0
  42. package/dist/tools/stick-vocabulary.js.map +1 -0
  43. package/dist/tools/toolkits.d.ts.map +1 -1
  44. package/dist/tools/toolkits.js +10 -1
  45. package/dist/tools/toolkits.js.map +1 -1
  46. package/dist/types/code-generator.d.ts.map +1 -1
  47. package/dist/types/code-generator.js +865 -122
  48. package/dist/types/code-generator.js.map +1 -1
  49. package/dist/types/schemas.d.ts +191 -35
  50. package/dist/types/schemas.d.ts.map +1 -1
  51. package/dist/types/schemas.js +32 -16
  52. package/dist/types/schemas.js.map +1 -1
  53. package/dist/vendor/design/design-systems-dtcg.d.ts +9 -0
  54. package/dist/vendor/design/design-systems-dtcg.d.ts.map +1 -1
  55. package/dist/vendor/design/design-systems-dtcg.js +53 -1
  56. package/dist/vendor/design/design-systems-dtcg.js.map +1 -1
  57. package/dist/vendor/design/device-mockup-generator.d.ts +83 -0
  58. package/dist/vendor/design/device-mockup-generator.d.ts.map +1 -0
  59. package/dist/vendor/design/device-mockup-generator.js +634 -0
  60. package/dist/vendor/design/device-mockup-generator.js.map +1 -0
  61. package/dist/vendor/design/recursive-subdivision-generator.d.ts +79 -0
  62. package/dist/vendor/design/recursive-subdivision-generator.d.ts.map +1 -0
  63. package/dist/vendor/design/recursive-subdivision-generator.js +319 -0
  64. package/dist/vendor/design/recursive-subdivision-generator.js.map +1 -0
  65. package/dist/vendor/design/textile-weave-generator.d.ts +140 -0
  66. package/dist/vendor/design/textile-weave-generator.d.ts.map +1 -0
  67. package/dist/vendor/design/textile-weave-generator.js +568 -0
  68. package/dist/vendor/design/textile-weave-generator.js.map +1 -0
  69. package/manifest.json +1 -1
  70. package/package.json +8 -2
@@ -0,0 +1,568 @@
1
+ /* GENERATED — DO NOT EDIT.
2
+ *
3
+ * Source: mcp-cloud/src/services/textile-weave-generator.ts
4
+ * sha256: 1704c25e676721c9d78f0ce723e06d7f2969bd959940f93852eff056bdc78d6a
5
+ * Generator: scripts/sync-design-systems.mjs
6
+ *
7
+ * Edit the TypeScript upstream and re-run the generator. A hand edit here is
8
+ * the second copy of the same design vocabulary that the generator exists to
9
+ * prevent, and the provenance test will fail on it.
10
+ */
11
+ /**
12
+ * Vector textile and knot generation engine.
13
+ *
14
+ * Compiles declarative weave topologies (Plain/Tabby, Twill/Herringbone, Basketweave)
15
+ * and three-dimensional embroidered knots (French knots, bullion coils, rosette anchors)
16
+ * into mathematically clean, executable Paper.js vector geometry.
17
+ */
18
+ /**
19
+ * Generate Paper.js code for a Plain (Tabby) Weave.
20
+ * Warp and weft threads alternate over and under using complementary dashArray offsets.
21
+ */
22
+ export function generatePlainWeaveCode(opts = {}) {
23
+ const x = opts.bounds?.x ?? 0;
24
+ const y = opts.bounds?.y ?? 0;
25
+ const w = opts.bounds?.width ?? 1280;
26
+ const h = opts.bounds?.height ?? 720;
27
+ const pitch = Math.max(4, opts.pitch ?? (opts.density ? Math.max(4, opts.density) : 16));
28
+ const threadWidth = opts.threadWidth ?? opts.threadThickness ?? 1.5;
29
+ const warpColor = opts.warpColor ?? "rgba(51, 65, 85, 0.4)";
30
+ const weftColor = opts.weftColor ?? "rgba(148, 163, 184, 0.4)";
31
+ const slubJitter = opts.slubJitter ?? 0;
32
+ const opacity = opts.opacity ?? 0.85;
33
+ const prefix = opts.idPrefix ?? "plain_weave";
34
+ return `// Plain Weave / Tabby Vector Generator
35
+ (function() {
36
+ const items = [];
37
+ const x0 = ${x}, y0 = ${y}, x1 = ${x + w}, y1 = ${y + h};
38
+ const pitch = ${pitch};
39
+ const strokeWidth = ${threadWidth};
40
+ const slubJitter = ${slubJitter};
41
+
42
+ // Vertical Warp threads
43
+ let colIdx = 0;
44
+ for (let vx = x0; vx <= x1; vx += pitch) {
45
+ const jitterX = slubJitter ? (Math.sin(colIdx * 1.7) * slubJitter * 2) : 0;
46
+ const warp = new paper.Path.Line({
47
+ from: [vx + jitterX, y0],
48
+ to: [vx + jitterX, y1],
49
+ strokeColor: "${warpColor}",
50
+ strokeWidth: strokeWidth,
51
+ strokeCap: "round",
52
+ dashArray: [pitch, pitch],
53
+ dashOffset: (colIdx % 2 === 0) ? 0 : pitch,
54
+ opacity: ${opacity}
55
+ });
56
+ const id = "${prefix}_warp_" + colIdx;
57
+ if (typeof app.registerItem === "function") app.registerItem(warp, id, { source: "weave_generator", weave: "plain", role: "warp" });
58
+ items.push(warp);
59
+ colIdx++;
60
+ }
61
+
62
+ // Horizontal Weft threads
63
+ let rowIdx = 0;
64
+ for (let vy = y0; vy <= y1; vy += pitch) {
65
+ const jitterY = slubJitter ? (Math.cos(rowIdx * 1.7) * slubJitter * 2) : 0;
66
+ const weft = new paper.Path.Line({
67
+ from: [x0, vy + jitterY],
68
+ to: [x1, vy + jitterY],
69
+ strokeColor: "${weftColor}",
70
+ strokeWidth: strokeWidth,
71
+ strokeCap: "round",
72
+ dashArray: [pitch, pitch],
73
+ dashOffset: (rowIdx % 2 === 0) ? pitch : 0,
74
+ opacity: ${opacity}
75
+ });
76
+ const id = "${prefix}_weft_" + rowIdx;
77
+ if (typeof app.registerItem === "function") app.registerItem(weft, id, { source: "weave_generator", weave: "plain", role: "weft" });
78
+ items.push(weft);
79
+ rowIdx++;
80
+ }
81
+
82
+ const group = new paper.Group(items);
83
+ if (typeof app.registerItem === "function") app.registerItem(group, "${prefix}_group", { source: "weave_generator", weave: "plain" });
84
+ return group;
85
+ })();`;
86
+ }
87
+ /**
88
+ * Generate Paper.js code for a Twill / Herringbone Weave.
89
+ * Stepped float ratios produce diagonal ridges with optional chevron direction reversals.
90
+ */
91
+ export function generateTwillWeaveCode(opts = {}) {
92
+ const x = opts.bounds?.x ?? 0;
93
+ const y = opts.bounds?.y ?? 0;
94
+ const w = opts.bounds?.width ?? 1280;
95
+ const h = opts.bounds?.height ?? 720;
96
+ const pitch = Math.max(4, opts.pitch ?? (opts.density ? Math.max(4, opts.density) : 14));
97
+ const threadWidth = opts.threadWidth ?? opts.threadThickness ?? 2;
98
+ const floatRatio = Math.max(1, opts.floatRatio ?? 2);
99
+ const floatLen = pitch * floatRatio;
100
+ const isHerringbone = Boolean(opts.herringbone || opts.twillVariant === "herringbone");
101
+ const chevronW = Math.max(40, opts.chevronWidth ?? 140);
102
+ const warpColor = opts.warpColor ?? "rgba(30, 58, 138, 0.45)";
103
+ const weftColor = opts.weftColor ?? "rgba(203, 213, 225, 0.5)";
104
+ const opacity = opts.opacity ?? 0.9;
105
+ const prefix = opts.idPrefix ?? (isHerringbone ? "herringbone_weave" : "twill_weave");
106
+ return `// Twill Weave & Herringbone Vector Generator
107
+ (function() {
108
+ const items = [];
109
+ const x0 = ${x}, y0 = ${y}, x1 = ${x + w}, y1 = ${y + h};
110
+ const pitch = ${pitch};
111
+ const floatLen = pitch * ${floatRatio};
112
+ const isHerringbone = ${isHerringbone};
113
+ const chevronWidth = ${chevronW};
114
+
115
+ // Warp lines (base grid)
116
+ let colIdx = 0;
117
+ for (let vx = x0; vx <= x1; vx += pitch) {
118
+ const warp = new paper.Path.Line({
119
+ from: [vx, y0],
120
+ to: [vx, y1],
121
+ strokeColor: "${warpColor}",
122
+ strokeWidth: ${threadWidth},
123
+ strokeCap: "round",
124
+ opacity: ${opacity * 0.7}
125
+ });
126
+ const id = "${prefix}_warp_" + colIdx;
127
+ if (typeof app.registerItem === "function") app.registerItem(warp, id, { source: "weave_generator", weave: "twill", role: "warp" });
128
+ items.push(warp);
129
+ colIdx++;
130
+ }
131
+
132
+ // Weft float lines with diagonal stepped offsets
133
+ let rowIdx = 0;
134
+ for (let vy = y0; vy <= y1; vy += pitch) {
135
+ if (isHerringbone) {
136
+ // Split into chevron blocks with reversing slants
137
+ for (let bx = x0; bx < x1; bx += chevronWidth) {
138
+ const segEnd = Math.min(x1, bx + chevronWidth);
139
+ const blockIdx = Math.floor((bx - x0) / chevronWidth);
140
+ const dir = (blockIdx % 2 === 0) ? 1 : -1;
141
+ const phase = dir === 1 ? ((rowIdx * pitch) % (floatLen * 2)) : (((1000 - rowIdx) * pitch) % (floatLen * 2));
142
+ const weftSeg = new paper.Path.Line({
143
+ from: [bx, vy],
144
+ to: [segEnd, vy],
145
+ strokeColor: "${weftColor}",
146
+ strokeWidth: ${threadWidth},
147
+ strokeCap: "round",
148
+ dashArray: [floatLen, pitch],
149
+ dashOffset: phase,
150
+ opacity: ${opacity}
151
+ });
152
+ const id = "${prefix}_weft_" + rowIdx + "_" + blockIdx;
153
+ if (typeof app.registerItem === "function") app.registerItem(weftSeg, id, { source: "weave_generator", weave: "herringbone", role: "weft" });
154
+ items.push(weftSeg);
155
+ }
156
+ } else {
157
+ // Classic diagonal twill
158
+ const phase = (rowIdx * pitch) % (floatLen * 2);
159
+ const weft = new paper.Path.Line({
160
+ from: [x0, vy],
161
+ to: [x1, vy],
162
+ strokeColor: "${weftColor}",
163
+ strokeWidth: ${threadWidth},
164
+ strokeCap: "round",
165
+ dashArray: [floatLen, pitch],
166
+ dashOffset: phase,
167
+ opacity: ${opacity}
168
+ });
169
+ const id = "${prefix}_weft_" + rowIdx;
170
+ if (typeof app.registerItem === "function") app.registerItem(weft, id, { source: "weave_generator", weave: "twill", role: "weft" });
171
+ items.push(weft);
172
+ }
173
+ rowIdx++;
174
+ }
175
+
176
+ const group = new paper.Group(items);
177
+ if (typeof app.registerItem === "function") app.registerItem(group, "${prefix}_group", { source: "weave_generator", weave: isHerringbone ? "herringbone" : "twill" });
178
+ return group;
179
+ })();`;
180
+ }
181
+ /**
182
+ * Generate Paper.js code for a Basketweave (Panama) pattern.
183
+ * Groups of parallel threads interlace together as square blocks.
184
+ */
185
+ export function generateBasketWeaveCode(opts = {}) {
186
+ const x = opts.bounds?.x ?? 0;
187
+ const y = opts.bounds?.y ?? 0;
188
+ const w = opts.bounds?.width ?? 1280;
189
+ const h = opts.bounds?.height ?? 720;
190
+ const bundleSize = Math.max(2, opts.bundleSize ?? opts.bundleThreads ?? 2);
191
+ const bundleGap = opts.bundleGap ?? 2;
192
+ const threadWidth = opts.threadWidth ?? opts.threadThickness ?? 1.8;
193
+ const pitch = Math.max(8, opts.pitch ?? (opts.density ? Math.max(8, opts.density) : 18));
194
+ const colorA = opts.colorA ?? opts.warpColor ?? "rgba(180, 83, 9, 0.6)";
195
+ const colorB = opts.colorB ?? opts.weftColor ?? "rgba(217, 119, 6, 0.6)";
196
+ const opacity = opts.opacity ?? 0.85;
197
+ const prefix = opts.idPrefix ?? "basket_weave";
198
+ return `// Basketweave Vector Generator
199
+ (function() {
200
+ const items = [];
201
+ const x0 = ${x}, y0 = ${y}, x1 = ${x + w}, y1 = ${y + h};
202
+ const pitch = ${pitch};
203
+ const bundleSize = ${bundleSize};
204
+ const bundleGap = ${bundleGap};
205
+ const blockSize = (bundleSize * pitch) + bundleGap;
206
+ const threadWidth = ${threadWidth};
207
+
208
+ let rIdx = 0;
209
+ for (let vy = y0; vy <= y1; vy += blockSize) {
210
+ let cIdx = 0;
211
+ for (let vx = x0; vx <= x1; vx += blockSize) {
212
+ const isHorizontal = (rIdx + cIdx) % 2 === 0;
213
+ for (let t = 0; t < bundleSize; t++) {
214
+ const offset = t * pitch + pitch / 2;
215
+ let line;
216
+ if (isHorizontal) {
217
+ line = new paper.Path.Line({
218
+ from: [vx, vy + offset],
219
+ to: [Math.min(x1, vx + blockSize - bundleGap), vy + offset],
220
+ strokeColor: "${colorA}",
221
+ strokeWidth: threadWidth,
222
+ strokeCap: "round",
223
+ opacity: ${opacity}
224
+ });
225
+ } else {
226
+ line = new paper.Path.Line({
227
+ from: [vx + offset, vy],
228
+ to: [vx + offset, Math.min(y1, vy + blockSize - bundleGap)],
229
+ strokeColor: "${colorB}",
230
+ strokeWidth: threadWidth,
231
+ strokeCap: "round",
232
+ opacity: ${opacity}
233
+ });
234
+ }
235
+ items.push(line);
236
+ }
237
+ cIdx++;
238
+ }
239
+ rIdx++;
240
+ }
241
+
242
+ const group = new paper.Group(items);
243
+ if (typeof app.registerItem === "function") app.registerItem(group, "${prefix}_group", { source: "weave_generator", weave: "basket" });
244
+ return group;
245
+ })();`;
246
+ }
247
+ /**
248
+ * Generate Paper.js code for tactile 3D Embroidered Knots (French knots, bullion coils, knot anchors).
249
+ */
250
+ export function generateKnotCode(opts = {}) {
251
+ const knots = opts.knots ?? opts.points ?? [];
252
+ const knotType = opts.knotType ?? "french_knot";
253
+ const defaultRadius = opts.defaultRadius ?? 5;
254
+ const defaultColor = opts.threadColor ?? opts.defaultColor ?? "#fbbf24";
255
+ const defaultHighlight = opts.highlightColor ?? opts.defaultHighlight ?? "#fef08a";
256
+ const defaultShadow = opts.shadowColor ?? opts.defaultShadow ?? "rgba(15, 23, 42, 0.4)";
257
+ const prefix = opts.idPrefix ?? "embroidery_knot";
258
+ const serializedKnots = JSON.stringify(knots);
259
+ return `// Embroidered Knots & Anchor Relief Vector Generator
260
+ (function() {
261
+ const items = [];
262
+ const knotList = ${serializedKnots};
263
+ const knotType = "${knotType}";
264
+ const defR = ${defaultRadius};
265
+ const defCol = "${defaultColor}";
266
+ const defHi = "${defaultHighlight}";
267
+ const defShadow = "${defaultShadow}";
268
+
269
+ knotList.forEach((k, idx) => {
270
+ const kx = k.x, ky = k.y;
271
+ const kr = k.radius || defR;
272
+ const col = k.color || defCol;
273
+ const hi = k.highlightColor || defHi;
274
+ const sh = k.shadowColor || defShadow;
275
+ const knotParts = [];
276
+
277
+ if (knotType === "bullion_roll") {
278
+ // Bullion roll coils along directional vector
279
+ const len = k.length || (kr * 4);
280
+ const angRad = ((k.angle || 0) * Math.PI) / 180;
281
+ const dx = Math.cos(angRad);
282
+ const dy = Math.sin(angRad);
283
+ const steps = Math.max(3, Math.round(len / (kr * 0.8)));
284
+
285
+ // Base shadow line
286
+ const baseShadow = new paper.Path.Line({
287
+ from: [kx + 1, ky + 1.5],
288
+ to: [kx + dx * len + 1, ky + dy * len + 1.5],
289
+ strokeColor: sh,
290
+ strokeWidth: kr * 1.8,
291
+ strokeCap: "round"
292
+ });
293
+ knotParts.push(baseShadow);
294
+
295
+ // Overlapping coil loops
296
+ for (let s = 0; s < steps; s++) {
297
+ const t = s / steps;
298
+ const cx = kx + dx * (len * t);
299
+ const cy = ky + dy * (len * t);
300
+ const coil = new paper.Path.Circle({
301
+ center: [cx, cy],
302
+ radius: kr,
303
+ fillColor: col,
304
+ strokeColor: hi,
305
+ strokeWidth: 0.8
306
+ });
307
+ knotParts.push(coil);
308
+ }
309
+ } else if (knotType === "knot_anchor") {
310
+ // Anchor tack cross stitches
311
+ const tackLen = kr * 1.5;
312
+ const line1 = new paper.Path.Line({
313
+ from: [kx - tackLen, ky - tackLen],
314
+ to: [kx + tackLen, ky + tackLen],
315
+ strokeColor: col,
316
+ strokeWidth: Math.max(1, kr * 0.4),
317
+ strokeCap: "round"
318
+ });
319
+ const line2 = new paper.Path.Line({
320
+ from: [kx - tackLen, ky + tackLen],
321
+ to: [kx + tackLen, ky - tackLen],
322
+ strokeColor: col,
323
+ strokeWidth: Math.max(1, kr * 0.4),
324
+ strokeCap: "round"
325
+ });
326
+ const centerDot = new paper.Path.Circle({
327
+ center: [kx, ky],
328
+ radius: kr * 0.6,
329
+ fillColor: hi
330
+ });
331
+ knotParts.push(line1, line2, centerDot);
332
+ } else {
333
+ // Standard tactile French knot relief
334
+ // 1. French knot shadow crescent anchor beneath knot
335
+ const shadow = new paper.Path.Circle({
336
+ center: [kx + 1, ky + 1.5],
337
+ radius: kr,
338
+ fillColor: sh,
339
+ strokeColor: null
340
+ });
341
+ knotParts.push(shadow);
342
+
343
+ // 2. French knot coil body outer thread
344
+ const body = new paper.Path.Circle({
345
+ center: [kx, ky],
346
+ radius: kr,
347
+ fillColor: col,
348
+ strokeColor: "#f8fafc",
349
+ strokeWidth: 1
350
+ });
351
+ knotParts.push(body);
352
+
353
+ // 3. Inner coiled thread wrap
354
+ const innerCoil = new paper.Path.Circle({
355
+ center: [kx + kr * 0.1, ky + kr * 0.1],
356
+ radius: Math.max(1, kr * 0.55),
357
+ fillColor: null,
358
+ strokeColor: col,
359
+ strokeWidth: Math.max(0.8, kr * 0.28)
360
+ });
361
+ knotParts.push(innerCoil);
362
+
363
+ // 4. Specular glint highlight
364
+ const glint = new paper.Path.Circle({
365
+ center: [kx - kr * 0.32, ky - kr * 0.32],
366
+ radius: Math.max(0.8, kr * 0.3),
367
+ fillColor: hi,
368
+ strokeColor: null
369
+ });
370
+ knotParts.push(glint);
371
+ }
372
+
373
+ const knotGroup = new paper.Group(knotParts);
374
+ const id = "${prefix}_" + idx;
375
+ if (typeof app.registerItem === "function") app.registerItem(knotGroup, id, { source: "knot_generator", x: kx, y: ky, radius: kr });
376
+ items.push(knotGroup);
377
+ });
378
+
379
+ const masterGroup = new paper.Group(items);
380
+ if (typeof app.registerItem === "function") app.registerItem(masterGroup, "${prefix}_collection", { source: "knot_generator", count: items.length });
381
+ return masterGroup;
382
+ })();`;
383
+ }
384
+ /**
385
+ * Generate Paper.js code for Japanese Sashiko geometric folk embroidery.
386
+ * Enforces authentic vertex gaps (running stitches do not collide at intersection nodes).
387
+ */
388
+ export function generateSashikoCode(opts = {}) {
389
+ const x = opts.bounds?.x ?? 0;
390
+ const y = opts.bounds?.y ?? 0;
391
+ const w = opts.bounds?.width ?? 1280;
392
+ const h = opts.bounds?.height ?? 720;
393
+ const pattern = opts.pattern ?? opts.motif ?? "seigaiha";
394
+ const stitchLen = Math.max(3, opts.stitchLength ?? 8);
395
+ const gapLen = Math.max(2, opts.gapLength ?? 4);
396
+ const vertexGap = Math.max(1, opts.vertexGap ?? 3);
397
+ const threadWidth = opts.threadWidth ?? opts.threadThickness ?? 1.6;
398
+ const threadColor = opts.threadColor ?? "#ffffff";
399
+ const groundColor = opts.groundColor ?? "#1e3a8a";
400
+ const scale = Math.max(20, opts.scale ?? opts.gridSize ?? 42);
401
+ const concentricArcs = Math.max(1, opts.concentricArcs ?? 3);
402
+ const opacity = opts.opacity ?? 0.92;
403
+ const prefix = opts.idPrefix ?? `sashiko_${pattern}`;
404
+ return `// Sashiko Geometric Folk Embroidery Generator (${pattern})
405
+ (function() {
406
+ const items = [];
407
+ const x0 = ${x}, y0 = ${y}, x1 = ${x + w}, y1 = ${y + h};
408
+ const threadColor = "${threadColor}";
409
+ const threadWidth = ${threadWidth};
410
+ const stitchLen = ${stitchLen};
411
+ const gapLen = ${gapLen};
412
+ const vertexGap = ${vertexGap};
413
+ const scale = ${scale};
414
+ const concentricArcs = ${concentricArcs};
415
+ const opacity = ${opacity};
416
+
417
+ // 0. Ground cloth plate
418
+ const bgPlate = new paper.Path.Rectangle({
419
+ point: [x0, y0],
420
+ size: [x1 - x0, y1 - y0],
421
+ fillColor: "${groundColor}",
422
+ strokeColor: null
423
+ });
424
+ items.push(bgPlate);
425
+
426
+ if ("${pattern}" === "seigaiha") {
427
+ // Seigaiha: Overlapping concentric ocean wave arcs with staggered centers
428
+ const R = scale;
429
+ const dy = R * 0.55;
430
+ let row = 0;
431
+ for (let cy = y0 + R * 0.4; cy <= y1 + R; cy += dy) {
432
+ const offsetX = (row % 2 === 0) ? 0 : R;
433
+ let col = 0;
434
+ for (let cx = x0 - R + offsetX; cx <= x1 + R; cx += R * 2) {
435
+ for (let a = 1; a <= concentricArcs; a++) {
436
+ const arcR = (R * a) / concentricArcs;
437
+ const fromPt = [cx - arcR + vertexGap * 0.5, cy - vertexGap * 0.2];
438
+ const throughPt = [cx, cy - arcR];
439
+ const toPt = [cx + arcR - vertexGap * 0.5, cy - vertexGap * 0.2];
440
+ const arc = new paper.Path.Arc(fromPt, throughPt, toPt);
441
+ arc.strokeColor = threadColor;
442
+ arc.strokeWidth = threadWidth;
443
+ arc.strokeCap = "round";
444
+ arc.dashArray = [stitchLen, gapLen];
445
+ arc.opacity = opacity;
446
+ items.push(arc);
447
+ }
448
+ col++;
449
+ }
450
+ row++;
451
+ }
452
+ } else if ("${pattern}" === "asanoha") {
453
+ // Asanoha: Hexagonal star / hemp-leaf isometric lattice with vertex gap clearance
454
+ const S = scale;
455
+ const H = S * Math.sqrt(3) / 2;
456
+ let rIdx = 0;
457
+ for (let py = y0; py <= y1 + H; py += H) {
458
+ const offX = (rIdx % 2 === 0) ? 0 : S * 0.5;
459
+ for (let px = x0 - S + offX; px <= x1 + S; px += S) {
460
+ const mx = px;
461
+ const my = py;
462
+ const angles = [0, 60, 120, 180, 240, 300];
463
+ angles.forEach(angDeg => {
464
+ const rad = (angDeg * Math.PI) / 180;
465
+ const targetX = mx + Math.cos(rad) * S * 0.55;
466
+ const targetY = my + Math.sin(rad) * S * 0.55;
467
+
468
+ const startX = mx + Math.cos(rad) * vertexGap;
469
+ const startY = my + Math.sin(rad) * vertexGap;
470
+ const endX = targetX - Math.cos(rad) * vertexGap;
471
+ const endY = targetY - Math.sin(rad) * vertexGap;
472
+
473
+ const spoke = new paper.Path.Line({
474
+ from: [startX, startY],
475
+ to: [endX, endY],
476
+ strokeColor: threadColor,
477
+ strokeWidth: threadWidth,
478
+ strokeCap: "round",
479
+ dashArray: [stitchLen, gapLen],
480
+ opacity: opacity
481
+ });
482
+ items.push(spoke);
483
+ });
484
+ }
485
+ rIdx++;
486
+ }
487
+ } else {
488
+ // Hishi / Kaki no Hana: Diamond grid with vertex gap junctions
489
+ const P = scale;
490
+ for (let diag = -Math.max(w, h); diag <= w + h; diag += P) {
491
+ for (let t = 0; t <= w + h; t += P) {
492
+ const p1x = t + vertexGap;
493
+ const p1y = t + diag + vertexGap;
494
+ const p2x = t + P - vertexGap;
495
+ const p2y = t + P + diag - vertexGap;
496
+ if (p1x >= x0 - P && p1x <= x1 + P && p1y >= y0 - P && p1y <= y1 + P) {
497
+ const seg1 = new paper.Path.Line({
498
+ from: [p1x, p1y],
499
+ to: [p2x, p2y],
500
+ strokeColor: threadColor,
501
+ strokeWidth: threadWidth,
502
+ strokeCap: "round",
503
+ dashArray: [stitchLen, gapLen],
504
+ opacity: opacity
505
+ });
506
+ items.push(seg1);
507
+ }
508
+
509
+ const q1x = t + vertexGap;
510
+ const q1y = -t + diag + vertexGap;
511
+ const q2x = t + P - vertexGap;
512
+ const q2y = -(t + P) + diag - vertexGap;
513
+ if (q1x >= x0 - P && q1x <= x1 + P && q1y >= y0 - P && q1y <= y1 + P) {
514
+ const seg2 = new paper.Path.Line({
515
+ from: [q1x, q1y],
516
+ to: [q2x, q2y],
517
+ strokeColor: threadColor,
518
+ strokeWidth: threadWidth,
519
+ strokeCap: "round",
520
+ dashArray: [stitchLen, gapLen],
521
+ opacity: opacity
522
+ });
523
+ items.push(seg2);
524
+ }
525
+ }
526
+ }
527
+ }
528
+
529
+ const group = new paper.Group(items);
530
+ if (typeof app.registerItem === "function") {
531
+ app.registerItem(group, "${prefix}_group", {
532
+ source: "sashiko_generator",
533
+ pattern: "${pattern}",
534
+ stitchCount: items.length
535
+ });
536
+ }
537
+ return group;
538
+ })();`;
539
+ }
540
+ /**
541
+ * Master dispatcher for textile and embroidery vector code generation.
542
+ */
543
+ export function generateTextileCode(opts) {
544
+ const type = opts.type ?? opts.weave ?? "plain";
545
+ switch (type) {
546
+ case "plain":
547
+ return generatePlainWeaveCode(opts);
548
+ case "twill":
549
+ return generateTwillWeaveCode({
550
+ ...opts,
551
+ herringbone: opts.herringbone || opts.twillVariant === "herringbone" || opts.variant === "herringbone",
552
+ });
553
+ case "herringbone":
554
+ return generateTwillWeaveCode({ ...opts, herringbone: true });
555
+ case "basket":
556
+ return generateBasketWeaveCode(opts);
557
+ case "knots":
558
+ case "french_knot":
559
+ case "bullion_roll":
560
+ case "knot_anchor":
561
+ return generateKnotCode({ knotType: (opts.knotType ?? (opts.type !== "knots" ? opts.type : "french_knot")), ...opts });
562
+ case "sashiko":
563
+ return generateSashikoCode({ pattern: (opts.pattern ?? opts.motif ?? "seigaiha"), ...opts });
564
+ default:
565
+ return generatePlainWeaveCode(opts);
566
+ }
567
+ }
568
+ //# sourceMappingURL=textile-weave-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textile-weave-generator.js","sourceRoot":"","sources":["../../../src/vendor/design/textile-weave-generator.ts"],"names":[],"mappings":"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"}
package/manifest.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "manifest_version": "0.3",
3
3
  "name": "pinepaper-mcp",
4
- "version": "1.6.11",
4
+ "version": "1.6.13",
5
5
  "display_name": "PinePaper Studio",
6
6
  "description": "Create animated graphics with AI using PinePaper Studio",
7
7
  "long_description": "PinePaper MCP Server enables Claude to create, animate, and export graphics through PinePaper Studio. Features include shape creation, relation-based animations (orbits, follows, attached_to), procedural generators, visual effects, SVG export with animations, asset search & import from 4 open repositories (500k+ icons), performance metrics tracking, diagram tools for flowcharts/UML/network diagrams with smart connectors and auto-layout, enhanced error messages with canvas context, Agent Flow Mode for content automation pipelines with batch operations and smart platform exports (Instagram, TikTok, YouTube, etc.), interactive triggers (click, hover, drag events), quiz/LMS integration with SCORM/xAPI support, Letter Collage for stylized text with per-letter customization (Wordle, magazine cutout, gradient styles with 24+ palettes), and canvas presets for social media platforms. Supports two execution modes: Puppeteer (live browser execution) and Code (generate code for manual paste).",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pinepaper.studio/mcp-server",
3
- "version": "1.6.11",
3
+ "version": "1.6.13",
4
4
  "mcpName": "io.github.pinepaper/mcp-server",
5
5
  "description": "MCP Server for PinePaper Studio - Create animated graphics with AI",
6
6
  "type": "module",
@@ -38,7 +38,7 @@
38
38
  "typecheck": "tsc --noEmit",
39
39
  "check:manifest": "bun scripts/check-manifest-tools.mjs",
40
40
  "fix:manifest": "bun scripts/check-manifest-tools.mjs --fix",
41
- "prepublishOnly": "bun run check:manifest && bun run check:design && bun run check:character && bun run check:engine-methods && bun run check:engine-surface && bun run build",
41
+ "prepublishOnly": "bun run check:manifest && bun run check:design && bun run check:character && bun run check:engine-methods && bun run check:engine-surface && bun run check:shape-params && bun run check:stick-vocabulary && bun run build",
42
42
  "lint:errors": "eslint src --quiet",
43
43
  "sync:design": "node scripts/sync-design-systems.mjs",
44
44
  "check:design": "node scripts/sync-design-systems.mjs --check",
@@ -48,6 +48,12 @@
48
48
  "sync:engine-surface": "node scripts/sync-engine-surface.mjs",
49
49
  "fix:engine-surface": "node scripts/sync-engine-surface.mjs",
50
50
  "check:engine-surface": "node scripts/sync-engine-surface.mjs --check",
51
+ "sync:shape-params": "node scripts/sync-shape-params.mjs",
52
+ "fix:shape-params": "node scripts/sync-shape-params.mjs",
53
+ "check:shape-params": "node scripts/sync-shape-params.mjs --check",
54
+ "sync:stick-vocabulary": "node scripts/sync-stick-vocabulary.mjs",
55
+ "fix:stick-vocabulary": "node scripts/sync-stick-vocabulary.mjs",
56
+ "check:stick-vocabulary": "node scripts/sync-stick-vocabulary.mjs --check",
51
57
  "sync:character": "node scripts/sync-character-modules.mjs",
52
58
  "check:character": "node scripts/sync-character-modules.mjs --check"
53
59
  },