canvu-react 0.3.28 → 0.3.30

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 (45) hide show
  1. package/dist/{asset-hydration-BEG21hMp.d.ts → asset-hydration-DrTOgDdd.d.ts} +2 -2
  2. package/dist/{asset-hydration-3Iv5xHxM.d.cts → asset-hydration-EtEuBwb7.d.cts} +2 -2
  3. package/dist/{camera-KwCYYPhm.d.ts → camera-AoTwBSoE.d.ts} +1 -1
  4. package/dist/{camera-BwQjm5oh.d.cts → camera-Di5R_Rwl.d.cts} +1 -1
  5. package/dist/chatbot.d.cts +4 -4
  6. package/dist/chatbot.d.ts +4 -4
  7. package/dist/index.cjs +118 -1
  8. package/dist/index.cjs.map +1 -1
  9. package/dist/index.d.cts +6 -6
  10. package/dist/index.d.ts +6 -6
  11. package/dist/index.js +116 -2
  12. package/dist/index.js.map +1 -1
  13. package/dist/native.cjs +99 -0
  14. package/dist/native.cjs.map +1 -1
  15. package/dist/native.d.cts +2 -2
  16. package/dist/native.d.ts +2 -2
  17. package/dist/native.js +99 -0
  18. package/dist/native.js.map +1 -1
  19. package/dist/react.cjs +183 -7
  20. package/dist/react.cjs.map +1 -1
  21. package/dist/react.d.cts +15 -12
  22. package/dist/react.d.ts +15 -12
  23. package/dist/react.js +183 -8
  24. package/dist/react.js.map +1 -1
  25. package/dist/realtime.cjs +10 -0
  26. package/dist/realtime.cjs.map +1 -1
  27. package/dist/realtime.d.cts +6 -6
  28. package/dist/realtime.d.ts +6 -6
  29. package/dist/realtime.js +10 -0
  30. package/dist/realtime.js.map +1 -1
  31. package/dist/{shape-builders-DFudWDFI.d.cts → shape-builders-CsSXKCcs.d.ts} +43 -2
  32. package/dist/{shape-builders-ENwnK-zT.d.ts → shape-builders-CsbSRZnQ.d.cts} +43 -2
  33. package/dist/tldraw.cjs +101 -2
  34. package/dist/tldraw.cjs.map +1 -1
  35. package/dist/tldraw.d.cts +1 -1
  36. package/dist/tldraw.d.ts +1 -1
  37. package/dist/tldraw.js +101 -2
  38. package/dist/tldraw.js.map +1 -1
  39. package/dist/{types-DNwjgs5U.d.cts → types-B2Na677H.d.cts} +1 -1
  40. package/dist/{types-BLXR7g_L.d.cts → types-B6PAYKzx.d.ts} +4 -4
  41. package/dist/{types-CB0TZZuk.d.cts → types-Bnq2HtHQ.d.cts} +1 -1
  42. package/dist/{types-CB0TZZuk.d.ts → types-Bnq2HtHQ.d.ts} +1 -1
  43. package/dist/{types-Cm7IsgL4.d.ts → types-DWGk2_GZ.d.cts} +4 -4
  44. package/dist/{types-BtAJFS_-.d.ts → types-zmUah-vP.d.ts} +1 -1
  45. package/package.json +1 -1
