@woven-canvas/vue 0.1.8 → 0.1.10

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 (219) hide show
  1. package/build/index.js +7014 -7027
  2. package/build/index.umd.cjs +29 -29
  3. package/build/style.css +1 -1
  4. package/package.json +8 -8
  5. package/build/__tests__/WovenCanvas.test.d.ts +0 -2
  6. package/build/__tests__/WovenCanvas.test.d.ts.map +0 -1
  7. package/build/__tests__/useComponent.test.d.ts +0 -2
  8. package/build/__tests__/useComponent.test.d.ts.map +0 -1
  9. package/build/__tests__/useQuery.test.d.ts +0 -2
  10. package/build/__tests__/useQuery.test.d.ts.map +0 -1
  11. package/build/__tests__/useSingleton.test.d.ts +0 -2
  12. package/build/__tests__/useSingleton.test.d.ts.map +0 -1
  13. package/build/__tests__/useTextBatchController.test.d.ts +0 -2
  14. package/build/__tests__/useTextBatchController.test.d.ts.map +0 -1
  15. package/build/src/EditingPlugin.d.ts +0 -11
  16. package/build/src/EditingPlugin.d.ts.map +0 -1
  17. package/build/src/arrowHeads.d.ts +0 -10
  18. package/build/src/arrowHeads.d.ts.map +0 -1
  19. package/build/src/components/ActionBar.vue.d.ts +0 -3
  20. package/build/src/components/ActionBar.vue.d.ts.map +0 -1
  21. package/build/src/components/BackToContentButton.vue.d.ts +0 -3
  22. package/build/src/components/BackToContentButton.vue.d.ts.map +0 -1
  23. package/build/src/components/CanvasBackground.vue.d.ts +0 -7
  24. package/build/src/components/CanvasBackground.vue.d.ts.map +0 -1
  25. package/build/src/components/EditableText.vue.d.ts +0 -25
  26. package/build/src/components/EditableText.vue.d.ts.map +0 -1
  27. package/build/src/components/FileDropZone.vue.d.ts +0 -8
  28. package/build/src/components/FileDropZone.vue.d.ts.map +0 -1
  29. package/build/src/components/FloatingMenu.vue.d.ts +0 -13
  30. package/build/src/components/FloatingMenu.vue.d.ts.map +0 -1
  31. package/build/src/components/FloatingMenuBar.vue.d.ts +0 -43
  32. package/build/src/components/FloatingMenuBar.vue.d.ts.map +0 -1
  33. package/build/src/components/LoadingOverlay.vue.d.ts +0 -6
  34. package/build/src/components/LoadingOverlay.vue.d.ts.map +0 -1
  35. package/build/src/components/OfflineIndicator.vue.d.ts +0 -6
  36. package/build/src/components/OfflineIndicator.vue.d.ts.map +0 -1
  37. package/build/src/components/Toolbar.vue.d.ts +0 -15
  38. package/build/src/components/Toolbar.vue.d.ts.map +0 -1
  39. package/build/src/components/ToolbarButton.vue.d.ts +0 -22
  40. package/build/src/components/ToolbarButton.vue.d.ts.map +0 -1
  41. package/build/src/components/UserCursors.vue.d.ts +0 -13
  42. package/build/src/components/UserCursors.vue.d.ts.map +0 -1
  43. package/build/src/components/UserPresence.vue.d.ts +0 -7
  44. package/build/src/components/UserPresence.vue.d.ts.map +0 -1
  45. package/build/src/components/VersionMismatch.vue.d.ts +0 -6
  46. package/build/src/components/VersionMismatch.vue.d.ts.map +0 -1
  47. package/build/src/components/WovenCanvas.vue.d.ts +0 -69
  48. package/build/src/components/WovenCanvas.vue.d.ts.map +0 -1
  49. package/build/src/components/blocks/ArcArrow.vue.d.ts +0 -4
  50. package/build/src/components/blocks/ArcArrow.vue.d.ts.map +0 -1
  51. package/build/src/components/blocks/ArrowHandle.vue.d.ts +0 -3
  52. package/build/src/components/blocks/ArrowHandle.vue.d.ts.map +0 -1
  53. package/build/src/components/blocks/ArrowHead.vue.d.ts +0 -13
  54. package/build/src/components/blocks/ArrowHead.vue.d.ts.map +0 -1
  55. package/build/src/components/blocks/ArrowTerminal.vue.d.ts +0 -3
  56. package/build/src/components/blocks/ArrowTerminal.vue.d.ts.map +0 -1
  57. package/build/src/components/blocks/ElbowArrow.vue.d.ts +0 -4
  58. package/build/src/components/blocks/ElbowArrow.vue.d.ts.map +0 -1
  59. package/build/src/components/blocks/Eraser.vue.d.ts +0 -7
  60. package/build/src/components/blocks/Eraser.vue.d.ts.map +0 -1
  61. package/build/src/components/blocks/ImageBlock.vue.d.ts +0 -4
  62. package/build/src/components/blocks/ImageBlock.vue.d.ts.map +0 -1
  63. package/build/src/components/blocks/PenStroke.vue.d.ts +0 -4
  64. package/build/src/components/blocks/PenStroke.vue.d.ts.map +0 -1
  65. package/build/src/components/blocks/SelectionBox.vue.d.ts +0 -3
  66. package/build/src/components/blocks/SelectionBox.vue.d.ts.map +0 -1
  67. package/build/src/components/blocks/ShapeBlock.vue.d.ts +0 -4
  68. package/build/src/components/blocks/ShapeBlock.vue.d.ts.map +0 -1
  69. package/build/src/components/blocks/StickyNote.vue.d.ts +0 -4
  70. package/build/src/components/blocks/StickyNote.vue.d.ts.map +0 -1
  71. package/build/src/components/blocks/TextBlock.vue.d.ts +0 -4
  72. package/build/src/components/blocks/TextBlock.vue.d.ts.map +0 -1
  73. package/build/src/components/blocks/TransformBox.vue.d.ts +0 -3
  74. package/build/src/components/blocks/TransformBox.vue.d.ts.map +0 -1
  75. package/build/src/components/blocks/TransformHandle.vue.d.ts +0 -3
  76. package/build/src/components/blocks/TransformHandle.vue.d.ts.map +0 -1
  77. package/build/src/components/buttons/ArrowHeadButton.vue.d.ts +0 -9
  78. package/build/src/components/buttons/ArrowHeadButton.vue.d.ts.map +0 -1
  79. package/build/src/components/buttons/ArrowThicknessButton.vue.d.ts +0 -7
  80. package/build/src/components/buttons/ArrowThicknessButton.vue.d.ts.map +0 -1
  81. package/build/src/components/buttons/ColorBubbles.vue.d.ts +0 -17
  82. package/build/src/components/buttons/ColorBubbles.vue.d.ts.map +0 -1
  83. package/build/src/components/buttons/ColorButton.vue.d.ts +0 -7
  84. package/build/src/components/buttons/ColorButton.vue.d.ts.map +0 -1
  85. package/build/src/components/buttons/ColorInput.vue.d.ts +0 -10
  86. package/build/src/components/buttons/ColorInput.vue.d.ts.map +0 -1
  87. package/build/src/components/buttons/ColorPicker.vue.d.ts +0 -11
  88. package/build/src/components/buttons/ColorPicker.vue.d.ts.map +0 -1
  89. package/build/src/components/buttons/ColorSlider.vue.d.ts +0 -14
  90. package/build/src/components/buttons/ColorSlider.vue.d.ts.map +0 -1
  91. package/build/src/components/buttons/MenuButton.vue.d.ts +0 -20
  92. package/build/src/components/buttons/MenuButton.vue.d.ts.map +0 -1
  93. package/build/src/components/buttons/MenuDropdown.vue.d.ts +0 -35
  94. package/build/src/components/buttons/MenuDropdown.vue.d.ts.map +0 -1
  95. package/build/src/components/buttons/MenuTooltip.vue.d.ts +0 -3
  96. package/build/src/components/buttons/MenuTooltip.vue.d.ts.map +0 -1
  97. package/build/src/components/buttons/PenStrokeThicknessButton.vue.d.ts +0 -7
  98. package/build/src/components/buttons/PenStrokeThicknessButton.vue.d.ts.map +0 -1
  99. package/build/src/components/buttons/ShapeFillColorButton.vue.d.ts +0 -7
  100. package/build/src/components/buttons/ShapeFillColorButton.vue.d.ts.map +0 -1
  101. package/build/src/components/buttons/ShapeKindButton.vue.d.ts +0 -7
  102. package/build/src/components/buttons/ShapeKindButton.vue.d.ts.map +0 -1
  103. package/build/src/components/buttons/ShapeStrokeColorButton.vue.d.ts +0 -7
  104. package/build/src/components/buttons/ShapeStrokeColorButton.vue.d.ts.map +0 -1
  105. package/build/src/components/buttons/ShapeStrokeStyleButton.vue.d.ts +0 -7
  106. package/build/src/components/buttons/ShapeStrokeStyleButton.vue.d.ts.map +0 -1
  107. package/build/src/components/buttons/ShapeStrokeWidthButton.vue.d.ts +0 -7
  108. package/build/src/components/buttons/ShapeStrokeWidthButton.vue.d.ts.map +0 -1
  109. package/build/src/components/buttons/StrokeStyleOptions.vue.d.ts +0 -12
  110. package/build/src/components/buttons/StrokeStyleOptions.vue.d.ts.map +0 -1
  111. package/build/src/components/buttons/text/TextAlignmentButton.vue.d.ts +0 -7
  112. package/build/src/components/buttons/text/TextAlignmentButton.vue.d.ts.map +0 -1
  113. package/build/src/components/buttons/text/TextBoldButton.vue.d.ts +0 -7
  114. package/build/src/components/buttons/text/TextBoldButton.vue.d.ts.map +0 -1
  115. package/build/src/components/buttons/text/TextButtonGroup.vue.d.ts +0 -8
  116. package/build/src/components/buttons/text/TextButtonGroup.vue.d.ts.map +0 -1
  117. package/build/src/components/buttons/text/TextColorButton.vue.d.ts +0 -7
  118. package/build/src/components/buttons/text/TextColorButton.vue.d.ts.map +0 -1
  119. package/build/src/components/buttons/text/TextFontFamilyButton.vue.d.ts +0 -12
  120. package/build/src/components/buttons/text/TextFontFamilyButton.vue.d.ts.map +0 -1
  121. package/build/src/components/buttons/text/TextFontSizeButton.vue.d.ts +0 -7
  122. package/build/src/components/buttons/text/TextFontSizeButton.vue.d.ts.map +0 -1
  123. package/build/src/components/buttons/text/TextItalicButton.vue.d.ts +0 -7
  124. package/build/src/components/buttons/text/TextItalicButton.vue.d.ts.map +0 -1
  125. package/build/src/components/buttons/text/TextUnderlineButton.vue.d.ts +0 -7
  126. package/build/src/components/buttons/text/TextUnderlineButton.vue.d.ts.map +0 -1
  127. package/build/src/components/buttons/text/VerticalAlignButton.vue.d.ts +0 -7
  128. package/build/src/components/buttons/text/VerticalAlignButton.vue.d.ts.map +0 -1
  129. package/build/src/components/buttons/text/index.d.ts +0 -11
  130. package/build/src/components/buttons/text/index.d.ts.map +0 -1
  131. package/build/src/components/icons/IconChevronDown.vue.d.ts +0 -3
  132. package/build/src/components/icons/IconChevronDown.vue.d.ts.map +0 -1
  133. package/build/src/components/tools/ArcArrowTool.vue.d.ts +0 -3
  134. package/build/src/components/tools/ArcArrowTool.vue.d.ts.map +0 -1
  135. package/build/src/components/tools/ElbowArrowTool.vue.d.ts +0 -3
  136. package/build/src/components/tools/ElbowArrowTool.vue.d.ts.map +0 -1
  137. package/build/src/components/tools/EraserTool.vue.d.ts +0 -3
  138. package/build/src/components/tools/EraserTool.vue.d.ts.map +0 -1
  139. package/build/src/components/tools/HandTool.vue.d.ts +0 -3
  140. package/build/src/components/tools/HandTool.vue.d.ts.map +0 -1
  141. package/build/src/components/tools/ImageTool.vue.d.ts +0 -3
  142. package/build/src/components/tools/ImageTool.vue.d.ts.map +0 -1
  143. package/build/src/components/tools/PenTool.vue.d.ts +0 -3
  144. package/build/src/components/tools/PenTool.vue.d.ts.map +0 -1
  145. package/build/src/components/tools/SelectTool.vue.d.ts +0 -3
  146. package/build/src/components/tools/SelectTool.vue.d.ts.map +0 -1
  147. package/build/src/components/tools/ShapeTool.vue.d.ts +0 -3
  148. package/build/src/components/tools/ShapeTool.vue.d.ts.map +0 -1
  149. package/build/src/components/tools/StickyNoteTool.vue.d.ts +0 -3
  150. package/build/src/components/tools/StickyNoteTool.vue.d.ts.map +0 -1
  151. package/build/src/components/tools/TextTool.vue.d.ts +0 -3
  152. package/build/src/components/tools/TextTool.vue.d.ts.map +0 -1
  153. package/build/src/composables/index.d.ts +0 -13
  154. package/build/src/composables/index.d.ts.map +0 -1
  155. package/build/src/composables/useComponent.d.ts +0 -9
  156. package/build/src/composables/useComponent.d.ts.map +0 -1
  157. package/build/src/composables/useComponents.d.ts +0 -9
  158. package/build/src/composables/useComponents.d.ts.map +0 -1
  159. package/build/src/composables/useEditorContext.d.ts +0 -7
  160. package/build/src/composables/useEditorContext.d.ts.map +0 -1
  161. package/build/src/composables/useFonts.d.ts +0 -10
  162. package/build/src/composables/useFonts.d.ts.map +0 -1
  163. package/build/src/composables/useImageCreation.d.ts +0 -13
  164. package/build/src/composables/useImageCreation.d.ts.map +0 -1
  165. package/build/src/composables/useQuery.d.ts +0 -14
  166. package/build/src/composables/useQuery.d.ts.map +0 -1
  167. package/build/src/composables/useSingleton.d.ts +0 -9
  168. package/build/src/composables/useSingleton.d.ts.map +0 -1
  169. package/build/src/composables/useTextBatchController.d.ts +0 -28
  170. package/build/src/composables/useTextBatchController.d.ts.map +0 -1
  171. package/build/src/composables/useTextEditorController.d.ts +0 -30
  172. package/build/src/composables/useTextEditorController.d.ts.map +0 -1
  173. package/build/src/composables/useTextFormatting.d.ts +0 -30
  174. package/build/src/composables/useTextFormatting.d.ts.map +0 -1
  175. package/build/src/composables/useTextStretchBehavior.d.ts +0 -19
  176. package/build/src/composables/useTextStretchBehavior.d.ts.map +0 -1
  177. package/build/src/composables/useToolbar.d.ts +0 -10
  178. package/build/src/composables/useToolbar.d.ts.map +0 -1
  179. package/build/src/composables/useTooltipSingleton.d.ts +0 -5
  180. package/build/src/composables/useTooltipSingleton.d.ts.map +0 -1
  181. package/build/src/cursors.d.ts +0 -9
  182. package/build/src/cursors.d.ts.map +0 -1
  183. package/build/src/index.d.ts +0 -65
  184. package/build/src/index.d.ts.map +0 -1
  185. package/build/src/injection/dropdown.d.ts +0 -4
  186. package/build/src/injection/dropdown.d.ts.map +0 -1
  187. package/build/src/injection/floatingMenu.d.ts +0 -8
  188. package/build/src/injection/floatingMenu.d.ts.map +0 -1
  189. package/build/src/injection/index.d.ts +0 -6
  190. package/build/src/injection/index.d.ts.map +0 -1
  191. package/build/src/injection/toolbar.d.ts +0 -11
  192. package/build/src/injection/toolbar.d.ts.map +0 -1
  193. package/build/src/injection/tooltip.d.ts +0 -15
  194. package/build/src/injection/tooltip.d.ts.map +0 -1
  195. package/build/src/injection/wovenCanvas.d.ts +0 -16
  196. package/build/src/injection/wovenCanvas.d.ts.map +0 -1
  197. package/build/src/shapes.d.ts +0 -2
  198. package/build/src/shapes.d.ts.map +0 -1
  199. package/build/src/singletons/BlockPlacementState.d.ts +0 -4
  200. package/build/src/singletons/BlockPlacementState.d.ts.map +0 -1
  201. package/build/src/singletons/index.d.ts +0 -2
  202. package/build/src/singletons/index.d.ts.map +0 -1
  203. package/build/src/systems/blockPlacementSystem.d.ts +0 -2
  204. package/build/src/systems/blockPlacementSystem.d.ts.map +0 -1
  205. package/build/src/systems/index.d.ts +0 -3
  206. package/build/src/systems/index.d.ts.map +0 -1
  207. package/build/src/systems/undoRedoSystem.d.ts +0 -2
  208. package/build/src/systems/undoRedoSystem.d.ts.map +0 -1
  209. package/build/src/types.d.ts +0 -26
  210. package/build/src/types.d.ts.map +0 -1
  211. package/build/src/utils/blockDimensions.d.ts +0 -17
  212. package/build/src/utils/blockDimensions.d.ts.map +0 -1
  213. package/build/src/utils/color.d.ts +0 -21
  214. package/build/src/utils/color.d.ts.map +0 -1
  215. package/build/src/utils/computeCommonComponents.d.ts +0 -5
  216. package/build/src/utils/computeCommonComponents.d.ts.map +0 -1
  217. package/build/src/utils/index.d.ts +0 -4
  218. package/build/src/utils/index.d.ts.map +0 -1
  219. package/build/tsconfig.tsbuildinfo +0 -1
