canvu-react 0.4.62 → 0.4.63

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/react.d.cts CHANGED
@@ -169,6 +169,35 @@ type ImagesMenuLabels = {
169
169
  collapse?: string;
170
170
  expand?: string;
171
171
  };
172
+ /**
173
+ * Button props passed to {@link ImagesMenuCollapsedButtonRenderProps.buttonProps}.
174
+ *
175
+ * Use this when you build a fully custom collapsed trigger for
176
+ * {@link ImagesMenu}. Spreading these props onto a `<button>` preserves the
177
+ * default accessibility label, `data-slot`, styles/className, and click handler
178
+ * that opens the images menu.
179
+ */
180
+ type ImagesMenuCollapsedButtonProps = {
181
+ type: "button";
182
+ "data-slot": "images-menu-collapsed";
183
+ "aria-label": string;
184
+ title: string;
185
+ className?: string;
186
+ style: CSSProperties;
187
+ onClick: () => void;
188
+ };
189
+ type ImagesMenuCollapsedButtonRenderProps = {
190
+ /** Number of managed images currently available in the menu. */
191
+ count: number;
192
+ /** Accessible label used by the default collapsed trigger. */
193
+ label: string;
194
+ /**
195
+ * Props ready to spread onto a `<button>`.
196
+ * Spread these onto your custom trigger to keep the built-in accessibility
197
+ * label, `data-slot`, default styles/className, and open-menu behavior.
198
+ */
199
+ buttonProps: ImagesMenuCollapsedButtonProps;
200
+ };
172
201
  type ImagesMenuProps = {
173
202
  items: readonly VectorSceneItem[];
174
203
  onItemsChange: (items: VectorSceneItem[]) => void;
@@ -183,6 +212,49 @@ type ImagesMenuProps = {
183
212
  * only the floating toggle button until the user opens it.
184
213
  */
185
214
  defaultOpen?: boolean;
215
+ /**
216
+ * Class name applied to the collapsed floating trigger.
217
+ *
218
+ * @example
219
+ * ```tsx
220
+ * <ImagesMenu
221
+ * items={items}
222
+ * onItemsChange={setItems}
223
+ * collapsedButtonClassName="my-images-trigger"
224
+ * />
225
+ * ```
226
+ */
227
+ collapsedButtonClassName?: string;
228
+ /**
229
+ * Inline style merged over the default collapsed trigger style.
230
+ *
231
+ * @example
232
+ * ```tsx
233
+ * <ImagesMenu
234
+ * items={items}
235
+ * onItemsChange={setItems}
236
+ * collapsedButtonStyle={{ borderRadius: 999 }}
237
+ * />
238
+ * ```
239
+ */
240
+ collapsedButtonStyle?: CSSProperties;
241
+ /**
242
+ * Replaces the collapsed trigger markup. Prefer `collapsedButtonClassName`
243
+ * or `collapsedButtonStyle` for styling-only changes; use this when you need
244
+ * different content or structure.
245
+ *
246
+ * @example
247
+ * ```tsx
248
+ * <ImagesMenu
249
+ * items={items}
250
+ * onItemsChange={setItems}
251
+ * renderCollapsedButton={({ buttonProps, count }) => (
252
+ * <button {...buttonProps}>Images ({count})</button>
253
+ * )}
254
+ * />
255
+ * ```
256
+ */
257
+ renderCollapsedButton?: (props: ImagesMenuCollapsedButtonRenderProps) => ReactNode;
186
258
  };
187
259
  /**
188
260
  * Floating side panel that lists images marked as "managed"
@@ -190,7 +262,7 @@ type ImagesMenuProps = {
190
262
  * drag-to-reorder actions. Managed images are also `locked`, so they do not
191
263
  * respond to direct canvas interaction.
192
264
  */
193
- declare function ImagesMenu({ items, onItemsChange, onFocusItem, labels, defaultOpen, }: ImagesMenuProps): react_jsx_runtime.JSX.Element | null;
265
+ declare function ImagesMenu({ items, onItemsChange, onFocusItem, labels, defaultOpen, collapsedButtonClassName, collapsedButtonStyle, renderCollapsedButton, }: ImagesMenuProps): string | number | bigint | boolean | Iterable<ReactNode> | Promise<string | number | bigint | boolean | react.ReactPortal | react.ReactElement<unknown, string | react.JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | react_jsx_runtime.JSX.Element | null | undefined;
194
266
 
195
267
  type NavMenuMinimapProps = {
196
268
  className?: string;
@@ -731,4 +803,4 @@ type VectorToolbarWithStatics = ((props: VectorToolbarProps) => ReactElement) &
731
803
  */
732
804
  declare const VectorToolbar: VectorToolbarWithStatics;
733
805
 
734
- export { BoardComponentPosition, CanvasPlugin, type CreateLocalStoragePersistenceAdapterOptions, type CreateToolPluginOptions, CustomShapePlacementOptions, DEFAULT_OVERFLOW_TOOL_IDS, DEFAULT_VECTOR_CANVAS_STORAGE_KEY, DEFAULT_VECTOR_TOOLS, IconArchitecturalCloud, IconArrow, IconDraw, IconEllipse, IconHand, IconImage, IconLaser, IconLine, IconRect, IconSelect, IconText, ImagesMenu, type ImagesMenuLabels, type ImagesMenuProps, type IngestAssetFileError, type IngestAssetFilesToSceneItemsOptions, type IngestAssetFilesToSceneItemsResult, type IngestedAssetItemContext, NavMenu, type NavMenuMinimapProps, type NavMenuProps, type NavMenuUndoRedoProps, type NavMenuZoomControlsProps, ShapeContextMenu, type ShapeContextMenuProps, type UseVectorCanvasDocumentOptions, type UseVectorCanvasDocumentResult, VectorCanvas, VectorCanvasBody, VectorCanvasHeader, VectorCanvasMain, VectorCanvasPersistenceAdapter, VectorCanvasRemoteAdapter, VectorCanvasRoot, type VectorCanvasSlotProps, type VectorCanvasSpaceProps, VectorCanvasToolbar, type VectorCanvasToolbarProps, VectorCanvasViewportSurface, VectorSelectionInspector, VectorToolDefinition, VectorToolbar, type VectorToolbarOverflowProps, type VectorToolbarProps, type VectorToolbarRenderContext, type VectorToolbarToolLockProps, type VectorToolbarToolProps, VectorViewportAssetKind, VectorViewportAssetStore, createIndexedDbPersistenceAdapter, createLocalStoragePersistenceAdapter, createNoopPersistenceAdapter, createToolPlugin, cursorForVectorToolId, ingestAssetFilesToSceneItems, useVectorCanvasDocument };
806
+ export { BoardComponentPosition, CanvasPlugin, type CreateLocalStoragePersistenceAdapterOptions, type CreateToolPluginOptions, CustomShapePlacementOptions, DEFAULT_OVERFLOW_TOOL_IDS, DEFAULT_VECTOR_CANVAS_STORAGE_KEY, DEFAULT_VECTOR_TOOLS, IconArchitecturalCloud, IconArrow, IconDraw, IconEllipse, IconHand, IconImage, IconLaser, IconLine, IconRect, IconSelect, IconText, ImagesMenu, type ImagesMenuCollapsedButtonProps, type ImagesMenuCollapsedButtonRenderProps, type ImagesMenuLabels, type ImagesMenuProps, type IngestAssetFileError, type IngestAssetFilesToSceneItemsOptions, type IngestAssetFilesToSceneItemsResult, type IngestedAssetItemContext, NavMenu, type NavMenuMinimapProps, type NavMenuProps, type NavMenuUndoRedoProps, type NavMenuZoomControlsProps, ShapeContextMenu, type ShapeContextMenuProps, type UseVectorCanvasDocumentOptions, type UseVectorCanvasDocumentResult, VectorCanvas, VectorCanvasBody, VectorCanvasHeader, VectorCanvasMain, VectorCanvasPersistenceAdapter, VectorCanvasRemoteAdapter, VectorCanvasRoot, type VectorCanvasSlotProps, type VectorCanvasSpaceProps, VectorCanvasToolbar, type VectorCanvasToolbarProps, VectorCanvasViewportSurface, VectorSelectionInspector, VectorToolDefinition, VectorToolbar, type VectorToolbarOverflowProps, type VectorToolbarProps, type VectorToolbarRenderContext, type VectorToolbarToolLockProps, type VectorToolbarToolProps, VectorViewportAssetKind, VectorViewportAssetStore, createIndexedDbPersistenceAdapter, createLocalStoragePersistenceAdapter, createNoopPersistenceAdapter, createToolPlugin, cursorForVectorToolId, ingestAssetFilesToSceneItems, useVectorCanvasDocument };
package/dist/react.d.ts CHANGED
@@ -169,6 +169,35 @@ type ImagesMenuLabels = {
169
169
  collapse?: string;
170
170
  expand?: string;
171
171
  };
172
+ /**
173
+ * Button props passed to {@link ImagesMenuCollapsedButtonRenderProps.buttonProps}.
174
+ *
175
+ * Use this when you build a fully custom collapsed trigger for
176
+ * {@link ImagesMenu}. Spreading these props onto a `<button>` preserves the
177
+ * default accessibility label, `data-slot`, styles/className, and click handler
178
+ * that opens the images menu.
179
+ */
180
+ type ImagesMenuCollapsedButtonProps = {
181
+ type: "button";
182
+ "data-slot": "images-menu-collapsed";
183
+ "aria-label": string;
184
+ title: string;
185
+ className?: string;
186
+ style: CSSProperties;
187
+ onClick: () => void;
188
+ };
189
+ type ImagesMenuCollapsedButtonRenderProps = {
190
+ /** Number of managed images currently available in the menu. */
191
+ count: number;
192
+ /** Accessible label used by the default collapsed trigger. */
193
+ label: string;
194
+ /**
195
+ * Props ready to spread onto a `<button>`.
196
+ * Spread these onto your custom trigger to keep the built-in accessibility
197
+ * label, `data-slot`, default styles/className, and open-menu behavior.
198
+ */
199
+ buttonProps: ImagesMenuCollapsedButtonProps;
200
+ };
172
201
  type ImagesMenuProps = {
173
202
  items: readonly VectorSceneItem[];
174
203
  onItemsChange: (items: VectorSceneItem[]) => void;
@@ -183,6 +212,49 @@ type ImagesMenuProps = {
183
212
  * only the floating toggle button until the user opens it.
184
213
  */
185
214
  defaultOpen?: boolean;
215
+ /**
216
+ * Class name applied to the collapsed floating trigger.
217
+ *
218
+ * @example
219
+ * ```tsx
220
+ * <ImagesMenu
221
+ * items={items}
222
+ * onItemsChange={setItems}
223
+ * collapsedButtonClassName="my-images-trigger"
224
+ * />
225
+ * ```
226
+ */
227
+ collapsedButtonClassName?: string;
228
+ /**
229
+ * Inline style merged over the default collapsed trigger style.
230
+ *
231
+ * @example
232
+ * ```tsx
233
+ * <ImagesMenu
234
+ * items={items}
235
+ * onItemsChange={setItems}
236
+ * collapsedButtonStyle={{ borderRadius: 999 }}
237
+ * />
238
+ * ```
239
+ */
240
+ collapsedButtonStyle?: CSSProperties;
241
+ /**
242
+ * Replaces the collapsed trigger markup. Prefer `collapsedButtonClassName`
243
+ * or `collapsedButtonStyle` for styling-only changes; use this when you need
244
+ * different content or structure.
245
+ *
246
+ * @example
247
+ * ```tsx
248
+ * <ImagesMenu
249
+ * items={items}
250
+ * onItemsChange={setItems}
251
+ * renderCollapsedButton={({ buttonProps, count }) => (
252
+ * <button {...buttonProps}>Images ({count})</button>
253
+ * )}
254
+ * />
255
+ * ```
256
+ */
257
+ renderCollapsedButton?: (props: ImagesMenuCollapsedButtonRenderProps) => ReactNode;
186
258
  };
187
259
  /**
188
260
  * Floating side panel that lists images marked as "managed"
@@ -190,7 +262,7 @@ type ImagesMenuProps = {
190
262
  * drag-to-reorder actions. Managed images are also `locked`, so they do not
191
263
  * respond to direct canvas interaction.
192
264
  */
193
- declare function ImagesMenu({ items, onItemsChange, onFocusItem, labels, defaultOpen, }: ImagesMenuProps): react_jsx_runtime.JSX.Element | null;
265
+ declare function ImagesMenu({ items, onItemsChange, onFocusItem, labels, defaultOpen, collapsedButtonClassName, collapsedButtonStyle, renderCollapsedButton, }: ImagesMenuProps): string | number | bigint | boolean | Iterable<ReactNode> | Promise<string | number | bigint | boolean | react.ReactPortal | react.ReactElement<unknown, string | react.JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | react_jsx_runtime.JSX.Element | null | undefined;
194
266
 
195
267
  type NavMenuMinimapProps = {
196
268
  className?: string;
@@ -731,4 +803,4 @@ type VectorToolbarWithStatics = ((props: VectorToolbarProps) => ReactElement) &
731
803
  */
732
804
  declare const VectorToolbar: VectorToolbarWithStatics;
733
805
 
734
- export { BoardComponentPosition, CanvasPlugin, type CreateLocalStoragePersistenceAdapterOptions, type CreateToolPluginOptions, CustomShapePlacementOptions, DEFAULT_OVERFLOW_TOOL_IDS, DEFAULT_VECTOR_CANVAS_STORAGE_KEY, DEFAULT_VECTOR_TOOLS, IconArchitecturalCloud, IconArrow, IconDraw, IconEllipse, IconHand, IconImage, IconLaser, IconLine, IconRect, IconSelect, IconText, ImagesMenu, type ImagesMenuLabels, type ImagesMenuProps, type IngestAssetFileError, type IngestAssetFilesToSceneItemsOptions, type IngestAssetFilesToSceneItemsResult, type IngestedAssetItemContext, NavMenu, type NavMenuMinimapProps, type NavMenuProps, type NavMenuUndoRedoProps, type NavMenuZoomControlsProps, ShapeContextMenu, type ShapeContextMenuProps, type UseVectorCanvasDocumentOptions, type UseVectorCanvasDocumentResult, VectorCanvas, VectorCanvasBody, VectorCanvasHeader, VectorCanvasMain, VectorCanvasPersistenceAdapter, VectorCanvasRemoteAdapter, VectorCanvasRoot, type VectorCanvasSlotProps, type VectorCanvasSpaceProps, VectorCanvasToolbar, type VectorCanvasToolbarProps, VectorCanvasViewportSurface, VectorSelectionInspector, VectorToolDefinition, VectorToolbar, type VectorToolbarOverflowProps, type VectorToolbarProps, type VectorToolbarRenderContext, type VectorToolbarToolLockProps, type VectorToolbarToolProps, VectorViewportAssetKind, VectorViewportAssetStore, createIndexedDbPersistenceAdapter, createLocalStoragePersistenceAdapter, createNoopPersistenceAdapter, createToolPlugin, cursorForVectorToolId, ingestAssetFilesToSceneItems, useVectorCanvasDocument };
806
+ export { BoardComponentPosition, CanvasPlugin, type CreateLocalStoragePersistenceAdapterOptions, type CreateToolPluginOptions, CustomShapePlacementOptions, DEFAULT_OVERFLOW_TOOL_IDS, DEFAULT_VECTOR_CANVAS_STORAGE_KEY, DEFAULT_VECTOR_TOOLS, IconArchitecturalCloud, IconArrow, IconDraw, IconEllipse, IconHand, IconImage, IconLaser, IconLine, IconRect, IconSelect, IconText, ImagesMenu, type ImagesMenuCollapsedButtonProps, type ImagesMenuCollapsedButtonRenderProps, type ImagesMenuLabels, type ImagesMenuProps, type IngestAssetFileError, type IngestAssetFilesToSceneItemsOptions, type IngestAssetFilesToSceneItemsResult, type IngestedAssetItemContext, NavMenu, type NavMenuMinimapProps, type NavMenuProps, type NavMenuUndoRedoProps, type NavMenuZoomControlsProps, ShapeContextMenu, type ShapeContextMenuProps, type UseVectorCanvasDocumentOptions, type UseVectorCanvasDocumentResult, VectorCanvas, VectorCanvasBody, VectorCanvasHeader, VectorCanvasMain, VectorCanvasPersistenceAdapter, VectorCanvasRemoteAdapter, VectorCanvasRoot, type VectorCanvasSlotProps, type VectorCanvasSpaceProps, VectorCanvasToolbar, type VectorCanvasToolbarProps, VectorCanvasViewportSurface, VectorSelectionInspector, VectorToolDefinition, VectorToolbar, type VectorToolbarOverflowProps, type VectorToolbarProps, type VectorToolbarRenderContext, type VectorToolbarToolLockProps, type VectorToolbarToolProps, VectorViewportAssetKind, VectorViewportAssetStore, createIndexedDbPersistenceAdapter, createLocalStoragePersistenceAdapter, createNoopPersistenceAdapter, createToolPlugin, cursorForVectorToolId, ingestAssetFilesToSceneItems, useVectorCanvasDocument };
package/dist/react.js CHANGED
@@ -2112,7 +2112,7 @@ var collapseButtonStyle = {
2112
2112
  cursor: "pointer",
2113
2113
  padding: 0
2114
2114
  };
2115
- var collapsedButtonStyle = {
2115
+ var defaultCollapsedButtonStyle = {
2116
2116
  display: "inline-flex",
2117
2117
  alignItems: "center",
2118
2118
  justifyContent: "center",
@@ -2141,7 +2141,10 @@ function ImagesMenu({
2141
2141
  onItemsChange,
2142
2142
  onFocusItem,
2143
2143
  labels,
2144
- defaultOpen = false
2144
+ defaultOpen = false,
2145
+ collapsedButtonClassName,
2146
+ collapsedButtonStyle,
2147
+ renderCollapsedButton
2145
2148
  }) {
2146
2149
  const managed = useMemo(() => items.filter(isManagedImage), [items]);
2147
2150
  const sensors = useSensors(
@@ -2162,18 +2165,26 @@ function ImagesMenu({
2162
2165
  duplicate: labels?.duplicate ?? labels?.copy ?? defaultLabels.duplicate
2163
2166
  };
2164
2167
  if (collapsed) {
2165
- return /* @__PURE__ */ jsx(
2166
- "button",
2167
- {
2168
- type: "button",
2169
- "data-slot": "images-menu-collapsed",
2170
- style: collapsedButtonStyle,
2171
- "aria-label": resolvedLabels.expand,
2172
- title: resolvedLabels.expand,
2173
- onClick: () => setCollapsed(false),
2174
- children: /* @__PURE__ */ jsx(Images, { size: 20 })
2175
- }
2176
- );
2168
+ const buttonProps = {
2169
+ type: "button",
2170
+ "data-slot": "images-menu-collapsed",
2171
+ className: collapsedButtonClassName,
2172
+ style: {
2173
+ ...defaultCollapsedButtonStyle,
2174
+ ...collapsedButtonStyle ?? {}
2175
+ },
2176
+ "aria-label": resolvedLabels.expand,
2177
+ title: resolvedLabels.expand,
2178
+ onClick: () => setCollapsed(false)
2179
+ };
2180
+ if (renderCollapsedButton) {
2181
+ return renderCollapsedButton({
2182
+ count: managed.length,
2183
+ label: resolvedLabels.expand,
2184
+ buttonProps
2185
+ });
2186
+ }
2187
+ return /* @__PURE__ */ jsx("button", { ...buttonProps, children: /* @__PURE__ */ jsx(Images, { size: 20 }) });
2177
2188
  }
2178
2189
  const onDragEnd = (event) => {
2179
2190
  const { active, over } = event;