@snowcone-app/canvas 0.1.0

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 (370) hide show
  1. package/LICENSE.txt +70 -0
  2. package/README.md +357 -0
  3. package/dist/CanvasStateV1-D5GzvmnY.cjs +65 -0
  4. package/dist/CanvasStateV1-D5GzvmnY.cjs.map +1 -0
  5. package/dist/CanvasStateV1-ejb4d_LM.js +3692 -0
  6. package/dist/CanvasStateV1-ejb4d_LM.js.map +1 -0
  7. package/dist/ElementFactory-B7UOaJSD.cjs +23865 -0
  8. package/dist/ElementFactory-B7UOaJSD.cjs.map +1 -0
  9. package/dist/ElementFactory-uJTXU-nP.js +29615 -0
  10. package/dist/ElementFactory-uJTXU-nP.js.map +1 -0
  11. package/dist/HybridHistoryManager-BV6XV0nD.js +8048 -0
  12. package/dist/HybridHistoryManager-BV6XV0nD.js.map +1 -0
  13. package/dist/HybridHistoryManager-BXD93pp8.cjs +8 -0
  14. package/dist/HybridHistoryManager-BXD93pp8.cjs.map +1 -0
  15. package/dist/ImportManager-BYwuK6n4.cjs +2 -0
  16. package/dist/ImportManager-BYwuK6n4.cjs.map +1 -0
  17. package/dist/ImportManager-CxiaRg1N.js +222 -0
  18. package/dist/ImportManager-CxiaRg1N.js.map +1 -0
  19. package/dist/ThemeContext-4mJ_y0Me.cjs +2 -0
  20. package/dist/ThemeContext-4mJ_y0Me.cjs.map +1 -0
  21. package/dist/ThemeContext-H0Z-MqqR.js +1077 -0
  22. package/dist/ThemeContext-H0Z-MqqR.js.map +1 -0
  23. package/dist/advanced.d.ts +2 -0
  24. package/dist/advanced.js +48 -0
  25. package/dist/advanced.js.map +1 -0
  26. package/dist/advanced.mjs +15679 -0
  27. package/dist/advanced.mjs.map +1 -0
  28. package/dist/api/advanced.d.ts +110 -0
  29. package/dist/api/internals.d.ts +39 -0
  30. package/dist/api/stable.d.ts +44 -0
  31. package/dist/api/testing.d.ts +25 -0
  32. package/dist/browser-module-D0gHY9rY.cjs +9 -0
  33. package/dist/browser-module-D0gHY9rY.cjs.map +1 -0
  34. package/dist/browser-module-DFvKXBUE.js +15474 -0
  35. package/dist/browser-module-DFvKXBUE.js.map +1 -0
  36. package/dist/components/ArtboardDistressPanel.d.ts +7 -0
  37. package/dist/components/ArtboardImageMaskPanel.d.ts +7 -0
  38. package/dist/components/ArtboardPropertiesToolbar.d.ts +19 -0
  39. package/dist/components/ArtboardToolbar.d.ts +10 -0
  40. package/dist/components/BackButton.d.ts +7 -0
  41. package/dist/components/BackgroundPickerDropdown.d.ts +11 -0
  42. package/dist/components/BackgroundSwitcher.d.ts +7 -0
  43. package/dist/components/CanvasA11yFallback.d.ts +62 -0
  44. package/dist/components/CanvasEditor/CanvasRendererComponent.d.ts +51 -0
  45. package/dist/components/CanvasEditor/handlers/cropModeHandlers.d.ts +114 -0
  46. package/dist/components/CanvasEditor/handlers/groupChildHandlers.d.ts +65 -0
  47. package/dist/components/CanvasEditor/handlers/index.d.ts +10 -0
  48. package/dist/components/CanvasEditor/handlers/multiSelectionHandlers.d.ts +86 -0
  49. package/dist/components/CanvasEditor/hooks/buildSpreadClipShape.d.ts +20 -0
  50. package/dist/components/CanvasEditor/hooks/index.d.ts +24 -0
  51. package/dist/components/CanvasEditor/hooks/useActiveChild.d.ts +23 -0
  52. package/dist/components/CanvasEditor/hooks/useAnimatedFocusRect.d.ts +17 -0
  53. package/dist/components/CanvasEditor/hooks/useCanvasInteraction.d.ts +284 -0
  54. package/dist/components/CanvasEditor/hooks/useCanvasLayout.d.ts +50 -0
  55. package/dist/components/CanvasEditor/hooks/useCanvasRenderLoop.d.ts +140 -0
  56. package/dist/components/CanvasEditor/hooks/useCropMode.d.ts +4 -0
  57. package/dist/components/CanvasEditor/hooks/useHoverState.d.ts +9 -0
  58. package/dist/components/CanvasEditor/hooks/useInteractionState.d.ts +23 -0
  59. package/dist/components/CanvasEditor/hooks/useKeyboardHandlers.d.ts +16 -0
  60. package/dist/components/CanvasEditor/hooks/useMarqueeSelection.d.ts +22 -0
  61. package/dist/components/CanvasEditor/hooks/useMultiSelection.d.ts +5 -0
  62. package/dist/components/CanvasEditor/hooks/usePenTool.d.ts +10 -0
  63. package/dist/components/CanvasEditor/hooks/useRenderState.d.ts +31 -0
  64. package/dist/components/CanvasEditor/hooks/useSnapAndSpacing.d.ts +42 -0
  65. package/dist/components/CanvasEditor/hooks/useTextEditing.d.ts +56 -0
  66. package/dist/components/CanvasEditor/hooks/useTextEditingHandlers.d.ts +75 -0
  67. package/dist/components/CanvasEditor/renderers/hoverRenderer.d.ts +12 -0
  68. package/dist/components/CanvasEditor/renderers/index.d.ts +10 -0
  69. package/dist/components/CanvasEditor/renderers/marqueeRenderer.d.ts +21 -0
  70. package/dist/components/CanvasEditor/renderers/multiSelectionRenderer.d.ts +52 -0
  71. package/dist/components/CanvasEditor/renderers/renderingConstants.d.ts +59 -0
  72. package/dist/components/CanvasEditor/types/index.d.ts +11 -0
  73. package/dist/components/CanvasEditor.d.ts +102 -0
  74. package/dist/components/ColorPickerDropdown.d.ts +29 -0
  75. package/dist/components/CompositingPanel.d.ts +8 -0
  76. package/dist/components/ContextualToolbars.d.ts +150 -0
  77. package/dist/components/CropPanel.d.ts +20 -0
  78. package/dist/components/DistressPanel.d.ts +7 -0
  79. package/dist/components/DocsPage.d.ts +6 -0
  80. package/dist/components/Drawer.d.ts +39 -0
  81. package/dist/components/EffectsPanel.d.ts +14 -0
  82. package/dist/components/ExportTestPanel.d.ts +16 -0
  83. package/dist/components/FontBrowserDrawer.d.ts +20 -0
  84. package/dist/components/FontSizeDropdown.d.ts +12 -0
  85. package/dist/components/GlyphBrowserDrawer.d.ts +13 -0
  86. package/dist/components/GlyphPicker.d.ts +14 -0
  87. package/dist/components/IconMatchTest.d.ts +3 -0
  88. package/dist/components/IconSizeTest.d.ts +3 -0
  89. package/dist/components/ImageBrowserDrawer.d.ts +27 -0
  90. package/dist/components/ImageToolbar.d.ts +47 -0
  91. package/dist/components/LayerEffects.d.ts +11 -0
  92. package/dist/components/LayerLeadingChip.d.ts +9 -0
  93. package/dist/components/LayersPanel.d.ts +30 -0
  94. package/dist/components/MaskItem.d.ts +12 -0
  95. package/dist/components/MasksPanel.d.ts +7 -0
  96. package/dist/components/MonotypeDemoPage.d.ts +2 -0
  97. package/dist/components/MoreMenu.d.ts +15 -0
  98. package/dist/components/OpenTypeFeaturesPanel.d.ts +12 -0
  99. package/dist/components/PathToolbar.d.ts +10 -0
  100. package/dist/components/PenToolDemo.d.ts +3 -0
  101. package/dist/components/ProgressiveBlur.d.ts +25 -0
  102. package/dist/components/RotationHandle.d.ts +47 -0
  103. package/dist/components/SaveLoadMenu.d.ts +15 -0
  104. package/dist/components/ShapeToolbar.d.ts +71 -0
  105. package/dist/components/ShapeTypeDrawer.d.ts +10 -0
  106. package/dist/components/StrokePanel.d.ts +7 -0
  107. package/dist/components/TailwindDemo.d.ts +3 -0
  108. package/dist/components/TextEffectsDropdown.d.ts +14 -0
  109. package/dist/components/TextToolbar.d.ts +47 -0
  110. package/dist/components/TextTypeDrawer.d.ts +8 -0
  111. package/dist/components/ThemeToggle.d.ts +2 -0
  112. package/dist/components/TransformControlPanel.d.ts +12 -0
  113. package/dist/components/VisualGuideOverlay.d.ts +156 -0
  114. package/dist/components/embed/ArtboardTabs.d.ts +74 -0
  115. package/dist/components/embed/Canvas.d.ts +72 -0
  116. package/dist/components/embed/EffectsPanel.d.ts +76 -0
  117. package/dist/components/embed/ErrorBoundary.d.ts +34 -0
  118. package/dist/components/embed/ExportPanel.d.ts +51 -0
  119. package/dist/components/embed/GlyphPanel.d.ts +70 -0
  120. package/dist/components/embed/ImagePanel.d.ts +58 -0
  121. package/dist/components/embed/LayersPanel.d.ts +13 -0
  122. package/dist/components/embed/LoadingStates.d.ts +32 -0
  123. package/dist/components/embed/MenuButton.d.ts +47 -0
  124. package/dist/components/embed/SnowconeCanvas.d.ts +844 -0
  125. package/dist/components/embed/ZoomControls.d.ts +16 -0
  126. package/dist/components/embed/index.d.ts +129 -0
  127. package/dist/components/embed/primitives/index.d.ts +42 -0
  128. package/dist/components/embed/ui/index.d.ts +52 -0
  129. package/dist/components/embed/utils/index.d.ts +31 -0
  130. package/dist/components/embedded/ArtboardEmbed.d.ts +70 -0
  131. package/dist/components/embedded/MerchifyThemeWrapper.d.ts +30 -0
  132. package/dist/components/embedded/ProductPreviewCard.d.ts +8 -0
  133. package/dist/components/embedded/index.d.ts +7 -0
  134. package/dist/components/primitives/ButtonGroup.d.ts +27 -0
  135. package/dist/components/primitives/ControlGroup.d.ts +15 -0
  136. package/dist/components/primitives/Dropdown.d.ts +27 -0
  137. package/dist/components/primitives/DropdownMenu.d.ts +9 -0
  138. package/dist/components/primitives/MenuItem.d.ts +13 -0
  139. package/dist/components/primitives/Panel.d.ts +25 -0
  140. package/dist/components/primitives/SecondaryToolbar.d.ts +9 -0
  141. package/dist/components/primitives/Switch.d.ts +10 -0
  142. package/dist/components/primitives/Toggle.d.ts +17 -0
  143. package/dist/components/primitives/index.d.ts +22 -0
  144. package/dist/components/stories/utils/MockEditorProvider.d.ts +32 -0
  145. package/dist/components/stories/utils/QACanvasCard.d.ts +41 -0
  146. package/dist/components/stories/utils/VisualQACard.d.ts +24 -0
  147. package/dist/components/stories/utils/element-factories.d.ts +188 -0
  148. package/dist/components/stories/utils/spec-to-elements.d.ts +74 -0
  149. package/dist/components/stories/utils/themeDecorator.d.ts +45 -0
  150. package/dist/components/stories/utils/unified-test-cases.d.ts +27 -0
  151. package/dist/components/text-toolbar/BoldButton.d.ts +5 -0
  152. package/dist/components/text-toolbar/FontColorButton.d.ts +6 -0
  153. package/dist/components/text-toolbar/FontSizeGroup.d.ts +5 -0
  154. package/dist/components/text-toolbar/ItalicButton.d.ts +5 -0
  155. package/dist/components/text-toolbar/TextAlignButton.d.ts +5 -0
  156. package/dist/components/text-toolbar/TextMoreMenu.d.ts +7 -0
  157. package/dist/components/text-toolbar/UnderlineButton.d.ts +5 -0
  158. package/dist/components/text-toolbar/UppercaseButton.d.ts +5 -0
  159. package/dist/components/text-toolbar/index.d.ts +25 -0
  160. package/dist/components/toolbars/EmbeddedToolbarLayout.d.ts +49 -0
  161. package/dist/components/toolbars/ExpandedPanelIcon.d.ts +13 -0
  162. package/dist/components/toolbars/FloatingPanels.d.ts +23 -0
  163. package/dist/components/toolbars/GroupElementToolbar.d.ts +35 -0
  164. package/dist/components/toolbars/SecondaryPanels.d.ts +125 -0
  165. package/dist/components/toolbars/index.d.ts +18 -0
  166. package/dist/components/toolbars/shared/ColorPanelWrapper.d.ts +9 -0
  167. package/dist/components/toolbars/shared/SecondaryPanelWrapper.d.ts +9 -0
  168. package/dist/components/ui/PresetCarousel.d.ts +21 -0
  169. package/dist/components/ui/SecondaryPanel.d.ts +28 -0
  170. package/dist/components/ui/SliderRow.d.ts +30 -0
  171. package/dist/components/ui/collapsed-toolbar-header.d.ts +14 -0
  172. package/dist/components/ui/custom-icons.d.ts +25 -0
  173. package/dist/components/ui/icons.d.ts +100 -0
  174. package/dist/components/ui/index.d.ts +48 -0
  175. package/dist/components/ui/normalized-icon.d.ts +63 -0
  176. package/dist/components/ui/toolbar-button.d.ts +24 -0
  177. package/dist/compose-Bo108juW.cjs +33 -0
  178. package/dist/compose-Bo108juW.cjs.map +1 -0
  179. package/dist/compose-DQ1FZS3O.js +7690 -0
  180. package/dist/compose-DQ1FZS3O.js.map +1 -0
  181. package/dist/constants.d.ts +121 -0
  182. package/dist/contexts/CommandContext.d.ts +87 -0
  183. package/dist/contexts/EditorContext.d.ts +190 -0
  184. package/dist/contexts/ElementsContext.d.ts +104 -0
  185. package/dist/contexts/HistoryContext.d.ts +60 -0
  186. package/dist/contexts/KitContext.d.ts +50 -0
  187. package/dist/contexts/SelectionContext.d.ts +51 -0
  188. package/dist/contexts/ThemeContext.d.ts +55 -0
  189. package/dist/contexts/ToolStateContext.d.ts +60 -0
  190. package/dist/contexts/ViewportContext.d.ts +87 -0
  191. package/dist/core/AlignmentSnapSystem.d.ts +270 -0
  192. package/dist/core/ArtboardElement.d.ts +106 -0
  193. package/dist/core/ArtboardManager.d.ts +130 -0
  194. package/dist/core/ArtboardRenderer.d.ts +97 -0
  195. package/dist/core/BaseElement.d.ts +94 -0
  196. package/dist/core/CanvasRenderer.d.ts +237 -0
  197. package/dist/core/CommandHistory.d.ts +173 -0
  198. package/dist/core/CoordinateTransform.d.ts +69 -0
  199. package/dist/core/CropModeController.d.ts +90 -0
  200. package/dist/core/EditModeRenderer.d.ts +51 -0
  201. package/dist/core/ElementFactory.d.ts +73 -0
  202. package/dist/core/ElementStore.d.ts +69 -0
  203. package/dist/core/EventBus.d.ts +163 -0
  204. package/dist/core/GeometryUtils.d.ts +247 -0
  205. package/dist/core/GroupElement.d.ts +134 -0
  206. package/dist/core/HoverRenderer.d.ts +103 -0
  207. package/dist/core/HybridHistoryManager.d.ts +137 -0
  208. package/dist/core/ImageCache.d.ts +63 -0
  209. package/dist/core/ImageElement.d.ts +226 -0
  210. package/dist/core/ImageLoadEvents.d.ts +23 -0
  211. package/dist/core/InteractionFeedbackRenderer.d.ts +15 -0
  212. package/dist/core/InteractionStateMachine.d.ts +199 -0
  213. package/dist/core/PathElement.d.ts +84 -0
  214. package/dist/core/PenToolManager.d.ts +112 -0
  215. package/dist/core/PinchHandler.d.ts +32 -0
  216. package/dist/core/ResizeHandler.d.ts +51 -0
  217. package/dist/core/ResizePipeline.d.ts +83 -0
  218. package/dist/core/ResizeUtils.d.ts +17 -0
  219. package/dist/core/RotationAnchorResolver.d.ts +60 -0
  220. package/dist/core/RotationUtils.d.ts +28 -0
  221. package/dist/core/SelectionRenderer.d.ts +24 -0
  222. package/dist/core/ShapeElement.d.ts +121 -0
  223. package/dist/core/SpacingSystem.d.ts +73 -0
  224. package/dist/core/SpatialGrid.d.ts +53 -0
  225. package/dist/core/TextElement.d.ts +80 -0
  226. package/dist/core/TextMetrics.d.ts +117 -0
  227. package/dist/core/Transform.d.ts +158 -0
  228. package/dist/core/TransformConverter.d.ts +16 -0
  229. package/dist/core/TransformHandles.d.ts +55 -0
  230. package/dist/core/artboardReducer.d.ts +46 -0
  231. package/dist/effects/DistressGenerator.d.ts +26 -0
  232. package/dist/effects/DistressTextureCache.d.ts +49 -0
  233. package/dist/effects/distress-presets.d.ts +86 -0
  234. package/dist/effects/distress-textures.d.ts +34 -0
  235. package/dist/effects/distress-utils.d.ts +39 -0
  236. package/dist/effects/mask-presets.d.ts +36 -0
  237. package/dist/fonts/google-fonts.d.ts +48 -0
  238. package/dist/google-fonts.json +1 -0
  239. package/dist/hooks/index.d.ts +42 -0
  240. package/dist/hooks/useArtboards.d.ts +71 -0
  241. package/dist/hooks/useAutoExport.d.ts +66 -0
  242. package/dist/hooks/useBreakpoint.d.ts +53 -0
  243. package/dist/hooks/useCanvasEvents.d.ts +8 -0
  244. package/dist/hooks/useCanvasReady.d.ts +22 -0
  245. package/dist/hooks/useClickOutside.d.ts +3 -0
  246. package/dist/hooks/useCommandHistory.d.ts +39 -0
  247. package/dist/hooks/useCommands.d.ts +47 -0
  248. package/dist/hooks/useContentReady.d.ts +18 -0
  249. package/dist/hooks/useElementById.d.ts +20 -0
  250. package/dist/hooks/useElementByName.d.ts +10 -0
  251. package/dist/hooks/useElementProperties.d.ts +29 -0
  252. package/dist/hooks/useExport.d.ts +89 -0
  253. package/dist/hooks/useImageBinding.d.ts +34 -0
  254. package/dist/hooks/useKeyboardShortcuts.d.ts +13 -0
  255. package/dist/hooks/useLayerDndKit.d.ts +24 -0
  256. package/dist/hooks/useLayerDragDrop.d.ts +58 -0
  257. package/dist/hooks/useLayerPreview.d.ts +31 -0
  258. package/dist/hooks/useLayerSelection.d.ts +76 -0
  259. package/dist/hooks/useLayers.d.ts +91 -0
  260. package/dist/hooks/usePerformance.d.ts +48 -0
  261. package/dist/hooks/useProjectLoader.d.ts +64 -0
  262. package/dist/hooks/useSelectedElement.d.ts +17 -0
  263. package/dist/hooks/useTextBinding.d.ts +26 -0
  264. package/dist/hooks/useTextToolbar.d.ts +61 -0
  265. package/dist/hooks/useViewport.d.ts +46 -0
  266. package/dist/icons/icon-data.d.ts +2 -0
  267. package/dist/icons/registry.d.ts +28 -0
  268. package/dist/index.d.ts +6 -0
  269. package/dist/index.js +2 -0
  270. package/dist/index.js.map +1 -0
  271. package/dist/index.mjs +1138 -0
  272. package/dist/index.mjs.map +1 -0
  273. package/dist/internals.d.ts +2 -0
  274. package/dist/internals.js +2 -0
  275. package/dist/internals.js.map +1 -0
  276. package/dist/internals.mjs +219 -0
  277. package/dist/internals.mjs.map +1 -0
  278. package/dist/kits/compose.d.ts +69 -0
  279. package/dist/kits/index.d.ts +21 -0
  280. package/dist/kits/presets.d.ts +40 -0
  281. package/dist/kits/registry.d.ts +33 -0
  282. package/dist/kits/sections.d.ts +119 -0
  283. package/dist/kits/serialization.d.ts +78 -0
  284. package/dist/kits/types.d.ts +129 -0
  285. package/dist/kits/validation.d.ts +36 -0
  286. package/dist/lib/utils.d.ts +2 -0
  287. package/dist/plugins/ElementTypePlugin.d.ts +90 -0
  288. package/dist/presets/artboard-color-presets.d.ts +22 -0
  289. package/dist/presets/tshirt-presets.d.ts +60 -0
  290. package/dist/rendering/CompositingRenderer.d.ts +33 -0
  291. package/dist/rendering/DistressTextureRenderer.d.ts +39 -0
  292. package/dist/rendering/ElementRenderUtils.d.ts +17 -0
  293. package/dist/rendering/MaskRenderer.d.ts +41 -0
  294. package/dist/rendering/PieceGuideRenderer.d.ts +177 -0
  295. package/dist/rendering/StrokeRenderer.d.ts +24 -0
  296. package/dist/rendering/canvas-renderer.d.ts +18 -0
  297. package/dist/rendering/element-serializer.d.ts +143 -0
  298. package/dist/rendering/image-renderer.d.ts +6 -0
  299. package/dist/rendering/knockout-utils.d.ts +48 -0
  300. package/dist/rendering/mask-utils.d.ts +65 -0
  301. package/dist/rendering/renderer-types.d.ts +79 -0
  302. package/dist/rendering/rich-text-renderer.d.ts +43 -0
  303. package/dist/rendering/serialize-for-server.d.ts +45 -0
  304. package/dist/rendering/shape-renderer.d.ts +6 -0
  305. package/dist/rendering/stroke-utils.d.ts +18 -0
  306. package/dist/rendering/text-renderer.d.ts +71 -0
  307. package/dist/rendering/transform-renderer.d.ts +33 -0
  308. package/dist/services/AutoExportManager.d.ts +107 -0
  309. package/dist/services/falApi.d.ts +63 -0
  310. package/dist/services/nounProjectApi.d.ts +90 -0
  311. package/dist/services/recraftApi.d.ts +65 -0
  312. package/dist/services/runwareApi.d.ts +69 -0
  313. package/dist/state/CanvasStateV1.d.ts +373 -0
  314. package/dist/state/index.d.ts +10 -0
  315. package/dist/style.css +1 -0
  316. package/dist/taco-reference-cropped.jpg +0 -0
  317. package/dist/testing/MockEditorProvider.d.ts +49 -0
  318. package/dist/testing/index.d.ts +25 -0
  319. package/dist/testing/utils.d.ts +128 -0
  320. package/dist/testing.d.ts +2 -0
  321. package/dist/testing.js +2 -0
  322. package/dist/testing.js.map +1 -0
  323. package/dist/testing.mjs +140 -0
  324. package/dist/testing.mjs.map +1 -0
  325. package/dist/textures/glass-frame.svg +32 -0
  326. package/dist/theme.d.ts +99 -0
  327. package/dist/themes/index.d.ts +23 -0
  328. package/dist/transforms/ArchTransform.d.ts +14 -0
  329. package/dist/transforms/AscendTransform.d.ts +14 -0
  330. package/dist/transforms/CircleTransform.d.ts +51 -0
  331. package/dist/transforms/CustomTransform.d.ts +81 -0
  332. package/dist/transforms/FlagTransform.d.ts +14 -0
  333. package/dist/transforms/LeanTransform.d.ts +14 -0
  334. package/dist/transforms/WaveTransform.d.ts +16 -0
  335. package/dist/transforms/defaults.d.ts +33 -0
  336. package/dist/transforms/index.d.ts +10 -0
  337. package/dist/transforms/registry.d.ts +51 -0
  338. package/dist/types/capabilities.d.ts +50 -0
  339. package/dist/types/guards.d.ts +31 -0
  340. package/dist/types/index.d.ts +765 -0
  341. package/dist/types/public.d.ts +31 -0
  342. package/dist/types/react.d.ts +132 -0
  343. package/dist/utils/ArtworkPlacement.d.ts +97 -0
  344. package/dist/utils/ElementPreviewRenderer.d.ts +19 -0
  345. package/dist/utils/ExportManager.d.ts +208 -0
  346. package/dist/utils/FontAnalyzer.d.ts +137 -0
  347. package/dist/utils/GlyphRenderer.d.ts +55 -0
  348. package/dist/utils/GoogleFontsService.d.ts +37 -0
  349. package/dist/utils/ImageLoader.d.ts +124 -0
  350. package/dist/utils/ImportManager.d.ts +72 -0
  351. package/dist/utils/MonotypeCategoryMapping.d.ts +36 -0
  352. package/dist/utils/MonotypeService.d.ts +148 -0
  353. package/dist/utils/PerformanceMonitor.d.ts +54 -0
  354. package/dist/utils/TextureManager.d.ts +60 -0
  355. package/dist/utils/UnifiedFontService.d.ts +117 -0
  356. package/dist/utils/WorkerExportManager.d.ts +185 -0
  357. package/dist/utils/clickProtection.d.ts +39 -0
  358. package/dist/utils/cn.d.ts +4 -0
  359. package/dist/utils/colorConversion.d.ts +101 -0
  360. package/dist/utils/documentColors.d.ts +108 -0
  361. package/dist/utils/featureApplied.d.ts +14 -0
  362. package/dist/utils/google-fonts-loader.d.ts +67 -0
  363. package/dist/utils/logger.d.ts +66 -0
  364. package/dist/utils/selectionPreservation.d.ts +42 -0
  365. package/dist/utils/textCursorUtils.d.ts +39 -0
  366. package/dist/utils/textUtils.d.ts +11 -0
  367. package/dist/workers/export-protocol.d.ts +119 -0
  368. package/dist/workers/export-worker.bundle.string.d.ts +2 -0
  369. package/dist/workers/export-worker.d.ts +5 -0
  370. package/package.json +201 -0
