@bigbluebutton/tldraw 2.0.0-alpha.24 → 2.0.0-alpha.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-cjs/index.d.ts +9 -1
- package/dist-cjs/lib/defaultShapeUtils.js +3 -1
- package/dist-cjs/lib/defaultShapeUtils.js.map +2 -2
- package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/poll/PollShapeTool.js +30 -0
- package/dist-cjs/lib/shapes/poll/PollShapeTool.js.map +7 -0
- package/dist-cjs/lib/shapes/poll/PollShapeUtil.js +121 -0
- package/dist-cjs/lib/shapes/poll/PollShapeUtil.js.map +7 -0
- package/dist-cjs/lib/shapes/poll/components/poll-content.js +101 -0
- package/dist-cjs/lib/shapes/poll/components/poll-content.js.map +7 -0
- package/dist-cjs/lib/shapes/poll/components/styles.js +53 -0
- package/dist-cjs/lib/shapes/poll/components/styles.js.map +7 -0
- package/dist-cjs/lib/shapes/poll/poll-shape-migrations.js +45 -0
- package/dist-cjs/lib/shapes/poll/poll-shape-migrations.js.map +7 -0
- package/dist-cjs/lib/shapes/poll/poll-shape-props.js +39 -0
- package/dist-cjs/lib/shapes/poll/poll-shape-props.js.map +7 -0
- package/dist-cjs/lib/shapes/poll/poll-shape-types.js +17 -0
- package/dist-cjs/lib/shapes/poll/poll-shape-types.js.map +7 -0
- package/dist-cjs/lib/tools/HandTool/HandTool.js +3 -3
- package/dist-cjs/lib/tools/HandTool/HandTool.js.map +2 -2
- package/dist-cjs/lib/ui/components/ContextMenu.js +0 -1
- package/dist-cjs/lib/ui/components/ContextMenu.js.map +2 -2
- package/dist-cjs/lib/ui/hooks/useTranslation/TLUiTranslationKey.js.map +1 -1
- package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js +6 -1
- package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js.map +2 -2
- package/dist-esm/index.d.mts +9 -1
- package/dist-esm/lib/defaultShapeUtils.mjs +3 -1
- package/dist-esm/lib/defaultShapeUtils.mjs.map +2 -2
- package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/poll/PollShapeTool.mjs +10 -0
- package/dist-esm/lib/shapes/poll/PollShapeTool.mjs.map +7 -0
- package/dist-esm/lib/shapes/poll/PollShapeUtil.mjs +97 -0
- package/dist-esm/lib/shapes/poll/PollShapeUtil.mjs.map +7 -0
- package/dist-esm/lib/shapes/poll/components/poll-content.mjs +71 -0
- package/dist-esm/lib/shapes/poll/components/poll-content.mjs.map +7 -0
- package/dist-esm/lib/shapes/poll/components/styles.mjs +23 -0
- package/dist-esm/lib/shapes/poll/components/styles.mjs.map +7 -0
- package/dist-esm/lib/shapes/poll/poll-shape-migrations.mjs +25 -0
- package/dist-esm/lib/shapes/poll/poll-shape-migrations.mjs.map +7 -0
- package/dist-esm/lib/shapes/poll/poll-shape-props.mjs +19 -0
- package/dist-esm/lib/shapes/poll/poll-shape-props.mjs.map +7 -0
- package/dist-esm/lib/shapes/poll/poll-shape-types.mjs +1 -0
- package/dist-esm/lib/shapes/poll/poll-shape-types.mjs.map +7 -0
- package/dist-esm/lib/tools/HandTool/HandTool.mjs +3 -3
- package/dist-esm/lib/tools/HandTool/HandTool.mjs.map +2 -2
- package/dist-esm/lib/ui/components/ContextMenu.mjs +0 -1
- package/dist-esm/lib/ui/components/ContextMenu.mjs.map +2 -2
- package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs +6 -1
- package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs.map +2 -2
- package/package.json +4 -3
- package/src/lib/Tldraw.test.tsx +9 -13
- package/src/lib/defaultShapeUtils.ts +2 -0
- package/src/lib/shapes/arrow/ArrowShapeUtil.tsx +1 -1
- package/src/lib/shapes/line/__snapshots__/LineShapeUtil.test.ts.snap +6 -6
- package/src/lib/shapes/poll/PollShapeTool.tsx +7 -0
- package/src/lib/shapes/poll/PollShapeUtil.tsx +108 -0
- package/src/lib/shapes/poll/components/poll-content.tsx +100 -0
- package/src/lib/shapes/poll/components/styles.ts +21 -0
- package/src/lib/shapes/poll/poll-shape-migrations.ts +23 -0
- package/src/lib/shapes/poll/poll-shape-props.ts +17 -0
- package/src/lib/shapes/poll/poll-shape-types.ts +21 -0
- package/src/lib/tools/HandTool/HandTool.ts +4 -5
- package/src/lib/ui/components/ContextMenu.tsx +1 -1
- package/src/lib/ui/hooks/useTranslation/TLUiTranslationKey.ts +5 -0
- package/src/lib/ui/hooks/useTranslation/defaultTranslation.ts +5 -0
- package/src/test/Editor.test.tsx +2 -2
- package/src/test/HandTool.test.ts +55 -56
- package/src/test/TLSessionStateSnapshot.test.ts +5 -5
- package/src/test/TestEditor.ts +4 -1
- package/src/test/TldrawEditor.test.tsx +28 -30
- package/src/test/__snapshots__/resizing.test.ts.snap +8 -8
- package/src/test/commands/__snapshots__/packShapes.test.ts.snap +20 -20
- package/src/test/commands/__snapshots__/zoomToFit.test.ts.snap +2 -2
- package/src/test/commands/createShapes.test.ts +1 -1
- package/src/test/commands/putContent.test.ts +4 -4
- package/src/test/commands/updateShapes.test.ts +1 -1
- package/src/test/resizing.test.ts +203 -203
- package/src/test/selection-omnibus.test.ts +41 -41
- package/src/test/test-jsx.tsx +7 -3
- package/src/test/translating.test.ts +42 -42
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/lib/ui/hooks/useTranslation/defaultTranslation.ts"],
|
|
4
|
-
"sourcesContent": ["// This file is automatically generated by scripts/refresh-assets.ts.\n// Do not edit manually.\n\n/** @internal */\nexport const DEFAULT_TRANSLATION = {\n\t'action.convert-to-bookmark': 'Convert to Bookmark',\n\t'action.convert-to-embed': 'Convert to Embed',\n\t'action.open-embed-link': 'Open link',\n\t'action.align-bottom': 'Align bottom',\n\t'action.align-center-horizontal': 'Align horizontally',\n\t'action.align-center-vertical': 'Align vertically',\n\t'action.align-center-horizontal.short': 'Align H',\n\t'action.align-center-vertical.short': 'Align V',\n\t'action.align-left': 'Align left',\n\t'action.align-right': 'Align right',\n\t'action.align-top': 'Align top',\n\t'action.back-to-content': 'Back to content',\n\t'action.bring-forward': 'Bring forward',\n\t'action.bring-to-front': 'Bring to front',\n\t'action.copy-as-json.short': 'JSON',\n\t'action.copy-as-json': 'Copy as JSON',\n\t'action.copy-as-png.short': 'PNG',\n\t'action.copy-as-png': 'Copy as PNG',\n\t'action.copy-as-svg.short': 'SVG',\n\t'action.copy-as-svg': 'Copy as SVG',\n\t'action.copy': 'Copy',\n\t'action.cut': 'Cut',\n\t'action.delete': 'Delete',\n\t'action.unlock-all': 'Unlock all',\n\t'action.distribute-horizontal': 'Distribute horizontally',\n\t'action.distribute-vertical': 'Distribute vertically',\n\t'action.distribute-horizontal.short': 'Distribute H',\n\t'action.distribute-vertical.short': 'Distribute V',\n\t'action.duplicate': 'Duplicate',\n\t'action.edit-link': 'Edit link',\n\t'action.exit-pen-mode': 'Exit pen mode',\n\t'action.export-as-json.short': 'JSON',\n\t'action.export-as-json': 'Export as JSON',\n\t'action.export-as-png.short': 'PNG',\n\t'action.export-as-png': 'Export as PNG',\n\t'action.export-as-svg.short': 'SVG',\n\t'action.export-as-svg': 'Export as SVG',\n\t'action.fit-frame-to-content': 'Fit to content',\n\t'action.flip-horizontal': 'Flip horizontally',\n\t'action.flip-vertical': 'Flip vertically',\n\t'action.flip-horizontal.short': 'Flip H',\n\t'action.flip-vertical.short': 'Flip V',\n\t'action.fork-project': 'Fork this project',\n\t'action.group': 'Group',\n\t'action.insert-embed': 'Insert embed',\n\t'action.insert-media': 'Upload media',\n\t'action.leave-shared-project': 'Leave shared project',\n\t'action.new-project': 'New project',\n\t'action.new-shared-project': 'New shared project',\n\t'action.open-cursor-chat': 'Cursor chat',\n\t'action.open-file': 'Open file',\n\t'action.pack': 'Pack',\n\t'action.paste': 'Paste',\n\t'action.print': 'Print',\n\t'action.redo': 'Redo',\n\t'action.remove-frame': 'Remove frame',\n\t'action.rotate-ccw': 'Rotate counterclockwise',\n\t'action.rotate-cw': 'Rotate clockwise',\n\t'action.save-copy': 'Save a copy',\n\t'action.select-all': 'Select all',\n\t'action.select-none': 'Select none',\n\t'action.send-backward': 'Send backward',\n\t'action.send-to-back': 'Send to back',\n\t'action.share-project': 'Share this project',\n\t'action.stack-horizontal': 'Stack horizontally',\n\t'action.stack-vertical': 'Stack vertically',\n\t'action.stack-horizontal.short': 'Stack H',\n\t'action.stack-vertical.short': 'Stack V',\n\t'action.stop-following': 'Stop following',\n\t'action.stretch-horizontal': 'Stretch horizontally',\n\t'action.stretch-vertical': 'Stretch vertically',\n\t'action.stretch-horizontal.short': 'Stretch H',\n\t'action.stretch-vertical.short': 'Stretch V',\n\t'action.toggle-auto-size': 'Toggle auto size',\n\t'action.toggle-dark-mode.menu': 'Dark mode',\n\t'action.toggle-dark-mode': 'Toggle dark mode',\n\t'action.toggle-reduce-motion.menu': 'Reduce motion',\n\t'action.toggle-reduce-motion': 'Toggle reduce motion',\n\t'action.toggle-edge-scrolling.menu': 'Edge scrolling',\n\t'action.toggle-edge-scrolling': 'Toggle edge scrolling',\n\t'action.toggle-debug-mode.menu': 'Debug mode',\n\t'action.toggle-debug-mode': 'Toggle debug mode',\n\t'action.toggle-focus-mode.menu': 'Focus mode',\n\t'action.toggle-focus-mode': 'Toggle focus mode',\n\t'action.toggle-grid.menu': 'Show grid',\n\t'action.toggle-grid': 'Toggle grid',\n\t'action.toggle-lock': 'Toggle locked',\n\t'action.toggle-snap-mode.menu': 'Always snap',\n\t'action.toggle-snap-mode': 'Toggle always snap',\n\t'action.toggle-tool-lock.menu': 'Tool lock',\n\t'action.toggle-tool-lock': 'Toggle tool lock',\n\t'action.toggle-transparent.context-menu': 'Transparent',\n\t'action.toggle-transparent.menu': 'Transparent',\n\t'action.toggle-transparent': 'Toggle transparent background',\n\t'action.undo': 'Undo',\n\t'action.ungroup': 'Ungroup',\n\t'action.zoom-in': 'Zoom in',\n\t'action.zoom-out': 'Zoom out',\n\t'action.zoom-to-100': 'Zoom to 100%',\n\t'action.zoom-to-fit': 'Zoom to fit',\n\t'action.zoom-to-selection': 'Zoom to selection',\n\t'color-style.black': 'Black',\n\t'color-style.blue': 'Blue',\n\t'color-style.green': 'Green',\n\t'color-style.grey': 'Grey',\n\t'color-style.light-blue': 'Light blue',\n\t'color-style.light-green': 'Light green',\n\t'color-style.light-red': 'Light red',\n\t'color-style.light-violet': 'Light violet',\n\t'color-style.orange': 'Orange',\n\t'color-style.red': 'Red',\n\t'color-style.violet': 'Violet',\n\t'color-style.yellow': 'Yellow',\n\t'fill-style.none': 'None',\n\t'fill-style.semi': 'Semi',\n\t'fill-style.solid': 'Solid',\n\t'fill-style.pattern': 'Pattern',\n\t'dash-style.dashed': 'Dashed',\n\t'dash-style.dotted': 'Dotted',\n\t'dash-style.draw': 'Draw',\n\t'dash-style.solid': 'Solid',\n\t'size-style.s': 'Small',\n\t'size-style.m': 'Medium',\n\t'size-style.l': 'Large',\n\t'size-style.xl': 'Extra large',\n\t'opacity-style.0.1': '10%',\n\t'opacity-style.0.25': '25%',\n\t'opacity-style.0.5': '50%',\n\t'opacity-style.0.75': '75%',\n\t'opacity-style.1': '100%',\n\t'font-style.draw': 'Draw',\n\t'font-style.sans': 'Sans',\n\t'font-style.serif': 'Serif',\n\t'font-style.mono': 'Mono',\n\t'align-style.start': 'Start',\n\t'align-style.middle': 'Middle',\n\t'align-style.end': 'End',\n\t'align-style.justify': 'Justify',\n\t'geo-style.arrow-down': 'Arrow down',\n\t'geo-style.arrow-left': 'Arrow left',\n\t'geo-style.arrow-right': 'Arrow right',\n\t'geo-style.arrow-up': 'Arrow up',\n\t'geo-style.diamond': 'Diamond',\n\t'geo-style.ellipse': 'Ellipse',\n\t'geo-style.hexagon': 'Hexagon',\n\t'geo-style.octagon': 'Octagon',\n\t'geo-style.oval': 'Oval',\n\t'geo-style.cloud': 'Cloud',\n\t'geo-style.pentagon': 'Pentagon',\n\t'geo-style.rectangle': 'Rectangle',\n\t'geo-style.rhombus-2': 'Rhombus 2',\n\t'geo-style.rhombus': 'Rhombus',\n\t'geo-style.star': 'Star',\n\t'geo-style.trapezoid': 'Trapezoid',\n\t'geo-style.triangle': 'Triangle',\n\t'geo-style.x-box': 'X box',\n\t'geo-style.check-box': 'Check box',\n\t'arrowheadStart-style.none': 'None',\n\t'arrowheadStart-style.arrow': 'Arrow',\n\t'arrowheadStart-style.bar': 'Bar',\n\t'arrowheadStart-style.diamond': 'Diamond',\n\t'arrowheadStart-style.dot': 'Dot',\n\t'arrowheadStart-style.inverted': 'Inverted',\n\t'arrowheadStart-style.pipe': 'Pipe',\n\t'arrowheadStart-style.square': 'Square',\n\t'arrowheadStart-style.triangle': 'Triangle',\n\t'arrowheadEnd-style.none': 'None',\n\t'arrowheadEnd-style.arrow': 'Arrow',\n\t'arrowheadEnd-style.bar': 'Bar',\n\t'arrowheadEnd-style.diamond': 'Diamond',\n\t'arrowheadEnd-style.dot': 'Dot',\n\t'arrowheadEnd-style.inverted': 'Inverted',\n\t'arrowheadEnd-style.pipe': 'Pipe',\n\t'arrowheadEnd-style.square': 'Square',\n\t'arrowheadEnd-style.triangle': 'Triangle',\n\t'spline-style.line': 'Line',\n\t'spline-style.cubic': 'Cubic',\n\t'tool.select': 'Select',\n\t'tool.hand': 'Hand',\n\t'tool.draw': 'Draw',\n\t'tool.eraser': 'Eraser',\n\t'tool.arrow-down': 'Arrow down',\n\t'tool.arrow-left': 'Arrow left',\n\t'tool.arrow-right': 'Arrow right',\n\t'tool.arrow-up': 'Arrow up',\n\t'tool.arrow': 'Arrow',\n\t'tool.cloud': 'Cloud',\n\t'tool.diamond': 'Diamond',\n\t'tool.ellipse': 'Ellipse',\n\t'tool.hexagon': 'Hexagon',\n\t'tool.highlight': 'Highlight',\n\t'tool.line': 'Line',\n\t'tool.octagon': 'Octagon',\n\t'tool.oval': 'Oval',\n\t'tool.pentagon': 'Pentagon',\n\t'tool.rectangle': 'Rectangle',\n\t'tool.rhombus': 'Rhombus',\n\t'tool.star': 'Star',\n\t'tool.trapezoid': 'Trapezoid',\n\t'tool.triangle': 'Triangle',\n\t'tool.x-box': 'X box',\n\t'tool.check-box': 'Check box',\n\t'tool.asset': 'Asset',\n\t'tool.frame': 'Frame',\n\t'tool.note': 'Note',\n\t'tool.laser': 'Laser',\n\t'tool.embed': 'Embed',\n\t'tool.text': 'Text',\n\t'menu.title': 'Menu',\n\t'menu.copy-as': 'Copy as',\n\t'menu.edit': 'Edit',\n\t'menu.export-as': 'Export as',\n\t'menu.file': 'File',\n\t'menu.language': 'Language',\n\t'menu.preferences': 'Preferences',\n\t'menu.view': 'View',\n\t'context-menu.arrange': 'Arrange',\n\t'context-menu.copy-as': 'Copy as',\n\t'context-menu.export-as': 'Export as',\n\t'context-menu.move-to-page': 'Move to page',\n\t'context-menu.reorder': 'Reorder',\n\t'page-menu.title': 'Pages',\n\t'page-menu.create-new-page': 'Create new page',\n\t'page-menu.max-page-count-reached': 'Max pages reached',\n\t'page-menu.new-page-initial-name': 'Page 1',\n\t'page-menu.edit-start': 'Edit',\n\t'page-menu.edit-done': 'Done',\n\t'page-menu.go-to-page': 'Go to page',\n\t'page-menu.submenu.rename': 'Rename',\n\t'page-menu.submenu.duplicate-page': 'Duplicate',\n\t'page-menu.submenu.title': 'Menu',\n\t'page-menu.submenu.move-down': 'Move down',\n\t'page-menu.submenu.move-up': 'Move up',\n\t'page-menu.submenu.delete': 'Delete',\n\t'share-menu.title': 'Share',\n\t'share-menu.save-note': 'Download this project to your computer as a .tldr file.',\n\t'share-menu.fork-note': 'Create a new shared project based on this snapshot.',\n\t'share-menu.share-project': 'Share this project',\n\t'share-menu.default-project-name': 'Shared Project',\n\t'share-menu.copy-link': 'Copy share link',\n\t'share-menu.readonly-link': 'Read-only',\n\t'share-menu.create-snapshot-link': 'Copy snapshot link',\n\t'share-menu.snapshot-link-note': 'Capture and share this project as a read-only snapshot link.',\n\t'share-menu.copy-readonly-link': 'Copy read-only link',\n\t'share-menu.offline-note': 'Create a new shared project based on your current project.',\n\t'share-menu.copy-link-note': 'Anyone with the link will be able to view and edit this project.',\n\t'share-menu.copy-readonly-link-note':\n\t\t'Anyone with the link will be able to view (but not edit) this project.',\n\t'share-menu.project-too-large':\n\t\t\"Sorry, this project can't be shared because it's too large. We're working on it!\",\n\t'share-menu.upload-failed':\n\t\t\"Sorry, we couldn't upload your project at the moment. Please try again or let us know if the problem persists.\",\n\t'status.offline': 'Offline',\n\t'status.online': 'Online',\n\t'people-menu.title': 'People',\n\t'people-menu.change-name': 'Change name',\n\t'people-menu.change-color': 'Change color',\n\t'people-menu.follow': 'Following',\n\t'people-menu.following': 'Following',\n\t'people-menu.leading': 'Following You',\n\t'people-menu.user': '(You)',\n\t'people-menu.invite': 'Invite others',\n\t'help-menu.title': 'Help and resources',\n\t'help-menu.about': 'About',\n\t'help-menu.discord': 'Discord',\n\t'help-menu.github': 'GitHub',\n\t'help-menu.keyboard-shortcuts': 'Keyboard shortcuts',\n\t'help-menu.twitter': 'Twitter',\n\t'actions-menu.title': 'Actions',\n\t'edit-link-dialog.title': 'Edit link',\n\t'edit-link-dialog.invalid-url': 'A link must be a valid URL.',\n\t'edit-link-dialog.detail': 'Links will open in a new tab.',\n\t'edit-link-dialog.url': 'URL',\n\t'edit-link-dialog.clear': 'Clear',\n\t'edit-link-dialog.save': 'Continue',\n\t'edit-link-dialog.cancel': 'Cancel',\n\t'embed-dialog.title': 'Insert embed',\n\t'embed-dialog.back': 'Back',\n\t'embed-dialog.create': 'Create',\n\t'embed-dialog.cancel': 'Cancel',\n\t'embed-dialog.url': 'URL',\n\t'embed-dialog.instruction': \"Paste in the site's URL to create the embed.\",\n\t'embed-dialog.invalid-url': 'We could not create an embed from that URL.',\n\t'edit-pages-dialog.move-down': 'Move down',\n\t'edit-pages-dialog.move-up': 'Move up',\n\t'shortcuts-dialog.title': 'Keyboard shortcuts',\n\t'shortcuts-dialog.edit': 'Edit',\n\t'shortcuts-dialog.file': 'File',\n\t'shortcuts-dialog.preferences': 'Preferences',\n\t'shortcuts-dialog.tools': 'Tools',\n\t'shortcuts-dialog.transform': 'Transform',\n\t'shortcuts-dialog.view': 'View',\n\t'shortcuts-dialog.collaboration': 'Collaboration',\n\t'home-project-dialog.title': 'Home project',\n\t'home-project-dialog.description': \"This is your local home project. It's just for you!\",\n\t'rename-project-dialog.title': 'Rename project',\n\t'rename-project-dialog.cancel': 'Cancel',\n\t'rename-project-dialog.rename': 'Rename',\n\t'home-project-dialog.ok': 'Ok',\n\t'style-panel.title': 'Styles',\n\t'style-panel.align': 'Align',\n\t'style-panel.vertical-align': 'Vertical align',\n\t'style-panel.position': 'Position',\n\t'style-panel.arrowheads': 'Arrows',\n\t'style-panel.arrowhead-start': 'Start',\n\t'style-panel.arrowhead-end': 'End',\n\t'style-panel.color': 'Color',\n\t'style-panel.dash': 'Dash',\n\t'style-panel.fill': 'Fill',\n\t'style-panel.font': 'Font',\n\t'style-panel.geo': 'Shape',\n\t'style-panel.mixed': 'Mixed',\n\t'style-panel.opacity': 'Opacity',\n\t'style-panel.size': 'Size',\n\t'style-panel.spline': 'Spline',\n\t'tool-panel.drawing': 'Drawing',\n\t'tool-panel.shapes': 'Shapes',\n\t'tool-panel.more': 'More',\n\t'debug-panel.more': 'More',\n\t'navigation-zone.toggle-minimap': 'Toggle minimap',\n\t'navigation-zone.zoom': 'Zoom',\n\t'focus-mode.toggle-focus-mode': 'Toggle focus mode',\n\t'toast.close': 'Close',\n\t'file-system.file-open-error.title': 'Could not open file',\n\t'file-system.file-open-error.not-a-tldraw-file':\n\t\t\"The file you tried to open doesn't look like a tldraw file.\",\n\t'file-system.file-open-error.file-format-version-too-new':\n\t\t'The file you tried to open is from a newer version of tldraw. Please reload the page and try again.',\n\t'file-system.file-open-error.generic-corrupted-file': 'The file you tried to open is corrupted.',\n\t'file-system.confirm-open.title': 'Overwrite current project?',\n\t'file-system.confirm-open.description':\n\t\t'Opening a file will replace your current project and any unsaved changes will be lost. Are you sure you want to continue?',\n\t'file-system.confirm-open.cancel': 'Cancel',\n\t'file-system.confirm-open.open': 'Open file',\n\t'file-system.confirm-open.dont-show-again': \"Don't ask again\",\n\t'file-system.confirm-clear.title': 'Clear current project?',\n\t'file-system.confirm-clear.description':\n\t\t'Creating a new project will clear your current project and any unsaved changes will be lost. Are you sure you want to continue?',\n\t'file-system.confirm-clear.cancel': 'Cancel',\n\t'file-system.confirm-clear.continue': 'Continue',\n\t'file-system.confirm-clear.dont-show-again': \"Don't ask again\",\n\t'file-system.shared-document-file-open-error.title': 'Could not open file',\n\t'file-system.shared-document-file-open-error.description':\n\t\t'Opening files from shared projects is not supported.',\n\t'sharing.confirm-leave.title': 'Leave current project?',\n\t'sharing.confirm-leave.description':\n\t\t'Are you sure you want to leave this shared project? You can return to it by navigating to its URL.',\n\t'sharing.confirm-leave.cancel': 'Cancel',\n\t'sharing.confirm-leave.leave': 'Leave',\n\t'sharing.confirm-leave.dont-show-again': \"Don't ask again\",\n\t'toast.error.export-fail.title': 'Failed export',\n\t'toast.error.export-fail.desc': 'Failed to export image',\n\t'toast.error.copy-fail.title': 'Failed copy',\n\t'toast.error.copy-fail.desc': 'Failed to copy image',\n\t'context.pages.new-page': 'New page',\n\t'vscode.file-open.desc':\n\t\t\"We've updated this document to work with the current version of tldraw. If you'd like to keep the original version (which will work on old.tldraw.com), click below to create a backup.\",\n\t'vscode.file-open.open': 'Continue',\n\t'vscode.file-open.backup': 'Backup',\n\t'vscode.file-open.backup-saved': 'Backup saved',\n\t'vscode.file-open.backup-failed': 'Backup failed: this is not a .tldr file.',\n\t'vscode.file-open.dont-show-again': \"Don't ask again\",\n\t'cursor-chat.type-to-chat': 'Type to chat...',\n}\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["// This file is automatically generated by scripts/refresh-assets.ts.\n// Do not edit manually.\n\n/** @internal */\nexport const DEFAULT_TRANSLATION = {\n\t'action.convert-to-bookmark': 'Convert to Bookmark',\n\t'action.convert-to-embed': 'Convert to Embed',\n\t'action.open-embed-link': 'Open link',\n\t'action.align-bottom': 'Align bottom',\n\t'action.align-center-horizontal': 'Align horizontally',\n\t'action.align-center-vertical': 'Align vertically',\n\t'action.align-center-horizontal.short': 'Align H',\n\t'action.align-center-vertical.short': 'Align V',\n\t'action.align-left': 'Align left',\n\t'action.align-right': 'Align right',\n\t'action.align-top': 'Align top',\n\t'action.back-to-content': 'Back to content',\n\t'action.bring-forward': 'Bring forward',\n\t'action.bring-to-front': 'Bring to front',\n\t'action.copy-as-json.short': 'JSON',\n\t'action.copy-as-json': 'Copy as JSON',\n\t'action.copy-as-png.short': 'PNG',\n\t'action.copy-as-png': 'Copy as PNG',\n\t'action.copy-as-svg.short': 'SVG',\n\t'action.copy-as-svg': 'Copy as SVG',\n\t'action.copy': 'Copy',\n\t'action.cut': 'Cut',\n\t'action.delete': 'Delete',\n\t'action.unlock-all': 'Unlock all',\n\t'action.distribute-horizontal': 'Distribute horizontally',\n\t'action.distribute-vertical': 'Distribute vertically',\n\t'action.distribute-horizontal.short': 'Distribute H',\n\t'action.distribute-vertical.short': 'Distribute V',\n\t'action.duplicate': 'Duplicate',\n\t'action.edit-link': 'Edit link',\n\t'action.exit-pen-mode': 'Exit pen mode',\n\t'action.export-as-json.short': 'JSON',\n\t'action.export-as-json': 'Export as JSON',\n\t'action.export-as-png.short': 'PNG',\n\t'action.export-as-png': 'Export as PNG',\n\t'action.export-as-svg.short': 'SVG',\n\t'action.export-as-svg': 'Export as SVG',\n\t'action.fit-frame-to-content': 'Fit to content',\n\t'action.flip-horizontal': 'Flip horizontally',\n\t'action.flip-vertical': 'Flip vertically',\n\t'action.flip-horizontal.short': 'Flip H',\n\t'action.flip-vertical.short': 'Flip V',\n\t'action.fork-project': 'Fork this project',\n\t'action.group': 'Group',\n\t'action.insert-embed': 'Insert embed',\n\t'action.insert-media': 'Upload media',\n\t'action.leave-shared-project': 'Leave shared project',\n\t'action.new-project': 'New project',\n\t'action.new-shared-project': 'New shared project',\n\t'action.open-cursor-chat': 'Cursor chat',\n\t'action.open-file': 'Open file',\n\t'action.pack': 'Pack',\n\t'action.paste': 'Paste',\n\t'action.print': 'Print',\n\t'action.redo': 'Redo',\n\t'action.remove-frame': 'Remove frame',\n\t'action.rotate-ccw': 'Rotate counterclockwise',\n\t'action.rotate-cw': 'Rotate clockwise',\n\t'action.save-copy': 'Save a copy',\n\t'action.select-all': 'Select all',\n\t'action.select-none': 'Select none',\n\t'action.send-backward': 'Send backward',\n\t'action.send-to-back': 'Send to back',\n\t'action.share-project': 'Share this project',\n\t'action.stack-horizontal': 'Stack horizontally',\n\t'action.stack-vertical': 'Stack vertically',\n\t'action.stack-horizontal.short': 'Stack H',\n\t'action.stack-vertical.short': 'Stack V',\n\t'action.stop-following': 'Stop following',\n\t'action.stretch-horizontal': 'Stretch horizontally',\n\t'action.stretch-vertical': 'Stretch vertically',\n\t'action.stretch-horizontal.short': 'Stretch H',\n\t'action.stretch-vertical.short': 'Stretch V',\n\t'action.toggle-auto-size': 'Toggle auto size',\n\t'action.toggle-dark-mode.menu': 'Dark mode',\n\t'action.toggle-dark-mode': 'Toggle dark mode',\n\t'action.toggle-reduce-motion.menu': 'Reduce motion',\n\t'action.toggle-reduce-motion': 'Toggle reduce motion',\n\t'action.toggle-edge-scrolling.menu': 'Edge scrolling',\n\t'action.toggle-edge-scrolling': 'Toggle edge scrolling',\n\t'action.toggle-debug-mode.menu': 'Debug mode',\n\t'action.toggle-debug-mode': 'Toggle debug mode',\n\t'action.toggle-focus-mode.menu': 'Focus mode',\n\t'action.toggle-focus-mode': 'Toggle focus mode',\n\t'action.toggle-grid.menu': 'Show grid',\n\t'action.toggle-grid': 'Toggle grid',\n\t'action.toggle-lock': 'Toggle locked',\n\t'action.toggle-snap-mode.menu': 'Always snap',\n\t'action.toggle-snap-mode': 'Toggle always snap',\n\t'action.toggle-tool-lock.menu': 'Tool lock',\n\t'action.toggle-tool-lock': 'Toggle tool lock',\n\t'action.toggle-transparent.context-menu': 'Transparent',\n\t'action.toggle-transparent.menu': 'Transparent',\n\t'action.toggle-transparent': 'Toggle transparent background',\n\t'action.undo': 'Undo',\n\t'action.ungroup': 'Ungroup',\n\t'action.zoom-in': 'Zoom in',\n\t'action.zoom-out': 'Zoom out',\n\t'action.zoom-to-100': 'Zoom to 100%',\n\t'action.zoom-to-fit': 'Zoom to fit',\n\t'action.zoom-to-selection': 'Zoom to selection',\n\t'color-style.black': 'Black',\n\t'color-style.blue': 'Blue',\n\t'color-style.green': 'Green',\n\t'color-style.grey': 'Grey',\n\t'color-style.light-blue': 'Light blue',\n\t'color-style.light-green': 'Light green',\n\t'color-style.light-red': 'Light red',\n\t'color-style.light-violet': 'Light violet',\n\t'color-style.orange': 'Orange',\n\t'color-style.red': 'Red',\n\t'color-style.violet': 'Violet',\n\t'color-style.yellow': 'Yellow',\n\t'fill-style.none': 'None',\n\t'fill-style.semi': 'Semi',\n\t'fill-style.solid': 'Solid',\n\t'fill-style.pattern': 'Pattern',\n\t'dash-style.dashed': 'Dashed',\n\t'dash-style.dotted': 'Dotted',\n\t'dash-style.draw': 'Draw',\n\t'dash-style.solid': 'Solid',\n\t'size-style.s': 'Small',\n\t'size-style.m': 'Medium',\n\t'size-style.l': 'Large',\n\t'size-style.xl': 'Extra large',\n\t'opacity-style.0.1': '10%',\n\t'opacity-style.0.25': '25%',\n\t'opacity-style.0.5': '50%',\n\t'opacity-style.0.75': '75%',\n\t'opacity-style.1': '100%',\n\t'font-style.draw': 'Draw',\n\t'font-style.sans': 'Sans',\n\t'font-style.serif': 'Serif',\n\t'font-style.mono': 'Mono',\n\t'align-style.start': 'Start',\n\t'align-style.middle': 'Middle',\n\t'align-style.end': 'End',\n\t'align-style.justify': 'Justify',\n\t'geo-style.arrow-down': 'Arrow down',\n\t'geo-style.arrow-left': 'Arrow left',\n\t'geo-style.arrow-right': 'Arrow right',\n\t'geo-style.arrow-up': 'Arrow up',\n\t'geo-style.diamond': 'Diamond',\n\t'geo-style.ellipse': 'Ellipse',\n\t'geo-style.hexagon': 'Hexagon',\n\t'geo-style.octagon': 'Octagon',\n\t'geo-style.oval': 'Oval',\n\t'geo-style.cloud': 'Cloud',\n\t'geo-style.pentagon': 'Pentagon',\n\t'geo-style.rectangle': 'Rectangle',\n\t'geo-style.rhombus-2': 'Rhombus 2',\n\t'geo-style.rhombus': 'Rhombus',\n\t'geo-style.star': 'Star',\n\t'geo-style.trapezoid': 'Trapezoid',\n\t'geo-style.triangle': 'Triangle',\n\t'geo-style.x-box': 'X box',\n\t'geo-style.check-box': 'Check box',\n\t'arrowheadStart-style.none': 'None',\n\t'arrowheadStart-style.arrow': 'Arrow',\n\t'arrowheadStart-style.bar': 'Bar',\n\t'arrowheadStart-style.diamond': 'Diamond',\n\t'arrowheadStart-style.dot': 'Dot',\n\t'arrowheadStart-style.inverted': 'Inverted',\n\t'arrowheadStart-style.pipe': 'Pipe',\n\t'arrowheadStart-style.square': 'Square',\n\t'arrowheadStart-style.triangle': 'Triangle',\n\t'arrowheadEnd-style.none': 'None',\n\t'arrowheadEnd-style.arrow': 'Arrow',\n\t'arrowheadEnd-style.bar': 'Bar',\n\t'arrowheadEnd-style.diamond': 'Diamond',\n\t'arrowheadEnd-style.dot': 'Dot',\n\t'arrowheadEnd-style.inverted': 'Inverted',\n\t'arrowheadEnd-style.pipe': 'Pipe',\n\t'arrowheadEnd-style.square': 'Square',\n\t'arrowheadEnd-style.triangle': 'Triangle',\n\t'spline-style.line': 'Line',\n\t'spline-style.cubic': 'Cubic',\n\t'tool.select': 'Select',\n\t'tool.hand': 'Hand',\n\t'tool.draw': 'Draw',\n\t'tool.eraser': 'Eraser',\n\t'tool.arrow-down': 'Arrow down',\n\t'tool.arrow-left': 'Arrow left',\n\t'tool.arrow-right': 'Arrow right',\n\t'tool.arrow-up': 'Arrow up',\n\t'tool.arrow': 'Arrow',\n\t'tool.cloud': 'Cloud',\n\t'tool.diamond': 'Diamond',\n\t'tool.ellipse': 'Ellipse',\n\t'tool.hexagon': 'Hexagon',\n\t'tool.highlight': 'Highlight',\n\t'tool.line': 'Line',\n\t'tool.octagon': 'Octagon',\n\t'tool.oval': 'Oval',\n\t'tool.pentagon': 'Pentagon',\n\t'tool.rectangle': 'Rectangle',\n\t'tool.rhombus': 'Rhombus',\n\t'tool.star': 'Star',\n\t'tool.trapezoid': 'Trapezoid',\n\t'tool.triangle': 'Triangle',\n\t'tool.x-box': 'X box',\n\t'tool.check-box': 'Check box',\n\t'tool.asset': 'Asset',\n\t'tool.frame': 'Frame',\n\t'tool.note': 'Note',\n\t'tool.laser': 'Laser',\n\t'tool.embed': 'Embed',\n\t'tool.text': 'Text',\n\t'menu.title': 'Menu',\n\t'menu.copy-as': 'Copy as',\n\t'menu.edit': 'Edit',\n\t'menu.export-as': 'Export as',\n\t'menu.file': 'File',\n\t'menu.language': 'Language',\n\t'menu.preferences': 'Preferences',\n\t'menu.view': 'View',\n\t'context-menu.arrange': 'Arrange',\n\t'context-menu.copy-as': 'Copy as',\n\t'context-menu.export-as': 'Export as',\n\t'context-menu.move-to-page': 'Move to page',\n\t'context-menu.reorder': 'Reorder',\n\t'page-menu.title': 'Pages',\n\t'page-menu.create-new-page': 'Create new page',\n\t'page-menu.max-page-count-reached': 'Max pages reached',\n\t'page-menu.new-page-initial-name': 'Page 1',\n\t'page-menu.edit-start': 'Edit',\n\t'page-menu.edit-done': 'Done',\n\t'page-menu.go-to-page': 'Go to page',\n\t'page-menu.submenu.rename': 'Rename',\n\t'page-menu.submenu.duplicate-page': 'Duplicate',\n\t'page-menu.submenu.title': 'Menu',\n\t'page-menu.submenu.move-down': 'Move down',\n\t'page-menu.submenu.move-up': 'Move up',\n\t'page-menu.submenu.delete': 'Delete',\n\t'share-menu.title': 'Share',\n\t'share-menu.save-note': 'Download this project to your computer as a .tldr file.',\n\t'share-menu.fork-note': 'Create a new shared project based on this snapshot.',\n\t'share-menu.share-project': 'Share this project',\n\t'share-menu.default-project-name': 'Shared Project',\n\t'share-menu.copy-link': 'Copy share link',\n\t'share-menu.readonly-link': 'Read-only',\n\t'share-menu.create-snapshot-link': 'Copy snapshot link',\n\t'share-menu.snapshot-link-note': 'Capture and share this project as a read-only snapshot link.',\n\t'share-menu.copy-readonly-link': 'Copy read-only link',\n\t'share-menu.offline-note': 'Create a new shared project based on your current project.',\n\t'share-menu.copy-link-note': 'Anyone with the link will be able to view and edit this project.',\n\t'share-menu.copy-readonly-link-note':\n\t\t'Anyone with the link will be able to view (but not edit) this project.',\n\t'share-menu.project-too-large':\n\t\t\"Sorry, this project can't be shared because it's too large. We're working on it!\",\n\t'share-menu.upload-failed':\n\t\t\"Sorry, we couldn't upload your project at the moment. Please try again or let us know if the problem persists.\",\n\t'status.offline': 'Offline',\n\t'status.online': 'Online',\n\t'people-menu.title': 'People',\n\t'people-menu.change-name': 'Change name',\n\t'people-menu.change-color': 'Change color',\n\t'people-menu.follow': 'Following',\n\t'people-menu.following': 'Following',\n\t'people-menu.leading': 'Following You',\n\t'people-menu.user': '(You)',\n\t'people-menu.invite': 'Invite others',\n\t'help-menu.title': 'Help and resources',\n\t'help-menu.about': 'About',\n\t'help-menu.discord': 'Discord',\n\t'help-menu.github': 'GitHub',\n\t'help-menu.keyboard-shortcuts': 'Keyboard shortcuts',\n\t'help-menu.twitter': 'Twitter',\n\t'actions-menu.title': 'Actions',\n\t'edit-link-dialog.title': 'Edit link',\n\t'edit-link-dialog.invalid-url': 'A link must be a valid URL.',\n\t'edit-link-dialog.detail': 'Links will open in a new tab.',\n\t'edit-link-dialog.url': 'URL',\n\t'edit-link-dialog.clear': 'Clear',\n\t'edit-link-dialog.save': 'Continue',\n\t'edit-link-dialog.cancel': 'Cancel',\n\t'embed-dialog.title': 'Insert embed',\n\t'embed-dialog.back': 'Back',\n\t'embed-dialog.create': 'Create',\n\t'embed-dialog.cancel': 'Cancel',\n\t'embed-dialog.url': 'URL',\n\t'embed-dialog.instruction': \"Paste in the site's URL to create the embed.\",\n\t'embed-dialog.invalid-url': 'We could not create an embed from that URL.',\n\t'edit-pages-dialog.move-down': 'Move down',\n\t'edit-pages-dialog.move-up': 'Move up',\n\t'shortcuts-dialog.title': 'Keyboard shortcuts',\n\t'shortcuts-dialog.edit': 'Edit',\n\t'shortcuts-dialog.file': 'File',\n\t'shortcuts-dialog.preferences': 'Preferences',\n\t'shortcuts-dialog.tools': 'Tools',\n\t'shortcuts-dialog.transform': 'Transform',\n\t'shortcuts-dialog.view': 'View',\n\t'shortcuts-dialog.collaboration': 'Collaboration',\n\t'home-project-dialog.title': 'Home project',\n\t'home-project-dialog.description': \"This is your local home project. It's just for you!\",\n\t'rename-project-dialog.title': 'Rename project',\n\t'rename-project-dialog.cancel': 'Cancel',\n\t'rename-project-dialog.rename': 'Rename',\n\t'home-project-dialog.ok': 'Ok',\n\t'style-panel.title': 'Styles',\n\t'style-panel.align': 'Align',\n\t'style-panel.vertical-align': 'Vertical align',\n\t'style-panel.position': 'Position',\n\t'style-panel.arrowheads': 'Arrows',\n\t'style-panel.arrowhead-start': 'Start',\n\t'style-panel.arrowhead-end': 'End',\n\t'style-panel.color': 'Color',\n\t'style-panel.dash': 'Dash',\n\t'style-panel.fill': 'Fill',\n\t'style-panel.font': 'Font',\n\t'style-panel.geo': 'Shape',\n\t'style-panel.mixed': 'Mixed',\n\t'style-panel.opacity': 'Opacity',\n\t'style-panel.size': 'Size',\n\t'style-panel.spline': 'Spline',\n\t'tool-panel.drawing': 'Drawing',\n\t'tool-panel.shapes': 'Shapes',\n\t'tool-panel.more': 'More',\n\t'debug-panel.more': 'More',\n\t'navigation-zone.toggle-minimap': 'Toggle minimap',\n\t'navigation-zone.zoom': 'Zoom',\n\t'focus-mode.toggle-focus-mode': 'Toggle focus mode',\n\t'toast.close': 'Close',\n\t'file-system.file-open-error.title': 'Could not open file',\n\t'file-system.file-open-error.not-a-tldraw-file':\n\t\t\"The file you tried to open doesn't look like a tldraw file.\",\n\t'file-system.file-open-error.file-format-version-too-new':\n\t\t'The file you tried to open is from a newer version of tldraw. Please reload the page and try again.',\n\t'file-system.file-open-error.generic-corrupted-file': 'The file you tried to open is corrupted.',\n\t'file-system.confirm-open.title': 'Overwrite current project?',\n\t'file-system.confirm-open.description':\n\t\t'Opening a file will replace your current project and any unsaved changes will be lost. Are you sure you want to continue?',\n\t'file-system.confirm-open.cancel': 'Cancel',\n\t'file-system.confirm-open.open': 'Open file',\n\t'file-system.confirm-open.dont-show-again': \"Don't ask again\",\n\t'file-system.confirm-clear.title': 'Clear current project?',\n\t'file-system.confirm-clear.description':\n\t\t'Creating a new project will clear your current project and any unsaved changes will be lost. Are you sure you want to continue?',\n\t'file-system.confirm-clear.cancel': 'Cancel',\n\t'file-system.confirm-clear.continue': 'Continue',\n\t'file-system.confirm-clear.dont-show-again': \"Don't ask again\",\n\t'file-system.shared-document-file-open-error.title': 'Could not open file',\n\t'file-system.shared-document-file-open-error.description':\n\t\t'Opening files from shared projects is not supported.',\n\t'sharing.confirm-leave.title': 'Leave current project?',\n\t'sharing.confirm-leave.description':\n\t\t'Are you sure you want to leave this shared project? You can return to it by navigating to its URL.',\n\t'sharing.confirm-leave.cancel': 'Cancel',\n\t'sharing.confirm-leave.leave': 'Leave',\n\t'sharing.confirm-leave.dont-show-again': \"Don't ask again\",\n\t'toast.error.export-fail.title': 'Failed export',\n\t'toast.error.export-fail.desc': 'Failed to export image',\n\t'toast.error.copy-fail.title': 'Failed copy',\n\t'toast.error.copy-fail.desc': 'Failed to copy image',\n\t'context.pages.new-page': 'New page',\n\t'vscode.file-open.desc':\n\t\t\"We've updated this document to work with the current version of tldraw. If you'd like to keep the original version (which will work on old.tldraw.com), click below to create a backup.\",\n\t'vscode.file-open.open': 'Continue',\n\t'vscode.file-open.backup': 'Backup',\n\t'vscode.file-open.backup-saved': 'Backup saved',\n\t'vscode.file-open.backup-failed': 'Backup failed: this is not a .tldr file.',\n\t'vscode.file-open.dont-show-again': \"Don't ask again\",\n\t'cursor-chat.type-to-chat': 'Type to chat...',\n\t'app.poll.t': 'True',\n\t'app.poll.f': 'False',\n\t'app.poll.y': 'Yes',\n\t'app.poll.n': 'No',\n\t'app.poll.abstention': 'Abstention',\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist-esm/index.d.mts
CHANGED
|
@@ -838,6 +838,7 @@ export declare class GeoShapeUtil extends BaseBoxShapeUtil<TLGeoShape> {
|
|
|
838
838
|
isLocked: boolean;
|
|
839
839
|
opacity: number;
|
|
840
840
|
meta: JsonObject;
|
|
841
|
+
whiteboardId?: string | undefined;
|
|
841
842
|
id: TLShapeId;
|
|
842
843
|
typeName: "shape";
|
|
843
844
|
} | undefined;
|
|
@@ -867,6 +868,7 @@ export declare class GeoShapeUtil extends BaseBoxShapeUtil<TLGeoShape> {
|
|
|
867
868
|
isLocked: boolean;
|
|
868
869
|
opacity: number;
|
|
869
870
|
meta: JsonObject;
|
|
871
|
+
whiteboardId?: string | undefined;
|
|
870
872
|
id: TLShapeId;
|
|
871
873
|
typeName: "shape";
|
|
872
874
|
} | undefined;
|
|
@@ -883,6 +885,7 @@ export declare class GeoShapeUtil extends BaseBoxShapeUtil<TLGeoShape> {
|
|
|
883
885
|
isLocked: boolean;
|
|
884
886
|
opacity: number;
|
|
885
887
|
meta: JsonObject;
|
|
888
|
+
whiteboardId?: string | undefined;
|
|
886
889
|
id: TLShapeId;
|
|
887
890
|
typeName: "shape";
|
|
888
891
|
} | {
|
|
@@ -898,6 +901,7 @@ export declare class GeoShapeUtil extends BaseBoxShapeUtil<TLGeoShape> {
|
|
|
898
901
|
isLocked: boolean;
|
|
899
902
|
opacity: number;
|
|
900
903
|
meta: JsonObject;
|
|
904
|
+
whiteboardId?: string | undefined;
|
|
901
905
|
id: TLShapeId;
|
|
902
906
|
typeName: "shape";
|
|
903
907
|
} | undefined;
|
|
@@ -1315,6 +1319,7 @@ export declare class NoteShapeUtil extends ShapeUtil<TLNoteShape> {
|
|
|
1315
1319
|
isLocked: boolean;
|
|
1316
1320
|
opacity: number;
|
|
1317
1321
|
meta: JsonObject;
|
|
1322
|
+
whiteboardId?: string | undefined;
|
|
1318
1323
|
id: TLShapeId;
|
|
1319
1324
|
typeName: "shape";
|
|
1320
1325
|
} | undefined;
|
|
@@ -1338,6 +1343,7 @@ export declare class NoteShapeUtil extends ShapeUtil<TLNoteShape> {
|
|
|
1338
1343
|
isLocked: boolean;
|
|
1339
1344
|
opacity: number;
|
|
1340
1345
|
meta: JsonObject;
|
|
1346
|
+
whiteboardId?: string | undefined;
|
|
1341
1347
|
id: TLShapeId;
|
|
1342
1348
|
typeName: "shape";
|
|
1343
1349
|
} | undefined;
|
|
@@ -1954,6 +1960,7 @@ export declare class TextShapeUtil extends ShapeUtil<TLTextShape> {
|
|
|
1954
1960
|
autoSize: boolean;
|
|
1955
1961
|
};
|
|
1956
1962
|
meta: JsonObject;
|
|
1963
|
+
whiteboardId?: string | undefined;
|
|
1957
1964
|
id: TLShapeId;
|
|
1958
1965
|
typeName: "shape";
|
|
1959
1966
|
} | undefined;
|
|
@@ -1978,6 +1985,7 @@ export declare class TextShapeUtil extends ShapeUtil<TLTextShape> {
|
|
|
1978
1985
|
isLocked: boolean;
|
|
1979
1986
|
opacity: number;
|
|
1980
1987
|
meta: JsonObject;
|
|
1988
|
+
whiteboardId?: string | undefined;
|
|
1981
1989
|
id: TLShapeId;
|
|
1982
1990
|
typeName: "shape";
|
|
1983
1991
|
} | undefined;
|
|
@@ -2595,7 +2603,7 @@ export declare type TLUiTranslation = {
|
|
|
2595
2603
|
export declare type TLUiTranslationContextType = TLUiTranslation;
|
|
2596
2604
|
|
|
2597
2605
|
/** @public */
|
|
2598
|
-
export declare type TLUiTranslationKey = 'action.align-bottom' | 'action.align-center-horizontal.short' | 'action.align-center-horizontal' | 'action.align-center-vertical.short' | 'action.align-center-vertical' | 'action.align-left' | 'action.align-right' | 'action.align-top' | 'action.back-to-content' | 'action.bring-forward' | 'action.bring-to-front' | 'action.convert-to-bookmark' | 'action.convert-to-embed' | 'action.copy-as-json.short' | 'action.copy-as-json' | 'action.copy-as-png.short' | 'action.copy-as-png' | 'action.copy-as-svg.short' | 'action.copy-as-svg' | 'action.copy' | 'action.cut' | 'action.delete' | 'action.distribute-horizontal.short' | 'action.distribute-horizontal' | 'action.distribute-vertical.short' | 'action.distribute-vertical' | 'action.duplicate' | 'action.edit-link' | 'action.exit-pen-mode' | 'action.export-as-json.short' | 'action.export-as-json' | 'action.export-as-png.short' | 'action.export-as-png' | 'action.export-as-svg.short' | 'action.export-as-svg' | 'action.fit-frame-to-content' | 'action.flip-horizontal.short' | 'action.flip-horizontal' | 'action.flip-vertical.short' | 'action.flip-vertical' | 'action.fork-project' | 'action.group' | 'action.insert-embed' | 'action.insert-media' | 'action.leave-shared-project' | 'action.new-project' | 'action.new-shared-project' | 'action.open-cursor-chat' | 'action.open-embed-link' | 'action.open-file' | 'action.pack' | 'action.paste' | 'action.print' | 'action.redo' | 'action.remove-frame' | 'action.rotate-ccw' | 'action.rotate-cw' | 'action.save-copy' | 'action.select-all' | 'action.select-none' | 'action.send-backward' | 'action.send-to-back' | 'action.share-project' | 'action.stack-horizontal.short' | 'action.stack-horizontal' | 'action.stack-vertical.short' | 'action.stack-vertical' | 'action.stop-following' | 'action.stretch-horizontal.short' | 'action.stretch-horizontal' | 'action.stretch-vertical.short' | 'action.stretch-vertical' | 'action.toggle-auto-size' | 'action.toggle-dark-mode.menu' | 'action.toggle-dark-mode' | 'action.toggle-debug-mode.menu' | 'action.toggle-debug-mode' | 'action.toggle-edge-scrolling.menu' | 'action.toggle-edge-scrolling' | 'action.toggle-focus-mode.menu' | 'action.toggle-focus-mode' | 'action.toggle-grid.menu' | 'action.toggle-grid' | 'action.toggle-lock' | 'action.toggle-reduce-motion.menu' | 'action.toggle-reduce-motion' | 'action.toggle-snap-mode.menu' | 'action.toggle-snap-mode' | 'action.toggle-tool-lock.menu' | 'action.toggle-tool-lock' | 'action.toggle-transparent.context-menu' | 'action.toggle-transparent.menu' | 'action.toggle-transparent' | 'action.undo' | 'action.ungroup' | 'action.unlock-all' | 'action.zoom-in' | 'action.zoom-out' | 'action.zoom-to-100' | 'action.zoom-to-fit' | 'action.zoom-to-selection' | 'actions-menu.title' | 'align-style.end' | 'align-style.justify' | 'align-style.middle' | 'align-style.start' | 'arrowheadEnd-style.arrow' | 'arrowheadEnd-style.bar' | 'arrowheadEnd-style.diamond' | 'arrowheadEnd-style.dot' | 'arrowheadEnd-style.inverted' | 'arrowheadEnd-style.none' | 'arrowheadEnd-style.pipe' | 'arrowheadEnd-style.square' | 'arrowheadEnd-style.triangle' | 'arrowheadStart-style.arrow' | 'arrowheadStart-style.bar' | 'arrowheadStart-style.diamond' | 'arrowheadStart-style.dot' | 'arrowheadStart-style.inverted' | 'arrowheadStart-style.none' | 'arrowheadStart-style.pipe' | 'arrowheadStart-style.square' | 'arrowheadStart-style.triangle' | 'color-style.black' | 'color-style.blue' | 'color-style.green' | 'color-style.grey' | 'color-style.light-blue' | 'color-style.light-green' | 'color-style.light-red' | 'color-style.light-violet' | 'color-style.orange' | 'color-style.red' | 'color-style.violet' | 'color-style.yellow' | 'context-menu.arrange' | 'context-menu.copy-as' | 'context-menu.export-as' | 'context-menu.move-to-page' | 'context-menu.reorder' | 'context.pages.new-page' | 'cursor-chat.type-to-chat' | 'dash-style.dashed' | 'dash-style.dotted' | 'dash-style.draw' | 'dash-style.solid' | 'debug-panel.more' | 'edit-link-dialog.cancel' | 'edit-link-dialog.clear' | 'edit-link-dialog.detail' | 'edit-link-dialog.invalid-url' | 'edit-link-dialog.save' | 'edit-link-dialog.title' | 'edit-link-dialog.url' | 'edit-pages-dialog.move-down' | 'edit-pages-dialog.move-up' | 'embed-dialog.back' | 'embed-dialog.cancel' | 'embed-dialog.create' | 'embed-dialog.instruction' | 'embed-dialog.invalid-url' | 'embed-dialog.title' | 'embed-dialog.url' | 'file-system.confirm-clear.cancel' | 'file-system.confirm-clear.continue' | 'file-system.confirm-clear.description' | 'file-system.confirm-clear.dont-show-again' | 'file-system.confirm-clear.title' | 'file-system.confirm-open.cancel' | 'file-system.confirm-open.description' | 'file-system.confirm-open.dont-show-again' | 'file-system.confirm-open.open' | 'file-system.confirm-open.title' | 'file-system.file-open-error.file-format-version-too-new' | 'file-system.file-open-error.generic-corrupted-file' | 'file-system.file-open-error.not-a-tldraw-file' | 'file-system.file-open-error.title' | 'file-system.shared-document-file-open-error.description' | 'file-system.shared-document-file-open-error.title' | 'fill-style.none' | 'fill-style.pattern' | 'fill-style.semi' | 'fill-style.solid' | 'focus-mode.toggle-focus-mode' | 'font-style.draw' | 'font-style.mono' | 'font-style.sans' | 'font-style.serif' | 'geo-style.arrow-down' | 'geo-style.arrow-left' | 'geo-style.arrow-right' | 'geo-style.arrow-up' | 'geo-style.check-box' | 'geo-style.cloud' | 'geo-style.diamond' | 'geo-style.ellipse' | 'geo-style.hexagon' | 'geo-style.octagon' | 'geo-style.oval' | 'geo-style.pentagon' | 'geo-style.rectangle' | 'geo-style.rhombus-2' | 'geo-style.rhombus' | 'geo-style.star' | 'geo-style.trapezoid' | 'geo-style.triangle' | 'geo-style.x-box' | 'help-menu.about' | 'help-menu.discord' | 'help-menu.github' | 'help-menu.keyboard-shortcuts' | 'help-menu.title' | 'help-menu.twitter' | 'home-project-dialog.description' | 'home-project-dialog.ok' | 'home-project-dialog.title' | 'menu.copy-as' | 'menu.edit' | 'menu.export-as' | 'menu.file' | 'menu.language' | 'menu.preferences' | 'menu.title' | 'menu.view' | 'navigation-zone.toggle-minimap' | 'navigation-zone.zoom' | 'opacity-style.0.1' | 'opacity-style.0.25' | 'opacity-style.0.5' | 'opacity-style.0.75' | 'opacity-style.1' | 'page-menu.create-new-page' | 'page-menu.edit-done' | 'page-menu.edit-start' | 'page-menu.go-to-page' | 'page-menu.max-page-count-reached' | 'page-menu.new-page-initial-name' | 'page-menu.submenu.delete' | 'page-menu.submenu.duplicate-page' | 'page-menu.submenu.move-down' | 'page-menu.submenu.move-up' | 'page-menu.submenu.rename' | 'page-menu.submenu.title' | 'page-menu.title' | 'people-menu.change-color' | 'people-menu.change-name' | 'people-menu.follow' | 'people-menu.following' | 'people-menu.invite' | 'people-menu.leading' | 'people-menu.title' | 'people-menu.user' | 'rename-project-dialog.cancel' | 'rename-project-dialog.rename' | 'rename-project-dialog.title' | 'share-menu.copy-link-note' | 'share-menu.copy-link' | 'share-menu.copy-readonly-link-note' | 'share-menu.copy-readonly-link' | 'share-menu.create-snapshot-link' | 'share-menu.default-project-name' | 'share-menu.fork-note' | 'share-menu.offline-note' | 'share-menu.project-too-large' | 'share-menu.readonly-link' | 'share-menu.save-note' | 'share-menu.share-project' | 'share-menu.snapshot-link-note' | 'share-menu.title' | 'share-menu.upload-failed' | 'sharing.confirm-leave.cancel' | 'sharing.confirm-leave.description' | 'sharing.confirm-leave.dont-show-again' | 'sharing.confirm-leave.leave' | 'sharing.confirm-leave.title' | 'shortcuts-dialog.collaboration' | 'shortcuts-dialog.edit' | 'shortcuts-dialog.file' | 'shortcuts-dialog.preferences' | 'shortcuts-dialog.title' | 'shortcuts-dialog.tools' | 'shortcuts-dialog.transform' | 'shortcuts-dialog.view' | 'size-style.l' | 'size-style.m' | 'size-style.s' | 'size-style.xl' | 'spline-style.cubic' | 'spline-style.line' | 'status.offline' | 'status.online' | 'style-panel.align' | 'style-panel.arrowhead-end' | 'style-panel.arrowhead-start' | 'style-panel.arrowheads' | 'style-panel.color' | 'style-panel.dash' | 'style-panel.fill' | 'style-panel.font' | 'style-panel.geo' | 'style-panel.mixed' | 'style-panel.opacity' | 'style-panel.position' | 'style-panel.size' | 'style-panel.spline' | 'style-panel.title' | 'style-panel.vertical-align' | 'toast.close' | 'toast.error.copy-fail.desc' | 'toast.error.copy-fail.title' | 'toast.error.export-fail.desc' | 'toast.error.export-fail.title' | 'tool-panel.drawing' | 'tool-panel.more' | 'tool-panel.shapes' | 'tool.arrow-down' | 'tool.arrow-left' | 'tool.arrow-right' | 'tool.arrow-up' | 'tool.arrow' | 'tool.asset' | 'tool.check-box' | 'tool.cloud' | 'tool.diamond' | 'tool.draw' | 'tool.ellipse' | 'tool.embed' | 'tool.eraser' | 'tool.frame' | 'tool.hand' | 'tool.hexagon' | 'tool.highlight' | 'tool.laser' | 'tool.line' | 'tool.note' | 'tool.octagon' | 'tool.oval' | 'tool.pentagon' | 'tool.rectangle' | 'tool.rhombus' | 'tool.select' | 'tool.star' | 'tool.text' | 'tool.trapezoid' | 'tool.triangle' | 'tool.x-box' | 'vscode.file-open.backup-failed' | 'vscode.file-open.backup-saved' | 'vscode.file-open.backup' | 'vscode.file-open.desc' | 'vscode.file-open.dont-show-again' | 'vscode.file-open.open';
|
|
2606
|
+
export declare type TLUiTranslationKey = 'action.align-bottom' | 'action.align-center-horizontal.short' | 'action.align-center-horizontal' | 'action.align-center-vertical.short' | 'action.align-center-vertical' | 'action.align-left' | 'action.align-right' | 'action.align-top' | 'action.back-to-content' | 'action.bring-forward' | 'action.bring-to-front' | 'action.convert-to-bookmark' | 'action.convert-to-embed' | 'action.copy-as-json.short' | 'action.copy-as-json' | 'action.copy-as-png.short' | 'action.copy-as-png' | 'action.copy-as-svg.short' | 'action.copy-as-svg' | 'action.copy' | 'action.cut' | 'action.delete' | 'action.distribute-horizontal.short' | 'action.distribute-horizontal' | 'action.distribute-vertical.short' | 'action.distribute-vertical' | 'action.duplicate' | 'action.edit-link' | 'action.exit-pen-mode' | 'action.export-as-json.short' | 'action.export-as-json' | 'action.export-as-png.short' | 'action.export-as-png' | 'action.export-as-svg.short' | 'action.export-as-svg' | 'action.fit-frame-to-content' | 'action.flip-horizontal.short' | 'action.flip-horizontal' | 'action.flip-vertical.short' | 'action.flip-vertical' | 'action.fork-project' | 'action.group' | 'action.insert-embed' | 'action.insert-media' | 'action.leave-shared-project' | 'action.new-project' | 'action.new-shared-project' | 'action.open-cursor-chat' | 'action.open-embed-link' | 'action.open-file' | 'action.pack' | 'action.paste' | 'action.print' | 'action.redo' | 'action.remove-frame' | 'action.rotate-ccw' | 'action.rotate-cw' | 'action.save-copy' | 'action.select-all' | 'action.select-none' | 'action.send-backward' | 'action.send-to-back' | 'action.share-project' | 'action.stack-horizontal.short' | 'action.stack-horizontal' | 'action.stack-vertical.short' | 'action.stack-vertical' | 'action.stop-following' | 'action.stretch-horizontal.short' | 'action.stretch-horizontal' | 'action.stretch-vertical.short' | 'action.stretch-vertical' | 'action.toggle-auto-size' | 'action.toggle-dark-mode.menu' | 'action.toggle-dark-mode' | 'action.toggle-debug-mode.menu' | 'action.toggle-debug-mode' | 'action.toggle-edge-scrolling.menu' | 'action.toggle-edge-scrolling' | 'action.toggle-focus-mode.menu' | 'action.toggle-focus-mode' | 'action.toggle-grid.menu' | 'action.toggle-grid' | 'action.toggle-lock' | 'action.toggle-reduce-motion.menu' | 'action.toggle-reduce-motion' | 'action.toggle-snap-mode.menu' | 'action.toggle-snap-mode' | 'action.toggle-tool-lock.menu' | 'action.toggle-tool-lock' | 'action.toggle-transparent.context-menu' | 'action.toggle-transparent.menu' | 'action.toggle-transparent' | 'action.undo' | 'action.ungroup' | 'action.unlock-all' | 'action.zoom-in' | 'action.zoom-out' | 'action.zoom-to-100' | 'action.zoom-to-fit' | 'action.zoom-to-selection' | 'actions-menu.title' | 'align-style.end' | 'align-style.justify' | 'align-style.middle' | 'align-style.start' | 'app.poll.abstention' | 'app.poll.f' | 'app.poll.n' | 'app.poll.t' | 'app.poll.y' | 'arrowheadEnd-style.arrow' | 'arrowheadEnd-style.bar' | 'arrowheadEnd-style.diamond' | 'arrowheadEnd-style.dot' | 'arrowheadEnd-style.inverted' | 'arrowheadEnd-style.none' | 'arrowheadEnd-style.pipe' | 'arrowheadEnd-style.square' | 'arrowheadEnd-style.triangle' | 'arrowheadStart-style.arrow' | 'arrowheadStart-style.bar' | 'arrowheadStart-style.diamond' | 'arrowheadStart-style.dot' | 'arrowheadStart-style.inverted' | 'arrowheadStart-style.none' | 'arrowheadStart-style.pipe' | 'arrowheadStart-style.square' | 'arrowheadStart-style.triangle' | 'color-style.black' | 'color-style.blue' | 'color-style.green' | 'color-style.grey' | 'color-style.light-blue' | 'color-style.light-green' | 'color-style.light-red' | 'color-style.light-violet' | 'color-style.orange' | 'color-style.red' | 'color-style.violet' | 'color-style.yellow' | 'context-menu.arrange' | 'context-menu.copy-as' | 'context-menu.export-as' | 'context-menu.move-to-page' | 'context-menu.reorder' | 'context.pages.new-page' | 'cursor-chat.type-to-chat' | 'dash-style.dashed' | 'dash-style.dotted' | 'dash-style.draw' | 'dash-style.solid' | 'debug-panel.more' | 'edit-link-dialog.cancel' | 'edit-link-dialog.clear' | 'edit-link-dialog.detail' | 'edit-link-dialog.invalid-url' | 'edit-link-dialog.save' | 'edit-link-dialog.title' | 'edit-link-dialog.url' | 'edit-pages-dialog.move-down' | 'edit-pages-dialog.move-up' | 'embed-dialog.back' | 'embed-dialog.cancel' | 'embed-dialog.create' | 'embed-dialog.instruction' | 'embed-dialog.invalid-url' | 'embed-dialog.title' | 'embed-dialog.url' | 'file-system.confirm-clear.cancel' | 'file-system.confirm-clear.continue' | 'file-system.confirm-clear.description' | 'file-system.confirm-clear.dont-show-again' | 'file-system.confirm-clear.title' | 'file-system.confirm-open.cancel' | 'file-system.confirm-open.description' | 'file-system.confirm-open.dont-show-again' | 'file-system.confirm-open.open' | 'file-system.confirm-open.title' | 'file-system.file-open-error.file-format-version-too-new' | 'file-system.file-open-error.generic-corrupted-file' | 'file-system.file-open-error.not-a-tldraw-file' | 'file-system.file-open-error.title' | 'file-system.shared-document-file-open-error.description' | 'file-system.shared-document-file-open-error.title' | 'fill-style.none' | 'fill-style.pattern' | 'fill-style.semi' | 'fill-style.solid' | 'focus-mode.toggle-focus-mode' | 'font-style.draw' | 'font-style.mono' | 'font-style.sans' | 'font-style.serif' | 'geo-style.arrow-down' | 'geo-style.arrow-left' | 'geo-style.arrow-right' | 'geo-style.arrow-up' | 'geo-style.check-box' | 'geo-style.cloud' | 'geo-style.diamond' | 'geo-style.ellipse' | 'geo-style.hexagon' | 'geo-style.octagon' | 'geo-style.oval' | 'geo-style.pentagon' | 'geo-style.rectangle' | 'geo-style.rhombus-2' | 'geo-style.rhombus' | 'geo-style.star' | 'geo-style.trapezoid' | 'geo-style.triangle' | 'geo-style.x-box' | 'help-menu.about' | 'help-menu.discord' | 'help-menu.github' | 'help-menu.keyboard-shortcuts' | 'help-menu.title' | 'help-menu.twitter' | 'home-project-dialog.description' | 'home-project-dialog.ok' | 'home-project-dialog.title' | 'menu.copy-as' | 'menu.edit' | 'menu.export-as' | 'menu.file' | 'menu.language' | 'menu.preferences' | 'menu.title' | 'menu.view' | 'navigation-zone.toggle-minimap' | 'navigation-zone.zoom' | 'opacity-style.0.1' | 'opacity-style.0.25' | 'opacity-style.0.5' | 'opacity-style.0.75' | 'opacity-style.1' | 'page-menu.create-new-page' | 'page-menu.edit-done' | 'page-menu.edit-start' | 'page-menu.go-to-page' | 'page-menu.max-page-count-reached' | 'page-menu.new-page-initial-name' | 'page-menu.submenu.delete' | 'page-menu.submenu.duplicate-page' | 'page-menu.submenu.move-down' | 'page-menu.submenu.move-up' | 'page-menu.submenu.rename' | 'page-menu.submenu.title' | 'page-menu.title' | 'people-menu.change-color' | 'people-menu.change-name' | 'people-menu.follow' | 'people-menu.following' | 'people-menu.invite' | 'people-menu.leading' | 'people-menu.title' | 'people-menu.user' | 'rename-project-dialog.cancel' | 'rename-project-dialog.rename' | 'rename-project-dialog.title' | 'share-menu.copy-link-note' | 'share-menu.copy-link' | 'share-menu.copy-readonly-link-note' | 'share-menu.copy-readonly-link' | 'share-menu.create-snapshot-link' | 'share-menu.default-project-name' | 'share-menu.fork-note' | 'share-menu.offline-note' | 'share-menu.project-too-large' | 'share-menu.readonly-link' | 'share-menu.save-note' | 'share-menu.share-project' | 'share-menu.snapshot-link-note' | 'share-menu.title' | 'share-menu.upload-failed' | 'sharing.confirm-leave.cancel' | 'sharing.confirm-leave.description' | 'sharing.confirm-leave.dont-show-again' | 'sharing.confirm-leave.leave' | 'sharing.confirm-leave.title' | 'shortcuts-dialog.collaboration' | 'shortcuts-dialog.edit' | 'shortcuts-dialog.file' | 'shortcuts-dialog.preferences' | 'shortcuts-dialog.title' | 'shortcuts-dialog.tools' | 'shortcuts-dialog.transform' | 'shortcuts-dialog.view' | 'size-style.l' | 'size-style.m' | 'size-style.s' | 'size-style.xl' | 'spline-style.cubic' | 'spline-style.line' | 'status.offline' | 'status.online' | 'style-panel.align' | 'style-panel.arrowhead-end' | 'style-panel.arrowhead-start' | 'style-panel.arrowheads' | 'style-panel.color' | 'style-panel.dash' | 'style-panel.fill' | 'style-panel.font' | 'style-panel.geo' | 'style-panel.mixed' | 'style-panel.opacity' | 'style-panel.position' | 'style-panel.size' | 'style-panel.spline' | 'style-panel.title' | 'style-panel.vertical-align' | 'toast.close' | 'toast.error.copy-fail.desc' | 'toast.error.copy-fail.title' | 'toast.error.export-fail.desc' | 'toast.error.export-fail.title' | 'tool-panel.drawing' | 'tool-panel.more' | 'tool-panel.shapes' | 'tool.arrow-down' | 'tool.arrow-left' | 'tool.arrow-right' | 'tool.arrow-up' | 'tool.arrow' | 'tool.asset' | 'tool.check-box' | 'tool.cloud' | 'tool.diamond' | 'tool.draw' | 'tool.ellipse' | 'tool.embed' | 'tool.eraser' | 'tool.frame' | 'tool.hand' | 'tool.hexagon' | 'tool.highlight' | 'tool.laser' | 'tool.line' | 'tool.note' | 'tool.octagon' | 'tool.oval' | 'tool.pentagon' | 'tool.rectangle' | 'tool.rhombus' | 'tool.select' | 'tool.star' | 'tool.text' | 'tool.trapezoid' | 'tool.triangle' | 'tool.x-box' | 'vscode.file-open.backup-failed' | 'vscode.file-open.backup-saved' | 'vscode.file-open.backup' | 'vscode.file-open.desc' | 'vscode.file-open.dont-show-again' | 'vscode.file-open.open';
|
|
2599
2607
|
|
|
2600
2608
|
/** @public */
|
|
2601
2609
|
declare interface TLUiTranslationProviderProps {
|
|
@@ -8,6 +8,7 @@ import { HighlightShapeUtil } from "./shapes/highlight/HighlightShapeUtil.mjs";
|
|
|
8
8
|
import { ImageShapeUtil } from "./shapes/image/ImageShapeUtil.mjs";
|
|
9
9
|
import { LineShapeUtil } from "./shapes/line/LineShapeUtil.mjs";
|
|
10
10
|
import { NoteShapeUtil } from "./shapes/note/NoteShapeUtil.mjs";
|
|
11
|
+
import { PollShapeUtil } from "./shapes/poll/PollShapeUtil.mjs";
|
|
11
12
|
import { TextShapeUtil } from "./shapes/text/TextShapeUtil.mjs";
|
|
12
13
|
import { VideoShapeUtil } from "./shapes/video/VideoShapeUtil.mjs";
|
|
13
14
|
const defaultShapeUtils = [
|
|
@@ -22,7 +23,8 @@ const defaultShapeUtils = [
|
|
|
22
23
|
HighlightShapeUtil,
|
|
23
24
|
EmbedShapeUtil,
|
|
24
25
|
ImageShapeUtil,
|
|
25
|
-
VideoShapeUtil
|
|
26
|
+
VideoShapeUtil,
|
|
27
|
+
PollShapeUtil
|
|
26
28
|
];
|
|
27
29
|
export {
|
|
28
30
|
defaultShapeUtils
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/lib/defaultShapeUtils.ts"],
|
|
4
|
-
"sourcesContent": ["import { TLAnyShapeUtilConstructor } from '@bigbluebutton/editor'\nimport { ArrowShapeUtil } from './shapes/arrow/ArrowShapeUtil'\nimport { BookmarkShapeUtil } from './shapes/bookmark/BookmarkShapeUtil'\nimport { DrawShapeUtil } from './shapes/draw/DrawShapeUtil'\nimport { EmbedShapeUtil } from './shapes/embed/EmbedShapeUtil'\nimport { FrameShapeUtil } from './shapes/frame/FrameShapeUtil'\nimport { GeoShapeUtil } from './shapes/geo/GeoShapeUtil'\nimport { HighlightShapeUtil } from './shapes/highlight/HighlightShapeUtil'\nimport { ImageShapeUtil } from './shapes/image/ImageShapeUtil'\nimport { LineShapeUtil } from './shapes/line/LineShapeUtil'\nimport { NoteShapeUtil } from './shapes/note/NoteShapeUtil'\nimport { TextShapeUtil } from './shapes/text/TextShapeUtil'\nimport { VideoShapeUtil } from './shapes/video/VideoShapeUtil'\n\n/** @public */\nexport const defaultShapeUtils: TLAnyShapeUtilConstructor[] = [\n\tTextShapeUtil,\n\tBookmarkShapeUtil,\n\tDrawShapeUtil,\n\tGeoShapeUtil,\n\tNoteShapeUtil,\n\tLineShapeUtil,\n\tFrameShapeUtil,\n\tArrowShapeUtil,\n\tHighlightShapeUtil,\n\tEmbedShapeUtil,\n\tImageShapeUtil,\n\tVideoShapeUtil,\n]\n"],
|
|
5
|
-
"mappings": "AACA,SAAS,sBAAsB;AAC/B,SAAS,yBAAyB;AAClC,SAAS,qBAAqB;AAC9B,SAAS,sBAAsB;AAC/B,SAAS,sBAAsB;AAC/B,SAAS,oBAAoB;AAC7B,SAAS,0BAA0B;AACnC,SAAS,sBAAsB;AAC/B,SAAS,qBAAqB;AAC9B,SAAS,qBAAqB;AAC9B,SAAS,qBAAqB;AAC9B,SAAS,sBAAsB;AAGxB,MAAM,oBAAiD;AAAA,EAC7D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;",
|
|
4
|
+
"sourcesContent": ["import { TLAnyShapeUtilConstructor } from '@bigbluebutton/editor'\nimport { ArrowShapeUtil } from './shapes/arrow/ArrowShapeUtil'\nimport { BookmarkShapeUtil } from './shapes/bookmark/BookmarkShapeUtil'\nimport { DrawShapeUtil } from './shapes/draw/DrawShapeUtil'\nimport { EmbedShapeUtil } from './shapes/embed/EmbedShapeUtil'\nimport { FrameShapeUtil } from './shapes/frame/FrameShapeUtil'\nimport { GeoShapeUtil } from './shapes/geo/GeoShapeUtil'\nimport { HighlightShapeUtil } from './shapes/highlight/HighlightShapeUtil'\nimport { ImageShapeUtil } from './shapes/image/ImageShapeUtil'\nimport { LineShapeUtil } from './shapes/line/LineShapeUtil'\nimport { NoteShapeUtil } from './shapes/note/NoteShapeUtil'\nimport { PollShapeUtil } from './shapes/poll/PollShapeUtil'\nimport { TextShapeUtil } from './shapes/text/TextShapeUtil'\nimport { VideoShapeUtil } from './shapes/video/VideoShapeUtil'\n\n/** @public */\nexport const defaultShapeUtils: TLAnyShapeUtilConstructor[] = [\n\tTextShapeUtil,\n\tBookmarkShapeUtil,\n\tDrawShapeUtil,\n\tGeoShapeUtil,\n\tNoteShapeUtil,\n\tLineShapeUtil,\n\tFrameShapeUtil,\n\tArrowShapeUtil,\n\tHighlightShapeUtil,\n\tEmbedShapeUtil,\n\tImageShapeUtil,\n\tVideoShapeUtil,\n\tPollShapeUtil,\n]\n"],
|
|
5
|
+
"mappings": "AACA,SAAS,sBAAsB;AAC/B,SAAS,yBAAyB;AAClC,SAAS,qBAAqB;AAC9B,SAAS,sBAAsB;AAC/B,SAAS,sBAAsB;AAC/B,SAAS,oBAAoB;AAC7B,SAAS,0BAA0B;AACnC,SAAS,sBAAsB;AAC/B,SAAS,qBAAqB;AAC9B,SAAS,qBAAqB;AAC9B,SAAS,qBAAqB;AAC9B,SAAS,qBAAqB;AAC9B,SAAS,sBAAsB;AAGxB,MAAM,oBAAiD;AAAA,EAC7D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/shapes/arrow/ArrowShapeUtil.tsx"],
|
|
4
|
-
"sourcesContent": ["import {\n\tArc2d,\n\tBox2d,\n\tDefaultFontFamilies,\n\tEdge2d,\n\tGroup2d,\n\tRectangle2d,\n\tSVGContainer,\n\tShapeUtil,\n\tSvgExportContext,\n\tTLArrowShape,\n\tTLArrowShapeArrowheadStyle,\n\tTLDefaultColorStyle,\n\tTLDefaultColorTheme,\n\tTLDefaultFillStyle,\n\tTLHandle,\n\tTLOnEditEndHandler,\n\tTLOnHandleChangeHandler,\n\tTLOnResizeHandler,\n\tTLOnTranslateStartHandler,\n\tTLShapePartial,\n\tTLShapeUtilCanvasSvgDef,\n\tTLShapeUtilFlag,\n\tVec2d,\n\tarrowShapeMigrations,\n\tarrowShapeProps,\n\tdeepCopy,\n\tgetArrowTerminalsInArrowSpace,\n\tgetArrowheadPathForType,\n\tgetCurvedArrowHandlePath,\n\tgetDefaultColorTheme,\n\tgetSolidCurvedArrowPath,\n\tgetSolidStraightArrowPath,\n\tgetStraightArrowHandlePath,\n\ttoDomPrecision,\n\tuseIsEditing,\n} from '@bigbluebutton/editor'\nimport React from 'react'\nimport { ShapeFill, getShapeFillSvg, useDefaultColorTheme } from '../shared/ShapeFill'\nimport { createTextSvgElementFromSpans } from '../shared/createTextSvgElementFromSpans'\nimport {\n\tARROW_LABEL_FONT_SIZES,\n\tFONT_FAMILIES,\n\tSTROKE_SIZES,\n\tTEXT_PROPS,\n} from '../shared/default-shape-constants'\nimport {\n\tgetFillDefForCanvas,\n\tgetFillDefForExport,\n\tgetFontDefForExport,\n} from '../shared/defaultStyleDefs'\nimport { getPerfectDashProps } from '../shared/getPerfectDashProps'\nimport { ArrowTextLabel } from './components/ArrowTextLabel'\n\nlet globalRenderIndex = 0\n\nexport const ARROW_END_OFFSET = 0.1\n\n/** @public */\nexport class ArrowShapeUtil extends ShapeUtil<TLArrowShape> {\n\tstatic override type = 'arrow' as const\n\tstatic override props = arrowShapeProps\n\tstatic override migrations = arrowShapeMigrations\n\n\toverride canEdit = () => true\n\toverride canBind = () => false\n\toverride canSnap = () => false\n\toverride hideResizeHandles: TLShapeUtilFlag<TLArrowShape> = () => true\n\toverride hideRotateHandle: TLShapeUtilFlag<TLArrowShape> = () => true\n\toverride hideSelectionBoundsBg: TLShapeUtilFlag<TLArrowShape> = () => true\n\toverride hideSelectionBoundsFg: TLShapeUtilFlag<TLArrowShape> = () => true\n\n\toverride getDefaultProps(): TLArrowShape['props'] {\n\t\treturn {\n\t\t\tdash: 'draw',\n\t\t\tsize: 'm',\n\t\t\tfill: 'none',\n\t\t\tcolor: 'black',\n\t\t\tlabelColor: 'black',\n\t\t\tbend: 0,\n\t\t\tstart: { type: 'point', x: 0, y: 0 },\n\t\t\tend: { type: 'point', x: 2, y: 0 },\n\t\t\tarrowheadStart: 'none',\n\t\t\tarrowheadEnd: 'arrow',\n\t\t\ttext: '',\n\t\t\tfont: 'draw',\n\t\t}\n\t}\n\n\tgetGeometry(shape: TLArrowShape) {\n\t\tconst info = this.editor.getArrowInfo(shape)!\n\n\t\tconst bodyGeom = info.isStraight\n\t\t\t? new Edge2d({\n\t\t\t\t\tstart: Vec2d.From(info.start.point),\n\t\t\t\t\tend: Vec2d.From(info.end.point),\n\t\t\t })\n\t\t\t: new Arc2d({\n\t\t\t\t\tcenter: Vec2d.Cast(info.handleArc.center),\n\t\t\t\t\tradius: info.handleArc.radius,\n\t\t\t\t\tstart: Vec2d.Cast(info.start.point),\n\t\t\t\t\tend: Vec2d.Cast(info.end.point),\n\t\t\t\t\tsweepFlag: info.bodyArc.sweepFlag,\n\t\t\t\t\tlargeArcFlag: info.bodyArc.largeArcFlag,\n\t\t\t })\n\n\t\tlet labelGeom: Rectangle2d | undefined\n\n\t\tif (shape.props.text.trim()) {\n\t\t\tconst bodyBounds = bodyGeom.bounds\n\n\t\t\tconst { w, h } = this.editor.textMeasure.measureText(shape.props.text, {\n\t\t\t\t...TEXT_PROPS,\n\t\t\t\tfontFamily: FONT_FAMILIES[shape.props.font],\n\t\t\t\tfontSize: ARROW_LABEL_FONT_SIZES[shape.props.size],\n\t\t\t\tmaxWidth: null,\n\t\t\t})\n\n\t\t\tlet width = w\n\t\t\tlet height = h\n\n\t\t\tif (bodyBounds.width > bodyBounds.height) {\n\t\t\t\twidth = Math.max(Math.min(w, 64), Math.min(bodyBounds.width - 64, w))\n\n\t\t\t\tconst { w: squishedWidth, h: squishedHeight } = this.editor.textMeasure.measureText(\n\t\t\t\t\tshape.props.text,\n\t\t\t\t\t{\n\t\t\t\t\t\t...TEXT_PROPS,\n\t\t\t\t\t\tfontFamily: FONT_FAMILIES[shape.props.font],\n\t\t\t\t\t\tfontSize: ARROW_LABEL_FONT_SIZES[shape.props.size],\n\t\t\t\t\t\tmaxWidth: width,\n\t\t\t\t\t}\n\t\t\t\t)\n\n\t\t\t\twidth = squishedWidth\n\t\t\t\theight = squishedHeight\n\t\t\t}\n\n\t\t\tif (width > 16 * ARROW_LABEL_FONT_SIZES[shape.props.size]) {\n\t\t\t\twidth = 16 * ARROW_LABEL_FONT_SIZES[shape.props.size]\n\n\t\t\t\tconst { w: squishedWidth, h: squishedHeight } = this.editor.textMeasure.measureText(\n\t\t\t\t\tshape.props.text,\n\t\t\t\t\t{\n\t\t\t\t\t\t...TEXT_PROPS,\n\t\t\t\t\t\tfontFamily: FONT_FAMILIES[shape.props.font],\n\t\t\t\t\t\tfontSize: ARROW_LABEL_FONT_SIZES[shape.props.size],\n\t\t\t\t\t\tmaxWidth: width,\n\t\t\t\t\t}\n\t\t\t\t)\n\n\t\t\t\twidth = squishedWidth\n\t\t\t\theight = squishedHeight\n\t\t\t}\n\n\t\t\tlabelGeom = new Rectangle2d({\n\t\t\t\tx: info.middle.x - width / 2 - 4.25,\n\t\t\t\ty: info.middle.y - height / 2 - 4.25,\n\t\t\t\twidth: width + 8.5,\n\t\t\t\theight: height + 8.5,\n\t\t\t\tisFilled: true,\n\t\t\t\tisLabel: true,\n\t\t\t})\n\t\t}\n\n\t\treturn new Group2d({\n\t\t\tchildren: labelGeom ? [bodyGeom, labelGeom] : [bodyGeom],\n\t\t\tisSnappable: false,\n\t\t})\n\t}\n\n\toverride getHandles(shape: TLArrowShape): TLHandle[] {\n\t\tconst info = this.editor.getArrowInfo(shape)!\n\t\treturn [\n\t\t\t{\n\t\t\t\tid: 'start',\n\t\t\t\ttype: 'vertex',\n\t\t\t\tindex: 'a0',\n\t\t\t\tx: info.start.handle.x,\n\t\t\t\ty: info.start.handle.y,\n\t\t\t\tcanBind: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'middle',\n\t\t\t\ttype: 'virtual',\n\t\t\t\tindex: 'a2',\n\t\t\t\tx: info.middle.x,\n\t\t\t\ty: info.middle.y,\n\t\t\t\tcanBind: false,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'end',\n\t\t\t\ttype: 'vertex',\n\t\t\t\tindex: 'a3',\n\t\t\t\tx: info.end.handle.x,\n\t\t\t\ty: info.end.handle.y,\n\t\t\t\tcanBind: true,\n\t\t\t},\n\t\t]\n\t}\n\n\toverride onHandleChange: TLOnHandleChangeHandler<TLArrowShape> = (\n\t\tshape,\n\t\t{ handle, isPrecise }\n\t) => {\n\t\tconst handleId = handle.id as 'start' | 'middle' | 'end'\n\n\t\tif (handleId === 'middle') {\n\t\t\t// Bending the arrow...\n\t\t\tconst { start, end } = getArrowTerminalsInArrowSpace(this.editor, shape)\n\n\t\t\tconst delta = Vec2d.Sub(end, start)\n\t\t\tconst v = Vec2d.Per(delta)\n\n\t\t\tconst med = Vec2d.Med(end, start)\n\t\t\tconst A = Vec2d.Sub(med, v)\n\t\t\tconst B = Vec2d.Add(med, v)\n\n\t\t\tconst point = Vec2d.NearestPointOnLineSegment(A, B, handle, false)\n\t\t\tlet bend = Vec2d.Dist(point, med)\n\t\t\tif (Vec2d.Clockwise(point, end, med)) bend *= -1\n\t\t\treturn { id: shape.id, type: shape.type, props: { bend } }\n\t\t}\n\n\t\t// Start or end, pointing the arrow...\n\n\t\tconst next = deepCopy(shape) as TLArrowShape\n\n\t\tconst pageTransform = this.editor.getShapePageTransform(next.id)!\n\t\tconst pointInPageSpace = pageTransform.applyToPoint(handle)\n\n\t\tif (this.editor.inputs.ctrlKey) {\n\t\t\t// todo: maybe double check that this isn't equal to the other handle too?\n\t\t\t// Skip binding\n\t\t\tnext.props[handleId] = {\n\t\t\t\ttype: 'point',\n\t\t\t\tx: handle.x,\n\t\t\t\ty: handle.y,\n\t\t\t}\n\t\t\treturn next\n\t\t}\n\n\t\tconst point = this.editor.getShapePageTransform(shape.id)!.applyToPoint(handle)\n\n\t\tconst target = this.editor.getShapeAtPoint(point, {\n\t\t\thitInside: true,\n\t\t\thitFrameInside: true,\n\t\t\tmargin: 0,\n\t\t\tfilter: (targetShape) => {\n\t\t\t\treturn !targetShape.isLocked && this.editor.getShapeUtil(targetShape).canBind(targetShape)\n\t\t\t},\n\t\t})\n\n\t\tif (!target) {\n\t\t\t// todo: maybe double check that this isn't equal to the other handle too?\n\t\t\tnext.props[handleId] = {\n\t\t\t\ttype: 'point',\n\t\t\t\tx: handle.x,\n\t\t\t\ty: handle.y,\n\t\t\t}\n\t\t\treturn next\n\t\t}\n\n\t\t// we've got a target! the handle is being dragged over a shape, bind to it\n\n\t\tconst targetGeometry = this.editor.getShapeGeometry(target)\n\t\tconst targetBounds = Box2d.ZeroFix(targetGeometry.bounds)\n\t\tconst pointInTargetSpace = this.editor.getPointInShapeSpace(target, pointInPageSpace)\n\n\t\tlet precise = isPrecise\n\n\t\tif (!precise) {\n\t\t\t// If we're switching to a new bound shape, then precise only if moving slowly\n\t\t\tconst prevHandle = next.props[handleId]\n\t\t\tif (\n\t\t\t\tprevHandle.type === 'point' ||\n\t\t\t\t(prevHandle.type === 'binding' && target.id !== prevHandle.boundShapeId)\n\t\t\t) {\n\t\t\t\tprecise = this.editor.inputs.pointerVelocity.len() < 0.5\n\t\t\t}\n\t\t}\n\n\t\tif (!isPrecise) {\n\t\t\tif (!targetGeometry.isClosed) {\n\t\t\t\tprecise = true\n\t\t\t}\n\n\t\t\t// Double check that we're not going to be doing an imprecise snap on\n\t\t\t// the same shape twice, as this would result in a zero length line\n\t\t\tconst otherHandle = next.props[handleId === 'start' ? 'end' : 'start']\n\t\t\tif (\n\t\t\t\totherHandle.type === 'binding' &&\n\t\t\t\ttarget.id === otherHandle.boundShapeId &&\n\t\t\t\totherHandle.isPrecise\n\t\t\t) {\n\t\t\t\tprecise = true\n\t\t\t}\n\t\t}\n\n\t\tconst normalizedAnchor = {\n\t\t\tx: (pointInTargetSpace.x - targetBounds.minX) / targetBounds.width,\n\t\t\ty: (pointInTargetSpace.y - targetBounds.minY) / targetBounds.height,\n\t\t}\n\n\t\tif (precise) {\n\t\t\t// Turn off precision if we're within a certain distance to the center of the shape.\n\t\t\t// Funky math but we want the snap distance to be 4 at the minimum and either\n\t\t\t// 16 or 15% of the smaller dimension of the target shape, whichever is smaller\n\t\t\tif (\n\t\t\t\tVec2d.Dist(pointInTargetSpace, targetBounds.center) <\n\t\t\t\tMath.max(4, Math.min(Math.min(targetBounds.width, targetBounds.height) * 0.15, 16)) /\n\t\t\t\t\tthis.editor.getZoomLevel()\n\t\t\t) {\n\t\t\t\tnormalizedAnchor.x = 0.5\n\t\t\t\tnormalizedAnchor.y = 0.5\n\t\t\t}\n\t\t}\n\n\t\tnext.props[handleId] = {\n\t\t\ttype: 'binding',\n\t\t\tboundShapeId: target.id,\n\t\t\tnormalizedAnchor: normalizedAnchor,\n\t\t\tisPrecise: precise,\n\t\t\tisExact: this.editor.inputs.altKey,\n\t\t}\n\n\t\tif (next.props.start.type === 'binding' && next.props.end.type === 'binding') {\n\t\t\tif (next.props.start.boundShapeId === next.props.end.boundShapeId) {\n\t\t\t\tif (Vec2d.Equals(next.props.start.normalizedAnchor, next.props.end.normalizedAnchor)) {\n\t\t\t\t\tnext.props.end.normalizedAnchor.x += 0.05\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn next\n\t}\n\n\toverride onTranslateStart: TLOnTranslateStartHandler<TLArrowShape> = (shape) => {\n\t\tconst startBindingId =\n\t\t\tshape.props.start.type === 'binding' ? shape.props.start.boundShapeId : null\n\t\tconst endBindingId = shape.props.end.type === 'binding' ? shape.props.end.boundShapeId : null\n\n\t\t// If at least one bound shape is in the selection, do nothing;\n\t\t// If no bound shapes are in the selection, unbind any bound shapes\n\n\t\tconst selectedShapeIds = this.editor.getSelectedShapeIds()\n\n\t\tif (\n\t\t\t(startBindingId &&\n\t\t\t\t(selectedShapeIds.includes(startBindingId) ||\n\t\t\t\t\tthis.editor.isAncestorSelected(startBindingId))) ||\n\t\t\t(endBindingId &&\n\t\t\t\t(selectedShapeIds.includes(endBindingId) || this.editor.isAncestorSelected(endBindingId)))\n\t\t) {\n\t\t\treturn\n\t\t}\n\n\t\tconst { start, end } = getArrowTerminalsInArrowSpace(this.editor, shape)\n\n\t\treturn {\n\t\t\tid: shape.id,\n\t\t\ttype: shape.type,\n\t\t\tprops: {\n\t\t\t\t...shape.props,\n\t\t\t\tstart: {\n\t\t\t\t\ttype: 'point',\n\t\t\t\t\tx: start.x,\n\t\t\t\t\ty: start.y,\n\t\t\t\t},\n\t\t\t\tend: {\n\t\t\t\t\ttype: 'point',\n\t\t\t\t\tx: end.x,\n\t\t\t\t\ty: end.y,\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t}\n\n\toverride onResize: TLOnResizeHandler<TLArrowShape> = (shape, info) => {\n\t\tconst { scaleX, scaleY } = info\n\n\t\tconst terminals = getArrowTerminalsInArrowSpace(this.editor, shape)\n\n\t\tconst { start, end } = deepCopy<TLArrowShape['props']>(shape.props)\n\t\tlet { bend } = shape.props\n\n\t\t// Rescale start handle if it's not bound to a shape\n\t\tif (start.type === 'point') {\n\t\t\tstart.x = terminals.start.x * scaleX\n\t\t\tstart.y = terminals.start.y * scaleY\n\t\t}\n\n\t\t// Rescale end handle if it's not bound to a shape\n\t\tif (end.type === 'point') {\n\t\t\tend.x = terminals.end.x * scaleX\n\t\t\tend.y = terminals.end.y * scaleY\n\t\t}\n\n\t\t// todo: we should only change the normalized anchor positions\n\t\t// of the shape's handles if the bound shape is also being resized\n\n\t\tconst mx = Math.abs(scaleX)\n\t\tconst my = Math.abs(scaleY)\n\n\t\tif (scaleX < 0 && scaleY >= 0) {\n\t\t\tif (bend !== 0) {\n\t\t\t\tbend *= -1\n\t\t\t\tbend *= Math.max(mx, my)\n\t\t\t}\n\n\t\t\tif (start.type === 'binding') {\n\t\t\t\tstart.normalizedAnchor.x = 1 - start.normalizedAnchor.x\n\t\t\t}\n\n\t\t\tif (end.type === 'binding') {\n\t\t\t\tend.normalizedAnchor.x = 1 - end.normalizedAnchor.x\n\t\t\t}\n\t\t} else if (scaleX >= 0 && scaleY < 0) {\n\t\t\tif (bend !== 0) {\n\t\t\t\tbend *= -1\n\t\t\t\tbend *= Math.max(mx, my)\n\t\t\t}\n\n\t\t\tif (start.type === 'binding') {\n\t\t\t\tstart.normalizedAnchor.y = 1 - start.normalizedAnchor.y\n\t\t\t}\n\n\t\t\tif (end.type === 'binding') {\n\t\t\t\tend.normalizedAnchor.y = 1 - end.normalizedAnchor.y\n\t\t\t}\n\t\t} else if (scaleX >= 0 && scaleY >= 0) {\n\t\t\tif (bend !== 0) {\n\t\t\t\tbend *= Math.max(mx, my)\n\t\t\t}\n\t\t} else if (scaleX < 0 && scaleY < 0) {\n\t\t\tif (bend !== 0) {\n\t\t\t\tbend *= Math.max(mx, my)\n\t\t\t}\n\n\t\t\tif (start.type === 'binding') {\n\t\t\t\tstart.normalizedAnchor.x = 1 - start.normalizedAnchor.x\n\t\t\t\tstart.normalizedAnchor.y = 1 - start.normalizedAnchor.y\n\t\t\t}\n\n\t\t\tif (end.type === 'binding') {\n\t\t\t\tend.normalizedAnchor.x = 1 - end.normalizedAnchor.x\n\t\t\t\tend.normalizedAnchor.y = 1 - end.normalizedAnchor.y\n\t\t\t}\n\t\t}\n\n\t\tconst next = {\n\t\t\tprops: {\n\t\t\t\tstart,\n\t\t\t\tend,\n\t\t\t\tbend,\n\t\t\t},\n\t\t}\n\n\t\treturn next\n\t}\n\n\toverride onDoubleClickHandle = (\n\t\tshape: TLArrowShape,\n\t\thandle: TLHandle\n\t): TLShapePartial<TLArrowShape> | void => {\n\t\tswitch (handle.id) {\n\t\t\tcase 'start': {\n\t\t\t\treturn {\n\t\t\t\t\tid: shape.id,\n\t\t\t\t\ttype: shape.type,\n\t\t\t\t\tprops: {\n\t\t\t\t\t\t...shape.props,\n\t\t\t\t\t\tarrowheadStart: shape.props.arrowheadStart === 'none' ? 'arrow' : 'none',\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t}\n\t\t\tcase 'end': {\n\t\t\t\treturn {\n\t\t\t\t\tid: shape.id,\n\t\t\t\t\ttype: shape.type,\n\t\t\t\t\tprops: {\n\t\t\t\t\t\t...shape.props,\n\t\t\t\t\t\tarrowheadEnd: shape.props.arrowheadEnd === 'none' ? 'arrow' : 'none',\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tcomponent(shape: TLArrowShape) {\n\t\t// Not a class component, but eslint can't tell that :(\n\t\t// eslint-disable-next-line react-hooks/rules-of-hooks\n\t\tconst theme = useDefaultColorTheme()\n\t\tconst onlySelectedShape = this.editor.getOnlySelectedShape()\n\t\tconst shouldDisplayHandles =\n\t\t\tthis.editor.isInAny(\n\t\t\t\t'select.idle',\n\t\t\t\t'select.pointing_handle',\n\t\t\t\t'select.dragging_handle',\n\t\t\t\t'arrow.dragging'\n\t\t\t) && !this.editor.getInstanceState().isReadonly\n\n\t\tconst info = this.editor.getArrowInfo(shape)\n\t\tconst bounds = Box2d.ZeroFix(this.editor.getShapeGeometry(shape).bounds)\n\n\t\t// eslint-disable-next-line react-hooks/rules-of-hooks\n\t\tconst changeIndex = React.useMemo<number>(() => {\n\t\t\treturn this.editor.environment.isSafari ? (globalRenderIndex += 1) : 0\n\t\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t}, [shape])\n\n\t\tif (!info?.isValid) return null\n\n\t\tconst strokeWidth = STROKE_SIZES[shape.props.size]\n\n\t\tconst as = info.start.arrowhead && getArrowheadPathForType(info, 'start', strokeWidth)\n\t\tconst ae = info.end.arrowhead && getArrowheadPathForType(info, 'end', strokeWidth)\n\n\t\tconst path = info.isStraight ? getSolidStraightArrowPath(info) : getSolidCurvedArrowPath(info)\n\n\t\tlet handlePath: null | JSX.Element = null\n\n\t\tif (onlySelectedShape === shape && shouldDisplayHandles) {\n\t\t\tconst sw = 2\n\t\t\tconst { strokeDasharray, strokeDashoffset } = getPerfectDashProps(\n\t\t\t\tinfo.isStraight\n\t\t\t\t\t? Vec2d.Dist(info.start.handle, info.end.handle)\n\t\t\t\t\t: Math.abs(info.handleArc.length),\n\t\t\t\tsw,\n\t\t\t\t{\n\t\t\t\t\tend: 'skip',\n\t\t\t\t\tstart: 'skip',\n\t\t\t\t\tlengthRatio: 2.5,\n\t\t\t\t}\n\t\t\t)\n\n\t\t\thandlePath =\n\t\t\t\tshape.props.start.type === 'binding' || shape.props.end.type === 'binding' ? (\n\t\t\t\t\t<path\n\t\t\t\t\t\tclassName=\"tl-arrow-hint\"\n\t\t\t\t\t\td={info.isStraight ? getStraightArrowHandlePath(info) : getCurvedArrowHandlePath(info)}\n\t\t\t\t\t\tstrokeDasharray={strokeDasharray}\n\t\t\t\t\t\tstrokeDashoffset={strokeDashoffset}\n\t\t\t\t\t\tstrokeWidth={sw}\n\t\t\t\t\t\tmarkerStart={\n\t\t\t\t\t\t\tshape.props.start.type === 'binding'\n\t\t\t\t\t\t\t\t? shape.props.start.isExact\n\t\t\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t\t\t: shape.props.start.isPrecise\n\t\t\t\t\t\t\t\t\t? 'url(#arrowhead-cross)'\n\t\t\t\t\t\t\t\t\t: 'url(#arrowhead-dot)'\n\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmarkerEnd={\n\t\t\t\t\t\t\tshape.props.end.type === 'binding'\n\t\t\t\t\t\t\t\t? shape.props.end.isExact\n\t\t\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t\t\t: shape.props.end.isPrecise\n\t\t\t\t\t\t\t\t\t? 'url(#arrowhead-cross)'\n\t\t\t\t\t\t\t\t\t: 'url(#arrowhead-dot)'\n\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t}\n\t\t\t\t\t\topacity={0.16}\n\t\t\t\t\t/>\n\t\t\t\t) : null\n\t\t}\n\n\t\tconst { strokeDasharray, strokeDashoffset } = getPerfectDashProps(\n\t\t\tinfo.isStraight ? info.length : Math.abs(info.bodyArc.length),\n\t\t\tstrokeWidth,\n\t\t\t{\n\t\t\t\tstyle: shape.props.dash,\n\t\t\t}\n\t\t)\n\n\t\tconst labelGeometry = shape.props.text.trim()\n\t\t\t? (this.editor.getShapeGeometry<Group2d>(shape).children[1] as Rectangle2d)\n\t\t\t: null\n\n\t\tconst maskStartArrowhead = !(\n\t\t\tinfo.start.arrowhead === 'none' || info.start.arrowhead === 'arrow'\n\t\t)\n\t\tconst maskEndArrowhead = !(info.end.arrowhead === 'none' || info.end.arrowhead === 'arrow')\n\n\t\t// NOTE: I know right setting `changeIndex` hacky-as right! But we need this because otherwise safari loses\n\t\t// the mask, see <https://linear.app/tldraw/issue/TLD-1500/changing-arrow-color-makes-line-pass-through-text>\n\t\tconst maskId = (shape.id + '_clip_' + changeIndex).replace(':', '_')\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<SVGContainer id={shape.id} style={{ minWidth: 50, minHeight: 50 }}>\n\t\t\t\t\t{/* Yep */}\n\t\t\t\t\t<defs>\n\t\t\t\t\t\t<mask id={maskId}>\n\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\tx={toDomPrecision(-100 + bounds.minX)}\n\t\t\t\t\t\t\t\ty={toDomPrecision(-100 + bounds.minY)}\n\t\t\t\t\t\t\t\twidth={toDomPrecision(bounds.width + 200)}\n\t\t\t\t\t\t\t\theight={toDomPrecision(bounds.height + 200)}\n\t\t\t\t\t\t\t\tfill=\"white\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t{labelGeometry && (\n\t\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\t\tx={labelGeometry.x}\n\t\t\t\t\t\t\t\t\ty={labelGeometry.y}\n\t\t\t\t\t\t\t\t\twidth={labelGeometry.w}\n\t\t\t\t\t\t\t\t\theight={labelGeometry.h}\n\t\t\t\t\t\t\t\t\tfill=\"black\"\n\t\t\t\t\t\t\t\t\trx={4}\n\t\t\t\t\t\t\t\t\try={4}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{as && maskStartArrowhead && (\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td={as}\n\t\t\t\t\t\t\t\t\tfill={info.start.arrowhead === 'arrow' ? 'none' : 'black'}\n\t\t\t\t\t\t\t\t\tstroke=\"none\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{ae && maskEndArrowhead && (\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td={ae}\n\t\t\t\t\t\t\t\t\tfill={info.end.arrowhead === 'arrow' ? 'none' : 'black'}\n\t\t\t\t\t\t\t\t\tstroke=\"none\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</mask>\n\t\t\t\t\t</defs>\n\t\t\t\t\t<g\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tstroke={theme[shape.props.color].solid}\n\t\t\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\tpointerEvents=\"none\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{handlePath}\n\t\t\t\t\t\t{/* firefox will clip if you provide a maskURL even if there is no mask matching that URL in the DOM */}\n\t\t\t\t\t\t<g mask={`url(#${maskId})`}>\n\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\tx={toDomPrecision(bounds.minX - 100)}\n\t\t\t\t\t\t\t\ty={toDomPrecision(bounds.minY - 100)}\n\t\t\t\t\t\t\t\twidth={toDomPrecision(bounds.width + 200)}\n\t\t\t\t\t\t\t\theight={toDomPrecision(bounds.height + 200)}\n\t\t\t\t\t\t\t\topacity={0}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\td={path}\n\t\t\t\t\t\t\t\tstrokeDasharray={strokeDasharray}\n\t\t\t\t\t\t\t\tstrokeDashoffset={strokeDashoffset}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t\t{as && maskStartArrowhead && shape.props.fill !== 'none' && (\n\t\t\t\t\t\t\t<ShapeFill theme={theme} d={as} color={shape.props.color} fill={shape.props.fill} />\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{ae && maskEndArrowhead && shape.props.fill !== 'none' && (\n\t\t\t\t\t\t\t<ShapeFill theme={theme} d={ae} color={shape.props.color} fill={shape.props.fill} />\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{as && <path d={as} />}\n\t\t\t\t\t\t{ae && <path d={ae} />}\n\t\t\t\t\t</g>\n\t\t\t\t</SVGContainer>\n\t\t\t\t<ArrowTextLabel\n\t\t\t\t\tid={shape.id}\n\t\t\t\t\ttext={shape.props.text}\n\t\t\t\t\tfont={shape.props.font}\n\t\t\t\t\tsize={shape.props.size}\n\t\t\t\t\tposition={info.middle}\n\t\t\t\t\twidth={labelGeometry?.w ?? 0}\n\t\t\t\t\tlabelColor={theme[shape.props.labelColor].solid}\n\t\t\t\t/>\n\t\t\t</>\n\t\t)\n\t}\n\n\tindicator(shape: TLArrowShape) {\n\t\tconst { start, end } = getArrowTerminalsInArrowSpace(this.editor, shape)\n\n\t\tconst info = this.editor.getArrowInfo(shape)\n\t\tconst geometry = this.editor.getShapeGeometry<Group2d>(shape)\n\t\tconst bounds = geometry.bounds\n\n\t\tconst labelGeometry = shape.props.text.trim() ? (geometry.children[1] as Rectangle2d) : null\n\n\t\t// eslint-disable-next-line react-hooks/rules-of-hooks\n\t\tconst isEditing = useIsEditing(shape.id)\n\n\t\tif (!info) return null\n\t\tif (Vec2d.Equals(start, end)) return null\n\n\t\tconst strokeWidth = STROKE_SIZES[shape.props.size]\n\n\t\tconst as = info.start.arrowhead && getArrowheadPathForType(info, 'start', strokeWidth)\n\t\tconst ae = info.end.arrowhead && getArrowheadPathForType(info, 'end', strokeWidth)\n\n\t\tconst path = info.isStraight ? getSolidStraightArrowPath(info) : getSolidCurvedArrowPath(info)\n\n\t\tconst includeMask =\n\t\t\t(as && info.start.arrowhead !== 'arrow') ||\n\t\t\t(ae && info.end.arrowhead !== 'arrow') ||\n\t\t\t!!labelGeometry\n\n\t\tconst maskId = (shape.id + '_clip').replace(':', '_')\n\n\t\tif (isEditing && labelGeometry) {\n\t\t\treturn (\n\t\t\t\t<rect\n\t\t\t\t\tx={toDomPrecision(labelGeometry.x)}\n\t\t\t\t\ty={toDomPrecision(labelGeometry.y)}\n\t\t\t\t\twidth={labelGeometry.w}\n\t\t\t\t\theight={labelGeometry.h}\n\t\t\t\t\trx={3.5}\n\t\t\t\t\try={3.5}\n\t\t\t\t/>\n\t\t\t)\n\t\t}\n\n\t\treturn (\n\t\t\t<g>\n\t\t\t\t{includeMask && (\n\t\t\t\t\t<defs>\n\t\t\t\t\t\t<mask id={maskId}>\n\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\tx={bounds.minX - 100}\n\t\t\t\t\t\t\t\ty={bounds.minY - 100}\n\t\t\t\t\t\t\t\twidth={bounds.w + 200}\n\t\t\t\t\t\t\t\theight={bounds.h + 200}\n\t\t\t\t\t\t\t\tfill=\"white\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t{labelGeometry && (\n\t\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\t\tx={toDomPrecision(labelGeometry.x)}\n\t\t\t\t\t\t\t\t\ty={toDomPrecision(labelGeometry.y)}\n\t\t\t\t\t\t\t\t\twidth={labelGeometry.w}\n\t\t\t\t\t\t\t\t\theight={labelGeometry.h}\n\t\t\t\t\t\t\t\t\tfill=\"black\"\n\t\t\t\t\t\t\t\t\trx={3.5}\n\t\t\t\t\t\t\t\t\try={3.5}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{as && (\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td={as}\n\t\t\t\t\t\t\t\t\tfill={info.start.arrowhead === 'arrow' ? 'none' : 'black'}\n\t\t\t\t\t\t\t\t\tstroke=\"none\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{ae && (\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td={ae}\n\t\t\t\t\t\t\t\t\tfill={info.end.arrowhead === 'arrow' ? 'none' : 'black'}\n\t\t\t\t\t\t\t\t\tstroke=\"none\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</mask>\n\t\t\t\t\t</defs>\n\t\t\t\t)}\n\t\t\t\t{/* firefox will clip if you provide a maskURL even if there is no mask matching that URL in the DOM */}\n\t\t\t\t<g {...(includeMask ? { mask: `url(#${maskId})` } : undefined)}>\n\t\t\t\t\t{/* This rect needs to be here if we're creating a mask due to an svg quirk on Chrome */}\n\t\t\t\t\t{includeMask && (\n\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\tx={bounds.minX - 100}\n\t\t\t\t\t\t\ty={bounds.minY - 100}\n\t\t\t\t\t\t\twidth={bounds.width + 200}\n\t\t\t\t\t\t\theight={bounds.height + 200}\n\t\t\t\t\t\t\topacity={0}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\n\t\t\t\t\t<path d={path} />\n\t\t\t\t</g>\n\t\t\t\t{as && <path d={as} />}\n\t\t\t\t{ae && <path d={ae} />}\n\t\t\t\t{labelGeometry && (\n\t\t\t\t\t<rect\n\t\t\t\t\t\tx={toDomPrecision(labelGeometry.x)}\n\t\t\t\t\t\ty={toDomPrecision(labelGeometry.y)}\n\t\t\t\t\t\twidth={labelGeometry.w}\n\t\t\t\t\t\theight={labelGeometry.h}\n\t\t\t\t\t\trx={3.5}\n\t\t\t\t\t\try={3.5}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</g>\n\t\t)\n\t}\n\n\toverride onEditEnd: TLOnEditEndHandler<TLArrowShape> = (shape) => {\n\t\tconst {\n\t\t\tid,\n\t\t\ttype,\n\t\t\tprops: { text },\n\t\t} = shape\n\n\t\tif (text.trimEnd() !== shape.props.text) {\n\t\t\tthis.editor.updateShapes<TLArrowShape>([\n\t\t\t\t{\n\t\t\t\t\tid,\n\t\t\t\t\ttype,\n\t\t\t\t\tprops: {\n\t\t\t\t\t\ttext: text.trimEnd(),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t])\n\t\t}\n\t}\n\n\toverride toSvg(shape: TLArrowShape, ctx: SvgExportContext) {\n\t\tconst theme = getDefaultColorTheme({ isDarkMode: this.editor.user.getIsDarkMode() })\n\t\tctx.addExportDef(getFillDefForExport(shape.props.fill, theme))\n\n\t\tconst color = theme[shape.props.color].solid\n\n\t\tconst info = this.editor.getArrowInfo(shape)\n\n\t\tconst strokeWidth = STROKE_SIZES[shape.props.size]\n\n\t\t// Group for arrow\n\t\tconst g = document.createElementNS('http://www.w3.org/2000/svg', 'g')\n\t\tif (!info) return g\n\n\t\t// Arrowhead start path\n\t\tconst as = info.start.arrowhead && getArrowheadPathForType(info, 'start', strokeWidth)\n\t\t// Arrowhead end path\n\t\tconst ae = info.end.arrowhead && getArrowheadPathForType(info, 'end', strokeWidth)\n\n\t\tconst geometry = this.editor.getShapeGeometry<Group2d>(shape)\n\t\tconst bounds = geometry.bounds\n\n\t\tconst labelGeometry = shape.props.text.trim() ? (geometry.children[1] as Rectangle2d) : null\n\n\t\tconst maskId = (shape.id + '_clip').replace(':', '_')\n\n\t\t// If we have any arrowheads, then mask the arrowheads\n\t\tif (as || ae || !!labelGeometry) {\n\t\t\t// Create mask for arrowheads\n\n\t\t\t// Create defs\n\t\t\tconst defs = document.createElementNS('http://www.w3.org/2000/svg', 'defs')\n\n\t\t\t// Create mask\n\t\t\tconst mask = document.createElementNS('http://www.w3.org/2000/svg', 'mask')\n\t\t\tmask.id = maskId\n\n\t\t\t// Create large white shape for mask\n\t\t\tconst rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect')\n\t\t\trect.setAttribute('x', bounds.minX - 100 + '')\n\t\t\trect.setAttribute('y', bounds.minY - 100 + '')\n\t\t\trect.setAttribute('width', bounds.width + 200 + '')\n\t\t\trect.setAttribute('height', bounds.height + 200 + '')\n\t\t\trect.setAttribute('fill', 'white')\n\t\t\tmask.appendChild(rect)\n\n\t\t\t// add arrowhead start mask\n\t\t\tif (as) mask.appendChild(getArrowheadSvgMask(as, info.start.arrowhead))\n\n\t\t\t// add arrowhead end mask\n\t\t\tif (ae) mask.appendChild(getArrowheadSvgMask(ae, info.end.arrowhead))\n\n\t\t\t// Mask out text label if text is present\n\t\t\tif (labelGeometry) {\n\t\t\t\tconst labelMask = document.createElementNS('http://www.w3.org/2000/svg', 'rect')\n\t\t\t\tlabelMask.setAttribute('x', labelGeometry.x + '')\n\t\t\t\tlabelMask.setAttribute('y', labelGeometry.y + '')\n\t\t\t\tlabelMask.setAttribute('width', labelGeometry.w + '')\n\t\t\t\tlabelMask.setAttribute('height', labelGeometry.h + '')\n\t\t\t\tlabelMask.setAttribute('fill', 'black')\n\n\t\t\t\tmask.appendChild(labelMask)\n\t\t\t}\n\n\t\t\tdefs.appendChild(mask)\n\t\t\tg.appendChild(defs)\n\t\t}\n\n\t\tconst g2 = document.createElementNS('http://www.w3.org/2000/svg', 'g')\n\t\tg2.setAttribute('mask', `url(#${maskId})`)\n\t\tg.appendChild(g2)\n\n\t\t// Dumb mask fix thing\n\t\tconst rect2 = document.createElementNS('http://www.w3.org/2000/svg', 'rect')\n\t\trect2.setAttribute('x', '-100')\n\t\trect2.setAttribute('y', '-100')\n\t\trect2.setAttribute('width', bounds.width + 200 + '')\n\t\trect2.setAttribute('height', bounds.height + 200 + '')\n\t\trect2.setAttribute('fill', 'transparent')\n\t\trect2.setAttribute('stroke', 'none')\n\t\tg2.appendChild(rect2)\n\n\t\t// Arrowhead body path\n\t\tconst path = getArrowSvgPath(\n\t\t\tinfo.isStraight ? getSolidStraightArrowPath(info) : getSolidCurvedArrowPath(info),\n\t\t\tcolor,\n\t\t\tstrokeWidth\n\t\t)\n\n\t\tconst { strokeDasharray, strokeDashoffset } = getPerfectDashProps(\n\t\t\tinfo.isStraight ? info.length : Math.abs(info.bodyArc.length),\n\t\t\tstrokeWidth,\n\t\t\t{\n\t\t\t\tstyle: shape.props.dash,\n\t\t\t}\n\t\t)\n\n\t\tpath.setAttribute('stroke-dasharray', strokeDasharray)\n\t\tpath.setAttribute('stroke-dashoffset', strokeDashoffset)\n\n\t\tg2.appendChild(path)\n\n\t\t// Arrowhead start path\n\t\tif (as) {\n\t\t\tg.appendChild(\n\t\t\t\tgetArrowheadSvgPath(\n\t\t\t\t\tas,\n\t\t\t\t\tshape.props.color,\n\t\t\t\t\tstrokeWidth,\n\t\t\t\t\tshape.props.arrowheadStart === 'arrow' ? 'none' : shape.props.fill,\n\t\t\t\t\ttheme\n\t\t\t\t)\n\t\t\t)\n\t\t}\n\t\t// Arrowhead end path\n\t\tif (ae) {\n\t\t\tg.appendChild(\n\t\t\t\tgetArrowheadSvgPath(\n\t\t\t\t\tae,\n\t\t\t\t\tshape.props.color,\n\t\t\t\t\tstrokeWidth,\n\t\t\t\t\tshape.props.arrowheadEnd === 'arrow' ? 'none' : shape.props.fill,\n\t\t\t\t\ttheme\n\t\t\t\t)\n\t\t\t)\n\t\t}\n\n\t\t// Text Label\n\t\tif (labelGeometry) {\n\t\t\tctx.addExportDef(getFontDefForExport(shape.props.font))\n\n\t\t\tconst opts = {\n\t\t\t\tfontSize: ARROW_LABEL_FONT_SIZES[shape.props.size],\n\t\t\t\tlineHeight: TEXT_PROPS.lineHeight,\n\t\t\t\tfontFamily: DefaultFontFamilies[shape.props.font],\n\t\t\t\tpadding: 0,\n\t\t\t\ttextAlign: 'middle' as const,\n\t\t\t\twidth: labelGeometry.w - 8,\n\t\t\t\tverticalTextAlign: 'middle' as const,\n\t\t\t\theight: labelGeometry.h,\n\t\t\t\tfontStyle: 'normal',\n\t\t\t\tfontWeight: 'normal',\n\t\t\t\toverflow: 'wrap' as const,\n\t\t\t}\n\n\t\t\tconst textElm = createTextSvgElementFromSpans(\n\t\t\t\tthis.editor,\n\t\t\t\tthis.editor.textMeasure.measureTextSpans(shape.props.text, opts),\n\t\t\t\topts\n\t\t\t)\n\t\t\ttextElm.setAttribute('fill', theme[shape.props.labelColor].solid)\n\n\t\t\tconst children = Array.from(textElm.children) as unknown as SVGTSpanElement[]\n\n\t\t\tchildren.forEach((child) => {\n\t\t\t\tconst x = parseFloat(child.getAttribute('x') || '0')\n\t\t\t\tconst y = parseFloat(child.getAttribute('y') || '0')\n\n\t\t\t\tchild.setAttribute('x', x + 4 + labelGeometry.x + 'px')\n\t\t\t\tchild.setAttribute('y', y + labelGeometry.y + 'px')\n\t\t\t})\n\n\t\t\tconst textBgEl = textElm.cloneNode(true) as SVGTextElement\n\t\t\ttextBgEl.setAttribute('stroke-width', '2')\n\t\t\ttextBgEl.setAttribute('fill', theme.background)\n\t\t\ttextBgEl.setAttribute('stroke', theme.background)\n\n\t\t\tg.appendChild(textBgEl)\n\t\t\tg.appendChild(textElm)\n\t\t}\n\n\t\treturn g\n\t}\n\n\toverride getCanvasSvgDefs(): TLShapeUtilCanvasSvgDef[] {\n\t\treturn [getFillDefForCanvas()]\n\t}\n}\n\nfunction getArrowheadSvgMask(d: string, arrowhead: TLArrowShapeArrowheadStyle) {\n\tconst path = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n\tpath.setAttribute('d', d)\n\tpath.setAttribute('fill', arrowhead === 'arrow' ? 'none' : 'black')\n\tpath.setAttribute('stroke', 'none')\n\treturn path\n}\n\nfunction getArrowSvgPath(d: string, color: string, strokeWidth: number) {\n\tconst path = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n\tpath.setAttribute('d', d)\n\tpath.setAttribute('fill', 'none')\n\tpath.setAttribute('stroke', color)\n\tpath.setAttribute('stroke-width', strokeWidth + '')\n\treturn path\n}\n\nfunction getArrowheadSvgPath(\n\td: string,\n\tcolor: TLDefaultColorStyle,\n\tstrokeWidth: number,\n\tfill: TLDefaultFillStyle,\n\ttheme: TLDefaultColorTheme\n) {\n\tconst path = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n\tpath.setAttribute('d', d)\n\tpath.setAttribute('fill', 'none')\n\tpath.setAttribute('stroke', theme[color].solid)\n\tpath.setAttribute('stroke-width', strokeWidth + '')\n\n\t// Get the fill element, if any\n\tconst shapeFill = getShapeFillSvg({\n\t\td,\n\t\tfill,\n\t\tcolor,\n\t\ttheme,\n\t})\n\n\tif (shapeFill) {\n\t\t// If there is a fill element, return a group containing the fill and the path\n\t\tconst g = document.createElementNS('http://www.w3.org/2000/svg', 'g')\n\t\tg.appendChild(shapeFill)\n\t\tg.appendChild(path)\n\t\treturn g\n\t} else {\n\t\t// Otherwise, just return the path\n\t\treturn path\n\t}\n}\n"],
|
|
5
|
-
"mappings": "AA0hBK,SAmDF,UAnDE,KAuDC,YAvDD;AA1hBL;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAeA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACM;AACP,OAAO,WAAW;AAClB,SAAS,WAAW,iBAAiB,4BAA4B;AACjE,SAAS,qCAAqC;AAC9C;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACM;AACP;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,OACM;AACP,SAAS,2BAA2B;AACpC,SAAS,sBAAsB;AAE/B,IAAI,oBAAoB;AAEjB,MAAM,mBAAmB;AAGzB,MAAM,uBAAuB,UAAwB;AAAA,EAC3D,OAAgB,OAAO;AAAA,EACvB,OAAgB,QAAQ;AAAA,EACxB,OAAgB,aAAa;AAAA,EAEpB,UAAU,MAAM;AAAA,EAChB,UAAU,MAAM;AAAA,EAChB,UAAU,MAAM;AAAA,EAChB,oBAAmD,MAAM;AAAA,EACzD,mBAAkD,MAAM;AAAA,EACxD,wBAAuD,MAAM;AAAA,EAC7D,wBAAuD,MAAM;AAAA,EAE7D,kBAAyC;AACjD,WAAO;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,MAAM;AAAA,MACN,OAAO,EAAE,MAAM,SAAS,GAAG,GAAG,GAAG,EAAE;AAAA,MACnC,KAAK,EAAE,MAAM,SAAS,GAAG,GAAG,GAAG,EAAE;AAAA,MACjC,gBAAgB;AAAA,MAChB,cAAc;AAAA,MACd,MAAM;AAAA,MACN,MAAM;AAAA,IACP;AAAA,EACD;AAAA,EAEA,YAAY,OAAqB;AAChC,UAAM,OAAO,KAAK,OAAO,aAAa,KAAK;AAE3C,UAAM,WAAW,KAAK,aACnB,IAAI,OAAO;AAAA,MACX,OAAO,MAAM,KAAK,KAAK,MAAM,KAAK;AAAA,MAClC,KAAK,MAAM,KAAK,KAAK,IAAI,KAAK;AAAA,IAC9B,CAAC,IACD,IAAI,MAAM;AAAA,MACV,QAAQ,MAAM,KAAK,KAAK,UAAU,MAAM;AAAA,MACxC,QAAQ,KAAK,UAAU;AAAA,MACvB,OAAO,MAAM,KAAK,KAAK,MAAM,KAAK;AAAA,MAClC,KAAK,MAAM,KAAK,KAAK,IAAI,KAAK;AAAA,MAC9B,WAAW,KAAK,QAAQ;AAAA,MACxB,cAAc,KAAK,QAAQ;AAAA,IAC3B,CAAC;AAEJ,QAAI;AAEJ,QAAI,MAAM,MAAM,KAAK,KAAK,GAAG;AAC5B,YAAM,aAAa,SAAS;AAE5B,YAAM,EAAE,GAAG,EAAE,IAAI,KAAK,OAAO,YAAY,YAAY,MAAM,MAAM,MAAM;AAAA,QACtE,GAAG;AAAA,QACH,YAAY,cAAc,MAAM,MAAM,IAAI;AAAA,QAC1C,UAAU,uBAAuB,MAAM,MAAM,IAAI;AAAA,QACjD,UAAU;AAAA,MACX,CAAC;AAED,UAAI,QAAQ;AACZ,UAAI,SAAS;AAEb,UAAI,WAAW,QAAQ,WAAW,QAAQ;AACzC,gBAAQ,KAAK,IAAI,KAAK,IAAI,GAAG,EAAE,GAAG,KAAK,IAAI,WAAW,QAAQ,IAAI,CAAC,CAAC;AAEpE,cAAM,EAAE,GAAG,eAAe,GAAG,eAAe,IAAI,KAAK,OAAO,YAAY;AAAA,UACvE,MAAM,MAAM;AAAA,UACZ;AAAA,YACC,GAAG;AAAA,YACH,YAAY,cAAc,MAAM,MAAM,IAAI;AAAA,YAC1C,UAAU,uBAAuB,MAAM,MAAM,IAAI;AAAA,YACjD,UAAU;AAAA,UACX;AAAA,QACD;AAEA,gBAAQ;AACR,iBAAS;AAAA,MACV;AAEA,UAAI,QAAQ,KAAK,uBAAuB,MAAM,MAAM,IAAI,GAAG;AAC1D,gBAAQ,KAAK,uBAAuB,MAAM,MAAM,IAAI;AAEpD,cAAM,EAAE,GAAG,eAAe,GAAG,eAAe,IAAI,KAAK,OAAO,YAAY;AAAA,UACvE,MAAM,MAAM;AAAA,UACZ;AAAA,YACC,GAAG;AAAA,YACH,YAAY,cAAc,MAAM,MAAM,IAAI;AAAA,YAC1C,UAAU,uBAAuB,MAAM,MAAM,IAAI;AAAA,YACjD,UAAU;AAAA,UACX;AAAA,QACD;AAEA,gBAAQ;AACR,iBAAS;AAAA,MACV;AAEA,kBAAY,IAAI,YAAY;AAAA,QAC3B,GAAG,KAAK,OAAO,IAAI,QAAQ,IAAI;AAAA,QAC/B,GAAG,KAAK,OAAO,IAAI,SAAS,IAAI;AAAA,QAChC,OAAO,QAAQ;AAAA,QACf,QAAQ,SAAS;AAAA,QACjB,UAAU;AAAA,QACV,SAAS;AAAA,MACV,CAAC;AAAA,IACF;AAEA,WAAO,IAAI,QAAQ;AAAA,MAClB,UAAU,YAAY,CAAC,UAAU,SAAS,IAAI,CAAC,QAAQ;AAAA,MACvD,aAAa;AAAA,IACd,CAAC;AAAA,EACF;AAAA,EAES,WAAW,OAAiC;AACpD,UAAM,OAAO,KAAK,OAAO,aAAa,KAAK;AAC3C,WAAO;AAAA,MACN;AAAA,QACC,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO;AAAA,QACP,GAAG,KAAK,MAAM,OAAO;AAAA,QACrB,GAAG,KAAK,MAAM,OAAO;AAAA,QACrB,SAAS;AAAA,MACV;AAAA,MACA;AAAA,QACC,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO;AAAA,QACP,GAAG,KAAK,OAAO;AAAA,QACf,GAAG,KAAK,OAAO;AAAA,QACf,SAAS;AAAA,MACV;AAAA,MACA;AAAA,QACC,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO;AAAA,QACP,GAAG,KAAK,IAAI,OAAO;AAAA,QACnB,GAAG,KAAK,IAAI,OAAO;AAAA,QACnB,SAAS;AAAA,MACV;AAAA,IACD;AAAA,EACD;AAAA,EAES,iBAAwD,CAChE,OACA,EAAE,QAAQ,UAAU,MAChB;AACJ,UAAM,WAAW,OAAO;AAExB,QAAI,aAAa,UAAU;AAE1B,YAAM,EAAE,OAAO,IAAI,IAAI,8BAA8B,KAAK,QAAQ,KAAK;AAEvE,YAAM,QAAQ,MAAM,IAAI,KAAK,KAAK;AAClC,YAAM,IAAI,MAAM,IAAI,KAAK;AAEzB,YAAM,MAAM,MAAM,IAAI,KAAK,KAAK;AAChC,YAAM,IAAI,MAAM,IAAI,KAAK,CAAC;AAC1B,YAAM,IAAI,MAAM,IAAI,KAAK,CAAC;AAE1B,YAAMA,SAAQ,MAAM,0BAA0B,GAAG,GAAG,QAAQ,KAAK;AACjE,UAAI,OAAO,MAAM,KAAKA,QAAO,GAAG;AAChC,UAAI,MAAM,UAAUA,QAAO,KAAK,GAAG;AAAG,gBAAQ;AAC9C,aAAO,EAAE,IAAI,MAAM,IAAI,MAAM,MAAM,MAAM,OAAO,EAAE,KAAK,EAAE;AAAA,IAC1D;AAIA,UAAM,OAAO,SAAS,KAAK;AAE3B,UAAM,gBAAgB,KAAK,OAAO,sBAAsB,KAAK,EAAE;AAC/D,UAAM,mBAAmB,cAAc,aAAa,MAAM;AAE1D,QAAI,KAAK,OAAO,OAAO,SAAS;AAG/B,WAAK,MAAM,QAAQ,IAAI;AAAA,QACtB,MAAM;AAAA,QACN,GAAG,OAAO;AAAA,QACV,GAAG,OAAO;AAAA,MACX;AACA,aAAO;AAAA,IACR;AAEA,UAAM,QAAQ,KAAK,OAAO,sBAAsB,MAAM,EAAE,EAAG,aAAa,MAAM;AAE9E,UAAM,SAAS,KAAK,OAAO,gBAAgB,OAAO;AAAA,MACjD,WAAW;AAAA,MACX,gBAAgB;AAAA,MAChB,QAAQ;AAAA,MACR,QAAQ,CAAC,gBAAgB;AACxB,eAAO,CAAC,YAAY,YAAY,KAAK,OAAO,aAAa,WAAW,EAAE,QAAQ,WAAW;AAAA,MAC1F;AAAA,IACD,CAAC;AAED,QAAI,CAAC,QAAQ;AAEZ,WAAK,MAAM,QAAQ,IAAI;AAAA,QACtB,MAAM;AAAA,QACN,GAAG,OAAO;AAAA,QACV,GAAG,OAAO;AAAA,MACX;AACA,aAAO;AAAA,IACR;AAIA,UAAM,iBAAiB,KAAK,OAAO,iBAAiB,MAAM;AAC1D,UAAM,eAAe,MAAM,QAAQ,eAAe,MAAM;AACxD,UAAM,qBAAqB,KAAK,OAAO,qBAAqB,QAAQ,gBAAgB;AAEpF,QAAI,UAAU;AAEd,QAAI,CAAC,SAAS;AAEb,YAAM,aAAa,KAAK,MAAM,QAAQ;AACtC,UACC,WAAW,SAAS,WACnB,WAAW,SAAS,aAAa,OAAO,OAAO,WAAW,cAC1D;AACD,kBAAU,KAAK,OAAO,OAAO,gBAAgB,IAAI,IAAI;AAAA,MACtD;AAAA,IACD;AAEA,QAAI,CAAC,WAAW;AACf,UAAI,CAAC,eAAe,UAAU;AAC7B,kBAAU;AAAA,MACX;AAIA,YAAM,cAAc,KAAK,MAAM,aAAa,UAAU,QAAQ,OAAO;AACrE,UACC,YAAY,SAAS,aACrB,OAAO,OAAO,YAAY,gBAC1B,YAAY,WACX;AACD,kBAAU;AAAA,MACX;AAAA,IACD;AAEA,UAAM,mBAAmB;AAAA,MACxB,IAAI,mBAAmB,IAAI,aAAa,QAAQ,aAAa;AAAA,MAC7D,IAAI,mBAAmB,IAAI,aAAa,QAAQ,aAAa;AAAA,IAC9D;AAEA,QAAI,SAAS;AAIZ,UACC,MAAM,KAAK,oBAAoB,aAAa,MAAM,IAClD,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,IAAI,aAAa,OAAO,aAAa,MAAM,IAAI,MAAM,EAAE,CAAC,IACjF,KAAK,OAAO,aAAa,GACzB;AACD,yBAAiB,IAAI;AACrB,yBAAiB,IAAI;AAAA,MACtB;AAAA,IACD;AAEA,SAAK,MAAM,QAAQ,IAAI;AAAA,MACtB,MAAM;AAAA,MACN,cAAc,OAAO;AAAA,MACrB;AAAA,MACA,WAAW;AAAA,MACX,SAAS,KAAK,OAAO,OAAO;AAAA,IAC7B;AAEA,QAAI,KAAK,MAAM,MAAM,SAAS,aAAa,KAAK,MAAM,IAAI,SAAS,WAAW;AAC7E,UAAI,KAAK,MAAM,MAAM,iBAAiB,KAAK,MAAM,IAAI,cAAc;AAClE,YAAI,MAAM,OAAO,KAAK,MAAM,MAAM,kBAAkB,KAAK,MAAM,IAAI,gBAAgB,GAAG;AACrF,eAAK,MAAM,IAAI,iBAAiB,KAAK;AAAA,QACtC;AAAA,MACD;AAAA,IACD;AAEA,WAAO;AAAA,EACR;AAAA,EAES,mBAA4D,CAAC,UAAU;AAC/E,UAAM,iBACL,MAAM,MAAM,MAAM,SAAS,YAAY,MAAM,MAAM,MAAM,eAAe;AACzE,UAAM,eAAe,MAAM,MAAM,IAAI,SAAS,YAAY,MAAM,MAAM,IAAI,eAAe;AAKzF,UAAM,mBAAmB,KAAK,OAAO,oBAAoB;AAEzD,QACE,mBACC,iBAAiB,SAAS,cAAc,KACxC,KAAK,OAAO,mBAAmB,cAAc,MAC9C,iBACC,iBAAiB,SAAS,YAAY,KAAK,KAAK,OAAO,mBAAmB,YAAY,IACvF;AACD;AAAA,IACD;AAEA,UAAM,EAAE,OAAO,IAAI,IAAI,8BAA8B,KAAK,QAAQ,KAAK;AAEvE,WAAO;AAAA,MACN,IAAI,MAAM;AAAA,MACV,MAAM,MAAM;AAAA,MACZ,OAAO;AAAA,QACN,GAAG,MAAM;AAAA,QACT,OAAO;AAAA,UACN,MAAM;AAAA,UACN,GAAG,MAAM;AAAA,UACT,GAAG,MAAM;AAAA,QACV;AAAA,QACA,KAAK;AAAA,UACJ,MAAM;AAAA,UACN,GAAG,IAAI;AAAA,UACP,GAAG,IAAI;AAAA,QACR;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAAA,EAES,WAA4C,CAAC,OAAO,SAAS;AACrE,UAAM,EAAE,QAAQ,OAAO,IAAI;AAE3B,UAAM,YAAY,8BAA8B,KAAK,QAAQ,KAAK;AAElE,UAAM,EAAE,OAAO,IAAI,IAAI,SAAgC,MAAM,KAAK;AAClE,QAAI,EAAE,KAAK,IAAI,MAAM;AAGrB,QAAI,MAAM,SAAS,SAAS;AAC3B,YAAM,IAAI,UAAU,MAAM,IAAI;AAC9B,YAAM,IAAI,UAAU,MAAM,IAAI;AAAA,IAC/B;AAGA,QAAI,IAAI,SAAS,SAAS;AACzB,UAAI,IAAI,UAAU,IAAI,IAAI;AAC1B,UAAI,IAAI,UAAU,IAAI,IAAI;AAAA,IAC3B;AAKA,UAAM,KAAK,KAAK,IAAI,MAAM;AAC1B,UAAM,KAAK,KAAK,IAAI,MAAM;AAE1B,QAAI,SAAS,KAAK,UAAU,GAAG;AAC9B,UAAI,SAAS,GAAG;AACf,gBAAQ;AACR,gBAAQ,KAAK,IAAI,IAAI,EAAE;AAAA,MACxB;AAEA,UAAI,MAAM,SAAS,WAAW;AAC7B,cAAM,iBAAiB,IAAI,IAAI,MAAM,iBAAiB;AAAA,MACvD;AAEA,UAAI,IAAI,SAAS,WAAW;AAC3B,YAAI,iBAAiB,IAAI,IAAI,IAAI,iBAAiB;AAAA,MACnD;AAAA,IACD,WAAW,UAAU,KAAK,SAAS,GAAG;AACrC,UAAI,SAAS,GAAG;AACf,gBAAQ;AACR,gBAAQ,KAAK,IAAI,IAAI,EAAE;AAAA,MACxB;AAEA,UAAI,MAAM,SAAS,WAAW;AAC7B,cAAM,iBAAiB,IAAI,IAAI,MAAM,iBAAiB;AAAA,MACvD;AAEA,UAAI,IAAI,SAAS,WAAW;AAC3B,YAAI,iBAAiB,IAAI,IAAI,IAAI,iBAAiB;AAAA,MACnD;AAAA,IACD,WAAW,UAAU,KAAK,UAAU,GAAG;AACtC,UAAI,SAAS,GAAG;AACf,gBAAQ,KAAK,IAAI,IAAI,EAAE;AAAA,MACxB;AAAA,IACD,WAAW,SAAS,KAAK,SAAS,GAAG;AACpC,UAAI,SAAS,GAAG;AACf,gBAAQ,KAAK,IAAI,IAAI,EAAE;AAAA,MACxB;AAEA,UAAI,MAAM,SAAS,WAAW;AAC7B,cAAM,iBAAiB,IAAI,IAAI,MAAM,iBAAiB;AACtD,cAAM,iBAAiB,IAAI,IAAI,MAAM,iBAAiB;AAAA,MACvD;AAEA,UAAI,IAAI,SAAS,WAAW;AAC3B,YAAI,iBAAiB,IAAI,IAAI,IAAI,iBAAiB;AAClD,YAAI,iBAAiB,IAAI,IAAI,IAAI,iBAAiB;AAAA,MACnD;AAAA,IACD;AAEA,UAAM,OAAO;AAAA,MACZ,OAAO;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,IACD;AAEA,WAAO;AAAA,EACR;AAAA,EAES,sBAAsB,CAC9B,OACA,WACyC;AACzC,YAAQ,OAAO,IAAI;AAAA,MAClB,KAAK,SAAS;AACb,eAAO;AAAA,UACN,IAAI,MAAM;AAAA,UACV,MAAM,MAAM;AAAA,UACZ,OAAO;AAAA,YACN,GAAG,MAAM;AAAA,YACT,gBAAgB,MAAM,MAAM,mBAAmB,SAAS,UAAU;AAAA,UACnE;AAAA,QACD;AAAA,MACD;AAAA,MACA,KAAK,OAAO;AACX,eAAO;AAAA,UACN,IAAI,MAAM;AAAA,UACV,MAAM,MAAM;AAAA,UACZ,OAAO;AAAA,YACN,GAAG,MAAM;AAAA,YACT,cAAc,MAAM,MAAM,iBAAiB,SAAS,UAAU;AAAA,UAC/D;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAAA,EAEA,UAAU,OAAqB;AAG9B,UAAM,QAAQ,qBAAqB;AACnC,UAAM,oBAAoB,KAAK,OAAO,qBAAqB;AAC3D,UAAM,uBACL,KAAK,OAAO;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD,KAAK,CAAC,KAAK,OAAO,iBAAiB,EAAE;AAEtC,UAAM,OAAO,KAAK,OAAO,aAAa,KAAK;AAC3C,UAAM,SAAS,MAAM,QAAQ,KAAK,OAAO,iBAAiB,KAAK,EAAE,MAAM;AAGvE,UAAM,cAAc,MAAM,QAAgB,MAAM;AAC/C,aAAO,KAAK,OAAO,YAAY,WAAY,qBAAqB,IAAK;AAAA,IAEtE,GAAG,CAAC,KAAK,CAAC;AAEV,QAAI,CAAC,MAAM;AAAS,aAAO;AAE3B,UAAM,cAAc,aAAa,MAAM,MAAM,IAAI;AAEjD,UAAM,KAAK,KAAK,MAAM,aAAa,wBAAwB,MAAM,SAAS,WAAW;AACrF,UAAM,KAAK,KAAK,IAAI,aAAa,wBAAwB,MAAM,OAAO,WAAW;AAEjF,UAAM,OAAO,KAAK,aAAa,0BAA0B,IAAI,IAAI,wBAAwB,IAAI;AAE7F,QAAI,aAAiC;AAErC,QAAI,sBAAsB,SAAS,sBAAsB;AACxD,YAAM,KAAK;AACX,YAAM,EAAE,iBAAAC,kBAAiB,kBAAAC,kBAAiB,IAAI;AAAA,QAC7C,KAAK,aACF,MAAM,KAAK,KAAK,MAAM,QAAQ,KAAK,IAAI,MAAM,IAC7C,KAAK,IAAI,KAAK,UAAU,MAAM;AAAA,QACjC;AAAA,QACA;AAAA,UACC,KAAK;AAAA,UACL,OAAO;AAAA,UACP,aAAa;AAAA,QACd;AAAA,MACD;AAEA,mBACC,MAAM,MAAM,MAAM,SAAS,aAAa,MAAM,MAAM,IAAI,SAAS,YAChE;AAAA,QAAC;AAAA;AAAA,UACA,WAAU;AAAA,UACV,GAAG,KAAK,aAAa,2BAA2B,IAAI,IAAI,yBAAyB,IAAI;AAAA,UACrF,iBAAiBD;AAAA,UACjB,kBAAkBC;AAAA,UAClB,aAAa;AAAA,UACb,aACC,MAAM,MAAM,MAAM,SAAS,YACxB,MAAM,MAAM,MAAM,UACjB,KACA,MAAM,MAAM,MAAM,YAClB,0BACA,wBACD;AAAA,UAEJ,WACC,MAAM,MAAM,IAAI,SAAS,YACtB,MAAM,MAAM,IAAI,UACf,KACA,MAAM,MAAM,IAAI,YAChB,0BACA,wBACD;AAAA,UAEJ,SAAS;AAAA;AAAA,MACV,IACG;AAAA,IACN;AAEA,UAAM,EAAE,iBAAiB,iBAAiB,IAAI;AAAA,MAC7C,KAAK,aAAa,KAAK,SAAS,KAAK,IAAI,KAAK,QAAQ,MAAM;AAAA,MAC5D;AAAA,MACA;AAAA,QACC,OAAO,MAAM,MAAM;AAAA,MACpB;AAAA,IACD;AAEA,UAAM,gBAAgB,MAAM,MAAM,KAAK,KAAK,IACxC,KAAK,OAAO,iBAA0B,KAAK,EAAE,SAAS,CAAC,IACxD;AAEH,UAAM,qBAAqB,EAC1B,KAAK,MAAM,cAAc,UAAU,KAAK,MAAM,cAAc;AAE7D,UAAM,mBAAmB,EAAE,KAAK,IAAI,cAAc,UAAU,KAAK,IAAI,cAAc;AAInF,UAAM,UAAU,MAAM,KAAK,WAAW,aAAa,QAAQ,KAAK,GAAG;AAEnE,WACC,iCACC;AAAA,2BAAC,gBAAa,IAAI,MAAM,IAAI,OAAO,EAAE,UAAU,IAAI,WAAW,GAAG,GAEhE;AAAA,4BAAC,UACA,+BAAC,UAAK,IAAI,QACT;AAAA;AAAA,YAAC;AAAA;AAAA,cACA,GAAG,eAAe,OAAO,OAAO,IAAI;AAAA,cACpC,GAAG,eAAe,OAAO,OAAO,IAAI;AAAA,cACpC,OAAO,eAAe,OAAO,QAAQ,GAAG;AAAA,cACxC,QAAQ,eAAe,OAAO,SAAS,GAAG;AAAA,cAC1C,MAAK;AAAA;AAAA,UACN;AAAA,UACC,iBACA;AAAA,YAAC;AAAA;AAAA,cACA,GAAG,cAAc;AAAA,cACjB,GAAG,cAAc;AAAA,cACjB,OAAO,cAAc;AAAA,cACrB,QAAQ,cAAc;AAAA,cACtB,MAAK;AAAA,cACL,IAAI;AAAA,cACJ,IAAI;AAAA;AAAA,UACL;AAAA,UAEA,MAAM,sBACN;AAAA,YAAC;AAAA;AAAA,cACA,GAAG;AAAA,cACH,MAAM,KAAK,MAAM,cAAc,UAAU,SAAS;AAAA,cAClD,QAAO;AAAA;AAAA,UACR;AAAA,UAEA,MAAM,oBACN;AAAA,YAAC;AAAA;AAAA,cACA,GAAG;AAAA,cACH,MAAM,KAAK,IAAI,cAAc,UAAU,SAAS;AAAA,cAChD,QAAO;AAAA;AAAA,UACR;AAAA,WAEF,GACD;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACA,MAAK;AAAA,YACL,QAAQ,MAAM,MAAM,MAAM,KAAK,EAAE;AAAA,YACjC;AAAA,YACA,gBAAe;AAAA,YACf,eAAc;AAAA,YACd,eAAc;AAAA,YAEb;AAAA;AAAA,cAED,qBAAC,OAAE,MAAM,QAAQ,MAAM,KACtB;AAAA;AAAA,kBAAC;AAAA;AAAA,oBACA,GAAG,eAAe,OAAO,OAAO,GAAG;AAAA,oBACnC,GAAG,eAAe,OAAO,OAAO,GAAG;AAAA,oBACnC,OAAO,eAAe,OAAO,QAAQ,GAAG;AAAA,oBACxC,QAAQ,eAAe,OAAO,SAAS,GAAG;AAAA,oBAC1C,SAAS;AAAA;AAAA,gBACV;AAAA,gBACA;AAAA,kBAAC;AAAA;AAAA,oBACA,GAAG;AAAA,oBACH;AAAA,oBACA;AAAA;AAAA,gBACD;AAAA,iBACD;AAAA,cACC,MAAM,sBAAsB,MAAM,MAAM,SAAS,UACjD,oBAAC,aAAU,OAAc,GAAG,IAAI,OAAO,MAAM,MAAM,OAAO,MAAM,MAAM,MAAM,MAAM;AAAA,cAElF,MAAM,oBAAoB,MAAM,MAAM,SAAS,UAC/C,oBAAC,aAAU,OAAc,GAAG,IAAI,OAAO,MAAM,MAAM,OAAO,MAAM,MAAM,MAAM,MAAM;AAAA,cAElF,MAAM,oBAAC,UAAK,GAAG,IAAI;AAAA,cACnB,MAAM,oBAAC,UAAK,GAAG,IAAI;AAAA;AAAA;AAAA,QACrB;AAAA,SACD;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACA,IAAI,MAAM;AAAA,UACV,MAAM,MAAM,MAAM;AAAA,UAClB,MAAM,MAAM,MAAM;AAAA,UAClB,MAAM,MAAM,MAAM;AAAA,UAClB,UAAU,KAAK;AAAA,UACf,OAAO,eAAe,KAAK;AAAA,UAC3B,YAAY,MAAM,MAAM,MAAM,UAAU,EAAE;AAAA;AAAA,MAC3C;AAAA,OACD;AAAA,EAEF;AAAA,EAEA,UAAU,OAAqB;AAC9B,UAAM,EAAE,OAAO,IAAI,IAAI,8BAA8B,KAAK,QAAQ,KAAK;AAEvE,UAAM,OAAO,KAAK,OAAO,aAAa,KAAK;AAC3C,UAAM,WAAW,KAAK,OAAO,iBAA0B,KAAK;AAC5D,UAAM,SAAS,SAAS;AAExB,UAAM,gBAAgB,MAAM,MAAM,KAAK,KAAK,IAAK,SAAS,SAAS,CAAC,IAAoB;AAGxF,UAAM,YAAY,aAAa,MAAM,EAAE;AAEvC,QAAI,CAAC;AAAM,aAAO;AAClB,QAAI,MAAM,OAAO,OAAO,GAAG;AAAG,aAAO;AAErC,UAAM,cAAc,aAAa,MAAM,MAAM,IAAI;AAEjD,UAAM,KAAK,KAAK,MAAM,aAAa,wBAAwB,MAAM,SAAS,WAAW;AACrF,UAAM,KAAK,KAAK,IAAI,aAAa,wBAAwB,MAAM,OAAO,WAAW;AAEjF,UAAM,OAAO,KAAK,aAAa,0BAA0B,IAAI,IAAI,wBAAwB,IAAI;AAE7F,UAAM,cACJ,MAAM,KAAK,MAAM,cAAc,WAC/B,MAAM,KAAK,IAAI,cAAc,WAC9B,CAAC,CAAC;AAEH,UAAM,UAAU,MAAM,KAAK,SAAS,QAAQ,KAAK,GAAG;AAEpD,QAAI,aAAa,eAAe;AAC/B,aACC;AAAA,QAAC;AAAA;AAAA,UACA,GAAG,eAAe,cAAc,CAAC;AAAA,UACjC,GAAG,eAAe,cAAc,CAAC;AAAA,UACjC,OAAO,cAAc;AAAA,UACrB,QAAQ,cAAc;AAAA,UACtB,IAAI;AAAA,UACJ,IAAI;AAAA;AAAA,MACL;AAAA,IAEF;AAEA,WACC,qBAAC,OACC;AAAA,qBACA,oBAAC,UACA,+BAAC,UAAK,IAAI,QACT;AAAA;AAAA,UAAC;AAAA;AAAA,YACA,GAAG,OAAO,OAAO;AAAA,YACjB,GAAG,OAAO,OAAO;AAAA,YACjB,OAAO,OAAO,IAAI;AAAA,YAClB,QAAQ,OAAO,IAAI;AAAA,YACnB,MAAK;AAAA;AAAA,QACN;AAAA,QACC,iBACA;AAAA,UAAC;AAAA;AAAA,YACA,GAAG,eAAe,cAAc,CAAC;AAAA,YACjC,GAAG,eAAe,cAAc,CAAC;AAAA,YACjC,OAAO,cAAc;AAAA,YACrB,QAAQ,cAAc;AAAA,YACtB,MAAK;AAAA,YACL,IAAI;AAAA,YACJ,IAAI;AAAA;AAAA,QACL;AAAA,QAEA,MACA;AAAA,UAAC;AAAA;AAAA,YACA,GAAG;AAAA,YACH,MAAM,KAAK,MAAM,cAAc,UAAU,SAAS;AAAA,YAClD,QAAO;AAAA;AAAA,QACR;AAAA,QAEA,MACA;AAAA,UAAC;AAAA;AAAA,YACA,GAAG;AAAA,YACH,MAAM,KAAK,IAAI,cAAc,UAAU,SAAS;AAAA,YAChD,QAAO;AAAA;AAAA,QACR;AAAA,SAEF,GACD;AAAA,MAGD,qBAAC,OAAG,GAAI,cAAc,EAAE,MAAM,QAAQ,MAAM,IAAI,IAAI,QAElD;AAAA,uBACA;AAAA,UAAC;AAAA;AAAA,YACA,GAAG,OAAO,OAAO;AAAA,YACjB,GAAG,OAAO,OAAO;AAAA,YACjB,OAAO,OAAO,QAAQ;AAAA,YACtB,QAAQ,OAAO,SAAS;AAAA,YACxB,SAAS;AAAA;AAAA,QACV;AAAA,QAGD,oBAAC,UAAK,GAAG,MAAM;AAAA,SAChB;AAAA,MACC,MAAM,oBAAC,UAAK,GAAG,IAAI;AAAA,MACnB,MAAM,oBAAC,UAAK,GAAG,IAAI;AAAA,MACnB,iBACA;AAAA,QAAC;AAAA;AAAA,UACA,GAAG,eAAe,cAAc,CAAC;AAAA,UACjC,GAAG,eAAe,cAAc,CAAC;AAAA,UACjC,OAAO,cAAc;AAAA,UACrB,QAAQ,cAAc;AAAA,UACtB,IAAI;AAAA,UACJ,IAAI;AAAA;AAAA,MACL;AAAA,OAEF;AAAA,EAEF;AAAA,EAES,YAA8C,CAAC,UAAU;AACjE,UAAM;AAAA,MACL;AAAA,MACA;AAAA,MACA,OAAO,EAAE,KAAK;AAAA,IACf,IAAI;AAEJ,QAAI,KAAK,QAAQ,MAAM,MAAM,MAAM,MAAM;AACxC,WAAK,OAAO,aAA2B;AAAA,QACtC;AAAA,UACC;AAAA,UACA;AAAA,UACA,OAAO;AAAA,YACN,MAAM,KAAK,QAAQ;AAAA,UACpB;AAAA,QACD;AAAA,MACD,CAAC;AAAA,IACF;AAAA,EACD;AAAA,EAES,MAAM,OAAqB,KAAuB;AAC1D,UAAM,QAAQ,qBAAqB,EAAE,YAAY,KAAK,OAAO,KAAK,cAAc,EAAE,CAAC;AACnF,QAAI,aAAa,oBAAoB,MAAM,MAAM,MAAM,KAAK,CAAC;AAE7D,UAAM,QAAQ,MAAM,MAAM,MAAM,KAAK,EAAE;AAEvC,UAAM,OAAO,KAAK,OAAO,aAAa,KAAK;AAE3C,UAAM,cAAc,aAAa,MAAM,MAAM,IAAI;AAGjD,UAAM,IAAI,SAAS,gBAAgB,8BAA8B,GAAG;AACpE,QAAI,CAAC;AAAM,aAAO;AAGlB,UAAM,KAAK,KAAK,MAAM,aAAa,wBAAwB,MAAM,SAAS,WAAW;AAErF,UAAM,KAAK,KAAK,IAAI,aAAa,wBAAwB,MAAM,OAAO,WAAW;AAEjF,UAAM,WAAW,KAAK,OAAO,iBAA0B,KAAK;AAC5D,UAAM,SAAS,SAAS;AAExB,UAAM,gBAAgB,MAAM,MAAM,KAAK,KAAK,IAAK,SAAS,SAAS,CAAC,IAAoB;AAExF,UAAM,UAAU,MAAM,KAAK,SAAS,QAAQ,KAAK,GAAG;AAGpD,QAAI,MAAM,MAAM,CAAC,CAAC,eAAe;AAIhC,YAAM,OAAO,SAAS,gBAAgB,8BAA8B,MAAM;AAG1E,YAAM,OAAO,SAAS,gBAAgB,8BAA8B,MAAM;AAC1E,WAAK,KAAK;AAGV,YAAM,OAAO,SAAS,gBAAgB,8BAA8B,MAAM;AAC1E,WAAK,aAAa,KAAK,OAAO,OAAO,MAAM,EAAE;AAC7C,WAAK,aAAa,KAAK,OAAO,OAAO,MAAM,EAAE;AAC7C,WAAK,aAAa,SAAS,OAAO,QAAQ,MAAM,EAAE;AAClD,WAAK,aAAa,UAAU,OAAO,SAAS,MAAM,EAAE;AACpD,WAAK,aAAa,QAAQ,OAAO;AACjC,WAAK,YAAY,IAAI;AAGrB,UAAI;AAAI,aAAK,YAAY,oBAAoB,IAAI,KAAK,MAAM,SAAS,CAAC;AAGtE,UAAI;AAAI,aAAK,YAAY,oBAAoB,IAAI,KAAK,IAAI,SAAS,CAAC;AAGpE,UAAI,eAAe;AAClB,cAAM,YAAY,SAAS,gBAAgB,8BAA8B,MAAM;AAC/E,kBAAU,aAAa,KAAK,cAAc,IAAI,EAAE;AAChD,kBAAU,aAAa,KAAK,cAAc,IAAI,EAAE;AAChD,kBAAU,aAAa,SAAS,cAAc,IAAI,EAAE;AACpD,kBAAU,aAAa,UAAU,cAAc,IAAI,EAAE;AACrD,kBAAU,aAAa,QAAQ,OAAO;AAEtC,aAAK,YAAY,SAAS;AAAA,MAC3B;AAEA,WAAK,YAAY,IAAI;AACrB,QAAE,YAAY,IAAI;AAAA,IACnB;AAEA,UAAM,KAAK,SAAS,gBAAgB,8BAA8B,GAAG;AACrE,OAAG,aAAa,QAAQ,QAAQ,MAAM,GAAG;AACzC,MAAE,YAAY,EAAE;AAGhB,UAAM,QAAQ,SAAS,gBAAgB,8BAA8B,MAAM;AAC3E,UAAM,aAAa,KAAK,MAAM;AAC9B,UAAM,aAAa,KAAK,MAAM;AAC9B,UAAM,aAAa,SAAS,OAAO,QAAQ,MAAM,EAAE;AACnD,UAAM,aAAa,UAAU,OAAO,SAAS,MAAM,EAAE;AACrD,UAAM,aAAa,QAAQ,aAAa;AACxC,UAAM,aAAa,UAAU,MAAM;AACnC,OAAG,YAAY,KAAK;AAGpB,UAAM,OAAO;AAAA,MACZ,KAAK,aAAa,0BAA0B,IAAI,IAAI,wBAAwB,IAAI;AAAA,MAChF;AAAA,MACA;AAAA,IACD;AAEA,UAAM,EAAE,iBAAiB,iBAAiB,IAAI;AAAA,MAC7C,KAAK,aAAa,KAAK,SAAS,KAAK,IAAI,KAAK,QAAQ,MAAM;AAAA,MAC5D;AAAA,MACA;AAAA,QACC,OAAO,MAAM,MAAM;AAAA,MACpB;AAAA,IACD;AAEA,SAAK,aAAa,oBAAoB,eAAe;AACrD,SAAK,aAAa,qBAAqB,gBAAgB;AAEvD,OAAG,YAAY,IAAI;AAGnB,QAAI,IAAI;AACP,QAAE;AAAA,QACD;AAAA,UACC;AAAA,UACA,MAAM,MAAM;AAAA,UACZ;AAAA,UACA,MAAM,MAAM,mBAAmB,UAAU,SAAS,MAAM,MAAM;AAAA,UAC9D;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAEA,QAAI,IAAI;AACP,QAAE;AAAA,QACD;AAAA,UACC;AAAA,UACA,MAAM,MAAM;AAAA,UACZ;AAAA,UACA,MAAM,MAAM,iBAAiB,UAAU,SAAS,MAAM,MAAM;AAAA,UAC5D;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAGA,QAAI,eAAe;AAClB,UAAI,aAAa,oBAAoB,MAAM,MAAM,IAAI,CAAC;AAEtD,YAAM,OAAO;AAAA,QACZ,UAAU,uBAAuB,MAAM,MAAM,IAAI;AAAA,QACjD,YAAY,WAAW;AAAA,QACvB,YAAY,oBAAoB,MAAM,MAAM,IAAI;AAAA,QAChD,SAAS;AAAA,QACT,WAAW;AAAA,QACX,OAAO,cAAc,IAAI;AAAA,QACzB,mBAAmB;AAAA,QACnB,QAAQ,cAAc;AAAA,QACtB,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,UAAU;AAAA,MACX;AAEA,YAAM,UAAU;AAAA,QACf,KAAK;AAAA,QACL,KAAK,OAAO,YAAY,iBAAiB,MAAM,MAAM,MAAM,IAAI;AAAA,QAC/D;AAAA,MACD;AACA,cAAQ,aAAa,QAAQ,MAAM,MAAM,MAAM,UAAU,EAAE,KAAK;AAEhE,YAAM,WAAW,MAAM,KAAK,QAAQ,QAAQ;AAE5C,eAAS,QAAQ,CAAC,UAAU;AAC3B,cAAM,IAAI,WAAW,MAAM,aAAa,GAAG,KAAK,GAAG;AACnD,cAAM,IAAI,WAAW,MAAM,aAAa,GAAG,KAAK,GAAG;AAEnD,cAAM,aAAa,KAAK,IAAI,IAAI,cAAc,IAAI,IAAI;AACtD,cAAM,aAAa,KAAK,IAAI,cAAc,IAAI,IAAI;AAAA,MACnD,CAAC;AAED,YAAM,WAAW,QAAQ,UAAU,IAAI;AACvC,eAAS,aAAa,gBAAgB,GAAG;AACzC,eAAS,aAAa,QAAQ,MAAM,UAAU;AAC9C,eAAS,aAAa,UAAU,MAAM,UAAU;AAEhD,QAAE,YAAY,QAAQ;AACtB,QAAE,YAAY,OAAO;AAAA,IACtB;AAEA,WAAO;AAAA,EACR;AAAA,EAES,mBAA8C;AACtD,WAAO,CAAC,oBAAoB,CAAC;AAAA,EAC9B;AACD;AAEA,SAAS,oBAAoB,GAAW,WAAuC;AAC9E,QAAM,OAAO,SAAS,gBAAgB,8BAA8B,MAAM;AAC1E,OAAK,aAAa,KAAK,CAAC;AACxB,OAAK,aAAa,QAAQ,cAAc,UAAU,SAAS,OAAO;AAClE,OAAK,aAAa,UAAU,MAAM;AAClC,SAAO;AACR;AAEA,SAAS,gBAAgB,GAAW,OAAe,aAAqB;AACvE,QAAM,OAAO,SAAS,gBAAgB,8BAA8B,MAAM;AAC1E,OAAK,aAAa,KAAK,CAAC;AACxB,OAAK,aAAa,QAAQ,MAAM;AAChC,OAAK,aAAa,UAAU,KAAK;AACjC,OAAK,aAAa,gBAAgB,cAAc,EAAE;AAClD,SAAO;AACR;AAEA,SAAS,oBACR,GACA,OACA,aACA,MACA,OACC;AACD,QAAM,OAAO,SAAS,gBAAgB,8BAA8B,MAAM;AAC1E,OAAK,aAAa,KAAK,CAAC;AACxB,OAAK,aAAa,QAAQ,MAAM;AAChC,OAAK,aAAa,UAAU,MAAM,KAAK,EAAE,KAAK;AAC9C,OAAK,aAAa,gBAAgB,cAAc,EAAE;AAGlD,QAAM,YAAY,gBAAgB;AAAA,IACjC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,CAAC;AAED,MAAI,WAAW;AAEd,UAAM,IAAI,SAAS,gBAAgB,8BAA8B,GAAG;AACpE,MAAE,YAAY,SAAS;AACvB,MAAE,YAAY,IAAI;AAClB,WAAO;AAAA,EACR,OAAO;AAEN,WAAO;AAAA,EACR;AACD;",
|
|
4
|
+
"sourcesContent": ["import {\n\tArc2d,\n\tBox2d,\n\tDefaultFontFamilies,\n\tEdge2d,\n\tGroup2d,\n\tRectangle2d,\n\tSVGContainer,\n\tShapeUtil,\n\tSvgExportContext,\n\tTLArrowShape,\n\tTLArrowShapeArrowheadStyle,\n\tTLDefaultColorStyle,\n\tTLDefaultColorTheme,\n\tTLDefaultFillStyle,\n\tTLHandle,\n\tTLOnEditEndHandler,\n\tTLOnHandleChangeHandler,\n\tTLOnResizeHandler,\n\tTLOnTranslateStartHandler,\n\tTLShapePartial,\n\tTLShapeUtilCanvasSvgDef,\n\tTLShapeUtilFlag,\n\tVec2d,\n\tarrowShapeMigrations,\n\tarrowShapeProps,\n\tdeepCopy,\n\tgetArrowTerminalsInArrowSpace,\n\tgetArrowheadPathForType,\n\tgetCurvedArrowHandlePath,\n\tgetDefaultColorTheme,\n\tgetSolidCurvedArrowPath,\n\tgetSolidStraightArrowPath,\n\tgetStraightArrowHandlePath,\n\ttoDomPrecision,\n\tuseIsEditing,\n} from '@bigbluebutton/editor'\nimport React from 'react'\nimport { ShapeFill, getShapeFillSvg, useDefaultColorTheme } from '../shared/ShapeFill'\nimport { createTextSvgElementFromSpans } from '../shared/createTextSvgElementFromSpans'\nimport {\n\tARROW_LABEL_FONT_SIZES,\n\tFONT_FAMILIES,\n\tSTROKE_SIZES,\n\tTEXT_PROPS,\n} from '../shared/default-shape-constants'\nimport {\n\tgetFillDefForCanvas,\n\tgetFillDefForExport,\n\tgetFontDefForExport,\n} from '../shared/defaultStyleDefs'\nimport { getPerfectDashProps } from '../shared/getPerfectDashProps'\nimport { ArrowTextLabel } from './components/ArrowTextLabel'\n\nlet globalRenderIndex = 0\n\nexport const ARROW_END_OFFSET = 0.1\n\n/** @public */\nexport class ArrowShapeUtil extends ShapeUtil<TLArrowShape> {\n\tstatic override type = 'arrow' as const\n\tstatic override props = arrowShapeProps\n\tstatic override migrations = arrowShapeMigrations\n\n\toverride canEdit = () => true\n\toverride canBind = () => false\n\toverride canSnap = () => false\n\toverride hideResizeHandles: TLShapeUtilFlag<TLArrowShape> = () => true\n\toverride hideRotateHandle: TLShapeUtilFlag<TLArrowShape> = () => true\n\toverride hideSelectionBoundsBg: TLShapeUtilFlag<TLArrowShape> = () => true\n\toverride hideSelectionBoundsFg: TLShapeUtilFlag<TLArrowShape> = () => true\n\n\toverride getDefaultProps(): TLArrowShape['props'] {\n\t\treturn {\n\t\t\tdash: 'draw',\n\t\t\tsize: 'm',\n\t\t\tfill: 'none',\n\t\t\tcolor: 'black',\n\t\t\tlabelColor: 'black',\n\t\t\tbend: 0,\n\t\t\tstart: { type: 'point', x: 0, y: 0 },\n\t\t\tend: { type: 'point', x: 2, y: 0 },\n\t\t\tarrowheadStart: 'none',\n\t\t\tarrowheadEnd: 'arrow',\n\t\t\ttext: '',\n\t\t\tfont: 'draw',\n\t\t}\n\t}\n\n\tgetGeometry(shape: TLArrowShape) {\n\t\tconst info = this.editor.getArrowInfo(shape)!\n\n\t\tconst bodyGeom = info.isStraight\n\t\t\t? new Edge2d({\n\t\t\t\t\tstart: Vec2d.From(info.start.point),\n\t\t\t\t\tend: Vec2d.From(info.end.point),\n\t\t\t })\n\t\t\t: new Arc2d({\n\t\t\t\t\tcenter: Vec2d.Cast(info.handleArc.center),\n\t\t\t\t\tradius: info.handleArc.radius,\n\t\t\t\t\tstart: Vec2d.Cast(info.start.point),\n\t\t\t\t\tend: Vec2d.Cast(info.end.point),\n\t\t\t\t\tsweepFlag: info.bodyArc.sweepFlag,\n\t\t\t\t\tlargeArcFlag: info.bodyArc.largeArcFlag,\n\t\t\t })\n\n\t\tlet labelGeom: Rectangle2d | undefined\n\n\t\tif (shape.props.text.trim()) {\n\t\t\tconst bodyBounds = bodyGeom.bounds\n\n\t\t\tconst { w, h } = this.editor.textMeasure.measureText(shape.props.text, {\n\t\t\t\t...TEXT_PROPS,\n\t\t\t\tfontFamily: FONT_FAMILIES[shape.props.font],\n\t\t\t\tfontSize: ARROW_LABEL_FONT_SIZES[shape.props.size],\n\t\t\t\tmaxWidth: null,\n\t\t\t})\n\n\t\t\tlet width = w\n\t\t\tlet height = h\n\n\t\t\tif (bodyBounds.width > bodyBounds.height) {\n\t\t\t\twidth = Math.max(Math.min(w, 64), Math.min(bodyBounds.width - 64, w))\n\n\t\t\t\tconst { w: squishedWidth, h: squishedHeight } = this.editor.textMeasure.measureText(\n\t\t\t\t\tshape.props.text,\n\t\t\t\t\t{\n\t\t\t\t\t\t...TEXT_PROPS,\n\t\t\t\t\t\tfontFamily: FONT_FAMILIES[shape.props.font],\n\t\t\t\t\t\tfontSize: ARROW_LABEL_FONT_SIZES[shape.props.size],\n\t\t\t\t\t\tmaxWidth: width,\n\t\t\t\t\t}\n\t\t\t\t)\n\n\t\t\t\twidth = squishedWidth\n\t\t\t\theight = squishedHeight\n\t\t\t}\n\n\t\t\tif (width > 16 * ARROW_LABEL_FONT_SIZES[shape.props.size]) {\n\t\t\t\twidth = 16 * ARROW_LABEL_FONT_SIZES[shape.props.size]\n\n\t\t\t\tconst { w: squishedWidth, h: squishedHeight } = this.editor.textMeasure.measureText(\n\t\t\t\t\tshape.props.text,\n\t\t\t\t\t{\n\t\t\t\t\t\t...TEXT_PROPS,\n\t\t\t\t\t\tfontFamily: FONT_FAMILIES[shape.props.font],\n\t\t\t\t\t\tfontSize: ARROW_LABEL_FONT_SIZES[shape.props.size],\n\t\t\t\t\t\tmaxWidth: width,\n\t\t\t\t\t}\n\t\t\t\t)\n\n\t\t\t\twidth = squishedWidth\n\t\t\t\theight = squishedHeight\n\t\t\t}\n\n\t\t\tlabelGeom = new Rectangle2d({\n\t\t\t\tx: info.middle.x - width / 2 - 4.25,\n\t\t\t\ty: info.middle.y - height / 2 - 4.25,\n\t\t\t\twidth: width + 8.5,\n\t\t\t\theight: height + 8.5,\n\t\t\t\tisFilled: true,\n\t\t\t\tisLabel: true,\n\t\t\t})\n\t\t}\n\n\t\treturn new Group2d({\n\t\t\tchildren: labelGeom ? [bodyGeom, labelGeom] : [bodyGeom],\n\t\t\tisSnappable: false,\n\t\t})\n\t}\n\n\toverride getHandles(shape: TLArrowShape): TLHandle[] {\n\t\tconst info = this.editor.getArrowInfo(shape)!\n\t\treturn [\n\t\t\t{\n\t\t\t\tid: 'start',\n\t\t\t\ttype: 'vertex',\n\t\t\t\tindex: 'a0',\n\t\t\t\tx: info.start.handle.x,\n\t\t\t\ty: info.start.handle.y,\n\t\t\t\tcanBind: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'middle',\n\t\t\t\ttype: 'virtual',\n\t\t\t\tindex: 'a2',\n\t\t\t\tx: info.middle.x,\n\t\t\t\ty: info.middle.y,\n\t\t\t\tcanBind: false,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'end',\n\t\t\t\ttype: 'vertex',\n\t\t\t\tindex: 'a3',\n\t\t\t\tx: info.end.handle.x,\n\t\t\t\ty: info.end.handle.y,\n\t\t\t\tcanBind: true,\n\t\t\t},\n\t\t]\n\t}\n\n\toverride onHandleChange: TLOnHandleChangeHandler<TLArrowShape> = (\n\t\tshape,\n\t\t{ handle, isPrecise }\n\t) => {\n\t\tconst handleId = handle.id as 'start' | 'middle' | 'end'\n\n\t\tif (handleId === 'middle') {\n\t\t\t// Bending the arrow...\n\t\t\tconst { start, end } = getArrowTerminalsInArrowSpace(this.editor, shape)\n\n\t\t\tconst delta = Vec2d.Sub(end, start)\n\t\t\tconst v = Vec2d.Per(delta)\n\n\t\t\tconst med = Vec2d.Med(end, start)\n\t\t\tconst A = Vec2d.Sub(med, v)\n\t\t\tconst B = Vec2d.Add(med, v)\n\n\t\t\tconst point = Vec2d.NearestPointOnLineSegment(A, B, handle, false)\n\t\t\tlet bend = Vec2d.Dist(point, med)\n\t\t\tif (Vec2d.Clockwise(point, end, med)) bend *= -1\n\t\t\treturn { id: shape.id, type: shape.type, props: { bend } }\n\t\t}\n\n\t\t// Start or end, pointing the arrow...\n\n\t\tconst next = deepCopy(shape) as TLArrowShape\n\n\t\tconst pageTransform = this.editor.getShapePageTransform(next.id)!\n\t\tconst pointInPageSpace = pageTransform.applyToPoint(handle)\n\n\t\tif (this.editor.inputs.ctrlKey) {\n\t\t\t// todo: maybe double check that this isn't equal to the other handle too?\n\t\t\t// Skip binding\n\t\t\tnext.props[handleId] = {\n\t\t\t\ttype: 'point',\n\t\t\t\tx: handle.x,\n\t\t\t\ty: handle.y,\n\t\t\t}\n\t\t\treturn next\n\t\t}\n\n\t\tconst point = this.editor.getShapePageTransform(shape.id)!.applyToPoint(handle)\n\n\t\tconst target = this.editor.getShapeAtPoint(point, {\n\t\t\thitInside: true,\n\t\t\thitFrameInside: true,\n\t\t\tmargin: 0,\n\t\t\tfilter: (targetShape) => {\n\t\t\t\treturn !targetShape.isLocked && this.editor.getShapeUtil(targetShape).canBind(targetShape)\n\t\t\t},\n\t\t})\n\n\t\tif (!target) {\n\t\t\t// todo: maybe double check that this isn't equal to the other handle too?\n\t\t\tnext.props[handleId] = {\n\t\t\t\ttype: 'point',\n\t\t\t\tx: handle.x,\n\t\t\t\ty: handle.y,\n\t\t\t}\n\t\t\treturn next\n\t\t}\n\n\t\t// we've got a target! the handle is being dragged over a shape, bind to it\n\n\t\tconst targetGeometry = this.editor.getShapeGeometry(target)\n\t\tconst targetBounds = Box2d.ZeroFix(targetGeometry.bounds)\n\t\tconst pointInTargetSpace = this.editor.getPointInShapeSpace(target, pointInPageSpace)\n\n\t\tlet precise = isPrecise\n\n\t\tif (!precise) {\n\t\t\t// If we're switching to a new bound shape, then precise only if moving slowly\n\t\t\tconst prevHandle = next.props[handleId]\n\t\t\tif (\n\t\t\t\tprevHandle.type === 'point' ||\n\t\t\t\t(prevHandle.type === 'binding' && target.id !== prevHandle.boundShapeId)\n\t\t\t) {\n\t\t\t\tprecise = this.editor.inputs.pointerVelocity.len() < 0.5\n\t\t\t}\n\t\t}\n\n\t\tif (!isPrecise) {\n\t\t\tif (!targetGeometry.isClosed) {\n\t\t\t\tprecise = true\n\t\t\t}\n\n\t\t\t// Double check that we're not going to be doing an imprecise snap on\n\t\t\t// the same shape twice, as this would result in a zero length line\n\t\t\tconst otherHandle = next.props[handleId === 'start' ? 'end' : 'start']\n\t\t\tif (\n\t\t\t\totherHandle.type === 'binding' &&\n\t\t\t\ttarget.id === otherHandle.boundShapeId &&\n\t\t\t\totherHandle.isPrecise\n\t\t\t) {\n\t\t\t\tprecise = true\n\t\t\t}\n\t\t}\n\n\t\tconst normalizedAnchor = {\n\t\t\tx: (pointInTargetSpace.x - targetBounds.minX) / targetBounds.width,\n\t\t\ty: (pointInTargetSpace.y - targetBounds.minY) / targetBounds.height,\n\t\t}\n\n\t\tif (precise) {\n\t\t\t// Turn off precision if we're within a certain distance to the center of the shape.\n\t\t\t// Funky math but we want the snap distance to be 4 at the minimum and either\n\t\t\t// 16 or 15% of the smaller dimension of the target shape, whichever is smaller\n\t\t\tif (\n\t\t\t\tVec2d.Dist(pointInTargetSpace, targetBounds.center) <\n\t\t\t\tMath.max(4, Math.min(Math.min(targetBounds.width, targetBounds.height) * 0.15, 16)) /\n\t\t\t\t\tthis.editor.getZoomLevel()\n\t\t\t) {\n\t\t\t\tnormalizedAnchor.x = 0.5\n\t\t\t\tnormalizedAnchor.y = 0.5\n\t\t\t}\n\t\t}\n\n\t\tnext.props[handleId] = {\n\t\t\ttype: 'binding',\n\t\t\tboundShapeId: target.id,\n\t\t\tnormalizedAnchor: normalizedAnchor,\n\t\t\tisPrecise: precise,\n\t\t\tisExact: this.editor.inputs.altKey,\n\t\t}\n\n\t\tif (next.props.start.type === 'binding' && next.props.end.type === 'binding') {\n\t\t\tif (next.props.start.boundShapeId === next.props.end.boundShapeId) {\n\t\t\t\tif (Vec2d.Equals(next.props.start.normalizedAnchor, next.props.end.normalizedAnchor)) {\n\t\t\t\t\tnext.props.end.normalizedAnchor.x += 0.05\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn next\n\t}\n\n\toverride onTranslateStart: TLOnTranslateStartHandler<TLArrowShape> = (shape) => {\n\t\tconst startBindingId =\n\t\t\tshape.props.start.type === 'binding' ? shape.props.start.boundShapeId : null\n\t\tconst endBindingId = shape.props.end.type === 'binding' ? shape.props.end.boundShapeId : null\n\n\t\t// If at least one bound shape is in the selection, do nothing;\n\t\t// If no bound shapes are in the selection, unbind any bound shapes\n\n\t\tconst selectedShapeIds = this.editor.getSelectedShapeIds()\n\n\t\tif (\n\t\t\t(startBindingId &&\n\t\t\t\t(selectedShapeIds.includes(startBindingId) ||\n\t\t\t\t\tthis.editor.isAncestorSelected(startBindingId))) ||\n\t\t\t(endBindingId &&\n\t\t\t\t(selectedShapeIds.includes(endBindingId) || this.editor.isAncestorSelected(endBindingId)))\n\t\t) {\n\t\t\treturn\n\t\t}\n\n\t\tconst { start, end } = getArrowTerminalsInArrowSpace(this.editor, shape)\n\n\t\treturn {\n\t\t\tid: shape.id,\n\t\t\ttype: shape.type,\n\t\t\tprops: {\n\t\t\t\t...shape.props,\n\t\t\t\tstart: {\n\t\t\t\t\ttype: 'point',\n\t\t\t\t\tx: start.x,\n\t\t\t\t\ty: start.y,\n\t\t\t\t},\n\t\t\t\tend: {\n\t\t\t\t\ttype: 'point',\n\t\t\t\t\tx: end.x,\n\t\t\t\t\ty: end.y,\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t}\n\n\toverride onResize: TLOnResizeHandler<TLArrowShape> = (shape, info) => {\n\t\tconst { scaleX, scaleY } = info\n\n\t\tconst terminals = getArrowTerminalsInArrowSpace(this.editor, shape)\n\n\t\tconst { start, end } = deepCopy<TLArrowShape['props']>(shape.props)\n\t\tlet { bend } = shape.props\n\n\t\t// Rescale start handle if it's not bound to a shape\n\t\tif (start.type === 'point') {\n\t\t\tstart.x = terminals.start.x * scaleX\n\t\t\tstart.y = terminals.start.y * scaleY\n\t\t}\n\n\t\t// Rescale end handle if it's not bound to a shape\n\t\tif (end.type === 'point') {\n\t\t\tend.x = terminals.end.x * scaleX\n\t\t\tend.y = terminals.end.y * scaleY\n\t\t}\n\n\t\t// todo: we should only change the normalized anchor positions\n\t\t// of the shape's handles if the bound shape is also being resized\n\n\t\tconst mx = Math.abs(scaleX)\n\t\tconst my = Math.abs(scaleY)\n\n\t\tif (scaleX < 0 && scaleY >= 0) {\n\t\t\tif (bend !== 0) {\n\t\t\t\tbend *= -1\n\t\t\t\tbend *= Math.max(mx, my)\n\t\t\t}\n\n\t\t\tif (start.type === 'binding') {\n\t\t\t\tstart.normalizedAnchor.x = 1 - start.normalizedAnchor.x\n\t\t\t}\n\n\t\t\tif (end.type === 'binding') {\n\t\t\t\tend.normalizedAnchor.x = 1 - end.normalizedAnchor.x\n\t\t\t}\n\t\t} else if (scaleX >= 0 && scaleY < 0) {\n\t\t\tif (bend !== 0) {\n\t\t\t\tbend *= -1\n\t\t\t\tbend *= Math.max(mx, my)\n\t\t\t}\n\n\t\t\tif (start.type === 'binding') {\n\t\t\t\tstart.normalizedAnchor.y = 1 - start.normalizedAnchor.y\n\t\t\t}\n\n\t\t\tif (end.type === 'binding') {\n\t\t\t\tend.normalizedAnchor.y = 1 - end.normalizedAnchor.y\n\t\t\t}\n\t\t} else if (scaleX >= 0 && scaleY >= 0) {\n\t\t\tif (bend !== 0) {\n\t\t\t\tbend *= Math.max(mx, my)\n\t\t\t}\n\t\t} else if (scaleX < 0 && scaleY < 0) {\n\t\t\tif (bend !== 0) {\n\t\t\t\tbend *= Math.max(mx, my)\n\t\t\t}\n\n\t\t\tif (start.type === 'binding') {\n\t\t\t\tstart.normalizedAnchor.x = 1 - start.normalizedAnchor.x\n\t\t\t\tstart.normalizedAnchor.y = 1 - start.normalizedAnchor.y\n\t\t\t}\n\n\t\t\tif (end.type === 'binding') {\n\t\t\t\tend.normalizedAnchor.x = 1 - end.normalizedAnchor.x\n\t\t\t\tend.normalizedAnchor.y = 1 - end.normalizedAnchor.y\n\t\t\t}\n\t\t}\n\n\t\tconst next = {\n\t\t\tprops: {\n\t\t\t\tstart,\n\t\t\t\tend,\n\t\t\t\tbend,\n\t\t\t},\n\t\t}\n\n\t\treturn next\n\t}\n\n\toverride onDoubleClickHandle = (\n\t\tshape: TLArrowShape,\n\t\thandle: TLHandle\n\t): TLShapePartial<TLArrowShape> | void => {\n\t\tswitch (handle.id) {\n\t\t\tcase 'start': {\n\t\t\t\treturn {\n\t\t\t\t\tid: shape.id,\n\t\t\t\t\ttype: shape.type,\n\t\t\t\t\tprops: {\n\t\t\t\t\t\t...shape.props,\n\t\t\t\t\t\tarrowheadStart: shape.props.arrowheadStart === 'none' ? 'arrow' : 'none',\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t}\n\t\t\tcase 'end': {\n\t\t\t\treturn {\n\t\t\t\t\tid: shape.id,\n\t\t\t\t\ttype: shape.type,\n\t\t\t\t\tprops: {\n\t\t\t\t\t\t...shape.props,\n\t\t\t\t\t\tarrowheadEnd: shape.props.arrowheadEnd === 'none' ? 'arrow' : 'none',\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tcomponent(shape: TLArrowShape) {\n\t\t// Not a class component, but eslint can't tell that :(\n\t\t// eslint-disable-next-line react-hooks/rules-of-hooks\n\t\tconst theme = useDefaultColorTheme()\n\t\tconst onlySelectedShape = this.editor.getOnlySelectedShape()\n\t\tconst shouldDisplayHandles =\n\t\t\tthis.editor.isInAny(\n\t\t\t\t'select.idle',\n\t\t\t\t'select.pointing_handle',\n\t\t\t\t'select.dragging_handle',\n\t\t\t\t'arrow.dragging'\n\t\t\t) && !this.editor.getInstanceState().isReadonly\n\n\t\tconst info = this.editor.getArrowInfo(shape)\n\t\tconst bounds = Box2d.ZeroFix(this.editor.getShapeGeometry(shape).bounds)\n\n\t\t// eslint-disable-next-line react-hooks/rules-of-hooks\n\t\tconst changeIndex = React.useMemo<number>(() => {\n\t\t\treturn this.editor.environment.isSafari ? (globalRenderIndex += 1) : 0\n\t\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t}, [shape])\n\n\t\tif (!info?.isValid) return null\n\n\t\tconst strokeWidth = STROKE_SIZES[shape.props.size]\n\n\t\tconst as = info.start.arrowhead && getArrowheadPathForType(info, 'start', strokeWidth)\n\t\tconst ae = info.end.arrowhead && getArrowheadPathForType(info, 'end', strokeWidth)\n\n\t\tconst path = info.isStraight ? getSolidStraightArrowPath(info) : getSolidCurvedArrowPath(info)\n\n\t\tlet handlePath: null | React.JSX.Element = null\n\n\t\tif (onlySelectedShape === shape && shouldDisplayHandles) {\n\t\t\tconst sw = 2\n\t\t\tconst { strokeDasharray, strokeDashoffset } = getPerfectDashProps(\n\t\t\t\tinfo.isStraight\n\t\t\t\t\t? Vec2d.Dist(info.start.handle, info.end.handle)\n\t\t\t\t\t: Math.abs(info.handleArc.length),\n\t\t\t\tsw,\n\t\t\t\t{\n\t\t\t\t\tend: 'skip',\n\t\t\t\t\tstart: 'skip',\n\t\t\t\t\tlengthRatio: 2.5,\n\t\t\t\t}\n\t\t\t)\n\n\t\t\thandlePath =\n\t\t\t\tshape.props.start.type === 'binding' || shape.props.end.type === 'binding' ? (\n\t\t\t\t\t<path\n\t\t\t\t\t\tclassName=\"tl-arrow-hint\"\n\t\t\t\t\t\td={info.isStraight ? getStraightArrowHandlePath(info) : getCurvedArrowHandlePath(info)}\n\t\t\t\t\t\tstrokeDasharray={strokeDasharray}\n\t\t\t\t\t\tstrokeDashoffset={strokeDashoffset}\n\t\t\t\t\t\tstrokeWidth={sw}\n\t\t\t\t\t\tmarkerStart={\n\t\t\t\t\t\t\tshape.props.start.type === 'binding'\n\t\t\t\t\t\t\t\t? shape.props.start.isExact\n\t\t\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t\t\t: shape.props.start.isPrecise\n\t\t\t\t\t\t\t\t\t? 'url(#arrowhead-cross)'\n\t\t\t\t\t\t\t\t\t: 'url(#arrowhead-dot)'\n\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmarkerEnd={\n\t\t\t\t\t\t\tshape.props.end.type === 'binding'\n\t\t\t\t\t\t\t\t? shape.props.end.isExact\n\t\t\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t\t\t: shape.props.end.isPrecise\n\t\t\t\t\t\t\t\t\t? 'url(#arrowhead-cross)'\n\t\t\t\t\t\t\t\t\t: 'url(#arrowhead-dot)'\n\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t}\n\t\t\t\t\t\topacity={0.16}\n\t\t\t\t\t/>\n\t\t\t\t) : null\n\t\t}\n\n\t\tconst { strokeDasharray, strokeDashoffset } = getPerfectDashProps(\n\t\t\tinfo.isStraight ? info.length : Math.abs(info.bodyArc.length),\n\t\t\tstrokeWidth,\n\t\t\t{\n\t\t\t\tstyle: shape.props.dash,\n\t\t\t}\n\t\t)\n\n\t\tconst labelGeometry = shape.props.text.trim()\n\t\t\t? (this.editor.getShapeGeometry<Group2d>(shape).children[1] as Rectangle2d)\n\t\t\t: null\n\n\t\tconst maskStartArrowhead = !(\n\t\t\tinfo.start.arrowhead === 'none' || info.start.arrowhead === 'arrow'\n\t\t)\n\t\tconst maskEndArrowhead = !(info.end.arrowhead === 'none' || info.end.arrowhead === 'arrow')\n\n\t\t// NOTE: I know right setting `changeIndex` hacky-as right! But we need this because otherwise safari loses\n\t\t// the mask, see <https://linear.app/tldraw/issue/TLD-1500/changing-arrow-color-makes-line-pass-through-text>\n\t\tconst maskId = (shape.id + '_clip_' + changeIndex).replace(':', '_')\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<SVGContainer id={shape.id} style={{ minWidth: 50, minHeight: 50 }}>\n\t\t\t\t\t{/* Yep */}\n\t\t\t\t\t<defs>\n\t\t\t\t\t\t<mask id={maskId}>\n\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\tx={toDomPrecision(-100 + bounds.minX)}\n\t\t\t\t\t\t\t\ty={toDomPrecision(-100 + bounds.minY)}\n\t\t\t\t\t\t\t\twidth={toDomPrecision(bounds.width + 200)}\n\t\t\t\t\t\t\t\theight={toDomPrecision(bounds.height + 200)}\n\t\t\t\t\t\t\t\tfill=\"white\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t{labelGeometry && (\n\t\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\t\tx={labelGeometry.x}\n\t\t\t\t\t\t\t\t\ty={labelGeometry.y}\n\t\t\t\t\t\t\t\t\twidth={labelGeometry.w}\n\t\t\t\t\t\t\t\t\theight={labelGeometry.h}\n\t\t\t\t\t\t\t\t\tfill=\"black\"\n\t\t\t\t\t\t\t\t\trx={4}\n\t\t\t\t\t\t\t\t\try={4}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{as && maskStartArrowhead && (\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td={as}\n\t\t\t\t\t\t\t\t\tfill={info.start.arrowhead === 'arrow' ? 'none' : 'black'}\n\t\t\t\t\t\t\t\t\tstroke=\"none\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{ae && maskEndArrowhead && (\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td={ae}\n\t\t\t\t\t\t\t\t\tfill={info.end.arrowhead === 'arrow' ? 'none' : 'black'}\n\t\t\t\t\t\t\t\t\tstroke=\"none\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</mask>\n\t\t\t\t\t</defs>\n\t\t\t\t\t<g\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tstroke={theme[shape.props.color].solid}\n\t\t\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\tpointerEvents=\"none\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{handlePath}\n\t\t\t\t\t\t{/* firefox will clip if you provide a maskURL even if there is no mask matching that URL in the DOM */}\n\t\t\t\t\t\t<g mask={`url(#${maskId})`}>\n\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\tx={toDomPrecision(bounds.minX - 100)}\n\t\t\t\t\t\t\t\ty={toDomPrecision(bounds.minY - 100)}\n\t\t\t\t\t\t\t\twidth={toDomPrecision(bounds.width + 200)}\n\t\t\t\t\t\t\t\theight={toDomPrecision(bounds.height + 200)}\n\t\t\t\t\t\t\t\topacity={0}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\td={path}\n\t\t\t\t\t\t\t\tstrokeDasharray={strokeDasharray}\n\t\t\t\t\t\t\t\tstrokeDashoffset={strokeDashoffset}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t\t{as && maskStartArrowhead && shape.props.fill !== 'none' && (\n\t\t\t\t\t\t\t<ShapeFill theme={theme} d={as} color={shape.props.color} fill={shape.props.fill} />\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{ae && maskEndArrowhead && shape.props.fill !== 'none' && (\n\t\t\t\t\t\t\t<ShapeFill theme={theme} d={ae} color={shape.props.color} fill={shape.props.fill} />\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{as && <path d={as} />}\n\t\t\t\t\t\t{ae && <path d={ae} />}\n\t\t\t\t\t</g>\n\t\t\t\t</SVGContainer>\n\t\t\t\t<ArrowTextLabel\n\t\t\t\t\tid={shape.id}\n\t\t\t\t\ttext={shape.props.text}\n\t\t\t\t\tfont={shape.props.font}\n\t\t\t\t\tsize={shape.props.size}\n\t\t\t\t\tposition={info.middle}\n\t\t\t\t\twidth={labelGeometry?.w ?? 0}\n\t\t\t\t\tlabelColor={theme[shape.props.labelColor].solid}\n\t\t\t\t/>\n\t\t\t</>\n\t\t)\n\t}\n\n\tindicator(shape: TLArrowShape) {\n\t\tconst { start, end } = getArrowTerminalsInArrowSpace(this.editor, shape)\n\n\t\tconst info = this.editor.getArrowInfo(shape)\n\t\tconst geometry = this.editor.getShapeGeometry<Group2d>(shape)\n\t\tconst bounds = geometry.bounds\n\n\t\tconst labelGeometry = shape.props.text.trim() ? (geometry.children[1] as Rectangle2d) : null\n\n\t\t// eslint-disable-next-line react-hooks/rules-of-hooks\n\t\tconst isEditing = useIsEditing(shape.id)\n\n\t\tif (!info) return null\n\t\tif (Vec2d.Equals(start, end)) return null\n\n\t\tconst strokeWidth = STROKE_SIZES[shape.props.size]\n\n\t\tconst as = info.start.arrowhead && getArrowheadPathForType(info, 'start', strokeWidth)\n\t\tconst ae = info.end.arrowhead && getArrowheadPathForType(info, 'end', strokeWidth)\n\n\t\tconst path = info.isStraight ? getSolidStraightArrowPath(info) : getSolidCurvedArrowPath(info)\n\n\t\tconst includeMask =\n\t\t\t(as && info.start.arrowhead !== 'arrow') ||\n\t\t\t(ae && info.end.arrowhead !== 'arrow') ||\n\t\t\t!!labelGeometry\n\n\t\tconst maskId = (shape.id + '_clip').replace(':', '_')\n\n\t\tif (isEditing && labelGeometry) {\n\t\t\treturn (\n\t\t\t\t<rect\n\t\t\t\t\tx={toDomPrecision(labelGeometry.x)}\n\t\t\t\t\ty={toDomPrecision(labelGeometry.y)}\n\t\t\t\t\twidth={labelGeometry.w}\n\t\t\t\t\theight={labelGeometry.h}\n\t\t\t\t\trx={3.5}\n\t\t\t\t\try={3.5}\n\t\t\t\t/>\n\t\t\t)\n\t\t}\n\n\t\treturn (\n\t\t\t<g>\n\t\t\t\t{includeMask && (\n\t\t\t\t\t<defs>\n\t\t\t\t\t\t<mask id={maskId}>\n\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\tx={bounds.minX - 100}\n\t\t\t\t\t\t\t\ty={bounds.minY - 100}\n\t\t\t\t\t\t\t\twidth={bounds.w + 200}\n\t\t\t\t\t\t\t\theight={bounds.h + 200}\n\t\t\t\t\t\t\t\tfill=\"white\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t{labelGeometry && (\n\t\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\t\tx={toDomPrecision(labelGeometry.x)}\n\t\t\t\t\t\t\t\t\ty={toDomPrecision(labelGeometry.y)}\n\t\t\t\t\t\t\t\t\twidth={labelGeometry.w}\n\t\t\t\t\t\t\t\t\theight={labelGeometry.h}\n\t\t\t\t\t\t\t\t\tfill=\"black\"\n\t\t\t\t\t\t\t\t\trx={3.5}\n\t\t\t\t\t\t\t\t\try={3.5}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{as && (\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td={as}\n\t\t\t\t\t\t\t\t\tfill={info.start.arrowhead === 'arrow' ? 'none' : 'black'}\n\t\t\t\t\t\t\t\t\tstroke=\"none\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{ae && (\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td={ae}\n\t\t\t\t\t\t\t\t\tfill={info.end.arrowhead === 'arrow' ? 'none' : 'black'}\n\t\t\t\t\t\t\t\t\tstroke=\"none\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</mask>\n\t\t\t\t\t</defs>\n\t\t\t\t)}\n\t\t\t\t{/* firefox will clip if you provide a maskURL even if there is no mask matching that URL in the DOM */}\n\t\t\t\t<g {...(includeMask ? { mask: `url(#${maskId})` } : undefined)}>\n\t\t\t\t\t{/* This rect needs to be here if we're creating a mask due to an svg quirk on Chrome */}\n\t\t\t\t\t{includeMask && (\n\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\tx={bounds.minX - 100}\n\t\t\t\t\t\t\ty={bounds.minY - 100}\n\t\t\t\t\t\t\twidth={bounds.width + 200}\n\t\t\t\t\t\t\theight={bounds.height + 200}\n\t\t\t\t\t\t\topacity={0}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\n\t\t\t\t\t<path d={path} />\n\t\t\t\t</g>\n\t\t\t\t{as && <path d={as} />}\n\t\t\t\t{ae && <path d={ae} />}\n\t\t\t\t{labelGeometry && (\n\t\t\t\t\t<rect\n\t\t\t\t\t\tx={toDomPrecision(labelGeometry.x)}\n\t\t\t\t\t\ty={toDomPrecision(labelGeometry.y)}\n\t\t\t\t\t\twidth={labelGeometry.w}\n\t\t\t\t\t\theight={labelGeometry.h}\n\t\t\t\t\t\trx={3.5}\n\t\t\t\t\t\try={3.5}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</g>\n\t\t)\n\t}\n\n\toverride onEditEnd: TLOnEditEndHandler<TLArrowShape> = (shape) => {\n\t\tconst {\n\t\t\tid,\n\t\t\ttype,\n\t\t\tprops: { text },\n\t\t} = shape\n\n\t\tif (text.trimEnd() !== shape.props.text) {\n\t\t\tthis.editor.updateShapes<TLArrowShape>([\n\t\t\t\t{\n\t\t\t\t\tid,\n\t\t\t\t\ttype,\n\t\t\t\t\tprops: {\n\t\t\t\t\t\ttext: text.trimEnd(),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t])\n\t\t}\n\t}\n\n\toverride toSvg(shape: TLArrowShape, ctx: SvgExportContext) {\n\t\tconst theme = getDefaultColorTheme({ isDarkMode: this.editor.user.getIsDarkMode() })\n\t\tctx.addExportDef(getFillDefForExport(shape.props.fill, theme))\n\n\t\tconst color = theme[shape.props.color].solid\n\n\t\tconst info = this.editor.getArrowInfo(shape)\n\n\t\tconst strokeWidth = STROKE_SIZES[shape.props.size]\n\n\t\t// Group for arrow\n\t\tconst g = document.createElementNS('http://www.w3.org/2000/svg', 'g')\n\t\tif (!info) return g\n\n\t\t// Arrowhead start path\n\t\tconst as = info.start.arrowhead && getArrowheadPathForType(info, 'start', strokeWidth)\n\t\t// Arrowhead end path\n\t\tconst ae = info.end.arrowhead && getArrowheadPathForType(info, 'end', strokeWidth)\n\n\t\tconst geometry = this.editor.getShapeGeometry<Group2d>(shape)\n\t\tconst bounds = geometry.bounds\n\n\t\tconst labelGeometry = shape.props.text.trim() ? (geometry.children[1] as Rectangle2d) : null\n\n\t\tconst maskId = (shape.id + '_clip').replace(':', '_')\n\n\t\t// If we have any arrowheads, then mask the arrowheads\n\t\tif (as || ae || !!labelGeometry) {\n\t\t\t// Create mask for arrowheads\n\n\t\t\t// Create defs\n\t\t\tconst defs = document.createElementNS('http://www.w3.org/2000/svg', 'defs')\n\n\t\t\t// Create mask\n\t\t\tconst mask = document.createElementNS('http://www.w3.org/2000/svg', 'mask')\n\t\t\tmask.id = maskId\n\n\t\t\t// Create large white shape for mask\n\t\t\tconst rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect')\n\t\t\trect.setAttribute('x', bounds.minX - 100 + '')\n\t\t\trect.setAttribute('y', bounds.minY - 100 + '')\n\t\t\trect.setAttribute('width', bounds.width + 200 + '')\n\t\t\trect.setAttribute('height', bounds.height + 200 + '')\n\t\t\trect.setAttribute('fill', 'white')\n\t\t\tmask.appendChild(rect)\n\n\t\t\t// add arrowhead start mask\n\t\t\tif (as) mask.appendChild(getArrowheadSvgMask(as, info.start.arrowhead))\n\n\t\t\t// add arrowhead end mask\n\t\t\tif (ae) mask.appendChild(getArrowheadSvgMask(ae, info.end.arrowhead))\n\n\t\t\t// Mask out text label if text is present\n\t\t\tif (labelGeometry) {\n\t\t\t\tconst labelMask = document.createElementNS('http://www.w3.org/2000/svg', 'rect')\n\t\t\t\tlabelMask.setAttribute('x', labelGeometry.x + '')\n\t\t\t\tlabelMask.setAttribute('y', labelGeometry.y + '')\n\t\t\t\tlabelMask.setAttribute('width', labelGeometry.w + '')\n\t\t\t\tlabelMask.setAttribute('height', labelGeometry.h + '')\n\t\t\t\tlabelMask.setAttribute('fill', 'black')\n\n\t\t\t\tmask.appendChild(labelMask)\n\t\t\t}\n\n\t\t\tdefs.appendChild(mask)\n\t\t\tg.appendChild(defs)\n\t\t}\n\n\t\tconst g2 = document.createElementNS('http://www.w3.org/2000/svg', 'g')\n\t\tg2.setAttribute('mask', `url(#${maskId})`)\n\t\tg.appendChild(g2)\n\n\t\t// Dumb mask fix thing\n\t\tconst rect2 = document.createElementNS('http://www.w3.org/2000/svg', 'rect')\n\t\trect2.setAttribute('x', '-100')\n\t\trect2.setAttribute('y', '-100')\n\t\trect2.setAttribute('width', bounds.width + 200 + '')\n\t\trect2.setAttribute('height', bounds.height + 200 + '')\n\t\trect2.setAttribute('fill', 'transparent')\n\t\trect2.setAttribute('stroke', 'none')\n\t\tg2.appendChild(rect2)\n\n\t\t// Arrowhead body path\n\t\tconst path = getArrowSvgPath(\n\t\t\tinfo.isStraight ? getSolidStraightArrowPath(info) : getSolidCurvedArrowPath(info),\n\t\t\tcolor,\n\t\t\tstrokeWidth\n\t\t)\n\n\t\tconst { strokeDasharray, strokeDashoffset } = getPerfectDashProps(\n\t\t\tinfo.isStraight ? info.length : Math.abs(info.bodyArc.length),\n\t\t\tstrokeWidth,\n\t\t\t{\n\t\t\t\tstyle: shape.props.dash,\n\t\t\t}\n\t\t)\n\n\t\tpath.setAttribute('stroke-dasharray', strokeDasharray)\n\t\tpath.setAttribute('stroke-dashoffset', strokeDashoffset)\n\n\t\tg2.appendChild(path)\n\n\t\t// Arrowhead start path\n\t\tif (as) {\n\t\t\tg.appendChild(\n\t\t\t\tgetArrowheadSvgPath(\n\t\t\t\t\tas,\n\t\t\t\t\tshape.props.color,\n\t\t\t\t\tstrokeWidth,\n\t\t\t\t\tshape.props.arrowheadStart === 'arrow' ? 'none' : shape.props.fill,\n\t\t\t\t\ttheme\n\t\t\t\t)\n\t\t\t)\n\t\t}\n\t\t// Arrowhead end path\n\t\tif (ae) {\n\t\t\tg.appendChild(\n\t\t\t\tgetArrowheadSvgPath(\n\t\t\t\t\tae,\n\t\t\t\t\tshape.props.color,\n\t\t\t\t\tstrokeWidth,\n\t\t\t\t\tshape.props.arrowheadEnd === 'arrow' ? 'none' : shape.props.fill,\n\t\t\t\t\ttheme\n\t\t\t\t)\n\t\t\t)\n\t\t}\n\n\t\t// Text Label\n\t\tif (labelGeometry) {\n\t\t\tctx.addExportDef(getFontDefForExport(shape.props.font))\n\n\t\t\tconst opts = {\n\t\t\t\tfontSize: ARROW_LABEL_FONT_SIZES[shape.props.size],\n\t\t\t\tlineHeight: TEXT_PROPS.lineHeight,\n\t\t\t\tfontFamily: DefaultFontFamilies[shape.props.font],\n\t\t\t\tpadding: 0,\n\t\t\t\ttextAlign: 'middle' as const,\n\t\t\t\twidth: labelGeometry.w - 8,\n\t\t\t\tverticalTextAlign: 'middle' as const,\n\t\t\t\theight: labelGeometry.h,\n\t\t\t\tfontStyle: 'normal',\n\t\t\t\tfontWeight: 'normal',\n\t\t\t\toverflow: 'wrap' as const,\n\t\t\t}\n\n\t\t\tconst textElm = createTextSvgElementFromSpans(\n\t\t\t\tthis.editor,\n\t\t\t\tthis.editor.textMeasure.measureTextSpans(shape.props.text, opts),\n\t\t\t\topts\n\t\t\t)\n\t\t\ttextElm.setAttribute('fill', theme[shape.props.labelColor].solid)\n\n\t\t\tconst children = Array.from(textElm.children) as unknown as SVGTSpanElement[]\n\n\t\t\tchildren.forEach((child) => {\n\t\t\t\tconst x = parseFloat(child.getAttribute('x') || '0')\n\t\t\t\tconst y = parseFloat(child.getAttribute('y') || '0')\n\n\t\t\t\tchild.setAttribute('x', x + 4 + labelGeometry.x + 'px')\n\t\t\t\tchild.setAttribute('y', y + labelGeometry.y + 'px')\n\t\t\t})\n\n\t\t\tconst textBgEl = textElm.cloneNode(true) as SVGTextElement\n\t\t\ttextBgEl.setAttribute('stroke-width', '2')\n\t\t\ttextBgEl.setAttribute('fill', theme.background)\n\t\t\ttextBgEl.setAttribute('stroke', theme.background)\n\n\t\t\tg.appendChild(textBgEl)\n\t\t\tg.appendChild(textElm)\n\t\t}\n\n\t\treturn g\n\t}\n\n\toverride getCanvasSvgDefs(): TLShapeUtilCanvasSvgDef[] {\n\t\treturn [getFillDefForCanvas()]\n\t}\n}\n\nfunction getArrowheadSvgMask(d: string, arrowhead: TLArrowShapeArrowheadStyle) {\n\tconst path = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n\tpath.setAttribute('d', d)\n\tpath.setAttribute('fill', arrowhead === 'arrow' ? 'none' : 'black')\n\tpath.setAttribute('stroke', 'none')\n\treturn path\n}\n\nfunction getArrowSvgPath(d: string, color: string, strokeWidth: number) {\n\tconst path = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n\tpath.setAttribute('d', d)\n\tpath.setAttribute('fill', 'none')\n\tpath.setAttribute('stroke', color)\n\tpath.setAttribute('stroke-width', strokeWidth + '')\n\treturn path\n}\n\nfunction getArrowheadSvgPath(\n\td: string,\n\tcolor: TLDefaultColorStyle,\n\tstrokeWidth: number,\n\tfill: TLDefaultFillStyle,\n\ttheme: TLDefaultColorTheme\n) {\n\tconst path = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n\tpath.setAttribute('d', d)\n\tpath.setAttribute('fill', 'none')\n\tpath.setAttribute('stroke', theme[color].solid)\n\tpath.setAttribute('stroke-width', strokeWidth + '')\n\n\t// Get the fill element, if any\n\tconst shapeFill = getShapeFillSvg({\n\t\td,\n\t\tfill,\n\t\tcolor,\n\t\ttheme,\n\t})\n\n\tif (shapeFill) {\n\t\t// If there is a fill element, return a group containing the fill and the path\n\t\tconst g = document.createElementNS('http://www.w3.org/2000/svg', 'g')\n\t\tg.appendChild(shapeFill)\n\t\tg.appendChild(path)\n\t\treturn g\n\t} else {\n\t\t// Otherwise, just return the path\n\t\treturn path\n\t}\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["point", "strokeDasharray", "strokeDashoffset"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/lib/shapes/poll/PollShapeTool.tsx"],
|
|
4
|
+
"sourcesContent": ["import { BaseBoxShapeTool } from '@bigbluebutton/editor'\n\nexport class PollShapeTool extends BaseBoxShapeTool {\n\tstatic override id = 'poll'\n\tstatic override initial = 'idle'\n\toverride shapeType = 'poll'\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,wBAAwB;AAE1B,MAAM,sBAAsB,iBAAiB;AAAA,EACnD,OAAgB,KAAK;AAAA,EACrB,OAAgB,UAAU;AAAA,EACjB,YAAY;AACtB;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|