@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,765 @@
1
+ /**
2
+ * Comprehensive TypeScript type definitions for custom-canvas
3
+ * Uses discriminated unions for type-safe transform handling
4
+ */
5
+ export type TransformType = 'custom' | 'distort' | 'circle' | 'lean' | 'arch' | 'ascend' | 'wave' | 'flag' | 'image' | 'group' | 'artboard' | 'shape' | 'path';
6
+ export interface BoundingBox {
7
+ x: number;
8
+ y: number;
9
+ width: number;
10
+ height: number;
11
+ }
12
+ export interface Point {
13
+ x: number;
14
+ y: number;
15
+ }
16
+ export type ResizeAnchor = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'top' | 'bottom' | 'left' | 'right' | 'middle-left' | 'middle-right' | 'middle-top' | 'middle-bottom';
17
+ export type TextAlign = 'left' | 'center' | 'right';
18
+ export interface CustomTransformData {
19
+ type: 'custom';
20
+ controlPoints: Point[];
21
+ /** Container width for text wrapping */
22
+ width: number;
23
+ }
24
+ export interface DistortTransformData {
25
+ type: 'distort';
26
+ [key: string]: unknown;
27
+ }
28
+ export interface CircleTransformData {
29
+ type: 'circle';
30
+ radius: number;
31
+ scale: number;
32
+ reverse: boolean;
33
+ }
34
+ export interface LeanTransformData {
35
+ type: 'lean';
36
+ leanAmount: number;
37
+ /** Container width for text layout */
38
+ width: number;
39
+ }
40
+ export interface ArchTransformData {
41
+ type: 'arch';
42
+ archHeight: number;
43
+ /** Container width for text layout */
44
+ width: number;
45
+ }
46
+ export interface AscendTransformData {
47
+ type: 'ascend';
48
+ ascendAngle: number;
49
+ /** Container width for text layout */
50
+ width: number;
51
+ }
52
+ export interface WaveTransformData {
53
+ type: 'wave';
54
+ amplitude: number;
55
+ frequency: number;
56
+ /** Container width for text layout */
57
+ width: number;
58
+ }
59
+ export interface FlagTransformData {
60
+ type: 'flag';
61
+ amplitude: number;
62
+ frequency: number;
63
+ /** Container width for text layout */
64
+ width: number;
65
+ }
66
+ export interface ImageTransformData {
67
+ type: 'image';
68
+ width: number;
69
+ height: number;
70
+ cropX: number;
71
+ cropY: number;
72
+ cropWidth: number;
73
+ cropHeight: number;
74
+ flipHorizontal: boolean;
75
+ flipVertical: boolean;
76
+ borderRadius: number;
77
+ }
78
+ export interface GroupTransformData {
79
+ type: 'group';
80
+ }
81
+ export interface ArtboardTransformData {
82
+ type: 'artboard';
83
+ }
84
+ export type ShapeType = 'rectangle' | 'circle' | 'ellipse' | 'triangle' | 'polygon' | 'star' | 'line';
85
+ export interface ShapeTransformData {
86
+ type: 'shape';
87
+ shapeType: ShapeType;
88
+ width: number;
89
+ height: number;
90
+ borderRadius?: number;
91
+ radiusX?: number;
92
+ radiusY?: number;
93
+ sides?: number;
94
+ points?: number;
95
+ innerRadius?: number;
96
+ fillColor?: string;
97
+ fillOpacity?: number;
98
+ }
99
+ /**
100
+ * Path point types define how curve handles behave
101
+ */
102
+ export type PathPointType = 'corner' | 'smooth' | 'bezier';
103
+ /**
104
+ * A single point in a path with optional bezier control handles
105
+ * All coordinates are relative to the path element's position
106
+ */
107
+ export interface PathPoint {
108
+ id: string;
109
+ x: number;
110
+ y: number;
111
+ type: PathPointType;
112
+ handleIn?: Point;
113
+ handleOut?: Point;
114
+ }
115
+ /**
116
+ * Transform data for custom path elements
117
+ */
118
+ export interface PathTransformData {
119
+ type: 'path';
120
+ points: PathPoint[];
121
+ closed: boolean;
122
+ width: number;
123
+ height: number;
124
+ fillEnabled?: boolean;
125
+ fillColor?: string;
126
+ fillOpacity?: number;
127
+ strokeEnabled?: boolean;
128
+ strokeColor?: string;
129
+ strokeWidth?: number;
130
+ }
131
+ export type AnyTransformData = CustomTransformData | DistortTransformData | CircleTransformData | LeanTransformData | ArchTransformData | AscendTransformData | WaveTransformData | FlagTransformData | ImageTransformData | GroupTransformData | ArtboardTransformData | ShapeTransformData | PathTransformData;
132
+ export interface TransformStartData {
133
+ id: string;
134
+ x: number;
135
+ y: number;
136
+ rotation: number;
137
+ transformData: Record<string, any>;
138
+ width?: number;
139
+ height?: number;
140
+ fontSize?: number;
141
+ richText?: unknown;
142
+ lineCount?: number;
143
+ visualX?: number;
144
+ visualY?: number;
145
+ visualWidth?: number;
146
+ visualHeight?: number;
147
+ bboxX?: number;
148
+ bboxY?: number;
149
+ cropX?: number;
150
+ cropY?: number;
151
+ cropWidth?: number;
152
+ cropHeight?: number;
153
+ strokeWidth?: number;
154
+ childrenStartData?: TransformStartData[];
155
+ [key: string]: unknown;
156
+ }
157
+ export type BlendMode = 'normal' | 'knockout' | 'clip';
158
+ export type CompositingScope = 'group' | 'artboard';
159
+ export type KnockoutScope = CompositingScope;
160
+ export interface CompositingConfig {
161
+ fill?: boolean;
162
+ stroke?: boolean;
163
+ scope?: CompositingScope;
164
+ }
165
+ export type KnockoutConfig = CompositingConfig;
166
+ export interface StrokeConfig {
167
+ enabled: boolean;
168
+ color: string;
169
+ width: number;
170
+ dashArray?: number[];
171
+ lineCap?: 'butt' | 'round' | 'square';
172
+ lineJoin?: 'miter' | 'round' | 'bevel';
173
+ miterLimit?: number;
174
+ opacity?: number;
175
+ feather?: number;
176
+ }
177
+ /**
178
+ * Rendering context metadata passed to renderers
179
+ * Used to customize rendering behavior for specific contexts (e.g., knockout, export, preview)
180
+ */
181
+ export interface RenderingContext {
182
+ /** True when rendering for knockout compositing (affects stroke color/opacity) */
183
+ isKnockout?: boolean;
184
+ /** True when rendering for export (may skip certain preview-only features) */
185
+ isExport?: boolean;
186
+ /** True when rendering for mask application */
187
+ isMask?: boolean;
188
+ /** True when the caller has already applied element positioning (translate/rotate) */
189
+ positionApplied?: boolean;
190
+ }
191
+ export type MaskType = 'clip' | 'alpha' | 'luma' | 'distress';
192
+ export interface MaskDefinition {
193
+ id: string;
194
+ type: MaskType;
195
+ maskElement: AnyElementConfig;
196
+ inverted?: boolean;
197
+ feather?: number;
198
+ opacity?: number;
199
+ blendMode?: string;
200
+ }
201
+ export type DistressStyle = 'worn' | 'cracked' | 'grunge' | 'retro' | 'custom';
202
+ export interface DistressEffect {
203
+ enabled: boolean;
204
+ style: DistressStyle;
205
+ intensity: number;
206
+ fadeAmount?: number;
207
+ grainAmount?: number;
208
+ scratchAmount?: number;
209
+ edgeWear?: number;
210
+ textureUrl?: string;
211
+ textureOpacity?: number;
212
+ textureBlendMode?: 'multiply' | 'screen' | 'overlay';
213
+ seed?: number;
214
+ }
215
+ /**
216
+ * Per-character glyph override
217
+ * Allows substituting specific characters with alternate glyphs from the font
218
+ */
219
+ export interface GlyphOverride {
220
+ /** Index of the character in the text string */
221
+ charIndex: number;
222
+ /** Glyph index in the font file */
223
+ glyphIndex: number;
224
+ /** Unicode codepoint of the original character */
225
+ unicode: string;
226
+ /** Human-readable name of the alternate (e.g., "Swash A", "Fancy G") */
227
+ alternateName?: string;
228
+ }
229
+ /**
230
+ * OpenType feature settings for advanced typography
231
+ * Features are applied globally to the entire text element
232
+ */
233
+ export interface OpenTypeFeatures {
234
+ /** Standard ligatures (fi, fl, etc.) */
235
+ liga?: boolean;
236
+ /** Discretionary ligatures (ct, st, etc.) */
237
+ dlig?: boolean;
238
+ /** Contextual alternates */
239
+ calt?: boolean;
240
+ /** Swash alternates */
241
+ swsh?: boolean;
242
+ /** Small capitals */
243
+ smcp?: boolean;
244
+ /** All small capitals */
245
+ c2sc?: boolean;
246
+ /** Oldstyle figures (0-9) */
247
+ onum?: boolean;
248
+ /** Lining figures (0-9) */
249
+ lnum?: boolean;
250
+ /** Tabular figures */
251
+ tnum?: boolean;
252
+ /** Proportional figures */
253
+ pnum?: boolean;
254
+ /** Stylistic sets (ss01-ss20) */
255
+ ss01?: boolean;
256
+ ss02?: boolean;
257
+ ss03?: boolean;
258
+ ss04?: boolean;
259
+ ss05?: boolean;
260
+ ss06?: boolean;
261
+ ss07?: boolean;
262
+ ss08?: boolean;
263
+ ss09?: boolean;
264
+ ss10?: boolean;
265
+ ss11?: boolean;
266
+ ss12?: boolean;
267
+ ss13?: boolean;
268
+ ss14?: boolean;
269
+ ss15?: boolean;
270
+ ss16?: boolean;
271
+ ss17?: boolean;
272
+ ss18?: boolean;
273
+ ss19?: boolean;
274
+ ss20?: boolean;
275
+ /** Character variants (cv01-cv99) - common ones */
276
+ cv01?: boolean;
277
+ cv02?: boolean;
278
+ cv03?: boolean;
279
+ cv04?: boolean;
280
+ cv05?: boolean;
281
+ /** Glyph composition/decomposition */
282
+ ccmp?: boolean;
283
+ /** Localized forms */
284
+ locl?: boolean;
285
+ /** Kerning */
286
+ kern?: boolean;
287
+ /** Mark positioning */
288
+ mark?: boolean;
289
+ /** Mark-to-mark positioning */
290
+ mkmk?: boolean;
291
+ }
292
+ /**
293
+ * Metadata about available glyphs for a specific character
294
+ */
295
+ export interface GlyphAlternate {
296
+ /** Glyph index in the font file */
297
+ glyphIndex: number;
298
+ /** Unicode codepoint this glyph represents */
299
+ unicode: string;
300
+ /** Human-readable name (e.g., "A.swash", "g.alt01") */
301
+ name: string;
302
+ /** Category of alternate (swash, stylistic, etc.) */
303
+ category?: 'default' | 'swash' | 'stylistic' | 'contextual' | 'ligature';
304
+ /** Preview data URL (base64-encoded image) */
305
+ previewDataUrl?: string;
306
+ }
307
+ /**
308
+ * Character-level styling properties
309
+ * Each property is optional - undefined means inherit from element defaults
310
+ */
311
+ export interface CharacterStyle {
312
+ /** Text color (CSS color string) */
313
+ color?: string;
314
+ /** Font family name */
315
+ fontFamily?: string;
316
+ /** Font size in pixels */
317
+ fontSize?: number;
318
+ /** Bold weight */
319
+ bold?: boolean;
320
+ /** Italic style */
321
+ italic?: boolean;
322
+ /** Underline decoration */
323
+ underline?: boolean;
324
+ /** Strikethrough decoration */
325
+ strikethrough?: boolean;
326
+ }
327
+ /**
328
+ * A span of text with uniform styling
329
+ * Used for efficient storage of rich text (avoids per-character arrays)
330
+ */
331
+ export interface TextSpan {
332
+ /** The text content of this span */
333
+ text: string;
334
+ /** Style properties for this span (optional properties inherit from element defaults) */
335
+ style: CharacterStyle;
336
+ }
337
+ /**
338
+ * Rich text data structure with helper methods
339
+ * Stores text as an array of styled spans for efficient rendering
340
+ */
341
+ export declare class RichText {
342
+ spans: TextSpan[];
343
+ constructor(spans?: TextSpan[]);
344
+ /**
345
+ * Create RichText from plain text string (no special formatting)
346
+ */
347
+ static fromPlainText(text: string, style?: CharacterStyle): RichText;
348
+ /**
349
+ * Get the full text content (all spans concatenated)
350
+ */
351
+ getText(): string;
352
+ /**
353
+ * Get the total character count
354
+ */
355
+ getLength(): number;
356
+ /**
357
+ * Get the style at a specific character index
358
+ * @param charIndex Character index (0-based)
359
+ * @returns The style object for the span containing this character
360
+ */
361
+ getStyleAt(charIndex: number): CharacterStyle;
362
+ /**
363
+ * Apply a style to a character range
364
+ * @param start Start index (inclusive)
365
+ * @param end End index (exclusive)
366
+ * @param style Style to apply (merged with existing styles)
367
+ */
368
+ applyStyle(start: number, end: number, style: CharacterStyle): void;
369
+ /**
370
+ * Insert text at a specific position with a given style
371
+ * @param index Character index to insert at
372
+ * @param text Text to insert
373
+ * @param style Style for the inserted text
374
+ */
375
+ insert(index: number, text: string, style: CharacterStyle): void;
376
+ /**
377
+ * Delete text in a character range
378
+ * @param start Start index (inclusive)
379
+ * @param end End index (exclusive)
380
+ */
381
+ delete(start: number, end: number): void;
382
+ /**
383
+ * Normalize spans by:
384
+ * 1. Removing empty spans
385
+ * 2. Merging adjacent spans with identical styles
386
+ * This prevents fragmentation and improves performance
387
+ */
388
+ private normalize;
389
+ /**
390
+ * Check if two styles are equal
391
+ */
392
+ private stylesEqual;
393
+ /**
394
+ * Clone this RichText instance
395
+ */
396
+ clone(): RichText;
397
+ /**
398
+ * Clear a specific style property from all spans.
399
+ * Used when element-level property changes should override character-level.
400
+ * After clearing, spans will inherit the property from element defaults.
401
+ * @param property The style property to clear (e.g., 'fontFamily', 'bold')
402
+ */
403
+ clearStyleProperty(property: keyof CharacterStyle): void;
404
+ /**
405
+ * Serialize to JSON
406
+ */
407
+ toJSON(): {
408
+ spans: TextSpan[];
409
+ };
410
+ /**
411
+ * Deserialize from JSON
412
+ */
413
+ static fromJSON(json: {
414
+ spans: TextSpan[];
415
+ }): RichText;
416
+ }
417
+ export interface BaseElementConfig {
418
+ id?: string;
419
+ x?: number;
420
+ y?: number;
421
+ rotation?: number;
422
+ opacity?: number;
423
+ transformType?: TransformType;
424
+ transformData?: Partial<AnyTransformData>;
425
+ blendMode?: BlendMode;
426
+ knockoutParts?: KnockoutConfig;
427
+ stroke?: StrokeConfig;
428
+ masks?: MaskDefinition[];
429
+ distressEffect?: DistressEffect;
430
+ name?: string;
431
+ visible?: boolean;
432
+ locked?: boolean;
433
+ isClipping?: boolean;
434
+ }
435
+ export interface BaseTextElementConfig extends BaseElementConfig {
436
+ richText?: RichText | {
437
+ spans: TextSpan[];
438
+ };
439
+ text?: string;
440
+ fontSize?: number;
441
+ fontFamily?: string;
442
+ color?: string;
443
+ textAlign?: TextAlign;
444
+ bold?: boolean;
445
+ italic?: boolean;
446
+ underline?: boolean;
447
+ strikethrough?: boolean;
448
+ glyphOverrides?: GlyphOverride[];
449
+ openTypeFeatures?: OpenTypeFeatures;
450
+ }
451
+ export interface CustomElementConfig extends BaseTextElementConfig {
452
+ transformType: 'custom';
453
+ transformData?: Partial<CustomTransformData>;
454
+ }
455
+ export interface DistortElementConfig extends BaseTextElementConfig {
456
+ transformType: 'distort';
457
+ transformData?: Partial<DistortTransformData>;
458
+ }
459
+ export interface CircleElementConfig extends BaseTextElementConfig {
460
+ transformType: 'circle';
461
+ transformData?: Partial<CircleTransformData>;
462
+ }
463
+ export interface LeanElementConfig extends BaseTextElementConfig {
464
+ transformType: 'lean';
465
+ transformData?: Partial<LeanTransformData>;
466
+ }
467
+ export interface ArchElementConfig extends BaseTextElementConfig {
468
+ transformType: 'arch';
469
+ transformData?: Partial<ArchTransformData>;
470
+ }
471
+ export interface AscendElementConfig extends BaseTextElementConfig {
472
+ transformType: 'ascend';
473
+ transformData?: Partial<AscendTransformData>;
474
+ }
475
+ export interface WaveElementConfig extends BaseTextElementConfig {
476
+ transformType: 'wave';
477
+ transformData?: Partial<WaveTransformData>;
478
+ }
479
+ export interface FlagElementConfig extends BaseTextElementConfig {
480
+ transformType: 'flag';
481
+ transformData?: Partial<FlagTransformData>;
482
+ }
483
+ export interface ImageElementConfig extends BaseElementConfig {
484
+ transformType: 'image';
485
+ transformData?: Partial<ImageTransformData>;
486
+ imageUrl?: string;
487
+ imageAspectRatio?: number;
488
+ /**
489
+ * Callback invoked when the image finishes loading.
490
+ *
491
+ * The parameter is an `ImageElement` instance (clone of the loaded element).
492
+ * Import `ImageElement` from `@snowcone-app/canvas/advanced` to narrow the type.
493
+ *
494
+ * @example
495
+ * ```ts
496
+ * import type { ImageElement } from '@snowcone-app/canvas/advanced';
497
+ * const config: ImageElementConfig = {
498
+ * transformType: 'image',
499
+ * onLoadCallback(el) {
500
+ * const img = el as ImageElement;
501
+ * console.log(img.id, img.transformData.width);
502
+ * },
503
+ * };
504
+ * ```
505
+ */
506
+ onLoadCallback?(element: BaseElementConfig & {
507
+ readonly id: string;
508
+ readonly transformType: 'image';
509
+ }): void;
510
+ /**
511
+ * If true, dimensions (width/height) won't be recalculated when the image loads.
512
+ * Use this when you've explicitly calculated dimensions (e.g., for "cover" sizing).
513
+ */
514
+ preserveDimensions?: boolean;
515
+ }
516
+ export interface GroupElementConfig extends BaseElementConfig {
517
+ transformType: 'group';
518
+ transformData?: Partial<GroupTransformData>;
519
+ children?: AnyElementConfig[];
520
+ }
521
+ export interface ShapeElementConfig extends BaseElementConfig {
522
+ transformType: 'shape';
523
+ transformData?: Partial<ShapeTransformData>;
524
+ }
525
+ export interface PathElementConfig extends BaseElementConfig {
526
+ transformType: 'path';
527
+ transformData?: Partial<PathTransformData>;
528
+ }
529
+ export type ArtboardBackgroundType = 'color' | 'transparent' | 'texture';
530
+ export interface ArtboardDistressTexture {
531
+ enabled: boolean;
532
+ textureUrl: string;
533
+ intensity: number;
534
+ }
535
+ export interface ArtboardImageMask {
536
+ enabled: boolean;
537
+ imageUrl: string;
538
+ maskType: 'clip' | 'alpha' | 'luma';
539
+ opacity: number;
540
+ inverted?: boolean;
541
+ }
542
+ export type ClipShape = 'rectangle' | 'circle' | {
543
+ type: 'rounded';
544
+ radius: number;
545
+ } | {
546
+ type: 'path';
547
+ d: string;
548
+ } | {
549
+ type: 'composite-path';
550
+ pieces: Array<{
551
+ d: string;
552
+ x: number;
553
+ y: number;
554
+ rotation?: 0 | 90 | 180 | 270;
555
+ baseWidth?: number;
556
+ baseHeight?: number;
557
+ }>;
558
+ };
559
+ export interface ArtboardConfig {
560
+ id?: string;
561
+ name?: string;
562
+ x?: number;
563
+ y?: number;
564
+ width?: number;
565
+ height?: number;
566
+ backgroundColor?: string;
567
+ backgroundType?: ArtboardBackgroundType;
568
+ backgroundTexture?: string;
569
+ exportBackground?: boolean;
570
+ elementIds?: string[];
571
+ transformType?: 'artboard';
572
+ clipShape?: ClipShape;
573
+ previewBackgroundColor?: string;
574
+ distressTexture?: ArtboardDistressTexture;
575
+ imageMask?: ArtboardImageMask;
576
+ }
577
+ export type AnyElementConfig = CustomElementConfig | DistortElementConfig | CircleElementConfig | LeanElementConfig | ArchElementConfig | AscendElementConfig | WaveElementConfig | FlagElementConfig | ImageElementConfig | GroupElementConfig | ShapeElementConfig | PathElementConfig;
578
+ export type TextOnlyElementConfig = Exclude<AnyElementConfig, ImageElementConfig | ShapeElementConfig | PathElementConfig>;
579
+ export type InteractionMode = 'idle' | 'drag' | 'resize' | 'rotate' | 'crop' | 'pen' | 'edit-path' | 'pinch';
580
+ export interface InteractionContext<T = unknown> {
581
+ mode: InteractionMode;
582
+ startX: number;
583
+ startY: number;
584
+ startData: TransformStartData;
585
+ activeHandle?: ResizeAnchor;
586
+ element: T;
587
+ }
588
+ export interface Command {
589
+ execute(): void;
590
+ undo(): void;
591
+ }
592
+ export interface ElementUpdate<T = unknown> {
593
+ oldElement: T;
594
+ newElement: T;
595
+ }
596
+ export interface MultiElementUpdate<T = unknown> {
597
+ updates: Map<string, ElementUpdate<T>>;
598
+ }
599
+ export type SelectionState = {
600
+ type: 'none';
601
+ } | {
602
+ type: 'single';
603
+ elementId: string;
604
+ } | {
605
+ type: 'multiple';
606
+ elementIds: Set<string>;
607
+ };
608
+ export interface SnapGuide {
609
+ type: 'vertical' | 'horizontal';
610
+ sourceId?: string;
611
+ targetId?: string;
612
+ x?: number;
613
+ y1?: number;
614
+ y2?: number;
615
+ y?: number;
616
+ x1?: number;
617
+ x2?: number;
618
+ }
619
+ export interface SnapResult {
620
+ x: number;
621
+ y: number;
622
+ snappedX: boolean;
623
+ snappedY: boolean;
624
+ guides: SnapGuide[];
625
+ }
626
+ export interface SpacingIndicator {
627
+ type: 'horizontal' | 'vertical';
628
+ distance: number;
629
+ isSnapTarget?: boolean;
630
+ isAltHover?: boolean;
631
+ x1?: number;
632
+ x2?: number;
633
+ y?: number;
634
+ x?: number;
635
+ y1?: number;
636
+ y2?: number;
637
+ labelX: number;
638
+ labelY: number;
639
+ }
640
+ export interface ResizeResult {
641
+ newWidth: number;
642
+ newHeight: number;
643
+ newX: number;
644
+ newY: number;
645
+ newRotation: number;
646
+ }
647
+ export interface ResizeParams<T = unknown> {
648
+ element: T;
649
+ anchor: ResizeAnchor;
650
+ dx: number;
651
+ dy: number;
652
+ startData: TransformStartData;
653
+ maintainAspectRatio?: boolean;
654
+ }
655
+ export interface RenderContext {
656
+ ctx: CanvasRenderingContext2D;
657
+ isSelected: boolean;
658
+ isHovered?: boolean;
659
+ scale?: number;
660
+ }
661
+ export interface HandleInfo {
662
+ anchor: ResizeAnchor;
663
+ x: number;
664
+ y: number;
665
+ cursor: string;
666
+ }
667
+ export interface TransformControl {
668
+ key: string;
669
+ label: string;
670
+ type?: 'checkbox' | 'slider' | 'select';
671
+ defaultValue?: number | boolean | string;
672
+ defaultInternalValue?: number;
673
+ step?: number;
674
+ options?: Array<{
675
+ value: string;
676
+ label: string;
677
+ }>;
678
+ toSlider?: (internal: number) => number;
679
+ fromSlider?: (slider: number) => number;
680
+ toDisplay?: (internal: number) => string;
681
+ visibleWhen?: (data: Record<string, unknown>) => boolean;
682
+ }
683
+ export interface TransformTypeDefinition {
684
+ id: TransformType;
685
+ label: string;
686
+ Component: new (config?: Partial<BaseTextElementConfig>) => unknown;
687
+ }
688
+ export type ExtractElementByType<T extends TransformType> = Extract<AnyElementConfig, {
689
+ transformType: T;
690
+ }>;
691
+ export type ExtractTransformData<T extends TransformType> = Extract<AnyTransformData, {
692
+ type: T;
693
+ }>;
694
+ export declare function isCustomTransform(data: AnyTransformData): data is CustomTransformData;
695
+ export declare function isDistortTransform(data: AnyTransformData): data is DistortTransformData;
696
+ export declare function isCircleTransform(data: AnyTransformData): data is CircleTransformData;
697
+ export declare function isLeanTransform(data: AnyTransformData): data is LeanTransformData;
698
+ export declare function isArchTransform(data: AnyTransformData): data is ArchTransformData;
699
+ export declare function isAscendTransform(data: AnyTransformData): data is AscendTransformData;
700
+ export declare function isWaveTransform(data: AnyTransformData): data is WaveTransformData;
701
+ export declare function isFlagTransform(data: AnyTransformData): data is FlagTransformData;
702
+ export declare function isImageTransform(data: AnyTransformData): data is ImageTransformData;
703
+ export declare function isGroupTransform(data: AnyTransformData): data is GroupTransformData;
704
+ export declare function isArtboardTransform(data: AnyTransformData): data is ArtboardTransformData;
705
+ export declare function isTextElementConfig(config: AnyElementConfig): config is TextOnlyElementConfig;
706
+ export declare function isImageElementConfig(config: AnyElementConfig): config is ImageElementConfig;
707
+ export declare function isCustomElementConfig(config: AnyElementConfig): config is CustomElementConfig;
708
+ export declare function isCircleElementConfig(config: AnyElementConfig): config is CircleElementConfig;
709
+ export declare function isLeanElementConfig(config: AnyElementConfig): config is LeanElementConfig;
710
+ export declare function isArchElementConfig(config: AnyElementConfig): config is ArchElementConfig;
711
+ export declare function isAscendElementConfig(config: AnyElementConfig): config is AscendElementConfig;
712
+ export declare function isWaveElementConfig(config: AnyElementConfig): config is WaveElementConfig;
713
+ export declare function isFlagElementConfig(config: AnyElementConfig): config is FlagElementConfig;
714
+ export declare function isGroupElementConfig(config: AnyElementConfig): config is GroupElementConfig;
715
+ export declare function isShapeElementConfig(config: AnyElementConfig): config is ShapeElementConfig;
716
+ export declare function isPathElementConfig(config: AnyElementConfig): config is PathElementConfig;
717
+ export declare function isShapeTransform(data: AnyTransformData): data is ShapeTransformData;
718
+ export declare function isPathTransform(data: AnyTransformData): data is PathTransformData;
719
+ export declare function hasStroke(config: AnyElementConfig): boolean;
720
+ export declare function hasMasks(config: AnyElementConfig): boolean;
721
+ export declare function isKnockout(config: AnyElementConfig): boolean;
722
+ export declare function hasDistressEffect(config: AnyElementConfig): boolean;
723
+ /**
724
+ * Categories of errors that can occur within the canvas.
725
+ *
726
+ * - 'render': Errors during canvas rendering (element draw, compositing)
727
+ * - 'export': Errors during artboard export (PNG generation, worker failures)
728
+ * - 'import': Errors loading or deserializing saved state / initial elements
729
+ * - 'image': Errors loading images (network failures, CORS, decode errors)
730
+ * - 'worker': Errors in the export web worker
731
+ * - 'state': Errors in state management (artboard creation, element updates)
732
+ * - 'unknown': Uncategorized errors caught by the ErrorBoundary
733
+ */
734
+ export type CanvasErrorCategory = 'render' | 'export' | 'import' | 'image' | 'worker' | 'state' | 'unknown';
735
+ /**
736
+ * Structured error type for all canvas errors.
737
+ * Provides consistent error reporting with category, context, and recoverability info.
738
+ *
739
+ * @example
740
+ * ```tsx
741
+ * <SnowconeCanvas
742
+ * onError={(error) => {
743
+ * if (error.category === 'image' && error.recoverable) {
744
+ * showToast('Image failed to load, please try another');
745
+ * } else if (!error.recoverable) {
746
+ * reportCrash(error);
747
+ * }
748
+ * }}
749
+ * />
750
+ * ```
751
+ */
752
+ export interface CanvasError {
753
+ /** The category of this error */
754
+ category: CanvasErrorCategory;
755
+ /** Human-readable error message */
756
+ message: string;
757
+ /** The original Error object, if available */
758
+ originalError?: Error;
759
+ /** The element ID involved, if applicable */
760
+ elementId?: string;
761
+ /** The artboard ID involved, if applicable */
762
+ artboardId?: string;
763
+ /** Whether the canvas can continue operating after this error */
764
+ recoverable: boolean;
765
+ }