@redvars/peacock 3.8.6 → 3.9.1

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 (85) hide show
  1. package/dist/code-highlighter.js +1 -4
  2. package/dist/code-highlighter.js.map +1 -1
  3. package/dist/custom-elements-jsdocs.json +93 -213
  4. package/dist/custom-elements.json +488 -2149
  5. package/dist/elevation.js +55 -2
  6. package/dist/elevation.js.map +1 -1
  7. package/dist/flow.js +762 -0
  8. package/dist/flow.js.map +1 -0
  9. package/dist/index.js +3 -3
  10. package/dist/loader.js +10 -9
  11. package/dist/loader.js.map +1 -1
  12. package/dist/menu-item.js +144 -63
  13. package/dist/menu-item.js.map +1 -1
  14. package/dist/menu.js +161 -73
  15. package/dist/menu.js.map +1 -1
  16. package/dist/src/flow/flow.d.ts +102 -0
  17. package/dist/src/flow/index.d.ts +2 -0
  18. package/dist/src/index.d.ts +3 -4
  19. package/dist/src/menu/menu/menu.d.ts +10 -9
  20. package/dist/src/menu/menu-item/menu-item.d.ts +1 -3
  21. package/dist/src/timeline/index.d.ts +2 -0
  22. package/dist/src/timeline/timeline-item.d.ts +23 -0
  23. package/dist/src/timeline/timeline.d.ts +26 -0
  24. package/dist/sub-menu.js +28 -1
  25. package/dist/sub-menu.js.map +1 -1
  26. package/dist/timeline-item.js +163 -0
  27. package/dist/timeline-item.js.map +1 -0
  28. package/dist/timeline.js +52 -0
  29. package/dist/timeline.js.map +1 -0
  30. package/dist/tsconfig.tsbuildinfo +1 -1
  31. package/package.json +3 -2
  32. package/readme.md +2 -2
  33. package/src/code-highlighter/code-highlighter.scss +1 -7
  34. package/src/elevation/demo/index.html +52 -0
  35. package/src/elevation/elevation.scss +52 -5
  36. package/src/elevation/elevation.ts +8 -1
  37. package/src/flow/flow.scss +195 -0
  38. package/src/flow/flow.ts +683 -0
  39. package/src/flow/index.ts +2 -0
  40. package/src/index.ts +3 -16
  41. package/src/loader.ts +10 -9
  42. package/src/menu/menu/copy-component-files.mjs +47 -0
  43. package/src/menu/menu/menu.scss +55 -17
  44. package/src/menu/menu/menu.ts +155 -84
  45. package/src/menu/menu-item/menu-item-colors.scss +3 -3
  46. package/src/menu/menu-item/menu-item.scss +118 -24
  47. package/src/menu/menu-item/menu-item.ts +61 -55
  48. package/src/menu/sub-menu/sub-menu.scss +30 -1
  49. package/src/timeline/index.ts +2 -0
  50. package/src/timeline/timeline-item.scss +98 -0
  51. package/src/timeline/timeline-item.ts +63 -0
  52. package/src/timeline/timeline.scss +11 -0
  53. package/src/timeline/timeline.ts +41 -0
  54. package/dist/canvas.js +0 -385
  55. package/dist/canvas.js.map +0 -1
  56. package/dist/flow-designer-node-CGSm6cUH.js +0 -553
  57. package/dist/flow-designer-node-CGSm6cUH.js.map +0 -1
  58. package/dist/flow-designer-node.js +0 -4
  59. package/dist/flow-designer-node.js.map +0 -1
  60. package/dist/flow-designer.js +0 -1417
  61. package/dist/flow-designer.js.map +0 -1
  62. package/dist/src/canvas/canvas.d.ts +0 -92
  63. package/dist/src/canvas/index.d.ts +0 -2
  64. package/dist/src/flow-designer/commands.d.ts +0 -66
  65. package/dist/src/flow-designer/flow-designer-node.d.ts +0 -46
  66. package/dist/src/flow-designer/flow-designer.d.ts +0 -133
  67. package/dist/src/flow-designer/index.d.ts +0 -7
  68. package/dist/src/flow-designer/layout.d.ts +0 -30
  69. package/dist/src/flow-designer/types.d.ts +0 -142
  70. package/dist/src/flow-designer/validation.d.ts +0 -43
  71. package/dist/src/flow-designer/workflow-utils.d.ts +0 -40
  72. package/src/canvas/canvas.scss +0 -72
  73. package/src/canvas/canvas.ts +0 -413
  74. package/src/canvas/index.ts +0 -2
  75. package/src/flow-designer/DEMO.md +0 -239
  76. package/src/flow-designer/commands.ts +0 -278
  77. package/src/flow-designer/flow-designer-node.ts +0 -172
  78. package/src/flow-designer/flow-designer.scss +0 -457
  79. package/src/flow-designer/flow-designer.ts +0 -611
  80. package/src/flow-designer/index.ts +0 -41
  81. package/src/flow-designer/layout.ts +0 -357
  82. package/src/flow-designer/types.ts +0 -166
  83. package/src/flow-designer/validation.ts +0 -284
  84. package/src/flow-designer/workflow-utils.ts +0 -282
  85. /package/dist/test/{flow-designer.test.d.ts → elevation.test.d.ts} +0 -0
