@activecollab/components 2.0.398 → 2.0.400
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/cjs/presentation/whiteboard/bottomDock.js +194 -0
- package/dist/cjs/presentation/whiteboard/bottomDock.js.map +1 -0
- package/dist/cjs/presentation/whiteboard/canvasElements.js +877 -0
- package/dist/cjs/presentation/whiteboard/canvasElements.js.map +1 -0
- package/dist/cjs/presentation/whiteboard/elements.js +816 -0
- package/dist/cjs/presentation/whiteboard/elements.js.map +1 -0
- package/dist/cjs/presentation/whiteboard/fileElement.js +457 -0
- package/dist/cjs/presentation/whiteboard/fileElement.js.map +1 -0
- package/dist/cjs/presentation/whiteboard/glyphs.js +67 -0
- package/dist/cjs/presentation/whiteboard/glyphs.js.map +1 -0
- package/dist/cjs/presentation/whiteboard/inspector.js +884 -0
- package/dist/cjs/presentation/whiteboard/inspector.js.map +1 -0
- package/dist/cjs/presentation/whiteboard/linkElement.js +357 -0
- package/dist/cjs/presentation/whiteboard/linkElement.js.map +1 -0
- package/dist/cjs/presentation/whiteboard/outline.js +966 -0
- package/dist/cjs/presentation/whiteboard/outline.js.map +1 -0
- package/dist/cjs/presentation/whiteboard/peopleMenu.js +516 -0
- package/dist/cjs/presentation/whiteboard/peopleMenu.js.map +1 -0
- package/dist/cjs/presentation/whiteboard/settingsMenu.js +177 -0
- package/dist/cjs/presentation/whiteboard/settingsMenu.js.map +1 -0
- package/dist/esm/presentation/whiteboard/bottomDock.d.ts +51 -0
- package/dist/esm/presentation/whiteboard/bottomDock.d.ts.map +1 -0
- package/dist/esm/presentation/whiteboard/bottomDock.js +162 -0
- package/dist/esm/presentation/whiteboard/bottomDock.js.map +1 -0
- package/dist/esm/presentation/whiteboard/canvasElements.d.ts +61 -0
- package/dist/esm/presentation/whiteboard/canvasElements.d.ts.map +1 -0
- package/dist/esm/presentation/whiteboard/canvasElements.js +746 -0
- package/dist/esm/presentation/whiteboard/canvasElements.js.map +1 -0
- package/dist/esm/presentation/whiteboard/elements.d.ts +180 -0
- package/dist/esm/presentation/whiteboard/elements.d.ts.map +1 -0
- package/dist/esm/presentation/whiteboard/elements.js +736 -0
- package/dist/esm/presentation/whiteboard/elements.js.map +1 -0
- package/dist/esm/presentation/whiteboard/fileElement.d.ts +113 -0
- package/dist/esm/presentation/whiteboard/fileElement.d.ts.map +1 -0
- package/dist/esm/presentation/whiteboard/fileElement.js +430 -0
- package/dist/esm/presentation/whiteboard/fileElement.js.map +1 -0
- package/dist/esm/presentation/whiteboard/glyphs.d.ts +32 -0
- package/dist/esm/presentation/whiteboard/glyphs.d.ts.map +1 -0
- package/dist/esm/presentation/whiteboard/glyphs.js +50 -0
- package/dist/esm/presentation/whiteboard/glyphs.js.map +1 -0
- package/dist/esm/presentation/whiteboard/inspector.d.ts +100 -0
- package/dist/esm/presentation/whiteboard/inspector.d.ts.map +1 -0
- package/dist/esm/presentation/whiteboard/inspector.js +753 -0
- package/dist/esm/presentation/whiteboard/inspector.js.map +1 -0
- package/dist/esm/presentation/whiteboard/linkElement.d.ts +97 -0
- package/dist/esm/presentation/whiteboard/linkElement.d.ts.map +1 -0
- package/dist/esm/presentation/whiteboard/linkElement.js +327 -0
- package/dist/esm/presentation/whiteboard/linkElement.js.map +1 -0
- package/dist/esm/presentation/whiteboard/outline.d.ts +89 -0
- package/dist/esm/presentation/whiteboard/outline.d.ts.map +1 -0
- package/dist/esm/presentation/whiteboard/outline.js +870 -0
- package/dist/esm/presentation/whiteboard/outline.js.map +1 -0
- package/dist/esm/presentation/whiteboard/peopleMenu.d.ts +44 -0
- package/dist/esm/presentation/whiteboard/peopleMenu.d.ts.map +1 -0
- package/dist/esm/presentation/whiteboard/peopleMenu.js +440 -0
- package/dist/esm/presentation/whiteboard/peopleMenu.js.map +1 -0
- package/dist/esm/presentation/whiteboard/settingsMenu.d.ts +13 -0
- package/dist/esm/presentation/whiteboard/settingsMenu.d.ts.map +1 -0
- package/dist/esm/presentation/whiteboard/settingsMenu.js +155 -0
- package/dist/esm/presentation/whiteboard/settingsMenu.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasElements.js","names":["React","useCallback","useEffect","useRef","useState","CARD_PREVIEW_HEIGHT","SHAPE_DEFAULT_SIZES","isShapeTool","CANVAS_ELEMENTS","PostitFormattingToolbar","ResizeHandles","ShapeFormattingToolbar","StyledCanvasElement","StyledCanvasLayer","StyledSticky","defaultShapeState","gridLevel","renderShapeBody","snapValue","stickyGradient","FILE_DEFAULT_WIDTH","FileElement","binaryFrom","describeFile","revokeThumbnail","CARD_DRAW_THRESHOLD","LINK_DEFAULT_WIDTH","LinkElement","StyledLinkDraft","StyledShapePreview","clampCardWidth","isValidLinkUrl","shapePreviewGlyph","NO_DRAG_SELECTOR","DRAG_THROUGH_SELECTOR","CanvasElements","_ref","gridSize","snapToGrid","activeTool","onToolUsed","selectedId","setSelectedId","onSelectedIdChange","positions","setPositions","shapes","setShapes","stickyStyle","setStickyStyle","links","setLinks","files","setFiles","createdShapes","setCreatedShapes","sizes","rotations","locks","setLocks","toggleLock","id","current","_current$id","_extends","_useState","removedIds","setRemovedIds","_useState2","autoEditId","setAutoEditId","_useState3","autoOpenId","setAutoOpenId","_useState4","draft","setDraft","dragRef","snapStepRef","snapStep","suppressClickRef","handleElementClickCapture","event","preventDefault","stopPropagation","handleDragMove","drag","dx","clientX","startX","dy","clientY","startY","moved","Math","abs","step","x","originX","y","originY","handleDragEnd","window","removeEventListener","handleNativeDragStart","addEventListener","handleElementMouseDown","button","activeToolRef","target","closest","origin","updateShape","partial","handleDelete","removed","layerRef","linkCounterRef","pointerRef","resizeStartRef","linksRef","filesRef","canvasPoint","_layerRef$current","_rect$left","_rect$top","rect","getBoundingClientRect","left","top","shapeCounterRef","addShape","point","tool","size","kind","initialType","width","height","addLink","url","commitLinkUrl","map","link","deleteLink","filter","fileCounterRef","addFile","file","described","attachFile","picked","_filesRef$current$fin","_filesRef$current$fin2","find","entry","detachFile","_filesRef$current$fin3","_filesRef$current$fin4","deleteFile","_filesRef$current$fin5","_filesRef$current$fin6","resizeFile","from","all","forEach","beginResize","endResize","resizeLink","drawRef","drawEndedRef","handleDrawMove","min","handleDrawEnd","setTimeout","drawn","max","at","handleLayerMouseDown","setHoverPoint","_useState5","hoverPoint","handleLayerMouseMove","handleLayerMouseLeave","handleLayerClick","isFileDrag","_event$dataTransfer$t","_event$dataTransfer","Array","dataTransfer","types","includes","handleDragOver","dropEffect","handleDrop","dropped","document","handlePaste","_layerRef$current2","_event$clipboardData$","_event$clipboardData","onTheBoard","body","contains","binary","clipboardData","text","getData","trim","createElement","ref","className","undefined","onClick","onMouseDown","onMouseMove","onMouseLeave","element","_sizes$element$id$wid","_sizes$element$id","_sizes$element$id$hei","_sizes$element$id2","_rotations$element$id","_locks$element$id","_locks$element$id2","selected","shape","rotation","key","style","transform","background","color","fillOpacity","textColor","fontSize","fontWeight","bold","fontStyle","italic","textDecoration","underline","strikethrough","Boolean","join","textAlign","align","onUpdate","onDelete","locked","onToggleLock","value","onChange","_positions$link$id$x","_positions$link$id","_positions$link$id$y","_positions$link$id2","onClickCapture","autoEdit","onCommitUrl","resize","onResizeStart","onResizeDelta","onResizeCommit","_positions$entry$id$x","_positions$entry$id","_positions$entry$id$y","_positions$entry$id2","autoOpen","onPickFile","onCancel","rx","ry"],"sources":["../../../../src/presentation/whiteboard/canvasElements.tsx"],"sourcesContent":["import React, {\n ReactElement,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\n\nimport {\n BoardTool,\n CARD_PREVIEW_HEIGHT,\n DrawableTool,\n SHAPE_DEFAULT_SIZES,\n ShapeTool,\n isShapeTool,\n} from \"./bottomDock\";\nimport {\n CANVAS_ELEMENTS,\n CanvasElementDef,\n GridSize,\n PostitFormattingToolbar,\n ResizeHandles,\n ShapeElementState,\n ShapeFormattingToolbar,\n StickyTextStyle,\n StyledCanvasElement,\n StyledCanvasLayer,\n StyledSticky,\n defaultShapeState,\n gridLevel,\n renderShapeBody,\n snapValue,\n stickyGradient,\n} from \"./elements\";\nimport {\n FILE_DEFAULT_WIDTH,\n FileElement,\n FileElementDef,\n binaryFrom,\n describeFile,\n revokeThumbnail,\n} from \"./fileElement\";\nimport {\n CARD_DRAW_THRESHOLD,\n LINK_DEFAULT_WIDTH,\n LinkElement,\n LinkElementDef,\n StyledLinkDraft,\n StyledShapePreview,\n clampCardWidth,\n isValidLinkUrl,\n shapePreviewGlyph,\n} from \"./linkElement\";\n\n/**\n * A card is full of its own controls — the URL field, the display toggle, the\n * retry button, the toolbar. A mousedown on any of them selects the element but\n * must not start a board drag.\n *\n * The resize grip needs no entry here: the shipped handle calls\n * `preventDefault()` on pointerdown, which suppresses the compatibility mouse\n * events entirely, so a grip press never reaches this at all.\n */\nexport const NO_DRAG_SELECTOR = \"a, button, input, textarea, [data-no-drag]\";\n\n/**\n * …except a control that IS the whole card.\n *\n * A placeholder is one big button filling its card, so treating it as a control\n * left no surface to grab and the card could not be moved at all. Marked\n * drag-through, it does both: moving the pointer drags the card, and releasing\n * without moving is still a click that opens the editor or the file picker.\n * (Atlassian's rule — make a handle draggable, not the whole element — assumes\n * the element has some non-interactive surface. This one has none.)\n */\nexport const DRAG_THROUGH_SELECTOR = \"[data-drag-through]\";\n\nexport interface CanvasElementsProps {\n gridSize: GridSize;\n snapToGrid: boolean;\n activeTool: BoardTool;\n onToolUsed: () => void;\n /* Selection is CONTROLLED by the scene so the outline sidebar shares it.\n The setter is passed through whole rather than as a plain callback because\n the canvas also updates selection functionally (deleting an element picks\n the next one from the previous value). */\n selectedId: string | null;\n onSelectedIdChange: React.Dispatch<React.SetStateAction<string | null>>;\n /* Element geometry + style state is lifted to the scene so the right\n Inspector and the canvas share one source of truth. The setters keep the\n exact same signatures the canvas used when it owned this state, so all the\n drag / snap / delete / updateShape logic below is unchanged. */\n positions: Record<string, { x: number; y: number }>;\n setPositions: React.Dispatch<\n React.SetStateAction<Record<string, { x: number; y: number }>>\n >;\n shapes: Record<string, ShapeElementState>;\n setShapes: React.Dispatch<\n React.SetStateAction<Record<string, ShapeElementState>>\n >;\n stickyStyle: StickyTextStyle;\n setStickyStyle: React.Dispatch<React.SetStateAction<StickyTextStyle>>;\n /* Link and file cards are lifted too, so the Inspector can read the selected\n card's URL / file. */\n links: LinkElementDef[];\n setLinks: React.Dispatch<React.SetStateAction<LinkElementDef[]>>;\n files: FileElementDef[];\n setFiles: React.Dispatch<React.SetStateAction<FileElementDef[]>>;\n /* Shapes the shape tools created this session, lifted like the cards so the\n Inspector reads them from the same source of truth. */\n createdShapes: CanvasElementDef[];\n setCreatedShapes: React.Dispatch<React.SetStateAction<CanvasElementDef[]>>;\n /* Read-only on the canvas — the Inspector owns editing them. */\n sizes: Record<string, { width: number; height: number }>;\n rotations: Record<string, number>;\n /* The per-element lock flag, shared with the Inspector's Locked checkbox so\n the floating toolbars' Lock button toggles the same source of truth. */\n locks: Record<string, boolean>;\n setLocks: React.Dispatch<React.SetStateAction<Record<string, boolean>>>;\n}\n\n/* The canvas elements + selection state. The rounded rectangle starts\n selected; clicking an element selects it, clicking the canvas deselects,\n Delete on the shape toolbar removes the element. Toolbar submenus really\n edit the per-element state. Elements are draggable, and snap to the grid\n when the board's Snap to Grid setting is on.\n\n Link elements are created here too — by drawing a box with the Link tool\n armed, or by pasting a URL onto the canvas. */\nexport const CanvasElements = ({\n gridSize,\n snapToGrid,\n activeTool,\n onToolUsed,\n selectedId,\n onSelectedIdChange: setSelectedId,\n positions,\n setPositions,\n shapes,\n setShapes,\n stickyStyle,\n setStickyStyle,\n links,\n setLinks,\n files,\n setFiles,\n createdShapes,\n setCreatedShapes,\n sizes,\n rotations,\n locks,\n setLocks,\n}: CanvasElementsProps): ReactElement => {\n const toggleLock = (id: string): void =>\n setLocks((current) => ({ ...current, [id]: !(current[id] ?? false) }));\n\n const [removedIds, setRemovedIds] = useState<string[]>([]);\n const [autoEditId, setAutoEditId] = useState<string | null>(null);\n const [autoOpenId, setAutoOpenId] = useState<string | null>(null);\n const [draft, setDraft] = useState<{\n x: number;\n y: number;\n width: number;\n height: number;\n /* Captured with the gesture, so disarming mid-drag cannot make the readout\n disagree with what the release actually creates. */\n tool: DrawableTool;\n } | null>(null);\n // The active drag and the live snap step are held in refs so the document\n // listeners stay stable and always read the current Board Settings.\n const dragRef = useRef<{\n id: string;\n startX: number;\n startY: number;\n originX: number;\n originY: number;\n moved: boolean;\n } | null>(null);\n const snapStepRef = useRef<number | null>(null);\n snapStepRef.current = snapToGrid ? gridLevel(gridSize).snapStep : null;\n /* Set once a press turns into a move, so the click that ends the gesture can\n be swallowed before it reaches a drag-through control. */\n const suppressClickRef = useRef(false);\n\n /* Runs in the capture phase, so it can stop the click before the placeholder\n button underneath ever sees it. It must stay a no-op otherwise — stopping\n propagation on the way down would keep every ordinary click from reaching\n the control it was aimed at. */\n const handleElementClickCapture = useCallback(\n (event: React.MouseEvent): void => {\n if (!suppressClickRef.current) {\n return;\n }\n\n suppressClickRef.current = false;\n event.preventDefault();\n event.stopPropagation();\n },\n []\n );\n\n const handleDragMove = useCallback(\n (event: MouseEvent): void => {\n const drag = dragRef.current;\n if (!drag) {\n return;\n }\n\n const dx = event.clientX - drag.startX;\n const dy = event.clientY - drag.startY;\n if (!drag.moved && Math.abs(dx) + Math.abs(dy) < 3) {\n return;\n }\n // Past the threshold this gesture is a move, so the click it ends with must\n // not also activate whatever was under the pointer.\n drag.moved = true;\n suppressClickRef.current = true;\n\n const step = snapStepRef.current;\n const x = snapValue(drag.originX + dx, step);\n const y = snapValue(drag.originY + dy, step);\n setPositions((current) => ({ ...current, [drag.id]: { x, y } }));\n },\n [setPositions]\n );\n\n const handleDragEnd = useCallback((): void => {\n dragRef.current = null;\n window.removeEventListener(\"mousemove\", handleDragMove);\n window.removeEventListener(\"mouseup\", handleDragEnd);\n }, [handleDragMove]);\n\n /* A native HTML5 drag (an <img>, a text selection) swallows the mouseup this\n drag ends on, which would leave the element following the pointer with no\n button held. Ending the board drag on `dragstart` closes that hole; the\n cover's media is also marked undraggable in the design system, so the case\n should not arise from a card in the first place. */\n useEffect(() => {\n const handleNativeDragStart = (event: DragEvent): void => {\n event.preventDefault();\n handleDragEnd();\n };\n\n window.addEventListener(\"dragstart\", handleNativeDragStart);\n\n return () => window.removeEventListener(\"dragstart\", handleNativeDragStart);\n }, [handleDragEnd]);\n\n const handleElementMouseDown = useCallback(\n (event: React.MouseEvent, id: string): void => {\n if (event.button !== 0) {\n return;\n }\n\n // An armed tool owns the canvas: let the press through to the layer so a\n // box can be drawn over an existing element instead of moving it.\n if (activeToolRef.current !== \"select\") {\n return;\n }\n\n event.stopPropagation();\n setSelectedId(id);\n\n // A fresh press starts a fresh gesture: whatever the last one decided\n // about swallowing its click no longer applies.\n suppressClickRef.current = false;\n\n const target = event.target as HTMLElement;\n if (\n target.closest(NO_DRAG_SELECTOR) &&\n !target.closest(DRAG_THROUGH_SELECTOR)\n ) {\n return;\n }\n\n const origin = positions[id];\n dragRef.current = {\n id,\n startX: event.clientX,\n startY: event.clientY,\n originX: origin.x,\n originY: origin.y,\n moved: false,\n };\n window.addEventListener(\"mousemove\", handleDragMove);\n window.addEventListener(\"mouseup\", handleDragEnd);\n },\n [positions, handleDragMove, handleDragEnd, setSelectedId]\n );\n\n const updateShape = useCallback(\n (id: string, partial: Partial<ShapeElementState>): void =>\n setShapes((current) => ({\n ...current,\n [id]: { ...current[id], ...partial },\n })),\n [setShapes]\n );\n\n const handleDelete = useCallback(() => {\n setSelectedId((current) => {\n if (current) {\n setRemovedIds((removed) => [...removed, current]);\n }\n\n return null;\n });\n }, [setSelectedId]);\n\n /* ---- link elements ------------------------------------------------ */\n\n const layerRef = useRef<HTMLDivElement | null>(null);\n const linkCounterRef = useRef(0);\n // Where a pasted card lands: the pointer's last canvas position.\n const pointerRef = useRef<{ x: number; y: number }>({ x: 160, y: 160 });\n /* The width each live resize gesture started from. The grip reports deltas\n measured from the gesture START and brackets the stream with\n `onResizeStart` / `onResizeCommit`, so this is a snapshot taken when a\n gesture opens and dropped when it closes — not a running accumulator. That\n is what lets a slow, few-pixels-at-a-time drag keep growing: the delta\n itself grows, so it crosses grid lines instead of rounding each hop away.\n Having a defined gesture end also means nothing is ever left over to make\n the next gesture jump. */\n const resizeStartRef = useRef<Record<string, number>>({});\n\n // Mirrors so the stable document/window handlers always read current state.\n const activeToolRef = useRef<BoardTool>(activeTool);\n activeToolRef.current = activeTool;\n const linksRef = useRef<LinkElementDef[]>(links);\n linksRef.current = links;\n const filesRef = useRef<FileElementDef[]>(files);\n filesRef.current = files;\n\n const canvasPoint = useCallback(\n (clientX: number, clientY: number): { x: number; y: number } => {\n const rect = layerRef.current?.getBoundingClientRect();\n\n return {\n x: clientX - (rect?.left ?? 0),\n y: clientY - (rect?.top ?? 0),\n };\n },\n []\n );\n\n /* ---- shape elements ------------------------------------------------ */\n\n const shapeCounterRef = useRef(0);\n\n /* Create a shape element. A plain click drops the tool's default size at the\n (snapped) point; a real drag creates the drawn box. */\n const addShape = useCallback(\n (\n point: { x: number; y: number },\n tool: ShapeTool,\n size: { width: number; height: number }\n ): void => {\n shapeCounterRef.current += 1;\n const id = `shape-created-${shapeCounterRef.current}`;\n const step = snapStepRef.current;\n\n setPositions((current) => ({\n ...current,\n [id]: { x: snapValue(point.x, step), y: snapValue(point.y, step) },\n }));\n setShapes((current) => ({ ...current, [id]: defaultShapeState(tool) }));\n setCreatedShapes((current) => [\n ...current,\n {\n id,\n kind: \"shape\",\n initialType: tool,\n x: point.x,\n y: point.y,\n width: size.width,\n height: size.height,\n },\n ]);\n setSelectedId(id);\n },\n [setPositions, setShapes, setCreatedShapes, setSelectedId]\n );\n\n /* Create a link element. `url` null lands a placeholder (the draw gesture);\n a URL goes straight to the unfurl (the paste gesture, where the address is\n already known). */\n const addLink = useCallback(\n (\n point: { x: number; y: number },\n width: number,\n url: string | null\n ): void => {\n linkCounterRef.current += 1;\n const id = `link-${linkCounterRef.current}`;\n const step = snapStepRef.current;\n\n setPositions((current) => ({\n ...current,\n [id]: { x: snapValue(point.x, step), y: snapValue(point.y, step) },\n }));\n setLinks((current) => [\n ...current,\n { id, width: clampCardWidth(width), url },\n ]);\n setSelectedId(id);\n setAutoEditId(url == null ? id : null);\n },\n [setSelectedId, setPositions, setLinks]\n );\n\n const commitLinkUrl = useCallback(\n (id: string, url: string): void => {\n setLinks((current) =>\n current.map((link) => (link.id === id ? { ...link, url } : link))\n );\n },\n [setLinks]\n );\n\n const deleteLink = useCallback(\n (id: string): void => {\n setLinks((current) => current.filter((link) => link.id !== id));\n delete resizeStartRef.current[id];\n setSelectedId(null);\n },\n [setSelectedId, setLinks]\n );\n\n /* ---- file elements ------------------------------------------------ */\n\n const fileCounterRef = useRef(0);\n\n /* Create a file element. `file` null lands a placeholder and opens the picker\n (the draw gesture); a file goes straight to the upload (the paste and drop\n gestures, where the bytes are already in hand). */\n const addFile = useCallback(\n (\n point: { x: number; y: number },\n width: number,\n file: File | null\n ): void => {\n fileCounterRef.current += 1;\n const id = `file-${fileCounterRef.current}`;\n const step = snapStepRef.current;\n\n /* `describeFile` allocates an object URL, so it must run HERE and not\n inside the updater: a state updater has to be pure, and a double-invoked\n one would mint a second URL that nothing holds a reference to and that\n therefore could never be revoked. */\n const described = file ? describeFile(file) : null;\n\n setPositions((current) => ({\n ...current,\n [id]: { x: snapValue(point.x, step), y: snapValue(point.y, step) },\n }));\n setFiles((current) => [\n ...current,\n { id, width: clampCardWidth(width), file: described },\n ]);\n setSelectedId(id);\n setAutoOpenId(file == null ? id : null);\n },\n [setSelectedId, setPositions, setFiles]\n );\n\n const attachFile = useCallback(\n (id: string, picked: File): void => {\n const described = describeFile(picked);\n // Replacing a file releases the one it replaces.\n revokeThumbnail(\n filesRef.current.find((entry) => entry.id === id)?.file ?? null\n );\n\n setFiles((current) =>\n current.map((entry) =>\n entry.id === id ? { ...entry, file: described } : entry\n )\n );\n },\n [setFiles]\n );\n\n /* Cancelling an upload keeps the card and drops the file, so the placeholder\n is what you land back on — the same place Esc leaves you. */\n const detachFile = useCallback(\n (id: string): void => {\n revokeThumbnail(\n filesRef.current.find((entry) => entry.id === id)?.file ?? null\n );\n setFiles((current) =>\n current.map((entry) =>\n entry.id === id ? { ...entry, file: null } : entry\n )\n );\n setAutoOpenId(null);\n },\n [setFiles]\n );\n\n const deleteFile = useCallback(\n (id: string): void => {\n revokeThumbnail(\n filesRef.current.find((entry) => entry.id === id)?.file ?? null\n );\n setFiles((current) => current.filter((entry) => entry.id !== id));\n delete resizeStartRef.current[id];\n setSelectedId(null);\n },\n [setSelectedId, setFiles]\n );\n\n const resizeFile = useCallback(\n (id: string, dx: number): void => {\n const from = resizeStartRef.current[id];\n if (from == null) {\n return;\n }\n\n const width = clampCardWidth(snapValue(from + dx, snapStepRef.current));\n setFiles((all) =>\n all.map((entry) => (entry.id === id ? { ...entry, width } : entry))\n );\n },\n [setFiles]\n );\n\n // Object URLs outlive React, so release every one still held on unmount.\n useEffect(\n () => () =>\n filesRef.current.forEach((entry) => revokeThumbnail(entry.file)),\n []\n );\n\n /* The gesture brackets. `beginResize` snapshots the width the gesture opened\n on; `endResize` is where a real board would push its single undo entry, the\n previews before it being live feedback only (spec §7e). */\n const beginResize = useCallback((id: string, width: number): void => {\n resizeStartRef.current[id] = width;\n }, []);\n\n const endResize = useCallback((id: string): void => {\n delete resizeStartRef.current[id];\n }, []);\n\n /* Width-only resize: the card reports the delta from the gesture start, the\n board decides what it means — clamp to the link bounds, then land on the\n board grid. Resolving against the snapshot rather than the last value makes\n this idempotent, so a double-invoked updater cannot count a delta twice. */\n const resizeLink = useCallback(\n (id: string, dx: number): void => {\n const from = resizeStartRef.current[id];\n if (from == null) {\n return;\n }\n\n const width = clampCardWidth(snapValue(from + dx, snapStepRef.current));\n setLinks((all) =>\n all.map((link) => (link.id === id ? { ...link, width } : link))\n );\n },\n [setLinks]\n );\n\n /* ---- draw-to-place ------------------------------------------------ */\n\n const drawRef = useRef<{\n x: number;\n y: number;\n tool: DrawableTool;\n } | null>(null);\n /* A completed draw is followed by a click on the canvas layer, whose job is\n to deselect — which would drop the selection off the card just created.\n This swallows exactly that one click. */\n const drawEndedRef = useRef(false);\n\n const handleDrawMove = useCallback(\n (event: MouseEvent): void => {\n const origin = drawRef.current;\n if (!origin) {\n return;\n }\n\n const point = canvasPoint(event.clientX, event.clientY);\n setDraft({\n x: Math.min(origin.x, point.x),\n y: Math.min(origin.y, point.y),\n width: Math.abs(point.x - origin.x),\n height: Math.abs(point.y - origin.y),\n tool: origin.tool,\n });\n },\n [canvasPoint]\n );\n\n const handleDrawEnd = useCallback(\n (event: MouseEvent): void => {\n const origin = drawRef.current;\n drawRef.current = null;\n window.removeEventListener(\"mousemove\", handleDrawMove);\n window.removeEventListener(\"mouseup\", handleDrawEnd);\n setDraft(null);\n\n if (!origin) {\n return;\n }\n\n // Swallow the click that follows this mouseup, so the layer's deselect\n // does not drop the selection off the card we are about to create. The\n // click may never arrive (a release over the dock retargets it), so it\n // expires on a timer rather than waiting to be consumed.\n drawEndedRef.current = true;\n window.setTimeout(() => {\n drawEndedRef.current = false;\n }, 0);\n\n const point = canvasPoint(event.clientX, event.clientY);\n const width = Math.abs(point.x - origin.x);\n const height = Math.abs(point.y - origin.y);\n // A click (or a nudge) means \"default element here\"; a real drag sets\n // the size.\n const drawn = Math.max(width, height) >= CARD_DRAW_THRESHOLD;\n const at = drawn\n ? { x: Math.min(origin.x, point.x), y: Math.min(origin.y, point.y) }\n : origin;\n\n if (isShapeTool(origin.tool)) {\n addShape(\n at,\n origin.tool,\n drawn ? { width, height } : SHAPE_DEFAULT_SIZES[origin.tool]\n );\n } else if (origin.tool === \"file\") {\n addFile(at, drawn ? width : FILE_DEFAULT_WIDTH, null);\n } else {\n addLink(at, drawn ? width : LINK_DEFAULT_WIDTH, null);\n }\n onToolUsed();\n },\n [addFile, addLink, addShape, canvasPoint, handleDrawMove, onToolUsed]\n );\n\n const handleLayerMouseDown = useCallback(\n (event: React.MouseEvent): void => {\n const tool = activeToolRef.current;\n if (event.button !== 0 || tool === \"select\") {\n return;\n }\n\n // Without this the draw drag also runs the browser's text selection and\n // highlights everything it sweeps across.\n event.preventDefault();\n const point = canvasPoint(event.clientX, event.clientY);\n // The tool is captured with the gesture: disarming mid-drag must not\n // change what the release creates.\n drawRef.current = { ...point, tool };\n setHoverPoint(null);\n setDraft({ ...point, width: 0, height: 0, tool });\n window.addEventListener(\"mousemove\", handleDrawMove);\n window.addEventListener(\"mouseup\", handleDrawEnd);\n },\n [canvasPoint, handleDrawMove, handleDrawEnd]\n );\n\n /* Where the armed tool's hover preview sits — cleared while a draw gesture\n runs (the rubber band takes over) and whenever the tool disarms. */\n const [hoverPoint, setHoverPoint] = useState<{ x: number; y: number } | null>(\n null\n );\n\n useEffect(() => {\n if (activeTool === \"select\") {\n setHoverPoint(null);\n }\n }, [activeTool]);\n\n const handleLayerMouseMove = useCallback(\n (event: React.MouseEvent): void => {\n pointerRef.current = canvasPoint(event.clientX, event.clientY);\n if (activeTool !== \"select\" && !drawRef.current) {\n setHoverPoint(pointerRef.current);\n }\n },\n [activeTool, canvasPoint]\n );\n\n const handleLayerMouseLeave = useCallback((): void => {\n setHoverPoint(null);\n }, []);\n\n const handleLayerClick = useCallback((): void => {\n if (drawEndedRef.current) {\n drawEndedRef.current = false;\n\n return;\n }\n\n setSelectedId(null);\n }, [setSelectedId]);\n\n /* ---- drop-to-place ------------------------------------------------ */\n\n /**\n * The whole board is a drop target, which the dock hint already promises.\n *\n * This also has to exist for safety, not just for the feature: a file dropped\n * anywhere the app does not handle makes the browser NAVIGATE to it, throwing\n * the board away. So the document swallows every file drag, and a drop on the\n * canvas lands a card at the pointer.\n */\n useEffect(() => {\n const isFileDrag = (event: DragEvent): boolean =>\n Array.from(event.dataTransfer?.types ?? []).includes(\"Files\");\n\n const handleDragOver = (event: DragEvent): void => {\n if (!isFileDrag(event)) {\n return;\n }\n // Both of these are required: without the dragover default prevented the\n // drop event never fires at all.\n event.preventDefault();\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = \"copy\";\n }\n };\n\n const handleDrop = (event: DragEvent): void => {\n if (!isFileDrag(event)) {\n return;\n }\n event.preventDefault();\n\n const target = event.target as HTMLElement | null;\n // A drop onto an empty placeholder is that card's own business.\n if (target?.closest(\"[data-file-dropzone]\")) {\n return;\n }\n\n const dropped = binaryFrom(event.dataTransfer);\n if (!dropped) {\n return;\n }\n\n addFile(\n canvasPoint(event.clientX, event.clientY),\n FILE_DEFAULT_WIDTH,\n dropped\n );\n onToolUsed();\n };\n\n document.addEventListener(\"dragover\", handleDragOver);\n document.addEventListener(\"drop\", handleDrop);\n\n return () => {\n document.removeEventListener(\"dragover\", handleDragOver);\n document.removeEventListener(\"drop\", handleDrop);\n };\n }, [addFile, canvasPoint, onToolUsed]);\n\n /* ---- paste-to-place ----------------------------------------------- */\n\n useEffect(() => {\n const handlePaste = (event: ClipboardEvent): void => {\n /* Only the board may claim a paste, and two different things can take it\n away: a focused field keeps its own paste (the card's URL editor is\n INSIDE the canvas, so \"on the board\" is not sufficient), and a dialog\n keeps its own too — otherwise pasting with Add Users open would quietly\n drop a card behind the modal. With nothing focused the target is\n <body>, which is the board's own case. */\n const target = event.target as HTMLElement | null;\n if (target?.closest(\"input, textarea, [contenteditable='true']\")) {\n return;\n }\n\n const onTheBoard =\n target === document.body ||\n (target != null && layerRef.current?.contains(target) === true);\n if (!onTheBoard) {\n return;\n }\n\n /* Binary wins over text. A screenshot or a copied file carries both — the\n bytes as an item and often a filename as text — and the bytes are the\n thing the user meant. Only once there is nothing binary do we read the\n clipboard as a URL. */\n const binary = binaryFrom(event.clipboardData);\n if (binary) {\n event.preventDefault();\n // The bytes are in hand, so the card skips the placeholder and the\n // picker: it goes straight to uploading them.\n addFile(pointerRef.current, FILE_DEFAULT_WIDTH, binary);\n onToolUsed();\n\n return;\n }\n\n const text = event.clipboardData?.getData(\"text/plain\") ?? \"\";\n if (!isValidLinkUrl(text)) {\n return;\n }\n\n event.preventDefault();\n // The address is already known, so this card skips the placeholder and\n // the editor: it drops straight into the unfurl.\n addLink(pointerRef.current, LINK_DEFAULT_WIDTH, text.trim());\n onToolUsed();\n };\n\n document.addEventListener(\"paste\", handlePaste);\n\n return () => document.removeEventListener(\"paste\", handlePaste);\n }, [addFile, addLink, onToolUsed]);\n\n return (\n <StyledCanvasLayer\n ref={layerRef}\n className={activeTool === \"select\" ? undefined : \"drawing\"}\n onClick={handleLayerClick}\n onMouseDown={handleLayerMouseDown}\n onMouseMove={handleLayerMouseMove}\n onMouseLeave={handleLayerMouseLeave}\n >\n {[...CANVAS_ELEMENTS, ...createdShapes]\n .filter((element) => !removedIds.includes(element.id))\n .map((element) => {\n const selected = element.id === selectedId;\n const shape = element.kind === \"shape\" ? shapes[element.id] : null;\n const width = sizes[element.id]?.width ?? element.width;\n const height = sizes[element.id]?.height ?? element.height;\n const rotation = rotations[element.id] ?? 0;\n\n return (\n <StyledCanvasElement\n key={element.id}\n className={selected ? \"selected\" : undefined}\n style={{\n left: positions[element.id].x,\n top: positions[element.id].y,\n width,\n height,\n transform: rotation ? `rotate(${rotation}deg)` : undefined,\n }}\n onMouseDown={(event) => handleElementMouseDown(event, element.id)}\n onClick={(event) => event.stopPropagation()}\n >\n {shape ? renderShapeBody(element, shape, width, height) : null}\n {element.kind === \"sticky\" ? (\n <StyledSticky\n style={{\n background: stickyGradient(\n stickyStyle.color,\n stickyStyle.fillOpacity\n ),\n color: stickyStyle.textColor,\n fontSize: stickyStyle.fontSize,\n fontWeight: stickyStyle.bold ? \"bold\" : \"normal\",\n fontStyle: stickyStyle.italic ? \"italic\" : \"normal\",\n textDecoration:\n [\n stickyStyle.underline ? \"underline\" : \"\",\n stickyStyle.strikethrough ? \"line-through\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \") || undefined,\n textAlign: stickyStyle.align,\n }}\n >\n Retro: what went well?\n </StyledSticky>\n ) : null}\n {selected && shape ? (\n <ShapeFormattingToolbar\n element={shape}\n onUpdate={(partial) => updateShape(element.id, partial)}\n onDelete={handleDelete}\n locked={locks[element.id] ?? false}\n onToggleLock={() => toggleLock(element.id)}\n />\n ) : null}\n {selected && element.kind === \"sticky\" ? (\n <PostitFormattingToolbar\n value={stickyStyle}\n onChange={setStickyStyle}\n onDelete={handleDelete}\n locked={locks[element.id] ?? false}\n onToggleLock={() => toggleLock(element.id)}\n />\n ) : null}\n {selected ? <ResizeHandles /> : null}\n </StyledCanvasElement>\n );\n })}\n\n {links.map((link) => {\n const selected = link.id === selectedId;\n\n return (\n <StyledCanvasElement\n key={link.id}\n className={selected ? \"is-card selected\" : \"is-card\"}\n style={{\n left: positions[link.id]?.x ?? 0,\n top: positions[link.id]?.y ?? 0,\n width: link.width,\n }}\n onMouseDown={(event) => handleElementMouseDown(event, link.id)}\n onClickCapture={handleElementClickCapture}\n onClick={(event) => event.stopPropagation()}\n >\n <LinkElement\n element={link}\n selected={selected}\n autoEdit={link.id === autoEditId}\n onCommitUrl={(url) => commitLinkUrl(link.id, url)}\n resize={{\n onResizeStart: () => beginResize(link.id, link.width),\n onResizeDelta: (dx) => resizeLink(link.id, dx),\n onResizeCommit: () => endResize(link.id),\n }}\n onDelete={() => deleteLink(link.id)}\n />\n </StyledCanvasElement>\n );\n })}\n\n {files.map((entry) => {\n const selected = entry.id === selectedId;\n\n return (\n <StyledCanvasElement\n key={entry.id}\n className={selected ? \"is-card selected\" : \"is-card\"}\n style={{\n left: positions[entry.id]?.x ?? 0,\n top: positions[entry.id]?.y ?? 0,\n width: entry.width,\n }}\n onMouseDown={(event) => handleElementMouseDown(event, entry.id)}\n onClickCapture={handleElementClickCapture}\n onClick={(event) => event.stopPropagation()}\n >\n <FileElement\n element={entry}\n selected={selected}\n autoOpen={entry.id === autoOpenId}\n onPickFile={(picked) => attachFile(entry.id, picked)}\n resize={{\n onResizeStart: () => beginResize(entry.id, entry.width),\n onResizeDelta: (dx) => resizeFile(entry.id, dx),\n onResizeCommit: () => endResize(entry.id),\n }}\n onCancel={() => detachFile(entry.id)}\n onDelete={() => deleteFile(entry.id)}\n />\n </StyledCanvasElement>\n );\n })}\n\n {/* the rubber band drawn while a card tool is armed */}\n {draft && !isShapeTool(draft.tool) ? (\n <StyledLinkDraft\n style={{\n left: draft.x,\n top: draft.y,\n width: Math.max(draft.width, 1),\n height: Math.max(draft.height, 1),\n }}\n >\n {/* The width the card will actually take, including the\n below-threshold case where the gesture reads as a plain click. */}\n <span className=\"draft-width\">\n W{\" \"}\n {draft.width >= CARD_DRAW_THRESHOLD\n ? clampCardWidth(draft.width)\n : draft.tool === \"file\"\n ? FILE_DEFAULT_WIDTH\n : LINK_DEFAULT_WIDTH}{\" \"}\n · height follows content\n </span>\n </StyledLinkDraft>\n ) : null}\n\n {/* the shape rubber band — the same outline the finished shape will\n have, exactly as the app's ShapePreview draws it */}\n {draft && isShapeTool(draft.tool) ? (\n <StyledShapePreview\n style={{\n left: draft.x,\n top: draft.y,\n width: Math.max(draft.width, 1),\n height: Math.max(draft.height, 1),\n }}\n >\n {shapePreviewGlyph(\n draft.tool,\n Math.max(draft.width, 1),\n Math.max(draft.height, 1)\n )}\n </StyledShapePreview>\n ) : null}\n\n {/* The promise a plain click makes: the default-size element under the\n cursor, landing wherever the drop would snap while Snap to Grid is\n on. Hidden the moment a draw gesture starts — the rubber band is the\n live readout from then on. */}\n {hoverPoint && !draft && activeTool !== \"select\"\n ? (() => {\n const step = snapStepRef.current;\n const at = {\n x: snapValue(hoverPoint.x, step),\n y: snapValue(hoverPoint.y, step),\n };\n if (isShapeTool(activeTool)) {\n const size = SHAPE_DEFAULT_SIZES[activeTool];\n return (\n <StyledShapePreview style={{ left: at.x, top: at.y, ...size }}>\n {shapePreviewGlyph(activeTool, size.width, size.height)}\n </StyledShapePreview>\n );\n }\n const width =\n activeTool === \"file\" ? FILE_DEFAULT_WIDTH : LINK_DEFAULT_WIDTH;\n return (\n <StyledShapePreview\n style={{\n left: at.x,\n top: at.y,\n width,\n height: CARD_PREVIEW_HEIGHT,\n }}\n >\n <svg width=\"100%\" height=\"100%\">\n <rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" rx={8} ry={8} />\n </svg>\n </StyledShapePreview>\n );\n })()\n : null}\n </StyledCanvasLayer>\n );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import React, { ReactElement } from "react";
|
|
2
|
+
export declare const ELEMENT_FILL = "#ffffff";
|
|
3
|
+
export declare const ELEMENT_STROKE = "#374151";
|
|
4
|
+
export declare const ELEMENT_TEXT = "#1f2937";
|
|
5
|
+
export declare const STICKY_FILL = "#fbbf24";
|
|
6
|
+
export declare const SELECTION_BLUE = "#3b82f6";
|
|
7
|
+
export declare const COLOR_PALETTE: string[];
|
|
8
|
+
export declare const FONT_SIZE_OPTIONS: number[];
|
|
9
|
+
export declare const THICKNESS_OPTIONS: number[];
|
|
10
|
+
export declare const OPACITY_OPTIONS: number[];
|
|
11
|
+
export declare const RADIUS_OPTIONS: number[];
|
|
12
|
+
export declare const ELEMENT_BODIES: Record<string, string>;
|
|
13
|
+
export declare const COLOR_OPTIONS: {
|
|
14
|
+
id: string;
|
|
15
|
+
name: string;
|
|
16
|
+
color: string;
|
|
17
|
+
textColor: string;
|
|
18
|
+
}[];
|
|
19
|
+
export type ShapeType = "rectangle" | "roundedRectangle" | "circle" | "triangle";
|
|
20
|
+
export type TextAlign = "left" | "center" | "right" | "justify";
|
|
21
|
+
export interface ShapeElementState {
|
|
22
|
+
type: ShapeType;
|
|
23
|
+
fill: string;
|
|
24
|
+
fillOpacity: number;
|
|
25
|
+
stroke: string;
|
|
26
|
+
strokeOpacity: number;
|
|
27
|
+
strokeWidth: number;
|
|
28
|
+
strokeDash?: "5,5" | "2,2";
|
|
29
|
+
borderRadius: number;
|
|
30
|
+
fontSize: number;
|
|
31
|
+
bold: boolean;
|
|
32
|
+
italic: boolean;
|
|
33
|
+
underline: boolean;
|
|
34
|
+
strikethrough: boolean;
|
|
35
|
+
textColor: string;
|
|
36
|
+
align?: TextAlign;
|
|
37
|
+
}
|
|
38
|
+
export declare const defaultShapeState: (type: ShapeType) => ShapeElementState;
|
|
39
|
+
export declare const withOpacity: (color: string, opacityPct: number) => string;
|
|
40
|
+
export declare const shapeBorder: (state: ShapeElementState) => string;
|
|
41
|
+
export declare const stickyGradient: (color: string, opacity?: number) => string;
|
|
42
|
+
export type GridSize = "off" | "small" | "large";
|
|
43
|
+
export declare const GRID_LEVELS: {
|
|
44
|
+
value: GridSize;
|
|
45
|
+
label: string;
|
|
46
|
+
dotSpacing: number | null;
|
|
47
|
+
snapStep: number | null;
|
|
48
|
+
}[];
|
|
49
|
+
export declare const gridLevel: (value: GridSize) => (typeof GRID_LEVELS)[number];
|
|
50
|
+
export interface CanvasElementDef {
|
|
51
|
+
id: string;
|
|
52
|
+
kind: "shape" | "sticky";
|
|
53
|
+
initialType?: ShapeType;
|
|
54
|
+
x: number;
|
|
55
|
+
y: number;
|
|
56
|
+
width: number;
|
|
57
|
+
height: number;
|
|
58
|
+
}
|
|
59
|
+
export declare const CANVAS_ELEMENTS: CanvasElementDef[];
|
|
60
|
+
export declare const INITIAL_SHAPES: Record<string, ShapeElementState>;
|
|
61
|
+
export declare const INITIAL_POSITIONS: Record<string, {
|
|
62
|
+
x: number;
|
|
63
|
+
y: number;
|
|
64
|
+
}>;
|
|
65
|
+
export declare const snapValue: (value: number, step: number | null) => number;
|
|
66
|
+
export declare const StyledCanvasLayer: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
67
|
+
export declare const StyledCanvasElement: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
68
|
+
export declare const StyledSticky: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
69
|
+
export declare const StyledHandles: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
70
|
+
export declare const RESIZE_DIRECTIONS: string[];
|
|
71
|
+
export declare const ResizeHandles: () => ReactElement;
|
|
72
|
+
export declare const StyledFormattingToolbar: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
73
|
+
export declare const StyledToolbarButton: import("styled-components").StyledComponent<"button", any, {}, never>;
|
|
74
|
+
export declare const StyledToolbarLink: import("styled-components").StyledComponent<"a", any, {}, never>;
|
|
75
|
+
export declare const StyledFontSizeValue: import("styled-components").StyledComponent<"span", any, {}, never>;
|
|
76
|
+
export declare const stopClick: (event: React.MouseEvent) => void;
|
|
77
|
+
export declare const SUBMENU_SHADOW = "0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)";
|
|
78
|
+
export declare const StyledColorPopover: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
79
|
+
export declare const WHEEL_SIZE = 200;
|
|
80
|
+
export declare const WHEEL_RADIUS: number;
|
|
81
|
+
export declare const StyledColorWheel: import("styled-components").StyledComponent<"button", any, {}, never>;
|
|
82
|
+
export interface ColorWheelProps {
|
|
83
|
+
onColorChange: (color: string) => void;
|
|
84
|
+
}
|
|
85
|
+
export declare const ColorWheel: ({ onColorChange, }: ColorWheelProps) => ReactElement;
|
|
86
|
+
export declare const StyledSwatchRow: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
87
|
+
export interface ColorSwatchRowProps {
|
|
88
|
+
selectedColor?: string;
|
|
89
|
+
includeTransparent?: boolean;
|
|
90
|
+
onSelect: (color: string) => void;
|
|
91
|
+
onAddClick: () => void;
|
|
92
|
+
}
|
|
93
|
+
export declare const ColorSwatchRow: ({ selectedColor, includeTransparent, onSelect, onAddClick, }: ColorSwatchRowProps) => ReactElement;
|
|
94
|
+
export declare const SHAPE_TYPE_ICON: Record<ShapeType, ReactElement>;
|
|
95
|
+
export declare const SHAPE_TYPE_OPTIONS: {
|
|
96
|
+
type: ShapeType;
|
|
97
|
+
label: string;
|
|
98
|
+
}[];
|
|
99
|
+
export declare const BORDER_STYLE_OPTIONS: {
|
|
100
|
+
value?: ShapeElementState["strokeDash"];
|
|
101
|
+
label: string;
|
|
102
|
+
}[];
|
|
103
|
+
export interface ToolbarActionsProps {
|
|
104
|
+
locked: boolean;
|
|
105
|
+
onToggleLock: () => void;
|
|
106
|
+
onDelete: () => void;
|
|
107
|
+
}
|
|
108
|
+
export declare const ToolbarActions: ({ locked, onToggleLock, onDelete, }: ToolbarActionsProps) => ReactElement;
|
|
109
|
+
export interface ToolbarShapeTypeMenuProps {
|
|
110
|
+
value: ShapeType;
|
|
111
|
+
onChange: (type: ShapeType) => void;
|
|
112
|
+
}
|
|
113
|
+
export declare const ShapeTypeMenu: ({ value, onChange, }: ToolbarShapeTypeMenuProps) => ReactElement;
|
|
114
|
+
export interface ToolbarAlignmentMenuProps {
|
|
115
|
+
value: TextAlign;
|
|
116
|
+
onChange: (align: TextAlign) => void;
|
|
117
|
+
disabled?: boolean;
|
|
118
|
+
}
|
|
119
|
+
export declare const AlignmentMenu: ({ value, onChange, disabled, }: ToolbarAlignmentMenuProps) => ReactElement;
|
|
120
|
+
export interface ToolbarColorSwatchProps {
|
|
121
|
+
value: string;
|
|
122
|
+
includeTransparent?: boolean;
|
|
123
|
+
label: string;
|
|
124
|
+
onChange: (color: string) => void;
|
|
125
|
+
}
|
|
126
|
+
export declare const ToolbarColorSwatch: ({ value, includeTransparent, label, onChange, }: ToolbarColorSwatchProps) => ReactElement;
|
|
127
|
+
export interface ToolbarTextControlsProps {
|
|
128
|
+
fontSize: number;
|
|
129
|
+
styleFlags: {
|
|
130
|
+
bold: boolean;
|
|
131
|
+
italic: boolean;
|
|
132
|
+
underline: boolean;
|
|
133
|
+
strikethrough: boolean;
|
|
134
|
+
};
|
|
135
|
+
align: TextAlign;
|
|
136
|
+
onFontSize: (size: number) => void;
|
|
137
|
+
onToggleStyle: (key: TextStyleKey) => void;
|
|
138
|
+
onAlign: (align: TextAlign) => void;
|
|
139
|
+
}
|
|
140
|
+
export declare const ToolbarTextControls: ({ fontSize, styleFlags, align, onFontSize, onToggleStyle, onAlign, }: ToolbarTextControlsProps) => ReactElement;
|
|
141
|
+
export interface ShapeFormattingToolbarProps {
|
|
142
|
+
element: ShapeElementState;
|
|
143
|
+
onUpdate: (partial: Partial<ShapeElementState>) => void;
|
|
144
|
+
onDelete: () => void;
|
|
145
|
+
locked: boolean;
|
|
146
|
+
onToggleLock: () => void;
|
|
147
|
+
}
|
|
148
|
+
export declare const ShapeFormattingToolbar: ({ element, onUpdate, onDelete, locked, onToggleLock, }: ShapeFormattingToolbarProps) => ReactElement;
|
|
149
|
+
export interface StickyTextStyle {
|
|
150
|
+
fontSize: number;
|
|
151
|
+
bold: boolean;
|
|
152
|
+
italic: boolean;
|
|
153
|
+
strikethrough: boolean;
|
|
154
|
+
underline: boolean;
|
|
155
|
+
align: TextAlign;
|
|
156
|
+
textColor: string;
|
|
157
|
+
color: string;
|
|
158
|
+
fillOpacity: number;
|
|
159
|
+
}
|
|
160
|
+
export interface PostitFormattingToolbarProps {
|
|
161
|
+
value: StickyTextStyle;
|
|
162
|
+
onChange: (next: StickyTextStyle) => void;
|
|
163
|
+
onDelete: () => void;
|
|
164
|
+
locked: boolean;
|
|
165
|
+
onToggleLock: () => void;
|
|
166
|
+
}
|
|
167
|
+
export declare const PostitFormattingToolbar: ({ value, onChange, onDelete, locked, onToggleLock, }: PostitFormattingToolbarProps) => ReactElement;
|
|
168
|
+
export declare const renderShapeBody: (def: CanvasElementDef, state: ShapeElementState, width?: number, height?: number) => ReactElement;
|
|
169
|
+
export declare const ALIGN_OPTIONS: {
|
|
170
|
+
value: TextAlign;
|
|
171
|
+
label: string;
|
|
172
|
+
icon: ReactElement;
|
|
173
|
+
}[];
|
|
174
|
+
export type TextStyleKey = "bold" | "italic" | "underline" | "strikethrough";
|
|
175
|
+
export declare const STYLE_OPTIONS: {
|
|
176
|
+
key: TextStyleKey;
|
|
177
|
+
label: string;
|
|
178
|
+
icon: ReactElement;
|
|
179
|
+
}[];
|
|
180
|
+
//# sourceMappingURL=elements.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elements.d.ts","sourceRoot":"","sources":["../../../../src/presentation/whiteboard/elements.tsx"],"names":[],"mappings":"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"}
|