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