@@ -0,0 +1,130 @@
1
+ import { ArtboardElement } from './ArtboardElement.js';
2
+ import { TextElement } from './TextElement.js';
3
+ import { ImageElement } from './ImageElement.js';
4
+ import { GroupElement } from './GroupElement.js';
5
+ import { ArtboardConfig } from '../types/index.js';
6
+ export declare class ArtboardManager {
7
+ private artboards;
8
+ private elementToArtboard;
9
+ private activeArtboardId;
10
+ constructor();
11
+ /**
12
+ * Create a new artboard
13
+ *
14
+ * NOTE: This method sets the newly created artboard as active. When creating
15
+ * multiple artboards in a loop (e.g., during initialization), the LAST artboard
16
+ * will end up as active. If you need a specific artboard to be active after
17
+ * batch creation, call setActiveArtboard() explicitly afterward.
18
+ *
19
+ * SnowconeCanvas handles this via hasInitialSyncRef - it suppresses onArtboardChange
20
+ * callbacks until the controlled activeArtboard prop has been synced.
21
+ */
22
+ createArtboard(config?: Partial<ArtboardConfig>): ArtboardElement;
23
+ /**
24
+ * Delete an artboard
25
+ * Returns the IDs of elements that were on the artboard
26
+ */
27
+ deleteArtboard(artboardId: string): string[];
28
+ /**
29
+ * Get an artboard by ID
30
+ */
31
+ getArtboard(artboardId: string): ArtboardElement | undefined;
32
+ /**
33
+ * Get all artboards
34
+ */
35
+ getAllArtboards(): ArtboardElement[];
36
+ /**
37
+ * Get artboard IDs
38
+ */
39
+ getArtboardIds(): string[];
40
+ /**
41
+ * Set active artboard
42
+ */
43
+ setActiveArtboard(artboardId: string | null): void;
44
+ /**
45
+ * Get active artboard
46
+ */
47
+ getActiveArtboard(): ArtboardElement | null;
48
+ /**
49
+ * Get active artboard ID
50
+ */
51
+ getActiveArtboardId(): string | null;
52
+ /**
53
+ * Add an element to an artboard
54
+ */
55
+ addElementToArtboard(elementId: string, artboardId: string): boolean;
56
+ /**
57
+ * Remove an element from its artboard
58
+ */
59
+ removeElementFromArtboard(elementId: string): void;
60
+ /**
61
+ * Get the artboard that contains an element
62
+ */
63
+ getArtboardForElement(elementId: string): ArtboardElement | null;
64
+ /**
65
+ * Get artboard ID for an element
66
+ */
67
+ getArtboardIdForElement(elementId: string): string | null;
68
+ /**
69
+ * Get all elements on an artboard
70
+ * Note: Returns element IDs, not actual element objects
71
+ */
72
+ getElementsOnArtboard(artboardId: string): string[];
73
+ /**
74
+ * Find artboard at a point (for selection)
75
+ */
76
+ findArtboardAtPoint(x: number, y: number): ArtboardElement | null;
77
+ /**
78
+ * Find artboard border at point (for resize handles)
79
+ */
80
+ findArtboardBorderAtPoint(x: number, y: number, tolerance?: number): ArtboardElement | null;
81
+ /**
82
+ * Determine which artboard an element should belong to based on position
83
+ */
84
+ findArtboardForPosition(x: number, y: number): ArtboardElement | null;
85
+ /**
86
+ * Update artboard properties
87
+ */
88
+ updateArtboard(artboardId: string, updates: Partial<ArtboardConfig>): boolean;
89
+ /**
90
+ * Rename an artboard
91
+ */
92
+ renameArtboard(artboardId: string, name: string): boolean;
93
+ /**
94
+ * Check if an artboard exists
95
+ */
96
+ hasArtboard(artboardId: string): boolean;
97
+ /**
98
+ * Get artboard count
99
+ */
100
+ getArtboardCount(): number;
101
+ /**
102
+ * Reorder artboards by moving the artboard at fromIndex to toIndex.
103
+ * Preserves Map insertion order by rebuilding the internal Map.
104
+ */
105
+ reorderArtboards(fromIndex: number, toIndex: number): void;
106
+ /**
107
+ * Clear all artboards
108
+ */
109
+ clear(): void;
110
+ /**
111
+ * Serialize to JSON
112
+ */
113
+ toJSON(): {
114
+ artboards: ArtboardConfig[];
115
+ activeArtboardId: string | null;
116
+ };
117
+ /**
118
+ * Load from JSON
119
+ */
120
+ fromJSON(data: {
121
+ artboards: ArtboardConfig[];
122
+ activeArtboardId: string | null;
123
+ }): void;
124
+ /**
125
+ * Validate element-to-artboard mappings
126
+ * Ensures all elements have valid artboard assignments
127
+ */
128
+ validateMappings(elements: (TextElement | ImageElement | GroupElement)[]): void;
129
+ }
130
+ export default ArtboardManager;
@@ -0,0 +1,97 @@
1
+ import { ArtboardElement } from './ArtboardElement.js';
2
+ export interface ArtboardRenderOptions {
3
+ showLabel?: boolean;
4
+ showBorder?: boolean;
5
+ borderColor?: string;
6
+ borderWidth?: number;
7
+ labelFontSize?: number;
8
+ labelColor?: string;
9
+ labelPadding?: number;
10
+ selectedBorderColor?: string;
11
+ selectedBorderWidth?: number;
12
+ showPreviewBackground?: boolean;
13
+ borderRadius?: number;
14
+ }
15
+ export declare class ArtboardRenderer {
16
+ private options;
17
+ constructor(options?: ArtboardRenderOptions);
18
+ /**
19
+ * Render an artboard
20
+ */
21
+ render(ctx: CanvasRenderingContext2D, artboard: ArtboardElement, isSelected?: boolean): void;
22
+ /**
23
+ * Render artboard background
24
+ * Optionally renders preview background color for t-shirt design preview
25
+ * Preview background is NEVER exported - only shown in editor
26
+ * Background is clipped to the artboard's clipShape
27
+ */
28
+ private renderBackground;
29
+ /**
30
+ * Render texture background
31
+ * Renders preset color as base layer, then texture on top
32
+ */
33
+ private renderTextureBackground;
34
+ /**
35
+ * Render a checkerboard pattern for transparent backgrounds
36
+ */
37
+ private renderCheckerboard;
38
+ /**
39
+ * Render artboard border (respects clipShape and borderRadius option)
40
+ */
41
+ private renderBorder;
42
+ /**
43
+ * Render artboard label (name + dimensions)
44
+ */
45
+ private renderLabel;
46
+ /**
47
+ * Render multiple artboards
48
+ */
49
+ renderMultiple(ctx: CanvasRenderingContext2D, artboards: ArtboardElement[], selectedId: string | null): void;
50
+ /**
51
+ * Clip rendering to artboard bounds (respects clipShape)
52
+ * Use this to clip element rendering to stay within artboard
53
+ */
54
+ clipToArtboard(ctx: CanvasRenderingContext2D, artboard: ArtboardElement): void;
55
+ /**
56
+ * Apply clip path based on artboard's clipShape
57
+ * This creates the clip region for the given artboard
58
+ * If borderRadius option is set and no special clipShape, uses rounded rectangle
59
+ */
60
+ applyClipPath(ctx: CanvasRenderingContext2D, artboard: ArtboardElement): void;
61
+ /**
62
+ * Draw a rounded rectangle path
63
+ * Helper method for rounded clip shapes
64
+ */
65
+ private roundedRect;
66
+ /**
67
+ * Restore after clipping
68
+ */
69
+ restoreClip(ctx: CanvasRenderingContext2D): void;
70
+ /**
71
+ * Render artboard outline (for dragging/resizing preview)
72
+ */
73
+ renderOutline(ctx: CanvasRenderingContext2D, x: number, y: number, width: number, height: number, isDragging?: boolean): void;
74
+ /**
75
+ * Render resize handles for artboard
76
+ */
77
+ renderResizeHandles(ctx: CanvasRenderingContext2D, artboard: ArtboardElement): void;
78
+ /**
79
+ * Update options
80
+ */
81
+ setOptions(options: Partial<ArtboardRenderOptions>): void;
82
+ /**
83
+ * Get current options
84
+ */
85
+ getOptions(): ArtboardRenderOptions;
86
+ /**
87
+ * Create export-safe renderer
88
+ * Returns a new renderer instance with preview background disabled
89
+ * Use this when exporting to ensure preview background is never included
90
+ */
91
+ static createForExport(options?: ArtboardRenderOptions): ArtboardRenderer;
92
+ /**
93
+ * Check if preview background would be rendered for given artboard
94
+ */
95
+ willRenderPreviewBackground(artboard: ArtboardElement): boolean;
96
+ }
97
+ export default ArtboardRenderer;
@@ -0,0 +1,94 @@
1
+ import { TransformType, AnyTransformData, BoundingBox, Point, ResizeAnchor, BlendMode, KnockoutConfig, StrokeConfig, MaskDefinition, DistressEffect, BaseElementConfig, TransformStartData } from '../types/index.js';
2
+ /**
3
+ * Reset the ID counter (useful for testing)
4
+ */
5
+ export declare function resetElementIdCounter(): void;
6
+ export declare abstract class BaseElement {
7
+ id: string;
8
+ x: number;
9
+ y: number;
10
+ rotation: number;
11
+ opacity: number;
12
+ transformType: TransformType;
13
+ transformData: AnyTransformData;
14
+ blendMode?: BlendMode;
15
+ knockoutParts?: KnockoutConfig;
16
+ stroke?: StrokeConfig;
17
+ masks?: MaskDefinition[];
18
+ distressEffect?: DistressEffect;
19
+ name?: string;
20
+ visible?: boolean;
21
+ locked?: boolean;
22
+ /** Whether this element clips content below it (derived from blendMode === 'clip') */
23
+ get isClipping(): boolean;
24
+ set isClipping(value: boolean | undefined);
25
+ constructor(config?: Partial<BaseElementConfig>);
26
+ /**
27
+ * Get bounding box in world coordinates
28
+ * Used for transform math (resize, rotation, handles)
29
+ * Must be implemented by subclasses
30
+ */
31
+ abstract getBoundingBox(): BoundingBox;
32
+ /**
33
+ * Get visual bounding box (tight fit around actual rendered content)
34
+ * Used for selection display - should match what user sees
35
+ * Default: same as getBoundingBox(), override for tighter fit
36
+ */
37
+ getVisualBoundingBox(): BoundingBox;
38
+ /**
39
+ * Get rotation anchor point (the point around which element rotates)
40
+ * Default: returns element's position (x, y)
41
+ * Override if rotation should be around a different point
42
+ */
43
+ getRotationAnchor(): Point;
44
+ /**
45
+ * Test if a point hits this element
46
+ * Uses visual bounding box for better user experience
47
+ */
48
+ hitTest(px: number, py: number): boolean;
49
+ /**
50
+ * Render the element
51
+ * Must be implemented by subclasses
52
+ */
53
+ abstract render(ctx: CanvasRenderingContext2D, isSelected?: boolean, isHovered?: boolean): void;
54
+ /**
55
+ * Apply canvas transform (translate, rotate)
56
+ * Common implementation for all elements
57
+ */
58
+ applyCanvasTransform(ctx: CanvasRenderingContext2D): void;
59
+ /**
60
+ * Serialize to JSON
61
+ * Returns base element properties - subclasses should extend this
62
+ */
63
+ toJSON(): BaseElementConfig;
64
+ /**
65
+ * Clone this element
66
+ * Uses toJSON() to serialize and reconstruct
67
+ */
68
+ abstract clone(): BaseElement;
69
+ /**
70
+ * Update position during drag
71
+ */
72
+ move(dx: number, dy: number): void;
73
+ /**
74
+ * Update rotation
75
+ */
76
+ setRotation(newRotation: number): void;
77
+ /**
78
+ * Get enabled resize anchors for this element type
79
+ * Default: all 8 anchors
80
+ * Override in subclasses if needed
81
+ */
82
+ getEnabledAnchors(): ResizeAnchor[];
83
+ /**
84
+ * Handle resize transform
85
+ * Must be implemented by subclasses
86
+ */
87
+ abstract resize(anchor: ResizeAnchor, newWidth: number, newHeight: number, startData: TransformStartData): void | boolean;
88
+ /**
89
+ * Called when transform starts
90
+ * Returns data to be passed to resize()
91
+ */
92
+ getTransformStartData(): TransformStartData;
93
+ }
94
+ export default BaseElement;
@@ -0,0 +1,237 @@
1
+ import { BaseElement } from './BaseElement.js';
2
+ import { TransformHandles } from './TransformHandles.js';
3
+ import { InteractionStateMachine } from './InteractionStateMachine.js';
4
+ import { RichText, SnapGuide, SpacingIndicator, ArtboardDistressTexture, CanvasError, ClipShape } from '../types/index.js';
5
+ interface HoverState {
6
+ type: 'element' | 'resize-handle' | 'rotation-handle' | null;
7
+ data?: BaseElement | null;
8
+ }
9
+ export declare class CanvasRenderer {
10
+ /** Pooled offscreen canvas for clipping content rendering */
11
+ private static _contentCanvas;
12
+ private static _contentCanvasSize;
13
+ /** Pooled offscreen canvas for clipping mask rendering */
14
+ private static _maskCanvas;
15
+ private static _maskCanvasSize;
16
+ /**
17
+ * Get a pooled offscreen canvas for clipping content, only recreating
18
+ * when dimensions change. Eliminates per-frame canvas allocation.
19
+ */
20
+ private static _getContentCanvas;
21
+ /**
22
+ * Get a pooled offscreen canvas for clipping masks, only recreating
23
+ * when dimensions change. Eliminates per-frame canvas allocation.
24
+ */
25
+ private static _getMaskCanvas;
26
+ /**
27
+ * Cached element JSON configs keyed on the elements array reference.
28
+ * toJSON() calls are expensive at 60fps with 20+ elements.
29
+ * Safe to cache because knockout/mask metadata (id, blendMode, knockoutParts, masks)
30
+ * only changes on React state updates, which always produce a new array reference.
31
+ * Interactive operations (drag, resize) mutate element position in-place on the
32
+ * same instances without changing the array reference.
33
+ */
34
+ private static _cachedElementsRef;
35
+ private static _cachedElementConfigs;
36
+ private static _cachedElementMap;
37
+ /** Reusable Set for tracking knockout-rendered IDs — avoids per-frame allocation. */
38
+ private static readonly _knockoutRenderedIds;
39
+ /**
40
+ * Optional callback for render errors. Set by SnowconeCanvas to forward
41
+ * rendering errors to the onError prop. When set, individual element render
42
+ * failures are caught and reported instead of crashing the entire canvas.
43
+ */
44
+ static onRenderError: ((error: CanvasError) => void) | null;
45
+ /**
46
+ * Safely render an element, catching errors so one element's failure
47
+ * doesn't crash the entire canvas render loop.
48
+ */
49
+ private static safeRender;
50
+ /**
51
+ * Helper function to render an element (using actual element instance, not config)
52
+ * Used by knockout rendering system
53
+ */
54
+ private static renderElement;
55
+ /**
56
+ * Apply artboard clip path to the context, respecting clipShape.
57
+ * After calling this, subsequent drawing will be clipped to the artboard shape.
58
+ * Caller must call ctx.beginPath() before this if needed.
59
+ */
60
+ private static applyArtboardClipPath;
61
+ /**
62
+ * Render an element with overflow dimming - parts outside the artboard render at 30% opacity
63
+ * Uses two-pass rendering: first at 30% opacity (overflow), then clipped to artboard at 100% (inside)
64
+ */
65
+ private static renderElementWithOverflowDimming;
66
+ /**
67
+ * Render all elements layer
68
+ * @param showOverflowDimmed When true, element parts outside the artboard render at 30% opacity
69
+ * @param suppressOverflowDim When true, skip the 30% overflow pass even if `showOverflowDimmed`
70
+ * is enabled. Used for piece-guide rendering (ADR-0054) where the boundary's custom path
71
+ * clipShape is the visible design edge — overflow beyond the rectangular artboard reads as
72
+ * a coloured halo rather than useful UX. Selected/hovered elements fall through to the
73
+ * clipped-only branch which respects `clipShape` correctly.
74
+ */
75
+ static renderElementsLayer(ctx: CanvasRenderingContext2D, elements: BaseElement[], selectedId: string | null, hoverState?: HoverState, stateMachine?: InteractionStateMachine, artboardBackgroundColor?: string, artboard?: {
76
+ x: number;
77
+ y: number;
78
+ width: number;
79
+ height: number;
80
+ borderRadius?: number;
81
+ clipShape?: ClipShape;
82
+ }, isPreview?: boolean, showOverflowDimmed?: boolean, suppressOverflowDim?: boolean): void;
83
+ /**
84
+ * Render elements with clipping mask support at artboard level
85
+ * Elements with isClipping=true clip all elements below them
86
+ */
87
+ private static _renderWithClipping;
88
+ /**
89
+ * Render snap guides layer
90
+ * @see InteractionFeedbackRenderer.renderSnapGuidesLayer
91
+ */
92
+ static renderSnapGuidesLayer(ctx: CanvasRenderingContext2D, snapGuides?: SnapGuide[]): void;
93
+ /**
94
+ * Render spacing indicators layer
95
+ * @see InteractionFeedbackRenderer.renderSpacingIndicatorsLayer
96
+ */
97
+ static renderSpacingIndicatorsLayer(ctx: CanvasRenderingContext2D, spacingIndicators?: SpacingIndicator[]): void;
98
+ /**
99
+ * Render a distance label with background
100
+ * @see InteractionFeedbackRenderer.renderDistanceLabel
101
+ */
102
+ static renderDistanceLabel(ctx: CanvasRenderingContext2D, x: number, y: number, distance: number): void;
103
+ /**
104
+ * Render selection box layer
105
+ * @see SelectionRenderer.renderSelectionLayer
106
+ */
107
+ static renderSelectionLayer(ctx: CanvasRenderingContext2D, selectedElement: BaseElement | null, stateMachine: InteractionStateMachine, zoom?: number): void;
108
+ /**
109
+ * Render position and size info below the selected element
110
+ * @see SelectionRenderer.renderPositionSizeInfo
111
+ */
112
+ static renderPositionSizeInfo(ctx: CanvasRenderingContext2D, selectedElement: BaseElement | null, transformHandles: TransformHandles | null, stateMachine: InteractionStateMachine | null, zoom?: number): void;
113
+ /**
114
+ * Render transform handles layer
115
+ * @see SelectionRenderer.renderHandlesLayer
116
+ */
117
+ static renderHandlesLayer(ctx: CanvasRenderingContext2D, selectedElement: BaseElement | null, transformHandles: TransformHandles, currentRotation: number, isRotating: boolean, hoverState: HoverState, stateMachine: InteractionStateMachine, zoom?: number, showRotationHandle?: boolean): void;
118
+ /**
119
+ * Render hover highlights layer with fade-in animation
120
+ * @see HoverRenderer.renderHoverLayer
121
+ */
122
+ static renderHoverLayer(ctx: CanvasRenderingContext2D, hoverState: HoverState, selectedId: string | null, _isAltKeyPressed?: boolean, zoom?: number, artboardBackgroundColor?: string): void;
123
+ /**
124
+ * Render crop box layer (for images in crop mode)
125
+ * @see EditModeRenderer.renderCropBoxLayer
126
+ */
127
+ static renderCropBoxLayer(ctx: CanvasRenderingContext2D, selectedElement: BaseElement, transformHandles: TransformHandles, zoom?: number): void;
128
+ /**
129
+ * Complete rendering pipeline
130
+ * Renders all layers in correct z-order
131
+ */
132
+ static render({ ctx, elements, selectedId, selectedElement, hoverState, isEditing, stateMachine, snapGuides, spacingIndicators, artboardBackgroundColor, artboard, isPreview, zoom, paddingOffset, showOverflowDimmed, suppressOverflowDim, distressTexture, imageMask, editModeData, }: {
133
+ ctx: CanvasRenderingContext2D;
134
+ elements: BaseElement[];
135
+ selectedId: string | null;
136
+ selectedElement: BaseElement | null;
137
+ transformHandles: TransformHandles | null;
138
+ currentRotation: number;
139
+ isRotating: boolean;
140
+ hoverState: HoverState;
141
+ isEditing: boolean;
142
+ stateMachine: InteractionStateMachine | null;
143
+ snapGuides?: SnapGuide[];
144
+ spacingIndicators?: SpacingIndicator[];
145
+ hideHandles?: boolean;
146
+ isAltKeyPressed?: boolean;
147
+ artboardBackgroundColor?: string;
148
+ artboard?: {
149
+ x: number;
150
+ y: number;
151
+ width: number;
152
+ height: number;
153
+ borderRadius?: number;
154
+ clipShape?: ClipShape;
155
+ };
156
+ isPreview?: boolean;
157
+ zoom?: number;
158
+ paddingOffset?: {
159
+ x: number;
160
+ y: number;
161
+ };
162
+ /** When true, element parts outside the artboard render at 30% opacity */
163
+ showOverflowDimmed?: boolean;
164
+ /**
165
+ * When true, skip the 30% overflow-dim pass even if `showOverflowDimmed` is on.
166
+ * Used by ADR-0054 piece-guide rendering: the boundary's custom path clipShape is
167
+ * the visible design edge, so the rectangular-artboard overflow halo reads as
168
+ * coloured noise rather than useful UX. Selected elements fall through to the
169
+ * clipped-only branch, which respects `clipShape` correctly.
170
+ */
171
+ suppressOverflowDim?: boolean;
172
+ /** Whether to show the rotation handle (defaults to true, set false for embedded mode) */
173
+ showRotationHandle?: boolean;
174
+ /** Artboard-level distress texture (applied after elements, before UI layers) */
175
+ distressTexture?: ArtboardDistressTexture;
176
+ /** Artboard-level image mask (applied after distress texture, before UI layers) */
177
+ imageMask?: import('../types/index.js').ArtboardImageMask;
178
+ editModeData?: {
179
+ cursorPosition: number;
180
+ selectionStart: number;
181
+ selectionEnd: number;
182
+ editText: string;
183
+ editRichText: RichText | null;
184
+ cursorOpacity: number;
185
+ };
186
+ }): void;
187
+ /**
188
+ * Single-selection interaction chrome: bbox, handles, position/size
189
+ * info, hover outline, and the crop-mode alt branch. Hoisted out of
190
+ * `render()` so the master render loop can call it *after*
191
+ * `renderPieceGuides`. Otherwise the piece-guide partial die-cut
192
+ * knockout (`destination-out` at alpha 0.7) erases 70% of the
193
+ * chrome's alpha along with the artwork it's intentionally dimming.
194
+ *
195
+ * Renders at native screen scale: identical transform manipulation
196
+ * to the original Layer 2 / 3–6 block in `render()` so chrome stays
197
+ * crisp regardless of canvas zoom.
198
+ */
199
+ static renderInteractionChromeLayer({ ctx, selectedElement, transformHandles, stateMachine, currentRotation, isRotating, hoverState, selectedId, hideHandles, isEditing, isAltKeyPressed, artboardBackgroundColor, hoverClipArtboard, showRotationHandle, zoom, paddingOffset, }: {
200
+ ctx: CanvasRenderingContext2D;
201
+ selectedElement: BaseElement | null;
202
+ transformHandles: TransformHandles | null;
203
+ stateMachine: InteractionStateMachine | null;
204
+ currentRotation: number;
205
+ isRotating: boolean;
206
+ hoverState: HoverState;
207
+ selectedId: string | null;
208
+ hideHandles?: boolean;
209
+ isEditing: boolean;
210
+ isAltKeyPressed?: boolean;
211
+ artboardBackgroundColor?: string;
212
+ /**
213
+ * Optional clip rect (in world coords) confining the hover outline
214
+ * to the visible artboard / piece bounds. Selection chrome ignores
215
+ * this — once the user commits to a selection they want to see the
216
+ * full extent of the element. The hover outline though was reading
217
+ * as noisy when the cursor moved over an element that extended past
218
+ * the piece edge, since the hover ring was drawn into the overflow
219
+ * region on top of the dimmed surrounding canvas.
220
+ */
221
+ hoverClipArtboard?: {
222
+ x: number;
223
+ y: number;
224
+ width: number;
225
+ height: number;
226
+ borderRadius?: number;
227
+ clipShape?: ClipShape;
228
+ };
229
+ showRotationHandle?: boolean;
230
+ zoom?: number;
231
+ paddingOffset?: {
232
+ x: number;
233
+ y: number;
234
+ };
235
+ }): void;
236
+ }
237
+ export {};