package/build/style.css CHANGED
@@ -1 +1 @@
1
- @import"https://fonts.googleapis.com/css2?family=Figtree:ital,wght@0,300..900;1,300..900&display=swap";@layer wov-reset{.wov-root :where(*:not(svg,svg *)){all:revert}}.wov-root{--wov-primary: #6a58f2;--wov-primary-light: #8a76f4;--wov-error: #ff4d4f;--wov-gray-100: #f8f9f9;--wov-gray-200: #e3e5e8;--wov-gray-300: #c7ccd1;--wov-gray-400: #9099a4;--wov-gray-500: #4f5660;--wov-gray-600: #2e3338;--wov-gray-700: #060607;--wov-z-block-content: 1;--wov-z-cursors: 50;--wov-z-ui: 100;--wov-z-floating-menu: 101;--wov-z-overlay: 1000;--wov-z-dropdown: 1001;--wov-z-tooltip: 1002;--wov-font-family: "Figtree", sans-serif;--wov-safe-area-bottom: 0px;--wov-menu-border-radius: 12px;--wov-menu-tooltip-border-radius: 6px;--wov-transition-duration: .15s;--wov-transition-timing-function: cubwov-bezier(.4, 0, .2, 1);--wov-highlighted-block-outline-color: var(--wov-primary);--wov-highlighted-block-outline-width: 1.5px;--wov-highlighted-block-outline-offset: -1px;--wov-highlighted-block-border-radius: 2px;--wov-selection-box-bg: #5865f222;--wov-text-selection-color: var(--wov-primary-light)}.wov-root{font-family:var(--wov-font-family);touch-action:none;-webkit-tap-highlight-color:transparent}.wov-root svg{display:block}.wov-root ::selection{background-color:var(--wov-text-selection-color)}.wov-block[data-hovered]>*,.wov-block[data-selected]>*{outline:calc(var(--wov-highlighted-block-outline-width) / var(--wov-zoom, 1)) solid var(--wov-highlighted-block-outline-color);outline-offset:calc(var(--wov-highlighted-block-outline-offset) / var(--wov-zoom, 1));border-radius:calc(var(--wov-highlighted-block-border-radius) / var(--wov-zoom, 1))}.wov-block[data-held-by-other]>*{outline:calc(3px / var(--wov-zoom, 1)) solid var(--wov-held-by-color);outline-offset:calc(2px / var(--wov-zoom, 1));border-radius:calc(var(--wov-highlighted-block-border-radius) / var(--wov-zoom, 1))}@media (hover: none){.wov-menu-tooltip{display:none!important}}.wov-arc-arrow[data-v-bcf5b4f3]{display:flex;position:relative;align-items:center;justify-content:center;width:100%;height:100%;overflow:visible;box-sizing:border-box}.arrow-svg[data-v-bcf5b4f3]{width:100%;height:100%;overflow:visible!important}.highlight-overlay[data-v-bcf5b4f3]{stroke:var(--wov-highlighted-block-outline-color)}.wov-block[data-hovered]>.wov-arc-arrow,.wov-block[data-selected]>.wov-arc-arrow{outline:none}.wov-arrow-handle{position:relative;display:block;width:100%;height:100%}.wov-arrow-handle-inner{position:absolute;top:0;right:0;bottom:0;left:0;box-sizing:border-box;width:100%;height:100%}.wov-arrow-handle-inner:before{content:"";position:absolute;left:50%;top:50%;border-radius:50%;box-sizing:border-box;background-color:var(--wov-primary-light);transform:translate(-50%,-50%) scale(calc(1 / var(--wov-zoom)));transform-origin:center center;transition-property:background-color;transition-timing-function:var(--wov-transition-timing-function);transition-duration:var(--wov-transition-duration);opacity:0}.wov-arrow-handle-inner:after{content:"";position:absolute;left:50%;top:50%;width:50%;height:50%;border-radius:50%;box-sizing:border-box;border:calc(2px / var(--wov-zoom)) solid var(--wov-primary);background-color:var(--wov-gray-100);transform:translate(-50%,-50%);transform-origin:center center;transition-property:background-color;transition-timing-function:var(--wov-transition-timing-function);transition-duration:var(--wov-transition-duration)}.wov-block[data-hovered]>.wov-arrow-handle{outline:none}.wov-block[data-hovered]>.wov-arrow-handle>.wov-arrow-handle-inner:before{opacity:.4}.wov-arrow-terminal{position:relative;display:block;width:100%;height:100%;pointer-events:none}.wov-arrow-terminal-ring{position:absolute;left:50%;top:50%;width:100%;height:100%;border-radius:50%;box-sizing:border-box;border:calc(3px / var(--wov-zoom)) solid var(--wov-primary);transform:translate(-50%,-50%);transform-origin:center center}.wov-arrow-terminal-fill{width:100%;height:100%;border-radius:50%;background-color:var(--wov-gray-100);opacity:.8}.wov-elbow-arrow[data-v-b2719db1]{display:flex;position:relative;align-items:center;justify-content:center;width:100%;height:100%;overflow:visible;box-sizing:border-box}.arrow-svg[data-v-b2719db1]{width:100%;height:100%;overflow:visible!important}.highlight-bg[data-v-b2719db1]{stroke:var(--wov-gray-600)}.highlight-overlay[data-v-b2719db1]{stroke:var(--wov-highlighted-block-outline-color)}.wov-block[data-hovered]>.wov-elbow-arrow,.wov-block[data-selected]>.wov-elbow-arrow{outline:none}.wov-eraser-stroke{position:relative;width:100%;height:100%}.wov-eraser-stroke *{box-sizing:border-box;overflow:visible;display:block}.wov-eraser-stroke svg{width:100%;height:100%;overflow:visible}.wov-image-block{width:100%;height:100%;position:relative;display:flex;align-items:center;justify-content:center;overflow:hidden}.wov-image-block img{display:block}.wov-image-placeholder{width:100%;height:100%;display:flex;align-items:center;justify-content:center;background-color:#8080801a;border:1px dashed rgba(128,128,128,.3);border-radius:4px;color:#808080b3;font-size:14px}.wov-image-error{background-color:#ff00000d;border-color:#f003;color:#ff0000b3}.wov-image-upload-overlay{position:absolute;bottom:0;left:0;right:0;padding:4px 8px;background-color:#0009;color:#fff;font-size:12px;text-align:center}.wov-image-upload-status{display:inline-block}.wov-pen-stroke[data-v-9b41c649]{position:relative;width:100%;height:100%}.wov-pen-stroke[data-v-9b41c649] *{box-sizing:border-box;overflow:visible;display:block}.wov-pen-stroke svg[data-v-9b41c649]{width:100%;height:100%;overflow:visible}.wov-pen-stroke .highlight[data-v-9b41c649]{position:absolute;top:0;right:0;bottom:0;left:0}.wov-block[data-hovered]>.wov-pen-stroke,.wov-block[data-selected]>.wov-pen-stroke{outline:none}.wov-block[data-held-by-other]>.wov-pen-stroke:not([data-complete]){outline:none}.wov-editable-text{width:100%;display:block;color:#000}.wov-editable-text p{margin:0}.wov-editable-text p:empty:before{content:"";display:inline-block}.wov-editable-text .ProseMirror{outline:none;white-space:inherit;word-wrap:break-word}.wov-editable-text .ProseMirror-focused{outline:none}.wov-shape-block{position:relative;width:100%;height:100%;display:flex;box-sizing:border-box}.wov-shape-svg{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;overflow:visible;z-index:-1}.wov-shape-content{width:100%;height:100%;display:flex;box-sizing:border-box;padding:8px;z-index:1}.wov-text-block{width:fit-content;height:fit-content}.wov-block[data-selected]>.wov-text-block{outline:none}.wov-block[data-held-by-other]>.wov-text-block[data-text-empty]{outline:none}.wov-menu-dropdown-trigger{display:flex;align-items:center;justify-content:center;cursor:pointer}.wov-menu-dropdown{position:absolute;z-index:var(--wov-z-dropdown)}input.wov-color-input{margin-bottom:8px;box-sizing:border-box;padding:6px 8px;font-size:18px;text-align:center;font-family:inherit;color:var(--wov-gray-100);background-color:var(--wov-gray-600);border:1px solid var(--wov-gray-600);border-radius:4px;outline:none}input.wov-color-input:focus{border-color:var(--wov-primary)}.wov-color-slider{width:16px;height:160px;border-radius:6px;position:relative;cursor:pointer}.wov-color-slider-gradient{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:6px}.wov-color-slider-thumb{position:absolute;left:50%;width:16px;height:8px;border-radius:4px;border:2px solid white;box-shadow:0 0 2px #00000080;transform:translate(-50%,-50%);pointer-events:none}.wov-color-picker{display:inline-flex;flex-direction:column;align-items:stretch;background-color:var(--wov-gray-700);border-radius:var(--wov-menu-border-radius);box-shadow:0 0 .5px #0000002e,0 3px 8px #0000001a,0 1px 3px #0000001a;padding:8px}.wov-color-picker-area{display:flex;gap:8px}.wov-color-picker-selector{width:160px;height:160px;border-radius:6px;position:relative;cursor:crosshair}.wov-color-picker-selector-gradient{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:6px;background-image:linear-gradient(to top,#000,#0000),linear-gradient(to right,#fff,#fff0)}.wov-color-picker-selector-thumb{position:absolute;width:14px;height:14px;border-radius:9999px;border:2px solid white;box-shadow:0 0 2px #00000080;transform:translate(-50%,-50%);pointer-events:none}.wov-color-picker-opacity{background-image:linear-gradient(45deg,#808080 25%,transparent 25%),linear-gradient(-45deg,#808080 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#808080 75%),linear-gradient(-45deg,transparent 75%,#808080 75%);background-size:8px 8px;background-position:0 0,0 4px,4px -4px,-4px 0px;background-color:#404040}.wov-color-bubbles{color:var(--wov-gray-100);background-color:var(--wov-gray-700);border-radius:var(--wov-menu-border-radius);box-shadow:0 0 .5px #0000002e,0 3px 8px #0000001a,0 1px 3px #0000001a;display:grid;grid-auto-flow:column;grid-template-rows:repeat(2,minmax(0,1fr));gap:8px;padding:8px;justify-content:center}.wov-color-bubble{width:20px;height:20px;border-radius:9999px;outline-style:solid;outline-width:1px;outline-color:#fff5;cursor:pointer}.wov-color-bubble.selected{outline-width:2px;outline-color:var(--wov-primary);outline-offset:2px}.wov-rainbow-bubble{background:radial-gradient(50% 50% at 50% 50%,#ffffff 0%,transparent 100%),conic-gradient(from 0deg at 50% 50%,red,#ffa800 47.73deg,#ff0 79.56deg,#0f0 121.33deg,#0ff 180.99deg,#00f 238.67deg,#f0f 294.36deg,red 360deg),#c4c4c4}.wov-color-button{display:flex;cursor:pointer;align-items:center;justify-content:center;height:100%;gap:8px;margin:0 8px}.wov-color-swatch{width:20px;height:20px;border-radius:9999px;outline-style:solid;outline-width:1px;outline-color:#fff5}.wov-menu-button{display:flex;align-items:center;justify-content:center;height:32px;border:none;background:transparent;cursor:pointer;color:var(--wov-gray-100);transition:background-color .15s ease,color .15s ease}.wov-menu-button:hover{background:#0000000d}.wov-active{background:var(--wov-primary)}.wov-menu-button svg{width:22px;height:18px;flex-shrink:0}.wov-menu-tooltip{position:absolute;z-index:var(--wov-z-tooltip);width:max-content;background:var(--wov-gray-700);color:var(--wov-gray-100);font-weight:700;padding:5px 10px;border-radius:var(--wov-menu-tooltip-border-radius);font-size:70%;pointer-events:none}.wov-tooltip-fade-enter-active{transition:opacity .15s ease-out}.wov-tooltip-fade-leave-active{transition:opacity .1s ease-out}.wov-tooltip-fade-enter-from,.wov-tooltip-fade-leave-to{opacity:0}.wov-fill-color-button{display:flex;cursor:pointer;align-items:center;justify-content:center;height:100%;gap:8px;margin:0 8px}.wov-fill-color-icon{width:18px;height:18px}.wov-fill-dropdown{display:flex;flex-direction:column}.wov-fill-mode-section{display:flex;flex-direction:row;justify-content:space-evenly;background-color:var(--wov-gray-700);border-radius:var(--wov-menu-border-radius) var(--wov-menu-border-radius) 0 0;margin-bottom:-2px}.wov-fill-mode-option{display:flex;flex-direction:column;align-items:center;gap:4px;flex:1;padding:6px 4px;border:none;background:transparent;cursor:pointer;border-radius:0;color:var(--wov-gray-100);font-size:11px}.wov-fill-mode-option:first-child{border-top-left-radius:8px}.wov-fill-mode-option:last-child{border-top-right-radius:8px}.wov-fill-mode-option:hover,.wov-fill-mode-option.is-active{background:var(--wov-gray-600)}.wov-fill-mode-option svg{width:24px;height:24px}.wov-shape-kind-button{display:flex;cursor:pointer;align-items:center;justify-content:center;height:100%;gap:6px;margin:0 8px}.wov-shape-kind-icon{width:18px;height:18px}.wov-shape-kind-dropdown{display:grid;grid-template-columns:repeat(3,1fr);gap:4px;padding:8px;background:var(--wov-gray-700);border-radius:var(--wov-menu-border-radius);min-width:200px}.wov-shape-kind-option{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:8px;border:none;background:transparent;color:var(--wov-gray-100);cursor:pointer;border-radius:4px;font-size:10px}.wov-shape-kind-option:hover{background:var(--wov-gray-600)}.wov-shape-kind-option.is-selected{background:var(--wov-primary-600)}.wov-shape-option-icon{width:24px;height:24px}.wov-stroke-style-section{display:flex;flex-direction:row;justify-content:space-evenly;margin-bottom:-2px}.wov-stroke-style-option{display:flex;flex-direction:column;align-items:center;gap:4px;flex:1;padding:6px 4px;border:none;background:transparent;cursor:pointer;border-radius:0;color:var(--wov-gray-100);font-size:11px}.wov-stroke-style-option:first-child{border-top-left-radius:8px}.wov-stroke-style-option:last-child{border-top-right-radius:8px}.wov-stroke-style-option:hover{background:var(--wov-gray-700)}.wov-stroke-style-option.is-active{background:var(--wov-gray-600)}.wov-stroke-style-option svg{width:32px;height:12px}.wov-stroke-color-button{display:flex;cursor:pointer;align-items:center;justify-content:center;height:100%;gap:6px;margin:0 8px}.wov-stroke-color-icon{width:18px;height:18px}.wov-stroke-dropdown{display:flex;flex-direction:column}.wov-stroke-divider{height:1px;background:var(--wov-gray-600);margin:0 8px}.wov-font-family-button{display:flex;cursor:pointer;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;height:100%;gap:8px;padding:0 12px}.wov-font-family-label{font-size:14px;white-space:nowrap;max-width:120px;overflow:hidden;text-overflow:ellipsis}.wov-font-family-menu{background-color:var(--wov-gray-700);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;border-radius:8px;cursor:default;width:200px}.wov-font-list{max-height:200px;color:#fff;overflow-y:auto;overflow-x:hidden;border-radius:8px}.wov-font-list>*:first-child{border-top-left-radius:8px;border-top-right-radius:8px}.wov-font-list>*:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}.wov-font-item{display:flex;align-items:center;height:32px;padding:0 12px;width:100%;transition:background-color .2s;cursor:pointer}.wov-font-item.active{background-color:var(--wov-primary)}.wov-font-item:not(.active):hover{background-color:var(--wov-gray-600)}.wov-font-preview{filter:invert(1);height:50%;overflow:hidden;object-fit:cover;object-position:left}.wov-font-name{font-size:14px}.wov-font-size-button{display:flex;cursor:pointer;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;height:100%;gap:8px;padding:0 12px}.wov-font-size-label{font-size:14px;white-space:nowrap}.wov-font-size-menu{background-color:var(--wov-gray-700);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;border-radius:8px;cursor:pointer;width:150px}.wov-font-size-menu>*:first-child{border-top-left-radius:8px;border-top-right-radius:8px}.wov-font-size-option{display:flex;align-items:center;height:40px;padding:0 32px;transition:background-color .2s}.wov-font-size-option.active{background-color:var(--wov-primary)}.wov-font-size-option:not(.active):hover{background-color:var(--wov-gray-600)}.wov-check-icon{color:#fff;width:16px;margin-right:8px;margin-left:-24px}.wov-option-label{color:#fff}.wov-separator{margin:4px 0;width:100%;height:.75px;background-color:var(--wov-gray-600)}.wov-input-container{display:flex;position:relative;align-items:center;justify-content:center}.wov-custom-input{background-color:var(--wov-gray-700);width:100%;margin:8px;border-radius:6px;border:none;padding:8px;color:#fff;font-size:14px;outline:1px solid var(--wov-gray-600)}.wov-custom-input:hover{outline:1px solid var(--wov-gray-500)}.wov-custom-input:focus{outline:2px solid var(--wov-primary)}.wov-px-suffix{position:absolute;right:16px;color:var(--wov-gray-400);font-size:14px}.wov-text-color-button{display:flex;flex-shrink:0;cursor:pointer;align-items:center;justify-content:center;height:100%;gap:8px;padding:0 0 0 8px}.wov-text-icon-container{display:flex;flex-shrink:0;flex-direction:column;align-items:center;justify-content:center}.wov-text-icon{width:16px;height:16px}.wov-color-underline{width:100%;height:3px;margin-top:2px;border:1px solid var(--wov-gray-500);border-radius:1px}.wov-text-group-button{display:flex;cursor:pointer;align-items:center;justify-content:center;height:100%;gap:4px;padding:0 12px}.wov-text-group-icon{width:18px;height:18px}.wov-text-group-dropdown{display:flex;flex-direction:column;background-color:var(--wov-gray-700);border-radius:12px;padding:8px;gap:4px;color:var(--wov-gray-100);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a}.wov-text-group-row{display:flex;align-items:center;height:40px;border-radius:8px;overflow:hidden;background-color:var(--wov-gray-600)}.wov-text-group-row>*{height:100%}.wov-text-group-row-full>*:not(.wov-text-group-spacer){flex:1}.wov-text-group-row>*:hover:not(.wov-text-group-spacer){background-color:var(--wov-gray-500)}.wov-text-group-spacer{width:1px;height:24px;margin:auto 4px;background-color:var(--wov-gray-500)}.wov-floating-menu-bar{display:flex;overflow:hidden;cursor:pointer;height:40px;color:var(--wov-gray-100);background-color:var(--wov-gray-700);border-radius:var(--wov-menu-border-radius);box-shadow:0 0 .5px #0000002e,0 3px 8px #0000001a,0 1px 3px #0000001a}.wov-floating-menu-bar>*:first-child{border-top-left-radius:var(--wov-menu-border-radius);border-bottom-left-radius:var(--wov-menu-border-radius)}.wov-floating-menu-bar>*:last-child{border-top-right-radius:var(--wov-menu-border-radius);border-bottom-right-radius:var(--wov-menu-border-radius)}.wov-floating-menu-bar>*{height:100%;transition-property:background-color;transition-timing-function:var(--wov-transition-timing-function);transition-duration:var(--wov-transition-duration)}.wov-floating-menu-bar>*:hover:not([divider]){background-color:var(--wov-gray-600)}.wov-floating-menu-bar>*[menu-open]{background-color:var(--wov-gray-600)}.wov-floating-menu-bar>.wov-active:hover{background:var(--wov-primary-light)}.wov-divider{width:1px!important;height:24px!important;margin:auto 0;background-color:var(--wov-gray-600);flex-shrink:0}.wov-floating-menu{position:absolute;z-index:var(--wov-z-floating-menu);pointer-events:auto}.wov-floating-menu-inner{transition:transform .15s ease-out}.wov-fade-enter-active{transition:opacity .15s ease-out}.wov-fade-enter-from{opacity:0}.wov-fade-enter-from .wov-floating-menu-inner{transform:translateY(10px)}.wov-loading-overlay{position:absolute;top:0;right:0;bottom:0;left:0;z-index:var(--wov-z-overlay);display:flex;align-items:center;justify-content:center;background:#00000080;pointer-events:all}.wov-loading-spinner{font-size:24px;font-family:monospace;color:var(--wov-gray-100, #f5f5f5)}.wov-loading-fade-enter-active,.wov-loading-fade-leave-active{transition:opacity .3s ease}.wov-loading-fade-enter-from,.wov-loading-fade-leave-to{opacity:0}.wov-action-bar{display:none}@media (pointer: coarse){.wov-action-bar{display:flex;width:fit-content;gap:8px;padding:4px 8px;margin-left:10px;background-color:var(--wov-gray-200);border-top-left-radius:10px;border-top-right-radius:10px;box-shadow:0 0 .5px #0000002e,0 3px 8px #0000001a,0 1px 3px #0000001a}.wov-action-button{display:flex;align-items:center;justify-content:center;width:24px;height:24px;border:none;background:transparent;cursor:pointer;color:var(--wov-gray-700);border-radius:var(--wov-menu-border-radius)}.wov-action-button:hover{background-color:var(--wov-gray-200)}.wov-action-button:active{background-color:var(--wov-gray-300)}.wov-action-button:disabled{opacity:.4;cursor:default}.wov-action-button svg{width:14px;height:14px;display:block;flex-shrink:0}}.wov-toolbar-button{display:flex;align-items:center;justify-content:center;width:40px;height:40px;border:none;background:transparent;cursor:pointer;color:var(--wov-gray-100);transition-property:background-color;transition-timing-function:var(--wov-transition-timing-function);transition-duration:var(--wov-transition-duration)}.wov-toolbar-button:hover{background-color:var(--wov-gray-600)}.wov-toolbar-button.selected{background-color:var(--wov-primary)}.wov-toolbar-button svg{width:20px;height:20px}.wov-toolbar-container{position:absolute;bottom:calc(20px + var(--wov-safe-area-bottom, 0px));left:50%;transform:translate(-50%);z-index:var(--wov-z-ui)}.wov-toolbar{display:flex;gap:8px;padding:8px 10px;overflow:hidden;cursor:pointer;color:var(--wov-gray-100);background-color:var(--wov-gray-100);border-radius:12px;box-shadow:0 0 .5px #0000002e,0 3px 8px #0000001a,0 1px 3px #0000001a}.wov-toolbar *{transition-property:background-color;transition-timing-function:var(--wov-transition-timing-function);transition-duration:var(--wov-transition-duration)}.wov-toolbar *[menu-open]{background-color:var(--wov-gray-600)}.wov-toolbar-button{display:flex;align-items:center;justify-content:center;width:40px;height:40px;border:none;background:transparent;cursor:pointer;color:var(--wov-gray-700);border-radius:var(--wov-menu-border-radius)}.wov-toolbar-button:hover{background-color:var(--wov-gray-200)}.wov-toolbar-button.selected{background-color:var(--wov-primary);color:var(--wov-gray-100)}.wov-toolbar-button svg{width:20px;height:20px;display:block;flex-shrink:0}.wov-overflow-button.menu-open{background-color:var(--wov-gray-300)}.wov-toolbar-overflow-menu{display:flex;gap:8px;padding:8px 10px;background-color:var(--wov-gray-100);border-radius:12px;box-shadow:0 0 .5px #0000002e,0 3px 8px #0000001a,0 1px 3px #0000001a;z-index:var(--wov-z-dropdown)}.menu{background-color:var(--wov-gray-700);border-radius:var(--wov-menu-border-radius);box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}.wov-user-presence{position:absolute;top:8px;right:8px;z-index:var(--wov-z-ui)}.wov-user-presence-trigger{display:flex;align-items:center;padding:4px;border:none;border-radius:20px;background:transparent;cursor:pointer;transition:background-color .15s ease}.wov-user-presence-trigger:hover,.wov-user-presence-trigger.is-open{background-color:#00000014}.wov-user-presence-avatars{display:flex;flex-direction:row-reverse}.wov-user-presence-avatars .wov-user-avatar:not(:first-child){margin-right:-12px}.wov-user-avatar{width:24px;height:24px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;font-size:12px;box-shadow:0 2px 4px #0000001a;border:2px solid white;-webkit-user-select:none;user-select:none}.wov-user-avatar-small{width:28px;height:28px;font-size:11px;flex-shrink:0}.wov-user-avatar-img{width:100%;height:100%;border-radius:50%;object-fit:cover}.wov-user-presence-dropdown{position:absolute;top:100%;right:0;margin-top:8px;min-width:200px;background:#fff;border-radius:8px;box-shadow:0 4px 12px #00000026;overflow:hidden}.wov-user-presence-list{max-height:240px;overflow-y:auto}.wov-user-presence-item{display:flex;align-items:center;gap:12px;padding:8px 16px}.wov-user-presence-item:hover{background-color:#f9fafb}.wov-user-presence-name{font-size:13px;color:#374151;font-family:system-ui,-apple-system,sans-serif;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wov-selection-box{box-sizing:border-box;width:100%;height:100%;background-color:var(--wov-selection-box-bg);border-style:solid;border-width:calc(3px / var(--wov-zoom));border-color:var(--wov-primary)}.wov-transform-box{position:relative;width:100%;height:100%;box-sizing:border-box;border:calc(2px / var(--wov-zoom)) solid var(--wov-primary);pointer-events:none}.wov-transform-handle{position:relative;width:100%;height:100%;box-sizing:border-box;border:calc(2px / var(--wov-zoom)) solid var(--wov-primary);border-radius:calc(2px / var(--wov-zoom));background-color:var(--wov-gray-100);transition-property:background-color;transition-timing-function:var(--wov-transition-timing-function);transition-duration:var(--wov-transition-duration)}.wov-block[data-hovered]>.wov-transform-handle{background-color:var(--wov-primary)}.wov-sticky-note{width:100%;height:fit-content;display:flex;padding:8%;box-sizing:border-box;box-shadow:#101820a6 0 4px 5px -6px,#10182073 0 11px 13px -12px,#10182d06 0 45px 10px -12px inset}.wov-image-drop-zone{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.wov-image-drop-zone.wov-drag-over{pointer-events:auto;background-color:#3b82f61a;border:2px dashed rgba(59,130,246,.5);z-index:9999}.wov-user-cursors{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;overflow:hidden;z-index:var(--wov-z-cursors)}.wov-user-cursor{position:absolute;top:0;left:0;pointer-events:none;will-change:transform;transition:transform .1s ease-out}.wov-cursor-svg{display:block}.wov-cursor-label{position:absolute;top:16px;left:10px;padding:2px 6px;border-radius:4px;font-size:11px;font-family:system-ui,-apple-system,sans-serif;color:#fff;white-space:nowrap;-webkit-user-select:none;user-select:none}.wov-offline-indicator{position:absolute;top:12px;right:12px;z-index:var(--wov-z-ui);padding:6px 12px;color:var(--wov-gray-400);border-radius:6px;font-size:13px;font-weight:500;pointer-events:none}.wov-version-mismatch-overlay{position:absolute;top:0;right:0;bottom:0;left:0;z-index:var(--wov-z-overlay);display:flex;align-items:center;justify-content:center;background:#00000080}.wov-version-mismatch-dialog{background:var(--wov-gray-50);color:var(--wov-gray-900);border-radius:12px;padding:24px 32px;text-align:center;box-shadow:0 4px 24px #0003}.wov-version-mismatch-dialog p{margin:0 0 8px;font-size:14px}.wov-version-mismatch-dialog button{margin-top:12px;padding:8px 20px;border:none;border-radius:6px;background:var(--wov-primary);color:#fff;font-size:14px;font-weight:500;cursor:pointer;transition:background-color .15s ease}.wov-version-mismatch-dialog button:hover{background:var(--wov-primary-light)}.wov-back-to-content{position:absolute;top:16px;left:16px;z-index:var(--wov-z-ui);display:flex;align-items:center;gap:6px;padding:8px 12px;font-size:14px;font-weight:500;color:var(--wov-gray-700, #374151);background-color:var(--wov-gray-100, #ffffff);border:1px solid var(--wov-gray-300, #d1d5db);border-radius:8px;cursor:pointer;box-shadow:0 1px 2px #0000000d,0 1px 3px #0000001a;transition:background-color .15s ease,border-color .15s ease}.wov-back-to-content:hover{background-color:var(--wov-gray-200, #f3f4f6);border-color:var(--wov-gray-400, #9ca3af)}.wov-back-to-content:active{background-color:var(--wov-gray-300, #e5e7eb)}.wov-back-to-content svg{flex-shrink:0}.wov-menu-button{display:flex;align-items:center;justify-content:center;height:100%;gap:4px;padding:0 8px}.wov-menu-dropdown{display:flex;background-color:var(--wov-gray-700);border-radius:var(--wov-menu-border-radius);overflow:hidden;box-shadow:0 0 .5px #0000002e,0 3px 8px #0000001a,0 1px 3px #0000001a}.wov-menu-option{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border:none;background:transparent;color:var(--wov-gray-100);cursor:pointer;transition:background-color .15s ease}.wov-menu-option:hover{background-color:var(--wov-gray-600)}.wov-menu-option.is-active{background-color:var(--wov-primary)}
1
+ @import"https://fonts.googleapis.com/css2?family=Figtree:ital,wght@0,300..900;1,300..900&display=swap";@layer wov-reset{.wov-root :where(*:not(svg,svg *)){all:revert}}.wov-root{--wov-primary: #6a58f2;--wov-primary-light: #8a76f4;--wov-error: #ff4d4f;--wov-gray-100: #f8f9f9;--wov-gray-200: #e3e5e8;--wov-gray-300: #c7ccd1;--wov-gray-400: #9099a4;--wov-gray-500: #4f5660;--wov-gray-600: #2e3338;--wov-gray-700: #060607;--wov-z-block-content: 1;--wov-z-cursors: 50;--wov-z-ui: 100;--wov-z-floating-menu: 101;--wov-z-overlay: 1000;--wov-z-dropdown: 1001;--wov-z-tooltip: 1002;--wov-font-family: "Figtree", sans-serif;--wov-safe-area-bottom: 0px;--wov-menu-border-radius: 12px;--wov-menu-tooltip-border-radius: 6px;--wov-transition-duration: .15s;--wov-transition-timing-function: cubwov-bezier(.4, 0, .2, 1);--wov-highlighted-block-outline-color: var(--wov-primary);--wov-highlighted-block-outline-width: 1.5px;--wov-highlighted-block-outline-offset: -1px;--wov-highlighted-block-border-radius: 2px;--wov-selection-box-bg: #5865f222;--wov-text-selection-color: var(--wov-primary-light)}.wov-root{font-family:var(--wov-font-family);touch-action:none;-webkit-tap-highlight-color:transparent}.wov-root svg{display:block}.wov-root ::selection{background-color:var(--wov-text-selection-color)}.wov-block[data-hovered]>*,.wov-block[data-selected]>*{outline:calc(var(--wov-highlighted-block-outline-width) / var(--wov-zoom, 1)) solid var(--wov-highlighted-block-outline-color);outline-offset:calc(var(--wov-highlighted-block-outline-offset) / var(--wov-zoom, 1));border-radius:calc(var(--wov-highlighted-block-border-radius) / var(--wov-zoom, 1))}.wov-block[data-held-by-other]>*{outline:calc(3px / var(--wov-zoom, 1)) solid var(--wov-held-by-color);outline-offset:calc(2px / var(--wov-zoom, 1));border-radius:calc(var(--wov-highlighted-block-border-radius) / var(--wov-zoom, 1))}@media (hover: none){.wov-menu-tooltip{display:none!important}}.wov-arc-arrow[data-v-bcf5b4f3]{display:flex;position:relative;align-items:center;justify-content:center;width:100%;height:100%;overflow:visible;box-sizing:border-box}.arrow-svg[data-v-bcf5b4f3]{width:100%;height:100%;overflow:visible!important}.highlight-overlay[data-v-bcf5b4f3]{stroke:var(--wov-highlighted-block-outline-color)}.wov-block[data-hovered]>.wov-arc-arrow,.wov-block[data-selected]>.wov-arc-arrow{outline:none}.wov-arrow-handle{position:relative;display:block;width:100%;height:100%}.wov-arrow-handle-inner{position:absolute;top:0;right:0;bottom:0;left:0;box-sizing:border-box;width:100%;height:100%}.wov-arrow-handle-inner:before{content:"";position:absolute;left:50%;top:50%;border-radius:50%;box-sizing:border-box;background-color:var(--wov-primary-light);transform:translate(-50%,-50%) scale(calc(1 / var(--wov-zoom)));transform-origin:center center;transition-property:background-color;transition-timing-function:var(--wov-transition-timing-function);transition-duration:var(--wov-transition-duration);opacity:0}.wov-arrow-handle-inner:after{content:"";position:absolute;left:50%;top:50%;width:50%;height:50%;border-radius:50%;box-sizing:border-box;border:calc(2px / var(--wov-zoom)) solid var(--wov-primary);background-color:var(--wov-gray-100);transform:translate(-50%,-50%);transform-origin:center center;transition-property:background-color;transition-timing-function:var(--wov-transition-timing-function);transition-duration:var(--wov-transition-duration)}.wov-block[data-hovered]>.wov-arrow-handle{outline:none}.wov-block[data-hovered]>.wov-arrow-handle>.wov-arrow-handle-inner:before{opacity:.4}.wov-arrow-terminal{position:relative;display:block;width:100%;height:100%;pointer-events:none}.wov-arrow-terminal-ring{position:absolute;left:50%;top:50%;width:100%;height:100%;border-radius:50%;box-sizing:border-box;border:calc(3px / var(--wov-zoom)) solid var(--wov-primary);transform:translate(-50%,-50%);transform-origin:center center}.wov-arrow-terminal-fill{width:100%;height:100%;border-radius:50%;background-color:var(--wov-gray-100);opacity:.8}.wov-elbow-arrow[data-v-b2719db1]{display:flex;position:relative;align-items:center;justify-content:center;width:100%;height:100%;overflow:visible;box-sizing:border-box}.arrow-svg[data-v-b2719db1]{width:100%;height:100%;overflow:visible!important}.highlight-bg[data-v-b2719db1]{stroke:var(--wov-gray-600)}.highlight-overlay[data-v-b2719db1]{stroke:var(--wov-highlighted-block-outline-color)}.wov-block[data-hovered]>.wov-elbow-arrow,.wov-block[data-selected]>.wov-elbow-arrow{outline:none}.wov-eraser-stroke{position:relative;width:100%;height:100%}.wov-eraser-stroke *{box-sizing:border-box;overflow:visible;display:block}.wov-eraser-stroke svg{width:100%;height:100%;overflow:visible}.wov-image-block{width:100%;height:100%;position:relative;display:flex;align-items:center;justify-content:center;overflow:hidden}.wov-image-block img{display:block}.wov-image-placeholder{width:100%;height:100%;display:flex;align-items:center;justify-content:center;background-color:#8080801a;border:1px dashed rgba(128,128,128,.3);border-radius:4px;color:#808080b3;font-size:14px}.wov-image-error{background-color:#ff00000d;border-color:#f003;color:#ff0000b3}.wov-image-upload-overlay{position:absolute;bottom:0;left:0;right:0;padding:4px 8px;background-color:#0009;color:#fff;font-size:12px;text-align:center}.wov-image-upload-status{display:inline-block}.wov-pen-stroke[data-v-9b41c649]{position:relative;width:100%;height:100%}.wov-pen-stroke[data-v-9b41c649] *{box-sizing:border-box;overflow:visible;display:block}.wov-pen-stroke svg[data-v-9b41c649]{width:100%;height:100%;overflow:visible}.wov-pen-stroke .highlight[data-v-9b41c649]{position:absolute;top:0;right:0;bottom:0;left:0}.wov-block[data-hovered]>.wov-pen-stroke,.wov-block[data-selected]>.wov-pen-stroke{outline:none}.wov-block[data-held-by-other]>.wov-pen-stroke:not([data-complete]){outline:none}.wov-editable-text{width:100%;display:block;color:#000}.wov-editable-text p{margin:0}.wov-editable-text p:empty:before{content:"";display:inline-block}.wov-editable-text .ProseMirror{outline:none;white-space:inherit;word-wrap:break-word}.wov-editable-text .ProseMirror-focused{outline:none}.wov-shape-block{position:relative;width:100%;height:100%;display:flex;box-sizing:border-box}.wov-shape-svg{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;overflow:visible;z-index:-1}.wov-shape-content{width:100%;height:100%;display:flex;box-sizing:border-box;padding:8px;z-index:1}.wov-text-block{width:fit-content;height:fit-content}.wov-block[data-selected]>.wov-text-block{outline:none}.wov-block[data-held-by-other]>.wov-text-block[data-text-empty]{outline:none}.wov-menu-dropdown-trigger{display:flex;align-items:center;justify-content:center;cursor:pointer}.wov-menu-dropdown{position:absolute;z-index:var(--wov-z-dropdown)}input.wov-color-input{margin-bottom:8px;box-sizing:border-box;padding:6px 8px;font-size:18px;text-align:center;font-family:inherit;color:var(--wov-gray-100);background-color:var(--wov-gray-600);border:1px solid var(--wov-gray-600);border-radius:4px;outline:none}input.wov-color-input:focus{border-color:var(--wov-primary)}.wov-color-slider{width:16px;height:160px;border-radius:6px;position:relative;cursor:pointer}.wov-color-slider-gradient{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:6px}.wov-color-slider-thumb{position:absolute;left:50%;width:16px;height:8px;border-radius:4px;border:2px solid white;box-shadow:0 0 2px #00000080;transform:translate(-50%,-50%);pointer-events:none}.wov-color-picker{display:inline-flex;flex-direction:column;align-items:stretch;background-color:var(--wov-gray-700);border-radius:var(--wov-menu-border-radius);box-shadow:0 0 .5px #0000002e,0 3px 8px #0000001a,0 1px 3px #0000001a;padding:8px}.wov-color-picker-area{display:flex;gap:8px}.wov-color-picker-selector{width:160px;height:160px;border-radius:6px;position:relative;cursor:crosshair}.wov-color-picker-selector-gradient{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:6px;background-image:linear-gradient(to top,#000,#0000),linear-gradient(to right,#fff,#fff0)}.wov-color-picker-selector-thumb{position:absolute;width:14px;height:14px;border-radius:9999px;border:2px solid white;box-shadow:0 0 2px #00000080;transform:translate(-50%,-50%);pointer-events:none}.wov-color-picker-opacity{background-image:linear-gradient(45deg,#808080 25%,transparent 25%),linear-gradient(-45deg,#808080 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#808080 75%),linear-gradient(-45deg,transparent 75%,#808080 75%);background-size:8px 8px;background-position:0 0,0 4px,4px -4px,-4px 0px;background-color:#404040}.wov-color-bubbles{color:var(--wov-gray-100);background-color:var(--wov-gray-700);border-radius:var(--wov-menu-border-radius);box-shadow:0 0 .5px #0000002e,0 3px 8px #0000001a,0 1px 3px #0000001a;display:grid;grid-auto-flow:column;grid-template-rows:repeat(2,minmax(0,1fr));gap:8px;padding:8px;justify-content:center}.wov-color-bubble{width:20px;height:20px;border-radius:9999px;outline-style:solid;outline-width:1px;outline-color:#fff5;cursor:pointer}.wov-color-bubble.selected{outline-width:2px;outline-color:var(--wov-primary);outline-offset:2px}.wov-rainbow-bubble{background:radial-gradient(50% 50% at 50% 50%,#ffffff 0%,transparent 100%),conic-gradient(from 0deg at 50% 50%,red,#ffa800 47.73deg,#ff0 79.56deg,#0f0 121.33deg,#0ff 180.99deg,#00f 238.67deg,#f0f 294.36deg,red 360deg),#c4c4c4}.wov-color-button{display:flex;cursor:pointer;align-items:center;justify-content:center;height:100%;gap:8px;margin:0 8px}.wov-color-swatch{width:20px;height:20px;border-radius:9999px;outline-style:solid;outline-width:1px;outline-color:#fff5}.wov-menu-button{display:flex;align-items:center;justify-content:center;height:32px;border:none;background:transparent;cursor:pointer;color:var(--wov-gray-100);transition:background-color .15s ease,color .15s ease}.wov-menu-button.wov-active{background-color:var(--wov-primary)}.wov-menu-button svg{width:22px;height:18px;flex-shrink:0}.wov-menu-tooltip{position:absolute;z-index:var(--wov-z-tooltip);width:max-content;background:var(--wov-gray-700);color:var(--wov-gray-100);font-weight:700;padding:5px 10px;border-radius:var(--wov-menu-tooltip-border-radius);font-size:70%;pointer-events:none}.wov-tooltip-fade-enter-active{transition:opacity .15s ease-out}.wov-tooltip-fade-leave-active{transition:opacity .1s ease-out}.wov-tooltip-fade-enter-from,.wov-tooltip-fade-leave-to{opacity:0}.wov-fill-color-button{display:flex;cursor:pointer;align-items:center;justify-content:center;height:100%;gap:8px;margin:0 8px}.wov-fill-color-icon{width:18px;height:18px}.wov-fill-dropdown{display:flex;flex-direction:column}.wov-fill-mode-section{display:flex;flex-direction:row;justify-content:space-evenly;background-color:var(--wov-gray-700);border-radius:var(--wov-menu-border-radius) var(--wov-menu-border-radius) 0 0;margin-bottom:-2px}.wov-fill-mode-option{display:flex;flex-direction:column;align-items:center;gap:4px;flex:1;padding:6px 4px;border:none;background:transparent;cursor:pointer;border-radius:0;color:var(--wov-gray-100);font-size:11px}.wov-fill-mode-option:first-child{border-top-left-radius:8px}.wov-fill-mode-option:last-child{border-top-right-radius:8px}.wov-fill-mode-option:hover,.wov-fill-mode-option.is-active{background:var(--wov-gray-600)}.wov-fill-mode-option svg{width:24px;height:24px}.wov-shape-kind-button{display:flex;cursor:pointer;align-items:center;justify-content:center;height:100%;gap:6px;margin:0 8px}.wov-shape-kind-icon{width:18px;height:18px}.wov-shape-kind-dropdown{display:grid;grid-template-columns:repeat(3,1fr);gap:4px;padding:8px;background:var(--wov-gray-700);border-radius:var(--wov-menu-border-radius);min-width:200px}.wov-shape-kind-option{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:8px;border:none;background:transparent;color:var(--wov-gray-100);cursor:pointer;border-radius:4px;font-size:10px}.wov-shape-kind-option:hover{background:var(--wov-gray-600)}.wov-shape-kind-option.is-selected{background:var(--wov-primary-600)}.wov-shape-option-icon{width:24px;height:24px}.wov-stroke-style-section{display:flex;flex-direction:row;justify-content:space-evenly;margin-bottom:-2px}.wov-stroke-style-option{display:flex;flex-direction:column;align-items:center;gap:4px;flex:1;padding:6px 4px;border:none;background:transparent;cursor:pointer;border-radius:0;color:var(--wov-gray-100);font-size:11px}.wov-stroke-style-option:first-child{border-top-left-radius:8px}.wov-stroke-style-option:last-child{border-top-right-radius:8px}.wov-stroke-style-option:hover{background:var(--wov-gray-700)}.wov-stroke-style-option.is-active{background:var(--wov-gray-600)}.wov-stroke-style-option svg{width:32px;height:12px}.wov-stroke-color-button{display:flex;cursor:pointer;align-items:center;justify-content:center;height:100%;gap:6px;margin:0 8px}.wov-stroke-color-icon{width:18px;height:18px}.wov-stroke-dropdown{display:flex;flex-direction:column}.wov-stroke-divider{height:1px;background:var(--wov-gray-600);margin:0 8px}.wov-font-family-button{display:flex;cursor:pointer;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;height:100%;gap:8px;padding:0 12px}.wov-font-family-label{font-size:14px;white-space:nowrap;max-width:120px;overflow:hidden;text-overflow:ellipsis}.wov-font-family-menu{background-color:var(--wov-gray-700);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;border-radius:8px;cursor:default;width:200px}.wov-font-list{max-height:200px;color:#fff;overflow-y:auto;overflow-x:hidden;border-radius:8px}.wov-font-list>*:first-child{border-top-left-radius:8px;border-top-right-radius:8px}.wov-font-list>*:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}.wov-font-item{display:flex;align-items:center;height:32px;padding:0 12px;width:100%;transition:background-color .2s;cursor:pointer}.wov-font-item.active{background-color:var(--wov-primary)}.wov-font-item:not(.active):hover{background-color:var(--wov-gray-600)}.wov-font-preview{filter:invert(1);height:50%;overflow:hidden;object-fit:cover;object-position:left}.wov-font-name{font-size:14px}.wov-font-size-button{display:flex;cursor:pointer;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;height:100%;gap:8px;padding:0 12px}.wov-font-size-label{font-size:14px;white-space:nowrap}.wov-font-size-menu{background-color:var(--wov-gray-700);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;border-radius:8px;cursor:pointer;width:150px}.wov-font-size-menu>*:first-child{border-top-left-radius:8px;border-top-right-radius:8px}.wov-font-size-option{display:flex;align-items:center;height:40px;padding:0 32px;transition:background-color .2s}.wov-font-size-option.active{background-color:var(--wov-primary)}.wov-font-size-option:not(.active):hover{background-color:var(--wov-gray-600)}.wov-check-icon{color:#fff;width:16px;margin-right:8px;margin-left:-24px}.wov-option-label{color:#fff}.wov-separator{margin:4px 0;width:100%;height:.75px;background-color:var(--wov-gray-600)}.wov-input-container{display:flex;position:relative;align-items:center;justify-content:center}.wov-custom-input{background-color:var(--wov-gray-700);width:100%;margin:8px;border-radius:6px;border:none;padding:8px;color:#fff;font-size:14px;outline:1px solid var(--wov-gray-600)}.wov-custom-input:hover{outline:1px solid var(--wov-gray-500)}.wov-custom-input:focus{outline:2px solid var(--wov-primary)}.wov-px-suffix{position:absolute;right:16px;color:var(--wov-gray-400);font-size:14px}.wov-text-color-button{display:flex;flex-shrink:0;cursor:pointer;align-items:center;justify-content:center;height:100%;gap:8px;padding:0 0 0 8px}.wov-text-icon-container{display:flex;flex-shrink:0;flex-direction:column;align-items:center;justify-content:center}.wov-text-icon{width:16px;height:16px}.wov-color-underline{width:100%;height:3px;margin-top:2px;border:1px solid var(--wov-gray-500);border-radius:1px}.wov-text-group-button{display:flex;cursor:pointer;align-items:center;justify-content:center;height:100%;gap:4px;padding:0 12px}.wov-text-group-icon{width:18px;height:18px}.wov-text-group-dropdown{display:flex;flex-direction:column;background-color:var(--wov-gray-700);border-radius:12px;padding:8px;gap:4px;color:var(--wov-gray-100);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a}.wov-text-group-row{display:flex;align-items:center;height:40px;border-radius:8px;overflow:hidden;background-color:var(--wov-gray-600)}.wov-text-group-row>*{height:100%}.wov-text-group-row-full>*:not(.wov-text-group-spacer){flex:1}.wov-text-group-row>.wov-menu-button.wov-active{background-color:var(--wov-primary)}.wov-text-group-spacer{width:1px;height:24px;margin:auto 4px;background-color:var(--wov-gray-500)}.wov-floating-menu-bar{display:flex;overflow:hidden;cursor:pointer;height:40px;color:var(--wov-gray-100);background-color:var(--wov-gray-700);border-radius:var(--wov-menu-border-radius);box-shadow:0 0 .5px #0000002e,0 3px 8px #0000001a,0 1px 3px #0000001a}.wov-floating-menu-bar>*:first-child{border-top-left-radius:var(--wov-menu-border-radius);border-bottom-left-radius:var(--wov-menu-border-radius)}.wov-floating-menu-bar>*:last-child{border-top-right-radius:var(--wov-menu-border-radius);border-bottom-right-radius:var(--wov-menu-border-radius)}.wov-floating-menu-bar>*{height:100%;transition-property:background-color;transition-timing-function:var(--wov-transition-timing-function);transition-duration:var(--wov-transition-duration)}.wov-floating-menu-bar>*:hover:not([divider]){background-color:var(--wov-gray-600)}.wov-floating-menu-bar>*[menu-open]{background-color:var(--wov-gray-600)}.wov-floating-menu-bar>.wov-active:hover{background:var(--wov-primary-light)}.wov-divider{width:1px!important;height:24px!important;margin:auto 0;background-color:var(--wov-gray-600);flex-shrink:0}.wov-floating-menu{position:absolute;z-index:var(--wov-z-floating-menu);pointer-events:auto}.wov-floating-menu-inner{transition:transform .15s ease-out}.wov-fade-enter-active{transition:opacity .15s ease-out}.wov-fade-enter-from{opacity:0}.wov-fade-enter-from .wov-floating-menu-inner{transform:translateY(10px)}.wov-loading-overlay{position:absolute;top:0;right:0;bottom:0;left:0;z-index:var(--wov-z-overlay);display:flex;align-items:center;justify-content:center;background:#00000080;pointer-events:all}.wov-loading-spinner{font-size:24px;font-family:monospace;color:var(--wov-gray-100, #f5f5f5)}.wov-loading-fade-enter-active,.wov-loading-fade-leave-active{transition:opacity .3s ease}.wov-loading-fade-enter-from,.wov-loading-fade-leave-to{opacity:0}.wov-action-bar{display:none}@media (pointer: coarse){.wov-action-bar{display:flex;width:fit-content;gap:8px;padding:4px 8px;margin-left:10px;background-color:var(--wov-gray-200);border-top-left-radius:10px;border-top-right-radius:10px;box-shadow:0 0 .5px #0000002e,0 3px 8px #0000001a,0 1px 3px #0000001a}.wov-action-button{display:flex;align-items:center;justify-content:center;width:24px;height:24px;border:none;background:transparent;cursor:pointer;color:var(--wov-gray-700);border-radius:var(--wov-menu-border-radius)}.wov-action-button:hover{background-color:var(--wov-gray-200)}.wov-action-button:active{background-color:var(--wov-gray-300)}.wov-action-button:disabled{opacity:.4;cursor:default}.wov-action-button svg{width:14px;height:14px;display:block;flex-shrink:0}}.wov-toolbar-button{display:flex;align-items:center;justify-content:center;width:40px;height:40px;border:none;background:transparent;cursor:pointer;color:var(--wov-gray-100);transition-property:background-color;transition-timing-function:var(--wov-transition-timing-function);transition-duration:var(--wov-transition-duration)}.wov-toolbar-button:hover{background-color:var(--wov-gray-600)}.wov-toolbar-button.selected{background-color:var(--wov-primary)}.wov-toolbar-button svg{width:20px;height:20px}.wov-toolbar-container{position:absolute;bottom:calc(20px + var(--wov-safe-area-bottom, 0px));left:50%;transform:translate(-50%);z-index:var(--wov-z-ui)}.wov-toolbar{display:flex;gap:8px;padding:8px 10px;overflow:hidden;cursor:pointer;color:var(--wov-gray-100);background-color:var(--wov-gray-100);border-radius:12px;box-shadow:0 0 .5px #0000002e,0 3px 8px #0000001a,0 1px 3px #0000001a}.wov-toolbar *{transition-property:background-color;transition-timing-function:var(--wov-transition-timing-function);transition-duration:var(--wov-transition-duration)}.wov-toolbar *[menu-open]{background-color:var(--wov-gray-600)}.wov-toolbar-button{display:flex;align-items:center;justify-content:center;width:40px;height:40px;border:none;background:transparent;cursor:pointer;color:var(--wov-gray-700);border-radius:var(--wov-menu-border-radius)}.wov-toolbar-button:hover{background-color:var(--wov-gray-200)}.wov-toolbar-button.selected{background-color:var(--wov-primary);color:var(--wov-gray-100)}.wov-toolbar-button svg{width:20px;height:20px;display:block;flex-shrink:0}.wov-overflow-button.menu-open{background-color:var(--wov-gray-300)}.wov-toolbar-overflow-menu{display:flex;gap:8px;padding:8px 10px;background-color:var(--wov-gray-100);border-radius:12px;box-shadow:0 0 .5px #0000002e,0 3px 8px #0000001a,0 1px 3px #0000001a;z-index:var(--wov-z-dropdown)}.menu{background-color:var(--wov-gray-700);border-radius:var(--wov-menu-border-radius);box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}.wov-user-presence{position:absolute;top:8px;right:8px;z-index:var(--wov-z-ui)}.wov-user-presence-trigger{display:flex;align-items:center;padding:4px;border:none;border-radius:20px;background:transparent;cursor:pointer;transition:background-color .15s ease}.wov-user-presence-trigger:hover,.wov-user-presence-trigger.is-open{background-color:#00000014}.wov-user-presence-avatars{display:flex;flex-direction:row-reverse}.wov-user-presence-avatars .wov-user-avatar:not(:first-child){margin-right:-12px}.wov-user-avatar{width:24px;height:24px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;font-size:12px;box-shadow:0 2px 4px #0000001a;border:2px solid white;-webkit-user-select:none;user-select:none}.wov-user-avatar-small{width:28px;height:28px;font-size:11px;flex-shrink:0}.wov-user-avatar-img{width:100%;height:100%;border-radius:50%;object-fit:cover}.wov-user-presence-dropdown{position:absolute;top:100%;right:0;margin-top:8px;min-width:200px;background:#fff;border-radius:8px;box-shadow:0 4px 12px #00000026;overflow:hidden}.wov-user-presence-list{max-height:240px;overflow-y:auto}.wov-user-presence-item{display:flex;align-items:center;gap:12px;padding:8px 16px}.wov-user-presence-item:hover{background-color:#f9fafb}.wov-user-presence-name{font-size:13px;color:#374151;font-family:system-ui,-apple-system,sans-serif;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wov-selection-box{box-sizing:border-box;width:100%;height:100%;background-color:var(--wov-selection-box-bg);border-style:solid;border-width:calc(3px / var(--wov-zoom));border-color:var(--wov-primary)}.wov-transform-box{position:relative;width:100%;height:100%;box-sizing:border-box;border:calc(2px / var(--wov-zoom)) solid var(--wov-primary);pointer-events:none}.wov-transform-handle{position:relative;width:100%;height:100%;box-sizing:border-box;border:calc(2px / var(--wov-zoom)) solid var(--wov-primary);border-radius:calc(2px / var(--wov-zoom));background-color:var(--wov-gray-100);transition-property:background-color;transition-timing-function:var(--wov-transition-timing-function);transition-duration:var(--wov-transition-duration)}.wov-block[data-hovered]>.wov-transform-handle{background-color:var(--wov-primary)}.wov-sticky-note{width:100%;height:fit-content;display:flex;padding:8%;box-sizing:border-box;box-shadow:#101820a6 0 4px 5px -6px,#10182073 0 11px 13px -12px,#10182d06 0 45px 10px -12px inset}.wov-image-drop-zone{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.wov-image-drop-zone.wov-drag-over{pointer-events:auto;background-color:#3b82f61a;border:2px dashed rgba(59,130,246,.5);z-index:9999}.wov-user-cursors{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;overflow:hidden;z-index:var(--wov-z-cursors)}.wov-user-cursor{position:absolute;top:0;left:0;pointer-events:none;will-change:transform;transition:transform .1s ease-out}.wov-cursor-svg{display:block}.wov-cursor-label{position:absolute;top:16px;left:10px;padding:2px 6px;border-radius:4px;font-size:11px;font-family:system-ui,-apple-system,sans-serif;color:#fff;white-space:nowrap;-webkit-user-select:none;user-select:none}.wov-offline-indicator{position:absolute;top:12px;right:12px;z-index:var(--wov-z-ui);padding:6px 12px;color:var(--wov-gray-400);border-radius:6px;font-size:13px;font-weight:500;pointer-events:none}.wov-version-mismatch-overlay{position:absolute;top:0;right:0;bottom:0;left:0;z-index:var(--wov-z-overlay);display:flex;align-items:center;justify-content:center;background:#00000080}.wov-version-mismatch-dialog{background:var(--wov-gray-50);color:var(--wov-gray-900);border-radius:12px;padding:24px 32px;text-align:center;box-shadow:0 4px 24px #0003}.wov-version-mismatch-dialog p{margin:0 0 8px;font-size:14px}.wov-version-mismatch-dialog button{margin-top:12px;padding:8px 20px;border:none;border-radius:6px;background:var(--wov-primary);color:#fff;font-size:14px;font-weight:500;cursor:pointer;transition:background-color .15s ease}.wov-version-mismatch-dialog button:hover{background:var(--wov-primary-light)}.wov-back-to-content{position:absolute;top:16px;left:16px;z-index:var(--wov-z-ui);display:flex;align-items:center;gap:6px;padding:8px 12px;font-size:14px;font-weight:500;color:var(--wov-gray-700, #374151);background-color:var(--wov-gray-100, #ffffff);border:1px solid var(--wov-gray-300, #d1d5db);border-radius:8px;cursor:pointer;box-shadow:0 1px 2px #0000000d,0 1px 3px #0000001a;transition:background-color .15s ease,border-color .15s ease}.wov-back-to-content:hover{background-color:var(--wov-gray-200, #f3f4f6);border-color:var(--wov-gray-400, #9ca3af)}.wov-back-to-content:active{background-color:var(--wov-gray-300, #e5e7eb)}.wov-back-to-content svg{flex-shrink:0}.wov-menu-button{display:flex;align-items:center;justify-content:center;height:100%;gap:4px;padding:0 8px}.wov-menu-dropdown{display:flex;background-color:var(--wov-gray-700);border-radius:var(--wov-menu-border-radius);overflow:hidden;box-shadow:0 0 .5px #0000002e,0 3px 8px #0000001a,0 1px 3px #0000001a}.wov-menu-option{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border:none;background:transparent;color:var(--wov-gray-100);cursor:pointer;transition:background-color .15s ease}.wov-menu-option:hover{background-color:var(--wov-gray-600)}.wov-menu-option.is-active{background-color:var(--wov-primary)}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@woven-canvas/vue",
3
- "version": "0.1.8",
3
+ "version": "0.1.10",
4
4
  "description": "Vue 3 components for woven-canvas infinite canvas",
5
5
  "repository": {
6
6
  "type": "git",
@@ -28,7 +28,7 @@
28
28
  "default": "./build/index.js"
29
29
  },
30
30
  "require": {
31
- "types": "./build/index.d.cts",
31
+ "types": "./build/index.d.ts",
32
32
  "default": "./build/index.cjs"
33
33
  }
34
34
  },
@@ -54,14 +54,14 @@
54
54
  "@woven-ecs/canvas-store": "^1.0.5",
55
55
  "perfect-freehand": "^1.2.2",
56
56
  "vue": "^3.5.26",
57
- "@woven-canvas/math": "^0.1.0",
58
57
  "@woven-canvas/asset-sync": "^0.1.0",
58
+ "@woven-canvas/core": "^0.1.4",
59
+ "@woven-canvas/plugin-arrows": "^0.1.0",
59
60
  "@woven-canvas/plugin-canvas-controls": "^0.1.0",
61
+ "@woven-canvas/math": "^0.1.0",
60
62
  "@woven-canvas/plugin-eraser": "^0.1.0",
61
- "@woven-canvas/core": "^0.1.3",
62
- "@woven-canvas/plugin-pen": "^0.1.0",
63
- "@woven-canvas/plugin-arrows": "^0.1.0",
64
- "@woven-canvas/plugin-selection": "^0.1.0"
63
+ "@woven-canvas/plugin-selection": "^0.1.1",
64
+ "@woven-canvas/plugin-pen": "^0.1.0"
65
65
  },