package/dist/react.cjs CHANGED
@@ -181,6 +181,8 @@ __export(shape_builders_exports, {
181
181
  DEFAULT_TEXT_FONT_SIZE: () => DEFAULT_TEXT_FONT_SIZE,
182
182
  applyStrokeToItem: () => applyStrokeToItem,
183
183
  applyTextDraftWhileEditing: () => applyTextDraftWhileEditing,
184
+ buildArchitecturalCloudPathD: () => buildArchitecturalCloudPathD,
185
+ buildArchitecturalCloudSvg: () => buildArchitecturalCloudSvg,
184
186
  buildArrowSvg: () => buildArrowSvg,
185
187
  buildDrawDotSvg: () => buildDrawDotSvg,
186
188
  buildEllipseSvg: () => buildEllipseSvg,
@@ -192,6 +194,7 @@ __export(shape_builders_exports, {
192
194
  buildTextSvg: () => buildTextSvg,
193
195
  computeFreehandSvgPayload: () => computeFreehandSvgPayload,
194
196
  computeStraightArrowGeometry: () => computeStraightArrowGeometry,
197
+ createArchitecturalCloudItem: () => createArchitecturalCloudItem,
195
198
  createDrawDotItem: () => createDrawDotItem,
196
199
  createEllipseItem: () => createEllipseItem,
197
200
  createFreehandStrokeItem: () => createFreehandStrokeItem,
@@ -283,6 +286,41 @@ function resolveStrokeStyle(item) {
283
286
  function strokeOpacityAttr(style) {
284
287
  return style.strokeOpacity != null ? ` stroke-opacity="${style.strokeOpacity}"` : "";
285
288
  }
289
+ function clampNumber(value, min, max) {
290
+ return Math.min(max, Math.max(min, value));
291
+ }
292
+ function svgNumber(value) {
293
+ if (!Number.isFinite(value)) return "0";
294
+ return Number(value.toFixed(3)).toString();
295
+ }
296
+ function architecturalCloudScallopCount(length, depth) {
297
+ if (length <= 1e-6) return 0;
298
+ return Math.max(1, Math.round(length / Math.max(depth * 2.05, 8)));
299
+ }
300
+ function appendHorizontalScallops(segments, startX, endX, y, controlY, count) {
301
+ if (count <= 0) return;
302
+ const step = (endX - startX) / count;
303
+ for (let index = 1; index <= count; index += 1) {
304
+ const x0 = startX + step * (index - 1);
305
+ const x1 = index === count ? endX : startX + step * index;
306
+ const cx = (x0 + x1) / 2;
307
+ segments.push(
308
+ `Q${svgNumber(cx)} ${svgNumber(controlY)} ${svgNumber(x1)} ${svgNumber(y)}`
309
+ );
310
+ }
311
+ }
312
+ function appendVerticalScallops(segments, startY, endY, x, controlX, count) {
313
+ if (count <= 0) return;
314
+ const step = (endY - startY) / count;
315
+ for (let index = 1; index <= count; index += 1) {
316
+ const y0 = startY + step * (index - 1);
317
+ const y1 = index === count ? endY : startY + step * index;
318
+ const cy = (y0 + y1) / 2;
319
+ segments.push(
320
+ `Q${svgNumber(controlX)} ${svgNumber(cy)} ${svgNumber(x)} ${svgNumber(y1)}`
321
+ );
322
+ }
323
+ }
286
324
  function buildRectSvg(width, height, style = DEFAULT_STROKE_STYLE) {
287
325
  return `<rect width="${width}" height="${height}" fill="none" stroke="${style.stroke}" stroke-width="${style.strokeWidth}" rx="4"${strokeOpacityAttr(style)} />`;
288
326
  }
@@ -291,6 +329,63 @@ function buildEllipseSvg(width, height, style = DEFAULT_STROKE_STYLE) {
291
329
  const ry = height / 2;
292
330
  return `<ellipse cx="${rx}" cy="${ry}" rx="${rx}" ry="${ry}" fill="none" stroke="${style.stroke}" stroke-width="${style.strokeWidth}"${strokeOpacityAttr(style)} />`;
293
331
  }
332
+ function buildArchitecturalCloudPathD(width, height, strokeWidth = DEFAULT_STROKE_STYLE.strokeWidth) {
333
+ const w = Math.max(0, width);
334
+ const h = Math.max(0, height);
335
+ if (w <= 0 || h <= 0) return "";
336
+ const inset = Math.min(w / 2, h / 2, Math.max(0.5, strokeWidth / 2));
337
+ const x0 = inset;
338
+ const y0 = inset;
339
+ const x1 = Math.max(x0, w - inset);
340
+ const y1 = Math.max(y0, h - inset);
341
+ const innerW = Math.max(0, x1 - x0);
342
+ const innerH = Math.max(0, y1 - y0);
343
+ if (innerW <= 0 || innerH <= 0) return "";
344
+ const maxDepth = Math.max(0.5, Math.min(innerW, innerH) * 0.18);
345
+ const depth = clampNumber(Math.min(w, h) * 0.08, 2, Math.min(12, maxDepth));
346
+ const corner = Math.min(depth * 1.2, innerW / 2, innerH / 2);
347
+ const topStart = x0 + corner;
348
+ const topEnd = x1 - corner;
349
+ const rightStart = y0 + corner;
350
+ const rightEnd = y1 - corner;
351
+ const bottomStart = x1 - corner;
352
+ const bottomEnd = x0 + corner;
353
+ const leftStart = y1 - corner;
354
+ const leftEnd = y0 + corner;
355
+ const topCount = architecturalCloudScallopCount(topEnd - topStart, depth);
356
+ const rightCount = architecturalCloudScallopCount(rightEnd - rightStart, depth);
357
+ const bottomCount = architecturalCloudScallopCount(bottomStart - bottomEnd, depth);
358
+ const leftCount = architecturalCloudScallopCount(leftStart - leftEnd, depth);
359
+ const segments = [`M${svgNumber(topStart)} ${svgNumber(y0)}`];
360
+ appendHorizontalScallops(segments, topStart, topEnd, y0, y0 + depth, topCount);
361
+ segments.push(
362
+ `Q${svgNumber(x1)} ${svgNumber(y0)} ${svgNumber(x1)} ${svgNumber(rightStart)}`
363
+ );
364
+ appendVerticalScallops(segments, rightStart, rightEnd, x1, x1 - depth, rightCount);
365
+ segments.push(
366
+ `Q${svgNumber(x1)} ${svgNumber(y1)} ${svgNumber(bottomStart)} ${svgNumber(y1)}`
367
+ );
368
+ appendHorizontalScallops(
369
+ segments,
370
+ bottomStart,
371
+ bottomEnd,
372
+ y1,
373
+ y1 - depth,
374
+ bottomCount
375
+ );
376
+ segments.push(
377
+ `Q${svgNumber(x0)} ${svgNumber(y1)} ${svgNumber(x0)} ${svgNumber(leftStart)}`
378
+ );
379
+ appendVerticalScallops(segments, leftStart, leftEnd, x0, x0 + depth, leftCount);
380
+ segments.push(
381
+ `Q${svgNumber(x0)} ${svgNumber(y0)} ${svgNumber(topStart)} ${svgNumber(y0)} Z`
382
+ );
383
+ return segments.join(" ");
384
+ }
385
+ function buildArchitecturalCloudSvg(width, height, style = DEFAULT_STROKE_STYLE) {
386
+ const d = buildArchitecturalCloudPathD(width, height, style.strokeWidth);
387
+ return `<path d="${d}" fill="none" stroke="${style.stroke}" stroke-width="${style.strokeWidth}" stroke-linecap="round" stroke-linejoin="round"${strokeOpacityAttr(style)} />`;
388
+ }
294
389
  function buildLineSvg(line, style = DEFAULT_STROKE_STYLE) {
295
390
  return `<line x1="${line.x1}" y1="${line.y1}" x2="${line.x2}" y2="${line.y2}" stroke="${style.stroke}" stroke-width="${style.strokeWidth}"${strokeOpacityAttr(style)} />`;
296
391
  }
@@ -433,6 +528,13 @@ function rebuildItemSvg(item) {
433
528
  childrenSvg: buildEllipseSvg(b.width, b.height, style)
434
529
  };
435
530
  }
531
+ if (k === "architectural-cloud") {
532
+ const b = normalizeRect(item.bounds);
533
+ return {
534
+ ...item,
535
+ childrenSvg: buildArchitecturalCloudSvg(b.width, b.height, style)
536
+ };
537
+ }
436
538
  if ((k === "line" || k === "arrow") && item.line) {
437
539
  const line = item.line;
438
540
  const childrenSvg = k === "arrow" ? buildArrowSvg(item.id, line, style) : buildLineSvg(line, style);
@@ -545,6 +647,21 @@ function createEllipseItem(id, bounds, style) {
545
647
  childrenSvg: ""
546
648
  });
547
649
  }
650
+ function createArchitecturalCloudItem(id, bounds, style) {
651
+ const r = normalizeRect(bounds);
652
+ const s = { ...DEFAULT_STROKE_STYLE, ...style };
653
+ return rebuildItemSvg({
654
+ id,
655
+ x: r.x,
656
+ y: r.y,
657
+ bounds: { ...r },
658
+ toolKind: "architectural-cloud",
659
+ stroke: s.stroke,
660
+ strokeWidth: s.strokeWidth,
661
+ ...s.strokeOpacity != null ? { strokeOpacity: s.strokeOpacity } : {},
662
+ childrenSvg: ""
663
+ });
664
+ }
548
665
  function createLineItem(id, bounds, line, toolKind, style, arrowBind) {
549
666
  const r = normalizeRect(bounds);
550
667
  const s = { ...DEFAULT_STROKE_STYLE, ...style };
@@ -3049,6 +3166,9 @@ function IconRect(props) {
3049
3166
  function IconEllipse(props) {
3050
3167
  return /* @__PURE__ */ jsxRuntime.jsx("svg", { ...base, ...props, "aria-hidden": true, children: /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx: "12", cy: "12", rx: "9", ry: "6" }) });
3051
3168
  }
3169
+ function IconArchitecturalCloud(props) {
3170
+ return /* @__PURE__ */ jsxRuntime.jsx("svg", { ...base, ...props, "aria-hidden": true, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M6.5 7.5Q4.4 7.5 4.4 9.4Q3 9.9 3 11.6Q3 13.5 5.2 13.5Q5.8 16 8.3 15.2Q9.2 17.2 11.3 15.7Q12.8 17 14.3 15.5Q16.5 16.4 17 14Q20.7 13.7 20.2 10.9Q21 8.5 18 8.3Q17.2 5.9 14.8 6.7Q13.2 5.2 11.5 6.5Q9.1 5.1 7.8 7.2Q7.2 7.2 6.5 7.5Z" }) });
3171
+ }
3052
3172
  function IconLine(props) {
3053
3173
  return /* @__PURE__ */ jsxRuntime.jsx("svg", { ...base, ...props, "aria-hidden": true, children: /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "5", y1: "19", x2: "19", y2: "5" }) });
3054
3174
  }
@@ -3093,6 +3213,7 @@ var ic = { size: 20, strokeWidth: 2 };
3093
3213
  var DEFAULT_OVERFLOW_TOOL_IDS = [
3094
3214
  "rect",
3095
3215
  "ellipse",
3216
+ "architectural-cloud",
3096
3217
  "line",
3097
3218
  "marker",
3098
3219
  "laser",
@@ -3123,6 +3244,13 @@ var DEFAULT_VECTOR_TOOLS = [
3123
3244
  icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Circle, { ...ic, "aria-hidden": true }),
3124
3245
  shortcutHint: "O"
3125
3246
  },
3247
+ {
3248
+ id: "architectural-cloud",
3249
+ label: "Nuvem arquitetural",
3250
+ tooltipLabel: "Architectural cloud",
3251
+ icon: /* @__PURE__ */ jsxRuntime.jsx(IconArchitecturalCloud, { "aria-hidden": true }),
3252
+ shortcutHint: "C"
3253
+ },
3126
3254
  {
3127
3255
  id: "line",
3128
3256
  label: "Line",
@@ -3200,7 +3328,7 @@ function normalizeHex(stroke) {
3200
3328
  return "#2563eb";
3201
3329
  }
3202
3330
  function isStylableKind(tk) {
3203
- return tk === "rect" || tk === "ellipse" || tk === "line" || tk === "arrow" || tk === "draw" || tk === "pencil" || tk === "brush" || tk === "marker" || tk === "text";
3331
+ return tk === "rect" || tk === "ellipse" || tk === "architectural-cloud" || tk === "line" || tk === "arrow" || tk === "draw" || tk === "pencil" || tk === "brush" || tk === "marker" || tk === "text";
3204
3332
  }
3205
3333
  function VectorSelectionInspector({
3206
3334
  items: itemsProp,
@@ -3651,6 +3779,10 @@ var TOOLBAR_TOOLTIP_CSS = `
3651
3779
  opacity: 1;
3652
3780
  visibility: visible;
3653
3781
  }
3782
+ [data-slot="vector-canvas-toolbar"][data-position^="top-"] .vector-toolbar-tip {
3783
+ top: calc(100% + 8px);
3784
+ bottom: auto;
3785
+ }
3654
3786
  `;
3655
3787
  var OVERFLOW_MENU_CSS = `
3656
3788
  .vector-toolbar-overflow-panel {
@@ -3733,6 +3865,10 @@ var OVERFLOW_MENU_CSS = `
3733
3865
  opacity: 1;
3734
3866
  visibility: visible;
3735
3867
  }
3868
+ [data-slot="vector-canvas-toolbar"][data-position^="top-"] .vector-toolbar-overflow-tip {
3869
+ top: calc(100% + 8px);
3870
+ bottom: auto;
3871
+ }
3736
3872
  .vector-toolbar-overflow-cell > button {
3737
3873
  background: rgba(24,24,27,0.05);
3738
3874
  }
@@ -4553,6 +4689,7 @@ var HandBinding = makeToolBinding("hand");
4553
4689
  var SelectBinding = makeToolBinding("select");
4554
4690
  var RectBinding = makeToolBinding("rect");
4555
4691
  var EllipseBinding = makeToolBinding("ellipse");
4692
+ var ArchitecturalCloudBinding = makeToolBinding("architectural-cloud");
4556
4693
  var LineBinding = makeToolBinding("line");
4557
4694
  var ArrowBinding = makeToolBinding("arrow");
4558
4695
  var DrawBinding = makeToolBinding("draw");
@@ -4572,6 +4709,7 @@ var VectorToolbar = Object.assign(
4572
4709
  Select: SelectBinding,
4573
4710
  Rect: RectBinding,
4574
4711
  Ellipse: EllipseBinding,
4712
+ ArchitecturalCloud: ArchitecturalCloudBinding,
4575
4713
  Line: LineBinding,
4576
4714
  Arrow: ArrowBinding,
4577
4715
  Draw: DrawBinding,
@@ -5301,7 +5439,7 @@ function isArrowBindTarget(item) {
5301
5439
  if (item.locked) return false;
5302
5440
  const k = item.toolKind;
5303
5441
  if (!k) return false;
5304
- return k === "rect" || k === "ellipse" || k === "text" || k === "image" || k === "custom";
5442
+ return k === "rect" || k === "ellipse" || k === "architectural-cloud" || k === "text" || k === "image" || k === "custom";
5305
5443
  }
5306
5444
  function closestPointOnShapeBoundaryLocal(item, lx, ly, w, h) {
5307
5445
  if (item.toolKind === "ellipse") {
@@ -5640,6 +5778,16 @@ function resizeItemByHandle(item, start, handle, currentWorld) {
5640
5778
  childrenSvg: buildEllipseSvg(nb.width, nb.height, style)
5641
5779
  };
5642
5780
  }
5781
+ if (k === "architectural-cloud") {
5782
+ const style = resolveStrokeStyle(item);
5783
+ return {
5784
+ ...item,
5785
+ x: nb.x,
5786
+ y: nb.y,
5787
+ bounds: nb,
5788
+ childrenSvg: buildArchitecturalCloudSvg(nb.width, nb.height, style)
5789
+ };
5790
+ }
5643
5791
  if (k === "text" && item.text !== void 0) {
5644
5792
  const sfw = Math.max(sb.width, 1e-6);
5645
5793
  const sfh = Math.max(sb.height, 1e-6);
@@ -6182,7 +6330,7 @@ function InteractionOverlay({
6182
6330
  vectorEffect: "non-scaling-stroke"
6183
6331
  }
6184
6332
  );
6185
- } else if (placementPreview.kind === "rect" || placementPreview.kind === "ellipse") {
6333
+ } else if (placementPreview.kind === "rect" || placementPreview.kind === "ellipse" || placementPreview.kind === "architectural-cloud") {
6186
6334
  const r = normalizeRect(placementPreview.rect);
6187
6335
  preview = placementPreview.kind === "rect" ? /* @__PURE__ */ jsxRuntime.jsx(
6188
6336
  "rect",
@@ -6197,7 +6345,7 @@ function InteractionOverlay({
6197
6345
  strokeDasharray: dashPattern,
6198
6346
  vectorEffect: "non-scaling-stroke"
6199
6347
  }
6200
- ) : /* @__PURE__ */ jsxRuntime.jsx(
6348
+ ) : placementPreview.kind === "ellipse" ? /* @__PURE__ */ jsxRuntime.jsx(
6201
6349
  "ellipse",
6202
6350
  {
6203
6351
  cx: r.x + r.width / 2,
@@ -6210,7 +6358,19 @@ function InteractionOverlay({
6210
6358
  strokeDasharray: dashPattern,
6211
6359
  vectorEffect: "non-scaling-stroke"
6212
6360
  }
6213
- );
6361
+ ) : /* @__PURE__ */ jsxRuntime.jsx("g", { transform: `translate(${r.x}, ${r.y})`, children: /* @__PURE__ */ jsxRuntime.jsx(
6362
+ "path",
6363
+ {
6364
+ d: buildArchitecturalCloudPathD(r.width, r.height, overlayStrokePx),
6365
+ fill: "none",
6366
+ stroke: "#64748b",
6367
+ strokeWidth: overlayStrokePx,
6368
+ strokeDasharray: dashPattern,
6369
+ strokeLinecap: "round",
6370
+ strokeLinejoin: "round",
6371
+ vectorEffect: "non-scaling-stroke"
6372
+ }
6373
+ ) });
6214
6374
  } else if (placementPreview.kind === "line" || placementPreview.kind === "arrow") {
6215
6375
  const { start, end } = placementPreview;
6216
6376
  const geometry = placementPreview.kind === "arrow" ? computeStraightArrowGeometry(
@@ -6783,6 +6943,7 @@ function cursorForVectorToolId(toolId) {
6783
6943
  return "default";
6784
6944
  case "rect":
6785
6945
  case "ellipse":
6946
+ case "architectural-cloud":
6786
6947
  case "line":
6787
6948
  case "arrow":
6788
6949
  return "crosshair";
@@ -6833,7 +6994,7 @@ function replaceItem(items, id, next) {
6833
6994
  }
6834
6995
  function supportsResizeHandles(item) {
6835
6996
  const k = item?.toolKind;
6836
- if (k === "rect" || k === "ellipse" || k === "line" || k === "arrow" || k === "image" || k === "text") {
6997
+ if (k === "rect" || k === "ellipse" || k === "architectural-cloud" || k === "line" || k === "arrow" || k === "image" || k === "text") {
6837
6998
  return true;
6838
6999
  }
6839
7000
  if ((k === "draw" || k === "pencil" || k === "brush" || k === "marker") && item?.pathPointsLocal && item.pathPointsLocal.length > 0) {
@@ -6890,6 +7051,9 @@ function defaultPlacementWorld(tool, center) {
6890
7051
  if (tool === "ellipse") {
6891
7052
  return { raw: { x: cx - 70, y: cy - 45, width: 140, height: 90 } };
6892
7053
  }
7054
+ if (tool === "architectural-cloud") {
7055
+ return { raw: { x: cx - 90, y: cy - 50, width: 180, height: 100 } };
7056
+ }
6893
7057
  const a = { x: cx - 50, y: cy };
6894
7058
  const b = { x: cx + 50, y: cy };
6895
7059
  return {
@@ -8793,7 +8957,7 @@ var VectorViewport = react.forwardRef(
8793
8957
  return;
8794
8958
  }
8795
8959
  const cp = customPlacementRef.current;
8796
- if (tool === "rect" || tool === "ellipse" || tool === "line" || tool === "arrow" || cp && tool === cp.toolId) {
8960
+ if (tool === "rect" || tool === "ellipse" || tool === "architectural-cloud" || tool === "line" || tool === "arrow" || cp && tool === cp.toolId) {
8797
8961
  dragStateRef.current = {
8798
8962
  kind: "place",
8799
8963
  tool,
@@ -9213,6 +9377,11 @@ var VectorViewport = react.forwardRef(
9213
9377
  setPlacementPreview({ kind: "rect", rect: rectFromCorners(a, b) });
9214
9378
  } else if (st.tool === "ellipse") {
9215
9379
  setPlacementPreview({ kind: "ellipse", rect: rectFromCorners(a, b) });
9380
+ } else if (st.tool === "architectural-cloud") {
9381
+ setPlacementPreview({
9382
+ kind: "architectural-cloud",
9383
+ rect: rectFromCorners(a, b)
9384
+ });
9216
9385
  } else if (st.tool === "line") {
9217
9386
  setPlacementPreview({
9218
9387
  kind: "line",
@@ -9471,6 +9640,12 @@ var VectorViewport = react.forwardRef(
9471
9640
  } else if (st.tool === "ellipse") {
9472
9641
  change([...itemsRef.current, createEllipseItem(id, raw, pen)]);
9473
9642
  setEffectiveSelectedIdsRef.current([id]);
9643
+ } else if (st.tool === "architectural-cloud") {
9644
+ change([
9645
+ ...itemsRef.current,
9646
+ createArchitecturalCloudItem(id, raw, pen)
9647
+ ]);
9648
+ setEffectiveSelectedIdsRef.current([id]);
9474
9649
  } else if (st.tool === "line" || st.tool === "arrow") {
9475
9650
  const line = lineEndpointsToLocal(raw, lineA, lineB);
9476
9651
  change([
@@ -9792,6 +9967,7 @@ exports.CanvuPluginContext = CanvuPluginContext;
9792
9967
  exports.DEFAULT_OVERFLOW_TOOL_IDS = DEFAULT_OVERFLOW_TOOL_IDS;
9793
9968
  exports.DEFAULT_VECTOR_CANVAS_STORAGE_KEY = DEFAULT_VECTOR_CANVAS_STORAGE_KEY;
9794
9969
  exports.DEFAULT_VECTOR_TOOLS = DEFAULT_VECTOR_TOOLS;
9970
+ exports.IconArchitecturalCloud = IconArchitecturalCloud;
9795
9971
  exports.IconArrow = IconArrow;
9796
9972
  exports.IconDraw = IconDraw;
9797
9973
  exports.IconEllipse = IconEllipse;