@infinit-canvas/react 0.1.16 → 0.1.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/styles.css CHANGED
@@ -47,6 +47,15 @@
47
47
  -webkit-user-select: auto;
48
48
  }
49
49
 
50
+ /* Pin button on DOM-promoted nodes */
51
+ .ric-pin-btn {
52
+ opacity: 0;
53
+ transition: opacity 0.15s;
54
+ }
55
+ .ric-node-wrapper:hover .ric-pin-btn {
56
+ opacity: 1;
57
+ }
58
+
50
59
  .ric-canvas {
51
60
  position: absolute;
52
61
  top: 0;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@infinit-canvas/react",
3
- "version": "0.1.16",
3
+ "version": "0.1.18",
4
4
  "description": "A performant infinite canvas React component powered by OffscreenCanvas and Web Workers",
5
5
  "type": "module",
6
6
  "main": "./dist/react-infinite-canvas.cjs",
package/src/types.d.ts CHANGED
@@ -243,6 +243,22 @@ export interface Card {
243
243
 
244
244
  // ─── Component Props ─────────────────────────────────────────────
245
245
 
246
+ export interface CanvasNodeConfig {
247
+ fill?: string;
248
+ stroke?: string;
249
+ strokeWidth?: number;
250
+ radius?: number;
251
+ shadow?: boolean;
252
+ shadowColor?: string;
253
+ shadowBlur?: number;
254
+ shadowOffsetY?: number;
255
+ accent?: { side?: 'left' | 'right' | 'top' | 'bottom'; width?: number; color?: string };
256
+ icon?: { dataField?: string; text?: string; x?: number; y?: number; size?: number; color?: string };
257
+ title?: { dataField?: string; text?: string; x?: number; y?: number; font?: string; color?: string; align?: string };
258
+ subtitle?: { dataField?: string; text?: string; x?: number; y?: number; font?: string; color?: string; align?: string };
259
+ badge?: { dataField?: string; text?: string; bg?: string; color?: string; font?: string; radius?: number; paddingX?: number; paddingY?: number };
260
+ }
261
+
246
262
  export interface InfiniteCanvasProps {
247
263
  // Data
248
264
  cards?: Card[];
@@ -252,8 +268,17 @@ export interface InfiniteCanvasProps {
252
268
  // Custom types
253
269
  nodeTypes?: NodeTypes;
254
270
  edgeTypes?: EdgeTypes;
255
- /** Canvas-rendered bitmaps per node type. Accepts SVG strings, HTMLImageElement, HTMLCanvasElement, or ImageBitmap. */
256
- canvasNodeTypes?: Record<string, string | ImageBitmap | HTMLImageElement | HTMLCanvasElement>;
271
+ /** Canvas-rendered custom nodes per type. Accepts:
272
+ * - SVG string: converted to ImageBitmap, drawn via drawImage
273
+ * - HTMLImageElement / HTMLCanvasElement / ImageBitmap: drawn via drawImage
274
+ * - Function `(data) => svgString`: per-node bitmap with caching
275
+ * - Config object: declarative style { fill, stroke, radius, accent, icon, title, subtitle, badge }
276
+ */
277
+ canvasNodeTypes?: Record<string, string | ImageBitmap | HTMLImageElement | HTMLCanvasElement | CanvasNodeConfig | ((data: Record<string, any>) => string)>;
278
+
279
+ /** Max custom nodes rendered as full DOM elements (pinned + selected + nearest visible).
280
+ * Remaining custom nodes render on canvas. Default: 50. Set 0 to disable. */
281
+ domNodeLimit?: number;
257
282
 
258
283
  // Appearance
259
284
  dark?: boolean;