66
66
  "devDependencies": {
67
67
  "@vitejs/plugin-vue": "^5.2.4",
@@ -77,7 +77,7 @@
77
77
  },
78
78
  "scripts": {
79
79
  "dev": "vite",
80
- "build": "vite build && vue-tsc --declaration --emitDeclarationOnly",
80
+ "build": "vite build && vue-tsc -p tsconfig.build.json --declaration --emitDeclarationOnly",
81
81
  "preview": "vite preview",
82
82
  "tsc": "vue-tsc --noEmit",
83
83
  "test": "vitest run",
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=WovenCanvas.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"WovenCanvas.test.d.ts","sourceRoot":"","sources":["../../__tests__/WovenCanvas.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=useComponent.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useComponent.test.d.ts","sourceRoot":"","sources":["../../__tests__/useComponent.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=useQuery.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useQuery.test.d.ts","sourceRoot":"","sources":["../../__tests__/useQuery.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=useSingleton.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useSingleton.test.d.ts","sourceRoot":"","sources":["../../__tests__/useSingleton.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=useTextBatchController.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useTextBatchController.test.d.ts","sourceRoot":"","sources":["../../__tests__/useTextBatchController.test.ts"],"names":[],"mappings":""}
@@ -1,11 +0,0 @@
1
- import { type EditorPlugin, type FontFamilyInput } from '@woven-canvas/core';
2
- import type { CanvasStore } from '@woven-ecs/canvas-store';
3
- export interface EditingPluginResources {
4
- store: CanvasStore;
5
- }
6
- export interface EditingPluginOptions {
7
- store: CanvasStore;
8
- }
9
- export declare const DEFAULT_FONTS: FontFamilyInput[];
10
- export declare function EditingPlugin(options: EditingPluginOptions): EditorPlugin;
11
- //# sourceMappingURL=EditingPlugin.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EditingPlugin.d.ts","sourceRoot":"","sources":["../../src/EditingPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,eAAe,EAAmB,MAAM,oBAAoB,CAAA;AAE7F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAK1D,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,WAAW,CAAA;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,WAAW,CAAA;CACnB;AAED,eAAO,MAAM,aAAa,EAAE,eAAe,EAyB1C,CAAA;AAMD,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,YAAY,CAczE"}
@@ -1,10 +0,0 @@
1
- import { ArrowHeadKind } from '@woven-canvas/plugin-arrows';
2
- export interface ArrowHeadDef {
3
- kind: ArrowHeadKind;
4
- label: string;
5
- gap: number;
6
- svg: string;
7
- }
8
- export declare const ARROW_HEADS: ArrowHeadDef[];
9
- export declare function getArrowHead(kind: ArrowHeadKind): ArrowHeadDef | undefined;
10
- //# sourceMappingURL=arrowHeads.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"arrowHeads.d.ts","sourceRoot":"","sources":["../../src/arrowHeads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAE3D,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,aAAa,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;CACZ;AAOD,eAAO,MAAM,WAAW,EAAE,YAAY,EA+BrC,CAAA;AAKD,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,YAAY,GAAG,SAAS,CAE1E"}
@@ -1,3 +0,0 @@
1
- declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
2
- export default _default;
3
- //# sourceMappingURL=ActionBar.vue.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ActionBar.vue.d.ts","sourceRoot":"","sources":["../../../src/components/ActionBar.vue"],"names":[],"mappings":";AAyRA,wBAKG"}
@@ -1,3 +0,0 @@
1
- declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
2
- export default _default;
3
- //# sourceMappingURL=BackToContentButton.vue.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BackToContentButton.vue.d.ts","sourceRoot":"","sources":["../../../src/components/BackToContentButton.vue"],"names":[],"mappings":";AAoTA,wBAKG"}
@@ -1,7 +0,0 @@
1
- import type { BackgroundOptions } from "../types";
2
- interface Props {
3
- background: BackgroundOptions;
4
- }
5
- declare const _default: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
6
- export default _default;
7
- //# sourceMappingURL=CanvasBackground.vue.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CanvasBackground.vue.d.ts","sourceRoot":"","sources":["../../../src/components/CanvasBackground.vue"],"names":[],"mappings":"AA8WA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAElD,UAAU,KAAK;IACb,UAAU,EAAE,iBAAiB,CAAC;CAC/B;;AA6XD,wBAMG"}
@@ -1,25 +0,0 @@
1
- import type { BlockData } from "../types";
2
- interface Props extends BlockData {
3
- blockElement: HTMLElement | null;
4
- }
5
- declare const _default: import("vue").DefineComponent<Props, {
6
- editableTextRef: import("vue").Ref<HTMLElement | null, HTMLElement | null>;
7
- }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
8
- editEnd: (data: {
9
- content: string;
10
- width: number;
11
- height: number;
12
- left: number;
13
- top: number;
14
- }) => any;
15
- }, string, import("vue").PublicProps, Readonly<Props> & Readonly<{
16
- onEditEnd?: ((data: {
17
- content: string;
18
- width: number;
19
- height: number;
20
- left: number;
21
- top: number;
22
- }) => any) | undefined;
23
- }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
24
- export default _default;
25
- //# sourceMappingURL=EditableText.vue.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EditableText.vue.d.ts","sourceRoot":"","sources":["../../../src/components/EditableText.vue"],"names":[],"mappings":"AAoXA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAK1C,UAAU,KAAM,SAAQ,SAAS;IAE/B,YAAY,EAAE,WAAW,GAAG,IAAI,CAAC;CAClC;;;;;iBAQc,MAAM;eACR,MAAM;gBACL,MAAM;cACR,MAAM;aACP,MAAM;;;;iBAJF,MAAM;eACR,MAAM;gBACL,MAAM;cACR,MAAM;aACP,MAAM;;;AAwUjB,wBAQG"}
@@ -1,8 +0,0 @@
1
- type __VLS_Props = {
2
- maxSize?: number;
3
- };
4
- declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
5
- maxSize: number;
6
- }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
7
- export default _default;
8
- //# sourceMappingURL=FileDropZone.vue.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FileDropZone.vue.d.ts","sourceRoot":"","sources":["../../../src/components/FileDropZone.vue"],"names":[],"mappings":"AA0NA,KAAK,WAAW,GAAG;IAEf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;;aADU,MAAM;;AAiOpB,wBAOG"}
@@ -1,13 +0,0 @@
1
- declare var __VLS_5: {};
2
- type __VLS_Slots = {} & {
3
- default?: (props: typeof __VLS_5) => any;
4
- };
5
- declare const __VLS_component: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
6
- declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
7
- export default _default;
8
- type __VLS_WithSlots<T, S> = T & {
9
- new (): {
10
- $slots: S;
11
- };
12
- };
13
- //# sourceMappingURL=FloatingMenu.vue.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FloatingMenu.vue.d.ts","sourceRoot":"","sources":["../../../src/components/FloatingMenu.vue"],"names":[],"mappings":"AAmhBA,QAAA,IAAI,OAAO,IAAW,CAAE;AACxB,KAAK,WAAW,GAAG,EAAE,GACnB;IAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,OAAO,KAAK,GAAG,CAAA;CAAE,CAAC;AAuB/C,QAAA,MAAM,eAAe,+QAKnB,CAAC;wBACkB,eAAe,CAAC,OAAO,eAAe,EAAE,WAAW,CAAC;AAAzE,wBAA0E;AAE1E,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
@@ -1,43 +0,0 @@
1
- declare var __VLS_2: `button:${string}`, __VLS_3: {
2
- entityIds: number[];
3
- }, __VLS_5: {
4
- entityIds: number[];
5
- }, __VLS_10: {
6
- entityIds: number[];
7
- }, __VLS_21: {
8
- entityIds: number[];
9
- }, __VLS_26: {
10
- entityIds: number[];
11
- }, __VLS_31: {
12
- entityIds: number[];
13
- }, __VLS_36: {
14
- entityIds: number[];
15
- }, __VLS_41: {
16
- entityIds: number[];
17
- };
18
- type __VLS_Slots = {} & {
19
- [K in NonNullable<typeof __VLS_2>]?: (props: typeof __VLS_3) => any;
20
- } & {
21
- 'button:color'?: (props: typeof __VLS_5) => any;
22
- } & {
23
- 'button:shape'?: (props: typeof __VLS_10) => any;
24
- } & {
25
- 'button:penStroke'?: (props: typeof __VLS_21) => any;
26
- } & {
27
- 'button:arrowThickness'?: (props: typeof __VLS_26) => any;
28
- } & {
29
- 'button:arrowHeadStart'?: (props: typeof __VLS_31) => any;
30
- } & {
31
- 'button:arrowHeadEnd'?: (props: typeof __VLS_36) => any;
32
- } & {
33
- 'button:text'?: (props: typeof __VLS_41) => any;
34
- };
35
- declare const __VLS_component: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
36
- declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
37
- export default _default;
38
- type __VLS_WithSlots<T, S> = T & {
39
- new (): {
40
- $slots: S;
41
- };
42
- };
43
- //# sourceMappingURL=FloatingMenuBar.vue.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FloatingMenuBar.vue.d.ts","sourceRoot":"","sources":["../../../src/components/FloatingMenuBar.vue"],"names":[],"mappings":"AA2XA,QAAA,IAAI,OAAO,oBAAU,EAAE,OAAO;;CAAU,EAAE,OAAO;;CAAU,EAAE,QAAQ;;CAAU,EAAE,QAAQ;;CAAW,EAAE,QAAQ;;CAAW,EAAE,QAAQ;;CAAW,EAAE,QAAQ;;CAAW,EAAE,QAAQ;;CAAY,CAAE;AAC3L,KAAK,WAAW,GAAG,EAAE,GACnB;KAAG,CAAC,IAAI,WAAW,CAAC,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,OAAO,KAAK,GAAG;CAAE,GACvE;IAAE,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,OAAO,KAAK,GAAG,CAAA;CAAE,GACnD;IAAE,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,QAAQ,KAAK,GAAG,CAAA;CAAE,GACpD;IAAE,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,QAAQ,KAAK,GAAG,CAAA;CAAE,GACxD;IAAE,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,QAAQ,KAAK,GAAG,CAAA;CAAE,GAC7D;IAAE,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,QAAQ,KAAK,GAAG,CAAA;CAAE,GAC7D;IAAE,qBAAqB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,QAAQ,KAAK,GAAG,CAAA;CAAE,GAC3D;IAAE,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,QAAQ,KAAK,GAAG,CAAA;CAAE,CAAC;AA+BtD,QAAA,MAAM,eAAe,+QAKnB,CAAC;wBACkB,eAAe,CAAC,OAAO,eAAe,EAAE,WAAW,CAAC;AAAzE,wBAA0E;AAE1E,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
@@ -1,6 +0,0 @@
1
- type __VLS_Props = {
2
- isLoading: boolean;
3
- };
4
- declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
5
- export default _default;
6
- //# sourceMappingURL=LoadingOverlay.vue.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LoadingOverlay.vue.d.ts","sourceRoot":"","sources":["../../../src/components/LoadingOverlay.vue"],"names":[],"mappings":"AAkEA,KAAK,WAAW,GAAG;IACjB,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;;AAwEF,wBAMG"}
@@ -1,6 +0,0 @@
1
- type __VLS_Props = {
2
- isOnline: boolean;
3
- };
4
- declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
5
- export default _default;
6
- //# sourceMappingURL=OfflineIndicator.vue.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OfflineIndicator.vue.d.ts","sourceRoot":"","sources":["../../../src/components/OfflineIndicator.vue"],"names":[],"mappings":"AAAA,KA0BK,WAAW,GAAG;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;;AAsCF,wBAMG"}
@@ -1,15 +0,0 @@
1
- declare var __VLS_4: {}, __VLS_17: {};
2
- type __VLS_Slots = {} & {
3
- default?: (props: typeof __VLS_4) => any;
4
- } & {
5
- default?: (props: typeof __VLS_17) => any;
6
- };
7
- declare const __VLS_component: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
8
- declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
9
- export default _default;
10
- type __VLS_WithSlots<T, S> = T & {
11
- new (): {
12
- $slots: S;
13
- };
14
- };
15
- //# sourceMappingURL=Toolbar.vue.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Toolbar.vue.d.ts","sourceRoot":"","sources":["../../../src/components/Toolbar.vue"],"names":[],"mappings":"AAwyBA,QAAA,IAAI,OAAO,IAAU,EAAE,QAAQ,IAAY,CAAE;AAC7C,KAAK,WAAW,GAAG,EAAE,GACnB;IAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,OAAO,KAAK,GAAG,CAAA;CAAE,GAC5C;IAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,QAAQ,KAAK,GAAG,CAAA;CAAE,CAAC;AAkChD,QAAA,MAAM,eAAe,+QAKnB,CAAC;wBACkB,eAAe,CAAC,OAAO,eAAe,EAAE,WAAW,CAAC;AAAzE,wBAA0E;AAE1E,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
@@ -1,22 +0,0 @@
1
- type __VLS_Props = {
2
- name: string;
3
- tooltip?: string;
4
- dragOutSnapshot?: string;
5
- placementSnapshot?: string;
6
- cursor?: string;
7
- };
8
- declare var __VLS_1: {};
9
- type __VLS_Slots = {} & {
10
- default?: (props: typeof __VLS_1) => any;
11
- };
12
- declare const __VLS_component: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
13
- cursor: string;
14
- }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
15
- declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
16
- export default _default;
17
- type __VLS_WithSlots<T, S> = T & {
18
- new (): {
19
- $slots: S;
20
- };
21
- };
22
- //# sourceMappingURL=ToolbarButton.vue.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ToolbarButton.vue.d.ts","sourceRoot":"","sources":["../../../src/components/ToolbarButton.vue"],"names":[],"mappings":"AA6GA,KAAK,WAAW,GAAG;IAEf,IAAI,EAAE,MAAM,CAAC;IAEb,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAuEJ,QAAA,IAAI,OAAO,IAAW,CAAE;AACxB,KAAK,WAAW,GAAG,EAAE,GACnB;IAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,OAAO,KAAK,GAAG,CAAA;CAAE,CAAC;AA4B/C,QAAA,MAAM,eAAe;YAtGR,MAAM;6EA6GjB,CAAC;wBACkB,eAAe,CAAC,OAAO,eAAe,EAAE,WAAW,CAAC;AAAzE,wBAA0E;AAa1E,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
@@ -1,13 +0,0 @@
1
- import type { UserData } from "../injection";
2
- type __VLS_Props = {
3
- users: UserData[];
4
- currentSessionId: string;
5
- camera: {
6
- left: number;
7
- top: number;
8
- zoom: number;
9
- };
10
- };
11
- declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
12
- export default _default;
13
- //# sourceMappingURL=UserCursors.vue.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"UserCursors.vue.d.ts","sourceRoot":"","sources":["../../../src/components/UserCursors.vue"],"names":[],"mappings":"AAgGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAM7C,KAAK,WAAW,GAAG;IACjB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACrD,CAAC;;AA+EF,wBAMG"}
@@ -1,7 +0,0 @@
1
- import type { UserData } from "../injection";
2
- type __VLS_Props = {
3
- users: UserData[];
4
- };
5
- declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
6
- export default _default;
7
- //# sourceMappingURL=UserPresence.vue.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"UserPresence.vue.d.ts","sourceRoot":"","sources":["../../../src/components/UserPresence.vue"],"names":[],"mappings":"AAwMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE7C,KAAK,WAAW,GAAG;IACjB,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB,CAAC;;AAuJF,wBAMG"}
@@ -1,6 +0,0 @@
1
- type __VLS_Props = {
2
- versionMismatch: boolean;
3
- };
4
- declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
5
- export default _default;
6
- //# sourceMappingURL=VersionMismatch.vue.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"VersionMismatch.vue.d.ts","sourceRoot":"","sources":["../../../src/components/VersionMismatch.vue"],"names":[],"mappings":"AAAA,KAgEK,WAAW,GAAG;IACjB,eAAe,EAAE,OAAO,CAAC;CAC1B,CAAC;;AAsDF,wBAMG"}
@@ -1,69 +0,0 @@
1
- import { Editor, type ControlsOptionsInput, type EditorOptionsInput } from "@woven-canvas/core";
2
- import { CanvasStore, type CanvasStoreOptions } from "@woven-ecs/canvas-store";
3
- import { type AssetProvider } from "@woven-canvas/asset-sync";
4
- import { type CanvasControlsOptionsInput } from "@woven-canvas/plugin-canvas-controls";
5
- import { type SelectionPluginOptionsInput } from "@woven-canvas/plugin-selection";
6
- import { type EraserPluginOptions } from "@woven-canvas/plugin-eraser";
7
- import { type ArrowsPluginOptions } from "@woven-canvas/plugin-arrows";
8
- import { type UserData } from "../injection";
9
- import type { BlockData, BackgroundOptions } from "../types";
10
- export interface WovenCanvasProps {
11
- store?: CanvasStoreOptions;
12
- editor?: EditorOptionsInput;
13
- background?: BackgroundOptions;
14
- assetProvider?: AssetProvider;
15
- pluginOptions?: {
16
- controls?: CanvasControlsOptionsInput | false;
17
- selection?: SelectionPluginOptionsInput | false;
18
- eraser?: EraserPluginOptions | false;
19
- pen?: false;
20
- arrows?: ArrowsPluginOptions | false;
21
- };
22
- controls?: ControlsOptionsInput;
23
- }
24
- type __VLS_Slots = {
25
- default?: () => any;
26
- loading?: (props: {
27
- isLoading: boolean;
28
- }) => any;
29
- background?: (props: {
30
- background: BackgroundOptions;
31
- }) => any;
32
- "floating-menu"?: () => any;
33
- toolbar?: () => any;
34
- "user-cursors"?: (props: {
35
- users: UserData[];
36
- currentSessionId: string;
37
- camera: {
38
- left: number;
39
- top: number;
40
- zoom: number;
41
- };
42
- }) => any;
43
- "user-presence"?: (props: {
44
- users: UserData[];
45
- }) => any;
46
- "offline-indicator"?: (props: {
47
- isOnline: boolean;
48
- }) => any;
49
- "version-mismatch"?: (props: {
50
- versionMismatch: boolean;
51
- }) => any;
52
- "back-to-content"?: () => any;
53
- "file-drop-zone"?: () => any;
54
- } & {
55
- [slotName: `block:${string}`]: (props: BlockData) => any;
56
- };
57
- declare const __VLS_component: import("vue").DefineComponent<WovenCanvasProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
58
- ready: (editor: Editor, store: CanvasStore) => any;
59
- }, string, import("vue").PublicProps, Readonly<WovenCanvasProps> & Readonly<{
60
- onReady?: ((editor: Editor, store: CanvasStore) => any) | undefined;
61
- }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
62
- declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
63
- export default _default;
64
- type __VLS_WithSlots<T, S> = T & {
65
- new (): {
66
- $slots: S;
67
- };
68
- };
69
- //# sourceMappingURL=WovenCanvas.vue.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"WovenCanvas.vue.d.ts","sourceRoot":"","sources":["../../../src/components/WovenCanvas.vue"],"names":[],"mappings":"AAg8BA,OAAO,EACL,MAAM,EAQN,KAAK,oBAAoB,EASzB,KAAK,kBAAkB,EAOxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAGL,KAAK,2BAA2B,EACjC,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAIL,KAAK,QAAQ,EACd,MAAM,cAAc,CAAC;AAkBtB,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAyB7D,MAAM,WAAW,gBAAgB;IAE/B,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAG3B,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAG5B,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAG/B,aAAa,CAAC,EAAE,aAAa,CAAC;IAG9B,aAAa,CAAC,EAAE;QACd,QAAQ,CAAC,EAAE,0BAA0B,GAAG,KAAK,CAAC;QAC9C,SAAS,CAAC,EAAE,2BAA2B,GAAG,KAAK,CAAC;QAChD,MAAM,CAAC,EAAE,mBAAmB,GAAG,KAAK,CAAC;QACrC,GAAG,CAAC,EAAE,KAAK,CAAC;QACZ,MAAM,CAAC,EAAE,mBAAmB,GAAG,KAAK,CAAC;KACtC,CAAC;IAGF,QAAQ,CAAC,EAAE,oBAAoB,CAAC;CACjC;AAWD,KAAK,WAAW,GAAG;IACf,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,KAAK,GAAG,CAAC;IACjD,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,UAAU,EAAE,iBAAiB,CAAA;KAAE,KAAK,GAAG,CAAC;IAC/D,eAAe,CAAC,EAAE,MAAM,GAAG,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC;IACpB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE;QACvB,KAAK,EAAE,QAAQ,EAAE,CAAC;QAClB,gBAAgB,EAAE,MAAM,CAAC;QACzB,MAAM,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC;KACrD,KAAK,GAAG,CAAC;IACV,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,QAAQ,EAAE,CAAA;KAAE,KAAK,GAAG,CAAC;IACxD,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAA;KAAE,KAAK,GAAG,CAAC;IAC5D,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,eAAe,EAAE,OAAO,CAAA;KAAE,KAAK,GAAG,CAAC;IAClE,iBAAiB,CAAC,EAAE,MAAM,GAAG,CAAC;IAE9B,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC;CAC9B,GAAG;IACF,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,SAAS,KAAK,GAAG,CAAC;CAC1D,CAAC;AAi7BJ,QAAA,MAAM,eAAe;;;;kFAOnB,CAAC;wBACkB,eAAe,CAAC,OAAO,eAAe,EAAE,WAAW,CAAC;AAAzE,wBAA0E;AAQ1E,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
@@ -1,4 +0,0 @@
1
- import type { BlockData } from "../../types";
2
- declare const _default: import("vue").DefineComponent<BlockData, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<BlockData> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
3
- export default _default;
4
- //# sourceMappingURL=ArcArrow.vue.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ArcArrow.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/blocks/ArcArrow.vue"],"names":[],"mappings":"AAqSA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;;AAgV7C,wBAMG"}
@@ -1,3 +0,0 @@
1
- declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
2
- export default _default;
3
- //# sourceMappingURL=ArrowHandle.vue.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ArrowHandle.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/blocks/ArrowHandle.vue"],"names":[],"mappings":";AA2GA,wBAKG"}