package/dist/canvas.js DELETED
@@ -1,385 +0,0 @@
1
- import { i, _ as __decorate, I as IndividualComponent, a as i$1, A, w, b } from './IndividualComponent-Bdwyrvd6.js';
2
- import { n } from './property-B49QQ8pS.js';
3
- import { e } from './class-map-DG7CA1et.js';
4
- import './directive-ZPhl09Yt.js';
5
-
6
- var css_248z = i`* {
7
- box-sizing: border-box;
8
- -webkit-tap-highlight-color: transparent;
9
- }
10
-
11
- .screen-reader-only {
12
- display: none !important;
13
- }
14
-
15
- [hidden] {
16
- display: none !important;
17
- }
18
-
19
- :host {
20
- display: block;
21
- --canvas-background: var(--color-surface-container-low);
22
- --canvas-dot-color: var(--color-outline-variant);
23
- --canvas-line-color: var(--color-on-surface);
24
- --canvas-hover-color: var(--color-primary);
25
- --canvas-arrow-color: var(--color-on-surface);
26
- }
27
-
28
- .canvas-wrapper {
29
- position: relative;
30
- background: var(--canvas-background);
31
- }
32
-
33
- .canvas {
34
- display: block;
35
- }
36
-
37
- .canvas-background,
38
- .canvas-shapes {
39
- position: absolute;
40
- inset: 0;
41
- }
42
-
43
- .canvas-background {
44
- pointer-events: none;
45
- }
46
-
47
- #canvas-background circle {
48
- fill: var(--canvas-dot-color);
49
- }
50
-
51
- #endarrow polyline {
52
- fill: none;
53
- stroke: context-stroke;
54
- vector-effect: non-scaling-stroke;
55
- stroke-width: 2;
56
- stroke-linejoin: round;
57
- stroke-linecap: round;
58
- }
59
-
60
- .line.variant-dashed {
61
- stroke-dasharray: 6 6;
62
- }
63
- .line.variant-animated-dashed {
64
- animation: canvas-dash-flow 600ms linear infinite;
65
- }
66
-
67
- .clickable {
68
- cursor: pointer;
69
- }
70
- .clickable:hover .line {
71
- stroke: var(--canvas-hover-color);
72
- }
73
-
74
- .line.clickable:hover {
75
- stroke: var(--canvas-hover-color);
76
- }
77
-
78
- @keyframes canvas-dash-flow {
79
- to {
80
- stroke-dashoffset: -12;
81
- }
82
- }`;
83
-
84
- var Canvas_1;
85
- const GRID_GAP = 10;
86
- const GRID_DOT_RADIUS = 1;
87
- /**
88
- * @label Canvas
89
- * @tag wc-canvas
90
- * @rawTag canvas
91
- * @summary A SVG canvas for drawing shapes, lines, and connectors on a dotted grid.
92
- *
93
- * @cssprop --canvas-background - Background color for the canvas wrapper. Defaults to surface-container-low.
94
- * @cssprop --canvas-dot-color - Color of the background grid dots. Defaults to outline-variant.
95
- * @cssprop --canvas-line-color - Default stroke color for lines and connectors. Defaults to on-surface.
96
- * @cssprop --canvas-hover-color - Stroke color on hover for clickable shapes. Defaults to primary.
97
- * @cssprop --canvas-arrow-color - Stroke color for arrow markers. Defaults to on-surface.
98
- *
99
- * @example
100
- * ```html
101
- * <wc-canvas id="my-canvas"></wc-canvas>
102
- * <script>
103
- * document.querySelector('#my-canvas').shapes = [
104
- * { type: 'circle', x: 0, y: 0, radius: 0.25, color: 'red' },
105
- * ];
106
- * </script>
107
- * ```
108
- */
109
- let Canvas = Canvas_1 = class Canvas extends i$1 {
110
- constructor() {
111
- super(...arguments);
112
- /**
113
- * Array of shape objects to render on the canvas.
114
- */
115
- this.shapes = [];
116
- /**
117
- * Padding around the computed viewbox (in grid units).
118
- */
119
- this.padding = 1;
120
- /**
121
- * Zoom multiplier for the canvas dimensions.
122
- */
123
- this.zoom = 1;
124
- }
125
- static getNextPoint(point, direction, length) {
126
- if (direction === 'down')
127
- return { x: point.x, y: point.y + length };
128
- if (direction === 'up')
129
- return { x: point.x, y: point.y - length };
130
- if (direction === 'left')
131
- return { x: point.x - length, y: point.y };
132
- if (direction === 'right')
133
- return { x: point.x + length, y: point.y };
134
- return { x: point.x, y: point.y };
135
- }
136
- static updateExtents(extents, x, y) {
137
- if (x < extents.minX)
138
- extents.minX = x;
139
- if (x > extents.maxX)
140
- extents.maxX = x;
141
- if (y < extents.minY)
142
- extents.minY = y;
143
- if (y > extents.maxY)
144
- extents.maxY = y;
145
- }
146
- static getStrokeVariantClasses(variant) {
147
- return {
148
- line: true,
149
- 'variant-dashed': variant === 'dashed' || variant === 'animated-dashed',
150
- 'variant-animated-dashed': variant === 'animated-dashed',
151
- };
152
- }
153
- computeShapes(initialBounds) {
154
- // Track world-space bounds (grid units) as shapes are processed.
155
- const extents = {
156
- minX: initialBounds.x,
157
- minY: initialBounds.y,
158
- maxX: initialBounds.x + initialBounds.width,
159
- maxY: initialBounds.y + initialBounds.height,
160
- };
161
- const shapes = this.shapes.map(shape => {
162
- switch (shape.type) {
163
- case 'circle': {
164
- const r = shape.radius || 1;
165
- const cx = shape.x || 0;
166
- const cy = shape.y || 0;
167
- Canvas_1.updateExtents(extents, cx - r, cy - r);
168
- Canvas_1.updateExtents(extents, cx + r, cy + r);
169
- // Convert from grid units to SVG pixels using the fixed gap.
170
- return w `<circle
171
- cx=${cx * GRID_GAP + GRID_DOT_RADIUS}
172
- cy=${cy * GRID_GAP + GRID_DOT_RADIUS}
173
- r=${r * GRID_GAP}
174
- fill=${shape.color || 'var(--canvas-line-color, var(--color-on-surface))'}
175
- />`;
176
- }
177
- case 'rect': {
178
- const w$1 = shape.width || 1;
179
- const h = shape.height || 1;
180
- const rx = shape.x || 0;
181
- const ry = shape.y || 0;
182
- Canvas_1.updateExtents(extents, rx, ry);
183
- Canvas_1.updateExtents(extents, rx + w$1, ry + h);
184
- return w `<rect
185
- x=${rx * GRID_GAP + GRID_DOT_RADIUS}
186
- y=${ry * GRID_GAP}
187
- width=${w$1 * GRID_GAP + GRID_DOT_RADIUS}
188
- height=${h * GRID_GAP + GRID_DOT_RADIUS}
189
- fill=${shape.color || 'var(--canvas-line-color, var(--color-on-surface))'}
190
- />`;
191
- }
192
- case 'line': {
193
- const start = shape.start || { x: 0, y: 0 };
194
- const end = shape.end || { x: 0, y: 0 };
195
- Canvas_1.updateExtents(extents, start.x, start.y);
196
- Canvas_1.updateExtents(extents, end.x, end.y);
197
- const pathString = `M${start.x * GRID_GAP + GRID_DOT_RADIUS} ${start.y * GRID_GAP + GRID_DOT_RADIUS} L${end.x * GRID_GAP + GRID_DOT_RADIUS} ${end.y * GRID_GAP + GRID_DOT_RADIUS}`;
198
- const strokeColor = shape.color ||
199
- 'var(--canvas-line-color, var(--color-on-surface))';
200
- return w `<path
201
- class=${e({
202
- ...Canvas_1.getStrokeVariantClasses(shape.variant),
203
- clickable: !!shape.clickable,
204
- })}
205
- stroke-width="2"
206
- stroke-linecap="round"
207
- stroke-linejoin="round"
208
- stroke=${strokeColor}
209
- marker-end=${shape.showArrow ? 'url(#endarrow)' : ''}
210
- d=${pathString}
211
- stroke-dasharray=${shape.variant === 'dashed' || shape.variant === 'animated-dashed' ? '6,6' : A}
212
- fill="none"
213
- />`;
214
- }
215
- case 'connector': {
216
- const start = shape.start || { x: 0, y: 0 };
217
- let pathString = `M${start.x * GRID_GAP + GRID_DOT_RADIUS} ${start.y * GRID_GAP + GRID_DOT_RADIUS}`;
218
- let current = { ...start };
219
- Canvas_1.updateExtents(extents, current.x, current.y);
220
- const pathSegments = shape.path || [];
221
- for (let i = 0; i < pathSegments.length; i += 1) {
222
- const path = pathSegments[i];
223
- if (i === 0) {
224
- // Move one unit first so curved corner joins don't overlap start.
225
- const point = Canvas_1.getNextPoint(current, path.direction, 1);
226
- pathString += ` L${point.x * GRID_GAP + GRID_DOT_RADIUS} ${point.y * GRID_GAP + GRID_DOT_RADIUS}`;
227
- current = { ...point };
228
- Canvas_1.updateExtents(extents, current.x, current.y);
229
- }
230
- const point = Canvas_1.getNextPoint(current, path.direction, path.length - 2);
231
- pathString += ` L${point.x * GRID_GAP + GRID_DOT_RADIUS} ${point.y * GRID_GAP + GRID_DOT_RADIUS}`;
232
- current = { ...point };
233
- Canvas_1.updateExtents(extents, current.x, current.y);
234
- if (i === pathSegments.length - 1) {
235
- const endPoint = Canvas_1.getNextPoint(current, path.direction, 1);
236
- pathString += ` L${endPoint.x * GRID_GAP + GRID_DOT_RADIUS} ${endPoint.y * GRID_GAP + GRID_DOT_RADIUS}`;
237
- current = { ...endPoint };
238
- Canvas_1.updateExtents(extents, current.x, current.y);
239
- }
240
- else {
241
- const nextPath = pathSegments[i + 1];
242
- const midPoint = Canvas_1.getNextPoint(current, path.direction, 1);
243
- Canvas_1.updateExtents(extents, midPoint.x, midPoint.y);
244
- const nextPoint = Canvas_1.getNextPoint(midPoint, nextPath.direction, 1);
245
- // Use a quadratic segment to round corners between directions.
246
- pathString += ` Q ${midPoint.x * GRID_GAP + GRID_DOT_RADIUS} ${midPoint.y * GRID_GAP + GRID_DOT_RADIUS} ${nextPoint.x * GRID_GAP + GRID_DOT_RADIUS} ${nextPoint.y * GRID_GAP + GRID_DOT_RADIUS}`;
247
- current = { ...nextPoint };
248
- Canvas_1.updateExtents(extents, current.x, current.y);
249
- }
250
- }
251
- const strokeColor = shape.color ||
252
- 'var(--canvas-line-color, var(--color-on-surface))';
253
- return w `<g class=${e({ clickable: !!shape.clickable })}>
254
- <path
255
- class=${e({
256
- ...Canvas_1.getStrokeVariantClasses(shape.variant),
257
- })}
258
- stroke-width="2"
259
- stroke-linecap="round"
260
- stroke-linejoin="round"
261
- stroke=${strokeColor}
262
- marker-end=${shape.showArrow ? 'url(#endarrow)' : ''}
263
- d=${pathString}
264
- stroke-dasharray=${shape.variant === 'dashed' || shape.variant === 'animated-dashed' ? '6,6' : A}
265
- fill="none"
266
- />
267
- <path
268
- stroke-width="10"
269
- stroke-linecap="round"
270
- stroke-linejoin="round"
271
- stroke="transparent"
272
- d=${pathString}
273
- fill="none"
274
- />
275
- </g>`;
276
- }
277
- default:
278
- return A;
279
- }
280
- });
281
- // Expand bounds with padding so shapes are not flush to the edge.
282
- const computedViewbox = {
283
- x: extents.minX - this.padding,
284
- y: extents.minY - this.padding,
285
- width: Math.max(extents.maxX - extents.minX + this.padding * 2, 0),
286
- height: Math.max(extents.maxY - extents.minY + this.padding * 2, 0),
287
- };
288
- return { shapes, computedViewbox };
289
- }
290
- renderBackgroundSvg(computedViewBox, svgViewBox) {
291
- return b `
292
- <svg
293
- class="canvas canvas-background"
294
- height="100%"
295
- width="100%"
296
- viewBox=${svgViewBox}
297
- aria-hidden="true"
298
- >
299
- <defs>
300
- <pattern
301
- id="canvas-background"
302
- patternUnits="userSpaceOnUse"
303
- width=${GRID_GAP}
304
- height=${GRID_GAP}
305
- >
306
- <circle cx="1" cy="1" r=${GRID_DOT_RADIUS} />
307
- </pattern>
308
- </defs>
309
-
310
- <rect
311
- x=${computedViewBox.x * GRID_GAP}
312
- y=${computedViewBox.y * GRID_GAP}
313
- width="100%"
314
- height="100%"
315
- fill="url(#canvas-background)"
316
- />
317
- </svg>
318
- `;
319
- }
320
- renderShapesSvg(shapes, svgViewBox) {
321
- return b `
322
- <svg
323
- class="canvas canvas-shapes"
324
- height="100%"
325
- width="100%"
326
- viewBox=${svgViewBox}
327
- >
328
- <defs>
329
- <marker id="endarrow" markerWidth="10" markerHeight="10" refX="5" refY="5" markerUnits="strokeWidth" orient="auto">
330
- <polyline points="0 2, 5 5, 0 8"></polyline>
331
- </marker>
332
- </defs>
333
-
334
- ${shapes}
335
- </svg>
336
- `;
337
- }
338
- render() {
339
- let computedViewBox = { width: 0, height: 0, x: 0, y: 0 };
340
- const { shapes, computedViewbox } = this.computeShapes(computedViewBox);
341
- computedViewBox = computedViewbox;
342
- if (this.viewbox) {
343
- const viewBox = this.viewbox.split(' ');
344
- computedViewBox = {
345
- x: parseInt(viewBox[0], 10),
346
- y: parseInt(viewBox[1], 10),
347
- width: parseInt(viewBox[2], 10),
348
- height: parseInt(viewBox[3], 10),
349
- };
350
- }
351
- // Zoom scales the outer viewport size while the SVG viewBox stays in world units.
352
- const wrapperWidth = (computedViewBox.width * GRID_GAP + 2) * GRID_DOT_RADIUS * this.zoom;
353
- const wrapperHeight = (computedViewBox.height * GRID_GAP + 2) * GRID_DOT_RADIUS * this.zoom;
354
- // viewBox maps world-space extents into the internal SVG coordinate system.
355
- const svgViewBox = `${computedViewBox.x * GRID_GAP} ${computedViewBox.y * GRID_GAP} ${computedViewBox.width * GRID_GAP + 2 * GRID_DOT_RADIUS} ${computedViewBox.height * GRID_GAP + 2 * GRID_DOT_RADIUS}`;
356
- return b `
357
- <div
358
- class="canvas-wrapper"
359
- style="width: ${wrapperWidth}px; height: ${wrapperHeight}px;"
360
- >
361
- ${this.renderBackgroundSvg(computedViewBox, svgViewBox)}
362
- ${this.renderShapesSvg(shapes, svgViewBox)}
363
- </div>
364
- `;
365
- }
366
- };
367
- Canvas.styles = [css_248z];
368
- __decorate([
369
- n({ type: Array })
370
- ], Canvas.prototype, "shapes", void 0);
371
- __decorate([
372
- n({ type: Number, reflect: true })
373
- ], Canvas.prototype, "padding", void 0);
374
- __decorate([
375
- n({ type: Number, reflect: true })
376
- ], Canvas.prototype, "zoom", void 0);
377
- __decorate([
378
- n({ type: String })
379
- ], Canvas.prototype, "viewbox", void 0);
380
- Canvas = Canvas_1 = __decorate([
381
- IndividualComponent
382
- ], Canvas);
383
-
384
- export { Canvas };
385
- //# sourceMappingURL=canvas.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"canvas.js","sources":["../../src/canvas/canvas.ts"],"sourcesContent":["import { html, LitElement, svg, nothing } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport IndividualComponent from '@/IndividualComponent.js';\nimport styles from './canvas.scss';\n\nexport type CanvasDirection = 'up' | 'down' | 'left' | 'right';\n\nexport type CanvasStrokeVariant = 'solid' | 'dashed' | 'animated-dashed';\n\nexport interface CanvasPoint {\n x: number;\n y: number;\n}\n\nexport interface CanvasPathSegment {\n direction: CanvasDirection;\n length: number;\n}\n\ninterface BaseCanvasShape {\n color?: string;\n}\n\ninterface BaseCanvasStrokeShape extends BaseCanvasShape {\n variant?: CanvasStrokeVariant;\n showArrow?: boolean;\n clickable?: boolean;\n}\n\nexport interface CanvasCircleShape extends BaseCanvasShape {\n type: 'circle';\n x?: number;\n y?: number;\n radius?: number;\n}\n\nexport interface CanvasRectShape extends BaseCanvasShape {\n type: 'rect';\n x?: number;\n y?: number;\n width?: number;\n height?: number;\n}\n\nexport interface CanvasLineShape extends BaseCanvasStrokeShape {\n type: 'line';\n start?: CanvasPoint;\n end?: CanvasPoint;\n}\n\nexport interface CanvasConnectorShape extends BaseCanvasStrokeShape {\n type: 'connector';\n start?: CanvasPoint;\n path?: CanvasPathSegment[];\n}\n\nexport type CanvasShape =\n | CanvasCircleShape\n | CanvasRectShape\n | CanvasLineShape\n | CanvasConnectorShape;\n\nconst GRID_GAP = 10;\nconst GRID_DOT_RADIUS = 1;\n\ninterface CanvasBounds {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\ninterface CanvasExtents {\n minX: number;\n minY: number;\n maxX: number;\n maxY: number;\n}\n\ninterface CanvasViewBox {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\n/**\n * @label Canvas\n * @tag wc-canvas\n * @rawTag canvas\n * @summary A SVG canvas for drawing shapes, lines, and connectors on a dotted grid.\n *\n * @cssprop --canvas-background - Background color for the canvas wrapper. Defaults to surface-container-low.\n * @cssprop --canvas-dot-color - Color of the background grid dots. Defaults to outline-variant.\n * @cssprop --canvas-line-color - Default stroke color for lines and connectors. Defaults to on-surface.\n * @cssprop --canvas-hover-color - Stroke color on hover for clickable shapes. Defaults to primary.\n * @cssprop --canvas-arrow-color - Stroke color for arrow markers. Defaults to on-surface.\n *\n * @example\n * ```html\n * <wc-canvas id=\"my-canvas\"></wc-canvas>\n * <script>\n * document.querySelector('#my-canvas').shapes = [\n * { type: 'circle', x: 0, y: 0, radius: 0.25, color: 'red' },\n * ];\n * </script>\n * ```\n */\n@IndividualComponent\nexport class Canvas extends LitElement {\n static styles = [styles];\n\n /**\n * Array of shape objects to render on the canvas.\n */\n @property({ type: Array })\n shapes: CanvasShape[] = [];\n\n /**\n * Padding around the computed viewbox (in grid units).\n */\n @property({ type: Number, reflect: true })\n padding: number = 1;\n\n /**\n * Zoom multiplier for the canvas dimensions.\n */\n @property({ type: Number, reflect: true })\n zoom: number = 1;\n\n /**\n * Optional viewbox override string (e.g. \"0 0 100 100\").\n */\n @property({ type: String })\n viewbox?: string;\n\n private static getNextPoint(\n point: CanvasPoint,\n direction: CanvasDirection,\n length: number,\n ): CanvasPoint {\n if (direction === 'down') return { x: point.x, y: point.y + length };\n if (direction === 'up') return { x: point.x, y: point.y - length };\n if (direction === 'left') return { x: point.x - length, y: point.y };\n if (direction === 'right') return { x: point.x + length, y: point.y };\n return { x: point.x, y: point.y };\n }\n\n private static updateExtents(\n extents: CanvasExtents,\n x: number,\n y: number,\n ) {\n if (x < extents.minX) extents.minX = x;\n if (x > extents.maxX) extents.maxX = x;\n if (y < extents.minY) extents.minY = y;\n if (y > extents.maxY) extents.maxY = y;\n }\n\n private static getStrokeVariantClasses(variant?: CanvasStrokeVariant) {\n return {\n line: true,\n 'variant-dashed': variant === 'dashed' || variant === 'animated-dashed',\n 'variant-animated-dashed': variant === 'animated-dashed',\n };\n }\n\n private computeShapes(initialBounds: CanvasBounds) {\n // Track world-space bounds (grid units) as shapes are processed.\n const extents: CanvasExtents = {\n minX: initialBounds.x,\n minY: initialBounds.y,\n maxX: initialBounds.x + initialBounds.width,\n maxY: initialBounds.y + initialBounds.height,\n };\n\n const shapes = this.shapes.map(shape => {\n switch (shape.type) {\n case 'circle': {\n const r = shape.radius || 1;\n const cx = shape.x || 0;\n const cy = shape.y || 0;\n Canvas.updateExtents(extents, cx - r, cy - r);\n Canvas.updateExtents(extents, cx + r, cy + r);\n\n // Convert from grid units to SVG pixels using the fixed gap.\n return svg`<circle\n cx=${cx * GRID_GAP + GRID_DOT_RADIUS}\n cy=${cy * GRID_GAP + GRID_DOT_RADIUS}\n r=${r * GRID_GAP}\n fill=${shape.color || 'var(--canvas-line-color, var(--color-on-surface))'}\n />`;\n }\n case 'rect': {\n const w = shape.width || 1;\n const h = shape.height || 1;\n const rx = shape.x || 0;\n const ry = shape.y || 0;\n Canvas.updateExtents(extents, rx, ry);\n Canvas.updateExtents(extents, rx + w, ry + h);\n\n return svg`<rect\n x=${rx * GRID_GAP + GRID_DOT_RADIUS}\n y=${ry * GRID_GAP}\n width=${w * GRID_GAP + GRID_DOT_RADIUS}\n height=${h * GRID_GAP + GRID_DOT_RADIUS}\n fill=${shape.color || 'var(--canvas-line-color, var(--color-on-surface))'}\n />`;\n }\n case 'line': {\n const start = shape.start || { x: 0, y: 0 };\n const end = shape.end || { x: 0, y: 0 };\n Canvas.updateExtents(extents, start.x, start.y);\n Canvas.updateExtents(extents, end.x, end.y);\n const pathString = `M${start.x * GRID_GAP + GRID_DOT_RADIUS} ${start.y * GRID_GAP + GRID_DOT_RADIUS} L${end.x * GRID_GAP + GRID_DOT_RADIUS} ${end.y * GRID_GAP + GRID_DOT_RADIUS}`;\n const strokeColor =\n shape.color ||\n 'var(--canvas-line-color, var(--color-on-surface))';\n\n return svg`<path\n class=${classMap({\n ...Canvas.getStrokeVariantClasses(shape.variant),\n clickable: !!shape.clickable,\n })}\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke=${strokeColor}\n marker-end=${shape.showArrow ? 'url(#endarrow)' : ''}\n d=${pathString}\n stroke-dasharray=${shape.variant === 'dashed' || shape.variant === 'animated-dashed' ? '6,6' : nothing}\n fill=\"none\"\n />`;\n }\n case 'connector': {\n const start = shape.start || { x: 0, y: 0 };\n let pathString = `M${start.x * GRID_GAP + GRID_DOT_RADIUS} ${start.y * GRID_GAP + GRID_DOT_RADIUS}`;\n let current = { ...start };\n Canvas.updateExtents(extents, current.x, current.y);\n\n const pathSegments = shape.path || [];\n for (let i = 0; i < pathSegments.length; i += 1) {\n const path = pathSegments[i];\n\n if (i === 0) {\n // Move one unit first so curved corner joins don't overlap start.\n const point = Canvas.getNextPoint(current, path.direction, 1);\n pathString += ` L${point.x * GRID_GAP + GRID_DOT_RADIUS} ${point.y * GRID_GAP + GRID_DOT_RADIUS}`;\n current = { ...point };\n Canvas.updateExtents(extents, current.x, current.y);\n }\n\n const point = Canvas.getNextPoint(\n current,\n path.direction,\n path.length - 2,\n );\n pathString += ` L${point.x * GRID_GAP + GRID_DOT_RADIUS} ${point.y * GRID_GAP + GRID_DOT_RADIUS}`;\n current = { ...point };\n Canvas.updateExtents(extents, current.x, current.y);\n\n if (i === pathSegments.length - 1) {\n const endPoint = Canvas.getNextPoint(current, path.direction, 1);\n pathString += ` L${endPoint.x * GRID_GAP + GRID_DOT_RADIUS} ${endPoint.y * GRID_GAP + GRID_DOT_RADIUS}`;\n current = { ...endPoint };\n Canvas.updateExtents(extents, current.x, current.y);\n } else {\n const nextPath = pathSegments[i + 1];\n const midPoint = Canvas.getNextPoint(current, path.direction, 1);\n Canvas.updateExtents(extents, midPoint.x, midPoint.y);\n const nextPoint = Canvas.getNextPoint(\n midPoint,\n nextPath.direction,\n 1,\n );\n // Use a quadratic segment to round corners between directions.\n pathString += ` Q ${midPoint.x * GRID_GAP + GRID_DOT_RADIUS} ${midPoint.y * GRID_GAP + GRID_DOT_RADIUS} ${nextPoint.x * GRID_GAP + GRID_DOT_RADIUS} ${nextPoint.y * GRID_GAP + GRID_DOT_RADIUS}`;\n current = { ...nextPoint };\n Canvas.updateExtents(extents, current.x, current.y);\n }\n }\n\n const strokeColor =\n shape.color ||\n 'var(--canvas-line-color, var(--color-on-surface))';\n\n return svg`<g class=${classMap({ clickable: !!shape.clickable })}>\n <path\n class=${classMap({\n ...Canvas.getStrokeVariantClasses(shape.variant),\n })}\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke=${strokeColor}\n marker-end=${shape.showArrow ? 'url(#endarrow)' : ''}\n d=${pathString}\n stroke-dasharray=${shape.variant === 'dashed' || shape.variant === 'animated-dashed' ? '6,6' : nothing}\n fill=\"none\"\n />\n <path\n stroke-width=\"10\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke=\"transparent\"\n d=${pathString}\n fill=\"none\"\n />\n </g>`;\n }\n default:\n return nothing;\n }\n });\n\n // Expand bounds with padding so shapes are not flush to the edge.\n const computedViewbox = {\n x: extents.minX - this.padding,\n y: extents.minY - this.padding,\n width: Math.max(extents.maxX - extents.minX + this.padding * 2, 0),\n height: Math.max(extents.maxY - extents.minY + this.padding * 2, 0),\n };\n\n return { shapes, computedViewbox };\n }\n\n private renderBackgroundSvg(computedViewBox: CanvasViewBox, svgViewBox: string) {\n return html`\n <svg\n class=\"canvas canvas-background\"\n height=\"100%\"\n width=\"100%\"\n viewBox=${svgViewBox}\n aria-hidden=\"true\"\n >\n <defs>\n <pattern\n id=\"canvas-background\"\n patternUnits=\"userSpaceOnUse\"\n width=${GRID_GAP}\n height=${GRID_GAP}\n >\n <circle cx=\"1\" cy=\"1\" r=${GRID_DOT_RADIUS} />\n </pattern>\n </defs>\n\n <rect\n x=${computedViewBox.x * GRID_GAP}\n y=${computedViewBox.y * GRID_GAP}\n width=\"100%\"\n height=\"100%\"\n fill=\"url(#canvas-background)\"\n />\n </svg>\n `;\n }\n\n private renderShapesSvg(shapes: unknown[], svgViewBox: string) {\n return html`\n <svg\n class=\"canvas canvas-shapes\"\n height=\"100%\"\n width=\"100%\"\n viewBox=${svgViewBox}\n >\n <defs>\n <marker id=\"endarrow\" markerWidth=\"10\" markerHeight=\"10\" refX=\"5\" refY=\"5\" markerUnits=\"strokeWidth\" orient=\"auto\">\n <polyline points=\"0 2, 5 5, 0 8\"></polyline>\n </marker>\n </defs>\n\n ${shapes}\n </svg>\n `;\n }\n\n protected render() {\n let computedViewBox = { width: 0, height: 0, x: 0, y: 0 };\n\n const { shapes, computedViewbox } = this.computeShapes(computedViewBox);\n computedViewBox = computedViewbox;\n\n if (this.viewbox) {\n const viewBox = this.viewbox.split(' ');\n computedViewBox = {\n x: parseInt(viewBox[0], 10),\n y: parseInt(viewBox[1], 10),\n width: parseInt(viewBox[2], 10),\n height: parseInt(viewBox[3], 10),\n };\n }\n\n // Zoom scales the outer viewport size while the SVG viewBox stays in world units.\n const wrapperWidth =\n (computedViewBox.width * GRID_GAP + 2) * GRID_DOT_RADIUS * this.zoom;\n const wrapperHeight =\n (computedViewBox.height * GRID_GAP + 2) * GRID_DOT_RADIUS * this.zoom;\n\n // viewBox maps world-space extents into the internal SVG coordinate system.\n const svgViewBox = `${computedViewBox.x * GRID_GAP} ${computedViewBox.y * GRID_GAP} ${computedViewBox.width * GRID_GAP + 2 * GRID_DOT_RADIUS} ${computedViewBox.height * GRID_GAP + 2 * GRID_DOT_RADIUS}`;\n\n return html`\n <div\n class=\"canvas-wrapper\"\n style=\"width: ${wrapperWidth}px; height: ${wrapperHeight}px;\"\n >\n ${this.renderBackgroundSvg(computedViewBox, svgViewBox)}\n ${this.renderShapesSvg(shapes, svgViewBox)}\n </div>\n `;\n }\n}\n"],"names":["LitElement","svg","w","classMap","nothing","html","styles","property"],"mappings":"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"}