export type { WidgetRect } from '../WidgetCanvas/widgetCanvasContext.js'; export type WidgetResizeEdge = 'se' | 'e' | 's' | 'sw' | 'w' | 'ne' | 'n' | 'nw'; export type WidgetHandleStyle = 'default' | 'canva'; import type { Snippet } from 'svelte'; import { type WidgetRect } from '../WidgetCanvas/widgetCanvasContext.js'; interface WidgetFrameProps { title?: string; description?: string; editable?: boolean; draggable?: boolean; resizable?: boolean; /** Built-in freeform drag/resize (absolute). Prefer inside WidgetCanvas. */ freeform?: boolean; rect?: WidgetRect; minW?: number; minH?: number; /** Override canvas snap (default: inherit from WidgetCanvas) */ snap?: boolean; /** * Snap "en vivo" mientras arrastras o snap solo al soltar. * Para que no se sienta que "no puedes mover" hacia arriba, * recomiendo 'release'. */ snapMode?: 'live' | 'release'; /** * Resize handle look. `canva` = blue border + circular corner/edge handles. */ handleStyle?: WidgetHandleStyle; /** * When false, no header chrome; freeform drag starts from the body. * Use with canvas/artboard layers (Canva-like). */ showChrome?: boolean; /** Remove body padding so media/text fill the frame. */ flush?: boolean; /** Selection chrome for canva: true = selected (border on; handles on hover), * false = hide handles. Default: handles on hover. */ handlesVisible?: boolean; /** Limit which resize edges are shown (grid mode). Default: all edges. */ resizeEdges?: WidgetResizeEdge[]; /** * Raise z-index while selected (`handlesVisible`). Canvas layers should * set `false` so stacking order stays truthful; drag still raises via `mode`. */ raiseOnSelect?: boolean; /** * Document stacking order (e.g. layer.zIndex). When set, freeform z-index * follows this and only boosts temporarily while selected/dragging. */ stackIndex?: number; /** CSS transform on the freeform root (e.g. rotate/flip) so chrome rotates too. */ transform?: string; collapsible?: boolean; collapsed?: boolean; loading?: boolean; reloading?: boolean; loadingMode?: 'skeleton' | 'spinner'; loadingText?: string; reloadingText?: string; empty?: boolean; emptyTitle?: string; emptyDescription?: string; class?: string; actions?: Snippet; children?: Snippet; ondragstart?: (e: PointerEvent) => void; onresizestart?: (e: PointerEvent, edge: WidgetResizeEdge) => void; onremove?: () => void; /** Sync or async — body shows skeleton while pending / while `reloading` is true */ onreload?: () => void | Promise; oncollapse?: (collapsed: boolean) => void; onchange?: (rect: WidgetRect) => void; /** * When false, `onchange` still fires but this frame does not write `rect`. * Use when a parent owns live position (rigid multi-select / group move). */ applyRect?: boolean; /** Fired when freeform drag/resize starts (after move threshold) or ends. */ oninteract?: (active: boolean) => void; } declare const WidgetFrame: import("svelte").Component; type WidgetFrame = ReturnType; export default WidgetFrame;