@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,56 @@
1
+ import { Ref } from 'react';
2
+ import { RichText, CharacterStyle } from '../../../types/index.js';
3
+ import { TextElement } from '../../../core/TextElement.js';
4
+ import { ImageElement } from '../../../core/ImageElement.js';
5
+ import { GroupElement } from '../../../core/GroupElement.js';
6
+ import { ShapeElement } from '../../../core/ShapeElement.js';
7
+ import { PathElement } from '../../../core/PathElement.js';
8
+ /** Elements that can be selected in the canvas */
9
+ type CanvasElement = TextElement | ImageElement | GroupElement | ShapeElement | PathElement;
10
+ export interface TextEditingHandle {
11
+ applyTextFormatting: (style: CharacterStyle) => void;
12
+ toggleFormattingProperty: (property: 'bold' | 'italic' | 'underline' | 'strikethrough') => void;
13
+ isEditingText: () => boolean;
14
+ getSelectionStyle: () => CharacterStyle | null;
15
+ }
16
+ interface UseTextEditingProps {
17
+ selectedElement: CanvasElement | null | undefined;
18
+ ref?: Ref<TextEditingHandle>;
19
+ }
20
+ export declare function useTextEditing({ selectedElement, ref }: UseTextEditingProps): {
21
+ isEditing: boolean;
22
+ setIsEditing: import('react').Dispatch<import('react').SetStateAction<boolean>>;
23
+ editText: string;
24
+ setEditText: import('react').Dispatch<import('react').SetStateAction<string>>;
25
+ editPosition: {
26
+ x: number;
27
+ y: number;
28
+ width: number;
29
+ height?: number;
30
+ };
31
+ setEditPosition: import('react').Dispatch<import('react').SetStateAction<{
32
+ x: number;
33
+ y: number;
34
+ width: number;
35
+ height?: number;
36
+ }>>;
37
+ cursorPosition: number;
38
+ setCursorPosition: import('react').Dispatch<import('react').SetStateAction<number>>;
39
+ selectionStart: number;
40
+ setSelectionStart: import('react').Dispatch<import('react').SetStateAction<number>>;
41
+ selectionEnd: number;
42
+ setSelectionEnd: import('react').Dispatch<import('react').SetStateAction<number>>;
43
+ cursorOpacityRef: import('react').RefObject<number>;
44
+ cursorStartTimeRef: import('react').RefObject<number>;
45
+ selectionAnchorRef: import('react').RefObject<number>;
46
+ didDragSelectRef: import('react').RefObject<boolean>;
47
+ editRichText: RichText | null;
48
+ setEditRichText: import('react').Dispatch<import('react').SetStateAction<RichText | null>>;
49
+ editRichTextRef: import('react').RefObject<RichText | null>;
50
+ currentFormattingStyle: CharacterStyle | null;
51
+ setCurrentFormattingStyle: import('react').Dispatch<import('react').SetStateAction<CharacterStyle | null>>;
52
+ applyFormattingToSelection: (style: CharacterStyle) => void;
53
+ getSelectionStyle: () => CharacterStyle | null;
54
+ toggleFormattingProperty: (property: "bold" | "italic" | "underline" | "strikethrough") => void;
55
+ };
56
+ export {};
@@ -0,0 +1,75 @@
1
+ import { TextElement } from '../../../core/TextElement.js';
2
+ import { ImageElement } from '../../../core/ImageElement.js';
3
+ import { GroupElement } from '../../../core/GroupElement.js';
4
+ import { ShapeElement } from '../../../core/ShapeElement.js';
5
+ import { TransformHandles } from '../../../core/TransformHandles.js';
6
+ import { RichText, CharacterStyle } from '../../../types/index.js';
7
+ import { PathElement } from '../../../core/PathElement.js';
8
+ type CanvasElement = TextElement | ImageElement | GroupElement | ShapeElement | PathElement;
9
+ type ChildElement = TextElement | ImageElement | ShapeElement | PathElement | GroupElement;
10
+ export interface UseTextEditingHandlersParams {
11
+ canvasRef: React.RefObject<HTMLCanvasElement | null>;
12
+ inputRef: React.RefObject<HTMLTextAreaElement | null>;
13
+ editingChildIdRef: React.MutableRefObject<string | null>;
14
+ editRichTextRef: React.MutableRefObject<RichText | null>;
15
+ selectionAnchorRef: React.MutableRefObject<number>;
16
+ cursorStartTimeRef: React.MutableRefObject<number>;
17
+ lastMultiClickTimeRef: React.MutableRefObject<number>;
18
+ multiClickSelectionRef: React.MutableRefObject<{
19
+ start: number;
20
+ end: number;
21
+ cursor: number;
22
+ } | null>;
23
+ editPositionUpdateTimerRef: React.MutableRefObject<ReturnType<typeof setTimeout> | null>;
24
+ draggingSelectionHandleRef: React.MutableRefObject<'start' | 'end' | null>;
25
+ repositioningCursorRef: React.MutableRefObject<boolean>;
26
+ editModeEnteredAtRef: React.MutableRefObject<number>;
27
+ lastTouchTargetRef: React.MutableRefObject<HTMLElement | null>;
28
+ MULTI_CLICK_DEBOUNCE: number;
29
+ EDIT_MODE_BLUR_DEBOUNCE: number;
30
+ isEditing: boolean;
31
+ editText: string;
32
+ editRichText: RichText | null;
33
+ cursorPosition: number;
34
+ selectionStart: number;
35
+ selectionEnd: number;
36
+ selectedId: string | null;
37
+ selectedElement: CanvasElement | undefined;
38
+ activeChildElement: ChildElement | null;
39
+ elements: CanvasElement[];
40
+ zoom: number;
41
+ paddingOffsetX: number;
42
+ paddingOffsetY: number;
43
+ setIsEditing: (v: boolean) => void;
44
+ setEditText: (v: string) => void;
45
+ setEditRichText: (v: RichText | null) => void;
46
+ setCursorPosition: React.Dispatch<React.SetStateAction<number>>;
47
+ setSelectionStart: React.Dispatch<React.SetStateAction<number>>;
48
+ setSelectionEnd: React.Dispatch<React.SetStateAction<number>>;
49
+ setEditPosition: (pos: {
50
+ x: number;
51
+ y: number;
52
+ width: number;
53
+ height: number;
54
+ }) => void;
55
+ setCurrentFormattingStyle: React.Dispatch<React.SetStateAction<CharacterStyle | null>>;
56
+ setCursorAnimationFrame: React.Dispatch<React.SetStateAction<number>>;
57
+ setHandlesVersion: React.Dispatch<React.SetStateAction<number>>;
58
+ setElements: React.Dispatch<React.SetStateAction<CanvasElement[]>>;
59
+ onElementUpdate: (element: CanvasElement) => void;
60
+ onTextSelectionChange?: () => void;
61
+ transformHandles: TransformHandles;
62
+ updateActiveChild: (child: ChildElement | null) => void;
63
+ }
64
+ export interface TextEditingHandlersResult {
65
+ handleTextEditComplete: () => void;
66
+ handleTextEditBlur: () => void;
67
+ handleTextKeyDown: (e: React.KeyboardEvent<HTMLTextAreaElement>) => void;
68
+ applyFormattingToSelection: (style: CharacterStyle) => void;
69
+ getSelectionStyle: () => CharacterStyle | null;
70
+ toggleFormattingProperty: (property: 'bold' | 'italic' | 'underline' | 'strikethrough') => void;
71
+ enterTextEditMode: (element: TextElement, worldX: number, worldY: number) => void;
72
+ getWrappedTextForEditing: (element: TextElement) => string;
73
+ }
74
+ export declare function useTextEditingHandlers(params: UseTextEditingHandlersParams): TextEditingHandlersResult;
75
+ export {};
@@ -0,0 +1,12 @@
1
+ import { TextElement } from '../../../core/TextElement.js';
2
+ import { ImageElement } from '../../../core/ImageElement.js';
3
+ export interface RenderGroupSiblingHoverParams {
4
+ ctx: CanvasRenderingContext2D;
5
+ hoveredChild: TextElement | ImageElement;
6
+ zoom?: number;
7
+ }
8
+ /**
9
+ * Renders hover effect outline for a group sibling element
10
+ * @param params.zoom - Zoom factor (default 1.0) - line width is adjusted to maintain visual consistency
11
+ */
12
+ export declare function renderGroupSiblingHover(params: RenderGroupSiblingHoverParams): void;
@@ -0,0 +1,10 @@
1
+ /**
2
+ * CanvasEditor Rendering Utilities
3
+ * Barrel export for all rendering functions
4
+ */
5
+ export { renderMultiSelectionIndicators } from './multiSelectionRenderer.js';
6
+ export type { MultiSelectionOBB, MultiSelectionGroupBounds, RenderMultiSelectionParams, RenderMultiSelectionResult, } from './multiSelectionRenderer.js';
7
+ export { renderMarqueeSelection } from './marqueeRenderer.js';
8
+ export type { RenderMarqueeParams } from './marqueeRenderer.js';
9
+ export { renderGroupSiblingHover } from './hoverRenderer.js';
10
+ export type { RenderGroupSiblingHoverParams } from './hoverRenderer.js';
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Marquee Selection Renderer
3
+ * Handles rendering of the marquee selection box during drag
4
+ */
5
+ export interface RenderMarqueeParams {
6
+ ctx: CanvasRenderingContext2D;
7
+ marqueeStart: {
8
+ x: number;
9
+ y: number;
10
+ };
11
+ marqueeEnd: {
12
+ x: number;
13
+ y: number;
14
+ };
15
+ zoom?: number;
16
+ }
17
+ /**
18
+ * Renders a marquee selection box with stroke and semi-transparent fill
19
+ * @param params.zoom - Zoom factor (default 1.0) - line width is adjusted to maintain visual consistency
20
+ */
21
+ export declare function renderMarqueeSelection(params: RenderMarqueeParams): void;
@@ -0,0 +1,52 @@
1
+ import { TextElement } from '../../../core/TextElement.js';
2
+ import { ImageElement } from '../../../core/ImageElement.js';
3
+ import { GroupElement } from '../../../core/GroupElement.js';
4
+ import { ShapeElement } from '../../../core/ShapeElement.js';
5
+ import { PathElement } from '../../../core/PathElement.js';
6
+ import { InteractionStateMachine } from '../../../core/InteractionStateMachine.js';
7
+ /** Elements that can be on the canvas */
8
+ type CanvasElement = TextElement | ImageElement | GroupElement | ShapeElement | PathElement;
9
+ export interface MultiSelectionOBB {
10
+ centerX: number;
11
+ centerY: number;
12
+ width: number;
13
+ height: number;
14
+ rotation: number;
15
+ }
16
+ export interface MultiSelectionGroupBounds {
17
+ minX: number;
18
+ minY: number;
19
+ maxX: number;
20
+ maxY: number;
21
+ centerX: number;
22
+ centerY: number;
23
+ rotationHandleX: number;
24
+ rotationHandleY: number;
25
+ rotation: number;
26
+ }
27
+ export interface RenderMultiSelectionParams {
28
+ ctx: CanvasRenderingContext2D;
29
+ displaySelection: string[];
30
+ elements: CanvasElement[];
31
+ activeArtboardElementIds: Set<string>;
32
+ stateMachine: InteractionStateMachine;
33
+ multiSelectionOBB: MultiSelectionOBB | null;
34
+ isRotating: boolean;
35
+ currentRotation: number;
36
+ isMarqueeSelecting: boolean;
37
+ zoom?: number;
38
+ }
39
+ export interface RenderMultiSelectionResult {
40
+ updatedOBB: MultiSelectionOBB | null;
41
+ groupBounds: MultiSelectionGroupBounds | null;
42
+ }
43
+ /**
44
+ * Renders multi-selection indicators including:
45
+ * - Individual element borders
46
+ * - Group bounding box with dotted border
47
+ * - Corner resize handles
48
+ * - Rotation handle
49
+ * - Dimension label during resize
50
+ */
51
+ export declare function renderMultiSelectionIndicators(params: RenderMultiSelectionParams): RenderMultiSelectionResult;
52
+ export {};
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Shared rendering constants for canvas UI elements
3
+ * Provides DRY (Don't Repeat Yourself) constants for consistent rendering
4
+ * All values should be divided by zoom to maintain visual consistency at different zoom levels
5
+ */
6
+ /**
7
+ * Line width for selection borders, handles, and UI elements
8
+ * Should be divided by zoom: lineWidth = SELECTION_LINE_WIDTH / zoom
9
+ */
10
+ export declare const SELECTION_LINE_WIDTH = 2;
11
+ /**
12
+ * Corner resize handle radius
13
+ * Should be divided by zoom: radius = HANDLE_RADIUS / zoom
14
+ */
15
+ export declare const HANDLE_RADIUS = 6;
16
+ /**
17
+ * Rotation handle radius (larger than corner handles)
18
+ * Should be divided by zoom: radius = ROTATION_HANDLE_RADIUS / zoom
19
+ */
20
+ export declare const ROTATION_HANDLE_RADIUS = 16;
21
+ /**
22
+ * Dash pattern for dotted lines (multi-selection group bounds)
23
+ * Should be divided by zoom: setLineDash([DASH_SIZE / zoom, DASH_GAP / zoom])
24
+ */
25
+ export declare const DASH_SIZE = 5;
26
+ export declare const DASH_GAP = 5;
27
+ /**
28
+ * Rotation handle icon scale factor
29
+ */
30
+ export declare const ROTATION_ICON_SCALE = 0.5;
31
+ /**
32
+ * Helper function to get zoom-adjusted line width
33
+ */
34
+ export declare function getLineWidth(zoom: number): number;
35
+ /**
36
+ * Helper function to get zoom-adjusted handle radius
37
+ */
38
+ export declare function getHandleRadius(zoom: number): number;
39
+ /**
40
+ * Helper function to get zoom-adjusted rotation handle radius
41
+ */
42
+ export declare function getRotationHandleRadius(zoom: number): number;
43
+ /**
44
+ * Helper function to get zoom-adjusted dash pattern
45
+ */
46
+ export declare function getDashPattern(zoom: number): number[];
47
+ /**
48
+ * Renders complete rotation handle (circle background + icon)
49
+ * Provides consistent rotation handle rendering across single and multi-selection
50
+ * Works in world coordinate space with zoom compensation for UI elements
51
+ *
52
+ * @param ctx - Canvas rendering context
53
+ * @param x - X position in world coordinates
54
+ * @param y - Y position in world coordinates
55
+ * @param zoom - Current zoom level (default 1.0)
56
+ * @param accentColor - Border color (default from theme)
57
+ * @param isHovering - Whether handle is being hovered (increases border width)
58
+ */
59
+ export declare function renderRotationHandle(ctx: CanvasRenderingContext2D, x: number, y: number, zoom?: number, accentColor?: string, isHovering?: boolean): void;
@@ -0,0 +1,11 @@
1
+ import { TextElement } from '../../../core/TextElement.js';
2
+ import { ImageElement } from '../../../core/ImageElement.js';
3
+ import { GroupElement } from '../../../core/GroupElement.js';
4
+ import { ShapeElement } from '../../../core/ShapeElement.js';
5
+ import { PathElement } from '../../../core/PathElement.js';
6
+ export interface LocalHoverState {
7
+ type: 'element' | 'resize-handle' | 'rotation-handle' | 'crop-handle' | 'multi-selection-handle' | 'multi-selection-rotation-handle' | 'multi-selection-bounds' | 'group-sibling' | null;
8
+ data: unknown;
9
+ startTime: number | null;
10
+ }
11
+ export type AnyElement = TextElement | ImageElement | GroupElement | ShapeElement | PathElement;
@@ -0,0 +1,102 @@
1
+ import { default as React } from 'react';
2
+ import { TextElement } from '../core/TextElement.js';
3
+ import { ImageElement } from '../core/ImageElement.js';
4
+ import { GroupElement } from '../core/GroupElement.js';
5
+ import { PathElement } from '../core/PathElement.js';
6
+ import { ShapeElement } from '../core/ShapeElement.js';
7
+ import { ArtboardElement } from '../core/ArtboardElement.js';
8
+ import { ArtboardManager } from '../core/ArtboardManager.js';
9
+ import { CharacterStyle } from '../types/index.js';
10
+ /** Union type for all canvas element types */
11
+ type CanvasElement = TextElement | ImageElement | GroupElement | ShapeElement | PathElement;
12
+ interface CanvasEditorProps {
13
+ elements: CanvasElement[];
14
+ artboards: ArtboardElement[];
15
+ artboardManager: ArtboardManager;
16
+ selectedId: string | null;
17
+ multiSelection: string[];
18
+ onElementUpdate: (element: CanvasElement) => void;
19
+ setElements: React.Dispatch<React.SetStateAction<CanvasElement[]>>;
20
+ executeElementUpdate: (oldElement: CanvasElement | undefined, newElement: CanvasElement) => void;
21
+ onSelectionChange: (id: string | null) => void;
22
+ onMultiSelectionChange: (ids: string[]) => void;
23
+ onActiveChildChange?: (child: CanvasElement | null) => void;
24
+ onTextSelectionChange?: () => void;
25
+ onHoverChange?: (elementId: string | null) => void;
26
+ onRotationStateChange?: (isRotating: boolean) => void;
27
+ onCropModeEnter?: () => void;
28
+ hideHandles?: boolean;
29
+ canvasRef?: React.RefObject<HTMLCanvasElement | null>;
30
+ width?: number;
31
+ height?: number;
32
+ zoom?: number;
33
+ offsetX?: number;
34
+ offsetY?: number;
35
+ viewPadding?: number;
36
+ artboardBorderRadius?: number;
37
+ fixedMargin?: number;
38
+ fixedMarginX?: number;
39
+ fixedMarginY?: number;
40
+ showRotationHandle?: boolean;
41
+ /** ADR-0054 Phase 4: cutout shapes (artboard px) punched through the
42
+ * `<canvas>` as truly transparent holes. Translated internally to a
43
+ * CSS `clip-path: path(evenodd, ...)` that accounts for padding +
44
+ * zoom, so consumers can think purely in artboard coordinates. */
45
+ canvasCutouts?: import('./embed/SnowconeCanvas').CanvasCutoutShape[];
46
+ /** ADR-0054: piece-guide overlays drawn inside the canvas render loop. */
47
+ pieceGuides?: import('./embed/SnowconeCanvas').PieceGuidesConfig;
48
+ /**
49
+ * ADR-0060: which piece (if any) the editor is focused on inside a
50
+ * multi-piece spread. `'spread'` (or undefined) shows every piece in
51
+ * the layout at full size — the historical behaviour. `{ pieceId }`
52
+ * fits the viewport to that piece (with a peek margin so neighbouring
53
+ * pieces remain visible at reduced opacity for overflow feedback).
54
+ * The pieces themselves come from `pieceGuides.pieces`.
55
+ *
56
+ * Spread-mode is derived from `pieces.length`: layouts with a single
57
+ * piece are unaffected by this prop (the toggle is a no-op for them).
58
+ */
59
+ pieceFocus?: 'spread' | {
60
+ pieceId: string;
61
+ };
62
+ /**
63
+ * ADR-0060: optional override for the focused-piece rect, used by
64
+ * the parent (`Canvas.tsx`) to feed in an animated rect when
65
+ * switching pieces. When provided, it replaces the rect that would
66
+ * otherwise be derived from `pieceFocus` + `pieceGuides`. Lets the
67
+ * zoom-fit math (lives in `Canvas.tsx`) and the layout/render-loop
68
+ * (lives here) share one interpolating value during the dolly.
69
+ */
70
+ focusedPieceRect?: {
71
+ x: number;
72
+ y: number;
73
+ width: number;
74
+ height: number;
75
+ } | null;
76
+ }
77
+ export interface CanvasEditorHandle {
78
+ applyTextFormatting: (style: CharacterStyle) => void;
79
+ toggleFormattingProperty: (property: 'bold' | 'italic' | 'underline' | 'strikethrough') => void;
80
+ isEditingText: () => boolean;
81
+ isRotating: () => boolean;
82
+ getSelectionStyle: () => CharacterStyle | null;
83
+ getZoom: () => number;
84
+ forceRender: () => void;
85
+ getEditingState: () => {
86
+ isEditing: boolean;
87
+ editText: string;
88
+ cursorPosition: number;
89
+ selectionStart: number;
90
+ selectionEnd: number;
91
+ };
92
+ getCropState: () => {
93
+ isCropping: boolean;
94
+ elementId: string | null;
95
+ };
96
+ getPaddingOffset: () => {
97
+ x: number;
98
+ y: number;
99
+ };
100
+ }
101
+ declare const CanvasEditor: React.ForwardRefExoticComponent<CanvasEditorProps & React.RefAttributes<CanvasEditorHandle>>;
102
+ export default CanvasEditor;
@@ -0,0 +1,29 @@
1
+ /**
2
+ * ColorPickerDropdown - Custom color picker with dropdown
3
+ * Uses react-colorful for a better UX than native browser picker
4
+ */
5
+ export interface ColorPickerDropdownProps {
6
+ value: string;
7
+ onChange: (event: {
8
+ target: {
9
+ value: string;
10
+ };
11
+ }) => void;
12
+ /** Colours already in use elsewhere in the design (text, shapes,
13
+ * paths, strokes, artboard background). Surfaced as the
14
+ * "Document colors" row. */
15
+ documentColors?: string[];
16
+ /** Dominant colours sampled from image elements in the design.
17
+ * Surfaced as a separate "Image colors" row so users can match
18
+ * a colour from their artwork. Empty / omitted hides the row. */
19
+ imageColors?: string[];
20
+ icon?: React.ReactNode;
21
+ showSquare?: boolean;
22
+ allowTransparent?: boolean;
23
+ isOpen?: boolean;
24
+ onOpenChange?: (isOpen: boolean) => void;
25
+ /** When true, renders the color picker content directly without a popover trigger button */
26
+ embedded?: boolean;
27
+ }
28
+ declare const ColorPickerDropdown: import('react').MemoExoticComponent<({ value, onChange, documentColors, imageColors, icon, showSquare, allowTransparent, isOpen: controlledIsOpen, onOpenChange: controlledOnOpenChange, embedded, }: ColorPickerDropdownProps) => import("react/jsx-runtime").JSX.Element>;
29
+ export default ColorPickerDropdown;
@@ -0,0 +1,8 @@
1
+ import { BlendMode, KnockoutConfig } from '../types/index.js';
2
+ interface CompositingPanelProps {
3
+ blendMode?: BlendMode;
4
+ knockoutParts?: KnockoutConfig;
5
+ onChange: (blendMode: BlendMode, knockoutParts?: KnockoutConfig) => void;
6
+ }
7
+ declare const CompositingPanel: ({ blendMode, knockoutParts, onChange }: CompositingPanelProps) => import("react/jsx-runtime").JSX.Element;
8
+ export default CompositingPanel;
@@ -0,0 +1,150 @@
1
+ import { default as React } from 'react';
2
+ export interface ContextualToolbarsProps {
3
+ /**
4
+ * Positioning mode for the toolbar
5
+ * - 'floating': Positioned relative to selected element (default)
6
+ * - 'embedded': Static positioning for embedding in a container
7
+ */
8
+ mode?: 'floating' | 'embedded';
9
+ /**
10
+ * @deprecated Effects panel drawer has been replaced by inline secondary panels.
11
+ * Stroke, masks, distress, and knockout are now accessible directly from the toolbar.
12
+ */
13
+ onOpenEffectsPanel?: () => void;
14
+ /**
15
+ * Callback when glyph browser should be opened
16
+ */
17
+ onOpenGlyphBrowser?: () => void;
18
+ /**
19
+ * Callback when image should be changed
20
+ */
21
+ onChangeImage?: () => void;
22
+ /**
23
+ * Callback when shape type drawer should be opened
24
+ */
25
+ onOpenShapeTypeDrawer?: () => void;
26
+ /**
27
+ * Document colors for color picker
28
+ */
29
+ documentColors?: Set<string>;
30
+ /**
31
+ * Current viewport width for responsive behavior
32
+ */
33
+ viewportWidth?: number;
34
+ /**
35
+ * Responsive breakpoints for layout
36
+ * - full: All controls visible (default: 1024)
37
+ * - compact: Some controls in overflow menu (default: 768)
38
+ * - minimal: Only essential controls, rest in overflow (default: 480)
39
+ */
40
+ breakpoints?: {
41
+ full?: number;
42
+ compact?: number;
43
+ minimal?: number;
44
+ };
45
+ /**
46
+ * Whether element has glyphs available
47
+ */
48
+ hasGlyphs?: boolean;
49
+ /**
50
+ * Callback to get more menu items for text elements
51
+ */
52
+ getMoreMenuItems?: () => Array<{
53
+ label: string;
54
+ onClick: () => void;
55
+ icon: React.ReactNode;
56
+ active?: boolean;
57
+ }>;
58
+ /**
59
+ * Callback when artboard is updated
60
+ */
61
+ onArtboardUpdate?: (artboardId: string, oldProps: Record<string, unknown>, newProps: Record<string, unknown>) => void;
62
+ /**
63
+ * Artboard screen bounds for positioning toolbars
64
+ */
65
+ artboardScreenBounds?: {
66
+ left: number;
67
+ top: number;
68
+ width: number;
69
+ height: number;
70
+ bottom: number;
71
+ centerX: number;
72
+ };
73
+ /**
74
+ * Maximum width for the toolbar. When set, enables flex-wrap for multi-row layout.
75
+ * Can be a number (pixels) or a CSS string (e.g., '100%', '400px').
76
+ */
77
+ maxWidth?: number | string;
78
+ /**
79
+ * When true, removes the toolbar background, border, and shadow for a transparent look.
80
+ * Useful when embedding in a custom UI where you want only the controls visible.
81
+ */
82
+ transparent?: boolean;
83
+ /**
84
+ * Callback when a secondary panel is expanded or collapsed.
85
+ * Useful for styling the container as a bottom drawer when panels are visible.
86
+ */
87
+ onPanelExpandChange?: (expanded: boolean) => void;
88
+ /**
89
+ * Default expanded panel type. Used to open a specific panel on mount.
90
+ * Useful when rendering in a drawer that needs to show a specific panel.
91
+ */
92
+ defaultExpandedPanel?: 'cornerRadius' | 'effects' | 'crop' | 'rotation' | null;
93
+ /**
94
+ * Callback when expanded panel changes, passing the panel type.
95
+ * Useful for tracking which specific panel is expanded.
96
+ */
97
+ onExpandedPanelTypeChange?: (panelType: 'cornerRadius' | 'effects' | 'crop' | 'rotation' | null) => void;
98
+ /**
99
+ * Callback when crop drawer should be opened.
100
+ * When provided, clicking the crop button will call this instead of showing inline panel.
101
+ * Use this to render the crop controls in a drawer in the parent component.
102
+ */
103
+ onOpenCropDrawer?: () => void;
104
+ /**
105
+ * Callback when corner radius drawer should be opened.
106
+ * When provided, clicking the corner radius button will call this instead of showing inline panel.
107
+ * Use this to render the corner radius controls in a drawer in the parent component.
108
+ */
109
+ onOpenCornerRadiusDrawer?: () => void;
110
+ /**
111
+ * Style for the close button in expanded panel headers.
112
+ * - 'icon': Shows X icon (default)
113
+ * - 'done': Shows "Done" text button
114
+ */
115
+ closeButtonStyle?: 'icon' | 'done';
116
+ /**
117
+ * Message to display when no element is selected (embedded mode only).
118
+ * Set to null to hide the empty state completely.
119
+ * Default: "Tap an element to select and edit"
120
+ */
121
+ emptyStateMessage?: string | null;
122
+ /**
123
+ * Custom content to render when no element is selected (embedded mode only).
124
+ * Replaces the default emptyStateMessage text. Use for live mockup previews, etc.
125
+ */
126
+ emptyStateRender?: React.ReactNode;
127
+ /**
128
+ * When true and no element is selected, shows artboard distress panel
129
+ * in the empty state slot (embedded mode only).
130
+ */
131
+ editArtboardMode?: boolean;
132
+ /**
133
+ * Called when artboard edit mode should change (e.g. dismissed by selecting
134
+ * an element or clicking the "Done" button).
135
+ */
136
+ onEditArtboardModeChange?: (active: boolean) => void;
137
+ /**
138
+ * Called when the leading layer thumbnail in the toolbar is clicked.
139
+ * Typical wiring: open the host app's "Manage Layers" drawer with
140
+ * the currently-selected layer focused. The selected layer is
141
+ * already tracked by EditorContext so the drawer's `LayersPanel`
142
+ * will highlight the right row automatically.
143
+ *
144
+ * When omitted, the thumbnail is non-interactive (just a visual
145
+ * indicator of the selection).
146
+ */
147
+ onLayerThumbnailClick?: () => void;
148
+ }
149
+ export declare const ContextualToolbars: React.FC<ContextualToolbarsProps>;
150
+ export default ContextualToolbars;
@@ -0,0 +1,20 @@
1
+ import { default as React } from 'react';
2
+ import { ImageElement } from '../core/ImageElement.js';
3
+ export interface CropPanelProps {
4
+ /** The image element to crop */
5
+ element: ImageElement;
6
+ /** Callback when element is updated */
7
+ onElementUpdate: (element: ImageElement) => void;
8
+ /** Optional class name for the container */
9
+ className?: string;
10
+ }
11
+ /**
12
+ * CropPanel - Controls for cropping image elements
13
+ *
14
+ * Provides:
15
+ * - 3x3 anchor grid for selecting resize origin
16
+ * - Width slider (10-100%)
17
+ * - Height slider (10-100%)
18
+ */
19
+ export declare const CropPanel: React.FC<CropPanelProps>;
20
+ export default CropPanel;
@@ -0,0 +1,7 @@
1
+ import { DistressEffect } from '../types/index.js';
2
+ interface DistressPanelProps {
3
+ distressEffect?: DistressEffect;
4
+ onChange: (distress: DistressEffect | undefined) => void;
5
+ }
6
+ declare const DistressPanel: ({ distressEffect, onChange }: DistressPanelProps) => import("react/jsx-runtime").JSX.Element;
7
+ export default DistressPanel;
@@ -0,0 +1,6 @@
1
+ /**
2
+ * DocsPage - Interactive documentation for component primitives
3
+ * Showcases all reusable primitives with live examples
4
+ */
5
+ declare const DocsPage: () => import("react/jsx-runtime").JSX.Element;
6
+ export default DocsPage;